This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

c/229: 'gcc: Internal compiler error: program cc1 got fatal signal 11' while compiling c file



>Number:         229
>Category:       c
>Synopsis:       'gcc: Internal compiler error: program cc1 got fatal signal 11' while compiling c file
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Thu May 18 08:36:00 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     Jean Wolter
>Release:        gcc version 2.95.2 20000313 (Debian GNU/Linux)
>Organization:
>Environment:
Linux 2.2.14
Debian GNU/Linux (frozen)
x86
>Description:
gcc catches a signal 11 while compiling the attached 
preprocessed c file. The compilation works fine up to line 
8313. If I add line 8314 (extern inline int setup(void)...)
and the rest of the file the compiler crashes.

I´m not shure whether this is an ice-on-legal or unlegal 
code but 2.7.3 is able to compile this file.
>How-To-Repeat:
compile the attached file using normal 'gcc -c main.i'
>Fix:
no fix known until now
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="main.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="main.i"

IyAxICJpbml0L21haW4uYyIKIAojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xp
bnV4L2NvbmZpZy5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgv
YXV0b2NvbmYuaCIgMQogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAojIDQgIi9ob21lL2p3NS90bXAvbGlu
dXgyMi9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAyCiMgMTQgImluaXQvbWFpbi5jIiAyCiMgMSAi
L2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvcHJvY19mcy5oIiAxCiMgMSAiL2hv
bWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvbWFsbG9jLmgiIDEKIyAxICIvaG9tZS9q
dzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9zbGFiLmgiIDEKIAp0eXBlZGVmIHN0cnVjdCBr
bWVtX2NhY2hlX3Mga21lbV9jYWNoZV90OwojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNs
dWRlL2xpbnV4L21tLmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51
eC9zY2hlZC5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL3BhcmFt
LmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL3BhcmFt
LmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20taTM4Ni9wYXJhbS5o
IiAxCiMgNCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2w0YXJjaC9wYXJhbS5o
IiAyCiMgNCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL3BhcmFtLmgiIDIKIyA0
ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCmV4dGVybiB1
bnNpZ25lZCBsb25nIGdsb2JhbF9ldmVudDsKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5j
bHVkZS9saW51eC9iaW5mbXRzLmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVk
ZS9saW51eC9wdHJhY2UuaCIgMQogCiAKIAojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNs
dWRlL2FzbS9wdHJhY2UuaCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2Fz
bS9sNGFyY2gvcHRyYWNlLmgiIDEKIAogCiAKIApzdHJ1Y3QgcHRfcmVncyB7Cglsb25nIGVieDsK
CWxvbmcgZWN4OwoJbG9uZyBlZHg7Cglsb25nIGVzaTsKCWxvbmcgZWRpOwoJbG9uZyBlYnA7Cgls
b25nIGVheDsKCWxvbmcgb3JpZ19lYXg7Cglsb25nIGVpcDsKCWludCAgX194Y3M7Cglsb25nIGVm
bGFnczsKCWxvbmcgZXNwOwp9OwogCiAKZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9y
ZWdzICopOwojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9wdHJhY2UuaCIg
MgojIDI0ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9wdHJhY2UuaCIgMgoj
IDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaCIgMgojIDEg
Ii9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCIgMQogCiAK
IyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgMSAi
L2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCIgMQojIDEg
Ii9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3N0ZGRlZi5oIiAxCiMgNCAiL2hv
bWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCIgMgogCiAKdHlw
ZWRlZiBzdHJ1Y3QgewoJdW5zaWduZWQgbG9uZyBmZHNfYml0cyBbKDEwMjQgLyAoOCAqIHNpemVv
Zih1bnNpZ25lZCBsb25nKSkgKSBdOwp9IF9fa2VybmVsX2ZkX3NldDsKIAp0eXBlZGVmIHZvaWQg
KCpfX2tlcm5lbF9zaWdoYW5kbGVyX3QpKGludCk7CiAKdHlwZWRlZiBpbnQgX19rZXJuZWxfa2V5
X3Q7CiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzLmgi
IDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL3Bvc2l4X3R5
cGVzLmgiIDEKIAojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS1pMzg2L3Bv
c2l4X3R5cGVzLmgiIDEKIAp0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2Rldl90Owp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfaW5vX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hv
cnQJX19rZXJuZWxfbW9kZV90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX25saW5r
X3Q7CnR5cGVkZWYgbG9uZwkJX19rZXJuZWxfb2ZmX3Q7CnR5cGVkZWYgaW50CQlfX2tlcm5lbF9w
aWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9pcGNfcGlkX3Q7CnR5cGVkZWYg
dW5zaWduZWQgc2hvcnQJX19rZXJuZWxfdWlkX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19r
ZXJuZWxfZ2lkX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX3NpemVfdDsKdHlwZWRl
ZiBpbnQJCV9fa2VybmVsX3NzaXplX3Q7CnR5cGVkZWYgaW50CQlfX2tlcm5lbF9wdHJkaWZmX3Q7
CnR5cGVkZWYgbG9uZwkJX19rZXJuZWxfdGltZV90Owp0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3N1
c2Vjb25kc190Owp0eXBlZGVmIGxvbmcJCV9fa2VybmVsX2Nsb2NrX3Q7CnR5cGVkZWYgaW50CQlf
X2tlcm5lbF9kYWRkcl90Owp0eXBlZGVmIGNoYXIgKgkJX19rZXJuZWxfY2FkZHJfdDsKdHlwZWRl
ZiBsb25nIGxvbmcJX19rZXJuZWxfbG9mZl90Owp0eXBlZGVmIHN0cnVjdCB7CglpbnQJdmFsWzJd
Owp9IF9fa2VybmVsX2ZzaWRfdDsKIyA3MCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUv
YXNtLWkzODYvcG9zaXhfdHlwZXMuaCIKIyA1ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVk
ZS9hc20vbDRhcmNoL3Bvc2l4X3R5cGVzLmgiIDIKIyA0ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIv
aW5jbHVkZS9hc20vcG9zaXhfdHlwZXMuaCIgMgojIDQ2ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIv
aW5jbHVkZS9saW51eC9wb3NpeF90eXBlcy5oIiAyCiMgNCAiL2hvbWUvanc1L3RtcC9saW51eDIy
L2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMgojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNs
dWRlL2FzbS90eXBlcy5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNt
L2w0YXJjaC90eXBlcy5oIiAxCiAKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9h
c20taTM4Ni90eXBlcy5oIiAxCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdW1vZGVfdDsKIAp0eXBl
ZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsKdHlw
ZWRlZiBfX3NpZ25lZF9fIHNob3J0IF9fczE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2
Owp0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Uz
MjsKdHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyBfX3M2NDsKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgX191NjQ7CiAKdHlwZWRlZiBzaWduZWQgY2hhciBzODsKdHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIHU4Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBzMTY7CnR5cGVkZWYgdW5zaWduZWQgc2hv
cnQgdTE2Owp0eXBlZGVmIHNpZ25lZCBpbnQgczMyOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7
CnR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBzNjQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25n
IHU2NDsKIyA1ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL3R5cGVz
LmgiIDIKIyA0ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vdHlwZXMuaCIgMgoj
IDUgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDIKdHlwZWRl
ZiBfX2tlcm5lbF9mZF9zZXQJCWZkX3NldDsKdHlwZWRlZiBfX2tlcm5lbF9kZXZfdAkJZGV2X3Q7
CnR5cGVkZWYgX19rZXJuZWxfaW5vX3QJCWlub190Owp0eXBlZGVmIF9fa2VybmVsX21vZGVfdAkJ
bW9kZV90Owp0eXBlZGVmIF9fa2VybmVsX25saW5rX3QJbmxpbmtfdDsKdHlwZWRlZiBfX2tlcm5l
bF9vZmZfdAkJb2ZmX3Q7CnR5cGVkZWYgX19rZXJuZWxfcGlkX3QJCXBpZF90Owp0eXBlZGVmIF9f
a2VybmVsX3VpZF90CQl1aWRfdDsKdHlwZWRlZiBfX2tlcm5lbF9naWRfdAkJZ2lkX3Q7CnR5cGVk
ZWYgX19rZXJuZWxfZGFkZHJfdAlkYWRkcl90Owp0eXBlZGVmIF9fa2VybmVsX2tleV90CQlrZXlf
dDsKdHlwZWRlZiBfX2tlcm5lbF9zdXNlY29uZHNfdAlzdXNlY29uZHNfdDsKdHlwZWRlZiBfX2tl
cm5lbF9sb2ZmX3QJCWxvZmZfdDsKIAp0eXBlZGVmIF9fa2VybmVsX3NpemVfdAkJc2l6ZV90Owp0
eXBlZGVmIF9fa2VybmVsX3NzaXplX3QJc3NpemVfdDsKdHlwZWRlZiBfX2tlcm5lbF9wdHJkaWZm
X3QJcHRyZGlmZl90Owp0eXBlZGVmIF9fa2VybmVsX3RpbWVfdAkJdGltZV90Owp0eXBlZGVmIF9f
a2VybmVsX2Nsb2NrX3QJY2xvY2tfdDsKdHlwZWRlZiBfX2tlcm5lbF9jYWRkcl90CWNhZGRyX3Q7
CiAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyCQl1X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJ
CXVfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50CQl1X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBs
b25nCQl1X2xvbmc7CiAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyCQl1bmNoYXI7CnR5cGVkZWYgdW5z
aWduZWQgc2hvcnQJCXVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQJCXVpbnQ7CnR5cGVkZWYg
dW5zaWduZWQgbG9uZwkJdWxvbmc7CnR5cGVkZWYJCV9fdTgJCXVfaW50OF90Owp0eXBlZGVmCQlf
X3M4CQlpbnQ4X3Q7CnR5cGVkZWYJCV9fdTE2CQl1X2ludDE2X3Q7CnR5cGVkZWYJCV9fczE2CQlp
bnQxNl90Owp0eXBlZGVmCQlfX3UzMgkJdV9pbnQzMl90Owp0eXBlZGVmCQlfX3MzMgkJaW50MzJf
dDsKdHlwZWRlZgkJX191OAkJdWludDhfdDsKdHlwZWRlZgkJX191MTYJCXVpbnQxNl90Owp0eXBl
ZGVmCQlfX3UzMgkJdWludDMyX3Q7CnR5cGVkZWYJCV9fdTY0CQl1aW50NjRfdDsKdHlwZWRlZgkJ
X191NjQJCXVfaW50NjRfdDsKdHlwZWRlZgkJX19zNjQJCWludDY0X3Q7CiAKc3RydWN0IHVzdGF0
IHsKCV9fa2VybmVsX2RhZGRyX3QJZl90ZnJlZTsKCV9fa2VybmVsX2lub190CQlmX3Rpbm9kZTsK
CWNoYXIJCQlmX2ZuYW1lWzZdOwoJY2hhcgkJCWZfZnBhY2tbNl07Cn07CiMgMTIgIi9ob21lL2p3
NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCIgMgojIDEgIi9ob21lL2p3
NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2ZzLmgiIDEKIAojIDEgIi9ob21lL2p3NS90bXAv
bGludXgyMi9pbmNsdWRlL2xpbnV4L2xpbmthZ2UuaCIgMQojIDUyICIvaG9tZS9qdzUvdG1wL2xp
bnV4MjIvaW5jbHVkZS9saW51eC9saW5rYWdlLmgiCiMgMTAgIi9ob21lL2p3NS90bXAvbGludXgy
Mi9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVk
ZS9saW51eC9saW1pdHMuaCIgMQojIDExICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9s
aW51eC9mcy5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvd2Fp
dC5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL3BhZ2UuaCIgMQoj
IDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvcGFnZS5oIiAxCiAK
IAp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcHRlOyB9IHB0ZV90Owp0eXBlZGVmIHN0
cnVjdCB7IHVuc2lnbmVkIGxvbmcgcG1kOyB9IHBtZF90Owp0eXBlZGVmIHN0cnVjdCB7IHVuc2ln
bmVkIGxvbmcgcGdkOyB9IHBnZF90Owp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdw
cm90OyB9IHBncHJvdF90OwojIDU1ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20v
bDRhcmNoL3BhZ2UuaCIKIAogCiMgNCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNt
L3BhZ2UuaCIgMgojIDExICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC93YWl0
LmgiIDIKc3RydWN0IHdhaXRfcXVldWUgewoJc3RydWN0IHRhc2tfc3RydWN0ICogdGFzazsKCXN0
cnVjdCB3YWl0X3F1ZXVlICogbmV4dDsKfTsKc3RhdGljIGlubGluZSB2b2lkIGluaXRfd2FpdHF1
ZXVlKHN0cnVjdCB3YWl0X3F1ZXVlICoqcSkKewoJKnEgPSAoKHN0cnVjdCB3YWl0X3F1ZXVlICop
KCggcSApLTEpKSA7Cn0Kc3RhdGljIGlubGluZSBpbnQgd2FpdHF1ZXVlX2FjdGl2ZShzdHJ1Y3Qg
d2FpdF9xdWV1ZSAqKnEpCnsKCXN0cnVjdCB3YWl0X3F1ZXVlICpoZWFkID0gKnE7CglyZXR1cm4g
aGVhZCAmJiBoZWFkICE9ICgoc3RydWN0IHdhaXRfcXVldWUgKikoKCBxICktMSkpIDsKfQojIDEy
ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL2hvbWUv
anc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvdmZzLmgiIDEKIyAxICIvaG9tZS9qdzUvdG1w
L2xpbnV4MjIvaW5jbHVkZS9hc20vc3RhdGZzLmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4
MjIvaW5jbHVkZS9hc20vbDRhcmNoL3N0YXRmcy5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9saW51
eDIyL2luY2x1ZGUvYXNtLWkzODYvc3RhdGZzLmgiIDEKdHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QJ
ZnNpZF90OwpzdHJ1Y3Qgc3RhdGZzIHsKCWxvbmcgZl90eXBlOwoJbG9uZyBmX2JzaXplOwoJbG9u
ZyBmX2Jsb2NrczsKCWxvbmcgZl9iZnJlZTsKCWxvbmcgZl9iYXZhaWw7Cglsb25nIGZfZmlsZXM7
Cglsb25nIGZfZmZyZWU7CglfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwoJbG9uZyBmX25hbWVsZW47
Cglsb25nIGZfc3BhcmVbNl07Cn07CiMgNCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUv
YXNtL2w0YXJjaC9zdGF0ZnMuaCIgMgojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRl
L2FzbS9zdGF0ZnMuaCIgMgojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4
L3Zmcy5oIiAyCiMgMTQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2ZzLmgi
IDIKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9uZXQuaCIgMQogCiMg
MSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvc29ja2V0LmgiIDEKIyAxICIv
aG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vc29ja2V0LmgiIDEKIyAxICIvaG9tZS9q
dzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL3NvY2tldC5oIiAxCiAKIyAxICIvaG9t
ZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20taTM4Ni9zb2NrZXQuaCIgMQojIDEgIi9ob21l
L2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9zb2NraW9zLmgiIDEKIyAxICIvaG9tZS9qdzUv
dG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL3NvY2tpb3MuaCIgMQogCiMgMSAiL2hvbWUv
anc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtLWkzODYvc29ja2lvcy5oIiAxCiAKIyA1ICIvaG9t
ZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL3NvY2tpb3MuaCIgMgojIDQgIi9o
b21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9zb2NraW9zLmgiIDIKIyA0ICIvaG9tZS9q
dzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20taTM4Ni9zb2NrZXQuaCIgMgogCiAKIAogCiAKIAoJ
CQkJCSAKCQkJCQkgCgkJCQkJIAoJCQkJCSAKIyA1ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5j
bHVkZS9hc20vbDRhcmNoL3NvY2tldC5oIiAyCiMgNCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2lu
Y2x1ZGUvYXNtL3NvY2tldC5oIiAyCiMgNiAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUv
bGludXgvc29ja2V0LmgiIDIKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51
eC9zb2NraW9zLmgiIDEKIAogCiAKIAoJCSAgICAgCiAKIAogCiAKIAogCiAKIAojIDcgIi9ob21l
L2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIiAyCiMgMSAiL2hvbWUvanc1
L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvdWlvLmgiIDEKIAogCnN0cnVjdCBpb3ZlYwp7Cgl2
b2lkICppb3ZfYmFzZTsJCSAKCV9fa2VybmVsX3NpemVfdCBpb3ZfbGVuOyAgCn07CiAKIAojIDgg
Ii9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIiAyCnR5cGVkZWYg
dW5zaWduZWQgc2hvcnQJc2FfZmFtaWx5X3Q7CiAKIApzdHJ1Y3Qgc29ja2FkZHIgewoJc2FfZmFt
aWx5X3QJc2FfZmFtaWx5OwkgCgljaGFyCQlzYV9kYXRhWzE0XTsJIAp9OwpzdHJ1Y3QgbGluZ2Vy
IHsKCWludAkJbF9vbm9mZjsJIAoJaW50CQlsX2xpbmdlcjsJIAp9OwogCiAKc3RydWN0IG1zZ2hk
ciB7Cgl2b2lkCSoJbXNnX25hbWU7CSAKCWludAkJbXNnX25hbWVsZW47CSAKCXN0cnVjdCBpb3Zl
YyAqCW1zZ19pb3Y7CSAKCV9fa2VybmVsX3NpemVfdAltc2dfaW92bGVuOwkgCgl2b2lkIAkqCW1z
Z19jb250cm9sOwkgCglfX2tlcm5lbF9zaXplX3QJbXNnX2NvbnRyb2xsZW47CSAKCXVuc2lnbmVk
CW1zZ19mbGFnczsKfTsKIApzdHJ1Y3QgY21zZ2hkciB7CglfX2tlcm5lbF9zaXplX3QJY21zZ19s
ZW47CSAKICAgICAgICBpbnQJCWNtc2dfbGV2ZWw7CSAKICAgICAgICBpbnQJCWNtc2dfdHlwZTsJ
IAp9OwogCiAKIAogCiAKZXh0ZXJuIF9faW5saW5lX18gIHN0cnVjdCBjbXNnaGRyICogX19jbXNn
X254dGhkcih2b2lkICpfX2N0bCwgX19rZXJuZWxfc2l6ZV90IF9fc2l6ZSwKCQkJCQkgICAgICAg
c3RydWN0IGNtc2doZHIgKl9fY21zZykKewoJc3RydWN0IGNtc2doZHIgKiBfX3B0cjsKCV9fcHRy
ID0gKHN0cnVjdCBjbXNnaGRyKikoKCh1bnNpZ25lZCBjaGFyICopIF9fY21zZykgKyAgKCAoKCBf
X2Ntc2ctPmNtc2dfbGVuICkrc2l6ZW9mKGxvbmcpLTEpICYgfihzaXplb2YobG9uZyktMSkgKSAp
OwoJaWYgKCh1bnNpZ25lZCBsb25nKSgoY2hhciopKF9fcHRyKzEpIC0gKGNoYXIgKikgX19jdGwp
ID4gX19zaXplKQoJCXJldHVybiAoc3RydWN0IGNtc2doZHIqKTA7CglyZXR1cm4gX19wdHI7Cn0K
ZXh0ZXJuIF9faW5saW5lX18gIHN0cnVjdCBjbXNnaGRyICogY21zZ19ueHRoZHIgKHN0cnVjdCBt
c2doZHIgKl9fbXNnLCBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnKQp7CglyZXR1cm4gX19jbXNnX254
dGhkcihfX21zZy0+bXNnX2NvbnRyb2wsIF9fbXNnLT5tc2dfY29udHJvbGxlbiwgX19jbXNnKTsK
fQogCnN0cnVjdCB1Y3JlZCB7CglfX3UzMglwaWQ7CglfX3UzMgl1aWQ7CglfX3UzMglnaWQ7Cn07
CiAKIAogCiAKIAogCiAKIAogCmV4dGVybiBpbnQgbWVtY3B5X2Zyb21pb3ZlYyh1bnNpZ25lZCBj
aGFyICprZGF0YSwgc3RydWN0IGlvdmVjICppb3YsIGludCBsZW4pOwpleHRlcm4gaW50IG1lbWNw
eV9mcm9taW92ZWNlbmQodW5zaWduZWQgY2hhciAqa2RhdGEsIHN0cnVjdCBpb3ZlYyAqaW92LCAK
CQkJCWludCBvZmZzZXQsIGludCBsZW4pOwpleHRlcm4gaW50IGNzdW1fcGFydGlhbF9jb3B5X2Zy
b21pb3ZlY2VuZCh1bnNpZ25lZCBjaGFyICprZGF0YSwgCgkJCQkJICBzdHJ1Y3QgaW92ZWMgKmlv
diwgCgkJCQkJICBpbnQgb2Zmc2V0LCAKCQkJCQkgIHVuc2lnbmVkIGludCBsZW4sIGludCAqY3N1
bXApOwpleHRlcm4gaW50IHZlcmlmeV9pb3ZlYyhzdHJ1Y3QgbXNnaGRyICptLCBzdHJ1Y3QgaW92
ZWMgKmlvdiwgY2hhciAqYWRkcmVzcywgaW50IG1vZGUpOwpleHRlcm4gaW50IG1lbWNweV90b2lv
dmVjKHN0cnVjdCBpb3ZlYyAqdiwgdW5zaWduZWQgY2hhciAqa2RhdGEsIGludCBsZW4pOwpleHRl
cm4gdm9pZCBtZW1jcHlfdG9rZXJuZWxpb3ZlYyhzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQg
Y2hhciAqa2RhdGEsIGludCBsZW4pOwpleHRlcm4gaW50IG1vdmVfYWRkcl90b191c2VyKHZvaWQg
KmthZGRyLCBpbnQga2xlbiwgdm9pZCAqdWFkZHIsIGludCAqdWxlbik7CmV4dGVybiBpbnQgbW92
ZV9hZGRyX3RvX2tlcm5lbCh2b2lkICp1YWRkciwgaW50IHVsZW4sIHZvaWQgKmthZGRyKTsKZXh0
ZXJuIGludCBwdXRfY21zZyhzdHJ1Y3QgbXNnaGRyKiwgaW50IGxldmVsLCBpbnQgdHlwZSwgaW50
IGxlbiwgdm9pZCAqZGF0YSk7CiMgMjc5ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9s
aW51eC9zb2NrZXQuaCIKIyAyMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgv
bmV0LmgiIDIKc3RydWN0IHBvbGxfdGFibGVfc3RydWN0Owp0eXBlZGVmIGVudW0gewogIFNTX0ZS
RUUgPSAwLAkJCQkgCiAgU1NfVU5DT05ORUNURUQsCQkJIAogIFNTX0NPTk5FQ1RJTkcsCQkJIAog
IFNTX0NPTk5FQ1RFRCwJCQkJIAogIFNTX0RJU0NPTk5FQ1RJTkcJCQkgCn0gc29ja2V0X3N0YXRl
OwpzdHJ1Y3Qgc29ja2V0CnsKCXNvY2tldF9zdGF0ZQkJc3RhdGU7Cgl1bnNpZ25lZCBsb25nCQlm
bGFnczsKCXN0cnVjdCBwcm90b19vcHMJKm9wczsKCXN0cnVjdCBpbm9kZQkJKmlub2RlOwoJc3Ry
dWN0IGZhc3luY19zdHJ1Y3QJKmZhc3luY19saXN0OwkgCglzdHJ1Y3QgZmlsZQkJKmZpbGU7CQkg
CglzdHJ1Y3Qgc29jawkJKnNrOwoJc3RydWN0IHdhaXRfcXVldWUJKndhaXQ7CglzaG9ydAkJCXR5
cGU7Cgl1bnNpZ25lZCBjaGFyCQlwYXNzY3JlZDsKCXVuc2lnbmVkIGNoYXIJCXRsaTsKfTsKc3Ry
dWN0IHNjbV9jb29raWU7CnN0cnVjdCBwcm90b19vcHMgewogIGludAlmYW1pbHk7CiAgaW50CSgq
ZHVwKQkJKHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssIHN0cnVjdCBzb2NrZXQgKm9sZHNvY2spOwog
IGludAkoKnJlbGVhc2UpCShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpwZWVy
KTsKICBpbnQJKCpiaW5kKQkJKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAq
dW15YWRkciwKCQkJIGludCBzb2NrYWRkcl9sZW4pOwogIGludAkoKmNvbm5lY3QpCShzdHJ1Y3Qg
c29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVzZXJ2YWRkciwKCQkJIGludCBzb2NrYWRk
cl9sZW4sIGludCBmbGFncyk7CiAgaW50CSgqc29ja2V0cGFpcikJKHN0cnVjdCBzb2NrZXQgKnNv
Y2sxLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrMik7CiAgaW50CSgqYWNjZXB0KQkoc3RydWN0IHNvY2tl
dCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywKCQkJIGludCBmbGFncyk7CiAgaW50CSgq
Z2V0bmFtZSkJKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsCgkJ
CSBpbnQgKnVzb2NrYWRkcl9sZW4sIGludCBwZWVyKTsKICB1bnNpZ25lZCBpbnQgKCpwb2xsKQko
c3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBwb2xsX3RhYmxl
X3N0cnVjdCAqd2FpdCk7CiAgaW50CSgqaW9jdGwpCShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNp
Z25lZCBpbnQgY21kLAoJCQkgdW5zaWduZWQgbG9uZyBhcmcpOwogIGludAkoKmxpc3RlbikJKHN0
cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZW4pOwogIGludAkoKnNodXRkb3duKQkoc3RydWN0IHNv
Y2tldCAqc29jaywgaW50IGZsYWdzKTsKICBpbnQJKCpzZXRzb2Nrb3B0KQkoc3RydWN0IHNvY2tl
dCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKCQkJIGNoYXIgKm9wdHZhbCwgaW50IG9w
dGxlbik7CiAgaW50CSgqZ2V0c29ja29wdCkJKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZl
bCwgaW50IG9wdG5hbWUsCgkJCSBjaGFyICpvcHR2YWwsIGludCAqb3B0bGVuKTsKICBpbnQJKCpm
Y250bCkJKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsCgkJCSB1bnNpZ25l
ZCBsb25nIGFyZyk7CQogIGludCAgICgqc2VuZG1zZykJKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0
cnVjdCBtc2doZHIgKm0sIGludCB0b3RhbF9sZW4sIHN0cnVjdCBzY21fY29va2llICpzY20pOwog
IGludCAgICgqcmVjdm1zZykJKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0s
IGludCB0b3RhbF9sZW4sIGludCBmbGFncywgc3RydWN0IHNjbV9jb29raWUgKnNjbSk7Cn07CnN0
cnVjdCBuZXRfcHJvdG9fZmFtaWx5IAp7CglpbnQJZmFtaWx5OwoJaW50CSgqY3JlYXRlKShzdHJ1
Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wpOwoJIAoJc2hvcnQJYXV0aGVudGljYXRpb247
CglzaG9ydAllbmNyeXB0aW9uOwoJc2hvcnQJZW5jcnlwdF9uZXQ7Cn07CnN0cnVjdCBuZXRfcHJv
dG8gCnsKCWNvbnN0IGNoYXIgKm5hbWU7CQkgCgl2b2lkICgqaW5pdF9mdW5jKShzdHJ1Y3QgbmV0
X3Byb3RvICopOwkgCn07CmV4dGVybiBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqbmV0X2ZhbWls
aWVzW107CmV4dGVybiBpbnQJc29ja193YWtlX2FzeW5jKHN0cnVjdCBzb2NrZXQgKnNrLCBpbnQg
aG93KTsKZXh0ZXJuIGludAlzb2NrX3JlZ2lzdGVyKHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5ICpm
YW0pOwpleHRlcm4gaW50CXNvY2tfdW5yZWdpc3RlcihpbnQgZmFtaWx5KTsKZXh0ZXJuIHN0cnVj
dCBzb2NrZXQgKnNvY2tfYWxsb2Modm9pZCk7CmV4dGVybiBpbnQJc29ja19jcmVhdGUoaW50IGZh
bWlseSwgaW50IHR5cGUsIGludCBwcm90bywgc3RydWN0IHNvY2tldCAqKik7CmV4dGVybiB2b2lk
CXNvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICopOwpleHRlcm4gaW50ICAgCXNvY2tfc2VuZG1z
ZyhzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBtc2doZHIgKm0sIGludCBsZW4pOwpleHRlcm4gaW50
CXNvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBtc2doZHIgKm0sIGludCBsZW4s
IGludCBmbGFncyk7CmV4dGVybiBpbnQJc29ja19yZWFkdl93cml0ZXYoaW50IHR5cGUsIHN0cnVj
dCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCgkJCQkgIGNvbnN0IHN0cnVjdCBp
b3ZlYyAqIGlvdiwgbG9uZyBjb3VudCwgbG9uZyBzaXplKTsKZXh0ZXJuIGludAluZXRfcmF0ZWxp
bWl0KHZvaWQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBuZXRfcmFuZG9tKHZvaWQpOwpleHRlcm4g
dm9pZCBuZXRfc3JhbmRvbSh1bnNpZ25lZCBsb25nKTsKIyAxNSAiL2hvbWUvanc1L3RtcC9saW51
eDIyL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNs
dWRlL2xpbnV4L2tkZXZfdC5oIiAxCiAKIAp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGtkZXZfdDsK
ZXh0ZXJuIGNoYXIgKiBrZGV2bmFtZShrZGV2X3QpOwkgCiAKc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBpbnQga2Rldl90X3RvX25yKGtkZXZfdCBkZXYpIHsKCXJldHVybiAoKCh1bnNpZ25lZCBpbnQp
ICgoIGRldiApID4+IDggKSkgPDw4KSB8ICgodW5zaWduZWQgaW50KSAoKCBkZXYgKSAmICgoMVUg
PDwgOCApIC0gMSkgKSkgOwp9CnN0YXRpYyBpbmxpbmUga2Rldl90IHRvX2tkZXZfdChpbnQgZGV2
KQp7CglpbnQgbWFqb3IsIG1pbm9yOwoJbWFqb3IgPSAoZGV2ID4+IDgpOwoJbWlub3IgPSAoZGV2
ICYgMHhmZik7CglyZXR1cm4gKCgoIG1ham9yICkgPDwgOCApIHwgKCAgbWlub3IgKSkgOwp9CiMg
MTEzICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9rZGV2X3QuaCIKIyAxNiAi
L2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi9ob21lL2p3
NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2lvY3RsLmgiIDEKIyAxICIvaG9tZS9qdzUvdG1w
L2xpbnV4MjIvaW5jbHVkZS9hc20vaW9jdGwuaCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGludXgy
Mi9pbmNsdWRlL2FzbS9sNGFyY2gvaW9jdGwuaCIgMQogCiMgMSAiL2hvbWUvanc1L3RtcC9saW51
eDIyL2luY2x1ZGUvYXNtLWkzODYvaW9jdGwuaCIgMQogCiAKIAogCiAKIAogCiMgNSAiL2hvbWUv
anc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2w0YXJjaC9pb2N0bC5oIiAyCiMgNCAiL2hvbWUv
anc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2lvY3RsLmgiIDIKIyA0ICIvaG9tZS9qdzUvdG1w
L2xpbnV4MjIvaW5jbHVkZS9saW51eC9pb2N0bC5oIiAyCiMgMTcgIi9ob21lL2p3NS90bXAvbGlu
dXgyMi9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5j
bHVkZS9saW51eC9saXN0LmgiIDEKIApzdHJ1Y3QgbGlzdF9oZWFkIHsKCXN0cnVjdCBsaXN0X2hl
YWQgKm5leHQsICpwcmV2Owp9OwogCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19saXN0X2FkZChz
dHJ1Y3QgbGlzdF9oZWFkICogbmV3LAoJc3RydWN0IGxpc3RfaGVhZCAqIHByZXYsCglzdHJ1Y3Qg
bGlzdF9oZWFkICogbmV4dCkKewoJbmV4dC0+cHJldiA9IG5ldzsKCW5ldy0+bmV4dCA9IG5leHQ7
CgluZXctPnByZXYgPSBwcmV2OwoJcHJldi0+bmV4dCA9IG5ldzsKfQogCnN0YXRpYyBfX2lubGlu
ZV9fIHZvaWQgbGlzdF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqbmV3LCBzdHJ1Y3QgbGlzdF9oZWFk
ICpoZWFkKQp7CglfX2xpc3RfYWRkKG5ldywgaGVhZCwgaGVhZC0+bmV4dCk7Cn0KIApzdGF0aWMg
X19pbmxpbmVfXyB2b2lkIF9fbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqIHByZXYsCgkJCQkg
IHN0cnVjdCBsaXN0X2hlYWQgKiBuZXh0KQp7CgluZXh0LT5wcmV2ID0gcHJldjsKCXByZXYtPm5l
eHQgPSBuZXh0Owp9CnN0YXRpYyBfX2lubGluZV9fIHZvaWQgbGlzdF9kZWwoc3RydWN0IGxpc3Rf
aGVhZCAqZW50cnkpCnsKCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKfQpz
dGF0aWMgX19pbmxpbmVfXyBpbnQgbGlzdF9lbXB0eShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQp7
CglyZXR1cm4gaGVhZC0+bmV4dCA9PSBoZWFkOwp9CiAKc3RhdGljIF9faW5saW5lX18gdm9pZCBs
aXN0X3NwbGljZShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFk
KQp7CglzdHJ1Y3QgbGlzdF9oZWFkICpmaXJzdCA9IGxpc3QtPm5leHQ7CglpZiAoZmlyc3QgIT0g
bGlzdCkgewoJCXN0cnVjdCBsaXN0X2hlYWQgKmxhc3QgPSBsaXN0LT5wcmV2OwoJCXN0cnVjdCBs
aXN0X2hlYWQgKmF0ID0gaGVhZC0+bmV4dDsKCQlmaXJzdC0+cHJldiA9IGhlYWQ7CgkJaGVhZC0+
bmV4dCA9IGZpcnN0OwoJCWxhc3QtPm5leHQgPSBhdDsKCQlhdC0+cHJldiA9IGxhc3Q7Cgl9Cn0K
IyAxOCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi9o
b21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIiAxCiAKIApzdHJ1Y3Qg
cXN0ciB7Cgljb25zdCB1bnNpZ25lZCBjaGFyICogbmFtZTsKCXVuc2lnbmVkIGludCBsZW47Cgl1
bnNpZ25lZCBpbnQgaGFzaDsKfTsKIAogCnN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcg
cGFydGlhbF9uYW1lX2hhc2godW5zaWduZWQgbG9uZyBjLCB1bnNpZ25lZCBsb25nIHByZXZoYXNo
KQp7CglwcmV2aGFzaCA9IChwcmV2aGFzaCA8PCA0KSB8IChwcmV2aGFzaCA+PiAoOCpzaXplb2Yo
dW5zaWduZWQgbG9uZyktNCkpOwoJcmV0dXJuIHByZXZoYXNoIF4gYzsKfQogCnN0YXRpYyBfX2lu
bGluZV9fIHVuc2lnbmVkIGxvbmcgZW5kX25hbWVfaGFzaCh1bnNpZ25lZCBsb25nIGhhc2gpCnsK
CWlmIChzaXplb2YoaGFzaCkgPiBzaXplb2YodW5zaWduZWQgaW50KSkKCQloYXNoICs9IGhhc2gg
Pj4gNCpzaXplb2YoaGFzaCk7CglyZXR1cm4gKHVuc2lnbmVkIGludCkgaGFzaDsKfQogCnN0YXRp
YyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBmdWxsX25hbWVfaGFzaChjb25zdCB1bnNpZ25lZCBj
aGFyICogbmFtZSwgdW5zaWduZWQgaW50IGxlbikKewoJdW5zaWduZWQgbG9uZyBoYXNoID0gMCA7
Cgl3aGlsZSAobGVuLS0pCgkJaGFzaCA9IHBhcnRpYWxfbmFtZV9oYXNoKCpuYW1lKyssIGhhc2gp
OwoJcmV0dXJuIGVuZF9uYW1lX2hhc2goaGFzaCk7Cn0Kc3RydWN0IGRlbnRyeSB7CglpbnQgZF9j
b3VudDsKCXVuc2lnbmVkIGludCBkX2ZsYWdzOwoJc3RydWN0IGlub2RlICAqIGRfaW5vZGU7CSAK
CXN0cnVjdCBkZW50cnkgKiBkX3BhcmVudDsJIAoJc3RydWN0IGRlbnRyeSAqIGRfbW91bnRzOwkg
CglzdHJ1Y3QgZGVudHJ5ICogZF9jb3ZlcnM7CglzdHJ1Y3QgbGlzdF9oZWFkIGRfaGFzaDsJIAoJ
c3RydWN0IGxpc3RfaGVhZCBkX2xydTsJCSAKCXN0cnVjdCBsaXN0X2hlYWQgZF9jaGlsZDsJIAoJ
c3RydWN0IGxpc3RfaGVhZCBkX3N1YmRpcnM7CSAKCXN0cnVjdCBsaXN0X2hlYWQgZF9hbGlhczsJ
IAoJc3RydWN0IHFzdHIgZF9uYW1lOwoJdW5zaWduZWQgbG9uZyBkX3RpbWU7CQkgCglzdHJ1Y3Qg
ZGVudHJ5X29wZXJhdGlvbnMgICpkX29wOwoJc3RydWN0IHN1cGVyX2Jsb2NrICogZF9zYjsJIAoJ
dW5zaWduZWQgbG9uZyBkX3JlZnRpbWU7CSAKCXZvaWQgKiBkX2ZzZGF0YTsJCSAKCXVuc2lnbmVk
IGNoYXIgZF9pbmFtZVsxNiBdOyAgCn07CnN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB7CglpbnQg
KCpkX3JldmFsaWRhdGUpKHN0cnVjdCBkZW50cnkgKiwgaW50KTsKCWludCAoKmRfaGFzaCkgKHN0
cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CglpbnQgKCpkX2NvbXBhcmUpIChzdHJ1Y3Qg
ZGVudHJ5ICosIHN0cnVjdCBxc3RyICosIHN0cnVjdCBxc3RyICopOwoJdm9pZCAoKmRfZGVsZXRl
KShzdHJ1Y3QgZGVudHJ5ICopOwoJdm9pZCAoKmRfcmVsZWFzZSkoc3RydWN0IGRlbnRyeSAqKTsK
CXZvaWQgKCpkX2lwdXQpKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopOwp9OwogCiAK
IApzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRfZHJvcChzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KQp7
CglsaXN0X2RlbCgmZGVudHJ5LT5kX2hhc2gpOwoJZG8geyAoICZkZW50cnktPmRfaGFzaCApLT5u
ZXh0ID0gKCAmZGVudHJ5LT5kX2hhc2ggKTsgKCAmZGVudHJ5LT5kX2hhc2ggKS0+cHJldiA9ICgg
JmRlbnRyeS0+ZF9oYXNoICk7IH0gd2hpbGUgKDApIDsKfQpzdGF0aWMgX19pbmxpbmVfXyBpbnQg
ZG5hbWVfZXh0ZXJuYWwoc3RydWN0IGRlbnRyeSAqZCkKewoJcmV0dXJuIGQtPmRfbmFtZS5uYW1l
ICE9IGQtPmRfaW5hbWU7IAp9CiAKZXh0ZXJuIHZvaWQgZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVu
dHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgZF9kZWxldGUoc3RydWN0IGRlbnRy
eSAqKTsKIApleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2Moc3RydWN0IGRlbnRyeSAqIHBh
cmVudCwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpOwpleHRlcm4gaW50IHBydW5lX2RjYWNoZShp
bnQsIGludCk7CmV4dGVybiB2b2lkIHNocmlua19kY2FjaGVfc2Ioc3RydWN0IHN1cGVyX2Jsb2Nr
ICopOwpleHRlcm4gdm9pZCBzaHJpbmtfZGNhY2hlX3BhcmVudChzdHJ1Y3QgZGVudHJ5ICopOwpl
eHRlcm4gaW50IGRfaW52YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICopOwogCmV4dGVybiB2b2lkIHNo
cmlua19kY2FjaGVfbWVtb3J5KGludCwgdW5zaWduZWQgaW50KTsKZXh0ZXJuIHZvaWQgY2hlY2tf
ZGNhY2hlX21lbW9yeSh2b2lkKTsKZXh0ZXJuIHZvaWQgZnJlZV9pbm9kZV9tZW1vcnkoaW50KTsJ
IAogCmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY19yb290KHN0cnVjdCBpbm9kZSAqIHJv
b3RfaW5vZGUsIHN0cnVjdCBkZW50cnkgKiBvbGRfcm9vdCk7CiAKZXh0ZXJuIGludCBpc19yb290
X2J1c3koc3RydWN0IGRlbnRyeSAqKTsKIApleHRlcm4gaW50IGhhdmVfc3VibW91bnRzKHN0cnVj
dCBkZW50cnkgKik7CiAKZXh0ZXJuIHZvaWQgZF9yZWhhc2goc3RydWN0IGRlbnRyeSAqIGVudHJ5
KTsKIApzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRfYWRkKHN0cnVjdCBkZW50cnkgKiBlbnRyeSwg
c3RydWN0IGlub2RlICogaW5vZGUpCnsKCWRfcmVoYXNoKGVudHJ5KTsKCWRfaW5zdGFudGlhdGUo
ZW50cnksIGlub2RlKTsKfQogCmV4dGVybiB2b2lkIGRfbW92ZShzdHJ1Y3QgZGVudHJ5ICogZW50
cnksIHN0cnVjdCBkZW50cnkgKiBuZXdkZW50cnkpOwogCmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICog
ZF9sb29rdXAoc3RydWN0IGRlbnRyeSAqIGRpciwgc3RydWN0IHFzdHIgKiBuYW1lKTsKIApleHRl
cm4gaW50IGRfdmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICpk
cGFyZW50LAoJCSAgICAgIHVuc2lnbmVkIGludCBoYXNoLCB1bnNpZ25lZCBpbnQgbGVuKTsKIApl
eHRlcm4gY2hhciAqIGRfcGF0aChzdHJ1Y3QgZGVudHJ5ICogZW50cnksIGNoYXIgKiBidWYsIGlu
dCBidWZsZW4pOwogCnN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBkZW50cnkgKiBkZ2V0KHN0cnVj
dCBkZW50cnkgKmRlbnRyeSkKewoJaWYgKGRlbnRyeSkKCQlkZW50cnktPmRfY291bnQrKzsKCXJl
dHVybiBkZW50cnk7Cn0KZXh0ZXJuIHZvaWQgZHB1dChzdHJ1Y3QgZGVudHJ5ICopOwojIDE5ICIv
aG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL2hvbWUvanc1
L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvc3RhdC5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9s
aW51eDIyL2luY2x1ZGUvYXNtL3N0YXQuaCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9p
bmNsdWRlL2FzbS9sNGFyY2gvc3RhdC5oIiAxCiAKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIv
aW5jbHVkZS9hc20taTM4Ni9zdGF0LmgiIDEKc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IHsKCXVu
c2lnbmVkIHNob3J0IHN0X2RldjsKCXVuc2lnbmVkIHNob3J0IHN0X2lubzsKCXVuc2lnbmVkIHNo
b3J0IHN0X21vZGU7Cgl1bnNpZ25lZCBzaG9ydCBzdF9ubGluazsKCXVuc2lnbmVkIHNob3J0IHN0
X3VpZDsKCXVuc2lnbmVkIHNob3J0IHN0X2dpZDsKCXVuc2lnbmVkIHNob3J0IHN0X3JkZXY7Cgl1
bnNpZ25lZCBsb25nICBzdF9zaXplOwoJdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7Cgl1bnNpZ25l
ZCBsb25nICBzdF9tdGltZTsKCXVuc2lnbmVkIGxvbmcgIHN0X2N0aW1lOwp9OwpzdHJ1Y3Qgc3Rh
dCB7Cgl1bnNpZ25lZCBzaG9ydCBzdF9kZXY7Cgl1bnNpZ25lZCBzaG9ydCBfX3BhZDE7Cgl1bnNp
Z25lZCBsb25nIHN0X2lubzsKCXVuc2lnbmVkIHNob3J0IHN0X21vZGU7Cgl1bnNpZ25lZCBzaG9y
dCBzdF9ubGluazsKCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKCXVuc2lnbmVkIHNob3J0IHN0X2dp
ZDsKCXVuc2lnbmVkIHNob3J0IHN0X3JkZXY7Cgl1bnNpZ25lZCBzaG9ydCBfX3BhZDI7Cgl1bnNp
Z25lZCBsb25nICBzdF9zaXplOwoJdW5zaWduZWQgbG9uZyAgc3RfYmxrc2l6ZTsKCXVuc2lnbmVk
IGxvbmcgIHN0X2Jsb2NrczsKCXVuc2lnbmVkIGxvbmcgIHN0X2F0aW1lOwoJdW5zaWduZWQgbG9u
ZyAgX191bnVzZWQxOwoJdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7Cgl1bnNpZ25lZCBsb25nICBf
X3VudXNlZDI7Cgl1bnNpZ25lZCBsb25nICBzdF9jdGltZTsKCXVuc2lnbmVkIGxvbmcgIF9fdW51
c2VkMzsKCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNDsKCXVuc2lnbmVkIGxvbmcgIF9fdW51c2Vk
NTsKfTsKIyA1ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL3N0YXQu
aCIgMgojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9zdGF0LmgiIDIKIyA2
ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9zdGF0LmgiIDIKIyAyMCAiL2hv
bWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi9ob21lL2p3NS90
bXAvbGludXgyMi9pbmNsdWRlL2FzbS9hdG9taWMuaCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGlu
dXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvYXRvbWljLmgiIDEKIAojIDEgIi9ob21lL2p3NS90bXAv
bGludXgyMi9pbmNsdWRlL2FzbS1pMzg2L2F0b21pYy5oIiAxCiAKIAp0eXBlZGVmIHN0cnVjdCB7
IGludCBjb3VudGVyOyB9IGF0b21pY190OwpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19h
ZGQoaW50IGksIHZvbGF0aWxlIGF0b21pY190ICp2KQp7CglfX2FzbV9fIF9fdm9sYXRpbGVfXygK
CQkiIiAgImFkZGwgJTEsJTAiCgkJOiI9bSIgKCgqKHZvbGF0aWxlIHN0cnVjdCB7IGludCBhWzEw
MF07IH0gKikgdiApICkKCQk6ImlyIiAoaSksICJtIiAoKCoodm9sYXRpbGUgc3RydWN0IHsgaW50
IGFbMTAwXTsgfSAqKSB2ICkgKSk7Cn0Kc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfc3Vi
KGludCBpLCB2b2xhdGlsZSBhdG9taWNfdCAqdikKewoJX19hc21fXyBfX3ZvbGF0aWxlX18oCgkJ
IiIgICJzdWJsICUxLCUwIgoJCToiPW0iICgoKih2b2xhdGlsZSBzdHJ1Y3QgeyBpbnQgYVsxMDBd
OyB9ICopIHYgKSApCgkJOiJpciIgKGkpLCAibSIgKCgqKHZvbGF0aWxlIHN0cnVjdCB7IGludCBh
WzEwMF07IH0gKikgdiApICkpOwp9CnN0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2luYyh2
b2xhdGlsZSBhdG9taWNfdCAqdikKewoJX19hc21fXyBfX3ZvbGF0aWxlX18oCgkJIiIgICJpbmNs
ICUwIgoJCToiPW0iICgoKih2b2xhdGlsZSBzdHJ1Y3QgeyBpbnQgYVsxMDBdOyB9ICopIHYgKSAp
CgkJOiJtIiAoKCoodm9sYXRpbGUgc3RydWN0IHsgaW50IGFbMTAwXTsgfSAqKSB2ICkgKSk7Cn0K
c3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfZGVjKHZvbGF0aWxlIGF0b21pY190ICp2KQp7
CglfX2FzbV9fIF9fdm9sYXRpbGVfXygKCQkiIiAgImRlY2wgJTAiCgkJOiI9bSIgKCgqKHZvbGF0
aWxlIHN0cnVjdCB7IGludCBhWzEwMF07IH0gKikgdiApICkKCQk6Im0iICgoKih2b2xhdGlsZSBz
dHJ1Y3QgeyBpbnQgYVsxMDBdOyB9ICopIHYgKSApKTsKfQpzdGF0aWMgX19pbmxpbmVfXyBpbnQg
YXRvbWljX2RlY19hbmRfdGVzdCh2b2xhdGlsZSBhdG9taWNfdCAqdikKewoJdW5zaWduZWQgY2hh
ciBjOwoJX19hc21fXyBfX3ZvbGF0aWxlX18oCgkJIiIgICJkZWNsICUwOyBzZXRlICUxIgoJCToi
PW0iICgoKih2b2xhdGlsZSBzdHJ1Y3QgeyBpbnQgYVsxMDBdOyB9ICopIHYgKSApLCAiPXFtIiAo
YykKCQk6Im0iICgoKih2b2xhdGlsZSBzdHJ1Y3QgeyBpbnQgYVsxMDBdOyB9ICopIHYgKSApKTsK
CXJldHVybiBjICE9IDA7Cn0KZXh0ZXJuIF9faW5saW5lX18gaW50IGF0b21pY19pbmNfYW5kX3Rl
c3RfZ3JlYXRlcl96ZXJvKHZvbGF0aWxlIGF0b21pY190ICp2KQp7Cgl1bnNpZ25lZCBjaGFyIGM7
CglfX2FzbV9fIF9fdm9sYXRpbGVfXygKCQkiIiAgImluY2wgJTA7IHNldGcgJTEiCgkJOiI9bSIg
KCgqKHZvbGF0aWxlIHN0cnVjdCB7IGludCBhWzEwMF07IH0gKikgdiApICksICI9cW0iIChjKQoJ
CToibSIgKCgqKHZvbGF0aWxlIHN0cnVjdCB7IGludCBhWzEwMF07IH0gKikgdiApICkpOwoJcmV0
dXJuIGM7ICAKfQogCiMgNSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2w0YXJj
aC9hdG9taWMuaCIgMgojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9hdG9t
aWMuaCIgMgojIDIyICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9mcy5oIiAy
CiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvYml0b3BzLmgiIDEKIApl
eHRlcm4gX19pbmxpbmVfXyBpbnQgZ2VuZXJpY19mZnMoaW50IHgpCnsKCWludCByID0gMTsKCWlm
ICgheCkKCQlyZXR1cm4gMDsKCWlmICghKHggJiAweGZmZmYpKSB7CgkJeCA+Pj0gMTY7CgkJciAr
PSAxNjsKCX0KCWlmICghKHggJiAweGZmKSkgewoJCXggPj49IDg7CgkJciArPSA4OwoJfQoJaWYg
KCEoeCAmIDB4ZikpIHsKCQl4ID4+PSA0OwoJCXIgKz0gNDsKCX0KCWlmICghKHggJiAzKSkgewoJ
CXggPj49IDI7CgkJciArPSAyOwoJfQoJaWYgKCEoeCAmIDEpKSB7CgkJeCA+Pj0gMTsKCQlyICs9
IDE7Cgl9CglyZXR1cm4gcjsKfQogCmV4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGludCBnZW5l
cmljX2h3ZWlnaHQzMih1bnNpZ25lZCBpbnQgdykKewogICAgICAgIHVuc2lnbmVkIGludCByZXMg
PSAodyAmIDB4NTU1NTU1NTUpICsgKCh3ID4+IDEpICYgMHg1NTU1NTU1NSk7CiAgICAgICAgcmVz
ID0gKHJlcyAmIDB4MzMzMzMzMzMpICsgKChyZXMgPj4gMikgJiAweDMzMzMzMzMzKTsKICAgICAg
ICByZXMgPSAocmVzICYgMHgwRjBGMEYwRikgKyAoKHJlcyA+PiA0KSAmIDB4MEYwRjBGMEYpOwog
ICAgICAgIHJlcyA9IChyZXMgJiAweDAwRkYwMEZGKSArICgocmVzID4+IDgpICYgMHgwMEZGMDBG
Rik7CiAgICAgICAgcmV0dXJuIChyZXMgJiAweDAwMDBGRkZGKSArICgocmVzID4+IDE2KSAmIDB4
MDAwMEZGRkYpOwp9CmV4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGludCBnZW5lcmljX2h3ZWln
aHQxNih1bnNpZ25lZCBpbnQgdykKewogICAgICAgIHVuc2lnbmVkIGludCByZXMgPSAodyAmIDB4
NTU1NSkgKyAoKHcgPj4gMSkgJiAweDU1NTUpOwogICAgICAgIHJlcyA9IChyZXMgJiAweDMzMzMp
ICsgKChyZXMgPj4gMikgJiAweDMzMzMpOwogICAgICAgIHJlcyA9IChyZXMgJiAweDBGMEYpICsg
KChyZXMgPj4gNCkgJiAweDBGMEYpOwogICAgICAgIHJldHVybiAocmVzICYgMHgwMEZGKSArICgo
cmVzID4+IDgpICYgMHgwMEZGKTsKfQpleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgZ2Vu
ZXJpY19od2VpZ2h0OCh1bnNpZ25lZCBpbnQgdykKewogICAgICAgIHVuc2lnbmVkIGludCByZXMg
PSAodyAmIDB4NTUpICsgKCh3ID4+IDEpICYgMHg1NSk7CiAgICAgICAgcmVzID0gKHJlcyAmIDB4
MzMpICsgKChyZXMgPj4gMikgJiAweDMzKTsKICAgICAgICByZXR1cm4gKHJlcyAmIDB4MEYpICsg
KChyZXMgPj4gNCkgJiAweDBGKTsKfQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRl
L2FzbS9iaXRvcHMuaCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9s
NGFyY2gvYml0b3BzLmgiIDEKIAojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2Fz
bS1pMzg2L2JpdG9wcy5oIiAxCiAKIAogCmV4dGVybiB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xh
dGlsZSB2b2lkICogYWRkcik7CmV4dGVybiB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxl
IHZvaWQgKiBhZGRyKTsKZXh0ZXJuIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZv
aWQgKiBhZGRyKTsKZXh0ZXJuIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUg
dm9pZCAqIGFkZHIpOwpleHRlcm4gaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0
aWxlIHZvaWQgKiBhZGRyKTsKZXh0ZXJuIGludCB0ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwg
dm9sYXRpbGUgdm9pZCAqIGFkZHIpOwpleHRlcm4gaW50IF9fY29uc3RhbnRfdGVzdF9iaXQoaW50
IG5yLCBjb25zdCB2b2xhdGlsZSB2b2lkICogYWRkcik7CmV4dGVybiBpbnQgX190ZXN0X2JpdChp
bnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKTsKZXh0ZXJuIGludCBmaW5kX2ZpcnN0X3plcm9f
Yml0KHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBzaXplKTsKZXh0ZXJuIGludCBmaW5kX25leHRfemVy
b19iaXQgKHZvaWQgKiBhZGRyLCBpbnQgc2l6ZSwgaW50IG9mZnNldCk7CmV4dGVybiB1bnNpZ25l
ZCBsb25nIGZmeih1bnNpZ25lZCBsb25nIHdvcmQpOwogCnN0cnVjdCBfX2R1bW15IHsgdW5zaWdu
ZWQgbG9uZyBhWzEwMF07IH07CmV4dGVybiBfX2lubGluZV9fIHZvaWQgc2V0X2JpdChpbnQgbnIs
IHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CglfX2FzbV9fIF9fdm9sYXRpbGVfXyggIiIgCgkJImJ0
c2wgJTEsJTAiCgkJOiI9bSIgKCgqKHZvbGF0aWxlIHN0cnVjdCBfX2R1bW15ICopIGFkZHIpICkK
CQk6IklyIiAobnIpKTsKfQpleHRlcm4gX19pbmxpbmVfXyB2b2lkIGNsZWFyX2JpdChpbnQgbnIs
IHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CglfX2FzbV9fIF9fdm9sYXRpbGVfXyggIiIgCgkJImJ0
cmwgJTEsJTAiCgkJOiI9bSIgKCgqKHZvbGF0aWxlIHN0cnVjdCBfX2R1bW15ICopIGFkZHIpICkK
CQk6IklyIiAobnIpKTsKfQpleHRlcm4gX19pbmxpbmVfXyB2b2lkIGNoYW5nZV9iaXQoaW50IG5y
LCB2b2xhdGlsZSB2b2lkICogYWRkcikKewoJX19hc21fXyBfX3ZvbGF0aWxlX18oICIiIAoJCSJi
dGNsICUxLCUwIgoJCToiPW0iICgoKih2b2xhdGlsZSBzdHJ1Y3QgX19kdW1teSAqKSBhZGRyKSAp
CgkJOiJJciIgKG5yKSk7Cn0KZXh0ZXJuIF9faW5saW5lX18gaW50IHRlc3RfYW5kX3NldF9iaXQo
aW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewoJaW50IG9sZGJpdDsKCV9fYXNtX18gX192
b2xhdGlsZV9fKCAiIiAKCQkiYnRzbCAlMiwlMVxuXHRzYmJsICUwLCUwIgoJCToiPXIiIChvbGRi
aXQpLCI9bSIgKCgqKHZvbGF0aWxlIHN0cnVjdCBfX2R1bW15ICopIGFkZHIpICkKCQk6IklyIiAo
bnIpKTsKCXJldHVybiBvbGRiaXQ7Cn0KZXh0ZXJuIF9faW5saW5lX18gaW50IHRlc3RfYW5kX2Ns
ZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CglpbnQgb2xkYml0OwoJX19h
c21fXyBfX3ZvbGF0aWxlX18oICIiIAoJCSJidHJsICUyLCUxXG5cdHNiYmwgJTAsJTAiCgkJOiI9
ciIgKG9sZGJpdCksIj1tIiAoKCoodm9sYXRpbGUgc3RydWN0IF9fZHVtbXkgKikgYWRkcikgKQoJ
CToiSXIiIChucikpOwoJcmV0dXJuIG9sZGJpdDsKfQpleHRlcm4gX19pbmxpbmVfXyBpbnQgdGVz
dF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CglpbnQgb2xk
Yml0OwoJX19hc21fXyBfX3ZvbGF0aWxlX18oICIiIAoJCSJidGNsICUyLCUxXG5cdHNiYmwgJTAs
JTAiCgkJOiI9ciIgKG9sZGJpdCksIj1tIiAoKCoodm9sYXRpbGUgc3RydWN0IF9fZHVtbXkgKikg
YWRkcikgKQoJCToiSXIiIChucikpOwoJcmV0dXJuIG9sZGJpdDsKfQogCmV4dGVybiBfX2lubGlu
ZV9fIGludCBfX2NvbnN0YW50X3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAq
IGFkZHIpCnsKCXJldHVybiAoKDFVTCA8PCAobnIgJiAzMSkpICYgKCgoY29uc3Qgdm9sYXRpbGUg
dW5zaWduZWQgaW50ICopIGFkZHIpW25yID4+IDVdKSkgIT0gMDsKfQpleHRlcm4gX19pbmxpbmVf
XyBpbnQgX190ZXN0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CglpbnQgb2xk
Yml0OwoJX19hc21fXyBfX3ZvbGF0aWxlX18oCgkJImJ0bCAlMiwlMVxuXHRzYmJsICUwLCUwIgoJ
CToiPXIiIChvbGRiaXQpCgkJOiJtIiAoKCoodm9sYXRpbGUgc3RydWN0IF9fZHVtbXkgKikgYWRk
cikgKSwiSXIiIChucikpOwoJcmV0dXJuIG9sZGJpdDsKfQogCmV4dGVybiBfX2lubGluZV9fIGlu
dCBmaW5kX2ZpcnN0X3plcm9fYml0KHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBzaXplKQp7CglpbnQg
ZDAsIGQxLCBkMjsKCWludCByZXM7CglpZiAoIXNpemUpCgkJcmV0dXJuIDA7CglfX2FzbV9fKCJj
bGRcblx0IgoJCSJtb3ZsICQtMSwlJWVheFxuXHQiCgkJInhvcmwgJSVlZHgsJSVlZHhcblx0IgoJ
CSJyZXBlOyBzY2FzbFxuXHQiCgkJImplIDFmXG5cdCIKCQkieG9ybCAtNCglJWVkaSksJSVlYXhc
blx0IgoJCSJzdWJsICQ0LCUlZWRpXG5cdCIKCQkiYnNmbCAlJWVheCwlJWVkeFxuIgoJCSIxOlx0
c3VibCAlJWVieCwlJWVkaVxuXHQiCgkJInNobGwgJDMsJSVlZGlcblx0IgoJCSJhZGRsICUlZWRp
LCUlZWR4IgoJCToiPWQiIChyZXMpLCAiPSZjIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZhIiAoZDIp
CgkJOiIxIiAoKHNpemUgKyAzMSkgPj4gNSksICIyIiAoYWRkciksICJiIiAoYWRkcikpOwoJcmV0
dXJuIHJlczsKfQpleHRlcm4gX19pbmxpbmVfXyBpbnQgZmluZF9uZXh0X3plcm9fYml0ICh2b2lk
ICogYWRkciwgaW50IHNpemUsIGludCBvZmZzZXQpCnsKCXVuc2lnbmVkIGxvbmcgKiBwID0gKCh1
bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG9mZnNldCA+PiA1KTsKCWludCBzZXQgPSAwLCBiaXQg
PSBvZmZzZXQgJiAzMSwgcmVzOwoJCglpZiAoYml0KSB7CgkJIAoJCV9fYXNtX18oImJzZmwgJTEs
JTBcblx0IgoJCQkiam5lIDFmXG5cdCIKCQkJIm1vdmwgJDMyLCAlMFxuIgoJCQkiMToiCgkJCTog
Ij1yIiAoc2V0KQoJCQk6ICJyIiAofigqcCA+PiBiaXQpKSk7CgkJaWYgKHNldCA8ICgzMiAtIGJp
dCkpCgkJCXJldHVybiBzZXQgKyBvZmZzZXQ7CgkJc2V0ID0gMzIgLSBiaXQ7CgkJcCsrOwoJfQoJ
IAoJcmVzID0gZmluZF9maXJzdF96ZXJvX2JpdCAocCwgc2l6ZSAtIDMyICogKHAgLSAodW5zaWdu
ZWQgbG9uZyAqKSBhZGRyKSk7CglyZXR1cm4gKG9mZnNldCArIHNldCArIHJlcyk7Cn0KIApleHRl
cm4gX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGZmeih1bnNpZ25lZCBsb25nIHdvcmQpCnsKCV9f
YXNtX18oImJzZmwgJTEsJTAiCgkJOiI9ciIgKHdvcmQpCgkJOiJyIiAofndvcmQpKTsKCXJldHVy
biB3b3JkOwp9CiAKZXh0ZXJuIF9faW5saW5lX18gaW50IGZmcyhpbnQgeCkKewoJaW50IHI7Cglf
X2FzbV9fKCJic2ZsICUxLCUwXG5cdCIKCQkiam56IDFmXG5cdCIKCQkibW92bCAkLTEsJTBcbiIK
CQkiMToiIDogIj1yIiAocikgOiAiZyIgKHgpKTsKCXJldHVybiByKzE7Cn0KIAogCiMgNSAiL2hv
bWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2w0YXJjaC9iaXRvcHMuaCIgMgojIDQgIi9o
b21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9iaXRvcHMuaCIgMgojIDY5ICIvaG9tZS9q
dzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9iaXRvcHMuaCIgMgojIDIzICIvaG9tZS9qdzUv
dG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51
eDIyL2luY2x1ZGUvYXNtL2NhY2hlLmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5j
bHVkZS9hc20vbDRhcmNoL2NhY2hlLmgiIDEKIAojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9p
bmNsdWRlL2FzbS1pMzg2L2NhY2hlLmgiIDEKIAogCiMgNSAiL2hvbWUvanc1L3RtcC9saW51eDIy
L2luY2x1ZGUvYXNtL2w0YXJjaC9jYWNoZS5oIiAyCiMgNCAiL2hvbWUvanc1L3RtcC9saW51eDIy
L2luY2x1ZGUvYXNtL2NhY2hlLmgiIDIKIyAyNCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1
ZGUvbGludXgvZnMuaCIgMgpzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3Q7CiAKIAogCmV4dGVybiBp
bnQgbWF4X2lub2RlczsKZXh0ZXJuIGludCBtYXhfZmlsZXMsIG5yX2ZpbGVzLCBucl9mcmVlX2Zp
bGVzOwpleHRlcm4gaW50IG1heF9zdXBlcl9ibG9ja3MsIG5yX3N1cGVyX2Jsb2NrczsKIAogCiAK
IAogCiAKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgi
IDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL3NlbWFwaG9y
ZS5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtLWkzODYvc2VtYXBo
b3JlLmgiIDEKIAojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9zeXN0ZW0u
aCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvc3lzdGVt
LmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9sNGxpbnV4L3g4Ni9jb25m
aWcuaCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9wcm9jZXNzb3Iu
aCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvcHJvY2Vz
c29yLmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vc2VnbWVudC5o
IiAxCiAKIyA5ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL3Byb2Nl
c3Nvci5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2w0LmgiIDEK
IyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL2w0LmgiIDEKIyAx
ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20veDg2L3ZlcjIvY29tcGlsZXIuaCIg
MQojIDcgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvbDQuaCIgMgoj
IDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS94ODYvdmVyMi90eXBlcy5oIiAx
CiAgCnR5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICBieXRlX3Q7CnR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgaW50ICB3b3JkX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICBkd29yZF90Owp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgcXdvcmRfdDsKdHlwZWRlZiBzaWduZWQgY2hhciAg
ICAgICAgIHNieXRlX3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCAgICBzd29yZF90Owp0eXBl
ZGVmIHNpZ25lZCBpbnQgICAgICAgICAgc2R3b3JkX3Q7CnR5cGVkZWYgc2lnbmVkIGxvbmcgbG9u
ZyAgICBzcXdvcmRfdDsKdHlwZWRlZiBsb25nIGxvbmcJICAgIGNwdV90aW1lX3Q7CnR5cGVkZWYg
c3RydWN0IHsKICBkd29yZF90IGxvdywgaGlnaDsKfSBsNF9sb3dfaGlnaF90OwogCnR5cGVkZWYg
c3RydWN0IHsKICB1bnNpZ25lZCB2ZXJzaW9uX2xvdzoxMDsKICB1bnNpZ25lZCBsdGhyZWFkOjc7
CiAgdW5zaWduZWQgdGFzazoxMTsKICB1bnNpZ25lZCB2ZXJzaW9uX2hpZ2g6NDsKICB1bnNpZ25l
ZCBzaXRlOjE3OwogIHVuc2lnbmVkIGNoaWVmOjExOwogIHVuc2lnbmVkIG5lc3Q6NDsKfSBsNF90
aHJlYWRpZF9zdHJ1Y3RfdDsKdHlwZWRlZiB1bmlvbiB7CiAgbDRfbG93X2hpZ2hfdCBsaDsKICBs
NF90aHJlYWRpZF9zdHJ1Y3RfdCBpZDsKfSBsNF90aHJlYWRpZF90Owp0eXBlZGVmIGw0X3RocmVh
ZGlkX3QgbDRfdGFza2lkX3Q7CnR5cGVkZWYgc3RydWN0IHsKICB1bnNpZ25lZCBpbnRyOjg7CiAg
dW5zaWduZWQgY2hhciB6ZXJvWzddOwp9IGw0X2ludHJpZF9zdHJ1Y3RfdDsKdHlwZWRlZiB1bmlv
biB7CiAgbDRfbG93X2hpZ2hfdCBsaDsKICBsNF9pbnRyaWRfc3RydWN0X3QgaWQ7Cn0gbDRfaW50
cmlkX3Q7CiAKdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIGdyYW50OjE7CiAgdW5zaWduZWQg
d3JpdGU6MTsKICB1bnNpZ25lZCBzaXplOjY7CiAgdW5zaWduZWQgemVybzo0OwogIHVuc2lnbmVk
IHBhZ2U6MjA7Cn0gbDRfZnBhZ2Vfc3RydWN0X3Q7CnR5cGVkZWYgdW5pb24gewogIGR3b3JkX3Qg
ZnBhZ2U7CiAgbDRfZnBhZ2Vfc3RydWN0X3QgZnA7Cn0gbDRfZnBhZ2VfdDsKdHlwZWRlZiBzdHJ1
Y3QgewogIGR3b3JkX3Qgc25kX2Jhc2U7CiAgbDRfZnBhZ2VfdCBmcGFnZTsKfSBsNF9zbmRfZnBh
Z2VfdDsKIAp0eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgbXNnX2RlY2VpdGVkOjE7CiAgdW5z
aWduZWQgZnBhZ2VfcmVjZWl2ZWQ6MTsKICB1bnNpZ25lZCBtc2dfcmVkaXJlY3RlZDoxOwogIHVu
c2lnbmVkIHNyY19pbnNpZGU6MTsKICB1bnNpZ25lZCBzbmRfZXJyb3I6MTsKICB1bnNpZ25lZCBl
cnJvcl9jb2RlOjM7CiAgdW5zaWduZWQgc3RyaW5nczo1OwogIHVuc2lnbmVkIGR3b3JkczoxOTsK
fSBsNF9tc2dkb3BlX3N0cnVjdF90Owp0eXBlZGVmIHVuaW9uIHsKICBkd29yZF90IG1zZ2RvcGU7
CiAgbDRfbXNnZG9wZV9zdHJ1Y3RfdCBtZDsKfSBsNF9tc2dkb3BlX3Q7CiAKdHlwZWRlZiBzdHJ1
Y3QgewogIGR3b3JkX3Qgc25kX3NpemU7CiAgZHdvcmRfdCBzbmRfc3RyOwogIGR3b3JkX3QgcmN2
X3NpemU7CiAgZHdvcmRfdCByY3Zfc3RyOwp9IGw0X3N0cmRvcGVfdDsKIAp0eXBlZGVmIHN0cnVj
dCB7CiAgdW5zaWduZWQgcmN2X2V4cDo0OwogIHVuc2lnbmVkIHNuZF9leHA6NDsKICB1bnNpZ25l
ZCByY3ZfcGZhdWx0OjQ7CiAgdW5zaWduZWQgc25kX3BmYXVsdDo0OwogIHVuc2lnbmVkIHNuZF9t
YW46ODsKICB1bnNpZ25lZCByY3ZfbWFuOjg7Cn0gbDRfdGltZW91dF9zdHJ1Y3RfdDsKdHlwZWRl
ZiB1bmlvbiB7CiAgZHdvcmRfdCB0aW1lb3V0OwogIGw0X3RpbWVvdXRfc3RydWN0X3QgdG87Cn0g
bDRfdGltZW91dF90OwogCnR5cGVkZWYgc3RydWN0IHsKICB1bnNpZ25lZCBwcmlvOjg7CiAgdW5z
aWduZWQgc21hbGw6ODsKICB1bnNpZ25lZCB6ZXJvOjQ7CiAgdW5zaWduZWQgdGltZV9leHA6NDsK
ICB1bnNpZ25lZCB0aW1lX21hbjo4Owp9IGw0X3NjaGVkX3BhcmFtX3N0cnVjdF90Owp0eXBlZGVm
IHVuaW9uIHsKICBkd29yZF90IHNjaGVkX3BhcmFtOwogIGw0X3NjaGVkX3BhcmFtX3N0cnVjdF90
IHNwOwp9IGw0X3NjaGVkX3BhcmFtX3Q7CiAKZXh0ZXJuIF9faW5saW5lX18gIGludCBsNF9pc19p
bnZhbGlkX3NjaGVkX3BhcmFtKGw0X3NjaGVkX3BhcmFtX3Qgc3ApOwpleHRlcm4gX19pbmxpbmVf
XyAgaW50IGw0X2lzX25pbF9pZChsNF90aHJlYWRpZF90IGlkKTsKZXh0ZXJuIF9faW5saW5lX18g
IGludCBsNF9pc19pbnZhbGlkX2lkKGw0X3RocmVhZGlkX3QgaWQpOwpleHRlcm4gX19pbmxpbmVf
XyAgbDRfZnBhZ2VfdCBsNF9mcGFnZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGlu
dCBzaXplLCAKCQkJCSAgdW5zaWduZWQgY2hhciB3cml0ZSwgdW5zaWduZWQgY2hhciBncmFudCk7
CmV4dGVybiBfX2lubGluZV9fICBsNF90aHJlYWRpZF90IGdldF90YXNraWQobDRfdGhyZWFkaWRf
dCB0KTsKZXh0ZXJuIF9faW5saW5lX18gIGludCB0aHJlYWRfZXF1YWwobDRfdGhyZWFkaWRfdCB0
MSxsNF90aHJlYWRpZF90IHQyKTsKZXh0ZXJuIF9faW5saW5lX18gIGludCB0YXNrX2VxdWFsKGw0
X3RocmVhZGlkX3QgdDEsbDRfdGhyZWFkaWRfdCB0Mik7CmV4dGVybiBfX2lubGluZV9fICB2b2lk
IGw0X21ha2VfdGFza2lkX2Zyb21faXJxKGludCBpcnEsIGw0X3RocmVhZGlkX3QgKnQpOwpleHRl
cm4gX19pbmxpbmVfXyAgaW50IGw0X2lzX2ludmFsaWRfc2NoZWRfcGFyYW0obDRfc2NoZWRfcGFy
YW1fdCBzcCkKewogIHJldHVybiBzcC5zY2hlZF9wYXJhbSA9PSAweGZmZmZmZmZmOwp9CmV4dGVy
biBfX2lubGluZV9fICBpbnQgbDRfaXNfbmlsX2lkKGw0X3RocmVhZGlkX3QgaWQpCnsKICByZXR1
cm4gaWQubGgubG93ID09IDA7Cn0KZXh0ZXJuIF9faW5saW5lX18gIGludCBsNF9pc19pbnZhbGlk
X2lkKGw0X3RocmVhZGlkX3QgaWQpCnsKICByZXR1cm4gaWQubGgubG93ID09IDB4ZmZmZmZmZmY7
Cn0KZXh0ZXJuIF9faW5saW5lX18gIGw0X2ZwYWdlX3QgbDRfZnBhZ2UodW5zaWduZWQgbG9uZyBh
ZGRyZXNzLCB1bnNpZ25lZCBpbnQgc2l6ZSwgCgkJCQkgIHVuc2lnbmVkIGNoYXIgd3JpdGUsIHVu
c2lnbmVkIGNoYXIgZ3JhbnQpCnsKICByZXR1cm4gKChsNF9mcGFnZV90KXtmcDp7Z3JhbnQsIHdy
aXRlLCBzaXplLCAwLCAKCQkJICAgICAoYWRkcmVzcyAmICh+KCgweDEwMDApICAtIDEpKSApID4+
IDEyIH19KTsKfQpleHRlcm4gX19pbmxpbmVfXyAgbDRfdGhyZWFkaWRfdCAKZ2V0X3Rhc2tpZChs
NF90aHJlYWRpZF90IHQpCnsKICB0LmlkLmx0aHJlYWQgPSAwOwogIHJldHVybiB0OyAKfQpleHRl
cm4gX19pbmxpbmVfXyAgaW50CnRocmVhZF9lcXVhbChsNF90aHJlYWRpZF90IHQxLGw0X3RocmVh
ZGlkX3QgdDIpCnsKICBpZigodDEubGgubG93ICE9IHQyLmxoLmxvdykgfHwgKHQxLmxoLmhpZ2gg
IT0gdDIubGguaGlnaCkpCiAgICByZXR1cm4gMDsKICByZXR1cm4gMTsKfQpleHRlcm4gX19pbmxp
bmVfXyAgaW50CnRhc2tfZXF1YWwobDRfdGhyZWFkaWRfdCB0MSxsNF90aHJlYWRpZF90IHQyKQp7
CiAgaWYgKCAoKHQxLmxoLmxvdyAmIDB4ZmZmZTAzZmYgKSA9PSAodDIubGgubG93ICYgMHhmZmZl
MDNmZiApKSAmJiAKICAgICAgICh0MS5saC5oaWdoID09IHQyLmxoLmhpZ2gpICkKICAgIHJldHVy
biAxOwogIGVsc2UKICAgIHJldHVybiAwOwogIAogCiAKIAogCiAKfQpleHRlcm4gX19pbmxpbmVf
XyAgdm9pZApsNF9tYWtlX3Rhc2tpZF9mcm9tX2lycShpbnQgaXJxLCBsNF90aHJlYWRpZF90ICp0
KQp7CiAgdC0+bGgubG93ID0gaXJxKzE7CiAgdC0+bGguaGlnaCA9IDA7Cn0KIAojIDggIi9ob21l
L2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvbDQuaCIgMgojIDEgIi9ob21lL2p3
NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS94ODYvdmVyMi9rZXJuZWwuaCIgMQogCnR5cGVkZWYg
c3RydWN0IAp7CiAgZHdvcmRfdCBtYWdpYzsKICBkd29yZF90IHZlcnNpb247CiAgYnl0ZV90IG9m
ZnNldF92ZXJzaW9uX3N0cmluZ3M7CiAgYnl0ZV90IHJlc2VydmVkWzddOwogICAKICBkd29yZF90
IGluaXRfZGVmYXVsdF9rZGVidWcsIGRlZmF1bHRfa2RlYnVnX2V4Y2VwdGlvbiwgCiAgICBfX3Vu
a25vd24sIGRlZmF1bHRfa2RlYnVnX2VuZDsKICBkd29yZF90IHNpZ21hMF9lc3AsIHNpZ21hMF9l
aXA7CiAgbDRfbG93X2hpZ2hfdCBzaWdtYTBfbWVtb3J5OwogIGR3b3JkX3Qgc2lnbWExX2VzcCwg
c2lnbWExX2VpcDsKICBsNF9sb3dfaGlnaF90IHNpZ21hMV9tZW1vcnk7CiAgZHdvcmRfdCByb290
X2VzcCwgcm9vdF9laXA7CiAgbDRfbG93X2hpZ2hfdCByb290X21lbW9yeTsKICBkd29yZF90IGw0
X2NvbmZpZzsKICBkd29yZF90IHJlc2VydmVkMjsKICBkd29yZF90IGtkZWJ1Z19jb25maWc7CiAg
ZHdvcmRfdCBrZGVidWdfcGVybWlzc2lvbjsKICBsNF9sb3dfaGlnaF90IG1haW5fbWVtb3J5Owog
IGw0X2xvd19oaWdoX3QgcmVzZXJ2ZWQwLCByZXNlcnZlZDE7CiAgbDRfbG93X2hpZ2hfdCBzZW1p
X3Jlc2VydmVkOwogIGw0X2xvd19oaWdoX3QgZGVkaWNhdGVkWzRdOwogIHZvbGF0aWxlIHVuc2ln
bmVkIGxvbmcgbG9uZyBjbG9jazsKfSBsNF9rZXJuZWxfaW5mb190OwojIDkgIi9ob21lL2p3NS90
bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvbDQuaCIgMgojIDEgIi9ob21lL2p3NS90bXAv
bGludXgyMi9pbmNsdWRlL2FzbS94ODYvdmVyMi9zeXNjYWxscy5oIiAxCiAKCQkJCQkgCgkJCQkJ
ICAKCQkJCQkgCgkJCQkJIAoJCQkJCSAKIApleHRlcm4gX19pbmxpbmVfXyAgdm9pZCAKbDRfZnBh
Z2VfdW5tYXAobDRfZnBhZ2VfdCBmcGFnZSwgZHdvcmRfdCBtYXBfbWFzayk7CmV4dGVybiBfX2lu
bGluZV9fICBsNF90aHJlYWRpZF90IApsNF9teXNlbGYodm9pZCk7CmV4dGVybiBfX2lubGluZV9f
ICBpbnQgCmw0X25jaGllZihsNF90aHJlYWRpZF90IGRlc3RpbmF0aW9uLCBsNF90aHJlYWRpZF90
ICpuZXh0X2NoaWVmKTsKZXh0ZXJuIF9faW5saW5lX18gIHZvaWQKbDRfdGhyZWFkX2V4X3JlZ3Mo
bDRfdGhyZWFkaWRfdCBkZXN0aW5hdGlvbiwgZHdvcmRfdCBlaXAsIGR3b3JkX3QgZXNwLAoJCSAg
bDRfdGhyZWFkaWRfdCAqcHJlZW1wdGVyLCBsNF90aHJlYWRpZF90ICpwYWdlciwKCQkgIGR3b3Jk
X3QgKm9sZF9lZmxhZ3MsIGR3b3JkX3QgKm9sZF9laXAsIGR3b3JkX3QgKm9sZF9lc3ApOwpleHRl
cm4gX19pbmxpbmVfXyAgdm9pZApsNF90aHJlYWRfc3dpdGNoKGw0X3RocmVhZGlkX3QgZGVzdGlu
YXRpb24pOwpleHRlcm4gX19pbmxpbmVfXyAgY3B1X3RpbWVfdApsNF90aHJlYWRfc2NoZWR1bGUo
bDRfdGhyZWFkaWRfdCBkZXN0LCBsNF9zY2hlZF9wYXJhbV90IHBhcmFtLAoJCSAgIGw0X3RocmVh
ZGlkX3QgKmV4dF9wcmVlbXB0ZXIsIGw0X3RocmVhZGlkX3QgKnBhcnRuZXIsCgkJICAgbDRfc2No
ZWRfcGFyYW1fdCAqb2xkX3BhcmFtKTsKZXh0ZXJuIF9faW5saW5lX18gIGw0X3Rhc2tpZF90IAps
NF90YXNrX25ldyhsNF90YXNraWRfdCBkZXN0aW5hdGlvbiwgZHdvcmRfdCBtY3Bfb3JfbmV3X2No
aWVmLCAKCSAgICBkd29yZF90IGVzcCwgZHdvcmRfdCBlaXAsIGw0X3RocmVhZGlkX3QgcGFnZXIp
OwpleHRlcm4gX19pbmxpbmVfXyAgdm9pZApsNF95aWVsZCAodm9pZCk7CiAKZXh0ZXJuIF9faW5s
aW5lX18gIHZvaWQKbDRfeWllbGQgKHZvaWQpCnsKCWw0X3RocmVhZF9zd2l0Y2goKChsNF90aHJl
YWRpZF90KXtsaDp7MCwwfX0pICk7Cn0KIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVk
ZS9hc20veDg2L3ZlcjIvc3lzY2FsbHMtbDQyLWdjYzI5NS1ub3BpYy5oIiAxCiAKIAogCmV4dGVy
biBfX2lubGluZV9fICB2b2lkCmw0X2ZwYWdlX3VubWFwKGw0X2ZwYWdlX3QgZnBhZ2UsIGR3b3Jk
X3QgbWFwX21hc2spCnsKICB1bnNpZ25lZCBkdW1teTEsIGR1bW15MjsKICBfX2FzbV9fCiAgICBf
X3ZvbGF0aWxlX18oCgkJICJwdXNobAklJWVicAlcblx0IgkJIAoJCSAiaW50CSQweDMyCVxuXHQi
CgkJICJwb3BsCSUlZWJwCVxuXHQiCQkgCgkJIDogCgkJICI9YSIgKGR1bW15MSksCgkJICI9YyIg
KGR1bW15MikKCQkgOiAKCQkgIjAiIChmcGFnZSksCgkJICIxIiAobWFwX21hc2spCgkJIDoKCQkg
ImVieCIsIAoJCSAiZWR4IiwgImVkaSIsICJlc2kiCgkJICk7Cn07CiAKZXh0ZXJuIF9faW5saW5l
X18gIGw0X3RocmVhZGlkX3QKbDRfbXlzZWxmKHZvaWQpCnsKICBsNF90aHJlYWRpZF90IHRlbXBf
aWQ7CiAgX19hc21fXygKCSAgInB1c2hsCSUlZWJwCVxuXHQiCQkgCgkgICJpbnQJJDB4MzEJCVxu
XHQiCgkgICJwb3BsCSUlZWJwCQlcblx0IgkJIAoJICA6IAoJICAiPVMiICh0ZW1wX2lkLmxoLmxv
dyksCSAKCSAgIj1EIiAodGVtcF9pZC5saC5oaWdoKSAJIAoJICA6IAoJICAiMCIgKDApCQkJIAoJ
ICA6CgkgICJlYngiLCAKCSAgImVheCIsICJlY3giLCAiZWR4IgoJICApOwogIHJldHVybiB0ZW1w
X2lkOwp9CiAKZXh0ZXJuIF9faW5saW5lX18gIGludCAKbDRfbmNoaWVmKGw0X3RocmVhZGlkX3Qg
ZGVzdGluYXRpb24sIGw0X3RocmVhZGlkX3QgKm5leHRfY2hpZWYpCnsKICBpbnQgdHlwZTsKICBf
X2FzbV9fKAoJICAicHVzaGwJJSVlYnAJXG5cdCIJCSAKCSAgImludAkkMHgzMQkJXG5cdCIKCSAg
InBvcGwJJSVlYnAJCVxuXHQiCQkgCgkgIDogCgkgICI9UyIgKG5leHRfY2hpZWYtPmxoLmxvdyks
CSAKCSAgIj1EIiAobmV4dF9jaGllZi0+bGguaGlnaCksCSAKCSAgIj1hIiAodHlwZSkJCQkgCgkg
IDogCgkgICIwIiAoZGVzdGluYXRpb24ubGgubG93KSwJIAoJICAiMSIgKGRlc3RpbmF0aW9uLmxo
LmhpZ2gpIAkgCgkgIDoKCSAgImVieCIsIAoJICAiZWN4IiwgImVkeCIKCSAgKTsKICByZXR1cm4g
dHlwZTsKfQogCmV4dGVybiBfX2lubGluZV9fICB2b2lkCmw0X3RocmVhZF9leF9yZWdzKGw0X3Ro
cmVhZGlkX3QgZGVzdGluYXRpb24sIGR3b3JkX3QgZWlwLCBkd29yZF90IGVzcCwKCQkgIGw0X3Ro
cmVhZGlkX3QgKnByZWVtcHRlciwgbDRfdGhyZWFkaWRfdCAqcGFnZXIsCgkJICBkd29yZF90ICpv
bGRfZWZsYWdzLCBkd29yZF90ICpvbGRfZWlwLCBkd29yZF90ICpvbGRfZXNwKQp7CiAgdW5zaWdu
ZWQgZHVtbXkxLCBkdW1teTI7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18oCgkgICJtb3ZsCSUlZWRp
LCAlJWVieAlcblx0IgoJICAicHVzaGwJJSVlYnAJXG5cdCIJIAoJICAicHVzaGwJJSVlc2kJXG5c
dCIJIAoJICAicHVzaGwJJSVlYngJXG5cdCIJIAoJICAKCSAgIm1vdmwJNCglJWVzaSksICUlZWRp
CVxuXHQiCSAJCgkgICJtb3ZsCSglJWVzaSksICUlZXNpCVxuXHQiCgkgICJtb3ZsCTQoJSVlYngp
LCAlJWVicAlcblx0IgkgCgkgICJtb3ZsCSglJWVieCksICUlZWJ4CVxuXHQiCgkgICJpbnQJJDB4
MzUJCVxuXHQiCSAKCSAgInhjaGdsICglJWVzcCksICUlZWJ4CVxuXHQiCSAKCSAgIm1vdmwJJSVl
YnAsIDQoJSVlYngpCVxuXHQiCSAKCSAgInBvcGwJJSVlYnAJCVxuXHQiCSAKCSAgIm1vdmwJJSVl
YnAsICglJWVieCkJXG5cdCIJIAoJICAicG9wbCAlJWVieCAgICAgICAgICAgXG5cdCIgICAgCgkg
ICJtb3ZsICUlZXNpLCAoJSVlYngpICBcblx0IiAgICAKCSAgIm1vdmwgJSVlZGksIDQoJSVlYngp
IFxuXHQiCgkgICJwb3BsCSUlZWJwCQlcblx0IgkgCgkgIDoKCSAgIj1hIiAoKm9sZF9lZmxhZ3Mp
LAkJIAoJICAiPWMiICgqb2xkX2VzcCksCQkgCgkgICI9ZCIgKCpvbGRfZWlwKSwJCSAKCSAgIj1T
IiAoZHVtbXkxKSwJCSAKCSAgIj1EIiAoZHVtbXkyKSAJCSAKCSAgOgoJICAiMCIgKGRlc3RpbmF0
aW9uLmlkLmx0aHJlYWQpLAoJICAiMSIgKGVzcCksCgkgICIyIiAoZWlwKSwKCSAgIjMiIChwYWdl
ciksCSAJCSAKCSAgIjQiIChwcmVlbXB0ZXIpCQkgCgkgIDogCgkgICJlYngiCgkgICk7Cn0KIApl
eHRlcm4gX19pbmxpbmVfXyAgdm9pZApsNF90aHJlYWRfc3dpdGNoKGw0X3RocmVhZGlkX3QgZGVz
dGluYXRpb24pCnsKICBsb25nIGR1bW15OwogIF9fYXNtX18KICAgIF9fdm9sYXRpbGVfXygKCQkg
InB1c2hsCSUlZWJwCVxuXHQiCQkgCgkJICJpbnQJJDB4MzMJXG5cdCIKCQkgInBvcGwJJSVlYnAJ
XG5cdCIJCSAKCQkgOiAKCQkgIj1TIiAoZHVtbXkpCgkJIDogCgkJICIwIiAoZGVzdGluYXRpb24u
bGgubG93KQoJCSA6ICAKCQkgImVieCIsCgkJICJlYXgiLCAiZWN4IiwgImVkeCIsICJlZGkiCgkJ
ICk7Cn0KIApleHRlcm4gX19pbmxpbmVfXyAgY3B1X3RpbWVfdApsNF90aHJlYWRfc2NoZWR1bGUo
bDRfdGhyZWFkaWRfdCBkZXN0LCBsNF9zY2hlZF9wYXJhbV90IHBhcmFtLAoJCSAgIGw0X3RocmVh
ZGlkX3QgKmV4dF9wcmVlbXB0ZXIsIGw0X3RocmVhZGlkX3QgKnBhcnRuZXIsCgkJICAgbDRfc2No
ZWRfcGFyYW1fdCAqb2xkX3BhcmFtKQp7CiAgY3B1X3RpbWVfdCB0ZW1wOwogIF9fYXNtX18KICAg
IF9fdm9sYXRpbGVfXygKCQkgIm1vdmwJJSVlZHgsICUlZWJ4CVxuXHQiCgkJICJwdXNobCAlJWVi
cAkJXG5cdCIJIAoJCSAicHVzaGwJJSVlYngJCVxuXHQiCSAKCQkgIm1vdmwgCTQoJSVlYngpLCAl
JWVicAlcblx0IgkgCgkJICJtb3ZsIAkoJSVlYngpLCAlJWVieAlcblx0IgogCgkJICJpbnQJJDB4
MzQJCVxuXHQiCiAKCQkgInhjaGdsCSglJWVzcCksICUlZWJ4CVxuXHQiCSAKCQkgIm1vdmwJJSVl
YnAsIDQoJSVlYngpCVxuXHQiCSAKCQkgInBvcGwJJSVlYnAJCVxuXHQiCSAKCQkgIm1vdmwJJSVl
YnAsICglJWVieCkJXG5cdCIJIAoJCSAicG9wbAklJWVicAkJXG5cdCIJIAoJCSA6IAoJCSAiPWEi
ICgqb2xkX3BhcmFtKSwgCQkJIAoJCSAiPWMiICgoKGw0X2xvd19oaWdoX3QgKikmdGVtcCktPmxv
dyksCSAKCQkgIj1kIiAoKChsNF9sb3dfaGlnaF90ICopJnRlbXApLT5oaWdoKSwJIAoJCSAiPVMi
IChwYXJ0bmVyLT5saC5sb3cpLAkJIAoJCSAiPUQiIChwYXJ0bmVyLT5saC5oaWdoKQkJIAoJCSA6
IAoJCSAiMiIgKGV4dF9wcmVlbXB0ZXIpLCAgICAKCQkgIjAiIChwYXJhbSksCQkgCgkJICIzIiAo
ZGVzdC5saC5sb3cpLAkgCgkJICI0IiAoZGVzdC5saC5oaWdoKQkgCgkJIDoKCQkgImVieCIKCQkg
KTsKICByZXR1cm4gdGVtcDsKfQogIAogIAogCmV4dGVybiBfX2lubGluZV9fICBsNF90YXNraWRf
dCAKbDRfdGFza19uZXcobDRfdGFza2lkX3QgZGVzdGluYXRpb24sIGR3b3JkX3QgbWNwX29yX25l
d19jaGllZiwgCgkgICAgZHdvcmRfdCBlc3AsIGR3b3JkX3QgZWlwLCBsNF90aHJlYWRpZF90IHBh
Z2VyKQp7CiAgdW5zaWduZWQgZHVtbXkxLCBkdW1teTIsIGR1bW15MywgZHVtbXk0LCBkdW1teTA7
CiAgX19hc21fXwogICAgX192b2xhdGlsZV9fKAoJCSAicHVzaGwJJSVlYnAJCVxuXHQiCSAKCQkg
Im1vdmwgIDQoJSVlYngpLCAlJWVicAlcblx0IgkgCgkJICJtb3ZsICAoJSVlYngpLCAlJWVieAlc
blx0IgoJCSAicHVzaGwgJSVlc2kgICAgICAgICAgIFxuXHQiCgkJICJtb3ZsICA0KCUlZXNpKSwg
JSVlZGkgXG5cdCIKCQkgIm1vdmwgICglJWVzaSksICUlZXNpICBcblx0IgkJIAoJCSAiaW50CSQw
eDM2CQlcblx0IgoJCSAieGNoZ2wgJSVlc2ksICglJWVzcCkgIFxuXHQiCgkJICJtb3ZsICAlJWVk
aSwgNCglJWVzaSkgXG5cdCIKCQkgInBvcGwgICUlZWRpICAgICAgICAgICBcblx0IgoJCSAibW92
bCAgJSVlZGksICglJWVzaSkgIFxuXHQiCgkJICJwb3BsCSUlZWJwCQlcblx0IgkgCgkJIDogCgkJ
ICI9UyIgKGR1bW15MCksCQkJIAoJCSAiPWIiIChkdW1teTEpLAkJCSAKCQkgIj1hIiAoZHVtbXky
KSwJCQkgCgkJICI9YyIgKGR1bW15MyksCQkJIAoJCSAiPWQiIChkdW1teTQpCQkJIAoJCSA6CgkJ
ICIxIiAoJnBhZ2VyKSwJCQkgCgkJICIyIiAobWNwX29yX25ld19jaGllZiksCSAKCQkgIjMiIChl
c3ApLAkJCSAKCQkgIjQiIChlaXApLAkJCSAKCQkgIjAiICgmZGVzdGluYXRpb24pCSAKCQkgOgoJ
CSAiZWRpIgoJCSApOwogIHJldHVybiBkZXN0aW5hdGlvbjsKfQojIDM2NyAiL2hvbWUvanc1L3Rt
cC9saW51eDIyL2luY2x1ZGUvYXNtL3g4Ni92ZXIyL3N5c2NhbGxzLWw0Mi1nY2MyOTUtbm9waWMu
aCIKIyA4NSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL3g4Ni92ZXIyL3N5c2Nh
bGxzLmgiIDIKIyAxMCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2w0YXJjaC9s
NC5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL3g4Ni92ZXIyL2lw
Yy5oIiAxCiAKIAogCiAKdHlwZWRlZiBzdHJ1Y3QgewogIGw0X3RocmVhZGlkX3QgZGVzdCwgdHJ1
ZV9zcmM7Cn0gbDRfaXBjX2RlY2VpdF9pZHNfdDsKIAogCiAKIApleHRlcm4gX19pbmxpbmVfXyAg
aW50Cmw0X2kzODZfaXBjX2NhbGwobDRfdGhyZWFkaWRfdCBkZXN0LCAKCQkgY29uc3Qgdm9pZCAq
c25kX21zZywgZHdvcmRfdCBzbmRfZHdvcmQwLCBkd29yZF90IHNuZF9kd29yZDEsIAoJCSB2b2lk
ICpyY3ZfbXNnLCBkd29yZF90ICpyY3ZfZHdvcmQwLCBkd29yZF90ICpyY3ZfZHdvcmQxLCAKCQkg
bDRfdGltZW91dF90IHRpbWVvdXQsIGw0X21zZ2RvcGVfdCAqcmVzdWx0KTsKZXh0ZXJuIF9faW5s
aW5lX18gIGludApsNF9pMzg2X2lwY19yZXBseV9hbmRfd2FpdChsNF90aHJlYWRpZF90IGRlc3Qs
IAoJCQkgICBjb25zdCB2b2lkICpzbmRfbXNnLCAKCQkJICAgZHdvcmRfdCBzbmRfZHdvcmQwLCBk
d29yZF90IHNuZF9kd29yZDEsIAoJCQkgICBsNF90aHJlYWRpZF90ICpzcmMsCgkJCSAgIHZvaWQg
KnJjdl9tc2csIGR3b3JkX3QgKnJjdl9kd29yZDAsIAoJCQkgICBkd29yZF90ICpyY3ZfZHdvcmQx
LCAKCQkJICAgbDRfdGltZW91dF90IHRpbWVvdXQsIGw0X21zZ2RvcGVfdCAqcmVzdWx0KTsKZXh0
ZXJuIF9faW5saW5lX18gIGludApsNF9pMzg2X2lwY19yZXBseV9kZWNlaXRpbmdfYW5kX3dhaXQo
Y29uc3QgbDRfaXBjX2RlY2VpdF9pZHNfdCBpZHMsCgkJCQkgICAgIGNvbnN0IHZvaWQgKnNuZF9t
c2csIAoJCQkJICAgICBkd29yZF90IHNuZF9kd29yZDAsIGR3b3JkX3Qgc25kX2R3b3JkMSwKCQkJ
CSAgICAgbDRfdGhyZWFkaWRfdCAqc3JjLAoJCQkJICAgICB2b2lkICpyY3ZfbXNnLCAKCQkJCSAg
ICAgZHdvcmRfdCAqcmN2X2R3b3JkMCwgZHdvcmRfdCAqcmN2X2R3b3JkMSwgCgkJCQkgICAgIGw0
X3RpbWVvdXRfdCB0aW1lb3V0LCAKCQkJCSAgICAgbDRfbXNnZG9wZV90ICpyZXN1bHQpOwpleHRl
cm4gX19pbmxpbmVfXyAgaW50Cmw0X2kzODZfaXBjX3NlbmQobDRfdGhyZWFkaWRfdCBkZXN0LCAK
CQkgY29uc3Qgdm9pZCAqc25kX21zZywgZHdvcmRfdCBzbmRfZHdvcmQwLCBkd29yZF90IHNuZF9k
d29yZDEsIAoJCSBsNF90aW1lb3V0X3QgdGltZW91dCwgbDRfbXNnZG9wZV90ICpyZXN1bHQpOwpl
eHRlcm4gX19pbmxpbmVfXyAgaW50Cmw0X2kzODZfaXBjX3NlbmRfZGVjZWl0aW5nKGw0X2lwY19k
ZWNlaXRfaWRzX3QgaWRzLAoJCQkgICBjb25zdCB2b2lkICpzbmRfbXNnLCAKCQkJICAgZHdvcmRf
dCBzbmRfZHdvcmQwLCBkd29yZF90IHNuZF9kd29yZDEsIAoJCQkgICBsNF90aW1lb3V0X3QgdGlt
ZW91dCwgbDRfbXNnZG9wZV90ICpyZXN1bHQpOwpleHRlcm4gX19pbmxpbmVfXyAgaW50Cmw0X2kz
ODZfaXBjX3dhaXQobDRfdGhyZWFkaWRfdCAqc3JjLAoJCSB2b2lkICpyY3ZfbXNnLCBkd29yZF90
ICpyY3ZfZHdvcmQwLCBkd29yZF90ICpyY3ZfZHdvcmQxLCAKCQkgbDRfdGltZW91dF90IHRpbWVv
dXQsIGw0X21zZ2RvcGVfdCAqcmVzdWx0KTsKZXh0ZXJuIF9faW5saW5lX18gIGludApsNF9pMzg2
X2lwY19yZWNlaXZlKGw0X3RocmVhZGlkX3Qgc3JjLAoJCSAgICB2b2lkICpyY3ZfbXNnLCBkd29y
ZF90ICpyY3ZfZHdvcmQwLCBkd29yZF90ICpyY3ZfZHdvcmQxLCAKCQkgICAgbDRfdGltZW91dF90
IHRpbWVvdXQsIGw0X21zZ2RvcGVfdCAqcmVzdWx0KTsKZXh0ZXJuIF9faW5saW5lX18gIGludCBs
NF9pcGNfZnBhZ2VfcmVjZWl2ZWQobDRfbXNnZG9wZV90IG1zZ2RvcGUpOwpleHRlcm4gX19pbmxp
bmVfXyAgaW50IGw0X2lwY19pc19mcGFnZV9ncmFudGVkKGw0X2ZwYWdlX3QgZnApOwpleHRlcm4g
X19pbmxpbmVfXyAgaW50IGw0X2lwY19pc19mcGFnZV93cml0YWJsZShsNF9mcGFnZV90IGZwKTsK
IApleHRlcm4gX19pbmxpbmVfXyAgaW50Cmw0X2kzODZfaXBjX2NoaWVmX3dhaXQobDRfdGhyZWFk
aWRfdCAqc3JjLCBsNF90aHJlYWRpZF90ICpyZWFsX2RzdCwKCQkgICAgICAgdm9pZCAqcmN2X21z
ZywgZHdvcmRfdCAqcmN2X2R3b3JkMCwgCgkJICAgICAgIGR3b3JkX3QgKnJjdl9kd29yZDEsIGw0
X3RpbWVvdXRfdCB0aW1lb3V0LCAKCQkgICAgICAgbDRfbXNnZG9wZV90ICpyZXN1bHQpOwpleHRl
cm4gX19pbmxpbmVfXyAgaW50Cmw0X2kzODZfaXBjX2NoaWVmX3JlY2VpdmUobDRfdGhyZWFkaWRf
dCBzcmMsIGw0X3RocmVhZGlkX3QgKnJlYWxfZHN0LAoJCQkgIHZvaWQgKnJjdl9tc2csIGR3b3Jk
X3QgKnJjdl9kd29yZDAsIAoJCQkgIGR3b3JkX3QgKnJjdl9kd29yZDEsIGw0X3RpbWVvdXRfdCB0
aW1lb3V0LCAKCQkJICBsNF9tc2dkb3BlX3QgKnJlc3VsdCk7CmV4dGVybiBfX2lubGluZV9fICBp
bnQKbDRfaTM4Nl9pcGNfY2hpZWZfY2FsbChsNF90aHJlYWRpZF90IGRlc3QsIGw0X3RocmVhZGlk
X3QgZmFrZV9zcmMsCgkJICAgICAgIGNvbnN0IHZvaWQgKnNuZF9tc2csIGR3b3JkX3Qgc25kX2R3
b3JkMCwgCgkJICAgICAgIGR3b3JkX3Qgc25kX2R3b3JkMSwgCgkJICAgICAgIGw0X3RocmVhZGlk
X3QgKnJlYWxfZHN0LAoJCSAgICAgICB2b2lkICpyY3ZfbXNnLCBkd29yZF90ICpyY3ZfZHdvcmQw
LCAKCQkgICAgICAgZHdvcmRfdCAqcmN2X2R3b3JkMSwgCgkJICAgICAgIGw0X3RpbWVvdXRfdCB0
aW1lb3V0LCBsNF9tc2dkb3BlX3QgKnJlc3VsdCk7CmV4dGVybiBfX2lubGluZV9fICBpbnQKbDRf
aTM4Nl9pcGNfY2hpZWZfcmVwbHlfYW5kX3dhaXQobDRfdGhyZWFkaWRfdCBkZXN0LCBsNF90aHJl
YWRpZF90IGZha2Vfc3JjLAoJCQkJIGNvbnN0IHZvaWQgKnNuZF9tc2csIAoJCQkJIGR3b3JkX3Qg
c25kX2R3b3JkMCwgZHdvcmRfdCBzbmRfZHdvcmQxLCAKCQkJCSBsNF90aHJlYWRpZF90ICpzcmMs
IGw0X3RocmVhZGlkX3QgKnJlYWxfZHN0LAoJCQkJIHZvaWQgKnJjdl9tc2csIGR3b3JkX3QgKnJj
dl9kd29yZDAsIAoJCQkJIGR3b3JkX3QgKnJjdl9kd29yZDEsIAoJCQkJIGw0X3RpbWVvdXRfdCB0
aW1lb3V0LCBsNF9tc2dkb3BlX3QgKnJlc3VsdCk7CmV4dGVybiBfX2lubGluZV9fICBpbnQKbDRf
aTM4Nl9pcGNfY2hpZWZfc2VuZChsNF90aHJlYWRpZF90IGRlc3QsIGw0X3RocmVhZGlkX3QgZmFr
ZV9zcmMsCgkJICAgICAgIGNvbnN0IHZvaWQgKnNuZF9tc2csIGR3b3JkX3Qgc25kX2R3b3JkMCwg
CgkJICAgICAgIGR3b3JkX3Qgc25kX2R3b3JkMSwgCgkJICAgICAgIGw0X3RpbWVvdXRfdCB0aW1l
b3V0LCBsNF9tc2dkb3BlX3QgKnJlc3VsdCk7CiAKZXh0ZXJuIF9faW5saW5lX18gIGludCBsNF9p
cGNfZnBhZ2VfcmVjZWl2ZWQobDRfbXNnZG9wZV90IG1zZ2RvcGUpCnsKICByZXR1cm4gbXNnZG9w
ZS5tZC5mcGFnZV9yZWNlaXZlZCAhPSAwOwp9CmV4dGVybiBfX2lubGluZV9fICBpbnQgbDRfaXBj
X2lzX2ZwYWdlX2dyYW50ZWQobDRfZnBhZ2VfdCBmcCkKewogIHJldHVybiBmcC5mcC5ncmFudCAh
PSAwOwp9CmV4dGVybiBfX2lubGluZV9fICBpbnQgbDRfaXBjX2lzX2ZwYWdlX3dyaXRhYmxlKGw0
X2ZwYWdlX3QgZnApCnsKICByZXR1cm4gZnAuZnAud3JpdGUgIT0gMDsKfQogCiAKIAojIDEgIi9o
b21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS94ODYvdmVyMi9pcGMtbDQyLWdjYzI5NS1u
b3BpYy5oIiAxCiAKIApleHRlcm4gX19pbmxpbmVfXyAgaW50Cmw0X2kzODZfaXBjX2NhbGwobDRf
dGhyZWFkaWRfdCBkZXN0LCAKCQkgY29uc3Qgdm9pZCAqc25kX21zZywgZHdvcmRfdCBzbmRfZHdv
cmQwLCBkd29yZF90IHNuZF9kd29yZDEsIAoJCSB2b2lkICpyY3ZfbXNnLCBkd29yZF90ICpyY3Zf
ZHdvcmQwLCBkd29yZF90ICpyY3ZfZHdvcmQxLCAKCQkgbDRfdGltZW91dF90IHRpbWVvdXQsIGw0
X21zZ2RvcGVfdCAqcmVzdWx0KQp7CiAgdW5zaWduZWQgZHVtbXkxOwogIGFzbSB2b2xhdGlsZSgK
ICAgICAgIm1vdmwgICAgICU1LCAlJWVjeCAgICAgICBcblx0IgkJIAogICAgICAibGVhbCAgICAg
JTQsICUlZXNpICAgICAgIFxuXHQiCQkgCiAgICAgICJwdXNobAklJWVicAkJXG5cdCIJCSAKICAg
ICAgIm1vdmwJJSVlZGksICUlZWJwCVxuXHQiCiAgICAgICJtb3ZsCTQoJSVlc2kpLCAlJWVkaQlc
blx0IgkJIAogICAgICAibW92bAkoJSVlc2kpLCAlJWVzaQlcblx0IgkJIAogICAgICAiaW50CSQw
eDMwCQlcblx0IgogICAgICAicG9wbAklJWVicAkJXG5cdCIJCSAKICAgICAgOiAKICAgICAgIj1h
IiAoKnJlc3VsdCksCQkJCSAKICAgICAgIj1kIiAoKnJjdl9kd29yZDApLAkJCSAKICAgICAgIj1i
IiAoKnJjdl9kd29yZDEpLAkJCSAKICAgICAgIj1EIiAoZHVtbXkxKQkJCQkgCiAgICAgIDoKICAg
ICAgIm0iIChkZXN0KSwJCQkJIAogICAgICAibSIgKHRpbWVvdXQpLAkJCQkgCiAgICAgICIzIiAo
KChpbnQpcmN2X21zZykgJiAofjEgKSksIAogICAgICAiMCIgKCgoaW50KXNuZF9tc2cpICYgKH4x
ICkpLAkgCiAgICAgICIxIiAoc25kX2R3b3JkMCksCQkJCSAKICAgICAgIjIiIChzbmRfZHdvcmQx
KQkJCQkgCiAgICAgIDoKICAgICAgImVzaSIsICJlY3giCiAgICAgICwgIm1lbW9yeSIKICAgICAg
KTsKICByZXR1cm4gKCgoICpyZXN1bHQgKS5tc2dkb3BlKSAmIDB4RjAgKSA7Cn0KZXh0ZXJuIF9f
aW5saW5lX18gIGludApsNF9pMzg2X2lwY19yZXBseV9hbmRfd2FpdChsNF90aHJlYWRpZF90IGRl
c3QsIAoJCQkgICBjb25zdCB2b2lkICpzbmRfbXNnLCAKCQkJICAgZHdvcmRfdCBzbmRfZHdvcmQw
LCBkd29yZF90IHNuZF9kd29yZDEsIAoJCQkgICBsNF90aHJlYWRpZF90ICpzcmMsCgkJCSAgIHZv
aWQgKnJjdl9tc2csIGR3b3JkX3QgKnJjdl9kd29yZDAsIAoJCQkgICBkd29yZF90ICpyY3ZfZHdv
cmQxLCAKCQkJICAgbDRfdGltZW91dF90IHRpbWVvdXQsIGw0X21zZ2RvcGVfdCAqcmVzdWx0KQp7
CiAgdW5zaWduZWQgZHVtbXkxLCBkdW1teTI7CiAgc3RydWN0IHsKICAgIGw0X3RocmVhZGlkX3Qg
KmRlc3Q7CiAgICBsNF90aHJlYWRpZF90ICpzcmM7CiAgICBsNF90aW1lb3V0X3QgdGltZW91dDsK
ICB9IGFkZHJlc3NlcyA9IHsgJmRlc3QsIHNyYywgdGltZW91dCB9OwogIGFzbSB2b2xhdGlsZSgK
ICAgICAgIAogICAgICAicHVzaGwJJSVlYnAJCVxuXHQiCQkgCiAgICAgICJwdXNobAklJWVzaQkJ
XG5cdCIKICAgICAgIm1vdmwgICAgIDgoJSVlc2kpLCAlJWVjeCBcblx0IiAgICAgICAgICAgIAog
ICAgICAibW92bAkoJSVlc2kpLCAlJWVzaQlcblx0IgkJIAogICAgICAibW92bAklJWVkaSwgJSVl
YnAgICAgXG5cdCIgCQkgCiAgICAgICJtb3ZsCTQoJSVlc2kpLCAlJWVkaQlcblx0IgkJIAogICAg
ICAibW92bAkoJSVlc2kpLCAlJWVzaQlcblx0IgkJIAogICAgICAiaW50CSQweDMwCQlcblx0Igog
ICAgICAicG9wbAklJWVicAkJXG5cdCIKICAgICAgIm1vdmwJNCglJWVicCksICUlZWJwCVxuXHQi
CQkgCiAgICAgICJtb3ZsCSUlZXNpLCAoJSVlYnApICBcblx0IgkJIAogICAgICAibW92bAklJWVk
aSwgNCglJWVicClcblx0IgkJIAogICAgICAicG9wbAklJWVicAkJXG5cdCIJCSAKICAgICAgOiAK
ICAgICAgIj1hIiAoKnJlc3VsdCksCQkJCSAKICAgICAgIj1kIiAoKnJjdl9kd29yZDApLAkJCSAK
ICAgICAgIj1iIiAoKnJjdl9kd29yZDEpLAkJCSAKICAgICAgIj1TIiAoZHVtbXkxKSwKICAgICAg
Ij1EIiAoZHVtbXkyKQogICAgICA6CiAgICAgICI0IiAoKChpbnQpcmN2X21zZykgfCAxICksCSAK
ICAgICAgIjMiICgmYWRkcmVzc2VzKSwJCQkJIAogICAgICAiMCIgKCgoaW50KXNuZF9tc2cpICYg
KH4xICkpLAkgCiAgICAgICIxIiAoc25kX2R3b3JkMCksCQkJCSAKICAgICAgIjIiIChzbmRfZHdv
cmQxKQkJCQkgCiAgICAgIDoKICAgICAgImVjeCIKICAgICAgLCAibWVtb3J5IgogICAgICApOwog
IHJldHVybiAoKCggKnJlc3VsdCApLm1zZ2RvcGUpICYgMHhGMCApIDsKfQpleHRlcm4gX19pbmxp
bmVfXyAgaW50Cmw0X2kzODZfaXBjX3JlcGx5X2RlY2VpdGluZ19hbmRfd2FpdChsNF9pcGNfZGVj
ZWl0X2lkc190IGlkcywKCQkJCSAgICAgY29uc3Qgdm9pZCAqc25kX21zZywgCgkJCQkgICAgIGR3
b3JkX3Qgc25kX2R3b3JkMCwgZHdvcmRfdCBzbmRfZHdvcmQxLAoJCQkJICAgICBsNF90aHJlYWRp
ZF90ICpzcmMsCgkJCQkgICAgIHZvaWQgKnJjdl9tc2csIAoJCQkJICAgICBkd29yZF90ICpyY3Zf
ZHdvcmQwLCBkd29yZF90ICpyY3ZfZHdvcmQxLCAKCQkJCSAgICAgbDRfdGltZW91dF90IHRpbWVv
dXQsIAoJCQkJICAgICBsNF9tc2dkb3BlX3QgKnJlc3VsdCkKewogIHN0cnVjdCB7CiAgICBsNF9p
cGNfZGVjZWl0X2lkc190ICppZHM7CiAgICBsNF90aHJlYWRpZF90ICpzcmM7CiAgfSBhZGRyZXNz
ZXMgPSB7ICZpZHMsIHNyYyB9OwogIGFzbSB2b2xhdGlsZSgKICAgICAgIAogICAgICAicHVzaGwJ
JSVlYnAJCVxuXHQiCQkgCiAgICAgICJwdXNobAklJWVzaQkJXG5cdCIKICAgICAgIm1vdmwJKCUl
ZXNpKSwgJSVlc2kJXG5cdCIJCSAKICAgICAgIm1vdmwJJSVlZGksICUlZWJwCVxuXHQiCiAgICAg
ICJwdXNobAkxMiglJWVzaSkJXG5cdCIJCSAKICAgICAgIAogICAgICAicHVzaGwJOCglJWVzaSkJ
XG5cdCIJCSAgCiAgICAgICAKICAgICAgIm1vdmwJNCglJWVzaSksICUlZWRpCVxuXHQiCQkgCiAg
ICAgICJtb3ZsCSglJWVzaSksICUlZXNpCVxuXHQiCQkgCiAgICAgICJpbnQJJDB4MzAJCVxuXHQi
CiAgICAgICJhZGRsCSQ4LCAlJWVzcAlcblx0IgkJIAogICAgICAicG9wbAklJWVicAkJXG5cdCIK
ICAgICAgIm1vdmwJNCglJWVicCksICUlZWJwCVxuXHQiCQkgCiAgICAgICJtb3ZsCSUlZXNpLCAo
JSVlYnApICBcblx0IgkJIAogICAgICAibW92bAklJWVkaSwgNCglJWVicClcblx0IgkJIAogICAg
ICAicG9wbAklJWVicAkJXG5cdCIJCSAKICAgICAgOiAKICAgICAgIj1hIiAoKnJlc3VsdCksCQkJ
CSAKICAgICAgIj1kIiAoKnJjdl9kd29yZDApLAkJCSAKICAgICAgIj1iIiAoKnJjdl9kd29yZDEp
CQkJIAogICAgICA6CiAgICAgICJTIiAoJmFkZHJlc3NlcyksCQkJCSAKICAgICAgImMiICh0aW1l
b3V0KSwJCQkJIAogICAgICAiRCIgKCgoaW50KXJjdl9tc2cpIHwgMSApLAkgCiAgICAgICIwIiAo
KChpbnQpc25kX21zZykgJiAofjEgKSksCSAKICAgICAgIjEiIChzbmRfZHdvcmQwKSwJCQkJIAog
ICAgICAiMiIgKHNuZF9kd29yZDEpCQkJCSAKICAgICAgOgogICAgICAiZXNpIiwgImVkaSIsICJl
Y3giCiAgICAgICwgIm1lbW9yeSIKICAgICAgKTsKICByZXR1cm4gKCgoICpyZXN1bHQgKS5tc2dk
b3BlKSAmIDB4RjAgKSA7Cn0KZXh0ZXJuIF9faW5saW5lX18gIGludApsNF9pMzg2X2lwY19zZW5k
KGw0X3RocmVhZGlkX3QgZGVzdCwgCgkJIGNvbnN0IHZvaWQgKnNuZF9tc2csIGR3b3JkX3Qgc25k
X2R3b3JkMCwgZHdvcmRfdCBzbmRfZHdvcmQxLCAKCQkgbDRfdGltZW91dF90IHRpbWVvdXQsIGw0
X21zZ2RvcGVfdCAqcmVzdWx0KQp7CiAgdW5zaWduZWQgZHVtbXkxLCBkdW1teTIsIGR1bW15Mywg
ZHVtbXk0OwogIGFzbSB2b2xhdGlsZSgKICAgICAgInB1c2hsCSUlZWJwCQlcblx0IgkJIAogICAg
ICAibW92bCAgICAgNCglJWVzaSksJSVlZGkgIFxuXHQiCiAgICAgICJtb3ZsICAgICAoJSVlc2kp
LCUlZXNpICBcblx0IgogICAgICAibW92bAkkLTEsJSVlYnAJXG5cdCIJCSAKICAgICAgImludAkk
MHgzMAkJXG5cdCIKICAgICAgInBvcGwJJSVlYnAJCVxuXHQiCQkgCiAgICAgIDogCiAgICAgICI9
YSIgKCpyZXN1bHQpLAkJCQkgCiAgICAgICI9ZCIgKGR1bW15MSksCQkJCSAKICAgICAgIj1jIiAo
ZHVtbXkyKSwJCQkJIAogICAgICAiPWIiIChkdW1teTMpLAkJCQkgCiAgICAgICI9UyIgKGR1bW15
NCkJCQkJIAogICAgICA6CiAgICAgICIxIiAoc25kX2R3b3JkMCksCQkJCSAKICAgICAgIjIiICh0
aW1lb3V0KSwJCQkJIAogICAgICAiMyIgKHNuZF9kd29yZDEpLAkJCQkgCiAgICAgICI0IiAoJmRl
c3QpLAkJCQkgCiAgICAgICIwIiAoKChpbnQpc25kX21zZykgJiAofjEgKSkJIAogICAgICA6CiAg
ICAgICJlZGkiCiAgICAgICwgIm1lbW9yeSIKICAgICAgKTsKICByZXR1cm4gKCgoICpyZXN1bHQg
KS5tc2dkb3BlKSAmIDB4RjAgKSA7Cn07CmV4dGVybiBfX2lubGluZV9fICBpbnQKbDRfaTM4Nl9p
cGNfc2VuZF9kZWNlaXRpbmcobDRfaXBjX2RlY2VpdF9pZHNfdCBpZHMsCgkJCSAgIGNvbnN0IHZv
aWQgKnNuZF9tc2csIAoJCQkgICBkd29yZF90IHNuZF9kd29yZDAsIGR3b3JkX3Qgc25kX2R3b3Jk
MSwgCgkJCSAgIGw0X3RpbWVvdXRfdCB0aW1lb3V0LCBsNF9tc2dkb3BlX3QgKnJlc3VsdCkKewog
IGFzbSB2b2xhdGlsZSgKICAgICAgInB1c2hsCSUlZWJwCQlcblx0IgkJIAogICAgICAicHVzaGwJ
NCglJWVzaSkJXG5cdCIJCQogICAgICAicHVzaGwJKCUlZXNpKQkJXG5cdCIJCQogICAgICAibW92
bAkoJSVlZGkpLCAlJWVzaQlcblx0IgogICAgICAibW92bAk0KCUlZWRpKSwgJSVlZGkJXG5cdCIK
ICAgICAgIm1vdmwJJTYgLCUlZWJwCVxuXHQiIAogICAgICAKICAgICAgImludAkkMHgzMAkJXG5c
dCIKICAgICAgIAogICAgICAiYWRkbAkkOCwgJSVlc3AJXG5cdCIKICAgICAgInBvcGwJJSVlYnAJ
CVxuXHQiCQkgCiAgICAgIDogCiAgICAgICI9YSIgKCpyZXN1bHQpCQkJCSAKICAgICAgOgogICAg
ICAiZCIgKHNuZF9kd29yZDApLAkJCQkgCiAgICAgICJjIiAodGltZW91dCksCQkJCSAKICAgICAg
ImIiIChzbmRfZHdvcmQxKSwJCQkJIAogICAgICAiRCIgKCZpZHMuZGVzdCksCQkJCSAKICAgICAg
IlMiICgmaWRzLnRydWVfc3JjKSwJCQkgCiAgICAgICJpIiAoKC0xKSApLAkJIAogICAgICAiMCIg
KCgoaW50KXNuZF9tc2cpICYgKH4xICkpCSAKICAgICAgOgogICAgICAiZXNpIiwgImVkaSIsICJl
YngiLCAiZWN4IiwgImVkeCIKICAgICAgLCAibWVtb3J5IgogICAgICApOwogIHJldHVybiAoKCgg
KnJlc3VsdCApLm1zZ2RvcGUpICYgMHhGMCApIDsKfTsKZXh0ZXJuIF9faW5saW5lX18gIGludAps
NF9pMzg2X2lwY193YWl0KGw0X3RocmVhZGlkX3QgKnNyYywKCQkgdm9pZCAqcmN2X21zZywgZHdv
cmRfdCAqcmN2X2R3b3JkMCwgZHdvcmRfdCAqcmN2X2R3b3JkMSwgCgkJIGw0X3RpbWVvdXRfdCB0
aW1lb3V0LCBsNF9tc2dkb3BlX3QgKnJlc3VsdCkKewogIHVuc2lnbmVkIGR1bW15MSwgZHVtbXky
OwogIGFzbSB2b2xhdGlsZSgKICAgICAgInB1c2hsCSUlZWJwCQlcblx0IiAgCiAgICAgICJwdXNo
bCAgICAlJWVzaSAgICAgICAgICAgXG5cdCIgIAogICAgICAibW92bAklJWVieCwlJWVicAlcblx0
IiAgCiAgICAgICJpbnQJJDB4MzAJCVxuXHQiCiAgICAgICJwb3BsICAgICAlJWVicCAgICAgICAg
ICAgXG5cdCIgIAogICAgICAibW92bCAgICAgJSVlc2ksKCUlZWJwKSAgIFxuXHQiICAKICAgICAg
Im1vdmwgICAgICUlZWRpLDQoJSVlYnApICBcblx0IiAgCiAgICAgICJwb3BsCSUlZWJwCQlcblx0
IiAgCiAgICAgIDogCiAgICAgICI9YSIgKCpyZXN1bHQpLAkJIAogICAgICAiPWIiICgqcmN2X2R3
b3JkMSksCSAKICAgICAgIj1jIiAoZHVtbXkxKSwJCSAKICAgICAgIj1kIiAoKnJjdl9kd29yZDAp
LAkgCiAgICAgICI9UyIgKGR1bW15MikJCSAKICAgICAgOgogICAgICAiMCIgKCgtMSkgKSwJCSAK
ICAgICAgIjEiICgoKGludClyY3ZfbXNnKSB8IDEgKSwJIAogICAgICAiMiIgKHRpbWVvdXQpLAkJ
IAogICAgICAiNCIgKHNyYykJCQkgCiAgICAgIDoKICAgICAgImVkaSIKICAgICAgLCAibWVtb3J5
IgogICAgICApOwogIHJldHVybiAoKCggKnJlc3VsdCApLm1zZ2RvcGUpICYgMHhGMCApIDsKfQpl
eHRlcm4gX19pbmxpbmVfXyAgaW50Cmw0X2kzODZfaXBjX3JlY2VpdmUobDRfdGhyZWFkaWRfdCBz
cmMsCgkJICAgIHZvaWQgKnJjdl9tc2csIGR3b3JkX3QgKnJjdl9kd29yZDAsIGR3b3JkX3QgKnJj
dl9kd29yZDEsIAoJCSAgICBsNF90aW1lb3V0X3QgdGltZW91dCwgbDRfbXNnZG9wZV90ICpyZXN1
bHQpCnsKICB1bnNpZ25lZCBkdW1teTEsIGR1bW15MjsKICBhc20gdm9sYXRpbGUoCiAgICAgICJw
dXNobAklJWVicAkJXG5cdCIJCSAKICAgICAgIm1vdmwgICAgIDQoJSVlc2kpLCAlJWVkaSBcblx0
IgogICAgICAibW92bAkoJSVlc2kpLCAlJWVzaSAgXG5cdCIKICAgICAgIm1vdmwJJSVlYngsJSVl
YnAJXG5cdCIgCiAgICAgICJpbnQJJDB4MzAJCVxuXHQiCiAgICAgICJwb3BsCSUlZWJwCQlcblx0
IgkJIAogICAgICA6IAogICAgICAiPWEiICgqcmVzdWx0KSwJCQkJIAogICAgICAiPWQiICgqcmN2
X2R3b3JkMCksCQkJIAogICAgICAiPWIiICgqcmN2X2R3b3JkMSksCQkJIAogICAgICAiPWMiIChk
dW1teTEpLAkJCQkgCiAgICAgICI9UyIgKGR1bW15MikJCQkJIAogICAgICA6CiAgICAgICIzIiAo
dGltZW91dCksCQkJCSAKICAgICAgIjQiICgmc3JjKSwJCQkJIAogICAgICAiMCIgKCgtMSkgKSwJ
CSAKICAgICAgIjIiICgoKGludClyY3ZfbXNnKSAmICh+MSApKSAgCiAgICAgIDoKICAgICAgImVk
aSIKICAgICAgLCAibWVtb3J5IgogICAgICApOwogIHJldHVybiAoKCggKnJlc3VsdCApLm1zZ2Rv
cGUpICYgMHhGMCApIDsKfQogCmV4dGVybiBfX2lubGluZV9fICBpbnQKbDRfaTM4Nl9pcGNfY2hp
ZWZfd2FpdChsNF90aHJlYWRpZF90ICpzcmMsIGw0X3RocmVhZGlkX3QgKnJlYWxfZHN0LAoJCSAg
ICAgICB2b2lkICpyY3ZfbXNnLCBkd29yZF90ICpyY3ZfZHdvcmQwLCAKCQkgICAgICAgZHdvcmRf
dCAqcmN2X2R3b3JkMSwgbDRfdGltZW91dF90IHRpbWVvdXQsIAoJCSAgICAgICBsNF9tc2dkb3Bl
X3QgKnJlc3VsdCkKewogIGFzbQogICAgdm9sYXRpbGUgKAoJICAgICAgInB1c2hsCSUlZWJwCQlc
blx0IgkJIAoJICAgICAgInB1c2hsCSUlZWJ4CQlcblx0IgoJICAgICAgIm1vdmwJJSVlc2ksJSVl
YnAJXG5cdCIKCSAgICAgICJwdXNobCAgICAlJWVkeCAgICAgICAgICAgXG5cdCIKCSAgICAgICJw
dXNobAklJWVkaQkJXG5cdCIKCSAgICAgICJpbnQJJDB4MzAJCVxuXHQiCgkgICAgICAieGNoZ2wg
ICAgJSVlYnAsKCUlZXNwKSAgIFxuXHQiCgkgICAgICAibW92bAklJWVzaSwoJSVlYnApCVxuXHQi
ICAKCSAgICAgICJtb3ZsCSUlZWRpLDQoJSVlYnApCVxuXHQiIAoJICAgICAgInBvcGwgICAgICUl
ZXNpICAgICAgICAgICBcblx0IiAgCgkgICAgICAicG9wbCAgICAgJSVlYnAgICAgICAgICAgIFxu
XHQiICAKCSAgICAgICJtb3ZsICAgICAlJWVjeCwoJSVlYnApICBcblx0IgoJICAgICAgIm1vdmwg
ICAgICUlZXNpLDQoJSVlYnApICAgXG5cdCIgIAoJICAgICAgIm1vdmwJJSVlYngsJSVlc2kJXG5c
dCIKCSAgICAgICJwb3BsCSUlZWJ4CQlcblx0IgoJICAgICAgInBvcGwJJSVlYnAJCVxuXHQiCQkg
CgkgICAgICA6IAoJICAgICAgIj1hIiAoKnJlc3VsdCksCQkJCSAKCSAgICAgICI9ZCIgKCpyY3Zf
ZHdvcmQwKSwJCQkgCgkgICAgICAiPVMiICgqcmN2X2R3b3JkMSkJCSAgICAgICAJIAoJICAgICAg
OgoJICAgICAgImMiICh0aW1lb3V0KSwJCQkJIAoJICAgICAgIkQiIChzcmMpLAkJICAgICAgIAkJ
IAoJICAgICAgIjAiICgoLTEpICksCQkgCgkgICAgICAiMSIgKHJlYWxfZHN0KSwJICAgICAgICAg
ICAgICAgICAgICAgICAgIAoJICAgICAgIjIiICgoKGludClyY3ZfbXNnKSB8IDEgKQkgCgkgICAg
ICA6CgkgICAgICAiZXNpIiwgImVkaSIsICJlY3giCgkgICAgICAsICJtZW1vcnkiCgkgICAgICAp
OwogIHJldHVybiAoKCggKnJlc3VsdCApLm1zZ2RvcGUpICYgMHhGMCApIDsKfQpleHRlcm4gX19p
bmxpbmVfXyAgaW50Cmw0X2kzODZfaXBjX2NoaWVmX3JlY2VpdmUobDRfdGhyZWFkaWRfdCBzcmMs
IGw0X3RocmVhZGlkX3QgKnJlYWxfZHN0LAoJCQkgIHZvaWQgKnJjdl9tc2csIGR3b3JkX3QgKnJj
dl9kd29yZDAsIAoJCQkgIGR3b3JkX3QgKnJjdl9kd29yZDEsIGw0X3RpbWVvdXRfdCB0aW1lb3V0
LCAKCQkJICBsNF9tc2dkb3BlX3QgKnJlc3VsdCkKewogIGFzbQogICAgdm9sYXRpbGUgKAoJICAg
ICAgInB1c2hsCSUlZWJwCQlcblx0IgkJIAoJICAgICAgInB1c2hsCSUlZWJ4CQlcblx0IgoJICAg
ICAgIm1vdmwJJTIsJSVlYnAJXG5cdCIKCSAgICAgICJtb3ZsCSglJWVkaSksJSVlc2kJXG5cdCIK
CSAgICAgICJtb3ZsCTQoJSVlZGkpLCUlZWRpCVxuXHQiIAoJICAgICAgInB1c2hsICAgICUlZWR4
ICAgICAgICAgICBcblx0IgoJICAgICAgImludAkkMHgzMAkJXG5cdCIKCSAgICAgICJwb3BsICAg
ICAlJWVkaSAgICAgICAgICAgXG5cdCIKCSAgICAgICJtb3ZsICAgICAlJWVjeCwgNCglJWVkaSkg
XG5cdCIKCSAgICAgICJtb3ZsICAgICAlJWVicCwgNCglJWVkaSkgXG5cdCIKCSAgICAgICJtb3Zs
CSUlZWJ4LCAlMglcblx0IgoJICAgICAgInBvcGwJJSVlYngJCVxuXHQiCgkgICAgICAicG9wbAkl
JWVicAkJXG5cdCIJCSAKCSAgICAgIDogCgkgICAgICAiPWEiICgqcmVzdWx0KSwJCQkJIAoJICAg
ICAgIj1kIiAoKnJjdl9kd29yZDApLAkJCSAKCSAgICAgICI9UyIgKCpyY3ZfZHdvcmQxKQkJICAg
ICAgIAkgCgkgICAgICA6CgkgICAgICAiYyIgKHRpbWVvdXQpLAkJCQkgCgkgICAgICAiRCIgKCZz
cmMpLAkJICAgICAgIAkJIAoJICAgICAgIjAiICgoLTEpICksCQkgCgkgICAgICAiMSIgKHJlYWxf
ZHN0KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgkgICAgICAiMiIgKCgoaW50KXJjdl9t
c2cpICYgKH4xICkpICAKCSAgICAgIDoKCSAgICAgICJlc2kiLCAiZWRpIiwgImVjeCIKCSAgICAg
ICwgIm1lbW9yeSIKCSAgICAgICk7CiAgcmV0dXJuICgoKCAqcmVzdWx0ICkubXNnZG9wZSkgJiAw
eEYwICkgOwp9CmV4dGVybiBfX2lubGluZV9fICBpbnQKbDRfaTM4Nl9pcGNfY2hpZWZfY2FsbChs
NF90aHJlYWRpZF90IGRlc3QsIGw0X3RocmVhZGlkX3QgZmFrZV9zcmMsCgkJICAgICAgIGNvbnN0
IHZvaWQgKnNuZF9tc2csIGR3b3JkX3Qgc25kX2R3b3JkMCwgCgkJICAgICAgIGR3b3JkX3Qgc25k
X2R3b3JkMSwgCgkJICAgICAgIGw0X3RocmVhZGlkX3QgKnJlYWxfZHN0LAoJCSAgICAgICB2b2lk
ICpyY3ZfbXNnLCBkd29yZF90ICpyY3ZfZHdvcmQwLCAKCQkgICAgICAgZHdvcmRfdCAqcmN2X2R3
b3JkMSwgCgkJICAgICAgIGw0X3RpbWVvdXRfdCB0aW1lb3V0LCBsNF9tc2dkb3BlX3QgKnJlc3Vs
dCkKewogIHN0cnVjdCB7CiAgICBkd29yZF90IGQxLCBkMjsKICAgIGw0X3RocmVhZGlkX3QgZnM7
CiAgfSBkd29yZHMgPSB7c25kX2R3b3JkMCwgc25kX2R3b3JkMSwgZmFrZV9zcmN9OwogIGFzbSAK
ICAgIHZvbGF0aWxlKAoJICAgICAicHVzaGwJJSVlYngJCVxuXHQiICAKCSAgICAgInB1c2hsCSUl
ZWJwCQlcblx0IgkJIAoJICAgICAibW92bAk0KCUlZWR4KSwgJSVlYngJXG5cdCIKCSAgICAgIm1v
dmwJKCUlZWR4KSwgJSVlZHgJXG5cdCIKCSAgICAgIm1vdmwJJSVlZGksICUlZWJwCVxuXHQiCgkg
ICAgICJwdXNobCAgICAgJSVlc2kgICAgICAgICAgIFxuXHQiCgkgICAgICJwdXNobCAgICAgMTIo
JSVlc2kpICAgICAgIFxuXHQiCgkgICAgICJwdXNobCAgICAgOCglJWVzaSkgICAgICAgIFxuXHQi
CgkgICAgICJtb3ZsCTQoJSVlc2kpLCAlJWVkaQlcblx0IgkJIAoJICAgICAibW92bAkoJSVlc2kp
LCAlJWVzaQlcblx0IgkJIAoJICAgICAiaW50CSQweDMwCQlcblx0IgoJICAgICAibGVhICAgICAg
IDgoJSVlc3ApLCAlJWVzcCBcblx0IgoJICAgICAicG9wbCAgICAgICUlZXNpICAgICAgICAgICBc
blx0IgoJICAgICAibW92bCAgICAgICUlZWN4LCA4KCUlZXNpKSBcblx0IgoJICAgICAibW92bCAg
ICAgICUlZWJwLCAxMiglJWVzaSkgXG5cdCIKCSAgICAgInBvcGwJJSVlYnAJCVxuXHQiCQkgCgkg
ICAgICJtb3ZsCSUlZWJ4LCAlJWVjeAlcblx0IgoJICAgICAicG9wbAklJWVieAkJXG5cdCIKCSAg
ICAgOiAKCSAgICAgIj1hIiAoKnJlc3VsdCksCQkJCSAKCSAgICAgIj1kIiAoKnJjdl9kd29yZDAp
LAkJCSAKCSAgICAgIj1jIiAoKnJjdl9kd29yZDEpCQkJCSAKCSAgICAgOgoJICAgICAiRCIgKCgo
aW50KXJjdl9tc2cpICYgKH4xICkpLCAgCgkgICAgICJTIiAoJmRlc3QpLAkJCQkgCgkgICAgICIw
IiAoKGludClzbmRfbXNnKSwJCQkgCgkgICAgICIxIiAoJmR3b3JkcyksCQkJCSAKCSAgICAgIjIi
ICh0aW1lb3V0KQkJCQkgCgkgICAgIDoKCSAgICAgImVzaSIsICJlZGkiLCAiZWN4IgoJICAgICAs
ICJtZW1vcnkiCgkgICAgICk7CiAgKnJlYWxfZHN0ID0gZHdvcmRzLmZzOwogIHJldHVybiAoKCgg
KnJlc3VsdCApLm1zZ2RvcGUpICYgMHhGMCApIDsgIAp9CmV4dGVybiBfX2lubGluZV9fICBpbnQK
bDRfaTM4Nl9pcGNfY2hpZWZfcmVwbHlfYW5kX3dhaXQobDRfdGhyZWFkaWRfdCBkZXN0LCBsNF90
aHJlYWRpZF90IGZha2Vfc3JjLAoJCQkJIGNvbnN0IHZvaWQgKnNuZF9tc2csIAoJCQkJIGR3b3Jk
X3Qgc25kX2R3b3JkMCwgZHdvcmRfdCBzbmRfZHdvcmQxLCAKCQkJCSBsNF90aHJlYWRpZF90ICpz
cmMsIGw0X3RocmVhZGlkX3QgKnJlYWxfZHN0LAoJCQkJIHZvaWQgKnJjdl9tc2csIGR3b3JkX3Qg
KnJjdl9kd29yZDAsIAoJCQkJIGR3b3JkX3QgKnJjdl9kd29yZDEsIAoJCQkJIGw0X3RpbWVvdXRf
dCB0aW1lb3V0LCBsNF9tc2dkb3BlX3QgKnJlc3VsdCkKewogIHN0cnVjdCB7CiAgICBkd29yZF90
IGQxLCBkMjsKICAgIGw0X3RocmVhZGlkX3QgKmRlc3Q7CiAgICBsNF90aHJlYWRpZF90ICpzcmM7
CiAgICBsNF90aHJlYWRpZF90ICpyZWFsOwogIH0gZHdvcmRzID0geyBzbmRfZHdvcmQwLCBzbmRf
ZHdvcmQxLCAmZGVzdCwgc3JjLCAmZmFrZV9zcmMgfTsKICBhc20gCiAgICB2b2xhdGlsZSgKCSAg
ICAgIAoJICAgICAicHVzaGwJJSVlYngJCVxuXHQiICAKCSAgICAgInB1c2hsCSUlZWJwCQlcblx0
IgkJIAoJICAgICAibW92bAklJWVkaSwgJSVlYnAJXG5cdCIgIAoJICAgICAicHVzaGwgICAgICUl
ZWR4ICAgICAgICAgICBcblx0IiAgCgkgICAgICJtb3ZsICAgICAgMTYoJSVlZHgpLCAlJWVzaSBc
blx0IiAgCgkgICAgICJwdXNobCAgICAgJSVlc2kgICAgICAgICAgIFxuXHQiCgkgICAgICJwdXNo
bCAgICAgNCglJWVzaSkgICAgICAgIFxuXHQiICAKCSAgICAgInB1c2hsICAgICAoJSVlc2kpICAg
ICAgICAgXG5cdCIgIAoJICAgICAibW92bCAgICAgIDgoJSVlZHgpLCAlJWVzaSBcblx0IiAgCgkg
ICAgICJtb3ZsICAgICAgNCglJWVzaSksICUlZWRpIFxuXHQiICAKCSAgICAgIm1vdmwgICAgICAo
JSVlc2kpLCAlJWVzaSAgXG5cdCIgIAoJICAgICAKCSAgICAgIm1vdmwJNCglJWVkeCksICUlZWJ4
CVxuXHQiICAKCSAgICAgIm1vdmwJKCUlZWR4KSwgJSVlZHgJXG5cdCIgIAoJICAgICAiaW50CSQw
eDMwCQlcblx0IgoJICAgICAibGVhbCAgICAgIDgoJSVlc3ApLCAlJWVzcCBcblx0IgoJICAgICAi
eGNoZ2wJJSVlYnAsICglJWVzcCkJXG5cdCIgIAoJICAgICAibW92bCAgICAgICUlZWN4LCAoJSVl
YnApICBcblx0IiAgCgkgICAgICJwb3BsICAgICAgJSVlY3ggICAgICAgICAgIFxuXHQiCgkgICAg
ICJtb3ZsICAgICAgJSVlY3gsIDQoJSVlYnApIFxuXHQiICAKCSAgICAgInBvcGwgICAgICAlJWVi
cCAgICAgICAgICAgXG5cdCIgIAoJICAgICAibW92bCAgICAgIDEyKCUlZWJwKSwgJSVlYnAgXG5c
dCIgIAoJICAgICAKCSAgICAgIm1vdmwJJSVlc2ksICglJWVicCkgIFxuXHQiICAKCSAgICAgIm1v
dmwJJSVlZGksIDQoJSVlYnApIFxuXHQiICAKCSAgICAgInBvcGwJJSVlYnAJCVxuXHQiCQkgCgkg
ICAgICJtb3ZsCSUlZWJ4LCAlJWVjeAlcblx0IgoJICAgICAicG9wbAklJWVieAkJXG5cdCIKCSAg
ICAgCiAgICAgIDogCiAgICAgICI9YSIgKCpyZXN1bHQpLAkJCQkgCiAgICAgICI9ZCIgKCpyY3Zf
ZHdvcmQwKSwJCQkgCiAgICAgICI9YyIgKCpyY3ZfZHdvcmQxKQkJCSAKICAgICAgOgogICAgICAi
RCIgKCgoaW50KXJjdl9tc2cpIHwgMSApLAkgCiAgICAgICIxIiAoJmR3b3JkcyksCQkJCSAKICAg
ICAgIjIiICh0aW1lb3V0KSwJCQkJIAogICAgICAiMCIgKChpbnQpc25kX21zZykJCQkgCiAgICAg
IDoKICAgICAgImVzaSIsICJlZGkiLCAiZWN4IgogICAgICAsICJtZW1vcnkiCiAgICAgICk7CiAg
KnJlYWxfZHN0ID0gKmR3b3Jkcy5yZWFsOwogIHJldHVybiAoKCggKnJlc3VsdCApLm1zZ2RvcGUp
ICYgMHhGMCApIDsKfQpleHRlcm4gX19pbmxpbmVfXyAgaW50Cmw0X2kzODZfaXBjX2NoaWVmX3Nl
bmQobDRfdGhyZWFkaWRfdCBkZXN0LCBsNF90aHJlYWRpZF90IGZha2Vfc3JjLAoJCSAgICAgICBj
b25zdCB2b2lkICpzbmRfbXNnLCBkd29yZF90IHNuZF9kd29yZDAsIAoJCSAgICAgICBkd29yZF90
IHNuZF9kd29yZDEsIAoJCSAgICAgICBsNF90aW1lb3V0X3QgdGltZW91dCwgbDRfbXNnZG9wZV90
ICpyZXN1bHQpCnsKICBzdHJ1Y3QgewogICAgbDRfdGhyZWFkaWRfdCAqZCwgKmZha2U7CiAgfSBh
ZGRyZXNzZXMgPSB7ICZkZXN0LCAmZmFrZV9zcmMgfTsKICBhc20gCiAgICB2b2xhdGlsZSgKCSAg
ICAgInB1c2hsCSUlZWJwCQlcblx0IgkJIAoJICAgICAicHVzaGwgICAgICUlZWJ4CQlcblx0IgoJ
ICAgICAibW92bAklJWVzaSwgJSVlYngJXG5cdCIKCSAgICAgIm1vdmwgICAgICA0KCUlZWRpKSwg
JSVlYnAgXG5cdCIKCSAgICAgInB1c2hsICAgICA0KCUlZWJwKSAgICAgICAgXG5cdCIKCSAgICAg
InB1c2hsICAgICAoJSVlYnApICAgICAgICAgXG5cdCIKCSAgICAgIm1vdmwgICAgICAoJSVlZGkp
LCAlJWVicCAgXG5cdCIKCSAgICAgIm1vdmwJKCUlZWJwKSwlJWVzaQlcblx0IgoJICAgICAibW92
bAk0KCUlZWJwKSwlJWVkaQlcblx0IgoJICAgICAibW92bAklNSAsJSVlYnAJXG5cdCIKCSAgICAg
ImludAkkMHgzMAkJXG5cdCIKCSAgICAgImxlYWwgICAgICA4KCUlZXNwKSwgJSVlc3AgXG5cdCIK
CSAgICAgInBvcGwJJSVlYngJCVxuXHQiCgkgICAgICJwb3BsCSUlZWJwCQlcblx0IgkJIAoJICAg
ICA6IAoJICAgICAiPWEiICgqcmVzdWx0KQkJCQkgCgkgICAgIDoKCSAgICAgImQiIChzbmRfZHdv
cmQwKSwJCQkJIAoJICAgICAiYyIgKHRpbWVvdXQpLAkJCQkgCgkgICAgICJTIiAoc25kX2R3b3Jk
MSksCQkJCSAKCSAgICAgIkQiICgmYWRkcmVzc2VzKSwJCQkJIAoJICAgICAiaSIgKCgtMSkgKSwJ
CSAKCSAgICAgIjAiICgoaW50KXNuZF9tc2cpCQkJCSAKCSAgICAgOgoJICAgICAiZXNpIiwgImVk
aSIsICJlY3giLCAiZWR4IgoJICAgICAsICJtZW1vcnkiCgkgICAgICk7CiAgcmV0dXJuICgoKCAq
cmVzdWx0ICkubXNnZG9wZSkgJiAweEYwICkgOwp9CiMgMjM1ICIvaG9tZS9qdzUvdG1wL2xpbnV4
MjIvaW5jbHVkZS9hc20veDg2L3ZlcjIvaXBjLmgiIDIKIyAxMSAiL2hvbWUvanc1L3RtcC9saW51
eDIyL2luY2x1ZGUvYXNtL2w0YXJjaC9sNC5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIy
L2luY2x1ZGUvYXNtL3g4Ni92ZXIyL2tkZWJ1Zy5oIiAxCiAKIApleHRlcm4gX19pbmxpbmVfXyAg
dm9pZCBvdXRjaGFyKGNoYXIgYyk7CmV4dGVybiBfX2lubGluZV9fICB2b2lkIG91dHN0cmluZyhj
aGFyICp0ZXh0KTsKZXh0ZXJuIF9faW5saW5lX18gIHZvaWQgb3V0aGV4MzIoaW50IG51bWJlcik7
CmV4dGVybiBfX2lubGluZV9fICB2b2lkIG91dGhleDIwKGludCBudW1iZXIpOwpleHRlcm4gX19p
bmxpbmVfXyAgdm9pZCBvdXRoZXgxNihpbnQgbnVtYmVyKTsKZXh0ZXJuIF9faW5saW5lX18gIHZv
aWQgb3V0aGV4MTIoaW50IG51bWJlcik7CmV4dGVybiBfX2lubGluZV9fICB2b2lkIG91dGhleDgo
aW50IG51bWJlcik7CmV4dGVybiBfX2lubGluZV9fICB2b2lkIG91dGRlYyhpbnQgbnVtYmVyKTsK
ZXh0ZXJuIF9faW5saW5lX18gIHZvaWQgZmlhc2NvX3Byb2ZpbGVfc3RhcnQodm9pZCk7CmV4dGVy
biBfX2lubGluZV9fICB2b2lkIGZpYXNjb19wcm9maWxlX3N0b3BfYW5kX2R1bXAodm9pZCk7CmV4
dGVybiBfX2lubGluZV9fICB2b2lkIGZpYXNjb19wcm9maWxlX3N0b3Aodm9pZCk7CmV4dGVybiBf
X2lubGluZV9fICB2b2lkIG91dGNoYXIoY2hhciBjKQp7CiAgYXNtKAogICAgICAiaW50CSQzCVxu
XHQiCiAgICAgICJjbXBiCSQwLCUlYWwJXG5cdCIKICAgICAgOiAgCiAgICAgIDogImEiIChjKQog
ICAgICApOwp9CiAKZXh0ZXJuIF9faW5saW5lX18gIHZvaWQgb3V0c3RyaW5nKGNoYXIgKnRleHQp
CnsKICBhc20oCiAgICAgICJpbnQJJDMJXG5cdCIKICAgICAgImNtcGIJJDIsJSVhbCBcblx0Igog
ICAgICA6ICAKICAgICAgOiAiYSIgKHRleHQpCiAgICAgICk7Cn0KZXh0ZXJuIF9faW5saW5lX18g
IHZvaWQgb3V0aGV4MzIoaW50IG51bWJlcikKewogIGFzbSgKICAgICAgImludAkkMwlcblx0Igog
ICAgICAiY21wYgkkNSwlJWFsCVxuXHQiCiAgICAgIDogIAogICAgICA6ICJhIiAobnVtYmVyKQog
ICAgICApOwp9CmV4dGVybiBfX2lubGluZV9fICB2b2lkIG91dGhleDIwKGludCBudW1iZXIpCnsK
ICBhc20oCiAgICAgICJpbnQJJDMJXG5cdCIKICAgICAgImNtcGIJJDYsJSVhbAlcblx0IgogICAg
ICA6ICAKICAgICAgOiAiYSIgKG51bWJlcikKICAgICAgKTsKfQpleHRlcm4gX19pbmxpbmVfXyAg
dm9pZCBvdXRoZXgxNihpbnQgbnVtYmVyKQp7CiAgYXNtKAogICAgICAiaW50CSQzCVxuXHQiCiAg
ICAgICJjbXBiCSQ3LCAlJWFsCVxuXHQiCiAgICAgIDogIAogICAgICA6ICJhIiAobnVtYmVyKQog
ICAgICApOwp9CmV4dGVybiBfX2lubGluZV9fICB2b2lkIG91dGhleDEyKGludCBudW1iZXIpCnsK
ICBhc20oCiAgICAgICJpbnQJJDMJXG5cdCIKICAgICAgImNtcGIJJDgsICUlYWwJXG5cdCIKICAg
ICAgOiAgCiAgICAgIDogImEiIChudW1iZXIpCiAgICAgICk7Cn0KZXh0ZXJuIF9faW5saW5lX18g
IHZvaWQgb3V0aGV4OChpbnQgbnVtYmVyKQp7CiAgYXNtKAogICAgICAiaW50CSQzCVxuXHQiCiAg
ICAgICJjbXBiCSQ5LCAlJWFsCVxuXHQiCiAgICAgIDogIAogICAgICA6ICJhIiAobnVtYmVyKQog
ICAgICApOwp9CmV4dGVybiBfX2lubGluZV9fICB2b2lkIG91dGRlYyhpbnQgbnVtYmVyKQp7CiAg
YXNtKAogICAgICAiaW50CSQzCVxuXHQiCiAgICAgICJjbXBiCSQxMSwgJSVhbAlcblx0IgogICAg
ICA6ICAKICAgICAgOiAiYSIgKG51bWJlcikKICAgICAgKTsKfQpleHRlcm4gX19pbmxpbmVfXyAg
dm9pZCBmaWFzY29fcHJvZmlsZV9zdGFydCh2b2lkKQp7CiAgYXNtKCJpbnQgJDM7IGNtcGIgJDI0
LCAlYWwiKTsKfQpleHRlcm4gX19pbmxpbmVfXyAgdm9pZCBmaWFzY29fcHJvZmlsZV9zdG9wX2Fu
ZF9kdW1wKHZvaWQpCnsKICBhc20oImludCAkMzsgY21wYiAkMjUsICVhbCIpOwp9CmV4dGVybiBf
X2lubGluZV9fICB2b2lkIGZpYXNjb19wcm9maWxlX3N0b3Aodm9pZCkKewogIGFzbSgiaW50ICQz
OyBjbXBiICQyNiwgJWFsIik7Cn0KIyAxMiAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUv
YXNtL2w0YXJjaC9sNC5oIiAyCiMgMjQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2Fz
bS9sNGFyY2gvbDQuaCIKIyA0ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDQu
aCIgMgojIDEzICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL3Byb2Nl
c3Nvci5oIiAyCiAKc3RydWN0IGNwdWluZm9feDg2IHsKCV9fdTgJeDg2OwkJIAoJX191OAl4ODZf
dmVuZG9yOwkgCglfX3U4CXg4Nl9tb2RlbDsKCV9fdTgJeDg2X21hc2s7CgljaGFyCXdwX3dvcmtz
X29rOwkgCgljaGFyCWhsdF93b3Jrc19vazsJIAoJY2hhcgloYXJkX21hdGg7CgljaGFyCXJmdTsK
CWludAljcHVpZF9sZXZlbDsJIAoJX191MzIJeDg2X2NhcGFiaWxpdHk7CgljaGFyCXg4Nl92ZW5k
b3JfaWRbMTZdOwoJY2hhcgl4ODZfbW9kZWxfaWRbNjRdOwoJaW50IAl4ODZfY2FjaGVfc2l6ZTsg
ICAKCWludAlmZGl2X2J1ZzsKCWludAlmMDBmX2J1ZzsKCWludAljb21hX2J1ZzsKCXVuc2lnbmVk
IGxvbmcgbG9vcHNfcGVyX3NlYzsKCXVuc2lnbmVkIGxvbmcgKnBnZF9xdWljazsKCXVuc2lnbmVk
IGxvbmcgKnB0ZV9xdWljazsKCXVuc2lnbmVkIGxvbmcgcGd0YWJsZV9jYWNoZV9zejsKfTsKIAog
CmV4dGVybiBzdHJ1Y3QgY3B1aW5mb194ODYgYm9vdF9jcHVfZGF0YTsKZXh0ZXJuIGNoYXIgaWdu
b3JlX2lycTEzOwpleHRlcm4gdm9pZCBpZGVudGlmeV9jcHUoc3RydWN0IGNwdWluZm9feDg2ICop
OwpleHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKik7CmV4dGVy
biB2b2lkIGRvZGd5X3RzYyh2b2lkKTsKIApleHRlcm4gaW5saW5lIHZvaWQgY3B1aWQoaW50IG9w
LCBpbnQgKmVheCwgaW50ICplYngsIGludCAqZWN4LCBpbnQgKmVkeCkKewoJX19hc21fXygiY3B1
aWQiCgkJOiAiPWEiICgqZWF4KSwKCQkgICI9YiIgKCplYngpLAoJCSAgIj1jIiAoKmVjeCksCgkJ
ICAiPWQiICgqZWR4KQoJCTogImEiIChvcCkKCQk6ICJjYyIpOwp9CiAKIAogCmV4dGVybiBpbnQg
RUlTQV9idXM7CmV4dGVybiBpbnQgTUNBX2J1czsKIApleHRlcm4gdW5zaWduZWQgaW50IG1hY2hp
bmVfaWQ7CmV4dGVybiB1bnNpZ25lZCBpbnQgbWFjaGluZV9zdWJtb2RlbF9pZDsKZXh0ZXJuIHVu
c2lnbmVkIGludCBCSU9TX3JldmlzaW9uOwogCiAKc3RydWN0IGkzODdfaGFyZF9zdHJ1Y3QgewoJ
bG9uZwljd2Q7Cglsb25nCXN3ZDsKCWxvbmcJdHdkOwoJbG9uZwlmaXA7Cglsb25nCWZjczsKCWxv
bmcJZm9vOwoJbG9uZwlmb3M7Cglsb25nCXN0X3NwYWNlWzIwXTsJIAoJbG9uZwlzdGF0dXM7CQkg
Cn07CnN0cnVjdCBpMzg3X3NvZnRfc3RydWN0IHsKCWxvbmcJY3dkOwoJbG9uZwlzd2Q7Cglsb25n
CXR3ZDsKCWxvbmcJZmlwOwoJbG9uZwlmY3M7Cglsb25nCWZvbzsKCWxvbmcJZm9zOwoJbG9uZwlz
dF9zcGFjZVsyMF07CSAKCXVuc2lnbmVkIGNoYXIJZnRvcCwgY2hhbmdlZCwgbG9va2FoZWFkLCBu
b191cGRhdGUsIHJtLCBhbGltaXQ7CglzdHJ1Y3QgaW5mbwkqaW5mbzsKCXVuc2lnbmVkIGxvbmcJ
ZW50cnlfZWlwOwp9Owp1bmlvbiBpMzg3X3VuaW9uIHsKCXN0cnVjdCBpMzg3X2hhcmRfc3RydWN0
IGhhcmQ7CglzdHJ1Y3QgaTM4N19zb2Z0X3N0cnVjdCBzb2Z0Owp9Owp0eXBlZGVmIHN0cnVjdCB7
Cgl1bnNpZ25lZCBsb25nIHNlZzsKfSBtbV9zZWdtZW50X3Q7CnN0cnVjdCBnbG9iYWxfbmVlZF9y
ZXNjaGVkX3N0cnVjdCB7CiAgbG9uZyBnbG9iYWxfbmVlZF9yZXNjaGVkOwp9OwpleHRlcm4gc3Ry
dWN0IGdsb2JhbF9uZWVkX3Jlc2NoZWRfc3RydWN0IGdsb2JhbF9uZWVkX3Jlc2NoZWQ7CnN0cnVj
dCBzaGFyZWRfZGF0YTsKc3RydWN0IHRocmVhZF9zdHJ1Y3QgewogICAKICBhdG9taWNfdCB1bmRl
cl9rZXJuZWxfY29udHJvbDsgCiAgIAogIHBnZF90ICpjcjM7CiAgdW5zaWduZWQgbG9uZyBrZXJu
ZWxfc3A7CiAgc3RydWN0IHNoYXJlZF9kYXRhICpzaGFyZWRfZGF0YTsKICB1bnNpZ25lZCBsb25n
IHN0YXRlOwogIHVuc2lnbmVkIGxvbmcgZGVzYywgZHcwLCBkdzE7ICAKICBsNF90aHJlYWRpZF90
IHVzZXJfdGhyZWFkX2lkOwogIGw0X3RocmVhZGlkX3Qgb3JkZXJfaWQ7ICAgCiAgdW5zaWduZWQg
bG9uZyBjcjIsIHBmX2NvdW50LCBlcnJvcl9jb2RlLCB0cmFwX25vOyAgIAogIHN0cnVjdCBnbG9i
YWxfbmVlZF9yZXNjaGVkX3N0cnVjdCAqbmVlZF9yZXNjaGVkOwogICAKICBtbV9zZWdtZW50X3Qg
ZnM7Cn07CmV4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX3VuZGVyX2tlcm5lbF9jb250
cm9sKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0c3MpCnsKICByZXR1cm4gKCggJnRzcy0+dW5kZXJf
a2VybmVsX2NvbnRyb2wgKS0+Y291bnRlcikgOwp9CmV4dGVybiBpbmxpbmUgdm9pZCBzZXRfdW5k
ZXJfa2VybmVsX2NvbnRyb2woc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRzcywgdW5zaWduZWQgbG9u
ZyB2YWwpCnsKICAoKCggJnRzcy0+dW5kZXJfa2VybmVsX2NvbnRyb2wgKS0+Y291bnRlcikgPSAo
ICB2YWwgKSkgOwp9CiAKc3RydWN0IG1tX3N0cnVjdDsKc3RydWN0IHRhc2tfc3RydWN0OwpzdHJ1
Y3QgcHRfcmVnczsKIAp2b2lkIHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIHVu
c2lnbmVkIGxvbmcgZWlwLCB1bnNpZ25lZCBsb25nIGVzcCk7CiAKZXh0ZXJuIHZvaWQgcmVsZWFz
ZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICopOwogCnBpZF90IGtlcm5lbF90aHJlYWQoaW50
ICgqZm4pKHZvaWQgKiksIHZvaWQgKiBhcmcsICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIApleHRl
cm4gdm9pZCBjb3B5X3NlZ21lbnRzKGludCBuciwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1
Y3QgbW1fc3RydWN0ICogbW0pOwpleHRlcm4gdm9pZCByZWxlYXNlX3NlZ21lbnRzKHN0cnVjdCBt
bV9zdHJ1Y3QgKiBtbSk7CmV4dGVybiB2b2lkIGZvcmdldF9zZWdtZW50cyh2b2lkKTsKIApleHRl
cm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhyZWFkX3NhdmVkX3BjKHN0cnVjdCB0aHJlYWRfc3Ry
dWN0ICp0KQp7CiAgCXJldHVybiAwOwp9CmV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBhbGxv
Y190YXNrX3N0cnVjdCh2b2lkKTsKZXh0ZXJuIHZvaWQgZnJlZV90YXNrX3N0cnVjdChzdHJ1Y3Qg
dGFza19zdHJ1Y3QgKik7CiAKIAojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2Fz
bS9wcm9jZXNzb3IuaCIgMgojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2w0bGlu
dXgveDg2L2NvbmZpZy5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNt
L2w0X21hY3Jvcy5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2w0
YXJjaC9sNF9tYWNyb3MuaCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2Fz
bS94ODYvdmVyMi9sNF9tYWNyb3MuaCIgMQogCiAKIAogCiAKIyA1MCAiL2hvbWUvanc1L3RtcC9s
aW51eDIyL2luY2x1ZGUvYXNtL3g4Ni92ZXIyL2w0X21hY3Jvcy5oIgojIDcgIi9ob21lL2p3NS90
bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvbDRfbWFjcm9zLmgiIDIKIyA0ICIvaG9tZS9q
dzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRfbWFjcm9zLmgiIDIKIyA1ICIvaG9tZS9qdzUv
dG1wL2xpbnV4MjIvaW5jbHVkZS9sNGxpbnV4L3g4Ni9jb25maWcuaCIgMgogCiAKIAogCiAKIAog
CiMgNCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2w0YXJjaC9zeXN0ZW0uaCIg
MgojIDI3ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL3N5c3RlbS5o
IgogCnN0cnVjdCBfX3hjaGdfZHVtbXkgeyB1bnNpZ25lZCBsb25nIGFbMTAwXTsgfTsKIApleHRl
cm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgdm9pZCAqIHB0
ciwgaW50IHNpemUpCnsKCXN3aXRjaCAoc2l6ZSkgewoJCWNhc2UgMToKCQkJX19hc21fXygieGNo
Z2IgJWIwLCUxIgoJCQkJOiI9cSIgKHgpCgkJCQk6Im0iICgqICgoc3RydWN0IF9feGNoZ19kdW1t
eSAqKSggcHRyICkpICksICIwIiAoeCkKCQkJCToibWVtb3J5Iik7CgkJCWJyZWFrOwoJCWNhc2Ug
MjoKCQkJX19hc21fXygieGNoZ3cgJXcwLCUxIgoJCQkJOiI9ciIgKHgpCgkJCQk6Im0iICgqICgo
c3RydWN0IF9feGNoZ19kdW1teSAqKSggcHRyICkpICksICIwIiAoeCkKCQkJCToibWVtb3J5Iik7
CgkJCWJyZWFrOwoJCWNhc2UgNDoKCQkJX19hc21fXygieGNoZ2wgJTAsJTEiCgkJCQk6Ij1yIiAo
eCkKCQkJCToibSIgKCogKChzdHJ1Y3QgX194Y2hnX2R1bW15ICopKCBwdHIgKSkgKSwgIjAiICh4
KQoJCQkJOiJtZW1vcnkiKTsKCQkJYnJlYWs7Cgl9CglyZXR1cm4geDsKfQogCiAKIAogCiAKIyAx
NTQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvc3lzdGVtLmgiCiMg
NCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL3N5c3RlbS5oIiAyCiMgMzEgIi9o
b21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS1pMzg2L3NlbWFwaG9yZS5oIiAyCiMgMSAi
L2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgiIDEKIyAxICIvaG9t
ZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL3NwaW5sb2NrLmgiIDEKIAojIDEg
Ii9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS1pMzg2L3NwaW5sb2NrLmgiIDEKIAog
IHR5cGVkZWYgc3RydWN0IHsgfSBzcGlubG9ja190OwogIAojIDgwICIvaG9tZS9qdzUvdG1wL2xp
bnV4MjIvaW5jbHVkZS9hc20taTM4Ni9zcGlubG9jay5oIgogCiAgdHlwZWRlZiBzdHJ1Y3QgeyB9
IHJ3bG9ja190OwogIAojIDI1MyAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtLWkz
ODYvc3BpbmxvY2suaCIKIyAxMCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2w0
YXJjaC9zcGlubG9jay5oIiAyCiMgNCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNt
L3NwaW5sb2NrLmgiIDIKIyAzMyAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtLWkz
ODYvc2VtYXBob3JlLmgiIDIKc3RydWN0IHNlbWFwaG9yZSB7CglhdG9taWNfdCBjb3VudDsKCWlu
dCB3YWtpbmc7CglzdHJ1Y3Qgd2FpdF9xdWV1ZSAqIHdhaXQ7Cn07CiAgX19hdHRyaWJ1dGVfXygo
cmVncGFybSgwKSkpICB2b2lkIF9fZG93bl9mYWlsZWQodm9pZCAgKTsKICBfX2F0dHJpYnV0ZV9f
KChyZWdwYXJtKDApKSkgIGludCAgX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlKHZvaWQgICAp
OwogIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSAgaW50ICBfX2Rvd25fZmFpbGVkX3RyeWxv
Y2sodm9pZCAgICk7CiAgX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpICB2b2lkIF9fdXBfd2Fr
ZXVwKHZvaWQgICk7CiAgX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpICB2b2lkIF9fZG93bihz
dHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKICBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgIGlu
dCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CiAgX19hdHRy
aWJ1dGVfXygocmVncGFybSgwKSkpICBpbnQgIF9fZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhv
cmUgKiBzZW0pOwogIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSAgdm9pZCBfX3VwKHN0cnVj
dCBzZW1hcGhvcmUgKiBzZW0pOwpleHRlcm4gc3BpbmxvY2tfdCBzZW1hcGhvcmVfd2FrZV9sb2Nr
OwogCmV4dGVybiBpbmxpbmUgdm9pZCBkb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCnsKCV9f
YXNtX18gX192b2xhdGlsZV9fKAoJCSIjIGF0b21pYyBkb3duIG9wZXJhdGlvblxuXHQiCgkJImRl
Y2wgKCUwKVxuXHQiICAgICAgCgkJImpzIDJmXG4iCgkJIjE6XG4iCgkJIi5zZWN0aW9uIC50ZXh0
LmxvY2ssXCJheFwiXG4iCgkJIjI6XHRjYWxsIF9fZG93bl9mYWlsZWRcblx0IgoJCSJqbXAgMWJc
biIKCQkiLnByZXZpb3VzIgoJCTogCgkJOiJjIiAoc2VtKQoJCToibWVtb3J5Iik7Cn0KZXh0ZXJu
IGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCnsK
CWludCByZXN1bHQ7CglfX2FzbV9fIF9fdm9sYXRpbGVfXygKCQkiIyBhdG9taWMgaW50ZXJydXB0
aWJsZSBkb3duIG9wZXJhdGlvblxuXHQiCgkJImRlY2wgKCUxKVxuXHQiICAgICAgCgkJImpzIDJm
XG5cdCIKCQkieG9ybCAlMCwlMFxuIgoJCSIxOlxuIgoJCSIuc2VjdGlvbiAudGV4dC5sb2NrLFwi
YXhcIlxuIgoJCSIyOlx0Y2FsbCBfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGVcblx0IgoJCSJq
bXAgMWJcbiIKCQkiLnByZXZpb3VzIgoJCToiPWEiIChyZXN1bHQpCgkJOiJjIiAoc2VtKQoJCToi
bWVtb3J5Iik7CglyZXR1cm4gcmVzdWx0Owp9CmV4dGVybiBpbmxpbmUgaW50IGRvd25fdHJ5bG9j
ayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQp7CglpbnQgcmVzdWx0OwoJX19hc21fXyBfX3ZvbGF0
aWxlX18oCgkJIiMgYXRvbWljIGludGVycnVwdGlibGUgZG93biBvcGVyYXRpb25cblx0IgoJCSJk
ZWNsICglMSlcblx0IiAgICAgIAoJCSJqcyAyZlxuXHQiCgkJInhvcmwgJTAsJTBcbiIKCQkiMTpc
biIKCQkiLnNlY3Rpb24gLnRleHQubG9jayxcImF4XCJcbiIKCQkiMjpcdGNhbGwgX19kb3duX2Zh
aWxlZF90cnlsb2NrXG5cdCIKCQkiam1wIDFiXG4iCgkJIi5wcmV2aW91cyIKCQk6Ij1hIiAocmVz
dWx0KQoJCToiYyIgKHNlbSkKCQk6Im1lbW9yeSIpOwoJcmV0dXJuIHJlc3VsdDsKfQogCmV4dGVy
biBpbmxpbmUgdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQp7CglfX2FzbV9fIF9fdm9s
YXRpbGVfXygKCQkiIyBhdG9taWMgdXAgb3BlcmF0aW9uXG5cdCIKCQkiaW5jbCAoJTApXG5cdCIg
ICAgICAKCQkiamxlIDJmXG4iCgkJIjE6XG4iCgkJIi5zZWN0aW9uIC50ZXh0LmxvY2ssXCJheFwi
XG4iCgkJIjI6XHRjYWxsIF9fdXBfd2FrZXVwXG5cdCIKCQkiam1wIDFiXG4iCgkJIi5wcmV2aW91
cyIKCQk6IAoJCToiYyIgKHNlbSkKCQk6Im1lbW9yeSIpOwp9CiMgNCAiL2hvbWUvanc1L3RtcC9s
aW51eDIyL2luY2x1ZGUvYXNtL2w0YXJjaC9zZW1hcGhvcmUuaCIgMgojIDQgIi9ob21lL2p3NS90
bXAvbGludXgyMi9pbmNsdWRlL2FzbS9zZW1hcGhvcmUuaCIgMgojIDE2NCAiL2hvbWUvanc1L3Rt
cC9saW51eDIyL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi9ob21lL2p3NS90bXAvbGludXgy
Mi9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9p
bmNsdWRlL2FzbS9sNGFyY2gvYnl0ZW9yZGVyLmgiIDEKIAojIDEgIi9ob21lL2p3NS90bXAvbGlu
dXgyMi9pbmNsdWRlL2FzbS1pMzg2L2J5dGVvcmRlci5oIiAxCiAKc3RhdGljIF9faW5saW5lX18g
X19jb25zdF9fIF9fdTMyIF9fX2FyY2hfX3N3YWIzMihfX3UzMiB4KQp7CglfX2FzbV9fKCJic3dh
cCAlMCIgOiAiPXIiICh4KSA6ICIwIiAoeCkpOwoJcmV0dXJuIHg7Cn0Kc3RhdGljIF9faW5saW5l
X18gX19jb25zdF9fIF9fdTE2IF9fX2FyY2hfX3N3YWIxNihfX3UxNiB4KQp7CglfX2FzbV9fKCJ4
Y2hnYiAlYjAsJWgwIgkJICAJCTogIj1xIiAoeCkgCQk6ICAiMCIgKHgpKTsgCQlyZXR1cm4geDsK
fQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9saXR0
bGVfZW5kaWFuLmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9i
eXRlb3JkZXIvc3dhYi5oIiAxCiAKIAojIDQxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVk
ZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oIgogCiAKZXh0ZXJuIF9faW5saW5lX18gX19jb25zdF9f
IF9fdTE2IF9fZnN3YWIxNihfX3UxNiB4KQp7CglyZXR1cm4gX19fYXJjaF9fc3dhYjE2KCB4ICkg
Owp9CmV4dGVybiBfX2lubGluZV9fIF9fdTE2IF9fc3dhYjE2cChfX3UxNiAqeCkKewoJcmV0dXJu
IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191MTYpKCAqKCB4ICkgKSkgPyAoKF9fdTE2KSggKCgo
X191MTYpKCAoICooIHggKSApICkgJiAoX191MTYpMHgwMGZmVSkgPDwgOCkgfCAoKChfX3UxNiko
ICggKiggeCApICkgKSAmIChfX3UxNikweGZmMDBVKSA+PiA4KSApKSAgOiBfX2Zzd2FiMTYoKCAq
KCB4ICkgKSkpICA7Cn0KZXh0ZXJuIF9faW5saW5lX18gdm9pZCBfX3N3YWIxNnMoX191MTYgKmFk
ZHIpCnsKCWRvIHsgKiggYWRkciApID0gX19zd2FiMTZwKCggYWRkciApKTsgfSB3aGlsZSAoMCkg
Owp9CmV4dGVybiBfX2lubGluZV9fIF9fY29uc3RfXyBfX3UzMiBfX2Zzd2FiMzIoX191MzIgeCkK
ewoJcmV0dXJuIF9fX2FyY2hfX3N3YWIzMiggeCApIDsKfQpleHRlcm4gX19pbmxpbmVfXyBfX3Uz
MiBfX3N3YWIzMnAoX191MzIgKngpCnsKCXJldHVybiAoX19idWlsdGluX2NvbnN0YW50X3AoKF9f
dTMyKSggKiggeCApICkpID8gKChfX3UzMikoICgoKF9fdTMyKSggKCAqKCB4ICkgKSApICYgKF9f
dTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwgKCgoX191MzIpKCAoICooIHggKSApICkgJiAoX191
MzIpMHgwMDAwZmYwMFVMKSA8PCAgOCkgfCAoKChfX3UzMikoICggKiggeCApICkgKSAmIChfX3Uz
MikweDAwZmYwMDAwVUwpID4+ICA4KSB8ICgoKF9fdTMyKSggKCAqKCB4ICkgKSApICYgKF9fdTMy
KTB4ZmYwMDAwMDBVTCkgPj4gMjQpICkpICA6IF9fZnN3YWIzMigoICooIHggKSApKSkgIDsKfQpl
eHRlcm4gX19pbmxpbmVfXyB2b2lkIF9fc3dhYjMycyhfX3UzMiAqYWRkcikKewoJZG8geyAqKCBh
ZGRyICkgPSBfX3N3YWIzMnAoKCBhZGRyICkpOyB9IHdoaWxlICgwKSA7Cn0KZXh0ZXJuIF9faW5s
aW5lX18gX19jb25zdF9fIF9fdTY0IF9fZnN3YWI2NChfX3U2NCB4KQp7CglfX3UzMiBoID0geCA+
PiAzMjsKICAgICAgICBfX3UzMiBsID0geCAmICgoMVVMTDw8MzIpLTEpOwogICAgICAgIHJldHVy
biAoKChfX3U2NCkoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMyKSggbCApKSA/ICgoX191MzIp
KCAoKChfX3UzMikoICggbCApICkgJiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAyNCkgfCAoKChf
X3UzMikoICggbCApICkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCAgOCkgfCAoKChfX3UzMiko
ICggbCApICkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+PiAgOCkgfCAoKChfX3UzMikoICggbCAp
ICkgJiAoX191MzIpMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSkgIDogX19mc3dhYjMyKCggbCApKSkg
KSA8PCAzMikgfCAoKF9fdTY0KSgoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMyKSggaCApKSA/
ICgoX191MzIpKCAoKChfX3UzMikoICggaCApICkgJiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAy
NCkgfCAoKChfX3UzMikoICggaCApICkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCAgOCkgfCAo
KChfX3UzMikoICggaCApICkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+PiAgOCkgfCAoKChfX3Uz
MikoICggaCApICkgJiAoX191MzIpMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSkgIDogX19mc3dhYjMy
KCggaCApKSkgKSk7Cn0KZXh0ZXJuIF9faW5saW5lX18gX191NjQgX19zd2FiNjRwKF9fdTY0ICp4
KQp7CglyZXR1cm4gKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3U2NCkoICooIHggKSApKSA/ICgo
X191NjQpKCAoX191NjQpKCgoX191NjQpKCAoICooIHggKSApICkgJiAoX191NjQpMHgwMDAwMDAw
MDAwMDAwMGZmVUxMKSA8PCA1NikgfCAoX191NjQpKCgoX191NjQpKCAoICooIHggKSApICkgJiAo
X191NjQpMHgwMDAwMDAwMDAwMDBmZjAwVUxMKSA8PCA0MCkgfCAoX191NjQpKCgoX191NjQpKCAo
ICooIHggKSApICkgJiAoX191NjQpMHgwMDAwMDAwMDAwZmYwMDAwVUxMKSA8PCAyNCkgfCAoX191
NjQpKCgoX191NjQpKCAoICooIHggKSApICkgJiAoX191NjQpMHgwMDAwMDAwMGZmMDAwMDAwVUxM
KSA8PCAgOCkgfCAoX191NjQpKCgoX191NjQpKCAoICooIHggKSApICkgJiAoX191NjQpMHgwMDAw
MDBmZjAwMDAwMDAwVUxMKSA+PiAgOCkgfCAoX191NjQpKCgoX191NjQpKCAoICooIHggKSApICkg
JiAoX191NjQpMHgwMDAwZmYwMDAwMDAwMDAwVUxMKSA+PiAyNCkgfCAoX191NjQpKCgoX191NjQp
KCAoICooIHggKSApICkgJiAoX191NjQpMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSA+PiA0MCkgfCAo
X191NjQpKCgoX191NjQpKCAoICooIHggKSApICkgJiAoX191NjQpMHhmZjAwMDAwMDAwMDAwMDAw
VUxMKSA+PiA1NikgKSkgIDogX19mc3dhYjY0KCggKiggeCApICkpKSAgOwp9CmV4dGVybiBfX2lu
bGluZV9fIHZvaWQgX19zd2FiNjRzKF9fdTY0ICphZGRyKQp7CglkbyB7ICooIGFkZHIgKSA9IF9f
c3dhYjY0cCgoIGFkZHIgKSk7IH0gd2hpbGUgKDApIDsKfQojIDExICIvaG9tZS9qdzUvdG1wL2xp
bnV4MjIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oIiAyCiMgMSAiL2hv
bWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaCIgMQog
CiAKIAogCiAKZXh0ZXJuIF9fdTMyCQkJbnRvaGwoX191MzIpOwpleHRlcm4gX191MzIJCQlodG9u
bChfX3UzMik7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQJbnRvaHModW5zaWduZWQgc2hvcnQg
aW50KTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludAlodG9ucyh1bnNpZ25lZCBzaG9ydCBpbnQp
OwojIDU0ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0
dGxlX2VuZGlhbi5oIiAyCiMgNDUgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS1p
Mzg2L2J5dGVvcmRlci5oIiAyCiMgNSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNt
L2w0YXJjaC9ieXRlb3JkZXIuaCIgMgojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRl
L2FzbS9ieXRlb3JkZXIuaCIgMgojIDE2NSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUv
bGludXgvZnMuaCIgMgpleHRlcm4gdm9pZCB1cGRhdGVfYXRpbWUgKHN0cnVjdCBpbm9kZSAqaW5v
ZGUpOwpleHRlcm4gdm9pZCBidWZmZXJfaW5pdCh1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIHZvaWQg
aW5vZGVfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgZmlsZV90YWJsZV9pbml0KHZvaWQpOwpleHRl
cm4gdm9pZCBkY2FjaGVfaW5pdCh2b2lkKTsKdHlwZWRlZiBjaGFyIGJ1ZmZlcl9ibG9ja1soMTw8
IDEwICkgXTsKIAogCnN0cnVjdCBidWZmZXJfaGVhZCB7CgkgCglzdHJ1Y3QgYnVmZmVyX2hlYWQg
KiBiX25leHQ7CSAKCXVuc2lnbmVkIGxvbmcgYl9ibG9ja25yOwkgCgl1bnNpZ25lZCBsb25nIGJf
c2l6ZTsJCSAKCWtkZXZfdCBiX2RldjsJCQkgCglrZGV2X3QgYl9yZGV2OwkJCSAKCXVuc2lnbmVk
IGxvbmcgYl9yc2VjdG9yOwkgCglzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiX3RoaXNfcGFnZTsJIAoJ
dW5zaWduZWQgbG9uZyBiX3N0YXRlOwkJIAoJc3RydWN0IGJ1ZmZlcl9oZWFkICogYl9uZXh0X2Zy
ZWU7Cgl1bnNpZ25lZCBpbnQgYl9jb3VudDsJCSAKCSAKCWNoYXIgKiBiX2RhdGE7CQkJIAoJdW5z
aWduZWQgaW50IGJfbGlzdDsJCSAKCXVuc2lnbmVkIGxvbmcgYl9mbHVzaHRpbWU7ICAgICAgIAoJ
c3RydWN0IHdhaXRfcXVldWUgKiBiX3dhaXQ7CglzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogYl9wcHJl
djsJCSAKCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJfcHJldl9mcmVlOwkgCglzdHJ1Y3QgYnVmZmVy
X2hlYWQgKiBiX3JlcW5leHQ7CQkgCgkgCgl2b2lkICgqYl9lbmRfaW8pKHN0cnVjdCBidWZmZXJf
aGVhZCAqYmgsIGludCB1cHRvZGF0ZSk7Cgl2b2lkICpiX2Rldl9pZDsKfTsKdHlwZWRlZiB2b2lk
IChiaF9lbmRfaW9fdCkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHVwdG9kYXRlKTsKdm9p
ZCBpbml0X2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBrZGV2X3QgZGV2LCBpbnQgYmxv
Y2ssCgkJIGJoX2VuZF9pb190ICpoYW5kbGVyLCB2b2lkICpkZXZfaWQpOwpzdGF0aWMgaW5saW5l
IGludCBidWZmZXJfdXB0b2RhdGUoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpCnsKCXJldHVybiAo
X19idWlsdGluX2NvbnN0YW50X3AoIDAgICkgPyBfX2NvbnN0YW50X3Rlc3RfYml0KCggMCAgKSwo
ICAmYmgtPmJfc3RhdGUgKSkgOiBfX3Rlc3RfYml0KCggMCAgKSwoICAmYmgtPmJfc3RhdGUgKSkp
IDsKfQkKc3RhdGljIGlubGluZSBpbnQgYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAq
IGJoKQp7CglyZXR1cm4gKF9fYnVpbHRpbl9jb25zdGFudF9wKCAxICApID8gX19jb25zdGFudF90
ZXN0X2JpdCgoIDEgICksKCAgJmJoLT5iX3N0YXRlICkpIDogX190ZXN0X2JpdCgoIDEgICksKCAg
JmJoLT5iX3N0YXRlICkpKSA7Cn0Kc3RhdGljIGlubGluZSBpbnQgYnVmZmVyX2xvY2tlZChzdHJ1
Y3QgYnVmZmVyX2hlYWQgKiBiaCkKewoJcmV0dXJuIChfX2J1aWx0aW5fY29uc3RhbnRfcCggMiAg
KSA/IF9fY29uc3RhbnRfdGVzdF9iaXQoKCAyICApLCggICZiaC0+Yl9zdGF0ZSApKSA6IF9fdGVz
dF9iaXQoKCAyICApLCggICZiaC0+Yl9zdGF0ZSApKSkgOwp9CnN0YXRpYyBpbmxpbmUgaW50IGJ1
ZmZlcl9yZXEoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpCnsKCXJldHVybiAoX19idWlsdGluX2Nv
bnN0YW50X3AoIDMgICkgPyBfX2NvbnN0YW50X3Rlc3RfYml0KCggMyAgKSwoICAmYmgtPmJfc3Rh
dGUgKSkgOiBfX3Rlc3RfYml0KCggMyAgKSwoICAmYmgtPmJfc3RhdGUgKSkpIDsKfQpzdGF0aWMg
aW5saW5lIGludCBidWZmZXJfcHJvdGVjdGVkKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKQp7Cgly
ZXR1cm4gKF9fYnVpbHRpbl9jb25zdGFudF9wKCA2ICApID8gX19jb25zdGFudF90ZXN0X2JpdCgo
IDYgICksKCAgJmJoLT5iX3N0YXRlICkpIDogX190ZXN0X2JpdCgoIDYgICksKCAgJmJoLT5iX3N0
YXRlICkpKSA7Cn0KIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9waXBl
X2ZzX2kuaCIgMQpzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvIHsKCXN0cnVjdCB3YWl0X3F1ZXVlICog
d2FpdDsKCWNoYXIgKiBiYXNlOwoJdW5zaWduZWQgaW50IHN0YXJ0OwoJdW5zaWduZWQgaW50IGxv
Y2s7Cgl1bnNpZ25lZCBpbnQgcmRfb3BlbmVyczsKCXVuc2lnbmVkIGludCB3cl9vcGVuZXJzOwoJ
dW5zaWduZWQgaW50IHJlYWRlcnM7Cgl1bnNpZ25lZCBpbnQgd3JpdGVyczsKfTsKIyAyNTkgIi9o
b21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvaG9tZS9qdzUv
dG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9taW5peF9mc19pLmgiIDEKIApzdHJ1Y3QgbWluaXhf
aW5vZGVfaW5mbyB7Cgl1bmlvbiB7CgkJX191MTYgaTFfZGF0YVsxNl07CgkJX191MzIgaTJfZGF0
YVsxNl07Cgl9IHU7Cn07CiMgMjYwICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51
eC9mcy5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvZXh0Ml9m
c19pLmgiIDEKIAogCnN0cnVjdCBleHQyX2lub2RlX2luZm8gewoJX191MzIJaV9kYXRhWzE1XTsK
CV9fdTMyCWlfZmxhZ3M7CglfX3UzMglpX2ZhZGRyOwoJX191OAlpX2ZyYWdfbm87CglfX3U4CWlf
ZnJhZ19zaXplOwoJX191MTYJaV9vc3luYzsKCV9fdTMyCWlfZmlsZV9hY2w7CglfX3UzMglpX2Rp
cl9hY2w7CglfX3UzMglpX2R0aW1lOwoJX191MzIJaV92ZXJzaW9uOwoJX191MzIJaV9ibG9ja19n
cm91cDsKCV9fdTMyCWlfbmV4dF9hbGxvY19ibG9jazsKCV9fdTMyCWlfbmV4dF9hbGxvY19nb2Fs
OwoJX191MzIJaV9wcmVhbGxvY19ibG9jazsKCV9fdTMyCWlfcHJlYWxsb2NfY291bnQ7CglfX3Uz
MglpX2hpZ2hfc2l6ZTsKCWludAlpX25ld19pbm9kZToxOwkgCn07CiMgMjYxICIvaG9tZS9qdzUv
dG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51
eDIyL2luY2x1ZGUvbGludXgvaHBmc19mc19pLmgiIDEKc3RydWN0IGhwZnNfaW5vZGVfaW5mbyB7
Cglpbm9fdCBpX3BhcmVudF9kaXI7CSAKCXVuc2lnbmVkIGlfZG5vOwkJIAoJdW5zaWduZWQgaV9k
cG9zOwkgCgl1bnNpZ25lZCBpX2RzdWJkbm87CSAKCXVuc2lnbmVkIGlfZmlsZV9zZWM7CSAKCXVu
c2lnbmVkIGlfZGlza19zZWM7CSAKCXVuc2lnbmVkIGlfbl9zZWNzOwkgCgl1bnNpZ25lZCBpX2Nv
bnYgOiAyOwkgCn07CiMgMjYyICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9m
cy5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvbnRmc19mc19p
LmgiIDEKIApzdHJ1Y3QgbnRmc19hdHRyaWJ1dGU7CnN0cnVjdCBudGZzX3NiX2luZm87CiAKdHlw
ZWRlZiB1OCAgbnRmc191ODsKdHlwZWRlZiB1MTYgbnRmc191MTY7CnR5cGVkZWYgdTMyIG50ZnNf
dTMyOwp0eXBlZGVmIHU2NCBudGZzX3U2NDsKdHlwZWRlZiBzOCAgbnRmc19zODsKdHlwZWRlZiBz
MTYgbnRmc19zMTY7CnR5cGVkZWYgczMyIG50ZnNfczMyOwp0eXBlZGVmIHM2NCBudGZzX3M2NDsK
dHlwZWRlZiBfX2tlcm5lbF9tb2RlX3QgbnRtb2RlX3Q7CnR5cGVkZWYgX19rZXJuZWxfdWlkX3Qg
bnRmc191aWRfdDsKdHlwZWRlZiBfX2tlcm5lbF9naWRfdCBudGZzX2dpZF90Owp0eXBlZGVmIF9f
a2VybmVsX3NpemVfdCBudGZzX3NpemVfdDsKdHlwZWRlZiBfX2tlcm5lbF90aW1lX3QgbnRmc190
aW1lX3Q7CiAKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgbnRmc193Y2hhcl90OwogCnR5cGVk
ZWYgdW5zaWduZWQgbG9uZyBsb25nIG50ZnNfb2Zmc2V0X3Q7CiAKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgbnRmc190aW1lNjRfdDsKIAp0eXBlZGVmIHVuc2lnbmVkIGludCBudGZzX2NsdXN0
ZXJfdDsKIApzdHJ1Y3QgbnRmc19pbm9kZV9pbmZvewoJc3RydWN0IG50ZnNfc2JfaW5mbyAqdm9s
OwoJaW50IGlfbnVtYmVyOyAgICAgICAgICAgICAgICAgCgl1bnNpZ25lZCBzZXF1ZW5jZV9udW1i
ZXI7Cgl1bnNpZ25lZCBjaGFyKiBhdHRyOyAgICAgICAgICAKCWludCBhdHRyX2NvdW50OyAgICAg
ICAgICAgICAgIAoJc3RydWN0IG50ZnNfYXR0cmlidXRlICphdHRyczsKCWludCByZWNvcmRfY291
bnQ7ICAgICAgICAgICAgIAoJIAoJaW50ICpyZWNvcmRzOwoJdW5pb257CgkJc3RydWN0ewoJCQlp
bnQgcmVjb3Jkc2l6ZTsKCQkJaW50IGNsdXN0ZXJzX3Blcl9yZWNvcmQ7CgkJfWluZGV4OwoJfSB1
OwkKfTsKIyAyNjMgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIK
IyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9tc2Rvc19mc19pLmgiIDEK
IApzdHJ1Y3QgbXNkb3NfaW5vZGVfaW5mbyB7CgkgCglzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvIHJl
c2VydmVkOwoJaW50IGlfc3RhcnQ7CSAKCWludCBpX2xvZ3N0YXJ0OwkgCglpbnQgaV9hdHRyczsJ
IAoJaW50IGlfY3RpbWVfbXM7CSAKCWludCBpX2JpbmFyeTsJIAoJaW50IGlfbG9jYXRpb247CSAK
CXN0cnVjdCBpbm9kZSAqaV9mYXRfaW5vZGU7CSAKCXN0cnVjdCBsaXN0X2hlYWQgaV9mYXRfaGFz
aDsJIAoJb2ZmX3QgaV9sYXN0X3BvczsgCn07CiMgMjY0ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIv
aW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUv
bGludXgvdW1zZG9zX2ZzX2kuaCIgMQogCnN0cnVjdCBkaXJfbG9ja2luZ19pbmZvIHsKCXN0cnVj
dCB3YWl0X3F1ZXVlICpwOwoJc2hvcnQgaW50IGxvb2tpbmc7CSAKCXNob3J0IGludCBjcmVhdGlu
ZzsJIAoJbG9uZyBwaWQ7CQkgCgkgCn07CnN0cnVjdCB1bXNkb3NfaW5vZGVfaW5mbyB7Cgl1bmlv
biB7CgkJc3RydWN0IG1zZG9zX2lub2RlX2luZm8gbXNkb3NfaW5mbzsKCQlzdHJ1Y3QgcGlwZV9p
bm9kZV9pbmZvIHBpcGVfaW5mbzsKCQlzdHJ1Y3QgZGlyX2xvY2tpbmdfaW5mbyBkaXJfaW5mbzsK
CX0gdTsKCWludCBpX3BhdGNoZWQ7CQkJIAoJaW50IGlfaXNfaGxpbms7CQkJIAoJdW5zaWduZWQg
bG9uZyBpX2VtZF9vd25lcjsJIAoJb2ZmX3QgcG9zOwkJCSAKCSAKCXN0cnVjdCBkZW50cnkgKmlf
ZW1kX2RlbnRyeTsJIAoJdW5zaWduZWQgbG9uZyBpX2VtZF9kaXI7CSAKfTsKIyAyNjUgIi9ob21l
L2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvaG9tZS9qdzUvdG1w
L2xpbnV4MjIvaW5jbHVkZS9saW51eC9pc29fZnNfaS5oIiAxCiAKc3RydWN0IGlzb19pbm9kZV9p
bmZvIHsKCXVuc2lnbmVkIGludCBpX2ZpcnN0X2V4dGVudDsKCXVuc2lnbmVkIGNoYXIgaV9maWxl
X2Zvcm1hdDsKCXVuc2lnbmVkIGxvbmcgaV9uZXh0X3NlY3Rpb25faW5vOwoJb2ZmX3QgaV9zZWN0
aW9uX3NpemU7Cn07CiMgMjY2ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9m
cy5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvbmZzX2ZzX2ku
aCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L25mcy5oIiAxCiAK
IyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9zdW5ycGMvbXNnX3Byb3Qu
aCIgMQogCmVudW0gcnBjX2F1dGhfZmxhdm9yIHsKCVJQQ19BVVRIX05VTEwgID0gMCwKCVJQQ19B
VVRIX1VOSVggID0gMSwKCVJQQ19BVVRIX1NIT1JUID0gMiwKCVJQQ19BVVRIX0RFUyAgID0gMywK
CVJQQ19BVVRIX0tSQiAgID0gNCwKfTsKZW51bSBycGNfbXNnX3R5cGUgewoJUlBDX0NBTEwgPSAw
LAoJUlBDX1JFUExZID0gMQp9OwplbnVtIHJwY19yZXBseV9zdGF0IHsKCVJQQ19NU0dfQUNDRVBU
RUQgPSAwLAoJUlBDX01TR19ERU5JRUQgPSAxCn07CmVudW0gcnBjX2FjY2VwdF9zdGF0IHsKCVJQ
Q19TVUNDRVNTID0gMCwKCVJQQ19QUk9HX1VOQVZBSUwgPSAxLAoJUlBDX1BST0dfTUlTTUFUQ0gg
PSAyLAoJUlBDX1BST0NfVU5BVkFJTCA9IDMsCglSUENfR0FSQkFHRV9BUkdTID0gNCwKCVJQQ19T
WVNURU1fRVJSID0gNQp9OwplbnVtIHJwY19yZWplY3Rfc3RhdCB7CglSUENfTUlTTUFUQ0ggPSAw
LAoJUlBDX0FVVEhfRVJST1IgPSAxCn07CmVudW0gcnBjX2F1dGhfc3RhdCB7CglSUENfQVVUSF9P
SyA9IDAsCglSUENfQVVUSF9CQURDUkVEID0gMSwKCVJQQ19BVVRIX1JFSkVDVEVEQ1JFRCA9IDIs
CglSUENfQVVUSF9CQURWRVJGID0gMywKCVJQQ19BVVRIX1JFSkVDVEVEVkVSRiA9IDQsCglSUENf
QVVUSF9UT09XRUFLID0gNQp9OwojIDcgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xp
bnV4L25mcy5oIiAyCgkKZW51bSBuZnNfc3RhdCB7CglORlNfT0sgPSAwLAoJTkZTRVJSX1BFUk0g
PSAxLAoJTkZTRVJSX05PRU5UID0gMiwKCU5GU0VSUl9JTyA9IDUsCglORlNFUlJfTlhJTyA9IDYs
CglORlNFUlJfRUFHQUlOID0gMTEsCglORlNFUlJfQUNDRVMgPSAxMywKCU5GU0VSUl9FWElTVCA9
IDE3LAoJTkZTRVJSX1hERVYgPSAxOCwKCU5GU0VSUl9OT0RFViA9IDE5LAoJTkZTRVJSX05PVERJ
UiA9IDIwLAoJTkZTRVJSX0lTRElSID0gMjEsCglORlNFUlJfSU5WQUwgPSAyMiwJIAoJTkZTRVJS
X0ZCSUcgPSAyNywKCU5GU0VSUl9OT1NQQyA9IDI4LAoJTkZTRVJSX1JPRlMgPSAzMCwKCU5GU0VS
Ul9PUE5PVFNVUFAgPSA0NSwKCU5GU0VSUl9OQU1FVE9PTE9ORyA9IDYzLAoJTkZTRVJSX05PVEVN
UFRZID0gNjYsCglORlNFUlJfRFFVT1QgPSA2OSwKCU5GU0VSUl9TVEFMRSA9IDcwLAoJTkZTRVJS
X1dGTFVTSCA9IDk5Cn07CmVudW0gbmZzX2Z0eXBlIHsKCU5GTk9OID0gMCwKCU5GUkVHID0gMSwK
CU5GRElSID0gMiwKCU5GQkxLID0gMywKCU5GQ0hSID0gNCwKCU5GTE5LID0gNSwKCU5GU09DSyA9
IDYsCglORkJBRCA9IDcsCglORkZJRk8gPSA4Cn07CnN0cnVjdCBuZnNfZmggewoJY2hhcgkJCWRh
dGFbMzIgXTsKfTsKIApleHRlcm4gc3RydWN0IHJwY19wcm9ncmFtCW5mc19wcm9ncmFtOwpleHRl
cm4gc3RydWN0IHJwY19zdGF0CQluZnNfcnBjc3RhdDsKc3RydWN0IG5mc190aW1lIHsKCV9fdTMy
CQkJc2Vjb25kczsKCV9fdTMyCQkJdXNlY29uZHM7Cn07CnN0cnVjdCBuZnNfZmF0dHIgewoJZW51
bSBuZnNfZnR5cGUJCXR5cGU7CglfX3UzMgkJCW1vZGU7CglfX3UzMgkJCW5saW5rOwoJX191MzIJ
CQl1aWQ7CglfX3UzMgkJCWdpZDsKCV9fdTMyCQkJc2l6ZTsKCV9fdTMyCQkJYmxvY2tzaXplOwoJ
X191MzIJCQlyZGV2OwoJX191MzIJCQlibG9ja3M7CglfX3UzMgkJCWZzaWQ7CglfX3UzMgkJCWZp
bGVpZDsKCXN0cnVjdCBuZnNfdGltZQkJYXRpbWU7CglzdHJ1Y3QgbmZzX3RpbWUJCW10aW1lOwoJ
c3RydWN0IG5mc190aW1lCQljdGltZTsKfTsKc3RydWN0IG5mc19zYXR0ciB7CglfX3UzMgkJCW1v
ZGU7CglfX3UzMgkJCXVpZDsKCV9fdTMyCQkJZ2lkOwoJX191MzIJCQlzaXplOwoJc3RydWN0IG5m
c190aW1lCQlhdGltZTsKCXN0cnVjdCBuZnNfdGltZQkJbXRpbWU7Cn07CnN0cnVjdCBuZnNfZnNp
bmZvIHsKCV9fdTMyCQkJdHNpemU7CglfX3UzMgkJCWJzaXplOwoJX191MzIJCQlibG9ja3M7Cglf
X3UzMgkJCWJmcmVlOwoJX191MzIJCQliYXZhaWw7Cn07CnN0cnVjdCBuZnNfd3JpdGVhcmdzIHsK
CXN0cnVjdCBuZnNfZmggKgkJZmg7CglfX3UzMgkJCW9mZnNldDsKCV9fdTMyCQkJY291bnQ7Cglj
b25zdCB2b2lkICoJCWJ1ZmZlcjsKfTsKIyAyMjMgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNs
dWRlL2xpbnV4L25mcy5oIgojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4
L25mc19mc19pLmgiIDIKIApzdHJ1Y3QgbmZzX2lub2RlX2luZm8gewoJIAoJc3RydWN0IHBpcGVf
aW5vZGVfaW5mbwlwaXBlaW5mbzsKCSAKCXVuc2lnbmVkIHNob3J0CQlmbGFnczsKCSAKCXVuc2ln
bmVkIGxvbmcJCXJlYWRfY2FjaGVfamlmZmllczsKCXVuc2lnbmVkIGxvbmcJCXJlYWRfY2FjaGVf
bXRpbWU7Cgl1bnNpZ25lZCBsb25nCQlhdHRydGltZW87CgkgCglzdHJ1Y3QgbmZzX3dyZXEgKgl3
cml0ZWJhY2s7Cn07CiAKIApzdHJ1Y3QgbmZzX2xvY2tfaW5mbyB7Cgl1MzIJCXN0YXRlOwoJdTMy
CQlmbGFnczsKfTsKIAojIDI2NyAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgv
ZnMuaCIgMgojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3N5c3ZfZnNf
aS5oIiAxCiAKc3RydWN0IHN5c3ZfaW5vZGVfaW5mbyB7Cgl1MzIgaV9kYXRhWzEwKzErMSsxXTsJ
IAp9OwojIDI2OCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvZnMuaCIgMgoj
IDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2FmZnNfZnNfaS5oIiAxCiMg
MSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvYS5vdXQuaCIgMQojIDEgIi9o
b21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9hLm91dC5oIiAxCiMgMSAiL2hvbWUvanc1
L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2w0YXJjaC9hLm91dC5oIiAxCiAKIyAxICIvaG9tZS9q
dzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20taTM4Ni9hLm91dC5oIiAxCnN0cnVjdCBleGVjCnsK
ICB1bnNpZ25lZCBsb25nIGFfaW5mbzsJCSAKICB1bnNpZ25lZCBhX3RleHQ7CQkgCiAgdW5zaWdu
ZWQgYV9kYXRhOwkJIAogIHVuc2lnbmVkIGFfYnNzOwkJIAogIHVuc2lnbmVkIGFfc3ltczsJCSAK
ICB1bnNpZ25lZCBhX2VudHJ5OwkJIAogIHVuc2lnbmVkIGFfdHJzaXplOwkJIAogIHVuc2lnbmVk
IGFfZHJzaXplOwkJIAp9OwojIDUgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9s
NGFyY2gvYS5vdXQuaCIgMgojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9h
Lm91dC5oIiAyCiMgOCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvYS5vdXQu
aCIgMgogCmVudW0gbWFjaGluZV90eXBlIHsKICBNX09MRFNVTjIgPSAwLAogIE1fNjgwMTAgPSAx
LAogIE1fNjgwMjAgPSAyLAogIE1fU1BBUkMgPSAzLAogICAKICBNXzM4NiA9IDEwMCwKICBNX01J
UFMxID0gMTUxLAkgCiAgTV9NSVBTMiA9IDE1MgkJIAp9OwogCiAKIAogCiAKIAogCiAKDApzdHJ1
Y3Qgbmxpc3QgewogIHVuaW9uIHsKICAgIGNoYXIgKm5fbmFtZTsKICAgIHN0cnVjdCBubGlzdCAq
bl9uZXh0OwogICAgbG9uZyBuX3N0cng7CiAgfSBuX3VuOwogIHVuc2lnbmVkIGNoYXIgbl90eXBl
OwogIGNoYXIgbl9vdGhlcjsKICBzaG9ydCBuX2Rlc2M7CiAgdW5zaWduZWQgbG9uZyBuX3ZhbHVl
Owp9OwogCiAKIAogCgwKIApzdHJ1Y3QgcmVsb2NhdGlvbl9pbmZvCnsKICAgCiAgaW50IHJfYWRk
cmVzczsKICAgCiAgdW5zaWduZWQgaW50IHJfc3ltYm9sbnVtOjI0OwogICAKICB1bnNpZ25lZCBp
bnQgcl9wY3JlbDoxOwogICAKICB1bnNpZ25lZCBpbnQgcl9sZW5ndGg6MjsKICAgCiAgdW5zaWdu
ZWQgaW50IHJfZXh0ZXJuOjE7CiAgIAogIHVuc2lnbmVkIGludCByX3BhZDo0Owp9OwojIDQgIi9o
b21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2FmZnNfZnNfaS5oIiAyCiMgMSAiL2hv
bWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvdGltZS5oIiAxCnN0cnVjdCB0aW1lc3Bl
YyB7Cgl0aW1lX3QJdHZfc2VjOwkJIAoJbG9uZwl0dl9uc2VjOwkgCn07CiAKc3RhdGljIF9faW5s
aW5lX18gdW5zaWduZWQgbG9uZwp0aW1lc3BlY190b19qaWZmaWVzKHN0cnVjdCB0aW1lc3BlYyAq
dmFsdWUpCnsKCXVuc2lnbmVkIGxvbmcgc2VjID0gdmFsdWUtPnR2X3NlYzsKCWxvbmcgbnNlYyA9
IHZhbHVlLT50dl9uc2VjOwoJaWYgKHNlYyA+PSAoKCh+MFVMID4+IDEpLTEpICAvIDEwMCApKQoJ
CXJldHVybiAoKH4wVUwgPj4gMSktMSkgOwoJbnNlYyArPSAxMDAwMDAwMDAwTCAvIDEwMCAgLSAx
OwoJbnNlYyAvPSAxMDAwMDAwMDAwTCAvIDEwMCA7CglyZXR1cm4gMTAwICAqIHNlYyArIG5zZWM7
Cn0Kc3RhdGljIF9faW5saW5lX18gdm9pZApqaWZmaWVzX3RvX3RpbWVzcGVjKHVuc2lnbmVkIGxv
bmcgamlmZmllcywgc3RydWN0IHRpbWVzcGVjICp2YWx1ZSkKewoJdmFsdWUtPnR2X25zZWMgPSAo
amlmZmllcyAlIDEwMCApICogKDEwMDAwMDAwMDBMIC8gMTAwICk7Cgl2YWx1ZS0+dHZfc2VjID0g
amlmZmllcyAvIDEwMCA7Cn0KIApzdHJ1Y3QgdGltZXZhbCB7Cgl0aW1lX3QJCXR2X3NlYzsJCSAK
CXN1c2Vjb25kc190CXR2X3VzZWM7CSAKfTsKc3RydWN0IHRpbWV6b25lIHsKCWludAl0el9taW51
dGVzd2VzdDsJIAoJaW50CXR6X2RzdHRpbWU7CSAKfTsKZXh0ZXJuIHZvaWQgZG9fZ2V0dGltZW9m
ZGF5KHN0cnVjdCB0aW1ldmFsICp0dik7CmV4dGVybiB2b2lkIGRvX3NldHRpbWVvZmRheShzdHJ1
Y3QgdGltZXZhbCAqdHYpOwpleHRlcm4gdm9pZCBnZXRfZmFzdF90aW1lKHN0cnVjdCB0aW1ldmFs
ICp0dik7CmV4dGVybiB2b2lkICgqZG9fZ2V0X2Zhc3RfdGltZSkoc3RydWN0IHRpbWV2YWwgKik7
CiAKc3RydWN0ICBpdGltZXJzcGVjIHsKICAgICAgICBzdHJ1Y3QgIHRpbWVzcGVjIGl0X2ludGVy
dmFsOyAgICAgCiAgICAgICAgc3RydWN0ICB0aW1lc3BlYyBpdF92YWx1ZTsgICAgICAgIAp9Owpz
dHJ1Y3QJaXRpbWVydmFsIHsKCXN0cnVjdAl0aW1ldmFsIGl0X2ludGVydmFsOwkgCglzdHJ1Y3QJ
dGltZXZhbCBpdF92YWx1ZTsJIAp9OwojIDUgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRl
L2xpbnV4L2FmZnNfZnNfaS5oIiAyCnN0cnVjdCBrZXlfY2FjaGUgewoJc3RydWN0IHRpbWV2YWwJ
IGtjX2xydV90aW1lOwkgCglzMzIJIGtjX2ZpcnN0OwkJIAoJczMyCSBrY19sYXN0OwkJIAoJczMy
CSBrY190aGlzX2tleTsJCSAKCWludAkga2NfdGhpc19zZXE7CQkgCglzMzIJIGtjX25leHRfa2V5
OwkJIAoJczMyCSBrY19rZXlzWzczIF07CSAKfTsKc3RydWN0IGV4dF9jYWNoZSB7CglzdHJ1Y3Qg
a2V5X2NhY2hlICBrY1s0XTsJIAoJczMyCSBlY1soKDFVTCA8PCAxMiApICAtIDQgKiBzaXplb2Yo
c3RydWN0IGtleV9jYWNoZSkgLSA0KSAvIDQgXTsJCSAKCWludAkgbWF4X2V4dDsJCSAKfTsKIApz
dHJ1Y3QgYWZmc19pbm9kZV9pbmZvIHsKCXUzMgkgaV9wcm90ZWN0OwkJCSAKCXMzMgkgaV9wYXJl
bnQ7CQkJIAoJczMyCSBpX29yaWdpbmFsOwkJCSAKCXMzMgkgaV9kYXRhWzE2IF07CSAKCXN0cnVj
dCBleHRfY2FjaGUgKmlfZWM7CQkJIAoJaW50CSBpX2NhY2hlX3VzZXJzOwkJCSAKCWludAkgaV9s
YXN0YmxvY2s7CQkJIAoJc2hvcnQJIGlfcGFfY250OwkJCSAKCXNob3J0CSBpX3BhX25leHQ7CQkJ
IAoJc2hvcnQJIGlfcGFfbGFzdDsJCQkgCglzaG9ydAkgaV96b25lOwkJCSAKCXVuc2lnbmVkIGNo
YXIgaV9obGluazsJCQkgCgl1bnNpZ25lZCBjaGFyIGlfcGFkOwp9OwojIDI2OSAiL2hvbWUvanc1
L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi9ob21lL2p3NS90bXAvbGlu
dXgyMi9pbmNsdWRlL2xpbnV4L3Vmc19mc19pLmgiIDEKIApzdHJ1Y3QgdWZzX2lub2RlX2luZm8g
ewoJdW5pb24gewoJCV9fdTMyCWlfZGF0YVsxNV07CgkJX191OAlpX3N5bWxpbmtbNCoxNV07Cgl9
IGlfdTE7CglfX3U2NAlpX3NpemU7CglfX3UzMglpX2ZsYWdzOwoJX191MzIJaV9nZW47CglfX3Uz
MglpX3NoYWRvdzsKCV9fdTMyCWlfdWlkOwoJX191MzIJaV9naWQ7CglfX3UzMglpX29lZnRmbGFn
OwoJX191MTYJaV9vc3luYzsKCV9fdTMyCWlfbGFzdGZyYWc7Cn07CiMgMjcwICIvaG9tZS9qdzUv
dG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51
eDIyL2luY2x1ZGUvbGludXgvZWZzX2ZzX2kuaCIgMQogCnR5cGVkZWYJaW50MzJfdAkJZWZzX2Js
b2NrX3Q7CnR5cGVkZWYgdWludDMyX3QJZWZzX2lub190OwogCnR5cGVkZWYgdW5pb24gZXh0ZW50
X3UgewoJdW5zaWduZWQgY2hhciByYXdbOF07CglzdHJ1Y3QgZXh0ZW50X3MgewoJCXVuc2lnbmVk
IGludAlleF9tYWdpYzo4OwkgCgkJdW5zaWduZWQgaW50CWV4X2JuOjI0OwkgCgkJdW5zaWduZWQg
aW50CWV4X2xlbmd0aDo4OwkgCgkJdW5zaWduZWQgaW50CWV4X29mZnNldDoyNDsJIAoJfSBjb29r
ZWQ7Cn0gZWZzX2V4dGVudDsKdHlwZWRlZiBzdHJ1Y3QgZWRldnMgewoJc2hvcnQJCW9kZXY7Cglz
aG9ydAkJZGV2X2ZpbGxlcjsJIAoJdW5zaWduZWQgaW50CW5kZXY7CQkgCn0gZWZzX2RldnM7CiAK
c3RydWN0CWVmc19kaW5vZGUgewoJdV9zaG9ydAkJZGlfbW9kZTsJIAoJc2hvcnQJCWRpX25saW5r
OwkgCgl1X3Nob3J0CQlkaV91aWQ7CQkgCgl1X3Nob3J0CQlkaV9naWQ7CQkgCglpbnQzMl90CQlk
aV9zaXplOwkgCglpbnQzMl90CQlkaV9hdGltZTsJIAoJaW50MzJfdAkJZGlfbXRpbWU7CSAKCWlu
dDMyX3QJCWRpX2N0aW1lOwkgCgl1aW50MzJfdAlkaV9nZW47CQkgCglzaG9ydAkJZGlfbnVtZXh0
ZW50czsJIAoJdV9jaGFyCQlkaV92ZXJzaW9uOwkgCgl1X2NoYXIJCWRpX3NwYXJlOwkgCgl1bmlv
biBkaV9hZGRyIHsKCQllZnNfZXh0ZW50CWRpX2V4dGVudHNbMTIgXTsKCQllZnNfZGV2cwlkaV9k
ZXY7CSAKCX0gZGlfdTsKfTsKIApzdHJ1Y3QgZWZzX2lub2RlX2luZm8gewoJaW50CQludW1leHRl
bnRzOwoJaW50CQlsYXN0ZXh0ZW50OwoJZWZzX2V4dGVudAlleHRlbnRzWzEyIF07Cn07CiMgMjcx
ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL2hvbWUv
anc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvY29kYV9mc19pLmgiIDEKIAojIDEgIi9ob21l
L2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2NvZGEuaCIgMQogCiAKIAogCiAKIyA5OCAi
L2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvY29kYS5oIgp0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgbG9uZyB1X3F1YWRfdDsKIyAxMzAgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNs
dWRlL2xpbnV4L2NvZGEuaCIKIAogCiAgCiAKc3RydWN0IHZlbnVzX2RpcmVudCB7CiAgICAgICAg
dW5zaWduZWQgbG9uZwlkX2ZpbGVubzsJCSAKICAgICAgICB1bnNpZ25lZCBzaG9ydAlkX3JlY2xl
bjsJCSAKICAgICAgICB1bnNpZ25lZCBjaGFyIAlkX3R5cGU7CQkJIAogICAgICAgIHVuc2lnbmVk
IGNoYXIJZF9uYW1sZW47CQkgCiAgICAgICAgY2hhcgkJZF9uYW1lWzI1NSAgKyAxXTsgCn07CiAK
IAp0eXBlZGVmIHVfbG9uZyBWb2x1bWVJZDsKdHlwZWRlZiB1X2xvbmcgVm5vZGVJZDsKdHlwZWRl
ZiB1X2xvbmcgVW5pcXVlX3Q7CnR5cGVkZWYgdV9sb25nIEZpbGVWZXJzaW9uOwp0eXBlZGVmIHN0
cnVjdCBWaWNlRmlkIHsKICAgIFZvbHVtZUlkIFZvbHVtZTsKICAgIFZub2RlSWQgVm5vZGU7CiAg
ICBVbmlxdWVfdCBVbmlxdWU7Cn0gVmljZUZpZDsKc3RhdGljIF9faW5saW5lX18gaW5vX3QgIGNv
ZGFfZjJpKHN0cnVjdCBWaWNlRmlkICpmaWQpCnsKCWlmICggISBmaWQgKSAKCQlyZXR1cm4gMDsg
CglpZiAoZmlkLT5Wbm9kZSA9PSAweGZmZmZmZmZlIHx8IGZpZC0+Vm5vZGUgPT0gMHhmZmZmZmZm
ZikKCQlyZXR1cm4gKChmaWQtPlZvbHVtZSA8PCAyMCkgfCAoZmlkLT5VbmlxdWUgJiAweGZmZmZm
KSk7CgllbHNlCgkJcmV0dXJuIChmaWQtPlVuaXF1ZSArIChmaWQtPlZub2RlPDwxMCkgKyAoZmlk
LT5Wb2x1bWU8PDIwKSk7Cn0KCQp0eXBlZGVmIHVfaW50MzJfdCB2dWlkX3Q7CnR5cGVkZWYgdV9p
bnQzMl90IHZnaWRfdDsKc3RydWN0IGNvZGFfY3JlZCB7CiAgICB2dWlkX3QgY3JfdWlkLCBjcl9l
dWlkLCBjcl9zdWlkLCBjcl9mc3VpZDsgIAogICAgdmdpZF90IGNyX2dyb3VwaWQsICAgICBjcl9l
Z2lkLCBjcl9zZ2lkLCBjcl9mc2dpZDsgIAp9OwogCmVudW0gY29kYV92dHlwZQl7IENfVk5PTiwg
Q19WUkVHLCBDX1ZESVIsIENfVkJMSywgQ19WQ0hSLCBDX1ZMTkssIENfVlNPQ0ssIENfVkZJRk8s
IENfVkJBRCB9OwpzdHJ1Y3QgY29kYV92YXR0ciB7Cglsb25nICAgICAJdmFfdHlwZTsJIAoJdV9z
aG9ydAkJdmFfbW9kZTsJIAoJc2hvcnQJCXZhX25saW5rOwkgCgl2dWlkX3QJCXZhX3VpZDsJCSAK
CXZnaWRfdAkJdmFfZ2lkOwkJIAoJbG9uZwkJdmFfZmlsZWlkOwkgCgl1X3F1YWRfdAl2YV9zaXpl
OwkgCglsb25nCQl2YV9ibG9ja3NpemU7CSAKCXN0cnVjdCB0aW1lc3BlYwl2YV9hdGltZTsJIAoJ
c3RydWN0IHRpbWVzcGVjCXZhX210aW1lOwkgCglzdHJ1Y3QgdGltZXNwZWMJdmFfY3RpbWU7CSAK
CXVfbG9uZwkJdmFfZ2VuOwkJIAoJdV9sb25nCQl2YV9mbGFnczsJIAoJdV9xdWFkX3QgCSAgICAg
ICAgdmFfcmRldjsJIAoJdV9xdWFkX3QJdmFfYnl0ZXM7CSAKCXVfcXVhZF90CXZhX2ZpbGVyZXY7
CSAKfTsKIApzdHJ1Y3QgY29kYV9zdGF0ZnMgewogICAgaW50MzJfdCBmX2Jsb2NrczsKICAgIGlu
dDMyX3QgZl9iZnJlZTsKICAgIGludDMyX3QgZl9iYXZhaWw7CiAgICBpbnQzMl90IGZfZmlsZXM7
CiAgICBpbnQzMl90IGZfZmZyZWU7Cn07CiAKCSAKIApzdHJ1Y3QgY29kYV9pbl9oZHIgewogICAg
dW5zaWduZWQgbG9uZyBvcGNvZGU7CiAgICB1bnNpZ25lZCBsb25nIHVuaXF1ZTsJICAgICAKICAg
IHVfc2hvcnQgcGlkOwkJICAgICAKICAgIHVfc2hvcnQgcGdpZDsJCSAgICAgCiAgICB1X3Nob3J0
IHNpZDsgICAgICAgICAgICAgICAgICAgICAKICAgIHN0cnVjdCBjb2RhX2NyZWQgY3JlZDsJICAg
ICAKfTsKIApzdHJ1Y3QgY29kYV9vdXRfaGRyIHsKICAgIHVuc2lnbmVkIGxvbmcgb3Bjb2RlOwog
ICAgdW5zaWduZWQgbG9uZyB1bmlxdWU7CQogICAgdW5zaWduZWQgbG9uZyByZXN1bHQ7Cn07CiAK
c3RydWN0IGNvZGFfcm9vdF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZp
Y2VGaWQgVkZpZDsKfTsKc3RydWN0IGNvZGFfcm9vdF9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9o
ZHIgaW47Cn07CiAKIAogCnN0cnVjdCBjb2RhX29wZW5faW4gewogICAgc3RydWN0IGNvZGFfaW5f
aGRyIGloOwogICAgVmljZUZpZAlWRmlkOwogICAgaW50CWZsYWdzOwp9OwpzdHJ1Y3QgY29kYV9v
cGVuX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgdV9xdWFkX3QgCWRldjsK
ICAgIGlub190CWlub2RlOwp9OwogCnN0cnVjdCBjb2RhX2Nsb3NlX2luIHsKICAgIHN0cnVjdCBj
b2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQJVkZpZDsKICAgIGludAlmbGFnczsKfTsKc3RydWN0
IGNvZGFfY2xvc2Vfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0Owp9OwogCnN0cnVj
dCBjb2RhX2lvY3RsX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQg
VkZpZDsKICAgIGludAljbWQ7CiAgICBpbnQJbGVuOwogICAgaW50CXJ3ZmxhZzsKICAgIGNoYXIg
KmRhdGE7CQkJIAp9OwpzdHJ1Y3QgY29kYV9pb2N0bF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0
X2hkciBvaDsKICAgIGludAlsZW47CiAgICBjYWRkcl90CWRhdGE7CQkgCn07CiAKc3RydWN0IGNv
ZGFfZ2V0YXR0cl9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZG
aWQ7Cn07CnN0cnVjdCBjb2RhX2dldGF0dHJfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIg
b2g7CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwp9OwogCnN0cnVjdCBjb2RhX3NldGF0dHJf
aW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgc3Ry
dWN0IGNvZGFfdmF0dHIgYXR0cjsKfTsKc3RydWN0IGNvZGFfc2V0YXR0cl9vdXQgewogICAgc3Ry
dWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CiAKc3RydWN0IGNvZGFfYWNjZXNzX2luIHsKICAgIHN0
cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQJVkZpZDsKICAgIGludAlmbGFnczsKfTsK
c3RydWN0IGNvZGFfYWNjZXNzX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsK
IAogCnN0cnVjdCAgY29kYV9sb29rdXBfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwog
ICAgVmljZUZpZAlWRmlkOwogICAgaW50ICAgICAgICAgbmFtZTsJCSAKICAgIGludCAgICAgICAg
IGZsYWdzOwkKfTsKc3RydWN0IGNvZGFfbG9va3VwX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRf
aGRyIG9oOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50CXZ0eXBlOwp9OwogCnN0cnVjdCBjb2Rh
X2NyZWF0ZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7
CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwogICAgaW50IGV4Y2w7CiAgICBpbnQgbW9kZTsK
ICAgIGludCAJbmFtZTsJCSAKfTsKc3RydWN0IGNvZGFfY3JlYXRlX291dCB7CiAgICBzdHJ1Y3Qg
Y29kYV9vdXRfaGRyIG9oOwogICAgVmljZUZpZCBWRmlkOwogICAgc3RydWN0IGNvZGFfdmF0dHIg
YXR0cjsKfTsKIApzdHJ1Y3QgY29kYV9yZW1vdmVfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRy
IGloOwogICAgVmljZUZpZAlWRmlkOwogICAgaW50IG5hbWU7CQkgCn07CnN0cnVjdCBjb2RhX3Jl
bW92ZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CiAKc3RydWN0IGNvZGFf
bGlua19pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIHNvdXJjZUZp
ZDsgICAgICAgICAgIAogICAgVmljZUZpZCBkZXN0RmlkOyAgICAgICAgICAgICAKICAgIGludCB0
bmFtZTsJCSAKfTsKc3RydWN0IGNvZGFfbGlua19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hk
ciBvdXQ7Cn07CiAKc3RydWN0IGNvZGFfcmVuYW1lX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hk
ciBpaDsKICAgIFZpY2VGaWQJc291cmNlRmlkOwogICAgaW50IAlzcmNuYW1lOwogICAgVmljZUZp
ZCBkZXN0RmlkOwogICAgaW50IAlkZXN0bmFtZTsKfTsKc3RydWN0IGNvZGFfcmVuYW1lX291dCB7
CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKIApzdHJ1Y3QgY29kYV9ta2Rpcl9pbiB7
CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkCVZGaWQ7CiAgICBzdHJ1Y3Qg
Y29kYV92YXR0ciBhdHRyOwogICAgaW50CSAgIG5hbWU7CQkgCn07CnN0cnVjdCBjb2RhX21rZGly
X291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgVmljZUZpZCBWRmlkOwogICAg
c3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKfTsKIApzdHJ1Y3QgY29kYV9ybWRpcl9pbiB7CiAgICBz
dHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkCVZGaWQ7CiAgICBpbnQgbmFtZTsJCSAK
fTsKc3RydWN0IGNvZGFfcm1kaXJfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0Owp9
OwogCnN0cnVjdCBjb2RhX3JlYWRkaXJfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwog
ICAgVmljZUZpZAlWRmlkOwogICAgaW50CWNvdW50OwogICAgaW50CW9mZnNldDsKfTsKc3RydWN0
IGNvZGFfcmVhZGRpcl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIGludAlz
aXplOwogICAgY2FkZHJfdAlkYXRhOwkJIAp9OwogCnN0cnVjdCBjb2RhX3N5bWxpbmtfaW4gewog
ICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZAlWRmlkOyAgICAgICAgICAgCiAg
ICBpbnQgc3JjbmFtZTsKICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CiAgICBpbnQgdG5hbWU7
Cn07CnN0cnVjdCBjb2RhX3N5bWxpbmtfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0
Owp9OwogCnN0cnVjdCBjb2RhX3JlYWRsaW5rX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBp
aDsKICAgIFZpY2VGaWQgVkZpZDsKfTsKc3RydWN0IGNvZGFfcmVhZGxpbmtfb3V0IHsKICAgIHN0
cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBpbnQJY291bnQ7CiAgICBjYWRkcl90CWRhdGE7CQkg
Cn07CiAKc3RydWN0IGNvZGFfZnN5bmNfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwog
ICAgVmljZUZpZCBWRmlkOwp9OwpzdHJ1Y3QgY29kYV9mc3luY19vdXQgewogICAgc3RydWN0IGNv
ZGFfb3V0X2hkciBvdXQ7Cn07CiAKc3RydWN0IGNvZGFfaW5hY3RpdmVfaW4gewogICAgc3RydWN0
IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwp9OwogCnN0cnVjdCBjb2RhX3ZnZXRf
aW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwp9OwpzdHJ1
Y3QgY29kYV92Z2V0X291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgVmljZUZp
ZCBWRmlkOwogICAgaW50CXZ0eXBlOwp9OwogCiAKIAogCiAKc3RydWN0IGNvZGFfcHVyZ2V1c2Vy
X291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgc3RydWN0IGNvZGFfY3JlZCBj
cmVkOwp9OwogCiAKc3RydWN0IGNvZGFfemFwZmlsZV9vdXQgeyAgCiAgICBzdHJ1Y3QgY29kYV9v
dXRfaGRyIG9oOwogICAgVmljZUZpZCBDb2RhRmlkOwp9OwogCiAJCnN0cnVjdCBjb2RhX3phcGRp
cl9vdXQgewkgIAogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQgQ29kYUZp
ZDsKfTsKIAogCQpzdHJ1Y3QgY29kYV96YXB2bm9kZV9vdXQgeyAKICAgIHN0cnVjdCBjb2RhX291
dF9oZHIgb2g7CiAgICBzdHJ1Y3QgY29kYV9jcmVkIGNyZWQ7CiAgICBWaWNlRmlkIFZGaWQ7Cn07
CiAKIAkKc3RydWN0IGNvZGFfcHVyZ2VmaWRfb3V0IHsgCiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRy
IG9oOwogICAgVmljZUZpZCBDb2RhRmlkOwp9OwogCnN0cnVjdCBjb2RhX3Jkd3JfaW4gewogICAg
c3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZAlWRmlkOwogICAgaW50CXJ3ZmxhZzsK
ICAgIGludAljb3VudDsKICAgIGludAlvZmZzZXQ7CiAgICBpbnQJaW9mbGFnOwogICAgY2FkZHJf
dAlkYXRhOwkJIAkKfTsKc3RydWN0IGNvZGFfcmR3cl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0
X2hkciBvaDsKICAgIGludAlyd2ZsYWc7CiAgICBpbnQJY291bnQ7CiAgICBjYWRkcl90CWRhdGE7
CSAKfTsKIAogCQpzdHJ1Y3QgY29kYV9yZXBsYWNlX291dCB7ICAKICAgIHN0cnVjdCBjb2RhX291
dF9oZHIgb2g7CiAgICBWaWNlRmlkIE5ld0ZpZDsKICAgIFZpY2VGaWQgT2xkRmlkOwp9OwogCnN0
cnVjdCBjb2RhX29wZW5fYnlfcGF0aF9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAg
ICBWaWNlRmlkCVZGaWQ7CiAgICBpbnQJZmxhZ3M7Cn07CnN0cnVjdCBjb2RhX29wZW5fYnlfcGF0
aF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKCWludCBwYXRoOwp9OwogCnN0cnVj
dCBjb2RhX3N0YXRmc19pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaW47Cn07CnN0cnVjdCBj
b2RhX3N0YXRmc19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIHN0cnVjdCBj
b2RhX3N0YXRmcyBzdGF0Owp9OwogCnVuaW9uIGlucHV0QXJncyB7CiAgICBzdHJ1Y3QgY29kYV9p
bl9oZHIgaWg7CQkgCiAgICBzdHJ1Y3QgY29kYV9vcGVuX2luIGNvZGFfb3BlbjsKICAgIHN0cnVj
dCBjb2RhX2Nsb3NlX2luIGNvZGFfY2xvc2U7CiAgICBzdHJ1Y3QgY29kYV9pb2N0bF9pbiBjb2Rh
X2lvY3RsOwogICAgc3RydWN0IGNvZGFfZ2V0YXR0cl9pbiBjb2RhX2dldGF0dHI7CiAgICBzdHJ1
Y3QgY29kYV9zZXRhdHRyX2luIGNvZGFfc2V0YXR0cjsKICAgIHN0cnVjdCBjb2RhX2FjY2Vzc19p
biBjb2RhX2FjY2VzczsKICAgIHN0cnVjdCBjb2RhX2xvb2t1cF9pbiBjb2RhX2xvb2t1cDsKICAg
IHN0cnVjdCBjb2RhX2NyZWF0ZV9pbiBjb2RhX2NyZWF0ZTsKICAgIHN0cnVjdCBjb2RhX3JlbW92
ZV9pbiBjb2RhX3JlbW92ZTsKICAgIHN0cnVjdCBjb2RhX2xpbmtfaW4gY29kYV9saW5rOwogICAg
c3RydWN0IGNvZGFfcmVuYW1lX2luIGNvZGFfcmVuYW1lOwogICAgc3RydWN0IGNvZGFfbWtkaXJf
aW4gY29kYV9ta2RpcjsKICAgIHN0cnVjdCBjb2RhX3JtZGlyX2luIGNvZGFfcm1kaXI7CiAgICBz
dHJ1Y3QgY29kYV9yZWFkZGlyX2luIGNvZGFfcmVhZGRpcjsKICAgIHN0cnVjdCBjb2RhX3N5bWxp
bmtfaW4gY29kYV9zeW1saW5rOwogICAgc3RydWN0IGNvZGFfcmVhZGxpbmtfaW4gY29kYV9yZWFk
bGluazsKICAgIHN0cnVjdCBjb2RhX2ZzeW5jX2luIGNvZGFfZnN5bmM7CiAgICBzdHJ1Y3QgY29k
YV9pbmFjdGl2ZV9pbiBjb2RhX2luYWN0aXZlOwogICAgc3RydWN0IGNvZGFfdmdldF9pbiBjb2Rh
X3ZnZXQ7CiAgICBzdHJ1Y3QgY29kYV9yZHdyX2luIGNvZGFfcmR3cjsKICAgIHN0cnVjdCBjb2Rh
X29wZW5fYnlfcGF0aF9pbiBjb2RhX29wZW5fYnlfcGF0aDsKICAgIHN0cnVjdCBjb2RhX3N0YXRm
c19pbiBjb2RhX3N0YXRmczsKfTsKdW5pb24gb3V0cHV0QXJncyB7CiAgICBzdHJ1Y3QgY29kYV9v
dXRfaGRyIG9oOwkJIAogICAgc3RydWN0IGNvZGFfcm9vdF9vdXQgY29kYV9yb290OwogICAgc3Ry
dWN0IGNvZGFfb3Blbl9vdXQgY29kYV9vcGVuOwogICAgc3RydWN0IGNvZGFfaW9jdGxfb3V0IGNv
ZGFfaW9jdGw7CiAgICBzdHJ1Y3QgY29kYV9nZXRhdHRyX291dCBjb2RhX2dldGF0dHI7CiAgICBz
dHJ1Y3QgY29kYV9sb29rdXBfb3V0IGNvZGFfbG9va3VwOwogICAgc3RydWN0IGNvZGFfY3JlYXRl
X291dCBjb2RhX2NyZWF0ZTsKICAgIHN0cnVjdCBjb2RhX21rZGlyX291dCBjb2RhX21rZGlyOwog
ICAgc3RydWN0IGNvZGFfcmVhZGRpcl9vdXQgY29kYV9yZWFkZGlyOwogICAgc3RydWN0IGNvZGFf
cmVhZGxpbmtfb3V0IGNvZGFfcmVhZGxpbms7CiAgICBzdHJ1Y3QgY29kYV92Z2V0X291dCBjb2Rh
X3ZnZXQ7CiAgICBzdHJ1Y3QgY29kYV9wdXJnZXVzZXJfb3V0IGNvZGFfcHVyZ2V1c2VyOwogICAg
c3RydWN0IGNvZGFfemFwZmlsZV9vdXQgY29kYV96YXBmaWxlOwogICAgc3RydWN0IGNvZGFfemFw
ZGlyX291dCBjb2RhX3phcGRpcjsKICAgIHN0cnVjdCBjb2RhX3phcHZub2RlX291dCBjb2RhX3ph
cHZub2RlOwogICAgc3RydWN0IGNvZGFfcHVyZ2VmaWRfb3V0IGNvZGFfcHVyZ2VmaWQ7CiAgICBz
dHJ1Y3QgY29kYV9yZHdyX291dCBjb2RhX3Jkd3I7CiAgICBzdHJ1Y3QgY29kYV9yZXBsYWNlX291
dCBjb2RhX3JlcGxhY2U7CiAgICBzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfb3V0IGNvZGFfb3Bl
bl9ieV9wYXRoOwogICAgc3RydWN0IGNvZGFfc3RhdGZzX291dCBjb2RhX3N0YXRmczsKfTsgICAg
CnVuaW9uIGNvZGFfZG93bmNhbGxzIHsKICAgICAKICAgICAKICAgIHN0cnVjdCBjb2RhX3B1cmdl
dXNlcl9vdXQgcHVyZ2V1c2VyOwogICAgc3RydWN0IGNvZGFfemFwZmlsZV9vdXQgemFwZmlsZTsK
ICAgIHN0cnVjdCBjb2RhX3phcGRpcl9vdXQgemFwZGlyOwogICAgc3RydWN0IGNvZGFfemFwdm5v
ZGVfb3V0IHphcHZub2RlOwogICAgc3RydWN0IGNvZGFfcHVyZ2VmaWRfb3V0IHB1cmdlZmlkOwog
ICAgc3RydWN0IGNvZGFfcmVwbGFjZV9vdXQgcmVwbGFjZTsKfTsKIApzdHJ1Y3QgVmljZUlvY3Rs
IHsKICAgICAgICBjYWRkcl90IGluLCBvdXQ7ICAgICAgICAgCiAgICAgICAgc2hvcnQgaW5fc2l6
ZTsgICAgICAgICAgIAogICAgICAgIHNob3J0IG91dF9zaXplOyAgICAgICAgICAKfTsKc3RydWN0
IFBpb2N0bERhdGEgewogICAgICAgIGNvbnN0IGNoYXIgKnBhdGg7CiAgICAgICAgaW50IGZvbGxv
dzsKICAgICAgICBzdHJ1Y3QgVmljZUlvY3RsIHZpOwp9OwojIDE0ICIvaG9tZS9qdzUvdG1wL2xp
bnV4MjIvaW5jbHVkZS9saW51eC9jb2RhX2ZzX2kuaCIgMgogCnN0cnVjdCBjb2RhX2lub2RlX2lu
Zm8gewoJIAoJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAgcGlwZWluZm87CiAgICAgICAgc3RydWN0
IFZpY2VGaWQgICAgIGNfZmlkOwkgCiAgICAgICAgdV9zaG9ydAkgICAgICAgICAgIGNfZmxhZ3M7
ICAgICAgCiAgICAgICAgdV9zaG9ydAkgICAgICAgICAgIGNfb2NvdW50OyAgICAgCiAgICAgICAg
dV9zaG9ydCAgICAgICAgICAgIGNfb3dyaXRlOyAgICAgCiAgICAgICAgdV9zaG9ydCAgICAgICAg
ICAgIGNfbW1jb3VudDsgICAgCiAgICAgICAgc3RydWN0IGlub2RlICAgICAgKmNfb3ZwOyAgICAg
ICAgCiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAgIGNfY25oZWFkOyAgICAgCglzdHJ1Y3QgbGlz
dF9oZWFkICAgY192b2xyb290bGlzdDsgIAogICAgICAgIHN0cnVjdCBpbm9kZSAgICAgICpjX3Zu
b2RlOyAgICAgIAogICAgICAgIGludCAgICAgICAgICAgICAgICBjX21hZ2ljOyAgICAgIAp9Owog
CmludCBjb2RhX2Nub2RlX21ha2Uoc3RydWN0IGlub2RlICoqLCBzdHJ1Y3QgVmljZUZpZCAqLCBz
dHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CmludCBjb2RhX2Nub2RlX21ha2VjdGwoc3RydWN0IGlub2Rl
ICoqaW5vZGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwpzdHJ1Y3QgaW5vZGUgKmNvZGFfZmlk
X3RvX2lub2RlKFZpY2VGaWQgKmZpZCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CnZvaWQgY29k
YV9yZXBsYWNlX2ZpZChzdHJ1Y3QgaW5vZGUgKiwgVmljZUZpZCAqLCBWaWNlRmlkICopOwojIDI3
MiAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi9ob21l
L2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3JvbWZzX2ZzX2kuaCIgMQogCnN0cnVjdCBy
b21mc19pbm9kZV9pbmZvIHsKCXVuc2lnbmVkIGxvbmcgaV9tZXRhc2l6ZTsJIAoJdW5zaWduZWQg
bG9uZyBpX2RhdGFvZmZzZXQ7CSAKfTsKIyAyNzMgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNs
dWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51
eC9zbWJfZnNfaS5oIiAxCiAKIApzdHJ1Y3Qgc21iX2lub2RlX2luZm8gewoJIAogICAgICAgIHVu
c2lnbmVkIGludCBvcGVuOwkgCglfX3UxNiBmaWxlaWQ7CQkgCglfX3UxNiBhdHRyOwkJIAoJX191
MTYgYWNjZXNzOwkJIAoJX191MTYgY2FjaGVfdmFsaWQ7CSAKCXVuc2lnbmVkIGxvbmcgb2xkbXRp
bWU7CSAKCXVuc2lnbmVkIGxvbmcgY2xvc2VkOwkgCn07CiMgMjc0ICIvaG9tZS9qdzUvdG1wL2xp
bnV4MjIvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2lu
Y2x1ZGUvbGludXgvaGZzX2ZzX2kuaCIgMQogCiAKc3RydWN0IGhmc19pbm9kZV9pbmZvIHsKCWlu
dAkJCQltYWdpYzsgICAgICAKCXN0cnVjdCBoZnNfY2F0X2VudHJ5CQkqZW50cnk7CgkgCglzdHJ1
Y3QgaGZzX2ZvcmsgCQkqZm9yazsKCWludAkJCQljb252ZXJ0OwoJIAoJaW5vX3QJCQkJZmlsZV90
eXBlOwoJY2hhcgkJCQlkaXJfc2l6ZTsKCSAKCWNvbnN0IHN0cnVjdCBoZnNfaGRyX2xheW91dAkq
ZGVmYXVsdF9sYXlvdXQ7CglzdHJ1Y3QgaGZzX2hkcl9sYXlvdXQJCSpsYXlvdXQ7CgkgCglpbnQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6X3NlY29uZHN3ZXN0OwogICAgICAgICAKICAg
ICAgICB2b2lkICgqZF9kcm9wX29wKShzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGlub190KTsKfTsK
IyAyNzUgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIv
aG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9hZGZzX2ZzX2kuaCIgMQogCiAKc3Ry
dWN0IGFkZnNfaW5vZGVfaW5mbyB7Cgl1bnNpZ25lZCBsb25nCWZpbGVfaWQ7CQkgCn07CiMgMjc2
ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL2hvbWUv
anc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvcW54NF9mc19pLmgiIDEKIAojIDEgIi9ob21l
L2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3FueHR5cGVzLmgiIDEKIAp0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IF9ueHRudF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX2Z0eXBlX3Q7CnR5
cGVkZWYgc3RydWN0IHsKCWxvbmcgeHRudF9ibGs7Cglsb25nIHh0bnRfc2l6ZTsKfSBfeHRudF90
Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG11aWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBt
Z2lkX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBxbnhfb2ZmX3Q7CnR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgcW54X25saW5rX3Q7CiMgMTQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xp
bnV4L3FueDRfZnNfaS5oIiAyCiAKc3RydWN0IHFueDRfaW5vZGVfaW5mbyB7CgljaGFyIGlfcmVz
ZXJ2ZWRbMTZdOwkgCglvZmZfdCBpX3NpemU7CQkgCglfeHRudF90IGlfZmlyc3RfeHRudDsJIAoJ
bG9uZyBpX3hibGs7CQkgCgl0aW1lX3QgaV9mdGltZTsJCSAKCXRpbWVfdCBpX210aW1lOwkJIAoJ
dGltZV90IGlfYXRpbWU7CQkgCgl0aW1lX3QgaV9jdGltZTsJCSAKCV9ueHRudF90IGlfbnVtX3h0
bnRzOwkgCgltb2RlX3QgaV9tb2RlOwkJIAoJbXVpZF90IGlfdWlkOwkJIAoJbWdpZF90IGlfZ2lk
OwkJIAoJbmxpbmtfdCBpX25saW5rOwkgCgljaGFyIGlfemVyb1s0XTsJCSAKCV9mdHlwZV90IGlf
dHlwZTsJIAoJdW5zaWduZWQgY2hhciBpX3N0YXR1czsJIAp9OwojIDI3NyAiL2hvbWUvanc1L3Rt
cC9saW51eDIyL2luY2x1ZGUvbGludXgvZnMuaCIgMgogCiAKc3RydWN0IGlhdHRyIHsKCXVuc2ln
bmVkIGludAlpYV92YWxpZDsKCXVtb2RlX3QJCWlhX21vZGU7Cgl1aWRfdAkJaWFfdWlkOwoJZ2lk
X3QJCWlhX2dpZDsKCW9mZl90CQlpYV9zaXplOwoJdGltZV90CQlpYV9hdGltZTsKCXRpbWVfdAkJ
aWFfbXRpbWU7Cgl0aW1lX3QJCWlhX2N0aW1lOwoJdW5zaWduZWQgaW50CWlhX2F0dHJfZmxhZ3M7
Cn07CiAKIAojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgi
IDEKIAojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDEK
IyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vZXJybm8uaCIgMQojIDEgIi9o
b21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvZXJybm8uaCIgMQogCiMgMSAi
L2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtLWkzODYvZXJybm8uaCIgMQojIDUgIi9o
b21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvZXJybm8uaCIgMgojIDQgIi9o
b21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9lcnJuby5oIiAyCiMgNCAiL2hvbWUvanc1
L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMgogCiMgNDIgIi9ob21lL2p3NS90
bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgiIDIKIAogCiAKIApleHRlcm4gaW50IG5y
X2RxdW90cywgbnJfZnJlZV9kcXVvdHM7CmV4dGVybiBpbnQgbWF4X2RxdW90czsKZXh0ZXJuIGlu
dCBkcXVvdF9yb290X3NxdWFzaDsKIAogCnN0cnVjdCBkcWJsayB7CglfX3UzMiBkcWJfYmhhcmRs
aW1pdDsJIAoJX191MzIgZHFiX2Jzb2Z0bGltaXQ7CSAKCV9fdTMyIGRxYl9jdXJibG9ja3M7CSAK
CV9fdTMyIGRxYl9paGFyZGxpbWl0OwkgCglfX3UzMiBkcWJfaXNvZnRsaW1pdDsJIAoJX191MzIg
ZHFiX2N1cmlub2RlczsJIAoJdGltZV90IGRxYl9idGltZTsJCSAKCXRpbWVfdCBkcWJfaXRpbWU7
CQkgCn07CiAKc3RydWN0IGRxc3RhdHMgewoJX191MzIgbG9va3VwczsKCV9fdTMyIGRyb3BzOwoJ
X191MzIgcmVhZHM7CglfX3UzMiB3cml0ZXM7CglfX3UzMiBjYWNoZV9oaXRzOwoJX191MzIgYWxs
b2NhdGVkX2RxdW90czsKCV9fdTMyIGZyZWVfZHF1b3RzOwoJX191MzIgc3luY3M7Cn07CiAKc3Ry
dWN0IGRxdW90IHsKCXN0cnVjdCBkcXVvdCAqZHFfbmV4dDsJCSAKCXN0cnVjdCBkcXVvdCAqKmRx
X3BwcmV2OwoJc3RydWN0IGxpc3RfaGVhZCBkcV9mcmVlOwkgCglzdHJ1Y3QgZHF1b3QgKmRxX2hh
c2hfbmV4dDsJIAoJc3RydWN0IGRxdW90ICoqZHFfaGFzaF9wcHJldjsJIAoJc3RydWN0IHdhaXRf
cXVldWUgKmRxX3dhaXQ7CSAKCWludCBkcV9jb3VudDsJCQkgCgkgCglzdHJ1Y3QgdmZzbW91bnQg
KmRxX21udDsJIAoJdW5zaWduZWQgaW50IGRxX2lkOwkJIAoJa2Rldl90IGRxX2RldjsJCQkgCglz
aG9ydCBkcV90eXBlOwkJCSAKCXNob3J0IGRxX2ZsYWdzOwkJCSAKCXVuc2lnbmVkIGxvbmcgZHFf
cmVmZXJlbmNlZDsJIAoJc3RydWN0IGRxYmxrIGRxX2RxYjsJCSAKfTsKIAojIDIwOCAiL2hvbWUv
anc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvcXVvdGEuaCIKIyAzMjggIi9ob21lL2p3NS90
bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4
MjIvaW5jbHVkZS9saW51eC9tb3VudC5oIiAxCiAKc3RydWN0IHF1b3RhX21vdW50X29wdGlvbnMK
ewoJdW5zaWduZWQgaW50IGZsYWdzOwkJCSAKCXN0cnVjdCBzZW1hcGhvcmUgZHFpb19zZW07CQkg
CglzdHJ1Y3Qgc2VtYXBob3JlIGRxb2ZmX3NlbTsJCSAKCXN0cnVjdCBmaWxlICpmaWxlc1syIF07
CQkgCgl0aW1lX3QgaW5vZGVfZXhwaXJlWzIgXTsJCSAKCXRpbWVfdCBibG9ja19leHBpcmVbMiBd
OwkJIAoJY2hhciByc3F1YXNoWzIgXTsJCSAKfTsKc3RydWN0IHZmc21vdW50CnsKICBrZGV2X3Qg
bW50X2RldjsJCQkgCiAgY2hhciAqbW50X2Rldm5hbWU7CQkJIAogIGNoYXIgKm1udF9kaXJuYW1l
OwkJCSAKICB1bnNpZ25lZCBpbnQgbW50X2ZsYWdzOwkJIAogIHN0cnVjdCBzdXBlcl9ibG9jayAq
bW50X3NiOwkJIAogIHN0cnVjdCBxdW90YV9tb3VudF9vcHRpb25zIG1udF9kcXVvdDsJIAogIHN0
cnVjdCB2ZnNtb3VudCAqbW50X25leHQ7CQkgCn07CnN0cnVjdCB2ZnNtb3VudCAqbG9va3VwX3Zm
c21udChrZGV2X3QgZGV2KTsKIAogCiMgMzI5ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVk
ZS9saW51eC9mcy5oIiAyCnN0cnVjdCBpbm9kZSB7CglzdHJ1Y3QgbGlzdF9oZWFkCWlfaGFzaDsK
CXN0cnVjdCBsaXN0X2hlYWQJaV9saXN0OwoJc3RydWN0IGxpc3RfaGVhZAlpX2RlbnRyeTsKCXVu
c2lnbmVkIGxvbmcJCWlfaW5vOwoJdW5zaWduZWQgaW50CQlpX2NvdW50OwoJa2Rldl90CQkJaV9k
ZXY7Cgl1bW9kZV90CQkJaV9tb2RlOwoJbmxpbmtfdAkJCWlfbmxpbms7Cgl1aWRfdAkJCWlfdWlk
OwoJZ2lkX3QJCQlpX2dpZDsKCWtkZXZfdAkJCWlfcmRldjsKCW9mZl90CQkJaV9zaXplOwoJdGlt
ZV90CQkJaV9hdGltZTsKCXRpbWVfdAkJCWlfbXRpbWU7Cgl0aW1lX3QJCQlpX2N0aW1lOwoJdW5z
aWduZWQgbG9uZwkJaV9ibGtzaXplOwoJdW5zaWduZWQgbG9uZwkJaV9ibG9ja3M7Cgl1bnNpZ25l
ZCBsb25nCQlpX3ZlcnNpb247Cgl1bnNpZ25lZCBsb25nCQlpX25ycGFnZXM7CglzdHJ1Y3Qgc2Vt
YXBob3JlCWlfc2VtOwoJc3RydWN0IHNlbWFwaG9yZQlpX2F0b21pY193cml0ZTsKCXN0cnVjdCBp
bm9kZV9vcGVyYXRpb25zCSppX29wOwoJc3RydWN0IHN1cGVyX2Jsb2NrCSppX3NiOwoJc3RydWN0
IHdhaXRfcXVldWUJKmlfd2FpdDsKCXN0cnVjdCBmaWxlX2xvY2sJKmlfZmxvY2s7CglzdHJ1Y3Qg
dm1fYXJlYV9zdHJ1Y3QJKmlfbW1hcDsKCXN0cnVjdCBwYWdlCQkqaV9wYWdlczsKCXN0cnVjdCBk
cXVvdAkJKmlfZHF1b3RbMiBdOwoJdW5zaWduZWQgbG9uZwkJaV9zdGF0ZTsKCXVuc2lnbmVkIGlu
dAkJaV9mbGFnczsKCXVuc2lnbmVkIGNoYXIJCWlfcGlwZTsKCXVuc2lnbmVkIGNoYXIJCWlfc29j
azsKCWludAkJCWlfd3JpdGVjb3VudDsKCXVuc2lnbmVkIGludAkJaV9hdHRyX2ZsYWdzOwoJX191
MzIJCQlpX2dlbmVyYXRpb247Cgl1bmlvbiB7CgkJc3RydWN0IHBpcGVfaW5vZGVfaW5mbwkJcGlw
ZV9pOwoJCXN0cnVjdCBtaW5peF9pbm9kZV9pbmZvCQltaW5peF9pOwoJCXN0cnVjdCBleHQyX2lu
b2RlX2luZm8JCWV4dDJfaTsKCQlzdHJ1Y3QgaHBmc19pbm9kZV9pbmZvCQlocGZzX2k7CgkJc3Ry
dWN0IG50ZnNfaW5vZGVfaW5mbyAgICAgICAgICBudGZzX2k7CgkJc3RydWN0IG1zZG9zX2lub2Rl
X2luZm8JCW1zZG9zX2k7CgkJc3RydWN0IHVtc2Rvc19pbm9kZV9pbmZvCXVtc2Rvc19pOwoJCXN0
cnVjdCBpc29faW5vZGVfaW5mbwkJaXNvZnNfaTsKCQlzdHJ1Y3QgbmZzX2lub2RlX2luZm8JCW5m
c19pOwoJCXN0cnVjdCBzeXN2X2lub2RlX2luZm8JCXN5c3ZfaTsKCQlzdHJ1Y3QgYWZmc19pbm9k
ZV9pbmZvCQlhZmZzX2k7CgkJc3RydWN0IHVmc19pbm9kZV9pbmZvCQl1ZnNfaTsKCQlzdHJ1Y3Qg
ZWZzX2lub2RlX2luZm8JCWVmc19pOwoJCXN0cnVjdCByb21mc19pbm9kZV9pbmZvCQlyb21mc19p
OwoJCXN0cnVjdCBjb2RhX2lub2RlX2luZm8JCWNvZGFfaTsKCQlzdHJ1Y3Qgc21iX2lub2RlX2lu
Zm8JCXNtYmZzX2k7CgkJc3RydWN0IGhmc19pbm9kZV9pbmZvCQloZnNfaTsKCQlzdHJ1Y3QgYWRm
c19pbm9kZV9pbmZvCQlhZGZzX2k7CgkJc3RydWN0IHFueDRfaW5vZGVfaW5mbwkJcW54NF9pOwoJ
CXN0cnVjdCBzb2NrZXQJCQlzb2NrZXRfaTsKCQl2b2lkCQkJCSpnZW5lcmljX2lwOwoJfSB1Owp9
OwogCmV4dGVybiB2b2lkIF9fbWFya19pbm9kZV9kaXJ0eShzdHJ1Y3QgaW5vZGUgKik7CnN0YXRp
YyBpbmxpbmUgdm9pZCBtYXJrX2lub2RlX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpCnsKCWlm
ICghKGlub2RlLT5pX3N0YXRlICYgMSApKQoJCV9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Cn0K
c3RydWN0IGZvd25fc3RydWN0IHsKCWludCBwaWQ7CQkgCgl1aWRfdCB1aWQsIGV1aWQ7CSAKCWlu
dCBzaWdudW07CQkgCn07CnN0cnVjdCBmaWxlIHsKCXN0cnVjdCBmaWxlCQkqZl9uZXh0LCAqKmZf
cHByZXY7CglzdHJ1Y3QgZGVudHJ5CQkqZl9kZW50cnk7CglzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z
CSpmX29wOwoJbW9kZV90CQkJZl9tb2RlOwoJbG9mZl90CQkJZl9wb3M7Cgl1bnNpZ25lZCBpbnQg
CQlmX2NvdW50LCBmX2ZsYWdzOwoJdW5zaWduZWQgbG9uZyAJCWZfcmVhZGEsIGZfcmFtYXgsIGZf
cmFlbmQsIGZfcmFsZW4sIGZfcmF3aW47CglzdHJ1Y3QgZm93bl9zdHJ1Y3QJZl9vd25lcjsKCXVu
c2lnbmVkIGludAkJZl91aWQsIGZfZ2lkOwoJaW50CQkJZl9lcnJvcjsKCXVuc2lnbmVkIGxvbmcJ
CWZfdmVyc2lvbjsKCSAKCXZvaWQJCQkqcHJpdmF0ZV9kYXRhOwp9OwpleHRlcm4gaW50IGluaXRf
cHJpdmF0ZV9maWxlKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKIAp0eXBl
ZGVmIHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZsX293bmVyX3Q7CnN0cnVjdCBmaWxlX2xvY2sgewoJ
c3RydWN0IGZpbGVfbG9jayAqZmxfbmV4dDsJIAoJc3RydWN0IGZpbGVfbG9jayAqZmxfbmV4dGxp
bms7CSAKCXN0cnVjdCBmaWxlX2xvY2sgKmZsX3ByZXZsaW5rOwkgCglzdHJ1Y3QgZmlsZV9sb2Nr
ICpmbF9uZXh0YmxvY2s7ICAKCXN0cnVjdCBmaWxlX2xvY2sgKmZsX3ByZXZibG9jazsKCWZsX293
bmVyX3QgZmxfb3duZXI7Cgl1bnNpZ25lZCBpbnQgZmxfcGlkOwoJc3RydWN0IHdhaXRfcXVldWUg
KmZsX3dhaXQ7CglzdHJ1Y3QgZmlsZSAqZmxfZmlsZTsKCXVuc2lnbmVkIGNoYXIgZmxfZmxhZ3M7
Cgl1bnNpZ25lZCBjaGFyIGZsX3R5cGU7CglvZmZfdCBmbF9zdGFydDsKCW9mZl90IGZsX2VuZDsK
CXZvaWQgKCpmbF9ub3RpZnkpKHN0cnVjdCBmaWxlX2xvY2sgKik7CSAKCXVuaW9uIHsKCQlzdHJ1
Y3QgbmZzX2xvY2tfaW5mbwluZnNfZmw7Cgl9IGZsX3U7Cn07CmV4dGVybiBzdHJ1Y3QgZmlsZV9s
b2NrCQkJKmZpbGVfbG9ja190YWJsZTsKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVk
ZS9saW51eC9mY250bC5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNt
L2ZjbnRsLmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNo
L2ZjbnRsLmgiIDEKIAojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS1pMzg2
L2ZjbnRsLmgiIDEKIAogCiAKIAogCnN0cnVjdCBmbG9jayB7CglzaG9ydCBsX3R5cGU7CglzaG9y
dCBsX3doZW5jZTsKCW9mZl90IGxfc3RhcnQ7CglvZmZfdCBsX2xlbjsKCXBpZF90IGxfcGlkOwp9
OwojIDUgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvZmNudGwuaCIg
MgojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9mY250bC5oIiAyCiMgNCAi
L2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvZmNudGwuaCIgMgojIDQ3MyAiL2hv
bWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvZnMuaCIgMgpleHRlcm4gaW50IGZjbnRs
X2dldGxrKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZsb2NrICpsKTsKZXh0ZXJuIGludCBmY250
bF9zZXRsayh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBmbG9jayAq
bCk7CiAKZXh0ZXJuIHZvaWQgbG9ja3NfcmVtb3ZlX3Bvc2l4KHN0cnVjdCBmaWxlICosIGZsX293
bmVyX3QgaWQpOwpleHRlcm4gdm9pZCBsb2Nrc19yZW1vdmVfZmxvY2soc3RydWN0IGZpbGUgKik7
CmV4dGVybiBzdHJ1Y3QgZmlsZV9sb2NrICpwb3NpeF90ZXN0X2xvY2soc3RydWN0IGZpbGUgKiwg
c3RydWN0IGZpbGVfbG9jayAqKTsKZXh0ZXJuIGludCBwb3NpeF9sb2NrX2ZpbGUoc3RydWN0IGZp
bGUgKiwgc3RydWN0IGZpbGVfbG9jayAqLCB1bnNpZ25lZCBpbnQpOwpleHRlcm4gdm9pZCBwb3Np
eF9ibG9ja19sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKZXh0
ZXJuIHZvaWQgcG9zaXhfdW5ibG9ja19sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKik7CnN0cnVjdCBm
YXN5bmNfc3RydWN0IHsKCWludCAgICBtYWdpYzsKCWludCAgICBmYV9mZDsKCXN0cnVjdCBmYXN5
bmNfc3RydWN0CSpmYV9uZXh0OyAgCglzdHJ1Y3QgZmlsZSAJCSpmYV9maWxlOwp9OwpleHRlcm4g
aW50IGZhc3luY19oZWxwZXIoaW50LCBzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmYXN5bmNf
c3RydWN0ICoqKTsKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9taW5p
eF9mc19zYi5oIiAxCiAKc3RydWN0IG1pbml4X3NiX2luZm8gewoJCQl1bnNpZ25lZCBsb25nIHNf
bmlub2RlczsKCQkJdW5zaWduZWQgbG9uZyBzX256b25lczsKCQkJdW5zaWduZWQgbG9uZyBzX2lt
YXBfYmxvY2tzOwoJCQl1bnNpZ25lZCBsb25nIHNfem1hcF9ibG9ja3M7CgkJCXVuc2lnbmVkIGxv
bmcgc19maXJzdGRhdGF6b25lOwoJCQl1bnNpZ25lZCBsb25nIHNfbG9nX3pvbmVfc2l6ZTsKCQkJ
dW5zaWduZWQgbG9uZyBzX21heF9zaXplOwoJCQlpbnQgc19kaXJzaXplOwoJCQlpbnQgc19uYW1l
bGVuOwoJCQlpbnQgc19saW5rX21heDsKCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICoqIHNfaW1hcDsK
CQkJc3RydWN0IGJ1ZmZlcl9oZWFkICoqIHNfem1hcDsKCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICog
c19zYmg7CgkJCXN0cnVjdCBtaW5peF9zdXBlcl9ibG9jayAqIHNfbXM7CgkJCXVuc2lnbmVkIHNo
b3J0IHNfbW91bnRfc3RhdGU7CgkJCXVuc2lnbmVkIHNob3J0IHNfdmVyc2lvbjsKfTsKIyA0OTcg
Ii9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvaG9tZS9q
dzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9leHQyX2ZzX3NiLmgiIDEKIAojIDEgIi9ob21l
L2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2V4dDJfZnMuaCIgMQogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCnN0cnVjdCBleHQyX2FjbF9oZWFkZXIJIAp7CglfX3UzMglhY2xoX3NpemU7
CglfX3UzMglhY2xoX2ZpbGVfY291bnQ7CglfX3UzMglhY2xoX2FjbGVfY291bnQ7CglfX3UzMglh
Y2xoX2ZpcnN0X2FjbGU7Cn07CnN0cnVjdCBleHQyX2FjbF9lbnRyeQkgCnsKCV9fdTMyCWFjbGVf
c2l6ZTsKCV9fdTE2CWFjbGVfcGVybXM7CSAKCV9fdTE2CWFjbGVfdHlwZTsJIAoJX191MTYJYWNs
ZV90YWc7CSAKCV9fdTE2CWFjbGVfcGFkMTsKCV9fdTMyCWFjbGVfbmV4dDsJIAoJCQkJCSAKfTsK
IApzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjCnsKCV9fdTMyCWJnX2Jsb2NrX2JpdG1hcDsJCSAKCV9f
dTMyCWJnX2lub2RlX2JpdG1hcDsJCSAKCV9fdTMyCWJnX2lub2RlX3RhYmxlOwkJIAoJX191MTYJ
YmdfZnJlZV9ibG9ja3NfY291bnQ7CSAKCV9fdTE2CWJnX2ZyZWVfaW5vZGVzX2NvdW50OwkgCglf
X3UxNgliZ191c2VkX2RpcnNfY291bnQ7CSAKCV9fdTE2CWJnX3BhZDsKCV9fdTMyCWJnX3Jlc2Vy
dmVkWzNdOwp9OwogCiAKIAogCiAJCiAKIApzdHJ1Y3QgZXh0Ml9pbm9kZSB7CglfX3UxNglpX21v
ZGU7CQkgCglfX3UxNglpX3VpZDsJCSAKCV9fdTMyCWlfc2l6ZTsJCSAKCV9fdTMyCWlfYXRpbWU7
CSAKCV9fdTMyCWlfY3RpbWU7CSAKCV9fdTMyCWlfbXRpbWU7CSAKCV9fdTMyCWlfZHRpbWU7CSAK
CV9fdTE2CWlfZ2lkOwkJIAoJX191MTYJaV9saW5rc19jb3VudDsJIAoJX191MzIJaV9ibG9ja3M7
CSAKCV9fdTMyCWlfZmxhZ3M7CSAKCXVuaW9uIHsKCQlzdHJ1Y3QgewoJCQlfX3UzMiAgbF9pX3Jl
c2VydmVkMTsKCQl9IGxpbnV4MTsKCQlzdHJ1Y3QgewoJCQlfX3UzMiAgaF9pX3RyYW5zbGF0b3I7
CgkJfSBodXJkMTsKCQlzdHJ1Y3QgewoJCQlfX3UzMiAgbV9pX3Jlc2VydmVkMTsKCQl9IG1hc2l4
MTsKCX0gb3NkMTsJCQkJIAoJX191MzIJaV9ibG9ja1soKCgxMiAgICsgMSkgICsgMSkgICsgMSkg
XTsgCglfX3UzMglpX3ZlcnNpb247CSAKCV9fdTMyCWlfZmlsZV9hY2w7CSAKCV9fdTMyCWlfZGly
X2FjbDsJIAoJX191MzIJaV9mYWRkcjsJIAoJdW5pb24gewoJCXN0cnVjdCB7CgkJCV9fdTgJbF9p
X2ZyYWc7CSAKCQkJX191OAlsX2lfZnNpemU7CSAKCQkJX191MTYJaV9wYWQxOwoJCQlfX3UzMgls
X2lfcmVzZXJ2ZWQyWzJdOwoJCX0gbGludXgyOwoJCXN0cnVjdCB7CgkJCV9fdTgJaF9pX2ZyYWc7
CSAKCQkJX191OAloX2lfZnNpemU7CSAKCQkJX191MTYJaF9pX21vZGVfaGlnaDsKCQkJX191MTYJ
aF9pX3VpZF9oaWdoOwoJCQlfX3UxNgloX2lfZ2lkX2hpZ2g7CgkJCV9fdTMyCWhfaV9hdXRob3I7
CgkJfSBodXJkMjsKCQlzdHJ1Y3QgewoJCQlfX3U4CW1faV9mcmFnOwkgCgkJCV9fdTgJbV9pX2Zz
aXplOwkgCgkJCV9fdTE2CW1fcGFkMTsKCQkJX191MzIJbV9pX3Jlc2VydmVkMlsyXTsKCQl9IG1h
c2l4MjsKCX0gb3NkMjsJCQkJIAp9OwogCiAKIAogCiAKc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sg
ewoJX191MzIJc19pbm9kZXNfY291bnQ7CQkgCglfX3UzMglzX2Jsb2Nrc19jb3VudDsJCSAKCV9f
dTMyCXNfcl9ibG9ja3NfY291bnQ7CSAKCV9fdTMyCXNfZnJlZV9ibG9ja3NfY291bnQ7CSAKCV9f
dTMyCXNfZnJlZV9pbm9kZXNfY291bnQ7CSAKCV9fdTMyCXNfZmlyc3RfZGF0YV9ibG9jazsJIAoJ
X191MzIJc19sb2dfYmxvY2tfc2l6ZTsJIAoJX19zMzIJc19sb2dfZnJhZ19zaXplOwkgCglfX3Uz
MglzX2Jsb2Nrc19wZXJfZ3JvdXA7CSAKCV9fdTMyCXNfZnJhZ3NfcGVyX2dyb3VwOwkgCglfX3Uz
MglzX2lub2Rlc19wZXJfZ3JvdXA7CSAKCV9fdTMyCXNfbXRpbWU7CQkgCglfX3UzMglzX3d0aW1l
OwkJIAoJX191MTYJc19tbnRfY291bnQ7CQkgCglfX3MxNglzX21heF9tbnRfY291bnQ7CSAKCV9f
dTE2CXNfbWFnaWM7CQkgCglfX3UxNglzX3N0YXRlOwkJIAoJX191MTYJc19lcnJvcnM7CQkgCglf
X3UxNglzX21pbm9yX3Jldl9sZXZlbDsgCSAKCV9fdTMyCXNfbGFzdGNoZWNrOwkJIAoJX191MzIJ
c19jaGVja2ludGVydmFsOwkgCglfX3UzMglzX2NyZWF0b3Jfb3M7CQkgCglfX3UzMglzX3Jldl9s
ZXZlbDsJCSAKCV9fdTE2CXNfZGVmX3Jlc3VpZDsJCSAKCV9fdTE2CXNfZGVmX3Jlc2dpZDsJCSAK
CSAKCV9fdTMyCXNfZmlyc3RfaW5vOyAJCSAKCV9fdTE2ICAgc19pbm9kZV9zaXplOyAJCSAKCV9f
dTE2CXNfYmxvY2tfZ3JvdXBfbnI7IAkgCglfX3UzMglzX2ZlYXR1cmVfY29tcGF0OyAJIAoJX191
MzIJc19mZWF0dXJlX2luY29tcGF0OyAJIAoJX191MzIJc19mZWF0dXJlX3JvX2NvbXBhdDsgCSAK
CV9fdTgJc191dWlkWzE2XTsJCSAKCWNoYXIJc192b2x1bWVfbmFtZVsxNl07IAkgCgljaGFyCXNf
bGFzdF9tb3VudGVkWzY0XTsgCSAKCV9fdTMyCXNfYWxnb3JpdGhtX3VzYWdlX2JpdG1hcDsgIAoJ
IAoJX191OAlzX3ByZWFsbG9jX2Jsb2NrczsJIAoJX191OAlzX3ByZWFsbG9jX2Rpcl9ibG9ja3M7
CSAKCV9fdTE2CXNfcGFkZGluZzE7CglfX3UzMglzX3Jlc2VydmVkWzIwNF07CSAKfTsKIAogCiAK
IAogCnN0cnVjdCBleHQyX2Rpcl9lbnRyeSB7CglfX3UzMglpbm9kZTsJCQkgCglfX3UxNglyZWNf
bGVuOwkJIAoJX191MTYJbmFtZV9sZW47CQkgCgljaGFyCW5hbWVbMjU1IF07CSAKfTsKIApzdHJ1
Y3QgZXh0Ml9kaXJfZW50cnlfMiB7CglfX3UzMglpbm9kZTsJCQkgCglfX3UxNglyZWNfbGVuOwkJ
IAoJX191OAluYW1lX2xlbjsJCSAKCV9fdTgJZmlsZV90eXBlOwoJY2hhcgluYW1lWzI1NSBdOwkg
Cn07CiAKIAogCmV4dGVybiBsb25nIGxvbmcgZXh0Ml9tYXhfc2l6ZXNbXTsKIAogCiAKZXh0ZXJu
IGludCBleHQyX3Blcm1pc3Npb24gKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwogCmV4dGVybiBpbnQg
ZXh0Ml9ncm91cF9zcGFyc2UoaW50IGdyb3VwKTsKZXh0ZXJuIGludCBleHQyX25ld19ibG9jayAo
Y29uc3Qgc3RydWN0IGlub2RlICosIHVuc2lnbmVkIGxvbmcsCgkJCSAgIF9fdTMyICosIF9fdTMy
ICosIGludCAqKTsKZXh0ZXJuIHZvaWQgZXh0Ml9mcmVlX2Jsb2NrcyAoY29uc3Qgc3RydWN0IGlu
b2RlICosIHVuc2lnbmVkIGxvbmcsCgkJCSAgICAgIHVuc2lnbmVkIGxvbmcpOwpleHRlcm4gdW5z
aWduZWQgbG9uZyBleHQyX2NvdW50X2ZyZWVfYmxvY2tzIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7
CmV4dGVybiB2b2lkIGV4dDJfY2hlY2tfYmxvY2tzX2JpdG1hcCAoc3RydWN0IHN1cGVyX2Jsb2Nr
ICopOwpleHRlcm4gc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqIGV4dDJfZ2V0X2dyb3VwX2Rlc2Mo
c3RydWN0IHN1cGVyX2Jsb2NrICogc2IsCgkJCQkJCSAgICB1bnNpZ25lZCBpbnQgYmxvY2tfZ3Jv
dXAsCgkJCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogYmgpOwogCmV4dGVybiB1bnNpZ25l
ZCBsb25nIGV4dDJfY291bnRfZnJlZSAoc3RydWN0IGJ1ZmZlcl9oZWFkICosIHVuc2lnbmVkKTsK
IApleHRlcm4gaW50IGV4dDJfY2hlY2tfZGlyX2VudHJ5IChjb25zdCBjaGFyICosIHN0cnVjdCBp
bm9kZSAqLAoJCQkJIHN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICosIHN0cnVjdCBidWZmZXJfaGVh
ZCAqLAoJCQkJIHVuc2lnbmVkIGxvbmcpOwogCmV4dGVybiBpbnQgZXh0Ml9yZWFkIChzdHJ1Y3Qg
aW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgY2hhciAqLCBpbnQpOwpleHRlcm4gaW50IGV4dDJfd3Jp
dGUgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCBjaGFyICosIGludCk7CiAKZXh0ZXJu
IGludCBleHQyX3N5bmNfZmlsZSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKIApl
eHRlcm4gc3RydWN0IGlub2RlICogZXh0Ml9uZXdfaW5vZGUgKGNvbnN0IHN0cnVjdCBpbm9kZSAq
LCBpbnQsIGludCAqKTsKZXh0ZXJuIHZvaWQgZXh0Ml9mcmVlX2lub2RlIChzdHJ1Y3QgaW5vZGUg
Kik7CmV4dGVybiB1bnNpZ25lZCBsb25nIGV4dDJfY291bnRfZnJlZV9pbm9kZXMgKHN0cnVjdCBz
dXBlcl9ibG9jayAqKTsKZXh0ZXJuIHZvaWQgZXh0Ml9jaGVja19pbm9kZXNfYml0bWFwIChzdHJ1
Y3Qgc3VwZXJfYmxvY2sgKik7CiAKZXh0ZXJuIGludCBleHQyX2JtYXAgKHN0cnVjdCBpbm9kZSAq
LCBpbnQpOwpleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogZXh0Ml9nZXRibGsgKHN0cnVjdCBp
bm9kZSAqLCBsb25nLCBpbnQsIGludCAqKTsKZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIGV4
dDJfYnJlYWQgKHN0cnVjdCBpbm9kZSAqLCBpbnQsIGludCwgaW50ICopOwpleHRlcm4gaW50IGV4
dDJfZ2V0Y2x1c3RlciAoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2spOwpleHRlcm4g
dm9pZCBleHQyX3JlYWRfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgZXh0Ml93
cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCBleHQyX3B1dF9pbm9kZSAo
c3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCBleHQyX2RlbGV0ZV9pbm9kZSAoc3RydWN0IGlu
b2RlICopOwpleHRlcm4gaW50IGV4dDJfc3luY19pbm9kZSAoc3RydWN0IGlub2RlICopOwpleHRl
cm4gaW50IGV4dDJfbm90aWZ5X2NoYW5nZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAq
KTsKZXh0ZXJuIHZvaWQgZXh0Ml9kaXNjYXJkX3ByZWFsbG9jIChzdHJ1Y3QgaW5vZGUgKik7CiAK
ZXh0ZXJuIGludCBleHQyX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5z
aWduZWQgaW50LAoJCSAgICAgICB1bnNpZ25lZCBsb25nKTsKIApleHRlcm4gdm9pZCBleHQyX3Jl
bGVhc2UgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKZXh0ZXJuIHN0cnVjdCBkZW50
cnkgKmV4dDJfbG9va3VwIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJu
IGludCBleHQyX2NyZWF0ZSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGludCk7CmV4
dGVybiBpbnQgZXh0Ml9ta2RpciAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGludCk7
CmV4dGVybiBpbnQgZXh0Ml9ybWRpciAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsK
ZXh0ZXJuIGludCBleHQyX3VubGluayAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsK
ZXh0ZXJuIGludCBleHQyX3N5bWxpbmsgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixj
b25zdCBjaGFyICopOwpleHRlcm4gaW50IGV4dDJfbGluayAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1
Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJuIGludCBleHQyX21rbm9kIChzdHJ1
Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQsIGludCk7CmV4dGVybiBpbnQgZXh0Ml9y
ZW5hbWUgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosCgkJCXN0cnVjdCBpbm9kZSAq
LCBzdHJ1Y3QgZGVudHJ5ICopOwogCmV4dGVybiB2b2lkIGV4dDJfZXJyb3IgKHN0cnVjdCBzdXBl
cl9ibG9jayAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKQoJX19hdHRyaWJ1dGVf
XyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwpleHRlcm4gICB2b2lkIGV4dDJfcGFuaWMgKHN0
cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBjaGFyICosCgkJCQkgICBjb25zdCBjaGFyICosIC4u
LikKCV9fYXR0cmlidXRlX18gKChub3JldHVybiwgIGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwpl
eHRlcm4gdm9pZCBleHQyX3dhcm5pbmcgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBjaGFy
ICosIGNvbnN0IGNoYXIgKiwgLi4uKQoJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAz
LCA0KSkpOwpleHRlcm4gdm9pZCBleHQyX3B1dF9zdXBlciAoc3RydWN0IHN1cGVyX2Jsb2NrICop
OwpleHRlcm4gdm9pZCBleHQyX3dyaXRlX3N1cGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CmV4
dGVybiBpbnQgZXh0Ml9yZW1vdW50IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50ICosIGNoYXIg
Kik7CmV4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBleHQyX3JlYWRfc3VwZXIgKHN0cnVjdCBz
dXBlcl9ibG9jayAqLHZvaWQgKixpbnQpOwpleHRlcm4gaW50IGluaXRfZXh0Ml9mcyh2b2lkKTsK
ZXh0ZXJuIGludCBleHQyX3N0YXRmcyAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBzdGF0
ZnMgKiwgaW50KTsKIApleHRlcm4gdm9pZCBleHQyX3RydW5jYXRlIChzdHJ1Y3QgaW5vZGUgKik7
CiAKIApleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXh0Ml9kaXJfaW5vZGVfb3BlcmF0
aW9uczsKIApleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXh0Ml9maWxlX2lub2RlX29w
ZXJhdGlvbnM7CiAKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4dDJfc3ltbGlua19p
bm9kZV9vcGVyYXRpb25zOwojIDE5ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51
eC9leHQyX2ZzX3NiLmgiIDIKIAogCiAKc3RydWN0IGV4dDJfc2JfaW5mbyB7Cgl1bnNpZ25lZCBs
b25nIHNfZnJhZ19zaXplOwkgCgl1bnNpZ25lZCBsb25nIHNfZnJhZ3NfcGVyX2Jsb2NrOyAKCXVu
c2lnbmVkIGxvbmcgc19pbm9kZXNfcGVyX2Jsb2NrOyAKCXVuc2lnbmVkIGxvbmcgc19mcmFnc19w
ZXJfZ3JvdXA7IAoJdW5zaWduZWQgbG9uZyBzX2Jsb2Nrc19wZXJfZ3JvdXA7IAoJdW5zaWduZWQg
bG9uZyBzX2lub2Rlc19wZXJfZ3JvdXA7IAoJdW5zaWduZWQgbG9uZyBzX2l0Yl9wZXJfZ3JvdXA7
CSAKCXVuc2lnbmVkIGxvbmcgc19kYl9wZXJfZ3JvdXA7CSAKCXVuc2lnbmVkIGxvbmcgc19kZXNj
X3Blcl9ibG9jazsJIAoJdW5zaWduZWQgbG9uZyBzX2dyb3Vwc19jb3VudDsJIAoJc3RydWN0IGJ1
ZmZlcl9oZWFkICogc19zYmg7CSAKCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICogc19lczsJIAoJ
c3RydWN0IGJ1ZmZlcl9oZWFkICoqIHNfZ3JvdXBfZGVzYzsKCXVuc2lnbmVkIHNob3J0IHNfbG9h
ZGVkX2lub2RlX2JpdG1hcHM7Cgl1bnNpZ25lZCBzaG9ydCBzX2xvYWRlZF9ibG9ja19iaXRtYXBz
OwoJdW5zaWduZWQgbG9uZyBzX2lub2RlX2JpdG1hcF9udW1iZXJbOCBdOwoJc3RydWN0IGJ1ZmZl
cl9oZWFkICogc19pbm9kZV9iaXRtYXBbOCBdOwoJdW5zaWduZWQgbG9uZyBzX2Jsb2NrX2JpdG1h
cF9udW1iZXJbOCBdOwoJc3RydWN0IGJ1ZmZlcl9oZWFkICogc19ibG9ja19iaXRtYXBbOCBdOwoJ
dW5zaWduZWQgbG9uZyAgc19tb3VudF9vcHQ7Cgl1bnNpZ25lZCBzaG9ydCBzX3Jlc3VpZDsKCXVu
c2lnbmVkIHNob3J0IHNfcmVzZ2lkOwoJdW5zaWduZWQgc2hvcnQgc19tb3VudF9zdGF0ZTsKCXVu
c2lnbmVkIHNob3J0IHNfcGFkOwoJaW50IHNfYWRkcl9wZXJfYmxvY2tfYml0czsKCWludCBzX2Rl
c2NfcGVyX2Jsb2NrX2JpdHM7CglpbnQgc19pbm9kZV9zaXplOwoJaW50IHNfZmlyc3RfaW5vOwoJ
aW50IHNfZmVhdHVyZV9jb21wYXQ7CglpbnQgc19mZWF0dXJlX2luY29tcGF0OwoJaW50IHNfZmVh
dHVyZV9yb19jb21wYXQ7Cn07CiMgNDk4ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9s
aW51eC9mcy5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvaHBm
c19mc19zYi5oIiAxCnN0cnVjdCBocGZzX3NiX2luZm8gewoJaW5vX3Qgc2Jfcm9vdDsJCQkgCgl1
bnNpZ25lZCBzYl9mc19zaXplOwkJIAoJdW5zaWduZWQgc2JfYml0bWFwczsJCSAKCXVuc2lnbmVk
IHNiX2RpcmJhbmRfc2l6ZTsJIAoJdW5zaWduZWQgc2JfZG1hcDsJCSAKCXVuc2lnbmVkIHNiX25f
ZnJlZTsJCSAKCXVuc2lnbmVkIHNiX25fZnJlZV9kbm9kZXM7CSAKCXVpZF90IHNiX3VpZDsJCQkg
CglnaWRfdCBzYl9naWQ7CQkJIAoJdW1vZGVfdCBzYl9tb2RlOwkJIAoJdW5zaWduZWQgc2JfbG93
ZXJjYXNlIDogMTsJIAoJdW5zaWduZWQgc2JfY29udiA6IDI7CQkgCn07CiMgNDk5ICIvaG9tZS9q
dzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9s
aW51eDIyL2luY2x1ZGUvbGludXgvbnRmc19mc19zYi5oIiAxCnN0cnVjdCBudGZzX3NiX2luZm97
CgkgCgludGZzX3VpZF90IHVpZDsKCW50ZnNfZ2lkX3QgZ2lkOwoJbnRtb2RlX3QgdW1hc2s7CiAg
ICAgICAgdW5zaWduZWQgaW50IG5jdDsKCXZvaWQgKm5sc19tYXA7Cgl1bnNpZ25lZCBpbnQgbmd0
OwoJIAoJbnRmc19zaXplX3QgcGFydGl0aW9uX2JpYXM7CSAKCSAKCW50ZnNfdTMyIGF0X3N0YW5k
YXJkX2luZm9ybWF0aW9uOwoJbnRmc191MzIgYXRfYXR0cmlidXRlX2xpc3Q7CgludGZzX3UzMiBh
dF9maWxlX25hbWU7CgludGZzX3UzMiBhdF9zZWN1cml0eV9kZXNjcmlwdG9yOwoJbnRmc191MzIg
YXRfZGF0YTsKCW50ZnNfdTMyIGF0X2luZGV4X3Jvb3Q7CgludGZzX3UzMiBhdF9pbmRleF9hbGxv
Y2F0aW9uOwoJbnRmc191MzIgYXRfYml0bWFwOwoJbnRmc191MzIgYXRfc3ltbGluazsgIAoJIAoJ
aW50IGJsb2Nrc2l6ZTsKCWludCBjbHVzdGVyZmFjdG9yOwoJaW50IGNsdXN0ZXJzaXplOwoJaW50
IG1mdF9yZWNvcmRzaXplOwoJaW50IG1mdF9jbHVzdGVyc19wZXJfcmVjb3JkOwoJaW50IGluZGV4
X3JlY29yZHNpemU7CglpbnQgaW5kZXhfY2x1c3RlcnNfcGVyX3JlY29yZDsKCWludCBtZnRfY2x1
c3RlcjsKCSAKCXVuc2lnbmVkIGNoYXIgKm1mdDsKCXVuc2lnbmVkIHNob3J0ICp1cGNhc2U7Cgl1
bnNpZ25lZCBpbnQgdXBjYXNlX2xlbmd0aDsKCSAKCXN0cnVjdCBudGZzX2lub2RlX2luZm8gKm1m
dF9pbm87CglzdHJ1Y3QgbnRmc19pbm9kZV9pbmZvICptZnRtaXJyOwoJc3RydWN0IG50ZnNfaW5v
ZGVfaW5mbyAqYml0bWFwOwoJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKfTsKIyA1MDAgIi9ob21l
L2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvaG9tZS9qdzUvdG1w
L2xpbnV4MjIvaW5jbHVkZS9saW51eC9tc2Rvc19mc19zYi5oIiAxCiMgMSAiL2hvbWUvanc1L3Rt
cC9saW51eDIyL2luY2x1ZGUvbGludXgvZmF0X2N2Zi5oIiAxCnN0cnVjdCBjdmZfZm9ybWF0Cnsg
aW50IGN2Zl92ZXJzaW9uOwogIGNoYXIqIGN2Zl92ZXJzaW9uX3RleHQ7CiAgdW5zaWduZWQgbG9u
ZyBmbGFnczsKICBpbnQgKCpkZXRlY3RfY3ZmKSAoc3RydWN0IHN1cGVyX2Jsb2NrKnNiKTsKICBp
bnQgKCptb3VudF9jdmYpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sqc2IsY2hhcipvcHRpb25zKTsKICBp
bnQgKCp1bm1vdW50X2N2ZikgKHN0cnVjdCBzdXBlcl9ibG9jaypzYik7CiAgc3RydWN0IGJ1ZmZl
cl9oZWFkKiAoKmN2Zl9icmVhZCkgKHN0cnVjdCBzdXBlcl9ibG9jaypzYixpbnQgYmxvY2spOwog
IHN0cnVjdCBidWZmZXJfaGVhZCogKCpjdmZfZ2V0YmxrKSAoc3RydWN0IHN1cGVyX2Jsb2NrKnNi
LGludCBibG9jayk7CiAgdm9pZCAoKmN2Zl9icmVsc2UpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNi
LHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwogIHZvaWQgKCpjdmZfbWFya19idWZmZXJfZGlydHkp
IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZGlydHlfdmFsKTsKICB2b2lkICgqY3ZmX3NldF91cHRvZGF0ZSkgKHN0cnVjdCBzdXBlcl9ibG9j
ayAqc2IsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAog
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbCk7CiAgaW50ICgqY3ZmX2lzX3VwdG9kYXRl
KSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKICB2b2lk
ICgqY3ZmX2xsX3J3X2Jsb2NrKSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IG9wciwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5icmVxLAog
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoWzMyXSk7CiAgaW50
ICgqZmF0X2FjY2VzcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsaW50IG5yLGludCBuZXdfdmFs
dWUpOwogIGludCAoKmN2Zl9zdGF0ZnMpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLHN0cnVjdCBz
dGF0ZnMgKmJ1ZiwgaW50IGJ1ZnNpeik7CiAgaW50ICgqY3ZmX2JtYXApIChzdHJ1Y3QgaW5vZGUg
Kmlub2RlLGludCBibG9jayk7CiAgaW50ICgqY3ZmX3NtYXApIChzdHJ1Y3QgaW5vZGUgKmlub2Rl
LGludCBzZWN0b3IpOwogIHNzaXplX3QgKCpjdmZfZmlsZV9yZWFkKSAoIHN0cnVjdCBmaWxlICos
IGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CiAgc3NpemVfdCAoKmN2Zl9maWxlX3dyaXRlKSAo
IHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CiAgaW50ICgq
Y3ZmX21tYXApIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiAgaW50
ICgqY3ZmX3JlYWRwYWdlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBwYWdlICopOwogIGludCAo
KmN2Zl93cml0ZXBhZ2UpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHBhZ2UgKik7CiAgaW50ICgq
Y3ZmX2Rpcl9pb2N0bCkgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHAs
CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcg
YXJnKTsKICB2b2lkICgqemVyb19vdXRfY2x1c3RlcikgKHN0cnVjdCBpbm9kZSosIGludCBjbHVz
dGVybnIpOwp9OwppbnQgcmVnaXN0ZXJfY3ZmX2Zvcm1hdChzdHJ1Y3QgY3ZmX2Zvcm1hdCpjdmZf
Zm9ybWF0KTsKaW50IHVucmVnaXN0ZXJfY3ZmX2Zvcm1hdChzdHJ1Y3QgY3ZmX2Zvcm1hdCpjdmZf
Zm9ybWF0KTsKdm9pZCBkZWNfY3ZmX2Zvcm1hdF91c2VfY291bnRfYnlfdmVyc2lvbihpbnQgdmVy
c2lvbik7CmludCBkZXRlY3RfY3ZmKHN0cnVjdCBzdXBlcl9ibG9jaypzYixjaGFyKmZvcmNlKTsK
ZXh0ZXJuIHN0cnVjdCBjdmZfZm9ybWF0ICpjdmZfZm9ybWF0c1tdOwpleHRlcm4gaW50IGN2Zl9m
b3JtYXRfdXNlX2NvdW50W107CiMgMyAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGlu
dXgvbXNkb3NfZnNfc2IuaCIgMgogCnN0cnVjdCBmYXRfbW91bnRfb3B0aW9ucyB7Cgl1aWRfdCBm
c191aWQ7CglnaWRfdCBmc19naWQ7Cgl1bnNpZ25lZCBzaG9ydCBmc191bWFzazsKCXVuc2lnbmVk
IHNob3J0IGNvZGVwYWdlOyAgIAoJY2hhciAqaW9jaGFyc2V0OyAgICAgICAgICAgCgl1bnNpZ25l
ZCBjaGFyIG5hbWVfY2hlY2s7ICAKCXVuc2lnbmVkIGNoYXIgY29udmVyc2lvbjsgIAoJdW5zaWdu
ZWQgcXVpZXQ6MSwgICAgICAgICAgCgkJIHNob3dleGVjOjEsICAgICAgIAoJCSBzeXNfaW1tdXRh
YmxlOjEsICAKCQkgZG90c09LOjEsICAgICAgICAgCgkJIGlzdmZhdDoxLCAgICAgICAgIAoJCSB1
dGY4OjEsCSAgIAoJCSB1bmljb2RlX3hsYXRlOjEsICAKCQkgcG9zaXhmczoxLCAgICAgICAgCgkJ
IG51bXRhaWw6MSwgICAgICAgIAoJCSBhdGFyaToxLCAgICAgICAgICAKCQkgZmF0MzI6MTsJICAg
Cn07CnN0cnVjdCB2ZmF0X3VuaWNvZGUgewoJdW5zaWduZWQgY2hhciB1bmkxOwoJdW5zaWduZWQg
Y2hhciB1bmkyOwp9OwpzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyB7Cgl1bnNpZ25lZCBzaG9ydCBjbHVz
dGVyX3NpemU7ICAKCXVuc2lnbmVkIGNoYXIgZmF0cyxmYXRfYml0czsgIAoJdW5zaWduZWQgc2hv
cnQgZmF0X3N0YXJ0OwoJdW5zaWduZWQgbG9uZyBmYXRfbGVuZ3RoOyAgICAgCgl1bnNpZ25lZCBs
b25nIGRpcl9zdGFydDsKCXVuc2lnbmVkIHNob3J0IGRpcl9lbnRyaWVzOyAgIAoJdW5zaWduZWQg
bG9uZyBkYXRhX3N0YXJ0OyAgICAgCgl1bnNpZ25lZCBsb25nIGNsdXN0ZXJzOyAgICAgICAKCXVu
c2lnbmVkIGxvbmcgcm9vdF9jbHVzdGVyOyAgIAoJdW5zaWduZWQgbG9uZyBmc2luZm9fb2Zmc2V0
OyAgCglzdHJ1Y3Qgd2FpdF9xdWV1ZSAqZmF0X3dhaXQ7CglpbnQgZmF0X2xvY2s7CglpbnQgcHJl
dl9mcmVlOyAgICAgICAgICAgICAgICAKCWludCBmcmVlX2NsdXN0ZXJzOyAgICAgICAgICAgIAoJ
c3RydWN0IGZhdF9tb3VudF9vcHRpb25zIG9wdGlvbnM7CglzdHJ1Y3QgbmxzX3RhYmxlICpubHNf
ZGlzazsgICAKCXN0cnVjdCBubHNfdGFibGUgKm5sc19pbzsgICAgIAoJc3RydWN0IGN2Zl9mb3Jt
YXQqIGN2Zl9mb3JtYXQ7Cgl2b2lkICpkaXJfb3BzOwkJICAgICAgCgl2b2lkICgqcHV0X3N1cGVy
X2NhbGxiYWNrKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Cgl2b2lkICpwcml2YXRlX2RhdGE7CQp9
OwojIDUwMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEg
Ii9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2lzb19mc19zYi5oIiAxCiAKc3Ry
dWN0IGlzb2ZzX3NiX2luZm8gewoJdW5zaWduZWQgbG9uZyBzX25pbm9kZXM7Cgl1bnNpZ25lZCBs
b25nIHNfbnpvbmVzOwoJdW5zaWduZWQgbG9uZyBzX2ZpcnN0ZGF0YXpvbmU7Cgl1bnNpZ25lZCBs
b25nIHNfbG9nX3pvbmVfc2l6ZTsKCXVuc2lnbmVkIGxvbmcgc19tYXhfc2l6ZTsKCQoJdW5zaWdu
ZWQgY2hhciBzX2hpZ2hfc2llcnJhOyAgCgl1bnNpZ25lZCBjaGFyIHNfbWFwcGluZzsKCXVuc2ln
bmVkIGNoYXIgc19yb2NrOwoJdW5zaWduZWQgY2hhciBzX2pvbGlldF9sZXZlbDsKCXVuc2lnbmVk
IGNoYXIgc191dGY4OwoJdW5zaWduZWQgY2hhciBzX2NydWZ0OyAgCgl1bnNpZ25lZCBjaGFyIHNf
dW5oaWRlOwoJdW5zaWduZWQgY2hhciBzX25vc3VpZDsKCXVuc2lnbmVkIGNoYXIgc19ub2RldjsK
CW1vZGVfdCBzX21vZGU7CglnaWRfdCBzX2dpZDsKCXVpZF90IHNfdWlkOwoJc3RydWN0IG5sc190
YWJsZSAqc19ubHNfaW9jaGFyc2V0OyAgCn07CiMgNTAyICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIv
aW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUv
bGludXgvbmZzX2ZzX3NiLmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9s
aW51eC9pbi5oIiAxCiAKIAplbnVtIHsKICBJUFBST1RPX0lQID0gMCwJCSAKICBJUFBST1RPX0lD
TVAgPSAxLAkJIAogIElQUFJPVE9fSUdNUCA9IDIsCQkgCiAgSVBQUk9UT19JUElQID0gNCwJCSAK
ICBJUFBST1RPX1RDUCA9IDYsCQkgCiAgSVBQUk9UT19FR1AgPSA4LAkJIAogIElQUFJPVE9fUFVQ
ID0gMTIsCQkgCiAgSVBQUk9UT19VRFAgPSAxNywJCSAKICBJUFBST1RPX0lEUCA9IDIyLAkJIAog
IElQUFJPVE9fUlNWUCA9IDQ2LAkJIAogIElQUFJPVE9fR1JFID0gNDcsCQkgCiAgSVBQUk9UT19J
UFY2CSA9IDQxLAkJIAogIElQUFJPVE9fUElNICAgID0gMTAzLAkJIAogIElQUFJPVE9fRVNQID0g
NTAsICAgICAgICAgICAgIAogIElQUFJPVE9fQUggPSA1MSwgICAgICAgICAgICAgIAogIElQUFJP
VE9fQ09NUCAgID0gMTA4LCAgICAgICAgICAgICAgICAgCiAgSVBQUk9UT19SQVcJID0gMjU1LAkJ
IAogIElQUFJPVE9fTUFYCn07CiAKc3RydWN0IGluX2FkZHIgewoJX191MzIJc19hZGRyOwp9Owog
CiAKIAogCnN0cnVjdCBpcF9tcmVxIAp7CglzdHJ1Y3QgaW5fYWRkciBpbXJfbXVsdGlhZGRyOwkg
CglzdHJ1Y3QgaW5fYWRkciBpbXJfaW50ZXJmYWNlOwkgCn07CnN0cnVjdCBpcF9tcmVxbgp7Cglz
dHJ1Y3QgaW5fYWRkcglpbXJfbXVsdGlhZGRyOwkJIAoJc3RydWN0IGluX2FkZHIJaW1yX2FkZHJl
c3M7CQkgCglpbnQJCWltcl9pZmluZGV4OwkJIAp9OwpzdHJ1Y3QgaW5fcGt0aW5mbwp7CglpbnQJ
CWlwaV9pZmluZGV4OwoJc3RydWN0IGluX2FkZHIJaXBpX3NwZWNfZHN0OwoJc3RydWN0IGluX2Fk
ZHIJaXBpX2FkZHI7Cn07CiAKc3RydWN0IHNvY2thZGRyX2luIHsKICBzYV9mYW1pbHlfdAkJc2lu
X2ZhbWlseTsJIAogIHVuc2lnbmVkIHNob3J0IGludAlzaW5fcG9ydDsJIAogIHN0cnVjdCBpbl9h
ZGRyCXNpbl9hZGRyOwkgCiAgIAogIHVuc2lnbmVkIGNoYXIJCV9fcGFkWzE2ICAtIHNpemVvZihz
aG9ydCBpbnQpIC0KCQkJc2l6ZW9mKHVuc2lnbmVkIHNob3J0IGludCkgLSBzaXplb2Yoc3RydWN0
IGluX2FkZHIpXTsKfTsKIAogCiAKIAogCiAKIAogCiAKIyA1ICIvaG9tZS9qdzUvdG1wL2xpbnV4
MjIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaCIgMgogCnN0cnVjdCBuZnNfc2VydmVyIHsKCXN0
cnVjdCBycGNfY2xudCAqCWNsaWVudDsJCSAKCWludAkJCWZsYWdzOwkJIAoJaW50CQkJcnNpemU7
CQkgCglpbnQJCQl3c2l6ZTsJCSAKCXVuc2lnbmVkIGludAkJYnNpemU7CQkgCgl1bnNpZ25lZCBp
bnQJCWFjcmVnbWluOwkgCgl1bnNpZ25lZCBpbnQJCWFjcmVnbWF4OwoJdW5zaWduZWQgaW50CQlh
Y2Rpcm1pbjsKCXVuc2lnbmVkIGludAkJYWNkaXJtYXg7CgljaGFyICoJCQlob3N0bmFtZTsJIAp9
OwogCnN0cnVjdCBuZnNfc2JfaW5mbyB7CglzdHJ1Y3QgbmZzX3NlcnZlcglzX3NlcnZlcjsKCXN0
cnVjdCBuZnNfZmgJCXNfcm9vdDsKfTsKIyA1MDMgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNs
dWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51
eC9zeXN2X2ZzX3NiLmgiIDEKIApzdHJ1Y3Qgc3lzdl9zYl9pbmZvIHsKCWludAkgICAgICAgc190
eXBlOwkJIAoJdW5zaWduZWQgaW50ICAgc19ibG9ja19zaXplOwkgCgl1bnNpZ25lZCBpbnQgICBz
X2Jsb2NrX3NpemVfMTsJIAoJdW5zaWduZWQgaW50ICAgc19ibG9ja19zaXplX2JpdHM7CSAKCXVu
c2lnbmVkIGludCAgIHNfYmxvY2tfc2l6ZV9pbmNfYml0czsJIAoJdW5zaWduZWQgaW50ICAgc19i
bG9ja19zaXplX2RlY19iaXRzOwkgCgljaGFyCSAgICAgICBzX2NvbnZlcnQ7CSAKCWNoYXIJICAg
ICAgIHNfa2x1ZGdlX3N5bWxpbmtzOyAgCgljaGFyCSAgICAgICBzX3RydW5jYXRlOwkgCgkJCQkJ
IAoJbmxpbmtfdCAgICAgICAgc19saW5rX21heDsJIAoJdW5zaWduZWQgaW50ICAgc19pbm9kZXNf
cGVyX2Jsb2NrOwkgCgl1bnNpZ25lZCBpbnQgICBzX2lub2Rlc19wZXJfYmxvY2tfMTsJIAoJdW5z
aWduZWQgaW50ICAgc19pbm9kZXNfcGVyX2Jsb2NrX2JpdHM7CSAKCXVuc2lnbmVkIGludCAgIHNf
aW5kX3Blcl9ibG9jazsJCSAKCXVuc2lnbmVkIGludCAgIHNfaW5kX3Blcl9ibG9ja18xOwkgCgl1
bnNpZ25lZCBpbnQgICBzX2luZF9wZXJfYmxvY2tfYml0czsJIAoJdW5zaWduZWQgaW50ICAgc19p
bmRfcGVyX2Jsb2NrXzI7CSAKCXVuc2lnbmVkIGludCAgIHNfaW5kX3Blcl9ibG9ja18yXzE7CSAK
CXVuc2lnbmVkIGludCAgIHNfaW5kX3Blcl9ibG9ja18yX2JpdHM7CSAKCXVuc2lnbmVkIGludCAg
IHNfaW5kX3Blcl9ibG9ja18zOwkgCgl1bnNpZ25lZCBpbnQgICBzX2luZF9wZXJfYmxvY2tfYmxv
Y2tfc2l6ZV8xOwkgCgl1bnNpZ25lZCBpbnQgICBzX2luZF9wZXJfYmxvY2tfYmxvY2tfc2l6ZV9i
aXRzOwkgCgl1bnNpZ25lZCBpbnQgICBzX2luZF9wZXJfYmxvY2tfMl9ibG9ja19zaXplXzE7CSAK
CXVuc2lnbmVkIGludCAgIHNfaW5kX3Blcl9ibG9ja18yX2Jsb2NrX3NpemVfYml0czsgIAoJdW5z
aWduZWQgaW50ICAgc19pbmQwX3NpemU7CQkgCgl1bnNpZ25lZCBpbnQgICBzX2luZDFfc2l6ZTsJ
CSAKCXVuc2lnbmVkIGludCAgIHNfaW5kMl9zaXplOwkJIAoJdW5zaWduZWQgaW50ICAgc190b29i
aWdfYmxvY2s7CQkgCgl1bnNpZ25lZCBpbnQgICBzX2Jsb2NrX2Jhc2U7CSAKCXVuc2lnbmVkIHNo
b3J0IHNfZmljX3NpemU7CSAKCXVuc2lnbmVkIHNob3J0IHNfZmxjX3NpemU7CSAKCSAKCXN0cnVj
dCBidWZmZXJfaGVhZCAqc19iaDE7CglzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYmgyOwoJIAoJY2hh
ciAqICAgICAgICAgc19zYmQxOwkJIAoJY2hhciAqICAgICAgICAgc19zYmQyOwkJIAoJdTE2ICAg
ICAgICAgICAgKnNfc2JfZmljX2NvdW50OwkgCiAgICAgICAgdTE2ICAgICAgICAgICAgKnNfc2Jf
ZmljX2lub2RlczsgIAoJdTE2ICAgICAgICAgICAgKnNfc2JfdG90YWxfZnJlZV9pbm9kZXM7ICAK
CXUxNiAgICAgICAgICAgICpzX3NiX2ZsY19jb3VudDsJIAoJdTMyCSAgICAgICAqc19zYl9mbGNf
YmxvY2tzOyAgCgl1MzIgICAgICAgICAgICAqc19zYl90b3RhbF9mcmVlX2Jsb2NrczsgCgl1MzIg
ICAgICAgICAgICAqc19zYl90aW1lOwkgCgl1MzIgICAgICAgICAgICAqc19zYl9zdGF0ZTsJIAoJ
IAoJdTMyICAgICAgICAgICAgc19maXJzdGlub2Rlem9uZTsgIAoJdTMyICAgICAgICAgICAgc19m
aXJzdGRhdGF6b25lOwkgCgl1MzIgICAgICAgICAgICBzX25pbm9kZXM7CSAKCXUzMiAgICAgICAg
ICAgIHNfbmRhdGF6b25lczsJIAoJdTMyICAgICAgICAgICAgc19uem9uZXM7CSAKfTsKIAogCiMg
NTA0ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL2hv
bWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvYWZmc19mc19zYi5oIiAxCiAKc3RydWN0
IGFmZnNfYm1faW5mbyB7CglzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJtX2JoOwkgCglzMzIgYm1fZmly
c3RibGs7CQkgCglzMzIgYm1fa2V5OwkJCSAKCWludCBibV9jb3VudDsJCQkgCn07CnN0cnVjdCBh
ZmZzX2FsbG9jX3pvbmUgewoJc2hvcnQgYXpfc2l6ZTsJCQkgCglzaG9ydCBhel9jb3VudDsJCQkg
CglpbnQgYXpfZnJlZTsJCQkgCn07CnN0cnVjdCBhZmZzX3pvbmUgewoJdW5zaWduZWQgbG9uZyB6
X2lubzsJCSAKCXN0cnVjdCBhZmZzX2JtX2luZm8gKnpfYm07CSAKCWludCB6X3N0YXJ0OwkJCSAK
CWludCB6X2VuZDsJCQkgCglpbnQgel9hel9ubzsJCQkgCgl1bnNpZ25lZCBsb25nIHpfbHJ1X3Rp
bWU7CSAKfTsKc3RydWN0IGFmZnNfc2JfaW5mbyB7CglpbnQgc19wYXJ0aXRpb25fc2l6ZTsJCSAK
CWludCBzX2Jsa3NpemU7CQkJIAoJczMyIHNfcm9vdF9ibG9jazsJCSAKCWludCBzX2hhc2hzaXpl
OwkJCSAKCXVuc2lnbmVkIGxvbmcgc19mbGFnczsJCSAKCXMxNiBzX3VpZDsJCQkgCglzMTYgc19n
aWQ7CQkJIAoJdW1vZGVfdCBzX21vZGU7CQkJIAoJaW50IHNfcmVzZXJ2ZWQ7CQkJIAoJc3RydWN0
IGJ1ZmZlcl9oZWFkICpzX3Jvb3RfYmg7CSAKCXN0cnVjdCBhZmZzX2JtX2luZm8gKnNfYml0bWFw
OwkgCglpbnQgc19ibV9jb3VudDsJCQkgCglpbnQgc19uZXh0em9uZTsJCQkgCglpbnQgc19udW1f
YXo7CQkJIAoJc3RydWN0IGFmZnNfem9uZSAqc196b25lczsJIAoJc3RydWN0IGFmZnNfYWxsb2Nf
em9uZSAqc19hbGxvYzsgCgljaGFyICpzX3pvbmVtYXA7CQkgCgljaGFyICpzX3ByZWZpeDsJCQkg
CglpbnQgc19wcmVmaXhfbGVuOwkJIAoJY2hhciBzX3ZvbHVtZVszMl07CQkgCn07CiMgNTA1ICIv
aG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL2hvbWUvanc1
L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvdWZzX2ZzX3NiLmgiIDEKIAojIDEgIi9ob21lL2p3
NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oIiAxCiAKIyAxICIvaG9tZS9qdzUv
dG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMQogCiMgMSAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIAogCnR5cGVkZWYg
dm9pZCAqX19nbnVjX3ZhX2xpc3Q7CiAKIAp2b2lkIHZhX2VuZCAoX19nbnVjX3ZhX2xpc3QpOwkJ
IAogCiAKIAogCiAKIyAxNzUgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5j
bHVkZS9zdGRhcmcuaCIgMwogCiAKIAogCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsK
IyAxMCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgva2VybmVsLmgiIDIKIAog
CmV4dGVybiB2b2lkIG1hdGhfZXJyb3Iodm9pZCk7CmV4dGVybiBzdHJ1Y3Qgbm90aWZpZXJfYmxv
Y2sgKnBhbmljX25vdGlmaWVyX2xpc3Q7CiAgdm9pZCBwYW5pYyhjb25zdCBjaGFyICogZm10LCAu
Li4pCglfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4sICBmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsK
ICB2b2lkIGRvX2V4aXQobG9uZyBlcnJvcl9jb2RlKQoJX19hdHRyaWJ1dGVfXygobm9yZXR1cm4p
KSA7CmV4dGVybiB1bnNpZ25lZCBsb25nIHNpbXBsZV9zdHJ0b3VsKGNvbnN0IGNoYXIgKixjaGFy
ICoqLHVuc2lnbmVkIGludCk7CmV4dGVybiBsb25nIHNpbXBsZV9zdHJ0b2woY29uc3QgY2hhciAq
LGNoYXIgKiosdW5zaWduZWQgaW50KTsKZXh0ZXJuIGludCBzcHJpbnRmKGNoYXIgKiBidWYsIGNv
bnN0IGNoYXIgKiBmbXQsIC4uLik7CmV4dGVybiBpbnQgdnNwcmludGYoY2hhciAqYnVmLCBjb25z
dCBjaGFyICosIHZhX2xpc3QpOwpleHRlcm4gaW50IHNlc3Npb25fb2ZfcGdycChpbnQgcGdycCk7
CiAgX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpICBpbnQgcHJpbnRrKGNvbnN0IGNoYXIgKiBm
bXQsIC4uLikKCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKIApzdHJ1
Y3Qgc3lzaW5mbyB7Cglsb25nIHVwdGltZTsJCQkgCgl1bnNpZ25lZCBsb25nIGxvYWRzWzNdOwkJ
IAoJdW5zaWduZWQgbG9uZyB0b3RhbHJhbTsJCSAKCXVuc2lnbmVkIGxvbmcgZnJlZXJhbTsJCSAK
CXVuc2lnbmVkIGxvbmcgc2hhcmVkcmFtOwkgCgl1bnNpZ25lZCBsb25nIGJ1ZmZlcnJhbTsJIAoJ
dW5zaWduZWQgbG9uZyB0b3RhbHN3YXA7CSAKCXVuc2lnbmVkIGxvbmcgZnJlZXN3YXA7CQkgCgl1
bnNpZ25lZCBzaG9ydCBwcm9jczsJCSAKCWNoYXIgX2ZbMjJdOwkJCSAKfTsKIyAyNyAiL2hvbWUv
anc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvdWZzX2ZzLmgiIDIKIAogCiAKIAogCiAKIAog
CiAKIAogICAgICAgICAgICAKIAogCiAKIAogCiAKIApzdHJ1Y3QgdWZzX3RpbWV2YWwgewoJX19z
MzIJdHZfc2VjOwoJX19zMzIJdHZfdXNlYzsKfTsKIAogICAKc3RydWN0IHVmc19kaXJfZW50cnkg
ewoJX191MzIgIGRfaW5vOwkJCSAKCV9fdTE2ICBkX3JlY2xlbjsJCSAKCXVuaW9uIHsKCQlfX3Ux
NglkX25hbWxlbjsJCSAKCQlzdHJ1Y3QgewoJCQlfX3U4CWRfdHlwZTsJCSAKCQkJX191OAlkX25h
bWxlbjsJIAoJCX0gZF80NDsKCX0gZF91OwoJX191OAlkX25hbWVbMjU1ICArIDFdOwkgCn07CnN0
cnVjdCB1ZnNfY3N1bSB7CglfX3UzMgljc19uZGlyOwkgCglfX3UzMgljc19uYmZyZWU7CSAKCV9f
dTMyCWNzX25pZnJlZTsJIAoJX191MzIJY3NfbmZmcmVlOwkgCn07CiAKc3RydWN0IHVmc19zdXBl
cl9ibG9jayB7CglfX3UzMglmc19saW5rOwkgCglfX3UzMglmc19ybGluazsJIAoJX191MzIJZnNf
c2Jsa25vOwkgCglfX3UzMglmc19jYmxrbm87CSAKCV9fdTMyCWZzX2libGtubzsJIAoJX191MzIJ
ZnNfZGJsa25vOwkgCglfX3UzMglmc19jZ29mZnNldDsJIAoJX191MzIJZnNfY2dtYXNrOwkgCglf
X3UzMglmc190aW1lOwkgCglfX3UzMglmc19zaXplOwkgCglfX3UzMglmc19kc2l6ZTsJIAoJX191
MzIJZnNfbmNnOwkJIAoJX191MzIJZnNfYnNpemU7CSAKCV9fdTMyCWZzX2ZzaXplOwkgCglfX3Uz
Mglmc19mcmFnOwkgCiAKCV9fdTMyCWZzX21pbmZyZWU7CSAKCV9fdTMyCWZzX3JvdGRlbGF5Owkg
CglfX3UzMglmc19ycHM7CQkgCiAKCV9fdTMyCWZzX2JtYXNrOwkgCglfX3UzMglmc19mbWFzazsJ
IAoJX191MzIJZnNfYnNoaWZ0OwkgCglfX3UzMglmc19mc2hpZnQ7CSAKIAoJX191MzIJZnNfbWF4
Y29udGlnOwkgCglfX3UzMglmc19tYXhicGc7CSAKIAoJX191MzIJZnNfZnJhZ3NoaWZ0OwkgCglf
X3UzMglmc19mc2J0b2RiOwkgCglfX3UzMglmc19zYnNpemU7CSAKCV9fdTMyCWZzX2NzbWFzazsJ
IAoJX191MzIJZnNfY3NzaGlmdDsJIAoJX191MzIJZnNfbmluZGlyOwkgCglfX3UzMglmc19pbm9w
YjsJIAoJX191MzIJZnNfbnNwZjsJIAogCglfX3UzMglmc19vcHRpbTsJIAogCgl1bmlvbiB7CgkJ
c3RydWN0IHsKCQkJX191MzIJZnNfbnBzZWN0OwkgCgkJfSBmc19zdW47CgkJc3RydWN0IHsKCQkJ
X19zMzIJZnNfc3RhdGU7CSAKCQl9IGZzX3N1bng4NjsKCX0gZnNfdTE7CglfX3UzMglmc19pbnRl
cmxlYXZlOwkgCglfX3UzMglmc190cmFja3NrZXc7CSAKIAogCiAKIAoJX191MzIJZnNfaWRbMl07
CSAKIAoJX191MzIJZnNfY3NhZGRyOwkgCglfX3UzMglmc19jc3NpemU7CSAKCV9fdTMyCWZzX2Nn
c2l6ZTsJIAogCglfX3UzMglmc19udHJhazsJIAoJX191MzIJZnNfbnNlY3Q7CSAKCV9fdTMyCWZz
X3NwYzsJCSAKIAoJX191MzIJZnNfbmN5bDsJIAogCglfX3UzMglmc19jcGc7CQkgCglfX3UzMglm
c19pcGc7CQkgCglfX3UzMglmc19mcGc7CQkgCiAKCXN0cnVjdCB1ZnNfY3N1bSBmc19jc3RvdGFs
OwkgCiAKCV9fczgJZnNfZm1vZDsJIAoJX19zOAlmc19jbGVhbjsJIAoJX19zOAlmc19yb25seTsJ
IAoJX19zOAlmc19mbGFnczsJIAoJX19zOAlmc19mc21udFs1MTIgXTsJIAogCglfX3UzMglmc19j
Z3JvdG9yOwkgCglfX3UzMglmc19jc3BbMzEgXTsJIAoJX191MzIJZnNfbWF4Y2x1c3RlcjsKCV9f
dTMyCWZzX2NwYzsJCSAKCV9fdTE2CWZzX29wb3N0YmxbMTZdWzhdOwkgCQoJdW5pb24gewoJCXN0
cnVjdCB7CgkJCV9fczMyCWZzX3NwYXJlY29uWzUzXTsgCgkJCV9fczMyCWZzX3JlY2xhaW07CgkJ
CV9fczMyCWZzX3NwYXJlY29uMlsxXTsKCQkJX19zMzIJZnNfc3RhdGU7CSAKCQkJX191MzIJZnNf
cWJtYXNrWzJdOwkgCgkJCV9fdTMyCWZzX3FmbWFza1syXTsJIAoJCX0gZnNfc3VuOwoJCXN0cnVj
dCB7CgkJCV9fczMyCWZzX3NwYXJlY29uWzUzXTsgCgkJCV9fczMyCWZzX3JlY2xhaW07CgkJCV9f
czMyCWZzX3NwYXJlY29uMlsxXTsKCQkJX191MzIJZnNfbnBzZWN0OwkgCgkJCV9fdTMyCWZzX3Fi
bWFza1syXTsJIAoJCQlfX3UzMglmc19xZm1hc2tbMl07CSAKCQl9IGZzX3N1bng4NjsKCQlzdHJ1
Y3QgewoJCQlfX3MzMglmc19zcGFyZWNvbls1MF07IAoJCQlfX3MzMglmc19jb250aWdzdW1zaXpl
OyAKCQkJX19zMzIJZnNfbWF4c3ltbGlua2xlbjsgCgkJCV9fczMyCWZzX2lub2RlZm10OwkgCgkJ
CV9fdTMyCWZzX21heGZpbGVzaXplWzJdOwkgCgkJCV9fdTMyCWZzX3FibWFza1syXTsJIAoJCQlf
X3UzMglmc19xZm1hc2tbMl07CSAKCQkJX19zMzIJZnNfc3RhdGU7CSAKCQl9IGZzXzQ0OwoJfSBm
c191MjsKCV9fczMyCWZzX3Bvc3RibGZvcm1hdDsJIAoJX19zMzIJZnNfbnJwb3M7CQkgCglfX3Mz
Mglmc19wb3N0YmxvZmY7CQkgCglfX3MzMglmc19yb3RibG9mZjsJCSAKCV9fczMyCWZzX21hZ2lj
OwkJIAoJX191OAlmc19zcGFjZVsxXTsJCSAKfTsKIAogCiAKIAogCnN0cnVjdAl1ZnNfY3lsaW5k
ZXJfZ3JvdXAgewoJX191MzIJY2dfbGluazsJCSAKCV9fdTMyCWNnX21hZ2ljOwkJIAoJX191MzIJ
Y2dfdGltZTsJCSAKCV9fdTMyCWNnX2NneDsJCQkgCglfX3UxNgljZ19uY3lsOwkJIAoJX191MTYJ
Y2dfbmlibGs7CQkgCglfX3UzMgljZ19uZGJsazsJCSAKCXN0cnVjdAl1ZnNfY3N1bSBjZ19jczsJ
CSAKCV9fdTMyCWNnX3JvdG9yOwkJIAoJX191MzIJY2dfZnJvdG9yOwkJIAoJX191MzIJY2dfaXJv
dG9yOwkJIAoJX191MzIJY2dfZnJzdW1bKDgxOTIgIC8gMTAyNCApIF07CSAKCV9fdTMyCWNnX2J0
b3RvZmY7CQkgCglfX3UzMgljZ19ib2ZmOwkJIAoJX191MzIJY2dfaXVzZWRvZmY7CQkgCglfX3Uz
MgljZ19mcmVlb2ZmOwkJIAoJX191MzIJY2dfbmV4dGZyZWVvZmY7CQkgCgl1bmlvbiB7CgkJc3Ry
dWN0IHsKCQkJX191MzIJY2dfY2x1c3RlcnN1bW9mZjsJIAoJCQlfX3UzMgljZ19jbHVzdGVyb2Zm
OwkJIAoJCQlfX3UzMgljZ19uY2x1c3RlcmJsa3M7CSAKCQkJX191MzIJY2dfc3BhcmVjb25bMTNd
OwkgCgkJfSBjZ180NDsKCQlfX3UzMgljZ19zcGFyZWNvblsxNl07CSAKCX0gY2dfdTsKCV9fdTgJ
Y2dfc3BhY2VbMV07CQkgCiAKfTsKIApzdHJ1Y3QgdWZzX2lub2RlIHsKCV9fdTE2CXVpX21vZGU7
CQkgCglfX3UxNgl1aV9ubGluazsJCSAKCXVuaW9uIHsKCQlzdHJ1Y3QgewoJCQlfX3UxNgl1aV9z
dWlkOwkgCgkJCV9fdTE2CXVpX3NnaWQ7CSAKCQl9IG9sZGlkczsKCQlfX3UzMgl1aV9pbnVtYmVy
OwkJIAoJCV9fdTMyCXVpX2F1dGhvcjsJCSAKCX0gdWlfdTE7CglfX3U2NAl1aV9zaXplOwkJIAoJ
c3RydWN0IHVmc190aW1ldmFsIHVpX2F0aW1lOwkgCglzdHJ1Y3QgdWZzX3RpbWV2YWwgdWlfbXRp
bWU7CSAKCXN0cnVjdCB1ZnNfdGltZXZhbCB1aV9jdGltZTsJIAoJdW5pb24gewoJCXN0cnVjdCB7
CgkJCV9fdTMyCXVpX2RiWzEyIF07IAoJCQlfX3UzMgl1aV9pYlszIF07IAoJCX0gdWlfYWRkcjsK
CQlfX3U4CXVpX3N5bWxpbmtbNCooMTIgKyAzICldOyAKCX0gdWlfdTI7CglfX3UzMgl1aV9mbGFn
czsJCSAKCV9fdTMyCXVpX2Jsb2NrczsJCSAKCV9fdTMyCXVpX2dlbjsJCQkgCgl1bmlvbiB7CgkJ
c3RydWN0IHsKCQkJX191MzIJdWlfc2hhZG93OwkgCgkJCV9fdTMyCXVpX3VpZDsJCSAKCQkJX191
MzIJdWlfZ2lkOwkJIAoJCQlfX3UzMgl1aV9vZWZ0ZmxhZzsJIAoJCX0gdWlfc3VuOwoJCXN0cnVj
dCB7CgkJCV9fdTMyCXVpX3VpZDsJCSAKCQkJX191MzIJdWlfZ2lkOwkJIAoJCQlfX3MzMgl1aV9z
cGFyZVsyXTsJIAoJCX0gdWlfNDQ7CgkJc3RydWN0IHsKCQkJX191MzIJdWlfdWlkOwkJIAoJCQlf
X3UzMgl1aV9naWQ7CQkgCgkJCV9fdTE2CXVpX21vZGVoOwkgCgkJCV9fdTE2CXVpX3NwYXJlOwkg
CgkJCV9fdTMyCXVpX3RyYW5zOwkgCgkJfSB1aV9odXJkOwoJfSB1aV91MzsKfTsKIAogCiAKIApl
eHRlcm4gaW50IHVmc19wZXJtaXNzaW9uIChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKIApleHRlcm4g
dm9pZCB1ZnNfZnJlZV9mcmFnbWVudHMgKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCwgdW5zaWdu
ZWQpOwpleHRlcm4gdm9pZCB1ZnNfZnJlZV9ibG9ja3MgKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25l
ZCwgdW5zaWduZWQpOwpleHRlcm4gdW5zaWduZWQgdWZzX25ld19mcmFnbWVudHMgKHN0cnVjdCBp
bm9kZSAqLCB1MzIgKiwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgaW50ICopOwogCmV4
dGVybiBzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyAqIHVmc19sb2FkX2N5bGluZGVyIChzdHJ1
Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQpOwpleHRlcm4gdm9pZCB1ZnNfcHV0X2N5bGluZGVy
IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQpOwogCmV4dGVybiBzdHJ1Y3QgaW5vZGVf
b3BlcmF0aW9ucyB1ZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9v
cGVyYXRpb25zIHVmc19kaXJfb3BlcmF0aW9uczsKZXh0ZXJuIGludCB1ZnNfY2hlY2tfZGlyX2Vu
dHJ5IChjb25zdCBjaGFyICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgdWZzX2Rpcl9lbnRyeSAq
LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgdW5zaWduZWQgbG9uZyk7CiAKZXh0ZXJuIHN0cnVjdCBp
bm9kZV9vcGVyYXRpb25zIHVmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CmV4dGVybiBzdHJ1Y3Qg
ZmlsZV9vcGVyYXRpb25zIHVmc19maWxlX29wZXJhdGlvbnM7CiAKZXh0ZXJuIHZvaWQgdWZzX2Zy
ZWVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpleHRlcm4gc3RydWN0IGlub2RlICogdWZz
X25ld19pbm9kZSAoY29uc3Qgc3RydWN0IGlub2RlICosIGludCwgaW50ICopOwogCmV4dGVybiBp
bnQgdWZzX2JtYXAgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpleHRlcm4gdm9pZCB1ZnNfcmVhZF9p
bm9kZSAoc3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCB1ZnNfcHV0X2lub2RlIChzdHJ1Y3Qg
aW5vZGUgKik7CmV4dGVybiB2b2lkIHVmc193cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICopOwpl
eHRlcm4gaW50IHVmc19zeW5jX2lub2RlIChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIHVm
c193cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCB1ZnNfZGVsZXRlX2lu
b2RlIChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiB1ZnNfZ2V0
ZnJhZyAoc3RydWN0IGlub2RlICosIHVuc2lnbmVkLCBpbnQsIGludCAqKTsKZXh0ZXJuIHN0cnVj
dCBidWZmZXJfaGVhZCAqIHVmc19icmVhZCAoc3RydWN0IGlub2RlICosIHVuc2lnbmVkLCBpbnQs
IGludCAqKTsKIApleHRlcm4gc3RydWN0IGRlbnRyeSAqdWZzX2xvb2t1cCAoc3RydWN0IGlub2Rl
ICosIHN0cnVjdCBkZW50cnkgKik7CmV4dGVybiBpbnQgdWZzX21rZGlyKHN0cnVjdCBpbm9kZSAq
LCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CmV4dGVybiBpbnQgdWZzX3JtZGlyIChzdHJ1Y3QgaW5v
ZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJuIGludCB1ZnNfdW5saW5rIChzdHJ1Y3QgaW5v
ZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJuIGludCB1ZnNfY3JlYXRlIChzdHJ1Y3QgaW5v
ZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwpleHRlcm4gaW50IHVmc19yZW5hbWUgKHN0cnVj
dCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5
ICopOwpleHRlcm4gaW50IHVmc19ta25vZCAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkg
KiwgaW50LCBpbnQpOwpleHRlcm4gaW50IHVmc19zeW1saW5rIChzdHJ1Y3QgaW5vZGUgKiwgc3Ry
dWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHVmc19saW5rIChzdHJ1Y3Qg
ZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwogICAgICAgIAogCmV4
dGVybiBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB1ZnNfc3VwZXJfb3BzOwpleHRlcm4gc3RydWN0
IGZpbGVfc3lzdGVtX3R5cGUgdWZzX2ZzX3R5cGU7CmV4dGVybiB2b2lkIHVmc193YXJuaW5nIChz
dHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikgX19h
dHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwpleHRlcm4gdm9pZCB1ZnNfZXJy
b3IgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4u
KSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CmV4dGVybiB2b2lkIHVm
c19wYW5pYyAoc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
LCAuLi4pIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKZXh0ZXJuIGlu
dCBpbml0X3Vmc19mcyh2b2lkKTsKZXh0ZXJuIHZvaWQgdWZzX3dyaXRlX3N1cGVyIChzdHJ1Y3Qg
c3VwZXJfYmxvY2sgKik7CiAKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHVmc19zeW1s
aW5rX2lub2RlX29wZXJhdGlvbnM7CiAKZXh0ZXJuIHZvaWQgdWZzX3RydW5jYXRlIChzdHJ1Y3Qg
aW5vZGUgKik7CiMgMTcgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3Vmc19m
c19zYi5oIiAyCiAKc3RydWN0IHVmc19idWZmZXJfaGVhZCB7Cgl1bnNpZ25lZCBmcmFnbWVudDsJ
CQkgCgl1bnNpZ25lZCBjb3VudDsJCQkJIAoJc3RydWN0IGJ1ZmZlcl9oZWFkICogYmhbKDgxOTIg
IC8gMTAyNCApIF07CSAKfTsKc3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gewoJc3RydWN0IHVm
c19jeWxpbmRlcl9ncm91cCB1Y2c7CglfX3UzMgljX2NneDsJCSAKCV9fdTE2CWNfbmN5bDsJCSAK
CV9fdTE2CWNfbmlibGs7CSAKCV9fdTMyCWNfbmRibGs7CSAKCV9fdTMyCWNfcm90b3I7CSAKCV9f
dTMyCWNfZnJvdG9yOwkgCglfX3UzMgljX2lyb3RvcjsJIAoJX191MzIJY19idG90b2ZmOwkgCglf
X3UzMgljX2JvZmY7CQkgCglfX3UzMgljX2l1c2Vkb2ZmOwkgCglfX3UzMgljX2ZyZWVvZmY7CSAK
CV9fdTMyCWNfbmV4dGZyZWVvZmY7CSAKCV9fdTMyCWNfY2x1c3RlcnN1bW9mZjsgCglfX3UzMglj
X2NsdXN0ZXJvZmY7CSAKCV9fdTMyCWNfbmNsdXN0ZXJibGtzOwkgCn07CQpzdHJ1Y3QgdWZzX3Ni
X3ByaXZhdGVfaW5mbyB7CglzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkIHNfdWJoOyAgCglfX3UzMglz
X3NibGtubzsJIAoJX191MzIJc19jYmxrbm87CSAKCV9fdTMyCXNfaWJsa25vOwkgCglfX3UzMglz
X2RibGtubzsJIAoJX191MzIJc19jZ29mZnNldDsJIAoJX191MzIJc19jZ21hc2s7CSAKCV9fdTMy
CXNfc2l6ZTsJCSAKCV9fdTMyCXNfZHNpemU7CSAKCV9fdTMyCXNfbmNnOwkJIAoJX191MzIJc19i
c2l6ZTsJIAoJX191MzIJc19mc2l6ZTsJIAoJX191MzIJc19mcGI7CQkgCglfX3UzMglzX21pbmZy
ZWU7CSAKCV9fdTMyCXNfYm1hc2s7CSAKCV9fdTMyCXNfZm1hc2s7CSAKCV9fdTMyCXNfYnNoaWZ0
OwkgCglfX3UzMiAgIHNfZnNoaWZ0OwkgCglfX3UzMglzX2ZwYnNoaWZ0OwkgCglfX3UzMglzX2Zz
YnRvZGI7CSAKCV9fdTMyCXNfc2JzaXplOwkgCglfX3UzMiAgIHNfY3NtYXNrOwkgCglfX3UzMglz
X2Nzc2hpZnQ7CSAKCV9fdTMyCXNfbmluZGlyOwkgCglfX3UzMglzX2lub3BiOwkgCglfX3UzMglz
X25zcGY7CQkgCglfX3UzMglzX25wc2VjdDsJIAoJX191MzIJc19pbnRlcmxlYXZlOwkgCglfX3Uz
MglzX3RyYWNrc2tldzsJIAoJX191MzIJc19jc2FkZHI7CSAKCV9fdTMyCXNfY3NzaXplOwkgCglf
X3UzMglzX2Nnc2l6ZTsJIAoJX191MzIJc19udHJhazsJIAoJX191MzIJc19uc2VjdDsJIAoJX191
MzIJc19zcGM7CQkgCglfX3UzMglzX2lwZzsJCSAKCV9fdTMyCXNfZnBnOwkJIAoJX191MzIJc19j
cGM7CQkgCglfX3MzMglzX2NvbnRpZ3N1bXNpemU7IAoJX19zNjQJc19xYm1hc2s7CSAKCV9fczY0
CXNfcWZtYXNrOwkgCglfX3MzMglzX3Bvc3RibGZvcm1hdDsJIAoJX19zMzIJc19ucnBvczsJIAog
ICAgICAgIF9fczMyCXNfcG9zdGJsb2ZmOwkgCglfX3MzMglzX3JvdGJsb2ZmOwkgCglfX3UzMglz
X2ZwYm1hc2s7CSAKCV9fdTMyCXNfYXBiOwkJIAoJX191MzIJc18yYXBiOwkJIAoJX191MzIJc18z
YXBiOwkJIAoJX191MzIJc19hcGJtYXNrOwkgCglfX3UzMglzX2FwYnNoaWZ0OwkgCglfX3UzMglz
XzJhcGJzaGlmdDsJIAoJX191MzIJc18zYXBic2hpZnQ7CSAKCV9fdTMyCXNfbnNwZnNoaWZ0Owkg
CglfX3UzMglzX25zcGI7CQkgCglfX3UzMglzX2lub3BmOwkgCglfX3UzMglzX3NiYmFzZTsJIAoJ
X191MzIJc19icGY7CQkgCglfX3UzMglzX2JwZnNoaWZ0OwkgCglfX3UzMglzX2JwZm1hc2s7CSAK
fTsKc3RydWN0IHVmc19zYl9pbmZvIHsKCXN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvICogc191
c3BpOwkKCXN0cnVjdCB1ZnNfY3N1bQkqIHNfY3NwWzMxIF07Cgl1bnNpZ25lZCBzX3N3YWI7Cgl1
bnNpZ25lZCBzX2ZsYWdzOwoJc3RydWN0IGJ1ZmZlcl9oZWFkICoqIHNfdWNnOwoJc3RydWN0IHVm
c19jZ19wcml2YXRlX2luZm8gKiBzX3VjcGlbOCBdOyAKCXVuc2lnbmVkIHNfY2dub1s4IF07Cgl1
bnNpZ25lZCBzaG9ydCBzX2NnX2xvYWRlZDsKCXVuc2lnbmVkIHNfbW91bnRfb3B0Owp9OwogCnN0
cnVjdCB1ZnNfc3VwZXJfYmxvY2tfZmlyc3QgewoJX191MzIJZnNfbGluazsKCV9fdTMyCWZzX3Js
aW5rOwoJX191MzIJZnNfc2Jsa25vOwoJX191MzIJZnNfY2Jsa25vOwoJX191MzIJZnNfaWJsa25v
OwoJX191MzIJZnNfZGJsa25vOwoJX191MzIJZnNfY2dvZmZzZXQ7CglfX3UzMglmc19jZ21hc2s7
CglfX3UzMglmc190aW1lOwoJX191MzIJZnNfc2l6ZTsKCV9fdTMyCWZzX2RzaXplOwoJX191MzIJ
ZnNfbmNnOwoJX191MzIJZnNfYnNpemU7CglfX3UzMglmc19mc2l6ZTsKCV9fdTMyCWZzX2ZyYWc7
CglfX3UzMglmc19taW5mcmVlOwoJX191MzIJZnNfcm90ZGVsYXk7CglfX3UzMglmc19ycHM7Cglf
X3UzMglmc19ibWFzazsKCV9fdTMyCWZzX2ZtYXNrOwoJX191MzIJZnNfYnNoaWZ0OwoJX191MzIJ
ZnNfZnNoaWZ0OwoJX191MzIJZnNfbWF4Y29udGlnOwoJX191MzIJZnNfbWF4YnBnOwoJX191MzIJ
ZnNfZnJhZ3NoaWZ0OwoJX191MzIJZnNfZnNidG9kYjsKCV9fdTMyCWZzX3Nic2l6ZTsKCV9fdTMy
CWZzX2NzbWFzazsKCV9fdTMyCWZzX2Nzc2hpZnQ7CglfX3UzMglmc19uaW5kaXI7CglfX3UzMglm
c19pbm9wYjsKCV9fdTMyCWZzX25zcGY7CglfX3UzMglmc19vcHRpbTsKCXVuaW9uIHsKCQlzdHJ1
Y3QgewoJCQlfX3UzMglmc19ucHNlY3Q7CgkJfSBmc19zdW47CgkJc3RydWN0IHsKCQkJX19zMzIJ
ZnNfc3RhdGU7CgkJfSBmc19zdW54ODY7Cgl9IGZzX3UxOwoJX191MzIJZnNfaW50ZXJsZWF2ZTsK
CV9fdTMyCWZzX3RyYWNrc2tldzsKCV9fdTMyCWZzX2lkWzJdOwoJX191MzIJZnNfY3NhZGRyOwoJ
X191MzIJZnNfY3NzaXplOwoJX191MzIJZnNfY2dzaXplOwoJX191MzIJZnNfbnRyYWs7CglfX3Uz
Mglmc19uc2VjdDsKCV9fdTMyCWZzX3NwYzsKCV9fdTMyCWZzX25jeWw7CglfX3UzMglmc19jcGc7
CglfX3UzMglmc19pcGc7CglfX3UzMglmc19mcGc7CglzdHJ1Y3QgdWZzX2NzdW0gZnNfY3N0b3Rh
bDsKCV9fczgJZnNfZm1vZDsKCV9fczgJZnNfY2xlYW47CglfX3M4CWZzX3Jvbmx5OwoJX19zOAlm
c19mbGFnczsKCV9fczgJZnNfZnNtbnRbNTEyICAtIDIxMl07Cn07CnN0cnVjdCB1ZnNfc3VwZXJf
YmxvY2tfc2Vjb25kIHsKCV9fczgJZnNfZnNtbnRbMjEyXTsKCV9fdTMyCWZzX2Nncm90b3I7Cglf
X3UzMglmc19jc3BbMzEgXTsKCV9fdTMyCWZzX21heGNsdXN0ZXI7CglfX3UzMglmc19jcGM7Cglf
X3UxNglmc19vcG9zdGJsWzgyXTsKfTsJCnN0cnVjdCB1ZnNfc3VwZXJfYmxvY2tfdGhpcmQgewoJ
X191MTYJZnNfb3Bvc3RibFs0Nl07Cgl1bmlvbiB7CgkJc3RydWN0IHsKCQkJX19zMzIJZnNfc3Bh
cmVjb25bNTNdOyAKCQkJX19zMzIJZnNfcmVjbGFpbTsKCQkJX19zMzIJZnNfc3BhcmVjb24yWzFd
OwoJCQlfX3MzMglmc19zdGF0ZTsJIAoJCQlfX3UzMglmc19xYm1hc2tbMl07CSAKCQkJX191MzIJ
ZnNfcWZtYXNrWzJdOwkgCgkJfSBmc19zdW47CgkJc3RydWN0IHsKCQkJX19zMzIJZnNfc3BhcmVj
b25bNTNdOyAKCQkJX19zMzIJZnNfcmVjbGFpbTsKCQkJX19zMzIJZnNfc3BhcmVjb24yWzFdOwoJ
CQlfX3UzMglmc19ucHNlY3Q7CSAKCQkJX191MzIJZnNfcWJtYXNrWzJdOwkgCgkJCV9fdTMyCWZz
X3FmbWFza1syXTsJIAoJCX0gZnNfc3VueDg2OwoJCXN0cnVjdCB7CgkJCV9fczMyCWZzX3NwYXJl
Y29uWzUwXTsgCgkJCV9fczMyCWZzX2NvbnRpZ3N1bXNpemU7IAoJCQlfX3MzMglmc19tYXhzeW1s
aW5rbGVuOyAKCQkJX19zMzIJZnNfaW5vZGVmbXQ7CSAKCQkJX191MzIJZnNfbWF4ZmlsZXNpemVb
Ml07CSAKCQkJX191MzIJZnNfcWJtYXNrWzJdOwkgCgkJCV9fdTMyCWZzX3FmbWFza1syXTsJIAoJ
CQlfX3MzMglmc19zdGF0ZTsJIAoJCX0gZnNfNDQ7Cgl9IGZzX3UyOwoJX19zMzIJZnNfcG9zdGJs
Zm9ybWF0OwoJX19zMzIJZnNfbnJwb3M7CglfX3MzMglmc19wb3N0YmxvZmY7CglfX3MzMglmc19y
b3RibG9mZjsKCV9fczMyCWZzX21hZ2ljOwoJX191OAlmc19zcGFjZVsxXTsKfTsKIyA1MDYgIi9o
b21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvaG9tZS9qdzUv
dG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9lZnNfZnNfc2IuaCIgMQogCiAKIAogCnN0cnVjdCBl
ZnNfc3VwZXIgewoJaW50MzJfdAkJZnNfc2l6ZTsgICAgICAgICAKCWludDMyX3QJCWZzX2ZpcnN0
Y2c7ICAgICAgCglpbnQzMl90CQlmc19jZ2ZzaXplOyAgICAgIAoJc2hvcnQJCWZzX2NnaXNpemU7
ICAgICAgCglzaG9ydAkJZnNfc2VjdG9yczsgICAgICAKCXNob3J0CQlmc19oZWFkczsgICAgICAg
IAoJc2hvcnQJCWZzX25jZzsgICAgICAgICAgCglzaG9ydAkJZnNfZGlydHk7ICAgICAgICAKCXNo
b3J0CQlmc19maWxsZXI7CSAKCWludDMyX3QJCWZzX3RpbWU7ICAgICAgICAgCglpbnQzMl90CQlm
c19tYWdpYzsgICAgICAgIAoJY2hhcgkJZnNfZm5hbWVbNl07ICAgICAKCWNoYXIJCWZzX2ZwYWNr
WzZdOyAgICAgCglpbnQzMl90CQlmc19ibXNpemU7ICAgICAgIAoJaW50MzJfdAkJZnNfdGZyZWU7
ICAgICAgICAKCWludDMyX3QJCWZzX3Rpbm9kZTsgICAgICAgCglpbnQzMl90CQlmc19ibWJsb2Nr
OyAgICAgIAoJaW50MzJfdAkJZnNfcmVwbHNiOyAgICAgICAKCWludDMyX3QJCWZzX2xhc3RpYWxs
b2M7ICAgCgljaGFyCQlmc19zcGFyZVsyMF07ICAgIAoJaW50MzJfdAkJZnNfY2hlY2tzdW07ICAg
ICAKfTsKIApzdHJ1Y3QgZWZzX3NiX2luZm8gewoJaW50MzJfdAlmc19tYWdpYzsJIAoJaW50MzJf
dAlmc19zdGFydDsJIAoJaW50MzJfdAlmaXJzdF9ibG9jazsJIAoJaW50MzJfdAl0b3RhbF9ibG9j
a3M7CSAKCWludDMyX3QJZ3JvdXBfc2l6ZTsJICAKCWludDMyX3QJZGF0YV9mcmVlOwkgCglpbnQz
Ml90CWlub2RlX2ZyZWU7CSAKCXNob3J0CWlub2RlX2Jsb2NrczsJIAoJc2hvcnQJdG90YWxfZ3Jv
dXBzOwkgCn07CiMgNTA3ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9mcy5o
IiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvcm9tZnNfZnNfc2Iu
aCIgMQogCnN0cnVjdCByb21mc19zYl9pbmZvIHsKCXVuc2lnbmVkIGxvbmcgc19tYXhzaXplOwp9
OwojIDUwOCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEg
Ii9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3NtYl9mc19zYi5oIiAxCiAKIyAx
ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9zbWIuaCIgMQogCmVudW0gc21i
X3Byb3RvY29sIHsgCglTTUJfUFJPVE9DT0xfTk9ORSwgCglTTUJfUFJPVE9DT0xfQ09SRSwgCglT
TUJfUFJPVE9DT0xfQ09SRVBMVVMsIAoJU01CX1BST1RPQ09MX0xBTk1BTjEsIAoJU01CX1BST1RP
Q09MX0xBTk1BTjIsIAoJU01CX1BST1RPQ09MX05UMSAKfTsKZW51bSBzbWJfY2FzZV9obmRsIHsK
CVNNQl9DQVNFX0RFRkFVTFQsCglTTUJfQ0FTRV9MT1dFUiwKCVNNQl9DQVNFX1VQUEVSCn07CnN0
cnVjdCBzbWJfZHNrYXR0ciB7CiAgICAgICAgX191MTYgdG90YWw7CiAgICAgICAgX191MTYgYWxs
b2NibG9ja3M7CiAgICAgICAgX191MTYgYmxvY2tzaXplOwogICAgICAgIF9fdTE2IGZyZWU7Cn07
CnN0cnVjdCBzbWJfY29ubl9vcHQgewogICAgICAgICAKCXVuc2lnbmVkIGludCBmZDsKCWVudW0g
c21iX3Byb3RvY29sIHByb3RvY29sOwoJZW51bSBzbWJfY2FzZV9obmRsIGNhc2VfaGFuZGxpbmc7
CgkgCglfX3UzMiAgICAgICAgICAgICAgbWF4X3htaXQ7CglfX3UxNiAgICAgICAgICAgICAgc2Vy
dmVyX3VpZDsKCV9fdTE2ICAgICAgICAgICAgICB0aWQ7CiAgICAgICAgIAogICAgICAgIF9fdTE2
ICAgICAgICAgICAgICBzZWNtb2RlOwogICAgICAgIF9fdTE2ICAgICAgICAgICAgICBtYXhtdXg7
CiAgICAgICAgX191MTYgICAgICAgICAgICAgIG1heHZjczsKICAgICAgICBfX3UxNiAgICAgICAg
ICAgICAgcmF3bW9kZTsKICAgICAgICBfX3UzMiAgICAgICAgICAgICAgc2Vzc2tleTsKCSAKCV9f
dTMyICAgICAgICAgICAgICBtYXhyYXc7CglfX3UzMiAgICAgICAgICAgICAgY2FwYWJpbGl0aWVz
OwoJX19zMTYgICAgICAgICAgICAgIHNlcnZlcnpvbmU7Cn07CiAKc3RydWN0IHNtYl9mYXR0ciB7
CglfX3UxNiBhdHRyOwoJdW5zaWduZWQgbG9uZwlmX2lubzsKCXVtb2RlX3QJCWZfbW9kZTsKCW5s
aW5rX3QJCWZfbmxpbms7Cgl1aWRfdAkJZl91aWQ7CglnaWRfdAkJZl9naWQ7CglrZGV2X3QJCWZf
cmRldjsKCW9mZl90CQlmX3NpemU7Cgl0aW1lX3QJCWZfYXRpbWU7Cgl0aW1lX3QJCWZfbXRpbWU7
Cgl0aW1lX3QJCWZfY3RpbWU7Cgl1bnNpZ25lZCBsb25nCWZfYmxrc2l6ZTsKCXVuc2lnbmVkIGxv
bmcJZl9ibG9ja3M7Cn07CnN0cnVjdCBzbWJfZGlyZW50IHsKCXN0cnVjdCBzbWJfZmF0dHIgYXR0
cjsKCWludCBmX3BvczsKCWludCBsZW47CglfX3U4IG5hbWVbMjU1IF07Cn07CmVudW0gc21iX2Nv
bm5fc3RhdGUgewogICAgICAgIENPTk5fVkFMSUQsICAgICAgICAgICAgICAKICAgICAgICBDT05O
X0lOVkFMSUQsICAgICAgICAgICAgCiAgICAgICAgQ09OTl9SRVRSSUVEICAgICAgICAgICAgIAp9
OwogCiAKIyAxNSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvc21iX2ZzX3Ni
LmgiIDIKIApzdHJ1Y3Qgc21iX3NiX2luZm8gewogICAgICAgIGVudW0gc21iX2Nvbm5fc3RhdGUg
c3RhdGU7CglzdHJ1Y3QgZmlsZSAqIHNvY2tfZmlsZTsKICAgICAgICBzdHJ1Y3Qgc21iX21vdW50
X2RhdGEgKm1udDsKICAgICAgICB1bnNpZ25lZCBjaGFyICp0ZW1wX2J1ZjsKCSAKCXVuc2lnbmVk
IGludCBnZW5lcmF0aW9uOwoJcGlkX3QgY29ubl9waWQ7CglzdHJ1Y3Qgc21iX2Nvbm5fb3B0IG9w
dDsKCXN0cnVjdCBzZW1hcGhvcmUgc2VtOwoJc3RydWN0IHdhaXRfcXVldWUgKiB3YWl0OwoJX191
MzIgICAgICAgICAgICAgIHBhY2tldF9zaXplOwoJdW5zaWduZWQgY2hhciAqICAgIHBhY2tldDsK
ICAgICAgICB1bnNpZ25lZCBzaG9ydCAgICAgcmNsczsgIAogICAgICAgIHVuc2lnbmVkIHNob3J0
ICAgICBlcnI7CiAgICAgICAgIAogICAgICAgIHZvaWQgKmRhdGFfcmVhZHk7Cn07CiMgNTA5ICIv
aG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL2hvbWUvanc1
L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvaGZzX2ZzX3NiLmgiIDEKIAogCnN0cnVjdCBoZnNf
bmFtZTsKdHlwZWRlZiBpbnQgKCpoZnNfbmFtZWluX2ZuKSAoY2hhciAqLCBjb25zdCBzdHJ1Y3Qg
aGZzX25hbWUgKik7CnR5cGVkZWYgdm9pZCAoKmhmc19uYW1lb3V0X2ZuKSAoc3RydWN0IGhmc19u
YW1lICosIGNvbnN0IGNoYXIgKiwgaW50KTsKdHlwZWRlZiB2b2lkICgqaGZzX2lmaWxsX2ZuKSAo
c3RydWN0IGlub2RlICosIGlub190LCBjb25zdCBpbnQpOwogCnN0cnVjdCBoZnNfc2JfaW5mbyB7
CglpbnQJCQltYWdpYzsJCSAKCXN0cnVjdCBoZnNfbWRiCQkqc19tZGI7CQkgCglpbnQJCQlzX3F1
aWV0OwkgCglpbnQJCQlzX2xvd2VyY2FzZTsJIAoJaW50CQkJc19hZnBkOwkJIAoJaW50ICAgICAg
ICAgICAgICAgICAgICAgc192ZXJzaW9uOyAgICAgICAKCWhmc19uYW1laW5fZm4JCXNfbmFtZWlu
OwkgCgloZnNfbmFtZW91dF9mbgkJc19uYW1lb3V0OwkgCgloZnNfaWZpbGxfZm4JCXNfaWZpbGw7
CSAKCWNvbnN0IHN0cnVjdCBoZnNfbmFtZQkqc19yZXNlcnZlZDE7CSAKCWNvbnN0IHN0cnVjdCBo
ZnNfbmFtZQkqc19yZXNlcnZlZDI7CSAKCV9fdTMyCQkJc190eXBlOwkJIAoJX191MzIJCQlzX2Ny
ZWF0b3I7CSAKCXVtb2RlX3QJCQlzX3VtYXNrOwkgCgl1aWRfdAkJCXNfdWlkOwkJIAoJZ2lkX3QJ
CQlzX2dpZDsJCSAKCWNoYXIJCQlzX2NvbnY7CQkgCn07CiMgNTEwICIvaG9tZS9qdzUvdG1wL2xp
bnV4MjIvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2lu
Y2x1ZGUvbGludXgvYWRmc19mc19zYi5oIiAxCiAKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIv
aW5jbHVkZS9saW51eC9hZGZzX2ZzLmgiIDEKIAogCnN0cnVjdCBhZGZzX2Rpc2NyZWNvcmQgewog
ICAgdW5zaWduZWQgY2hhciAgbG9nMnNlY3NpemU7CiAgICB1bnNpZ25lZCBjaGFyICBzZWNzcGVy
dHJhY2s7CiAgICB1bnNpZ25lZCBjaGFyICBoZWFkczsKICAgIHVuc2lnbmVkIGNoYXIgIGRlbnNp
dHk7CiAgICB1bnNpZ25lZCBjaGFyICBpZGxlbjsKICAgIHVuc2lnbmVkIGNoYXIgIGxvZzJicG1i
OwogICAgdW5zaWduZWQgY2hhciAgc2tldzsKICAgIHVuc2lnbmVkIGNoYXIgIGJvb3RvcHRpb247
CiAgICB1bnNpZ25lZCBjaGFyICBsb3dzZWN0b3I7CiAgICB1bnNpZ25lZCBjaGFyICBuem9uZXM7
CiAgICB1bnNpZ25lZCBzaG9ydCB6b25lX3NwYXJlOwogICAgdW5zaWduZWQgbG9uZyAgcm9vdDsK
ICAgIHVuc2lnbmVkIGxvbmcgIGRpc2Nfc2l6ZTsKICAgIHVuc2lnbmVkIHNob3J0IGRpc2NfaWQ7
CiAgICB1bnNpZ25lZCBjaGFyICBkaXNjX25hbWVbMTBdOwogICAgdW5zaWduZWQgbG9uZyAgZGlz
Y190eXBlOwogICAgdW5zaWduZWQgbG9uZyAgZGlzY19zaXplX2hpZ2g7CiAgICB1bnNpZ25lZCBj
aGFyICBsb2cyc2hhcmVzaXplOjQ7CiAgICB1bnNpZ25lZCBjaGFyICB1bnVzZWQ6NDsKICAgIHVu
c2lnbmVkIGNoYXIgIGJpZ19mbGFnOjE7Cn07CiAKc3RydWN0IGFkZnNfZGlyaGVhZGVyIHsKCXVu
c2lnbmVkIGNoYXIgc3RhcnRtYXNzZXE7Cgl1bnNpZ25lZCBjaGFyIHN0YXJ0bmFtZVs0XTsKfTsK
IApzdHJ1Y3QgYWRmc19kaXJlbnRyeSB7CgljaGFyIGRpcm9ibmFtZVsxMF07CglfX3U4IGRpcmxv
YWRbNF07CglfX3U4IGRpcmV4ZWNbNF07CglfX3U4IGRpcmxlbls0XTsKCV9fdTggZGlyaW5kZGlz
Y2FkZFszXTsKCV9fdTggbmV3ZGlyYXR0czsKfTsKc3RydWN0IGFkZnNfaWRpcl9lbnRyeSB7Cglf
X3UzMgkJaW5vZGVfbm87CQkJIAoJX191MzIJCWZpbGVfaWQ7CQkJIAoJX191MzIJCW5hbWVfbGVu
OwkJCSAKCV9fdTMyCQlzaXplOwkJCQkgCglfX3UzMgkJbXRpbWU7CQkJCSAKCV9fdTMyCQlmaWxl
dHlwZTsJCQkgCglfX3U4CQltb2RlOwkJCQkgCgljaGFyCQluYW1lWzI1NSBdOwkgCn07CiAKdW5p
b24gYWRmc19kaXJ0YWlsIHsKCXN0cnVjdCB7CgkJdW5zaWduZWQgY2hhciBkaXJsYXN0bWFzazsK
CQljaGFyIGRpcm5hbWVbMTBdOwoJCXVuc2lnbmVkIGNoYXIgZGlycGFyZW50WzNdOwoJCWNoYXIg
ZGlydGl0bGVbMTldOwoJCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMTRdOwoJCXVuc2lnbmVkIGNo
YXIgZW5kbWFzc2VxOwoJCXVuc2lnbmVkIGNoYXIgZW5kbmFtZVs0XTsKCQl1bnNpZ25lZCBjaGFy
IGRpcmNoZWNrYnl0ZTsKCX0gb2xkOwoJc3RydWN0IHsKCQl1bnNpZ25lZCBjaGFyIGRpcmxhc3Rt
YXNrOwoJCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMl07CgkJdW5zaWduZWQgY2hhciBkaXJwYXJl
bnRbM107CgkJY2hhciBkaXJ0aXRsZVsxOV07CgkJY2hhciBkaXJuYW1lWzEwXTsKCQl1bnNpZ25l
ZCBjaGFyIGVuZG1hc3NlcTsKCQl1bnNpZ25lZCBjaGFyIGVuZG5hbWVbNF07CgkJdW5zaWduZWQg
Y2hhciBkaXJjaGVja2J5dGU7Cgl9IG5ldzsKfTsKIApleHRlcm4gaW5saW5lIGludCBhZGZzX2No
ZWNrYmJsayh1bnNpZ25lZCBjaGFyICpwdHIpCnsKCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOwoJ
dW5zaWduZWQgY2hhciAqcCA9IHB0ciArIDUxMTsKCWRvIHsKCSAgICAgICAgcmVzdWx0ID0gKHJl
c3VsdCAmIDB4ZmYpICsgKHJlc3VsdCA+PiA4KTsKICAgICAgICAJcmVzdWx0ID0gcmVzdWx0ICsg
Ki0tcDsKCX0gd2hpbGUgKHAgIT0gcHRyKTsKCXJldHVybiAocmVzdWx0ICYgMHhmZikgIT0gcHRy
WzUxMV07Cn0KIApleHRlcm4gdW5zaWduZWQgaW50IGFkZnNfdmFsICh1bnNpZ25lZCBjaGFyICpw
LCBpbnQgbGVuKTsKZXh0ZXJuIGludCBhZGZzX2Rpcl9yZWFkX3BhcmVudCAoc3RydWN0IGlub2Rl
ICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhwKTsKZXh0ZXJuIGludCBhZGZzX2Rpcl9y
ZWFkIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHApOwpleHRl
cm4gaW50IGFkZnNfZGlyX2NoZWNrIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVy
X2hlYWQgKipiaHAsCgkJCSAgIGludCBidWZmZXJzLCB1bmlvbiBhZGZzX2RpcnRhaWwgKmR0cCk7
CmV4dGVybiB2b2lkIGFkZnNfZGlyX2ZyZWUgKHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocCwgaW50
IGJ1ZmZlcnMpOwpleHRlcm4gaW50IGFkZnNfZGlyX2dldCAoc3RydWN0IHN1cGVyX2Jsb2NrICpz
Yiwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhwLAoJCQkgaW50IGJ1ZmZlcnMsIGludCBwb3MsIHVu
c2lnbmVkIGxvbmcgcGFyZW50X29iamVjdF9pZCwKCQkJIHN0cnVjdCBhZGZzX2lkaXJfZW50cnkg
KmlkZSk7CmV4dGVybiBpbnQgYWRmc19kaXJfZmluZF9lbnRyeSAoc3RydWN0IHN1cGVyX2Jsb2Nr
ICpzYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhwLAoJCQkJaW50IGJ1ZmZlcnMsIHVuc2lnbmVk
IGludCBpbmRleCwKCQkJCXN0cnVjdCBhZGZzX2lkaXJfZW50cnkgKmlkZSk7CiAKZXh0ZXJuIGlu
dCBhZGZzX2lub2RlX3ZhbGlkYXRlIChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgYWRmc19pbm9kZV9nZW5lcmF0ZSAodW5zaWduZWQgbG9uZyBwYXJlbnRfaWQsIGlu
dCBkaXJpZHgpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBhZGZzX2lub2RlX29iamlkIChzdHJ1Y3Qg
aW5vZGUgKmlub2RlKTsKZXh0ZXJuIHVuc2lnbmVkIGludCBhZGZzX3BhcmVudF9ibWFwIChzdHJ1
Y3QgaW5vZGUgKmlub2RlLCBpbnQgYmxvY2spOwpleHRlcm4gaW50IGFkZnNfYm1hcCAoc3RydWN0
IGlub2RlICppbm9kZSwgaW50IGJsb2NrKTsKZXh0ZXJuIHZvaWQgYWRmc19yZWFkX2lub2RlIChz
dHJ1Y3QgaW5vZGUgKmlub2RlKTsKIApleHRlcm4gaW50IGFkZnNfbWFwX2xvb2t1cCAoc3RydWN0
IHN1cGVyX2Jsb2NrICpzYiwgaW50IGZyYWdfaWQsIGludCBvZmZzZXQpOwogCmV4dGVybiBzdHJ1
Y3QgZGVudHJ5ICphZGZzX2xvb2t1cCAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkg
KmRlbnRyeSk7CiAKZXh0ZXJuIGludCBpbml0X2FkZnNfZnMgKHZvaWQpOwpleHRlcm4gdm9pZCBh
ZGZzX2Vycm9yIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICosIC4uLik7CiAKIApleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWRmc19kaXJfaW5v
ZGVfb3BlcmF0aW9uczsKIApleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWRmc19maWxl
X2lub2RlX29wZXJhdGlvbnM7CiMgMTAgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xp
bnV4L2FkZnNfZnNfc2IuaCIgMgogCnN0cnVjdCBhZGZzX3NiX2luZm8gewoJc3RydWN0IGJ1ZmZl
cl9oZWFkICpzX3NiaDsJIAoJc3RydWN0IGFkZnNfZGlzY3JlY29yZCAqc19kcjsJIAoJdWlkX3QJ
c191aWQ7CQkJIAoJZ2lkX3QJc19naWQ7CQkJIAoJaW50CXNfb3duZXJfbWFzazsJCSAKCWludAlz
X290aGVyX21hc2s7CQkgCglfX3UxNglzX3pvbmVfc2l6ZTsJCSAKCV9fdTE2CXNfaWRzX3Blcl96
b25lOwkJIAoJX191MzIJc19pZGxlbjsJCSAKCV9fdTMyCXNfbWFwX3NpemU7CQkgCglfX3UzMglz
X3pvbmVzaXplOwkJIAoJX191MzIJc19tYXBfYmxvY2s7CQkgCglzdHJ1Y3QgYnVmZmVyX2hlYWQg
KipzX21hcDsJIAoJX191MzIJc19yb290OwkJCSAKCV9fczgJc19tYXAyYmxrOwkJIAp9OwojIDUx
MSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi9ob21l
L2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3FueDRfZnNfc2IuaCIgMQogCiAKc3RydWN0
IHFueDRfc2JfaW5mbyB7CglzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNiX2J1ZjsJIAoJc3RydWN0IHFu
eDRfc3VwZXJfYmxvY2sgKnNiOwkgCgl1bnNpZ25lZCBpbnQgVmVyc2lvbjsJIAoJc3RydWN0IHFu
eDRfaW5vZGVfZW50cnkgKkJpdE1hcDsJIAp9OwojIDUxMiAiL2hvbWUvanc1L3RtcC9saW51eDIy
L2luY2x1ZGUvbGludXgvZnMuaCIgMgpleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBzdXBlcl9ibG9j
a3M7CnN0cnVjdCBzdXBlcl9ibG9jayB7CglzdHJ1Y3QgbGlzdF9oZWFkCXNfbGlzdDsJCSAKCWtk
ZXZfdAkJCXNfZGV2OwoJdW5zaWduZWQgbG9uZwkJc19ibG9ja3NpemU7Cgl1bnNpZ25lZCBjaGFy
CQlzX2Jsb2Nrc2l6ZV9iaXRzOwoJdW5zaWduZWQgY2hhcgkJc19sb2NrOwoJdW5zaWduZWQgY2hh
cgkJc19yZF9vbmx5OwoJdW5zaWduZWQgY2hhcgkJc19kaXJ0OwoJc3RydWN0IGZpbGVfc3lzdGVt
X3R5cGUJKnNfdHlwZTsKCXN0cnVjdCBzdXBlcl9vcGVyYXRpb25zCSpzX29wOwoJc3RydWN0IGRx
dW90X29wZXJhdGlvbnMJKmRxX29wOwoJdW5zaWduZWQgbG9uZwkJc19mbGFnczsKCXVuc2lnbmVk
IGxvbmcJCXNfbWFnaWM7Cgl1bnNpZ25lZCBsb25nCQlzX3RpbWU7CglzdHJ1Y3QgZGVudHJ5CQkq
c19yb290OwoJc3RydWN0IHdhaXRfcXVldWUJKnNfd2FpdDsKCXN0cnVjdCBpbm9kZQkJKnNfaWJh
c2tldDsKCXNob3J0IGludAkJc19pYmFza2V0X2NvdW50OwoJc2hvcnQgaW50CQlzX2liYXNrZXRf
bWF4OwoJc3RydWN0IGxpc3RfaGVhZAlzX2RpcnR5OwkgCgl1bmlvbiB7CgkJc3RydWN0IG1pbml4
X3NiX2luZm8JbWluaXhfc2I7CgkJc3RydWN0IGV4dDJfc2JfaW5mbwlleHQyX3NiOwoJCXN0cnVj
dCBocGZzX3NiX2luZm8JaHBmc19zYjsKCQlzdHJ1Y3QgbnRmc19zYl9pbmZvICAgICBudGZzX3Ni
OwoJCXN0cnVjdCBtc2Rvc19zYl9pbmZvCW1zZG9zX3NiOwoJCXN0cnVjdCBpc29mc19zYl9pbmZv
CWlzb2ZzX3NiOwoJCXN0cnVjdCBuZnNfc2JfaW5mbwluZnNfc2I7CgkJc3RydWN0IHN5c3Zfc2Jf
aW5mbwlzeXN2X3NiOwoJCXN0cnVjdCBhZmZzX3NiX2luZm8JYWZmc19zYjsKCQlzdHJ1Y3QgdWZz
X3NiX2luZm8JdWZzX3NiOwoJCXN0cnVjdCBlZnNfc2JfaW5mbwllZnNfc2I7CgkJc3RydWN0IHJv
bWZzX3NiX2luZm8Jcm9tZnNfc2I7CgkJc3RydWN0IHNtYl9zYl9pbmZvCXNtYmZzX3NiOwoJCXN0
cnVjdCBoZnNfc2JfaW5mbwloZnNfc2I7CgkJc3RydWN0IGFkZnNfc2JfaW5mbwlhZGZzX3NiOwoJ
CXN0cnVjdCBxbng0X3NiX2luZm8JcW54NF9zYjsJICAgCgkJdm9pZAkJCSpnZW5lcmljX3NicDsK
CX0gdTsKCSAKCXN0cnVjdCBzZW1hcGhvcmUgc192ZnNfcmVuYW1lX3NlbTsJIAp9OwogCmV4dGVy
biBpbnQgdmZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwpleHRlcm4g
aW50IHZmc191bmxpbmsoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CmV4dGVybiBp
bnQgdmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5v
ZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKIAp0eXBlZGVmIGludCAoKmZpbGxkaXJfdCkodm9pZCAq
LCBjb25zdCBjaGFyICosIGludCwgb2ZmX3QsIGlub190KTsKCQpzdHJ1Y3QgZmlsZV9vcGVyYXRp
b25zIHsKCWxvZmZfdCAoKmxsc2VlaykgKHN0cnVjdCBmaWxlICosIGxvZmZfdCwgaW50KTsKCXNz
aXplX3QgKCpyZWFkKSAoc3RydWN0IGZpbGUgKiwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsK
CXNzaXplX3QgKCp3cml0ZSkgKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBs
b2ZmX3QgKik7CglpbnQgKCpyZWFkZGlyKSAoc3RydWN0IGZpbGUgKiwgdm9pZCAqLCBmaWxsZGly
X3QpOwoJdW5zaWduZWQgaW50ICgqcG9sbCkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwb2xsX3Rh
YmxlX3N0cnVjdCAqKTsKCWludCAoKmlvY3RsKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxl
ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CglpbnQgKCptbWFwKSAoc3RydWN0IGZp
bGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwoJaW50ICgqb3BlbikgKHN0cnVjdCBpbm9k
ZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKCWludCAoKmZsdXNoKSAoc3RydWN0IGZpbGUgKik7CglpbnQg
KCpyZWxlYXNlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwoJaW50ICgqZnN5bmMp
IChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwoJaW50ICgqZmFzeW5jKSAoaW50LCBz
dHJ1Y3QgZmlsZSAqLCBpbnQpOwoJaW50ICgqY2hlY2tfbWVkaWFfY2hhbmdlKSAoa2Rldl90IGRl
dik7CglpbnQgKCpyZXZhbGlkYXRlKSAoa2Rldl90IGRldik7CglpbnQgKCpsb2NrKSAoc3RydWN0
IGZpbGUgKiwgaW50LCBzdHJ1Y3QgZmlsZV9sb2NrICopOwp9OwpzdHJ1Y3QgaW5vZGVfb3BlcmF0
aW9ucyB7CglzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICogZGVmYXVsdF9maWxlX29wczsKCWludCAo
KmNyZWF0ZSkgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixpbnQpOwoJc3RydWN0IGRl
bnRyeSAqICgqbG9va3VwKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsKCWludCAo
KmxpbmspIChzdHJ1Y3QgZGVudHJ5ICosc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsK
CWludCAoKnVubGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CglpbnQgKCpz
eW1saW5rKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGNvbnN0IGNoYXIgKik7Cglp
bnQgKCpta2RpcikgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixpbnQpOwoJaW50ICgq
cm1kaXIpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOwoJaW50ICgqbWtub2QpIChz
dHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosaW50LGludCk7CglpbnQgKCpyZW5hbWUpIChz
dHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLAoJCQlzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0
IGRlbnRyeSAqKTsKCWludCAoKnJlYWRsaW5rKSAoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosaW50
KTsKCXN0cnVjdCBkZW50cnkgKiAoKmZvbGxvd19saW5rKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1
Y3QgZGVudHJ5ICosIHVuc2lnbmVkIGludCk7CglpbnQgKCpyZWFkcGFnZSkgKHN0cnVjdCBmaWxl
ICosIHN0cnVjdCBwYWdlICopOwoJaW50ICgqd3JpdGVwYWdlKSAoc3RydWN0IGZpbGUgKiwgc3Ry
dWN0IHBhZ2UgKik7CglpbnQgKCpibWFwKSAoc3RydWN0IGlub2RlICosaW50KTsKCXZvaWQgKCp0
cnVuY2F0ZSkgKHN0cnVjdCBpbm9kZSAqKTsKCWludCAoKnBlcm1pc3Npb24pIChzdHJ1Y3QgaW5v
ZGUgKiwgaW50KTsKCWludCAoKnNtYXApIChzdHJ1Y3QgaW5vZGUgKixpbnQpOwoJaW50ICgqdXBk
YXRlcGFnZSkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcsIHVu
c2lnbmVkIGludCwgaW50KTsKCWludCAoKnJldmFsaWRhdGUpIChzdHJ1Y3QgZGVudHJ5ICopOwp9
OwpzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7Cgl2b2lkICgqcmVhZF9pbm9kZSkgKHN0cnVjdCBp
bm9kZSAqKTsKCXZvaWQgKCp3cml0ZV9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKCXZvaWQgKCpw
dXRfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7Cgl2b2lkICgqZGVsZXRlX2lub2RlKSAoc3RydWN0
IGlub2RlICopOwoJaW50ICgqbm90aWZ5X2NoYW5nZSkgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0
IGlhdHRyICopOwoJdm9pZCAoKnB1dF9zdXBlcikgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKCXZv
aWQgKCp3cml0ZV9zdXBlcikgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKCWludCAoKnN0YXRmcykg
KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qgc3RhdGZzICosIGludCk7CglpbnQgKCpyZW1v
dW50X2ZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCAqLCBjaGFyICopOwoJdm9pZCAoKmNs
ZWFyX2lub2RlKSAoc3RydWN0IGlub2RlICopOwoJdm9pZCAoKnVtb3VudF9iZWdpbikgKHN0cnVj
dCBzdXBlcl9ibG9jayAqKTsKfTsKc3RydWN0IGRxdW90X29wZXJhdGlvbnMgewoJdm9pZCAoKmlu
aXRpYWxpemUpIChzdHJ1Y3QgaW5vZGUgKiwgc2hvcnQpOwoJdm9pZCAoKmRyb3ApIChzdHJ1Y3Qg
aW5vZGUgKik7CglpbnQgKCphbGxvY19ibG9jaykgKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCB1bnNp
Z25lZCBsb25nLCB1aWRfdCwgY2hhcik7CglpbnQgKCphbGxvY19pbm9kZSkgKGNvbnN0IHN0cnVj
dCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nLCB1aWRfdCk7Cgl2b2lkICgqZnJlZV9ibG9jaykgKGNv
bnN0IHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nKTsKCXZvaWQgKCpmcmVlX2lub2RlKSAo
Y29uc3Qgc3RydWN0IGlub2RlICosIHVuc2lnbmVkIGxvbmcpOwoJaW50ICgqdHJhbnNmZXIpIChz
dHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqLCB1aWRfdCk7Cn07CnN0cnVjdCBmaWxlX3N5
c3RlbV90eXBlIHsKCWNvbnN0IGNoYXIgKm5hbWU7CglpbnQgZnNfZmxhZ3M7CglzdHJ1Y3Qgc3Vw
ZXJfYmxvY2sgKigqcmVhZF9zdXBlcikgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICosIGlu
dCk7CglzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqIG5leHQ7Cn07CmV4dGVybiBpbnQgcmVnaXN0
ZXJfZmlsZXN5c3RlbShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqKTsKZXh0ZXJuIGludCB1bnJl
Z2lzdGVyX2ZpbGVzeXN0ZW0oc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKik7CiAKIApleHRlcm4g
aW50IGxvY2tzX21hbmRhdG9yeV9sb2NrZWQoc3RydWN0IGlub2RlICppbm9kZSk7CmV4dGVybiBp
bnQgbG9ja3NfbWFuZGF0b3J5X2FyZWEoaW50IHJlYWRfd3JpdGUsIHN0cnVjdCBpbm9kZSAqaW5v
ZGUsCgkJCQlzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IG9mZnNldCwKCQkJCXNpemVfdCBjb3Vu
dCk7CmV4dGVybiBpbmxpbmUgaW50IGxvY2tzX3ZlcmlmeV9sb2NrZWQoc3RydWN0IGlub2RlICpp
bm9kZSkKewoJIAoJaWYgKCgoKCAgaW5vZGUgICktPmlfc2IgJiYgKCAgaW5vZGUgICktPmlfc2It
PnNfZmxhZ3MgJiAoICA2NCAgKSkgfHwgKCAgaW5vZGUgICktPmlfZmxhZ3MgJiAoICA2NCAgKSkg
ICAmJgoJICAgIChpbm9kZS0+aV9tb2RlICYgKDAwMDIwMDAgIHwgMDAwMTAgKSkgPT0gMDAwMjAw
MCApCgkJcmV0dXJuIChsb2Nrc19tYW5kYXRvcnlfbG9ja2VkKGlub2RlKSk7CglyZXR1cm4gKDAp
Owp9CmV4dGVybiBpbmxpbmUgaW50IGxvY2tzX3ZlcmlmeV9hcmVhKGludCByZWFkX3dyaXRlLCBz
dHJ1Y3QgaW5vZGUgKmlub2RlLAoJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxwLCBsb2ZmX3Qgb2Zm
c2V0LAoJCQkJICAgIHNpemVfdCBjb3VudCkKewoJIAoJaWYgKCgoKCAgaW5vZGUgICktPmlfc2Ig
JiYgKCAgaW5vZGUgICktPmlfc2ItPnNfZmxhZ3MgJiAoICA2NCAgKSkgfHwgKCAgaW5vZGUgICkt
PmlfZmxhZ3MgJiAoICA2NCAgKSkgICAmJgoJICAgIChpbm9kZS0+aV9tb2RlICYgKDAwMDIwMDAg
IHwgMDAwMTAgKSkgPT0gMDAwMjAwMCApCgkJcmV0dXJuIChsb2Nrc19tYW5kYXRvcnlfYXJlYShy
ZWFkX3dyaXRlLCBpbm9kZSwgZmlscCwgb2Zmc2V0LAoJCQkJCSAgICAgY291bnQpKTsKCXJldHVy
biAoMCk7Cn0KIAogIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSAgaW50IHN5c19vcGVuKGNv
bnN0IGNoYXIgKiwgaW50LCBpbnQpOwogIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSAgaW50
IHN5c19jbG9zZSh1bnNpZ25lZCBpbnQpOwkJIApleHRlcm4gaW50IGRvX3RydW5jYXRlKHN0cnVj
dCBkZW50cnkgKiwgdW5zaWduZWQgbG9uZyk7CmV4dGVybiBpbnQgZ2V0X3VudXNlZF9mZCh2b2lk
KTsKZXh0ZXJuIHZvaWQgcHV0X3VudXNlZF9mZCh1bnNpZ25lZCBpbnQpOwpleHRlcm4gc3RydWN0
IGZpbGUgKmZpbHBfb3Blbihjb25zdCBjaGFyICosIGludCwgaW50KTsKZXh0ZXJuIGludCBmaWxw
X2Nsb3NlKHN0cnVjdCBmaWxlICosIGZsX293bmVyX3QgaWQpOwpleHRlcm4gY2hhciAqIGdldG5h
bWUoY29uc3QgY2hhciAqIGZpbGVuYW1lKTsKZXh0ZXJuIHZvaWQga2lsbF9mYXN5bmMoc3RydWN0
IGZhc3luY19zdHJ1Y3QgKmZhLCBpbnQgc2lnKTsKZXh0ZXJuIGludCByZWdpc3Rlcl9ibGtkZXYo
dW5zaWduZWQgaW50LCBjb25zdCBjaGFyICosIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKik7CmV4
dGVybiBpbnQgdW5yZWdpc3Rlcl9ibGtkZXYodW5zaWduZWQgaW50IG1ham9yLCBjb25zdCBjaGFy
ICogbmFtZSk7CmV4dGVybiBpbnQgYmxrZGV2X29wZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0
cnVjdCBmaWxlICogZmlscCk7CmV4dGVybiBpbnQgYmxrZGV2X3JlbGVhc2UgKHN0cnVjdCBpbm9k
ZSAqIGlub2RlKTsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzOwpl
eHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYmxrZGV2X2lub2RlX29wZXJhdGlvbnM7CiAK
ZXh0ZXJuIGludCByZWdpc3Rlcl9jaHJkZXYodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICosIHN0
cnVjdCBmaWxlX29wZXJhdGlvbnMgKik7CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9jaHJkZXYodW5z
aWduZWQgaW50IG1ham9yLCBjb25zdCBjaGFyICogbmFtZSk7CmV4dGVybiBpbnQgY2hyZGV2X29w
ZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCk7CmV4dGVybiBzdHJ1
Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9jaHJfZm9wczsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVy
YXRpb25zIGNocmRldl9pbm9kZV9vcGVyYXRpb25zOwpleHRlcm4gY2hhciAqIGJkZXZuYW1lKGtk
ZXZfdCBkZXYpOwpleHRlcm4gY2hhciAqIGNkZXZuYW1lKGtkZXZfdCBkZXYpOwpleHRlcm4gY2hh
ciAqIGtkZXZuYW1lKGtkZXZfdCBkZXYpOwpleHRlcm4gdm9pZCBpbml0X2ZpZm8oc3RydWN0IGlu
b2RlICogaW5vZGUpOwpleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZmlmb19pbm9kZV9v
cGVyYXRpb25zOwogCmV4dGVybiB2b2lkIG1ha2VfYmFkX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlu
b2RlKTsKZXh0ZXJuIGludCBpc19iYWRfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpOwpleHRl
cm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjb25uZWN0aW5nX2ZpZm9fZm9wczsKZXh0ZXJuIHN0
cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVhZF9maWZvX2ZvcHM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9v
cGVyYXRpb25zIHdyaXRlX2ZpZm9fZm9wczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMg
cmR3cl9maWZvX2ZvcHM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlYWRfcGlwZV9m
b3BzOwpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3cml0ZV9waXBlX2ZvcHM7CmV4dGVy
biBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJkd3JfcGlwZV9mb3BzOwpleHRlcm4gc3RydWN0IGZp
bGVfc3lzdGVtX3R5cGUgKmdldF9mc190eXBlKGNvbnN0IGNoYXIgKm5hbWUpOwpleHRlcm4gaW50
IGZzX21heV9yZW1vdW50X3JvKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKZXh0ZXJuIGludCBmc19t
YXlfbW91bnQoa2Rldl90IGRldik7CmV4dGVybiBzdHJ1Y3QgZmlsZSAqaW51c2VfZmlscHM7CmV4
dGVybiB2b2lkIHJlZmlsZV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICogYnVmKTsKZXh0ZXJu
IHZvaWQgc2V0X3dyaXRldGltZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBidWYsIGludCBmbGFnKTsK
ZXh0ZXJuIGludCB0cnlfdG9fZnJlZV9idWZmZXJzKHN0cnVjdCBwYWdlICopOwpleHRlcm4gaW50
IG5yX2J1ZmZlcnM7CmV4dGVybiBsb25nIGJ1ZmZlcm1lbTsKZXh0ZXJuIGludCBucl9idWZmZXJf
aGVhZHM7CnZvaWQgbWFya19idWZmZXJfdXB0b2RhdGUoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgs
IGludCBvbik7CmV4dGVybiBpbmxpbmUgdm9pZCBtYXJrX2J1ZmZlcl9jbGVhbihzdHJ1Y3QgYnVm
ZmVyX2hlYWQgKiBiaCkKewoJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdCgxICwgJmJoLT5iX3N0YXRl
KSkgewoJCWlmIChiaC0+Yl9saXN0ID09IDIgKQoJCQlyZWZpbGVfYnVmZmVyKGJoKTsKCX0KfQpl
eHRlcm4gaW5saW5lIHZvaWQgbWFya19idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICog
YmgsIGludCBmbGFnKQp7CglpZiAoIXRlc3RfYW5kX3NldF9iaXQoMSAsICZiaC0+Yl9zdGF0ZSkp
IHsKCQlzZXRfd3JpdGV0aW1lKGJoLCBmbGFnKTsKCQlpZiAoYmgtPmJfbGlzdCAhPSAyICkKCQkJ
cmVmaWxlX2J1ZmZlcihiaCk7Cgl9Cn0KZXh0ZXJuIGludCBjaGVja19kaXNrX2NoYW5nZShrZGV2
X3QgZGV2KTsKZXh0ZXJuIGludCBpbnZhbGlkYXRlX2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sg
KiBzYik7CmV4dGVybiB2b2lkIGludmFsaWRhdGVfaW5vZGVfcGFnZXMoc3RydWN0IGlub2RlICop
OwpleHRlcm4gdm9pZCBfX2ludmFsaWRhdGVfYnVmZmVycyhrZGV2X3QgZGV2LCBpbnQpOwpleHRl
cm4gaW50IGZsb3BweV9pc193cChpbnQgbWlub3IpOwpleHRlcm4gdm9pZCBzeW5jX2lub2Rlcyhr
ZGV2X3QgZGV2KTsKZXh0ZXJuIHZvaWQgd3JpdGVfaW5vZGVfbm93KHN0cnVjdCBpbm9kZSAqaW5v
ZGUpOwpleHRlcm4gdm9pZCBzeW5jX2RldihrZGV2X3QgZGV2KTsKZXh0ZXJuIGludCBmc3luY19k
ZXYoa2Rldl90IGRldik7CmV4dGVybiB2b2lkIHN5bmNfc3VwZXJzKGtkZXZfdCBkZXYpOwpleHRl
cm4gaW50IGJtYXAoc3RydWN0IGlub2RlICogaW5vZGUsaW50IGJsb2NrKTsKZXh0ZXJuIGludCBu
b3RpZnlfY2hhbmdlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOwpleHRlcm4gaW50
IHBlcm1pc3Npb24oc3RydWN0IGlub2RlICogaW5vZGUsaW50IG1hc2spOwpleHRlcm4gaW50IGdl
dF93cml0ZV9hY2Nlc3Moc3RydWN0IGlub2RlICppbm9kZSk7CmV4dGVybiB2b2lkIHB1dF93cml0
ZV9hY2Nlc3Moc3RydWN0IGlub2RlICppbm9kZSk7CmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogb3Bl
bl9uYW1laShjb25zdCBjaGFyICogcGF0aG5hbWUsIGludCBmbGFnLCBpbnQgbW9kZSk7CmV4dGVy
biBzdHJ1Y3QgZGVudHJ5ICogZG9fbWtub2QoY29uc3QgY2hhciAqIGZpbGVuYW1lLCBpbnQgbW9k
ZSwgZGV2X3QgZGV2KTsKZXh0ZXJuIGludCBkb19waXBlKGludCAqKTsKIApleHRlcm4gaW50IGlz
X3N1YmRpcihzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBkZW50cnkgKik7CmV4dGVybiBpbm9fdCBm
aW5kX2lub2RlX251bWJlcihzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOwogCiAKZXh0
ZXJuIHN0cnVjdCBkZW50cnkgKiBsb29rdXBfZGVudHJ5KGNvbnN0IGNoYXIgKiwgc3RydWN0IGRl
bnRyeSAqLCB1bnNpZ25lZCBpbnQpOwpleHRlcm4gc3RydWN0IGRlbnRyeSAqIF9fbmFtZWkoY29u
c3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpOwpleHRlcm4gdm9pZCBpcHV0KHN0cnVjdCBpbm9kZSAq
KTsKZXh0ZXJuIHN0cnVjdCBpbm9kZSAqIGlncmFiKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpleHRl
cm4gaW5vX3QgaXVuaXF1ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW5vX3QpOwpleHRlcm4gc3Ry
dWN0IGlub2RlICogaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZyk7CmV4
dGVybiBzdHJ1Y3QgaW5vZGUgKiBpZ2V0X2luX3VzZSAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVu
c2lnbmVkIGxvbmcpOwpleHRlcm4gdm9pZCBjbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CmV4
dGVybiBzdHJ1Y3QgaW5vZGUgKiBnZXRfZW1wdHlfaW5vZGUodm9pZCk7CmV4dGVybiB2b2lkIGlu
c2VydF9pbm9kZV9oYXNoKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgcmVtb3ZlX2lub2Rl
X2hhc2goc3RydWN0IGlub2RlICopOwpleHRlcm4gc3RydWN0IGZpbGUgKiBnZXRfZW1wdHlfZmls
cCh2b2lkKTsKZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIGdldF9oYXNoX3RhYmxlKGtkZXZf
dCwgaW50LCBpbnQpOwpleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogZ2V0YmxrKGtkZXZfdCwg
aW50LCBpbnQpOwpleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogZmluZF9idWZmZXIoa2Rldl90
IGRldiwgaW50IGJsb2NrLCBpbnQgc2l6ZSk7CmV4dGVybiB2b2lkIGxsX3J3X2Jsb2NrKGludCwg
aW50LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaFtdKTsKZXh0ZXJuIGludCBpc19yZWFkX29ubHko
a2Rldl90KTsKZXh0ZXJuIHZvaWQgX19icmVsc2Uoc3RydWN0IGJ1ZmZlcl9oZWFkICopOwpleHRl
cm4gaW5saW5lIHZvaWQgYnJlbHNlKHN0cnVjdCBidWZmZXJfaGVhZCAqYnVmKQp7CglpZiAoYnVm
KQoJCV9fYnJlbHNlKGJ1Zik7Cn0KZXh0ZXJuIHZvaWQgX19iZm9yZ2V0KHN0cnVjdCBidWZmZXJf
aGVhZCAqYnVmKTsKZXh0ZXJuIGlubGluZSB2b2lkIGJmb3JnZXQoc3RydWN0IGJ1ZmZlcl9oZWFk
ICpidWYpCnsKCWlmIChidWYpCgkJX19iZm9yZ2V0KGJ1Zik7Cn0KZXh0ZXJuIHZvaWQgc2V0X2Js
b2Nrc2l6ZShrZGV2X3QgZGV2LCBpbnQgc2l6ZSk7CmV4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X2hh
cmRibG9ja3NpemUoa2Rldl90IGRldik7CmV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBicmVh
ZChrZGV2X3QgZGV2LCBpbnQgYmxvY2ssIGludCBzaXplKTsKZXh0ZXJuIHN0cnVjdCBidWZmZXJf
aGVhZCAqIGJyZWFkYShrZGV2X3QgZGV2LGludCBibG9jaywgaW50IHNpemUsIAoJCQkJICAgdW5z
aWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGZpbGVzaXplKTsKZXh0ZXJuIGludCBicndfcGFn
ZShpbnQsIHN0cnVjdCBwYWdlICosIGtkZXZfdCwgaW50IFtdLCBpbnQsIGludCk7CmV4dGVybiBp
bnQgZ2VuZXJpY19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKZXh0ZXJu
IGludCBnZW5lcmljX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1
Y3QgKik7CmV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICosIGNo
YXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV93cml0
ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyKiwgc2l6ZV90LCBsb2ZmX3QqKTsKZXh0ZXJuIHN0
cnVjdCBzdXBlcl9ibG9jayAqZ2V0X3N1cGVyKGtkZXZfdCBkZXYpOwpleHRlcm4gdm9pZCBwdXRf
c3VwZXIoa2Rldl90IGRldik7CnVuc2lnbmVkIGxvbmcgZ2VuZXJhdGVfY2x1c3RlcihrZGV2X3Qg
ZGV2LCBpbnQgYltdLCBpbnQgc2l6ZSk7CnVuc2lnbmVkIGxvbmcgZ2VuZXJhdGVfY2x1c3Rlcl9z
d2FiMzIoa2Rldl90IGRldiwgaW50IGJbXSwgaW50IHNpemUpOwpleHRlcm4ga2Rldl90IFJPT1Rf
REVWOwpleHRlcm4gdm9pZCBzaG93X2J1ZmZlcnModm9pZCk7CmV4dGVybiB2b2lkIG1vdW50X3Jv
b3Qodm9pZCk7CmV4dGVybiBzc2l6ZV90IGNoYXJfcmVhZChzdHJ1Y3QgZmlsZSAqLCBjaGFyICos
IHNpemVfdCwgbG9mZl90ICopOwpleHRlcm4gc3NpemVfdCBibG9ja19yZWFkKHN0cnVjdCBmaWxl
ICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4dGVybiBpbnQgcmVhZF9haGVhZFtdOwpl
eHRlcm4gc3NpemVfdCBjaGFyX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwgc2l6
ZV90LCBsb2ZmX3QgKik7CmV4dGVybiBzc2l6ZV90IGJsb2NrX3dyaXRlKHN0cnVjdCBmaWxlICos
IGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4dGVybiBpbnQgYmxvY2tfZnN5bmMo
c3RydWN0IGZpbGUgKiwgc3RydWN0IGRlbnRyeSAqZGlyKTsKZXh0ZXJuIGludCBmaWxlX2ZzeW5j
KHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKmRpcik7CmV4dGVybiBpbnQgaW5vZGVfY2hh
bmdlX29rKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaWF0dHIgKik7CmV4dGVybiB2b2lkIGlub2Rl
X3NldGF0dHIoc3RydWN0IGlub2RlICosIHN0cnVjdCBpYXR0ciAqKTsKZXh0ZXJuIF9fdTMyIGlu
b2RlX2dlbmVyYXRpb25fY291bnQ7CiMgMTMgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRl
L2xpbnV4L2NhcGFiaWxpdHkuaCIgMgogCiAKIAp0eXBlZGVmIHN0cnVjdCBfX3VzZXJfY2FwX2hl
YWRlcl9zdHJ1Y3QgewoJX191MzIgdmVyc2lvbjsKCWludCBwaWQ7Cn0gKmNhcF91c2VyX2hlYWRl
cl90OwogCnR5cGVkZWYgc3RydWN0IF9fdXNlcl9jYXBfZGF0YV9zdHJ1Y3QgewogICAgICAgIF9f
dTMyIGVmZmVjdGl2ZTsKICAgICAgICBfX3UzMiBwZXJtaXR0ZWQ7CiAgICAgICAgX191MzIgaW5o
ZXJpdGFibGU7Cn0gKmNhcF91c2VyX2RhdGFfdDsKICAKIAp0eXBlZGVmIF9fdTMyIGtlcm5lbF9j
YXBfdDsKICAKIAogCiAKIAogICAgCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIApleHRlcm4ga2VybmVsX2NhcF90IGNhcF9ic2V0OwogCiAK
c3RhdGljIGlubGluZSBrZXJuZWxfY2FwX3QgY2FwX2NvbWJpbmUoa2VybmVsX2NhcF90IGEsIGtl
cm5lbF9jYXBfdCBiKQp7CiAgICAga2VybmVsX2NhcF90IGRlc3Q7CiAgICAgKCBkZXN0ICkgID0g
KCBhICkgIHwgKCBiICkgOwogICAgIHJldHVybiBkZXN0Owp9CnN0YXRpYyBpbmxpbmUga2VybmVs
X2NhcF90IGNhcF9pbnRlcnNlY3Qoa2VybmVsX2NhcF90IGEsIGtlcm5lbF9jYXBfdCBiKQp7CiAg
ICAga2VybmVsX2NhcF90IGRlc3Q7CiAgICAgKCBkZXN0ICkgID0gKCBhICkgICYgKCBiICkgOwog
ICAgIHJldHVybiBkZXN0Owp9CnN0YXRpYyBpbmxpbmUga2VybmVsX2NhcF90IGNhcF9kcm9wKGtl
cm5lbF9jYXBfdCBhLCBrZXJuZWxfY2FwX3QgZHJvcCkKewogICAgIGtlcm5lbF9jYXBfdCBkZXN0
OwogICAgICggZGVzdCApICA9ICggYSApICAmIH4oIGRyb3AgKSA7CiAgICAgcmV0dXJuIGRlc3Q7
Cn0Kc3RhdGljIGlubGluZSBrZXJuZWxfY2FwX3QgY2FwX2ludmVydChrZXJuZWxfY2FwX3QgYykK
ewogICAgIGtlcm5lbF9jYXBfdCBkZXN0OwogICAgICggZGVzdCApICA9IH4oIGMgKSA7CiAgICAg
cmV0dXJuIGRlc3Q7Cn0KIyA1ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9i
aW5mbXRzLmgiIDIKIAogCnN0cnVjdCBsaW51eF9iaW5wcm17CgljaGFyIGJ1ZlsxMjhdOwoJdW5z
aWduZWQgbG9uZyBwYWdlWzMyIF07Cgl1bnNpZ25lZCBsb25nIHA7CglpbnQgc2hfYmFuZzsKCWlu
dCBqYXZhOwkJIAoJc3RydWN0IGRlbnRyeSAqIGRlbnRyeTsKCWludCBlX3VpZCwgZV9naWQ7Cglr
ZXJuZWxfY2FwX3QgY2FwX2luaGVyaXRhYmxlLCBjYXBfcGVybWl0dGVkLCBjYXBfZWZmZWN0aXZl
OwoJaW50IGFyZ2MsIGVudmM7CgljaGFyICogZmlsZW5hbWU7CSAKCXVuc2lnbmVkIGxvbmcgbG9h
ZGVyLCBleGVjOwp9OwogCnN0cnVjdCBsaW51eF9iaW5mbXQgewoJc3RydWN0IGxpbnV4X2JpbmZt
dCAqIG5leHQ7CglzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CglpbnQgKCpsb2FkX2JpbmFyeSkoc3Ry
dWN0IGxpbnV4X2JpbnBybSAqLCBzdHJ1Y3QgIHB0X3JlZ3MgKiByZWdzKTsKCWludCAoKmxvYWRf
c2hsaWIpKGludCBmZCk7CglpbnQgKCpjb3JlX2R1bXApKGxvbmcgc2lnbnIsIHN0cnVjdCBwdF9y
ZWdzICogcmVncyk7Cn07CmV4dGVybiBpbnQgcmVnaXN0ZXJfYmluZm10KHN0cnVjdCBsaW51eF9i
aW5mbXQgKik7CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9iaW5mbXQoc3RydWN0IGxpbnV4X2JpbmZt
dCAqKTsKZXh0ZXJuIGludCByZWFkX2V4ZWMoc3RydWN0IGRlbnRyeSAqLCB1bnNpZ25lZCBsb25n
IG9mZnNldCwKCWNoYXIgKiBhZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50LCBpbnQgdG9fa21lbSk7
CmV4dGVybiBpbnQgb3Blbl9kZW50cnkoc3RydWN0IGRlbnRyeSAqLCBpbnQgbW9kZSk7CmV4dGVy
biBpbnQgaW5pdF9lbGZfYmluZm10KHZvaWQpOwpleHRlcm4gaW50IGluaXRfZWxmMzJfYmluZm10
KHZvaWQpOwpleHRlcm4gaW50IGluaXRfaXJpeF9iaW5mbXQodm9pZCk7CmV4dGVybiBpbnQgaW5p
dF9hb3V0X2JpbmZtdCh2b2lkKTsKZXh0ZXJuIGludCBpbml0X2FvdXQzMl9iaW5mbXQodm9pZCk7
CmV4dGVybiBpbnQgaW5pdF9zY3JpcHRfYmluZm10KHZvaWQpOwpleHRlcm4gaW50IGluaXRfamF2
YV9iaW5mbXQodm9pZCk7CmV4dGVybiBpbnQgaW5pdF9lbTg2X2JpbmZtdCh2b2lkKTsKZXh0ZXJu
IGludCBpbml0X21pc2NfYmluZm10KHZvaWQpOwpleHRlcm4gaW50IHByZXBhcmVfYmlucHJtKHN0
cnVjdCBsaW51eF9iaW5wcm0gKik7CmV4dGVybiB2b2lkIHJlbW92ZV9hcmdfemVybyhzdHJ1Y3Qg
bGludXhfYmlucHJtICopOwpleHRlcm4gaW50IHNlYXJjaF9iaW5hcnlfaGFuZGxlcihzdHJ1Y3Qg
bGludXhfYmlucHJtICosc3RydWN0IHB0X3JlZ3MgKik7CmV4dGVybiBpbnQgZmx1c2hfb2xkX2V4
ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pOwpleHRlcm4gdW5zaWduZWQgbG9uZyBzZXR1
cF9hcmdfcGFnZXModW5zaWduZWQgbG9uZyBwLCBzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSk7
CmV4dGVybiB1bnNpZ25lZCBsb25nIGNvcHlfc3RyaW5ncyhpbnQgYXJnYyxjaGFyICoqIGFyZ3Ys
dW5zaWduZWQgbG9uZyAqcGFnZSwKCQl1bnNpZ25lZCBsb25nIHAsIGludCBmcm9tX2ttZW0pOwpl
eHRlcm4gdm9pZCBjb21wdXRlX2NyZWRzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJpbnBybSk7CiAK
IyA4ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAi
L2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvcGVyc29uYWxpdHkuaCIgMQogCiAK
IAp0eXBlZGVmIHZvaWQgKCpsY2FsbDdfZnVuYykoc3RydWN0IHB0X3JlZ3MgKik7CiAKc3RydWN0
IGV4ZWNfZG9tYWluIHsKCWNvbnN0IGNoYXIgKm5hbWU7CglsY2FsbDdfZnVuYyBoYW5kbGVyOwoJ
dW5zaWduZWQgY2hhciBwZXJzX2xvdywgcGVyc19oaWdoOwoJdW5zaWduZWQgbG9uZyAqIHNpZ25h
bF9tYXA7Cgl1bnNpZ25lZCBsb25nICogc2lnbmFsX2ludm1hcDsKCXN0cnVjdCBtb2R1bGUgKiBt
b2R1bGU7CglzdHJ1Y3QgZXhlY19kb21haW4gKm5leHQ7Cn07CmV4dGVybiBzdHJ1Y3QgZXhlY19k
b21haW4gZGVmYXVsdF9leGVjX2RvbWFpbjsKZXh0ZXJuIHN0cnVjdCBleGVjX2RvbWFpbiAqbG9v
a3VwX2V4ZWNfZG9tYWluKHVuc2lnbmVkIGxvbmcgcGVyc29uYWxpdHkpOwpleHRlcm4gaW50IHJl
Z2lzdGVyX2V4ZWNfZG9tYWluKHN0cnVjdCBleGVjX2RvbWFpbiAqaXQpOwpleHRlcm4gaW50IHVu
cmVnaXN0ZXJfZXhlY19kb21haW4oc3RydWN0IGV4ZWNfZG9tYWluICppdCk7CiAgX19hdHRyaWJ1
dGVfXygocmVncGFybSgwKSkpICBpbnQgc3lzX3BlcnNvbmFsaXR5KHVuc2lnbmVkIGxvbmcgcGVy
c29uYWxpdHkpOwojIDkgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3NjaGVk
LmgiIDIKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC90YXNrcy5oIiAx
CiAKIAogCiMgMTAgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgi
IDIKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC90aW1lcy5oIiAxCnN0
cnVjdCB0bXMgewoJY2xvY2tfdCB0bXNfdXRpbWU7CgljbG9ja190IHRtc19zdGltZTsKCWNsb2Nr
X3QgdG1zX2N1dGltZTsKCWNsb2NrX3QgdG1zX2NzdGltZTsKfTsKIyAxMyAiL2hvbWUvanc1L3Rt
cC9saW51eDIyL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi9ob21lL2p3NS90bXAvbGlu
dXgyMi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgiIDEKIAogCiAKIAogCiAKIAojIDEgIi9ob21lL2p3
NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS90aW1leC5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9s
aW51eDIyL2luY2x1ZGUvYXNtL2w0YXJjaC90aW1leC5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9s
aW51eDIyL2luY2x1ZGUvYXNtLWkzODYvdGltZXguaCIgMQogCiMgMSAiL2hvbWUvanc1L3RtcC9s
aW51eDIyL2luY2x1ZGUvYXNtL21zci5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2lu
Y2x1ZGUvYXNtL2w0YXJjaC9tc3IuaCIgMQogCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2lu
Y2x1ZGUvYXNtLWkzODYvbXNyLmgiIDEKIAojIDUgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNs
dWRlL2FzbS9sNGFyY2gvbXNyLmgiIDIKIyA0ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVk
ZS9hc20vbXNyLmgiIDIKIyAxMCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtLWkz
ODYvdGltZXguaCIgMgogCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBjeWNsZXNfdDsKZXh0ZXJuIGN5
Y2xlc190IGNhY2hlZmx1c2hfdGltZTsKc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVz
ICh2b2lkKQp7CglyZXR1cm4gMDsKfQojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRl
L2FzbS9sNGFyY2gvdGltZXguaCIgMgojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRl
L2FzbS90aW1leC5oIiAyCiMgMTM4ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51
eC90aW1leC5oIiAyCiAKIApzdHJ1Y3QgdGltZXggewoJdW5zaWduZWQgaW50IG1vZGVzOwkgCgls
b25nIG9mZnNldDsJCSAKCWxvbmcgZnJlcTsJCSAKCWxvbmcgbWF4ZXJyb3I7CQkgCglsb25nIGVz
dGVycm9yOwkJIAoJaW50IHN0YXR1czsJCSAKCWxvbmcgY29uc3RhbnQ7CQkgCglsb25nIHByZWNp
c2lvbjsJCSAKCWxvbmcgdG9sZXJhbmNlOwkJIAoJc3RydWN0IHRpbWV2YWwgdGltZTsJIAoJbG9u
ZyB0aWNrOwkJIAoJbG9uZyBwcHNmcmVxOyAgICAgICAgICAgIAoJbG9uZyBqaXR0ZXI7ICAgICAg
ICAgICAgIAoJaW50IHNoaWZ0OyAgICAgICAgICAgICAgIAoJbG9uZyBzdGFiaWw7ICAgICAgICAg
ICAgIAoJbG9uZyBqaXRjbnQ7ICAgICAgICAgICAgIAoJbG9uZyBjYWxjbnQ7ICAgICAgICAgICAg
IAoJbG9uZyBlcnJjbnQ7ICAgICAgICAgICAgIAoJbG9uZyBzdGJjbnQ7ICAgICAgICAgICAgIAoJ
aW50ICA6MzI7IGludCAgOjMyOyBpbnQgIDozMjsgaW50ICA6MzI7CglpbnQgIDozMjsgaW50ICA6
MzI7IGludCAgOjMyOyBpbnQgIDozMjsKCWludCAgOjMyOyBpbnQgIDozMjsgaW50ICA6MzI7IGlu
dCAgOjMyOwp9OwogCiAKIAogCiAKZXh0ZXJuIGxvbmcgdGljazsgICAgICAgICAgICAgICAgICAg
ICAgIApleHRlcm4gaW50IHRpY2thZGo7CQkJIAogCmV4dGVybiBpbnQgdGltZV9zdGF0ZTsJCSAK
ZXh0ZXJuIGludCB0aW1lX3N0YXR1czsJCSAKZXh0ZXJuIGxvbmcgdGltZV9vZmZzZXQ7CSAKZXh0
ZXJuIGxvbmcgdGltZV9jb25zdGFudDsJIApleHRlcm4gbG9uZyB0aW1lX3RvbGVyYW5jZTsJIApl
eHRlcm4gbG9uZyB0aW1lX3ByZWNpc2lvbjsJIApleHRlcm4gbG9uZyB0aW1lX21heGVycm9yOwkg
CmV4dGVybiBsb25nIHRpbWVfZXN0ZXJyb3I7CSAKZXh0ZXJuIGxvbmcgdGltZV9waGFzZTsJCSAK
ZXh0ZXJuIGxvbmcgdGltZV9mcmVxOwkJIApleHRlcm4gbG9uZyB0aW1lX2FkajsJCSAKZXh0ZXJu
IGxvbmcgdGltZV9yZWZ0aW1lOwkgCmV4dGVybiBsb25nIHRpbWVfYWRqdXN0OwkgCiAKZXh0ZXJu
IGxvbmcgcHBzX29mZnNldDsJCSAKZXh0ZXJuIGxvbmcgcHBzX2ppdHRlcjsJCSAKZXh0ZXJuIGxv
bmcgcHBzX2ZyZXE7CQkgCmV4dGVybiBsb25nIHBwc19zdGFiaWw7CQkgCmV4dGVybiBsb25nIHBw
c192YWxpZDsJCSAKIApleHRlcm4gaW50IHBwc19zaGlmdDsJCSAKZXh0ZXJuIGxvbmcgcHBzX2pp
dGNudDsJCSAKZXh0ZXJuIGxvbmcgcHBzX2NhbGNudDsJCSAKZXh0ZXJuIGxvbmcgcHBzX2VycmNu
dDsJCSAKZXh0ZXJuIGxvbmcgcHBzX3N0YmNudDsJCSAKIyAxNCAiL2hvbWUvanc1L3RtcC9saW51
eDIyL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9p
bmNsdWRlL2xpbnV4L3NtcC5oIiAxCiAKIyA3MSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1
ZGUvbGludXgvc21wLmgiCiAKIAojIDIwICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9s
aW51eC9zY2hlZC5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgv
dHR5LmgiIDEKIAogCgkJIAojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4
L21ham9yLmgiIDEKIAogCiAKIAogIApzdGF0aWMgX19pbmxpbmVfXyBpbnQgc2NzaV9ibGtfbWFq
b3IoaW50IG0pIHsKCXJldHVybiAoKCggIG0gICkgPT0gOCAgfHwgKCggIG0gICkgPj0gNjUgICYm
ICggIG0gICkgPD0gNzEgKSkgCXx8ICggbSApID09IDExICkgOwp9CiMgMjEgIi9ob21lL2p3NS90
bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3R0eS5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51
eDIyL2luY2x1ZGUvbGludXgvdGVybWlvcy5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIy
L2luY2x1ZGUvYXNtL3Rlcm1pb3MuaCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNs
dWRlL2FzbS9sNGFyY2gvdGVybWlvcy5oIiAxCiAKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIv
aW5jbHVkZS9hc20taTM4Ni90ZXJtaW9zLmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIv
aW5jbHVkZS9hc20vdGVybWJpdHMuaCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNs
dWRlL2FzbS9sNGFyY2gvdGVybWJpdHMuaCIgMQogCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIy
L2luY2x1ZGUvYXNtLWkzODYvdGVybWJpdHMuaCIgMQp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJY2Nf
dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQJc3BlZWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQJdGNm
bGFnX3Q7CnN0cnVjdCB0ZXJtaW9zIHsKCXRjZmxhZ190IGNfaWZsYWc7CQkgCgl0Y2ZsYWdfdCBj
X29mbGFnOwkJIAoJdGNmbGFnX3QgY19jZmxhZzsJCSAKCXRjZmxhZ190IGNfbGZsYWc7CQkgCglj
Y190IGNfbGluZTsJCQkgCgljY190IGNfY2NbMTkgXTsJCSAKfTsKIAogCiAKIAogCiAKIAogCiMg
NSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2w0YXJjaC90ZXJtYml0cy5oIiAy
CiMgNCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgiIDIKIyA0
ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20taTM4Ni90ZXJtaW9zLmgiIDIKIyAx
ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vaW9jdGxzLmgiIDEKIyAxICIvaG9t
ZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL2lvY3Rscy5oIiAxCiAKIyAxICIv
aG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20taTM4Ni9pb2N0bHMuaCIgMQogCiAKIyA1
ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL2lvY3Rscy5oIiAyCiAK
c3RydWN0IGVtdWxpYl9pbmZvX3N0cnVjdCB7CiAgdW5zaWduZWQgbG9uZyBlbXVsaWJfaWR0X2Rl
c2NyLCBlbXVsaWJfZGVidWdfaWR0X2Rlc2NyLCAKICAgIGVtdWxpYl9sb2NrLCB1c2VyX2xldmVs
X3BhZ2VyOwp9OwojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9pb2N0bHMu
aCIgMgojIDUgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS1pMzg2L3Rlcm1pb3Mu
aCIgMgpzdHJ1Y3Qgd2luc2l6ZSB7Cgl1bnNpZ25lZCBzaG9ydCB3c19yb3c7Cgl1bnNpZ25lZCBz
aG9ydCB3c19jb2w7Cgl1bnNpZ25lZCBzaG9ydCB3c194cGl4ZWw7Cgl1bnNpZ25lZCBzaG9ydCB3
c195cGl4ZWw7Cn07CnN0cnVjdCB0ZXJtaW8gewoJdW5zaWduZWQgc2hvcnQgY19pZmxhZzsJCSAK
CXVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CQkgCgl1bnNpZ25lZCBzaG9ydCBjX2NmbGFnOwkJIAoJ
dW5zaWduZWQgc2hvcnQgY19sZmxhZzsJCSAKCXVuc2lnbmVkIGNoYXIgY19saW5lOwkJIAoJdW5z
aWduZWQgY2hhciBjX2NjWzggXTsJIAp9OwogCiAKIAogCiAKIAojIDk3ICIvaG9tZS9qdzUvdG1w
L2xpbnV4MjIvaW5jbHVkZS9hc20taTM4Ni90ZXJtaW9zLmgiCiMgNSAiL2hvbWUvanc1L3RtcC9s
aW51eDIyL2luY2x1ZGUvYXNtL2w0YXJjaC90ZXJtaW9zLmgiIDIKIyA0ICIvaG9tZS9qdzUvdG1w
L2xpbnV4MjIvaW5jbHVkZS9hc20vdGVybWlvcy5oIiAyCiMgNSAiL2hvbWUvanc1L3RtcC9saW51
eDIyL2luY2x1ZGUvbGludXgvdGVybWlvcy5oIiAyCiMgMjIgIi9ob21lL2p3NS90bXAvbGludXgy
Mi9pbmNsdWRlL2xpbnV4L3R0eS5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1
ZGUvbGludXgvdHF1ZXVlLmgiIDEKIAogCnN0cnVjdCB0cV9zdHJ1Y3QgewoJc3RydWN0IHRxX3N0
cnVjdCAqbmV4dDsJCSAKCXVuc2lnbmVkIGxvbmcgc3luYzsJCSAKCXZvaWQgKCpyb3V0aW5lKSh2
b2lkICopOwkgCgl2b2lkICpkYXRhOwkJCSAKfTsKdHlwZWRlZiBzdHJ1Y3QgdHFfc3RydWN0ICog
dGFza19xdWV1ZTsKZXh0ZXJuIHRhc2tfcXVldWUgdHFfdGltZXIsIHRxX2ltbWVkaWF0ZSwgdHFf
c2NoZWR1bGVyLCB0cV9kaXNrOwogCmV4dGVybiBzcGlubG9ja190IHRxdWV1ZV9sb2NrOwogCmV4
dGVybiBfX2lubGluZV9fIHZvaWQgcXVldWVfdGFzayhzdHJ1Y3QgdHFfc3RydWN0ICpiaF9wb2lu
dGVyLAoJCQkgICB0YXNrX3F1ZXVlICpiaF9saXN0KQp7CglpZiAoIXRlc3RfYW5kX3NldF9iaXQo
MCwmYmhfcG9pbnRlci0+c3luYykpIHsKCQl1bnNpZ25lZCBsb25nIGZsYWdzOwoJCWRvIHsgX19h
c21fXyBfX3ZvbGF0aWxlX18oInB1c2hmbCA7IHBvcGwgJTAiOiI9ZyIgKCAgICAgZmxhZ3MgICAg
KTogICA6Im1lbW9yeSIpICAgOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImNsaSI6IDogOiJtZW1v
cnkiKSAgIDsgfSB3aGlsZSAoMCkgOwoJCWJoX3BvaW50ZXItPm5leHQgPSAqYmhfbGlzdDsKCQkq
YmhfbGlzdCA9IGJoX3BvaW50ZXI7CgkJX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsg
cG9wZmwiOiAgIDoiZyIgKCAgICAgZmxhZ3MgICAgKToibWVtb3J5IikgICAgOwoJfQp9CiAKZXh0
ZXJuIF9faW5saW5lX18gdm9pZCBydW5fdGFza19xdWV1ZSh0YXNrX3F1ZXVlICpsaXN0KQp7Cglp
ZiAoKmxpc3QpIHsKCQl1bnNpZ25lZCBsb25nIGZsYWdzOwoJCXN0cnVjdCB0cV9zdHJ1Y3QgKnA7
CgkJZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCI6Ij1nIiAoICAg
ICBmbGFncyAgICApOiAgIDoibWVtb3J5IikgICA7IF9fYXNtX18gX192b2xhdGlsZV9fICgiY2xp
IjogOiA6Im1lbW9yeSIpICAgOyB9IHdoaWxlICgwKSA7CgkJcCA9ICpsaXN0OwoJCSpsaXN0ID0g
KCh2b2lkICopMCkgOwoJCV9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjog
ICA6ImciICggICAgIGZsYWdzICAgICk6Im1lbW9yeSIpICAgIDsKCQkKCQl3aGlsZSAocCkgewoJ
CQl2b2lkICphcmc7CgkJCXZvaWQgKCpmKSAodm9pZCAqKTsKCQkJc3RydWN0IHRxX3N0cnVjdCAq
c2F2ZV9wOwoJCQlhcmcgICAgPSBwIC0+IGRhdGE7CgkJCWYgICAgICA9IHAgLT4gcm91dGluZTsK
CQkJc2F2ZV9wID0gcDsKCQkJcCAgICAgID0gcCAtPiBuZXh0OwoJCQlfX2FzbV9fIF9fdm9sYXRp
bGVfXyAoImxvY2s7IGFkZGwgJDAsMCglJWVzcCkiOiA6IDoibWVtb3J5IikgOwoJCQlzYXZlX3Ag
LT4gc3luYyA9IDA7CgkJCSgqZikoYXJnKTsKCQl9Cgl9Cn0KIyAyMyAiL2hvbWUvanc1L3RtcC9s
aW51eDIyL2luY2x1ZGUvbGludXgvdHR5LmgiIDIKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIv
aW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgiIDEKIApzdHJ1Y3QgdHR5X2RyaXZlciB7CglpbnQJ
bWFnaWM7CQkgCgljb25zdCBjaGFyCSpkcml2ZXJfbmFtZTsKCWNvbnN0IGNoYXIJKm5hbWU7Cglp
bnQJbmFtZV9iYXNlOwkgCglzaG9ydAltYWpvcjsJCSAKCXNob3J0CW1pbm9yX3N0YXJ0OwkgCglz
aG9ydAludW07CQkgCglzaG9ydAl0eXBlOwkJIAoJc2hvcnQJc3VidHlwZTsJIAoJc3RydWN0IHRl
cm1pb3MgaW5pdF90ZXJtaW9zOyAgCglpbnQJZmxhZ3M7CQkgCglpbnQJKnJlZmNvdW50OwkgCglz
dHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfZW50cnk7ICAKCXN0cnVjdCB0dHlfZHJpdmVyICpv
dGhlcjsgIAoJIAoJc3RydWN0IHR0eV9zdHJ1Y3QgKip0YWJsZTsKCXN0cnVjdCB0ZXJtaW9zICoq
dGVybWlvczsKCXN0cnVjdCB0ZXJtaW9zICoqdGVybWlvc19sb2NrZWQ7Cgl2b2lkICpkcml2ZXJf
c3RhdGU7CSAKCQoJIAoJaW50ICAoKm9wZW4pKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1
Y3QgZmlsZSAqIGZpbHApOwoJdm9pZCAoKmNsb3NlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwg
c3RydWN0IGZpbGUgKiBmaWxwKTsKCWludCAgKCp3cml0ZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0
dHksIGludCBmcm9tX3VzZXIsCgkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQg
Y291bnQpOwoJdm9pZCAoKnB1dF9jaGFyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25l
ZCBjaGFyIGNoKTsKCXZvaWQgKCpmbHVzaF9jaGFycykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7
CglpbnQgICgqd3JpdGVfcm9vbSkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CglpbnQgICgqY2hh
cnNfaW5fYnVmZmVyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKCWludCAgKCppb2N0bCkoc3Ry
dWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAoJCSAgICB1bnNpZ25lZCBp
bnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Cgl2b2lkICgqc2V0X3Rlcm1pb3MpKHN0cnVjdCB0
dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICogb2xkKTsKCXZvaWQgKCp0aHJvdHRsZSko
c3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwoJdm9pZCAoKnVudGhyb3R0bGUpKHN0cnVjdCB0dHlf
c3RydWN0ICogdHR5KTsKCXZvaWQgKCpzdG9wKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKCXZv
aWQgKCpzdGFydCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Cgl2b2lkICgqaGFuZ3VwKShzdHJ1
Y3QgdHR5X3N0cnVjdCAqdHR5KTsKCXZvaWQgKCpicmVha19jdGwpKHN0cnVjdCB0dHlfc3RydWN0
ICp0dHksIGludCBzdGF0ZSk7Cgl2b2lkICgqZmx1c2hfYnVmZmVyKShzdHJ1Y3QgdHR5X3N0cnVj
dCAqdHR5KTsKCXZvaWQgKCpzZXRfbGRpc2MpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwoJdm9p
ZCAoKndhaXRfdW50aWxfc2VudCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHRpbWVvdXQp
OwoJdm9pZCAoKnNlbmRfeGNoYXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpOwoJ
aW50ICgqcmVhZF9wcm9jKShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKCQkJ
ICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKCWludCAoKndyaXRlX3Byb2MpKHN0
cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWZmZXIsCgkJCSAgdW5zaWduZWQgbG9uZyBj
b3VudCwgdm9pZCAqZGF0YSk7CgkgCglzdHJ1Y3QgdHR5X2RyaXZlciAqbmV4dDsKCXN0cnVjdCB0
dHlfZHJpdmVyICpwcmV2Owp9OwogCiAKIAogCiAKIAojIDI0ICIvaG9tZS9qdzUvdG1wL2xpbnV4
MjIvaW5jbHVkZS9saW51eC90dHkuaCIgMgojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNs
dWRlL2xpbnV4L3R0eV9sZGlzYy5oIiAxCiAKc3RydWN0IHR0eV9sZGlzYyB7CglpbnQJbWFnaWM7
CgljaGFyCSpuYW1lOwoJaW50CW51bTsKCWludAlmbGFnczsKCSAKCWludAkoKm9wZW4pKHN0cnVj
dCB0dHlfc3RydWN0ICopOwoJdm9pZAkoKmNsb3NlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKCXZv
aWQJKCpmbHVzaF9idWZmZXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwoJc3NpemVfdAkoKmNo
YXJzX2luX2J1ZmZlcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Cglzc2l6ZV90CSgqcmVhZCko
c3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKCQkJdW5zaWduZWQg
Y2hhciAqIGJ1Ziwgc2l6ZV90IG5yKTsKCXNzaXplX3QJKCp3cml0ZSkoc3RydWN0IHR0eV9zdHJ1
Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBi
dWYsIHNpemVfdCBucik7CQoJaW50CSgqaW9jdGwpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBz
dHJ1Y3QgZmlsZSAqIGZpbGUsCgkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFy
Zyk7Cgl2b2lkCSgqc2V0X3Rlcm1pb3MpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0
ZXJtaW9zICogb2xkKTsKCXVuc2lnbmVkIGludCAoKnBvbGwpKHN0cnVjdCB0dHlfc3RydWN0ICos
IHN0cnVjdCBmaWxlICosCgkJCSAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOwoJCgkg
Cgl2b2lkCSgqcmVjZWl2ZV9idWYpKHN0cnVjdCB0dHlfc3RydWN0ICosIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKmNwLAoJCQkgICAgICAgY2hhciAqZnAsIGludCBjb3VudCk7CglpbnQJKCpyZWNlaXZl
X3Jvb20pKHN0cnVjdCB0dHlfc3RydWN0ICopOwoJdm9pZAkoKndyaXRlX3dha2V1cCkoc3RydWN0
IHR0eV9zdHJ1Y3QgKik7Cn07CiMgMjUgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xp
bnV4L3R0eS5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvc2Vy
aWFsUC5oIiAxCiAKIAogCnN0cnVjdCBhc3luY19pY291bnQgewoJX191MzIJY3RzLCBkc3IsIHJu
ZywgZGNkLCB0eCwgcng7CglfX3UzMglmcmFtZSwgcGFyaXR5LCBvdmVycnVuLCBicms7CglfX3Uz
MglidWZfb3ZlcnJ1bjsKfTsKc3RydWN0IHNlcmlhbF9zdGF0ZSB7CglpbnQJbWFnaWM7CglpbnQJ
YmF1ZF9iYXNlOwoJaW50CXBvcnQ7CglpbnQJaXJxOwoJaW50CWZsYWdzOwoJaW50CWh1YjY7Cglp
bnQJdHlwZTsKCWludAlsaW5lOwoJaW50CXhtaXRfZmlmb19zaXplOwoJaW50CWN1c3RvbV9kaXZp
c29yOwoJaW50CWNvdW50OwoJdW5zaWduZWQgc2hvcnQJY2xvc2VfZGVsYXk7Cgl1bnNpZ25lZCBz
aG9ydAljbG9zaW5nX3dhaXQ7ICAKCXN0cnVjdCBhc3luY19pY291bnQJaWNvdW50OwkKCXN0cnVj
dCB0ZXJtaW9zCQlub3JtYWxfdGVybWlvczsKCXN0cnVjdCB0ZXJtaW9zCQljYWxsb3V0X3Rlcm1p
b3M7CglzdHJ1Y3QgYXN5bmNfc3RydWN0ICppbmZvOwp9OwpzdHJ1Y3QgYXN5bmNfc3RydWN0IHsK
CWludAkJCW1hZ2ljOwoJaW50CQkJcG9ydDsKCWludAkJCWh1YjY7CglpbnQJCQlmbGFnczsKCWlu
dAkJCXhtaXRfZmlmb19zaXplOwoJc3RydWN0IHNlcmlhbF9zdGF0ZQkqc3RhdGU7CglzdHJ1Y3Qg
dHR5X3N0cnVjdCAJKnR0eTsKCWludAkJCXJlYWRfc3RhdHVzX21hc2s7CglpbnQJCQlpZ25vcmVf
c3RhdHVzX21hc2s7CglpbnQJCQl0aW1lb3V0OwoJaW50CQkJcXVvdDsKCWludAkJCXhfY2hhcjsJ
IAoJaW50CQkJY2xvc2VfZGVsYXk7Cgl1bnNpZ25lZCBzaG9ydAkJY2xvc2luZ193YWl0OwoJdW5z
aWduZWQgc2hvcnQJCWNsb3Npbmdfd2FpdDI7CglpbnQJCQlJRVI7IAkgCglpbnQJCQlNQ1I7IAkg
Cgl1bnNpZ25lZCBsb25nCQlldmVudDsKCXVuc2lnbmVkIGxvbmcJCWxhc3RfYWN0aXZlOwoJaW50
CQkJbGluZTsKCWludAkJCWJsb2NrZWRfb3BlbjsgIAoJbG9uZwkJCXNlc3Npb247ICAKCWxvbmcJ
CQlwZ3JwOyAgCgl1bnNpZ25lZCBjaGFyIAkJKnhtaXRfYnVmOwoJaW50CQkJeG1pdF9oZWFkOwoJ
aW50CQkJeG1pdF90YWlsOwoJaW50CQkJeG1pdF9jbnQ7CglzdHJ1Y3QgdHFfc3RydWN0CXRxdWV1
ZTsKCXN0cnVjdCB3YWl0X3F1ZXVlCSpvcGVuX3dhaXQ7CglzdHJ1Y3Qgd2FpdF9xdWV1ZQkqY2xv
c2Vfd2FpdDsKCXN0cnVjdCB3YWl0X3F1ZXVlCSpkZWx0YV9tc3Jfd2FpdDsKCXN0cnVjdCBhc3lu
Y19zdHJ1Y3QJKm5leHRfcG9ydDsgIAoJc3RydWN0IGFzeW5jX3N0cnVjdAkqcHJldl9wb3J0Owp9
OwogCiAKIApzdHJ1Y3QgcnNfbXVsdGlwb3J0X3N0cnVjdCB7CglpbnQJCXBvcnQxOwoJdW5zaWdu
ZWQgY2hhcgltYXNrMSwgbWF0Y2gxOwoJaW50CQlwb3J0MjsKCXVuc2lnbmVkIGNoYXIJbWFzazIs
IG1hdGNoMjsKCWludAkJcG9ydDM7Cgl1bnNpZ25lZCBjaGFyCW1hc2szLCBtYXRjaDM7CglpbnQJ
CXBvcnQ0OwoJdW5zaWduZWQgY2hhcgltYXNrNCwgbWF0Y2g0OwoJaW50CQlwb3J0X21vbml0b3I7
Cn07CiMgMjYgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3R0eS5oIiAyCiAK
IAogCnN0cnVjdCBzY3JlZW5faW5mbyB7Cgl1bnNpZ25lZCBjaGFyICBvcmlnX3g7CQkJIAoJdW5z
aWduZWQgY2hhciAgb3JpZ195OwkJCSAKCXVuc2lnbmVkIHNob3J0IGRvbnR1c2UxOwkJIAoJdW5z
aWduZWQgc2hvcnQgb3JpZ192aWRlb19wYWdlOwkJIAoJdW5zaWduZWQgY2hhciAgb3JpZ192aWRl
b19tb2RlOwkJIAoJdW5zaWduZWQgY2hhciAgb3JpZ192aWRlb19jb2xzOwkJIAoJdW5zaWduZWQg
c2hvcnQgdW51c2VkMjsJCQkgCgl1bnNpZ25lZCBzaG9ydCBvcmlnX3ZpZGVvX2VnYV9ieDsJIAoJ
dW5zaWduZWQgc2hvcnQgdW51c2VkMzsJCQkgCgl1bnNpZ25lZCBjaGFyICBvcmlnX3ZpZGVvX2xp
bmVzOwkgCgl1bnNpZ25lZCBjaGFyICBvcmlnX3ZpZGVvX2lzVkdBOwkgCgl1bnNpZ25lZCBzaG9y
dCBvcmlnX3ZpZGVvX3BvaW50czsJIAoJIAoJdW5zaWduZWQgc2hvcnQgbGZiX3dpZHRoOwkJIAoJ
dW5zaWduZWQgc2hvcnQgbGZiX2hlaWdodDsJCSAKCXVuc2lnbmVkIHNob3J0IGxmYl9kZXB0aDsJ
CSAKCXVuc2lnbmVkIGxvbmcgIGxmYl9iYXNlOwkJIAoJdW5zaWduZWQgbG9uZyAgbGZiX3NpemU7
CQkgCgl1bnNpZ25lZCBzaG9ydCBkb250dXNlMiwgZG9udHVzZTM7CSAKCXVuc2lnbmVkIHNob3J0
IGxmYl9saW5lbGVuZ3RoOwkJIAoJdW5zaWduZWQgY2hhciAgcmVkX3NpemU7CQkgCgl1bnNpZ25l
ZCBjaGFyICByZWRfcG9zOwkJCSAKCXVuc2lnbmVkIGNoYXIgIGdyZWVuX3NpemU7CQkgCgl1bnNp
Z25lZCBjaGFyICBncmVlbl9wb3M7CQkgCgl1bnNpZ25lZCBjaGFyICBibHVlX3NpemU7CQkgCgl1
bnNpZ25lZCBjaGFyICBibHVlX3BvczsJCSAKCXVuc2lnbmVkIGNoYXIgIHJzdmRfc2l6ZTsJCSAK
CXVuc2lnbmVkIGNoYXIgIHJzdmRfcG9zOwkJIAoJdW5zaWduZWQgc2hvcnQgdmVzYXBtX3NlZzsJ
CSAKCXVuc2lnbmVkIHNob3J0IHZlc2FwbV9vZmY7CQkgCgl1bnNpZ25lZCBzaG9ydCBwYWdlczsJ
CQkgCgkJCQkJCSAKfTsKZXh0ZXJuIHN0cnVjdCBzY3JlZW5faW5mbyBzY3JlZW5faW5mbzsKIAog
CnN0cnVjdCB0dHlfZmxpcF9idWZmZXIgewoJc3RydWN0IHRxX3N0cnVjdCB0cXVldWU7CglzdHJ1
Y3Qgc2VtYXBob3JlIHB0eV9zZW07CgljaGFyCQkqY2hhcl9idWZfcHRyOwoJdW5zaWduZWQgY2hh
cgkqZmxhZ19idWZfcHRyOwoJaW50CQljb3VudDsKCWludAkJYnVmX251bTsKCXVuc2lnbmVkIGNo
YXIJY2hhcl9idWZbMiogNTEyIF07CgljaGFyCQlmbGFnX2J1ZlsyKiA1MTIgXTsKCXVuc2lnbmVk
IGNoYXIJc2xvcFs0XTsgIAp9OwogCiAKIApzdHJ1Y3QgdHR5X3N0cnVjdCB7CglpbnQJbWFnaWM7
CglzdHJ1Y3QgdHR5X2RyaXZlciBkcml2ZXI7CglzdHJ1Y3QgdHR5X2xkaXNjIGxkaXNjOwoJc3Ry
dWN0IHRlcm1pb3MgKnRlcm1pb3MsICp0ZXJtaW9zX2xvY2tlZDsKCWludCBwZ3JwOwoJaW50IHNl
c3Npb247CglrZGV2X3QJZGV2aWNlOwoJdW5zaWduZWQgbG9uZyBmbGFnczsKCWludCBjb3VudDsK
CXN0cnVjdCB3aW5zaXplIHdpbnNpemU7Cgl1bnNpZ25lZCBjaGFyIHN0b3BwZWQ6MSwgaHdfc3Rv
cHBlZDoxLCBmbG93X3N0b3BwZWQ6MSwgcGFja2V0OjE7Cgl1bnNpZ25lZCBjaGFyIGxvd19sYXRl
bmN5OjEsIHdhcm5lZDoxOwoJdW5zaWduZWQgY2hhciBjdHJsX3N0YXR1czsKCXN0cnVjdCB0dHlf
c3RydWN0ICpsaW5rOwoJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luYzsKCXN0cnVjdCB0dHlf
ZmxpcF9idWZmZXIgZmxpcDsKCWludCBtYXhfZmxpcF9jbnQ7CglpbnQgYWx0X3NwZWVkOwkJIAoJ
c3RydWN0IHdhaXRfcXVldWUgKndyaXRlX3dhaXQ7CglzdHJ1Y3Qgd2FpdF9xdWV1ZSAqcmVhZF93
YWl0OwoJc3RydWN0IHRxX3N0cnVjdCB0cV9oYW5ndXA7Cgl2b2lkICpkaXNjX2RhdGE7Cgl2b2lk
ICpkcml2ZXJfZGF0YTsKCQoJIAoJdW5zaWduZWQgaW50IGNvbHVtbjsKCXVuc2lnbmVkIGNoYXIg
bG5leHQ6MSwgZXJhc2luZzoxLCByYXc6MSwgcmVhbF9yYXc6MSwgaWNhbm9uOjE7Cgl1bnNpZ25l
ZCBjaGFyIGNsb3Npbmc6MTsKCXVuc2lnbmVkIHNob3J0IG1pbmltdW1fdG9fd2FrZTsKCXVuc2ln
bmVkIG92ZXJydW5fdGltZTsKCWludCBudW1fb3ZlcnJ1bjsKCXVuc2lnbmVkIGxvbmcgcHJvY2Vz
c19jaGFyX21hcFsyNTYvKDgqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKV07CgljaGFyICpyZWFkX2J1
ZjsKCWludCByZWFkX2hlYWQ7CglpbnQgcmVhZF90YWlsOwoJaW50IHJlYWRfY250OwoJdW5zaWdu
ZWQgbG9uZyByZWFkX2ZsYWdzWzQwOTYgLyg4KnNpemVvZih1bnNpZ25lZCBsb25nKSldOwoJaW50
IGNhbm9uX2RhdGE7Cgl1bnNpZ25lZCBsb25nIGNhbm9uX2hlYWQ7Cgl1bnNpZ25lZCBpbnQgY2Fu
b25fY29sdW1uOwoJc3RydWN0IHNlbWFwaG9yZSBhdG9taWNfcmVhZDsKCXN0cnVjdCBzZW1hcGhv
cmUgYXRvbWljX3dyaXRlOwp9OwogCiAKZXh0ZXJuIHZvaWQgdHR5X3dyaXRlX2ZsdXNoKHN0cnVj
dCB0dHlfc3RydWN0ICopOwpleHRlcm4gc3RydWN0IHRlcm1pb3MgdHR5X3N0ZF90ZXJtaW9zOwpl
eHRlcm4gc3RydWN0IHR0eV9zdHJ1Y3QgKiByZWRpcmVjdDsKZXh0ZXJuIHN0cnVjdCB0dHlfbGRp
c2MgbGRpc2NzW107CmV4dGVybiBpbnQgZmdfY29uc29sZSwgbGFzdF9jb25zb2xlLCB3YW50X2Nv
bnNvbGU7CmV4dGVybiBpbnQga21zZ19yZWRpcmVjdDsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29u
X2luaXQodW5zaWduZWQgbG9uZyk7CmV4dGVybiBpbnQgcnNfaW5pdCh2b2lkKTsKZXh0ZXJuIGlu
dCBscF9pbml0KHZvaWQpOwpleHRlcm4gaW50IHB0eV9pbml0KHZvaWQpOwpleHRlcm4gaW50IHR0
eV9pbml0KHZvaWQpOwpleHRlcm4gaW50IG14c2VyX2luaXQodm9pZCk7CmV4dGVybiBpbnQgbW94
YV9pbml0KHZvaWQpOwpleHRlcm4gaW50IGlwMl9pbml0KHZvaWQpOwpleHRlcm4gaW50IHBjeGVf
aW5pdCh2b2lkKTsKZXh0ZXJuIGludCBwY19pbml0KHZvaWQpOwpleHRlcm4gaW50IHZjc19pbml0
KHZvaWQpOwpleHRlcm4gaW50IHJwX2luaXQodm9pZCk7CmV4dGVybiBpbnQgY3lfaW5pdCh2b2lk
KTsKZXh0ZXJuIGludCBzdGxfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBzdGxpX2luaXQodm9pZCk7
CmV4dGVybiBpbnQgcmlzY29tOF9pbml0KHZvaWQpOwpleHRlcm4gaW50IHNwZWNpYWxpeF9pbml0
KHZvaWQpOwpleHRlcm4gaW50IGVzcHNlcmlhbF9pbml0KHZvaWQpOwpleHRlcm4gaW50IG1hY3Nl
cmlhbF9pbml0KHZvaWQpOwpleHRlcm4gaW50IHR0eV9wYXJhbm9pYV9jaGVjayhzdHJ1Y3QgdHR5
X3N0cnVjdCAqdHR5LCBrZGV2X3QgZGV2aWNlLAoJCQkgICAgICBjb25zdCBjaGFyICpyb3V0aW5l
KTsKZXh0ZXJuIGNoYXIgKnR0eV9uYW1lKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgKmJ1
Zik7CmV4dGVybiB2b2lkIHR0eV93YWl0X3VudGlsX3NlbnQoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0
dHksIGxvbmcgdGltZW91dCk7CmV4dGVybiBpbnQgdHR5X2NoZWNrX2NoYW5nZShzdHJ1Y3QgdHR5
X3N0cnVjdCAqIHR0eSk7CmV4dGVybiB2b2lkIHN0b3BfdHR5KHN0cnVjdCB0dHlfc3RydWN0ICog
dHR5KTsKZXh0ZXJuIHZvaWQgc3RhcnRfdHR5KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKZXh0
ZXJuIGludCB0dHlfcmVnaXN0ZXJfbGRpc2MoaW50IGRpc2MsIHN0cnVjdCB0dHlfbGRpc2MgKm5l
d19sZGlzYyk7CmV4dGVybiBpbnQgdHR5X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdHR5X2RyaXZl
ciAqZHJpdmVyKTsKZXh0ZXJuIGludCB0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHR0eV9k
cml2ZXIgKmRyaXZlcik7CmV4dGVybiBpbnQgdHR5X3JlYWRfcmF3X2RhdGEoc3RydWN0IHR0eV9z
dHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciAqYnVmcCwKCQkJICAgICBpbnQgYnVmbGVuKTsKZXh0
ZXJuIHZvaWQgdHR5X3dyaXRlX21lc3NhZ2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciAq
bXNnKTsKZXh0ZXJuIGludCBpc19vcnBoYW5lZF9wZ3JwKGludCBwZ3JwKTsKZXh0ZXJuIGludCBp
c19pZ25vcmVkKGludCBzaWcpOwpleHRlcm4gaW50IHR0eV9zaWduYWwoaW50IHNpZywgc3RydWN0
IHR0eV9zdHJ1Y3QgKnR0eSk7CmV4dGVybiB2b2lkIHR0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1
Y3QgKiB0dHkpOwpleHRlcm4gdm9pZCB0dHlfdmhhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0
eSk7CmV4dGVybiB2b2lkIHR0eV91bmhhbmd1cChzdHJ1Y3QgZmlsZSAqZmlscCk7CmV4dGVybiBp
bnQgdHR5X2h1bmdfdXBfcChzdHJ1Y3QgZmlsZSAqIGZpbHApOwpleHRlcm4gdm9pZCBkb19TQUso
c3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CmV4dGVybiB2b2lkIGRpc2Fzc29jaWF0ZV9jdHR5KGlu
dCBwcml2KTsKZXh0ZXJuIHZvaWQgdHR5X2ZsaXBfYnVmZmVyX3B1c2goc3RydWN0IHR0eV9zdHJ1
Y3QgKnR0eSk7CmV4dGVybiBpbnQgdHR5X2dldF9iYXVkX3JhdGUoc3RydWN0IHR0eV9zdHJ1Y3Qg
KnR0eSk7CiAKZXh0ZXJuIHN0cnVjdCB0dHlfbGRpc2MgdHR5X2xkaXNjX05fVFRZOwogCmV4dGVy
biBpbnQgbl90dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICog
ZmlsZSwKCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCmV4
dGVybiBsb25nIHNlcmlhbF9jb25zb2xlX2luaXQobG9uZyBrbWVtX3N0YXJ0LCBsb25nIGttZW1f
ZW5kKTsKIAogCmV4dGVybiBpbnQgcGN4ZV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0
cnVjdCBmaWxlICpmaWxwKTsKIApleHRlcm4gdm9pZCBjb25zb2xlX3ByaW50KGNvbnN0IGNoYXIg
Kik7CiAKZXh0ZXJuIGludCB2dF9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qg
ZmlsZSAqIGZpbGUsCgkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsK
IyAyMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEg
Ii9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3NlbS5oIiAxCiMgMSAiL2hvbWUv
anc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvaXBjLmgiIDEKc3RydWN0IGlwY19wZXJtCnsK
CV9fa2VybmVsX2tleV90CWtleTsKCV9fa2VybmVsX3VpZF90CXVpZDsKCV9fa2VybmVsX2dpZF90
CWdpZDsKCV9fa2VybmVsX3VpZF90CWN1aWQ7CglfX2tlcm5lbF9naWRfdAljZ2lkOwoJX19rZXJu
ZWxfbW9kZV90CW1vZGU7IAoJdW5zaWduZWQgc2hvcnQJc2VxOwp9OwogCiAKICAgCiAKIAojIDQg
Ii9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3NlbS5oIiAyCiAKIAogCiAKc3Ry
dWN0IHNlbWlkX2RzIHsKCXN0cnVjdCBpcGNfcGVybQlzZW1fcGVybTsJCSAKCV9fa2VybmVsX3Rp
bWVfdAlzZW1fb3RpbWU7CQkgCglfX2tlcm5lbF90aW1lX3QJc2VtX2N0aW1lOwkJIAoJc3RydWN0
IHNlbQkqc2VtX2Jhc2U7CQkgCglzdHJ1Y3Qgc2VtX3F1ZXVlICpzZW1fcGVuZGluZzsJCSAKCXN0
cnVjdCBzZW1fcXVldWUgKipzZW1fcGVuZGluZ19sYXN0OwkgCglzdHJ1Y3Qgc2VtX3VuZG8JKnVu
ZG87CQkJIAoJdW5zaWduZWQgc2hvcnQJc2VtX25zZW1zOwkJIAp9OwogCnN0cnVjdCBzZW1idWYg
ewoJdW5zaWduZWQgc2hvcnQgIHNlbV9udW07CSAKCXNob3J0CQlzZW1fb3A7CQkgCglzaG9ydAkJ
c2VtX2ZsZzsJIAp9OwogCnVuaW9uIHNlbXVuIHsKCWludCB2YWw7CQkJIAoJc3RydWN0IHNlbWlk
X2RzICpidWY7CQkgCgl1bnNpZ25lZCBzaG9ydCAqYXJyYXk7CQkgCglzdHJ1Y3Qgc2VtaW5mbyAq
X19idWY7CQkgCgl2b2lkICpfX3BhZDsKfTsKc3RydWN0ICBzZW1pbmZvIHsKCWludCBzZW1tYXA7
CglpbnQgc2VtbW5pOwoJaW50IHNlbW1uczsKCWludCBzZW1tbnU7CglpbnQgc2VtbXNsOwoJaW50
IHNlbW9wbTsKCWludCBzZW11bWU7CglpbnQgc2VtdXN6OwoJaW50IHNlbXZteDsKCWludCBzZW1h
ZW07Cn07CiAKIApzdHJ1Y3Qgc2VtIHsKCWludAlzZW12YWw7CQkgCglpbnQJc2VtcGlkOwkJIAp9
OwogCnN0cnVjdCBzZW1fcXVldWUgewoJc3RydWN0IHNlbV9xdWV1ZSAqCW5leHQ7CSAgCglzdHJ1
Y3Qgc2VtX3F1ZXVlICoqCXByZXY7CSAgCglzdHJ1Y3Qgd2FpdF9xdWV1ZSAqCXNsZWVwZXI7ICAK
CXN0cnVjdCBzZW1fdW5kbyAqCXVuZG87CSAgCglpbnQgICAgCQkJcGlkOwkgIAoJaW50ICAgIAkJ
CXN0YXR1czsJICAKCXN0cnVjdCBzZW1pZF9kcyAqCXNtYTsJICAKCXN0cnVjdCBzZW1idWYgKgkJ
c29wczsJICAKCWludAkJCW5zb3BzOwkgIAoJaW50CQkJYWx0ZXI7CSAgCn07CiAKc3RydWN0IHNl
bV91bmRvIHsKCXN0cnVjdCBzZW1fdW5kbyAqCXByb2NfbmV4dDsJIAoJc3RydWN0IHNlbV91bmRv
ICoJaWRfbmV4dDsJIAoJaW50CQkJc2VtaWQ7CQkgCglzaG9ydCAqCQkJc2VtYWRqOwkJIAp9Owog
IF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSAgaW50IHN5c19zZW1nZXQgKGtleV90IGtleSwg
aW50IG5zZW1zLCBpbnQgc2VtZmxnKTsKICBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgIGlu
dCBzeXNfc2Vtb3AgKGludCBzZW1pZCwgc3RydWN0IHNlbWJ1ZiAqc29wcywgdW5zaWduZWQgbnNv
cHMpOwogIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSAgaW50IHN5c19zZW1jdGwgKGludCBz
ZW1pZCwgaW50IHNlbW51bSwgaW50IGNtZCwgdW5pb24gc2VtdW4gYXJnKTsKIyAyMiAiL2hvbWUv
anc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi9ob21lL2p3NS90
bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9s
aW51eDIyL2luY2x1ZGUvYXNtL3NpZ25hbC5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIy
L2luY2x1ZGUvYXNtL2w0YXJjaC9zaWduYWwuaCIgMQogCiMgMSAiL2hvbWUvanc1L3RtcC9saW51
eDIyL2luY2x1ZGUvYXNtLWkzODYvc2lnbmFsLmgiIDEKIApzdHJ1Y3Qgc2lnaW5mbzsKIAp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgb2xkX3NpZ3NldF90OwkJIAp0eXBlZGVmIHN0cnVjdCB7Cgl1bnNp
Z25lZCBsb25nIHNpZ1soNjQgIC8gMzIgKSBdOwp9IHNpZ3NldF90OwogCiAKIAogCiAKIAp0eXBl
ZGVmIHZvaWQgKCpfX3NpZ2hhbmRsZXJfdCkoaW50KTsKc3RydWN0IG9sZF9zaWdhY3Rpb24gewoJ
X19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKCW9sZF9zaWdzZXRfdCBzYV9tYXNrOwoJdW5zaWdu
ZWQgbG9uZyBzYV9mbGFnczsKCXZvaWQgKCpzYV9yZXN0b3Jlcikodm9pZCk7Cn07CnN0cnVjdCBz
aWdhY3Rpb24gewoJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKCXVuc2lnbmVkIGxvbmcgc2Ff
ZmxhZ3M7Cgl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOwoJc2lnc2V0X3Qgc2FfbWFzazsJCSAK
fTsKc3RydWN0IGtfc2lnYWN0aW9uIHsKCXN0cnVjdCBzaWdhY3Rpb24gc2E7Cn07CiMgMTY4ICIv
aG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20taTM4Ni9zaWduYWwuaCIKdHlwZWRlZiBz
dHJ1Y3Qgc2lnYWx0c3RhY2sgewoJdm9pZCAqc3Nfc3A7CglpbnQgc3NfZmxhZ3M7CglzaXplX3Qg
c3Nfc2l6ZTsKfSBzdGFja190OwojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2Fz
bS9zaWdjb250ZXh0LmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20v
bDRhcmNoL3NpZ2NvbnRleHQuaCIgMQogCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1
ZGUvYXNtLWkzODYvc2lnY29udGV4dC5oIiAxCiAKc3RydWN0IF9mcHJlZyB7Cgl1bnNpZ25lZCBz
aG9ydCBzaWduaWZpY2FuZFs0XTsKCXVuc2lnbmVkIHNob3J0IGV4cG9uZW50Owp9OwpzdHJ1Y3Qg
X2Zwc3RhdGUgewoJdW5zaWduZWQgbG9uZyAJY3csCgkJCXN3LAoJCQl0YWcsCgkJCWlwb2ZmLAoJ
CQljc3NlbCwKCQkJZGF0YW9mZiwKCQkJZGF0YXNlbDsKCXN0cnVjdCBfZnByZWcJX3N0WzhdOwoJ
dW5zaWduZWQgbG9uZwlzdGF0dXM7Cn07CnN0cnVjdCBzaWdjb250ZXh0IHsKCXVuc2lnbmVkIHNo
b3J0IGdzLCBfX2dzaDsKCXVuc2lnbmVkIHNob3J0IGZzLCBfX2ZzaDsKCXVuc2lnbmVkIHNob3J0
IGVzLCBfX2VzaDsKCXVuc2lnbmVkIHNob3J0IGRzLCBfX2RzaDsKCXVuc2lnbmVkIGxvbmcgZWRp
OwoJdW5zaWduZWQgbG9uZyBlc2k7Cgl1bnNpZ25lZCBsb25nIGVicDsKCXVuc2lnbmVkIGxvbmcg
ZXNwOwoJdW5zaWduZWQgbG9uZyBlYng7Cgl1bnNpZ25lZCBsb25nIGVkeDsKCXVuc2lnbmVkIGxv
bmcgZWN4OwoJdW5zaWduZWQgbG9uZyBlYXg7Cgl1bnNpZ25lZCBsb25nIHRyYXBubzsKCXVuc2ln
bmVkIGxvbmcgZXJyOwoJdW5zaWduZWQgbG9uZyBlaXA7Cgl1bnNpZ25lZCBzaG9ydCBjcywgX19j
c2g7Cgl1bnNpZ25lZCBsb25nIGVmbGFnczsKCXVuc2lnbmVkIGxvbmcgZXNwX2F0X3NpZ25hbDsK
CXVuc2lnbmVkIHNob3J0IHNzLCBfX3NzaDsKCXN0cnVjdCBfZnBzdGF0ZSAqIGZwc3RhdGU7Cgl1
bnNpZ25lZCBsb25nIG9sZG1hc2s7Cgl1bnNpZ25lZCBsb25nIGNyMjsKfTsKIyA1ICIvaG9tZS9q
dzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL3NpZ2NvbnRleHQuaCIgMgojIDQgIi9o
b21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgiIDIKIyAxNzcgIi9o
b21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS1pMzg2L3NpZ25hbC5oIiAyCmV4dGVybiBf
X2lubGluZV9fIHZvaWQgc2lnYWRkc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQp7CglfX2Fz
bV9fKCJidHNsICUxLCUwIiA6ICI9bSIoKnNldCkgOiAiaXIiKF9zaWcgLSAxKSA6ICJjYyIpOwp9
CmV4dGVybiBfX2lubGluZV9fIHZvaWQgc2lnZGVsc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2ln
KQp7CglfX2FzbV9fKCJidHJsICUxLCUwIiA6ICI9bSIoKnNldCkgOiAiaXIiKF9zaWcgLSAxKSA6
ICJjYyIpOwp9CmV4dGVybiBfX2lubGluZV9fIGludCBfX2NvbnN0X3NpZ2lzbWVtYmVyKHNpZ3Nl
dF90ICpzZXQsIGludCBfc2lnKQp7Cgl1bnNpZ25lZCBsb25nIHNpZyA9IF9zaWcgLSAxOwoJcmV0
dXJuIDEgJiAoc2V0LT5zaWdbc2lnIC8gMzIgXSA+PiAoc2lnICUgMzIgKSk7Cn0KZXh0ZXJuIF9f
aW5saW5lX18gaW50IF9fZ2VuX3NpZ2lzbWVtYmVyKHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQp7
CglpbnQgcmV0OwoJX19hc21fXygiYnRsICUyLCUxXG5cdHNiYmwgJTAsJTAiCgkJOiAiPXIiKHJl
dCkgOiAibSIoKnNldCksICJpciIoX3NpZy0xKSA6ICJjYyIpOwoJcmV0dXJuIHJldDsKfQpleHRl
cm4gX19pbmxpbmVfXyBpbnQgc2lnZmluZGlud29yZCh1bnNpZ25lZCBsb25nIHdvcmQpCnsKCV9f
YXNtX18oImJzZmwgJTEsJTAiIDogIj1yIih3b3JkKSA6ICJybSIod29yZCkgOiAiY2MiKTsKCXJl
dHVybiB3b3JkOwp9CiMgNSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2w0YXJj
aC9zaWduYWwuaCIgMgojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9zaWdu
YWwuaCIgMgojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3NpZ25hbC5o
IiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL3NpZ2luZm8uaCIgMQoj
IDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvc2lnaW5mby5oIiAx
CiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtLWkzODYvc2lnaW5mby5oIiAx
CiAKdHlwZWRlZiB1bmlvbiBzaWd2YWwgewoJaW50IHNpdmFsX2ludDsKCXZvaWQgKnNpdmFsX3B0
cjsKfSBzaWd2YWxfdDsKdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7CglpbnQgc2lfc2lnbm87Cglp
bnQgc2lfZXJybm87CglpbnQgc2lfY29kZTsKCXVuaW9uIHsKCQlpbnQgX3BhZFsoKDEyOCAvc2l6
ZW9mKGludCkpIC0gMykgXTsKCQkgCgkJc3RydWN0IHsKCQkJcGlkX3QgX3BpZDsJCSAKCQkJdWlk
X3QgX3VpZDsJCSAKCQl9IF9raWxsOwoJCSAKCQlzdHJ1Y3QgewoJCQl1bnNpZ25lZCBpbnQgX3Rp
bWVyMTsKCQkJdW5zaWduZWQgaW50IF90aW1lcjI7CgkJfSBfdGltZXI7CgkJIAoJCXN0cnVjdCB7
CgkJCXBpZF90IF9waWQ7CQkgCgkJCXVpZF90IF91aWQ7CQkgCgkJCXNpZ3ZhbF90IF9zaWd2YWw7
CgkJfSBfcnQ7CgkJIAoJCXN0cnVjdCB7CgkJCXBpZF90IF9waWQ7CQkgCgkJCXVpZF90IF91aWQ7
CQkgCgkJCWludCBfc3RhdHVzOwkJIAoJCQljbG9ja190IF91dGltZTsKCQkJY2xvY2tfdCBfc3Rp
bWU7CgkJfSBfc2lnY2hsZDsKCQkgCgkJc3RydWN0IHsKCQkJdm9pZCAqX2FkZHI7ICAKCQl9IF9z
aWdmYXVsdDsKCQkgCgkJc3RydWN0IHsKCQkJaW50IF9iYW5kOwkgCgkJCWludCBfZmQ7CgkJfSBf
c2lncG9sbDsKCX0gX3NpZmllbGRzOwp9IHNpZ2luZm9fdDsKIAogCiAKIAogCiAKIAogCiAKIAp0
eXBlZGVmIHN0cnVjdCBzaWdldmVudCB7CglzaWd2YWxfdCBzaWdldl92YWx1ZTsKCWludCBzaWdl
dl9zaWdubzsKCWludCBzaWdldl9ub3RpZnk7Cgl1bmlvbiB7CgkJaW50IF9wYWRbKCg2NCAvc2l6
ZW9mKGludCkpIC0gMykgXTsKCQlzdHJ1Y3QgewoJCQl2b2lkICgqX2Z1bmN0aW9uKShzaWd2YWxf
dCk7CgkJCXZvaWQgKl9hdHRyaWJ1dGU7CSAKCQl9IF9zaWdldl90aHJlYWQ7Cgl9IF9zaWdldl91
bjsKfSBzaWdldmVudF90OwojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9s
NGFyY2gvc2lnaW5mby5oIiAyCiMgNCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNt
L3NpZ2luZm8uaCIgMgojIDUgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3Np
Z25hbC5oIiAyCiAKc3RydWN0IHNpZ25hbF9xdWV1ZQp7CglzdHJ1Y3Qgc2lnbmFsX3F1ZXVlICpu
ZXh0OwoJc2lnaW5mb190IGluZm87Cn07CiAKIyA2MSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2lu
Y2x1ZGUvbGludXgvc2lnbmFsLmgiCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUv
bGludXgvc3RyaW5nLmgiIDEKZXh0ZXJuIGNoYXIgKiBfX19zdHJ0b2s7CmV4dGVybiBjaGFyICog
c3RyY3B5KGNoYXIgKixjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqIHN0cm5jcHkoY2hhciAq
LGNvbnN0IGNoYXIgKiwgX19rZXJuZWxfc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKiBzdHJjYXQoY2hh
ciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqIHN0cm5jYXQoY2hhciAqLCBjb25zdCBj
aGFyICosIF9fa2VybmVsX3NpemVfdCk7CmV4dGVybiBjaGFyICogc3RyY2hyKGNvbnN0IGNoYXIg
KixpbnQpOwpleHRlcm4gY2hhciAqIHN0cnJjaHIoY29uc3QgY2hhciAqLGludCk7CmV4dGVybiBj
aGFyICogc3RycGJyayhjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKiBz
dHJ0b2soY2hhciAqLGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICogc3Ryc3RyKGNvbnN0IGNo
YXIgKixjb25zdCBjaGFyICopOwpleHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cmxlbihjb25zdCBj
aGFyICopOwpleHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cm5sZW4oY29uc3QgY2hhciAqLF9fa2Vy
bmVsX3NpemVfdCk7CmV4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3Ryc3BuKGNvbnN0IGNoYXIgKixj
b25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0cmNtcChjb25zdCBjaGFyICosY29uc3QgY2hhciAq
KTsKZXh0ZXJuIGludCBzdHJuY21wKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICosX19rZXJuZWxf
c2l6ZV90KTsKZXh0ZXJuIGludCBzdHJuaWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg
X19rZXJuZWxfc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKiBtZW1zZXQodm9pZCAqLGludCxfX2tlcm5l
bF9zaXplX3QpOwpleHRlcm4gdm9pZCAqIG1lbWNweSh2b2lkICosY29uc3Qgdm9pZCAqLF9fa2Vy
bmVsX3NpemVfdCk7CmV4dGVybiB2b2lkICogbWVtbW92ZSh2b2lkICosY29uc3Qgdm9pZCAqLF9f
a2VybmVsX3NpemVfdCk7CmV4dGVybiB2b2lkICogbWVtc2Nhbih2b2lkICosaW50LF9fa2VybmVs
X3NpemVfdCk7CmV4dGVybiBpbnQgbWVtY21wKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICosX19r
ZXJuZWxfc2l6ZV90KTsKIAojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9z
dHJpbmcuaCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gv
c3RyaW5nLmgiIDEKIAojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS1pMzg2
L3N0cmluZy5oIiAxCiAKIApleHRlcm4gaW5saW5lIGNoYXIgKiBzdHJjcHkoY2hhciAqIGRlc3Qs
Y29uc3QgY2hhciAqc3JjKQp7CmludCBkMCwgZDEsIGQyOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygK
CSJjbGRcbiIKCSIxOlx0bG9kc2Jcblx0IgoJInN0b3NiXG5cdCIKCSJ0ZXN0YiAlJWFsLCUlYWxc
blx0IgoJImpuZSAxYiIKCTogIj0mUyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mYSIgKGQyKQoJOiIw
IiAoc3JjKSwiMSIgKGRlc3QpIDogIm1lbW9yeSIpOwpyZXR1cm4gZGVzdDsKfQpleHRlcm4gaW5s
aW5lIGNoYXIgKiBzdHJuY3B5KGNoYXIgKiBkZXN0LGNvbnN0IGNoYXIgKnNyYyxzaXplX3QgY291
bnQpCnsKaW50IGQwLCBkMSwgZDIsIGQzOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKCSJjbGRcbiIK
CSIxOlx0ZGVjbCAlMlxuXHQiCgkianMgMmZcblx0IgoJImxvZHNiXG5cdCIKCSJzdG9zYlxuXHQi
CgkidGVzdGIgJSVhbCwlJWFsXG5cdCIKCSJqbmUgMWJcblx0IgoJInJlcFxuXHQiCgkic3Rvc2Jc
biIKCSIyOiIKCTogIj0mUyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mYyIgKGQyKSwgIj0mYSIgKGQz
KQoJOiIwIiAoc3JjKSwiMSIgKGRlc3QpLCIyIiAoY291bnQpIDogIm1lbW9yeSIpOwpyZXR1cm4g
ZGVzdDsKfQpleHRlcm4gaW5saW5lIGNoYXIgKiBzdHJjYXQoY2hhciAqIGRlc3QsY29uc3QgY2hh
ciAqIHNyYykKewppbnQgZDAsIGQxLCBkMiwgZDM7Cl9fYXNtX18gX192b2xhdGlsZV9fKAoJImNs
ZFxuXHQiCgkicmVwbmVcblx0IgoJInNjYXNiXG5cdCIKCSJkZWNsICUxXG4iCgkiMTpcdGxvZHNi
XG5cdCIKCSJzdG9zYlxuXHQiCgkidGVzdGIgJSVhbCwlJWFsXG5cdCIKCSJqbmUgMWIiCgk6ICI9
JlMiIChkMCksICI9JkQiIChkMSksICI9JmEiIChkMiksICI9JmMiIChkMykKCTogIjAiIChzcmMp
LCAiMSIgKGRlc3QpLCAiMiIgKDApLCAiMyIgKDB4ZmZmZmZmZmYpOiJtZW1vcnkiKTsKcmV0dXJu
IGRlc3Q7Cn0KZXh0ZXJuIGlubGluZSBjaGFyICogc3RybmNhdChjaGFyICogZGVzdCxjb25zdCBj
aGFyICogc3JjLHNpemVfdCBjb3VudCkKewppbnQgZDAsIGQxLCBkMiwgZDM7Cl9fYXNtX18gX192
b2xhdGlsZV9fKAoJImNsZFxuXHQiCgkicmVwbmVcblx0IgoJInNjYXNiXG5cdCIKCSJkZWNsICUx
XG5cdCIKCSJtb3ZsICU4LCUzXG4iCgkiMTpcdGRlY2wgJTNcblx0IgoJImpzIDJmXG5cdCIKCSJs
b2RzYlxuXHQiCgkic3Rvc2Jcblx0IgoJInRlc3RiICUlYWwsJSVhbFxuXHQiCgkiam5lIDFiXG4i
CgkiMjpcdHhvcmwgJTIsJTJcblx0IgoJInN0b3NiIgoJOiAiPSZTIiAoZDApLCAiPSZEIiAoZDEp
LCAiPSZhIiAoZDIpLCAiPSZjIiAoZDMpCgk6ICIwIiAoc3JjKSwiMSIgKGRlc3QpLCIyIiAoMCks
IjMiICgweGZmZmZmZmZmKSwgImciIChjb3VudCkKCTogIm1lbW9yeSIpOwpyZXR1cm4gZGVzdDsK
fQpleHRlcm4gaW5saW5lIGludCBzdHJjbXAoY29uc3QgY2hhciAqIGNzLGNvbnN0IGNoYXIgKiBj
dCkKewppbnQgZDAsIGQxOwpyZWdpc3RlciBpbnQgX19yZXM7Cl9fYXNtX18gX192b2xhdGlsZV9f
KAoJImNsZFxuIgoJIjE6XHRsb2RzYlxuXHQiCgkic2Nhc2Jcblx0IgoJImpuZSAyZlxuXHQiCgki
dGVzdGIgJSVhbCwlJWFsXG5cdCIKCSJqbmUgMWJcblx0IgoJInhvcmwgJSVlYXgsJSVlYXhcblx0
IgoJImptcCAzZlxuIgoJIjI6XHRzYmJsICUlZWF4LCUlZWF4XG5cdCIKCSJvcmIgJDEsJSVhbFxu
IgoJIjM6IgoJOiI9YSIgKF9fcmVzKSwgIj0mUyIgKGQwKSwgIj0mRCIgKGQxKQoJCSAgICAgOiIx
IiAoY3MpLCIyIiAoY3QpKTsKcmV0dXJuIF9fcmVzOwp9CmV4dGVybiBpbmxpbmUgaW50IHN0cm5j
bXAoY29uc3QgY2hhciAqIGNzLGNvbnN0IGNoYXIgKiBjdCxzaXplX3QgY291bnQpCnsKcmVnaXN0
ZXIgaW50IF9fcmVzOwppbnQgZDAsIGQxLCBkMjsKX19hc21fXyBfX3ZvbGF0aWxlX18oCgkiY2xk
XG4iCgkiMTpcdGRlY2wgJTNcblx0IgoJImpzIDJmXG5cdCIKCSJsb2RzYlxuXHQiCgkic2Nhc2Jc
blx0IgoJImpuZSAzZlxuXHQiCgkidGVzdGIgJSVhbCwlJWFsXG5cdCIKCSJqbmUgMWJcbiIKCSIy
Olx0eG9ybCAlJWVheCwlJWVheFxuXHQiCgkiam1wIDRmXG4iCgkiMzpcdHNiYmwgJSVlYXgsJSVl
YXhcblx0IgoJIm9yYiAkMSwlJWFsXG4iCgkiNDoiCgkJICAgICA6Ij1hIiAoX19yZXMpLCAiPSZT
IiAoZDApLCAiPSZEIiAoZDEpLCAiPSZjIiAoZDIpCgkJICAgICA6IjEiIChjcyksIjIiIChjdCks
IjMiIChjb3VudCkpOwpyZXR1cm4gX19yZXM7Cn0KZXh0ZXJuIGlubGluZSBjaGFyICogc3RyY2hy
KGNvbnN0IGNoYXIgKiBzLCBpbnQgYykKewppbnQgZDA7CnJlZ2lzdGVyIGNoYXIgKiBfX3JlczsK
X19hc21fXyBfX3ZvbGF0aWxlX18oCgkiY2xkXG5cdCIKCSJtb3ZiICUlYWwsJSVhaFxuIgoJIjE6
XHRsb2RzYlxuXHQiCgkiY21wYiAlJWFoLCUlYWxcblx0IgoJImplIDJmXG5cdCIKCSJ0ZXN0YiAl
JWFsLCUlYWxcblx0IgoJImpuZSAxYlxuXHQiCgkibW92bCAkMSwlMVxuIgoJIjI6XHRtb3ZsICUx
LCUwXG5cdCIKCSJkZWNsICUwIgoJOiI9YSIgKF9fcmVzKSwgIj0mUyIgKGQwKSA6ICIxIiAocyks
IjAiIChjKSk7CnJldHVybiBfX3JlczsKfQpleHRlcm4gaW5saW5lIGNoYXIgKiBzdHJyY2hyKGNv
bnN0IGNoYXIgKiBzLCBpbnQgYykKewppbnQgZDAsIGQxOwpyZWdpc3RlciBjaGFyICogX19yZXM7
Cl9fYXNtX18gX192b2xhdGlsZV9fKAoJImNsZFxuXHQiCgkibW92YiAlJWFsLCUlYWhcbiIKCSIx
Olx0bG9kc2Jcblx0IgoJImNtcGIgJSVhaCwlJWFsXG5cdCIKCSJqbmUgMmZcblx0IgoJImxlYWwg
LTEoJSVlc2kpLCUwXG4iCgkiMjpcdHRlc3RiICUlYWwsJSVhbFxuXHQiCgkiam5lIDFiIgoJOiI9
ZyIgKF9fcmVzKSwgIj0mUyIgKGQwKSwgIj0mYSIgKGQxKSA6IjAiICgwKSwiMSIgKHMpLCIyIiAo
YykpOwpyZXR1cm4gX19yZXM7Cn0KZXh0ZXJuIGlubGluZSBzaXplX3Qgc3RybGVuKGNvbnN0IGNo
YXIgKiBzKQp7CmludCBkMDsKcmVnaXN0ZXIgaW50IF9fcmVzOwpfX2FzbV9fIF9fdm9sYXRpbGVf
XygKCSJjbGRcblx0IgoJInJlcG5lXG5cdCIKCSJzY2FzYlxuXHQiCgkibm90bCAlMFxuXHQiCgki
ZGVjbCAlMCIKCToiPWMiIChfX3JlcyksICI9JkQiIChkMCkgOiIxIiAocyksImEiICgwKSwgIjAi
ICgweGZmZmZmZmZmKSk7CnJldHVybiBfX3JlczsKfQpleHRlcm4gaW5saW5lIHZvaWQgKiBfX21l
bWNweSh2b2lkICogdG8sIGNvbnN0IHZvaWQgKiBmcm9tLCBzaXplX3QgbikKewppbnQgZDAsIGQx
LCBkMjsKX19hc21fXyBfX3ZvbGF0aWxlX18oCgkiY2xkXG5cdCIKCSJyZXAgOyBtb3ZzbFxuXHQi
CgkidGVzdGIgJDIsJWI0XG5cdCIKCSJqZSAxZlxuXHQiCgkibW92c3dcbiIKCSIxOlx0dGVzdGIg
JDEsJWI0XG5cdCIKCSJqZSAyZlxuXHQiCgkibW92c2JcbiIKCSIyOiIKCTogIj0mYyIgKGQwKSwg
Ij0mRCIgKGQxKSwgIj0mUyIgKGQyKQoJOiIwIiAobi80KSwgInEiIChuKSwiMSIgKChsb25nKSB0
byksIjIiICgobG9uZykgZnJvbSkKCTogIm1lbW9yeSIpOwpyZXR1cm4gKHRvKTsKfQogCmV4dGVy
biBpbmxpbmUgdm9pZCAqIF9fY29uc3RhbnRfbWVtY3B5KHZvaWQgKiB0bywgY29uc3Qgdm9pZCAq
IGZyb20sIHNpemVfdCBuKQp7Cglzd2l0Y2ggKG4pIHsKCQljYXNlIDA6CgkJCXJldHVybiB0bzsK
CQljYXNlIDE6CgkJCSoodW5zaWduZWQgY2hhciAqKXRvID0gKihjb25zdCB1bnNpZ25lZCBjaGFy
ICopZnJvbTsKCQkJcmV0dXJuIHRvOwoJCWNhc2UgMjoKCQkJKih1bnNpZ25lZCBzaG9ydCAqKXRv
ID0gKihjb25zdCB1bnNpZ25lZCBzaG9ydCAqKWZyb207CgkJCXJldHVybiB0bzsKCQljYXNlIDM6
CgkJCSoodW5zaWduZWQgc2hvcnQgKil0byA9ICooY29uc3QgdW5zaWduZWQgc2hvcnQgKilmcm9t
OwoJCQkqKDIrKHVuc2lnbmVkIGNoYXIgKil0bykgPSAqKDIrKGNvbnN0IHVuc2lnbmVkIGNoYXIg
Kilmcm9tKTsKCQkJcmV0dXJuIHRvOwoJCWNhc2UgNDoKCQkJKih1bnNpZ25lZCBsb25nICopdG8g
PSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tOwoJCQlyZXR1cm4gdG87CgkJY2FzZSA2Ogkg
CgkJCSoodW5zaWduZWQgbG9uZyAqKXRvID0gKihjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbTsK
CQkJKigyKyh1bnNpZ25lZCBzaG9ydCAqKXRvKSA9ICooMisoY29uc3QgdW5zaWduZWQgc2hvcnQg
Kilmcm9tKTsKCQkJcmV0dXJuIHRvOwoJCWNhc2UgODoKCQkJKih1bnNpZ25lZCBsb25nICopdG8g
PSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tOwoJCQkqKDErKHVuc2lnbmVkIGxvbmcgKil0
bykgPSAqKDErKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKCQkJcmV0dXJuIHRvOwoJCWNh
c2UgMTI6CgkJCSoodW5zaWduZWQgbG9uZyAqKXRvID0gKihjb25zdCB1bnNpZ25lZCBsb25nICop
ZnJvbTsKCQkJKigxKyh1bnNpZ25lZCBsb25nICopdG8pID0gKigxKyhjb25zdCB1bnNpZ25lZCBs
b25nICopZnJvbSk7CgkJCSooMisodW5zaWduZWQgbG9uZyAqKXRvKSA9ICooMisoY29uc3QgdW5z
aWduZWQgbG9uZyAqKWZyb20pOwoJCQlyZXR1cm4gdG87CgkJY2FzZSAxNjoKCQkJKih1bnNpZ25l
ZCBsb25nICopdG8gPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tOwoJCQkqKDErKHVuc2ln
bmVkIGxvbmcgKil0bykgPSAqKDErKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKCQkJKigy
Kyh1bnNpZ25lZCBsb25nICopdG8pID0gKigyKyhjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbSk7
CgkJCSooMysodW5zaWduZWQgbG9uZyAqKXRvKSA9ICooMysoY29uc3QgdW5zaWduZWQgbG9uZyAq
KWZyb20pOwoJCQlyZXR1cm4gdG87CgkJY2FzZSAyMDoKCQkJKih1bnNpZ25lZCBsb25nICopdG8g
PSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tOwoJCQkqKDErKHVuc2lnbmVkIGxvbmcgKil0
bykgPSAqKDErKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKCQkJKigyKyh1bnNpZ25lZCBs
b25nICopdG8pID0gKigyKyhjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbSk7CgkJCSooMysodW5z
aWduZWQgbG9uZyAqKXRvKSA9ICooMysoY29uc3QgdW5zaWduZWQgbG9uZyAqKWZyb20pOwoJCQkq
KDQrKHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDQrKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9t
KTsKCQkJcmV0dXJuIHRvOwoJfQp7CglpbnQgZDAsIGQxLCBkMjsKCXN3aXRjaCAobiAlIDQpIHsK
CQljYXNlIDA6IF9fYXNtX18gX192b2xhdGlsZV9fKCAiY2xkXG5cdCIgInJlcCA7IG1vdnNsIiAg
IiIgIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKSA6ICIwIiAobi80KSwiMSIg
KChsb25nKSB0byksIjIiICgobG9uZykgZnJvbSkgOiAibWVtb3J5Iik7IDsgcmV0dXJuIHRvOwoJ
CWNhc2UgMTogX19hc21fXyBfX3ZvbGF0aWxlX18oICJjbGRcblx0IiAicmVwIDsgbW92c2wiICAi
XG5cdG1vdnNiIiAgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZTIiAoZDIpIDogIjAiIChu
LzQpLCIxIiAoKGxvbmcpIHRvKSwiMiIgKChsb25nKSBmcm9tKSA6ICJtZW1vcnkiKTsgOyByZXR1
cm4gdG87CgkJY2FzZSAyOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggImNsZFxuXHQiICJyZXAgOyBt
b3ZzbCIgICJcblx0bW92c3ciICA6ICI9JmMiIChkMCksICI9JkQiIChkMSksICI9JlMiIChkMikg
OiAiMCIgKG4vNCksIjEiICgobG9uZykgdG8pLCIyIiAoKGxvbmcpIGZyb20pIDogIm1lbW9yeSIp
OyA7IHJldHVybiB0bzsKCQlkZWZhdWx0OiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggImNsZFxuXHQi
ICJyZXAgOyBtb3ZzbCIgICJcblx0bW92c3dcblx0bW92c2IiICA6ICI9JmMiIChkMCksICI9JkQi
IChkMSksICI9JlMiIChkMikgOiAiMCIgKG4vNCksIjEiICgobG9uZykgdG8pLCIyIiAoKGxvbmcp
IGZyb20pIDogIm1lbW9yeSIpOyA7IHJldHVybiB0bzsKCX0KfQogIAp9CmV4dGVybiBpbmxpbmUg
dm9pZCAqIG1lbW1vdmUodm9pZCAqIGRlc3QsY29uc3Qgdm9pZCAqIHNyYywgc2l6ZV90IG4pCnsK
aW50IGQwLCBkMSwgZDI7CmlmIChkZXN0PHNyYykKX19hc21fXyBfX3ZvbGF0aWxlX18oCgkiY2xk
XG5cdCIKCSJyZXBcblx0IgoJIm1vdnNiIgoJOiAiPSZjIiAoZDApLCAiPSZTIiAoZDEpLCAiPSZE
IiAoZDIpCgk6IjAiIChuKSwiMSIgKHNyYyksIjIiIChkZXN0KQoJOiAibWVtb3J5Iik7CmVsc2UK
X19hc21fXyBfX3ZvbGF0aWxlX18oCgkic3RkXG5cdCIKCSJyZXBcblx0IgoJIm1vdnNiXG5cdCIK
CSJjbGQiCgk6ICI9JmMiIChkMCksICI9JlMiIChkMSksICI9JkQiIChkMikKCToiMCIgKG4pLAoJ
ICIxIiAobi0xKyhjb25zdCBjaGFyICopc3JjKSwKCSAiMiIgKG4tMSsoY2hhciAqKWRlc3QpCgk6
Im1lbW9yeSIpOwpyZXR1cm4gZGVzdDsKfQpleHRlcm4gaW5saW5lIHZvaWQgKiBtZW1jaHIoY29u
c3Qgdm9pZCAqIGNzLGludCBjLHNpemVfdCBjb3VudCkKewppbnQgZDA7CnJlZ2lzdGVyIHZvaWQg
KiBfX3JlczsKaWYgKCFjb3VudCkKCXJldHVybiAoKHZvaWQgKikwKSA7Cl9fYXNtX18gX192b2xh
dGlsZV9fKAoJImNsZFxuXHQiCgkicmVwbmVcblx0IgoJInNjYXNiXG5cdCIKCSJqZSAxZlxuXHQi
CgkibW92bCAkMSwlMFxuIgoJIjE6XHRkZWNsICUwIgoJOiI9RCIgKF9fcmVzKSwgIj0mYyIgKGQw
KSA6ICJhIiAoYyksIjAiIChjcyksIjEiIChjb3VudCkpOwpyZXR1cm4gX19yZXM7Cn0KZXh0ZXJu
IGlubGluZSB2b2lkICogX19tZW1zZXRfZ2VuZXJpYyh2b2lkICogcywgY2hhciBjLHNpemVfdCBj
b3VudCkKewppbnQgZDAsIGQxOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKCSJjbGRcblx0IgoJInJl
cFxuXHQiCgkic3Rvc2IiCgk6ICI9JmMiIChkMCksICI9JkQiIChkMSkKCToiYSIgKGMpLCIxIiAo
cyksIjAiIChjb3VudCkKCToibWVtb3J5Iik7CnJldHVybiBzOwp9CiAKIApleHRlcm4gaW5saW5l
IHZvaWQgKiBfX2NvbnN0YW50X2NfbWVtc2V0KHZvaWQgKiBzLCB1bnNpZ25lZCBsb25nIGMsIHNp
emVfdCBjb3VudCkKewppbnQgZDAsIGQxOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKCSJjbGRcblx0
IgoJInJlcCA7IHN0b3NsXG5cdCIKCSJ0ZXN0YiAkMiwlYjNcblx0IgoJImplIDFmXG5cdCIKCSJz
dG9zd1xuIgoJIjE6XHR0ZXN0YiAkMSwlYjNcblx0IgoJImplIDJmXG5cdCIKCSJzdG9zYlxuIgoJ
IjI6IgoJOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpCgk6ImEiIChjKSwgInEiIChjb3VudCksICIw
IiAoY291bnQvNCksICIxIiAoKGxvbmcpIHMpCgk6Im1lbW9yeSIpOwpyZXR1cm4gKHMpOwkKfQog
CmV4dGVybiBpbmxpbmUgc2l6ZV90IHN0cm5sZW4oY29uc3QgY2hhciAqIHMsIHNpemVfdCBjb3Vu
dCkKewppbnQgZDA7CnJlZ2lzdGVyIGludCBfX3JlczsKX19hc21fXyBfX3ZvbGF0aWxlX18oCgki
bW92bCAlMiwlMFxuXHQiCgkiam1wIDJmXG4iCgkiMTpcdGNtcGIgJDAsKCUwKVxuXHQiCgkiamUg
M2Zcblx0IgoJImluY2wgJTBcbiIKCSIyOlx0ZGVjbCAlMVxuXHQiCgkiY21wbCAkLTEsJTFcblx0
IgoJImpuZSAxYlxuIgoJIjM6XHRzdWJsICUyLCUwIgoJOiI9YSIgKF9fcmVzKSwgIj0mZCIgKGQw
KQoJOiJjIiAocyksIjEiIChjb3VudCkpOwpyZXR1cm4gX19yZXM7Cn0KIAogCmV4dGVybiBpbmxp
bmUgdm9pZCAqIF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KHZvaWQgKiBzLCB1bnNpZ25l
ZCBsb25nIHBhdHRlcm4sIHNpemVfdCBjb3VudCkKewoJc3dpdGNoIChjb3VudCkgewoJCWNhc2Ug
MDoKCQkJcmV0dXJuIHM7CgkJY2FzZSAxOgoJCQkqKHVuc2lnbmVkIGNoYXIgKilzID0gcGF0dGVy
bjsKCQkJcmV0dXJuIHM7CgkJY2FzZSAyOgoJCQkqKHVuc2lnbmVkIHNob3J0ICopcyA9IHBhdHRl
cm47CgkJCXJldHVybiBzOwoJCWNhc2UgMzoKCQkJKih1bnNpZ25lZCBzaG9ydCAqKXMgPSBwYXR0
ZXJuOwoJCQkqKDIrKHVuc2lnbmVkIGNoYXIgKilzKSA9IHBhdHRlcm47CgkJCXJldHVybiBzOwoJ
CWNhc2UgNDoKCQkJKih1bnNpZ25lZCBsb25nICopcyA9IHBhdHRlcm47CgkJCXJldHVybiBzOwoJ
fQp7CglpbnQgZDAsIGQxOwoJc3dpdGNoIChjb3VudCAlIDQpIHsKCQljYXNlIDA6IF9fYXNtX18g
IF9fdm9sYXRpbGVfXygiY2xkXG5cdCIgInJlcCA7IHN0b3NsIiAgIiIgIDogIj0mYyIgKGQwKSwg
Ij0mRCIgKGQxKSA6ICJhIiAocGF0dGVybiksIjAiIChjb3VudC80KSwiMSIgKChsb25nKSBzKSA6
ICJtZW1vcnkiKSA7IHJldHVybiBzOwoJCWNhc2UgMTogX19hc21fXyAgX192b2xhdGlsZV9fKCJj
bGRcblx0IiAicmVwIDsgc3Rvc2wiICAiXG5cdHN0b3NiIiAgOiAiPSZjIiAoZDApLCAiPSZEIiAo
ZDEpIDogImEiIChwYXR0ZXJuKSwiMCIgKGNvdW50LzQpLCIxIiAoKGxvbmcpIHMpIDogIm1lbW9y
eSIpIDsgcmV0dXJuIHM7CgkJY2FzZSAyOiBfX2FzbV9fICBfX3ZvbGF0aWxlX18oImNsZFxuXHQi
ICJyZXAgOyBzdG9zbCIgICJcblx0c3Rvc3ciICA6ICI9JmMiIChkMCksICI9JkQiIChkMSkgOiAi
YSIgKHBhdHRlcm4pLCIwIiAoY291bnQvNCksIjEiICgobG9uZykgcykgOiAibWVtb3J5IikgOyBy
ZXR1cm4gczsKCQlkZWZhdWx0OiBfX2FzbV9fICBfX3ZvbGF0aWxlX18oImNsZFxuXHQiICJyZXAg
OyBzdG9zbCIgICJcblx0c3Rvc3dcblx0c3Rvc2IiICA6ICI9JmMiIChkMCksICI9JkQiIChkMSkg
OiAiYSIgKHBhdHRlcm4pLCIwIiAoY291bnQvNCksIjEiICgobG9uZykgcykgOiAibWVtb3J5Iikg
OyByZXR1cm4gczsKCX0KfQogIAp9CiAKZXh0ZXJuIGlubGluZSB2b2lkICogbWVtc2Nhbih2b2lk
ICogYWRkciwgaW50IGMsIHNpemVfdCBzaXplKQp7CglpZiAoIXNpemUpCgkJcmV0dXJuIGFkZHI7
CglfX2FzbV9fKCJjbGQKCQlyZXBuejsgc2Nhc2IKCQlqbnogMWYKCQlkZWMgJSVlZGkKMToJCSIK
CQk6ICI9RCIgKGFkZHIpLCAiPWMiIChzaXplKQoJCTogIjAiIChhZGRyKSwgIjEiIChzaXplKSwg
ImEiIChjKSk7CglyZXR1cm4gYWRkcjsKfQojIDUgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNs
dWRlL2FzbS9sNGFyY2gvc3RyaW5nLmgiIDIKIyA0ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5j
bHVkZS9hc20vc3RyaW5nLmgiIDIKIyAzNyAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUv
bGludXgvc3RyaW5nLmgiIDIKIyA2NCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGlu
dXgvc2lnbmFsLmgiIDIKIyAxMDIgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4
L3NpZ25hbC5oIgpleHRlcm4gaW5saW5lIHZvaWQgIHNpZ29yc2V0cyAoc2lnc2V0X3QgKnIsIGNv
bnN0IHNpZ3NldF90ICphLCBjb25zdCBzaWdzZXRfdCAqYikgewl1bnNpZ25lZCBsb25nIGEwLCBh
MSwgYTIsIGEzLCBiMCwgYjEsIGIyLCBiMzsJdW5zaWduZWQgbG9uZyBpOwlmb3IgKGkgPSAwOyBp
IDwgKDY0ICAvIDMyICkgLzQ7ICsraSkgewlhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+c2ln
WzQqaSsxXTsJYTIgPSBhLT5zaWdbNCppKzJdOyBhMyA9IGEtPnNpZ1s0KmkrM107CWIwID0gYi0+
c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOwliMiA9IGItPnNpZ1s0KmkrMl07IGIzID0g
Yi0+c2lnWzQqaSszXTsJci0+c2lnWzQqaSswXSA9ICAgKCggYTAgKSB8ICggIGIwICkpIDsJci0+
c2lnWzQqaSsxXSA9ICAgKCggYTEgKSB8ICggIGIxICkpIDsJci0+c2lnWzQqaSsyXSA9ICAgKCgg
YTIgKSB8ICggIGIyICkpIDsJci0+c2lnWzQqaSszXSA9ICAgKCggYTMgKSB8ICggIGIzICkpIDsJ
fQlzd2l0Y2ggKCg2NCAgLyAzMiApICAlIDQpIHsJY2FzZSAzOglhMCA9IGEtPnNpZ1s0KmkrMF07
IGExID0gYS0+c2lnWzQqaSsxXTsgYTIgPSBhLT5zaWdbNCppKzJdOyBiMCA9IGItPnNpZ1s0Kmkr
MF07IGIxID0gYi0+c2lnWzQqaSsxXTsgYjIgPSBiLT5zaWdbNCppKzJdOyByLT5zaWdbNCppKzBd
ID0gICAoKCBhMCApIHwgKCAgYjAgKSkgOwlyLT5zaWdbNCppKzFdID0gICAoKCBhMSApIHwgKCAg
YjEgKSkgOwlyLT5zaWdbNCppKzJdID0gICAoKCBhMiApIHwgKCAgYjIgKSkgOwlicmVhazsJY2Fz
ZSAyOglhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsJYjAgPSBiLT5zaWdb
NCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07CXItPnNpZ1s0KmkrMF0gPSAgICgoIGEwICkgfCAo
ICBiMCApKSA7CXItPnNpZ1s0KmkrMV0gPSAgICgoIGExICkgfCAoICBiMSApKSA7CWJyZWFrOwlj
YXNlIDE6CWEwID0gYS0+c2lnWzQqaSswXTsgYjAgPSBiLT5zaWdbNCppKzBdOwlyLT5zaWdbNCpp
KzBdID0gICAoKCBhMCApIHwgKCAgYjAgKSkgOwlicmVhazsJfQl9IApleHRlcm4gaW5saW5lIHZv
aWQgIHNpZ2FuZHNldHMgKHNpZ3NldF90ICpyLCBjb25zdCBzaWdzZXRfdCAqYSwgY29uc3Qgc2ln
c2V0X3QgKmIpIHsJdW5zaWduZWQgbG9uZyBhMCwgYTEsIGEyLCBhMywgYjAsIGIxLCBiMiwgYjM7
CXVuc2lnbmVkIGxvbmcgaTsJZm9yIChpID0gMDsgaSA8ICg2NCAgLyAzMiApIC80OyArK2kpIHsJ
YTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07CWEyID0gYS0+c2lnWzQqaSsy
XTsgYTMgPSBhLT5zaWdbNCppKzNdOwliMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQq
aSsxXTsJYjIgPSBiLT5zaWdbNCppKzJdOyBiMyA9IGItPnNpZ1s0KmkrM107CXItPnNpZ1s0Kmkr
MF0gPSAgICgoIGEwICkgJiAoICBiMCApKSA7CXItPnNpZ1s0KmkrMV0gPSAgICgoIGExICkgJiAo
ICBiMSApKSA7CXItPnNpZ1s0KmkrMl0gPSAgICgoIGEyICkgJiAoICBiMiApKSA7CXItPnNpZ1s0
KmkrM10gPSAgICgoIGEzICkgJiAoICBiMyApKSA7CX0Jc3dpdGNoICgoNjQgIC8gMzIgKSAgJSA0
KSB7CWNhc2UgMzoJYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07IGEyID0g
YS0+c2lnWzQqaSsyXTsgYjAgPSBiLT5zaWdbNCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07IGIy
ID0gYi0+c2lnWzQqaSsyXTsgci0+c2lnWzQqaSswXSA9ICAgKCggYTAgKSAmICggIGIwICkpIDsJ
ci0+c2lnWzQqaSsxXSA9ICAgKCggYTEgKSAmICggIGIxICkpIDsJci0+c2lnWzQqaSsyXSA9ICAg
KCggYTIgKSAmICggIGIyICkpIDsJYnJlYWs7CWNhc2UgMjoJYTAgPSBhLT5zaWdbNCppKzBdOyBh
MSA9IGEtPnNpZ1s0KmkrMV07CWIwID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFd
OwlyLT5zaWdbNCppKzBdID0gICAoKCBhMCApICYgKCAgYjAgKSkgOwlyLT5zaWdbNCppKzFdID0g
ICAoKCBhMSApICYgKCAgYjEgKSkgOwlicmVhazsJY2FzZSAxOglhMCA9IGEtPnNpZ1s0KmkrMF07
IGIwID0gYi0+c2lnWzQqaSswXTsJci0+c2lnWzQqaSswXSA9ICAgKCggYTAgKSAmICggIGIwICkp
IDsJYnJlYWs7CX0JfSAKZXh0ZXJuIGlubGluZSB2b2lkICBzaWduYW5kc2V0cyAoc2lnc2V0X3Qg
KnIsIGNvbnN0IHNpZ3NldF90ICphLCBjb25zdCBzaWdzZXRfdCAqYikgewl1bnNpZ25lZCBsb25n
IGEwLCBhMSwgYTIsIGEzLCBiMCwgYjEsIGIyLCBiMzsJdW5zaWduZWQgbG9uZyBpOwlmb3IgKGkg
PSAwOyBpIDwgKDY0ICAvIDMyICkgLzQ7ICsraSkgewlhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0g
YS0+c2lnWzQqaSsxXTsJYTIgPSBhLT5zaWdbNCppKzJdOyBhMyA9IGEtPnNpZ1s0KmkrM107CWIw
ID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOwliMiA9IGItPnNpZ1s0KmkrMl07
IGIzID0gYi0+c2lnWzQqaSszXTsJci0+c2lnWzQqaSswXSA9ICAgKCggYTAgKSAmIH4oICBiMCAp
KSA7CXItPnNpZ1s0KmkrMV0gPSAgICgoIGExICkgJiB+KCAgYjEgKSkgOwlyLT5zaWdbNCppKzJd
ID0gICAoKCBhMiApICYgfiggIGIyICkpIDsJci0+c2lnWzQqaSszXSA9ICAgKCggYTMgKSAmIH4o
ICBiMyApKSA7CX0Jc3dpdGNoICgoNjQgIC8gMzIgKSAgJSA0KSB7CWNhc2UgMzoJYTAgPSBhLT5z
aWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07IGEyID0gYS0+c2lnWzQqaSsyXTsgYjAgPSBi
LT5zaWdbNCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07IGIyID0gYi0+c2lnWzQqaSsyXTsgci0+
c2lnWzQqaSswXSA9ICAgKCggYTAgKSAmIH4oICBiMCApKSA7CXItPnNpZ1s0KmkrMV0gPSAgICgo
IGExICkgJiB+KCAgYjEgKSkgOwlyLT5zaWdbNCppKzJdID0gICAoKCBhMiApICYgfiggIGIyICkp
IDsJYnJlYWs7CWNhc2UgMjoJYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07
CWIwID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOwlyLT5zaWdbNCppKzBdID0g
ICAoKCBhMCApICYgfiggIGIwICkpIDsJci0+c2lnWzQqaSsxXSA9ICAgKCggYTEgKSAmIH4oICBi
MSApKSA7CWJyZWFrOwljYXNlIDE6CWEwID0gYS0+c2lnWzQqaSswXTsgYjAgPSBiLT5zaWdbNCpp
KzBdOwlyLT5zaWdbNCppKzBdID0gICAoKCBhMCApICYgfiggIGIwICkpIDsJYnJlYWs7CX0JfSAK
IyAxMzQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIgpleHRl
cm4gaW5saW5lIHZvaWQgIHNpZ25vdHNldCAoc2lnc2V0X3QgKnNldCkJewl1bnNpZ25lZCBsb25n
IGk7CWZvciAoaSA9IDA7IGkgPCAoNjQgIC8gMzIgKSAvNDsgKytpKSB7CXNldC0+c2lnWzQqaSsw
XSA9ICAgKH4oIHNldC0+c2lnWzQqaSswXSApKSA7CXNldC0+c2lnWzQqaSsxXSA9ICAgKH4oIHNl
dC0+c2lnWzQqaSsxXSApKSA7CXNldC0+c2lnWzQqaSsyXSA9ICAgKH4oIHNldC0+c2lnWzQqaSsy
XSApKSA7CXNldC0+c2lnWzQqaSszXSA9ICAgKH4oIHNldC0+c2lnWzQqaSszXSApKSA7CX0Jc3dp
dGNoICgoNjQgIC8gMzIgKSAgJSA0KSB7CWNhc2UgMzogc2V0LT5zaWdbNCppKzJdID0gICAofigg
c2V0LT5zaWdbNCppKzJdICkpIDsJY2FzZSAyOiBzZXQtPnNpZ1s0KmkrMV0gPSAgICh+KCBzZXQt
PnNpZ1s0KmkrMV0gKSkgOwljYXNlIDE6IHNldC0+c2lnWzQqaSswXSA9ICAgKH4oIHNldC0+c2ln
WzQqaSswXSApKSA7CX0JfSAKZXh0ZXJuIGlubGluZSB2b2lkIHNpZ2VtcHR5c2V0KHNpZ3NldF90
ICpzZXQpCnsKCXN3aXRjaCAoKDY0ICAvIDMyICkgKSB7CglkZWZhdWx0OgoJCShfX2J1aWx0aW5f
Y29uc3RhbnRfcCggIDAgKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCggKCAgc2l6ZW9mKHNpZ3Nl
dF90KSApICkgPyBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgoICggc2V0ICkgKSwoICgw
eDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKCAgMCApKSApLCggKCAgc2l6ZW9mKHNpZ3NldF90
KSApICkpIDogX19jb25zdGFudF9jX21lbXNldCgoICggc2V0ICkgKSwoICgweDAxMDEwMTAxVUwq
KHVuc2lnbmVkIGNoYXIpKCAgMCApKSApLCggKCAgc2l6ZW9mKHNpZ3NldF90KSApICkpKSAgOiAo
X19idWlsdGluX2NvbnN0YW50X3AoICggIHNpemVvZihzaWdzZXRfdCkgKSApID8gX19tZW1zZXRf
Z2VuZXJpYygoICggKCBzZXQgKSApICksKCAoICggIDAgKSApICksKCAoICggIHNpemVvZihzaWdz
ZXRfdCkgKSApICkpICA6IF9fbWVtc2V0X2dlbmVyaWMoKCAoIHNldCApICksKCAoICAwICkgKSwo
ICggIHNpemVvZihzaWdzZXRfdCkgKSApKSkgKSA7CgkJYnJlYWs7CgljYXNlIDI6IHNldC0+c2ln
WzFdID0gMDsKCWNhc2UgMToJc2V0LT5zaWdbMF0gPSAwOwoJCWJyZWFrOwoJfQp9CmV4dGVybiBp
bmxpbmUgdm9pZCBzaWdmaWxsc2V0KHNpZ3NldF90ICpzZXQpCnsKCXN3aXRjaCAoKDY0ICAvIDMy
ICkgKSB7CglkZWZhdWx0OgoJCShfX2J1aWx0aW5fY29uc3RhbnRfcCggIC0xICkgPyAoX19idWls
dGluX2NvbnN0YW50X3AoICggIHNpemVvZihzaWdzZXRfdCkgKSApID8gX19jb25zdGFudF9jX2Fu
ZF9jb3VudF9tZW1zZXQoKCAoIHNldCApICksKCAoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFy
KSggIC0xICkpICksKCAoICBzaXplb2Yoc2lnc2V0X3QpICkgKSkgOiBfX2NvbnN0YW50X2NfbWVt
c2V0KCggKCBzZXQgKSApLCggKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoICAtMSApKSAp
LCggKCAgc2l6ZW9mKHNpZ3NldF90KSApICkpKSAgOiAoX19idWlsdGluX2NvbnN0YW50X3AoICgg
IHNpemVvZihzaWdzZXRfdCkgKSApID8gX19tZW1zZXRfZ2VuZXJpYygoICggKCBzZXQgKSApICks
KCAoICggIC0xICkgKSApLCggKCAoICBzaXplb2Yoc2lnc2V0X3QpICkgKSApKSAgOiBfX21lbXNl
dF9nZW5lcmljKCggKCBzZXQgKSApLCggKCAgLTEgKSApLCggKCAgc2l6ZW9mKHNpZ3NldF90KSAp
ICkpKSApIDsKCQlicmVhazsKCWNhc2UgMjogc2V0LT5zaWdbMV0gPSAtMTsKCWNhc2UgMToJc2V0
LT5zaWdbMF0gPSAtMTsKCQlicmVhazsKCX0KfQpleHRlcm4gY2hhciAqIHJlbmRlcl9zaWdzZXRf
dChzaWdzZXRfdCAqc2V0LCBjaGFyICpidWZmZXIpOwogCmV4dGVybiBpbmxpbmUgdm9pZCBzaWdh
ZGRzZXRtYXNrKHNpZ3NldF90ICpzZXQsIHVuc2lnbmVkIGxvbmcgbWFzaykKewoJc2V0LT5zaWdb
MF0gfD0gbWFzazsKfQpleHRlcm4gaW5saW5lIHZvaWQgc2lnZGVsc2V0bWFzayhzaWdzZXRfdCAq
c2V0LCB1bnNpZ25lZCBsb25nIG1hc2spCnsKCXNldC0+c2lnWzBdICY9IH5tYXNrOwp9CmV4dGVy
biBpbmxpbmUgaW50IHNpZ3Rlc3RzZXRtYXNrKHNpZ3NldF90ICpzZXQsIHVuc2lnbmVkIGxvbmcg
bWFzaykKewoJcmV0dXJuIChzZXQtPnNpZ1swXSAmIG1hc2spICE9IDA7Cn0KZXh0ZXJuIGlubGlu
ZSB2b2lkIHNpZ2luaXRzZXQoc2lnc2V0X3QgKnNldCwgdW5zaWduZWQgbG9uZyBtYXNrKQp7Cglz
ZXQtPnNpZ1swXSA9IG1hc2s7Cglzd2l0Y2ggKCg2NCAgLyAzMiApICkgewoJZGVmYXVsdDoKCQko
X19idWlsdGluX2NvbnN0YW50X3AoICAwICkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoICggIHNp
emVvZihsb25nKSooKDY0ICAvIDMyICkgLTEpICkgKSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRf
bWVtc2V0KCggKCAmc2V0LT5zaWdbMV0gKSApLCggKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hh
cikoICAwICkpICksKCAoICBzaXplb2YobG9uZykqKCg2NCAgLyAzMiApIC0xKSApICkpIDogX19j
b25zdGFudF9jX21lbXNldCgoICggJnNldC0+c2lnWzFdICkgKSwoICgweDAxMDEwMTAxVUwqKHVu
c2lnbmVkIGNoYXIpKCAgMCApKSApLCggKCAgc2l6ZW9mKGxvbmcpKigoNjQgIC8gMzIgKSAtMSkg
KSApKSkgIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKCAoICBzaXplb2YobG9uZykqKCg2NCAgLyAz
MiApIC0xKSApICkgPyBfX21lbXNldF9nZW5lcmljKCggKCAoICZzZXQtPnNpZ1sxXSApICkgKSwo
ICggKCAgMCApICkgKSwoICggKCAgc2l6ZW9mKGxvbmcpKigoNjQgIC8gMzIgKSAtMSkgKSApICkp
ICA6IF9fbWVtc2V0X2dlbmVyaWMoKCAoICZzZXQtPnNpZ1sxXSApICksKCAoICAwICkgKSwoICgg
IHNpemVvZihsb25nKSooKDY0ICAvIDMyICkgLTEpICkgKSkpICkgOwoJCWJyZWFrOwoJY2FzZSAy
OiBzZXQtPnNpZ1sxXSA9IDA7CgljYXNlIDE6Cgl9Cn0KZXh0ZXJuIGlubGluZSB2b2lkIHNpZ2lu
aXRzZXRpbnYoc2lnc2V0X3QgKnNldCwgdW5zaWduZWQgbG9uZyBtYXNrKQp7CglzZXQtPnNpZ1sw
XSA9IH5tYXNrOwoJc3dpdGNoICgoNjQgIC8gMzIgKSApIHsKCWRlZmF1bHQ6CgkJKF9fYnVpbHRp
bl9jb25zdGFudF9wKCAgLTEgKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCggKCAgc2l6ZW9mKGxv
bmcpKigoNjQgIC8gMzIgKSAtMSkgKSApID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQo
KCAoICZzZXQtPnNpZ1sxXSApICksKCAoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSggIC0x
ICkpICksKCAoICBzaXplb2YobG9uZykqKCg2NCAgLyAzMiApIC0xKSApICkpIDogX19jb25zdGFu
dF9jX21lbXNldCgoICggJnNldC0+c2lnWzFdICkgKSwoICgweDAxMDEwMTAxVUwqKHVuc2lnbmVk
IGNoYXIpKCAgLTEgKSkgKSwoICggIHNpemVvZihsb25nKSooKDY0ICAvIDMyICkgLTEpICkgKSkp
ICA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCggKCAgc2l6ZW9mKGxvbmcpKigoNjQgIC8gMzIgKSAt
MSkgKSApID8gX19tZW1zZXRfZ2VuZXJpYygoICggKCAmc2V0LT5zaWdbMV0gKSApICksKCAoICgg
IC0xICkgKSApLCggKCAoICBzaXplb2YobG9uZykqKCg2NCAgLyAzMiApIC0xKSApICkgKSkgIDog
X19tZW1zZXRfZ2VuZXJpYygoICggJnNldC0+c2lnWzFdICkgKSwoICggIC0xICkgKSwoICggIHNp
emVvZihsb25nKSooKDY0ICAvIDMyICkgLTEpICkgKSkpICkgOwoJCWJyZWFrOwoJY2FzZSAyOiBz
ZXQtPnNpZ1sxXSA9IC0xOwoJY2FzZSAxOgoJfQp9CiMgMjMgIi9ob21lL2p3NS90bXAvbGludXgy
Mi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5j
bHVkZS9saW51eC9zZWN1cmViaXRzLmgiIDEKZXh0ZXJuIHVuc2lnbmVkIHNlY3VyZWJpdHM7CiAK
IAogCiMgMjQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIK
IAogCmV4dGVybiB1bnNpZ25lZCBsb25nIGF2ZW5ydW5bXTsJCSAKZXh0ZXJuIGludCBucl9ydW5u
aW5nLCBucl90YXNrczsKZXh0ZXJuIGludCBsYXN0X3BpZDsKIyAxICIvaG9tZS9qdzUvdG1wL2xp
bnV4MjIvaW5jbHVkZS9saW51eC9wYXJhbS5oIiAxCiMgNzAgIi9ob21lL2p3NS90bXAvbGludXgy
Mi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5j
bHVkZS9saW51eC9yZXNvdXJjZS5oIiAxCiAKIApzdHJ1Y3QJcnVzYWdlIHsKCXN0cnVjdCB0aW1l
dmFsIHJ1X3V0aW1lOwkgCglzdHJ1Y3QgdGltZXZhbCBydV9zdGltZTsJIAoJbG9uZwlydV9tYXhy
c3M7CQkgCglsb25nCXJ1X2l4cnNzOwkJIAoJbG9uZwlydV9pZHJzczsJCSAKCWxvbmcJcnVfaXNy
c3M7CQkgCglsb25nCXJ1X21pbmZsdDsJCSAKCWxvbmcJcnVfbWFqZmx0OwkJIAoJbG9uZwlydV9u
c3dhcDsJCSAKCWxvbmcJcnVfaW5ibG9jazsJCSAKCWxvbmcJcnVfb3VibG9jazsJCSAKCWxvbmcJ
cnVfbXNnc25kOwkJIAoJbG9uZwlydV9tc2dyY3Y7CQkgCglsb25nCXJ1X25zaWduYWxzOwkJIAoJ
bG9uZwlydV9udmNzdzsJCSAKCWxvbmcJcnVfbml2Y3N3OwkJIAp9OwpzdHJ1Y3QgcmxpbWl0IHsK
CWxvbmcJcmxpbV9jdXI7Cglsb25nCXJsaW1fbWF4Owp9OwogCiMgMSAiL2hvbWUvanc1L3RtcC9s
aW51eDIyL2luY2x1ZGUvYXNtL3Jlc291cmNlLmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4
MjIvaW5jbHVkZS9hc20vbDRhcmNoL3Jlc291cmNlLmgiIDEKIAojIDEgIi9ob21lL2p3NS90bXAv
bGludXgyMi9pbmNsdWRlL2FzbS1pMzg2L3Jlc291cmNlLmgiIDEKIAojIDM2ICIvaG9tZS9qdzUv
dG1wL2xpbnV4MjIvaW5jbHVkZS9hc20taTM4Ni9yZXNvdXJjZS5oIgojIDUgIi9ob21lL2p3NS90
bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvcmVzb3VyY2UuaCIgMgogCnN0cnVjdCB0YXNr
X3N0cnVjdDsKdm9pZCBsNF9nZXRfdXRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIyA0ICIv
aG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vcmVzb3VyY2UuaCIgMgojIDU4ICIvaG9t
ZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9yZXNvdXJjZS5oIiAyCiMgNzEgIi9ob21l
L2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvaG9tZS9qdzUv
dG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC90aW1lci5oIiAxCiAKc3RydWN0IHRpbWVyX3N0cnVj
dCB7Cgl1bnNpZ25lZCBsb25nIGV4cGlyZXM7Cgl2b2lkICgqZm4pKHZvaWQpOwp9OwpleHRlcm4g
dW5zaWduZWQgbG9uZyB0aW1lcl9hY3RpdmU7CmV4dGVybiBzdHJ1Y3QgdGltZXJfc3RydWN0IHRp
bWVyX3RhYmxlWzMyXTsKIApzdHJ1Y3QgdGltZXJfbGlzdCB7CglzdHJ1Y3QgdGltZXJfbGlzdCAq
bmV4dDsgIAoJc3RydWN0IHRpbWVyX2xpc3QgKnByZXY7Cgl1bnNpZ25lZCBsb25nIGV4cGlyZXM7
Cgl1bnNpZ25lZCBsb25nIGRhdGE7Cgl2b2lkICgqZnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpOwp9
OwpleHRlcm4gdm9pZCBhZGRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKiB0aW1lcik7CmV4dGVy
biBpbnQgIGRlbF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVyKTsKIAp2b2lkIG1vZF90
aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcyk7CmV4
dGVybiB2b2lkIGl0X3JlYWxfZm4odW5zaWduZWQgbG9uZyk7CmV4dGVybiBpbmxpbmUgdm9pZCBp
bml0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIpCnsKCXRpbWVyLT5uZXh0ID0gKCh2
b2lkICopMCkgOwoJdGltZXItPnByZXYgPSAoKHZvaWQgKikwKSA7Cn0KZXh0ZXJuIGlubGluZSBp
bnQgdGltZXJfcGVuZGluZyhzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVyKQp7CglyZXR1cm4gdGlt
ZXItPnByZXYgIT0gKCh2b2lkICopMCkgOwp9CiAKIyA3MiAiL2hvbWUvanc1L3RtcC9saW51eDIy
L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgogCiAKc3RydWN0IHNjaGVkX3BhcmFtIHsKCWludCBz
Y2hlZF9wcmlvcml0eTsKfTsKIApleHRlcm4gcndsb2NrX3QgdGFza2xpc3RfbG9jazsKZXh0ZXJu
IHNwaW5sb2NrX3QgcnVucXVldWVfbG9jazsKZXh0ZXJuIHZvaWQgc2NoZWRfaW5pdCh2b2lkKTsK
ZXh0ZXJuIHZvaWQgaW5pdF9pZGxlKHZvaWQpOwpleHRlcm4gdm9pZCBzaG93X3N0YXRlKHZvaWQp
OwpleHRlcm4gdm9pZCB0cmFwX2luaXQodm9pZCk7CmV4dGVybiBzaWduZWQgbG9uZyAgc2NoZWR1
bGVfdGltZW91dChzaWduZWQgbG9uZyB0aW1lb3V0KSAgX19hdHRyaWJ1dGVfXygocmVncGFybSgz
KSkpIDsKICBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgIHZvaWQgc2NoZWR1bGUodm9pZCk7
CiAKIApzdHJ1Y3QgZmlsZXNfc3RydWN0IHsKCWF0b21pY190IGNvdW50OwoJaW50IG1heF9mZHM7
CglpbnQgbWF4X2Zkc2V0OwoJaW50IG5leHRfZmQ7CglzdHJ1Y3QgZmlsZSAqKiBmZDsJIAoJZmRf
c2V0ICpjbG9zZV9vbl9leGVjOwoJZmRfc2V0ICpvcGVuX2ZkczsKCWZkX3NldCBjbG9zZV9vbl9l
eGVjX2luaXQ7CglmZF9zZXQgb3Blbl9mZHNfaW5pdDsKCXN0cnVjdCBmaWxlICogZmRfYXJyYXlb
MzIgIF07Cn07CiMgMTU2ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9zY2hl
ZC5oIgpzdHJ1Y3QgZnNfc3RydWN0IHsKCWF0b21pY190IGNvdW50OwoJaW50IHVtYXNrOwoJc3Ry
dWN0IGRlbnRyeSAqIHJvb3QsICogcHdkOwp9OwogCiAKc3RydWN0IG1tX3N0cnVjdCB7CglzdHJ1
Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm1tYXA7CQkgCglzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm1tYXBf
YXZsOwkgCglzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm1tYXBfY2FjaGU7CSAKCXBnZF90ICogcGdk
OwoJYXRvbWljX3QgY291bnQ7CglpbnQgbWFwX2NvdW50OwkJCQkgCglzdHJ1Y3Qgc2VtYXBob3Jl
IG1tYXBfc2VtOwoJdW5zaWduZWQgbG9uZyBjb250ZXh0OwoJdW5zaWduZWQgbG9uZyBzdGFydF9j
b2RlLCBlbmRfY29kZSwgc3RhcnRfZGF0YSwgZW5kX2RhdGE7Cgl1bnNpZ25lZCBsb25nIHN0YXJ0
X2JyaywgYnJrLCBzdGFydF9zdGFjazsKCXVuc2lnbmVkIGxvbmcgYXJnX3N0YXJ0LCBhcmdfZW5k
LCBlbnZfc3RhcnQsIGVudl9lbmQ7Cgl1bnNpZ25lZCBsb25nIHJzcywgdG90YWxfdm0sIGxvY2tl
ZF92bTsKCXVuc2lnbmVkIGxvbmcgZGVmX2ZsYWdzOwoJdW5zaWduZWQgbG9uZyBjcHVfdm1fbWFz
azsKCXVuc2lnbmVkIGxvbmcgc3dhcF9jbnQ7CSAKCXVuc2lnbmVkIGxvbmcgc3dhcF9hZGRyZXNz
OwoJIAoJdm9pZCAqIHNlZ21lbnRzOwp9OwojIDIxMCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2lu
Y2x1ZGUvbGludXgvc2NoZWQuaCIKc3RydWN0IHNpZ25hbF9zdHJ1Y3QgewoJYXRvbWljX3QJCWNv
dW50OwoJc3RydWN0IGtfc2lnYWN0aW9uCWFjdGlvbls2NCBdOwoJc3BpbmxvY2tfdAkJc2lnbG9j
azsKfTsKIApzdHJ1Y3QgdXNlcl9zdHJ1Y3Q7CnN0cnVjdCB0YXNrX3N0cnVjdCB7CiAKCXZvbGF0
aWxlIGxvbmcgc3RhdGU7CSAKCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CSAKCWludCBzaWdwZW5kaW5n
OwoJbW1fc2VnbWVudF90IGFkZHJfbGltaXQ7CSAKCXN0cnVjdCBleGVjX2RvbWFpbiAqZXhlY19k
b21haW47CiAKCWxvbmcgY291bnRlcjsKCWxvbmcgcHJpb3JpdHk7CgljeWNsZXNfdCBhdmdfc2xp
Y2U7CiAKCWludCBoYXNfY3B1OwoJaW50IHByb2Nlc3NvcjsKCWludCBsYXN0X3Byb2Nlc3NvcjsK
CWludCBsb2NrX2RlcHRoOwkJIAkKCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dF90YXNrLCAqcHJl
dl90YXNrOwoJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0X3J1biwgICpwcmV2X3J1bjsKIAoJc3Ry
dWN0IGxpbnV4X2JpbmZtdCAqYmluZm10OwoJaW50IGV4aXRfY29kZSwgZXhpdF9zaWduYWw7Cglp
bnQgcGRlYXRoX3NpZ25hbDsgICAKCSAKCXVuc2lnbmVkIGxvbmcgcGVyc29uYWxpdHk7CglpbnQg
ZHVtcGFibGU6MTsKCWludCBkaWRfZXhlYzoxOwoJcGlkX3QgcGlkOwoJcGlkX3QgcGdycDsKCXBp
ZF90IHR0eV9vbGRfcGdycDsKCXBpZF90IHNlc3Npb247CgkgCglpbnQgbGVhZGVyOwoJIAoJc3Ry
dWN0IHRhc2tfc3RydWN0ICpwX29wcHRyLCAqcF9wcHRyLCAqcF9jcHRyLCAqcF95c3B0ciwgKnBf
b3NwdHI7CgkgCglzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpZGhhc2hfbmV4dDsKCXN0cnVjdCB0YXNr
X3N0cnVjdCAqKnBpZGhhc2hfcHByZXY7CgkgCglzdHJ1Y3QgdGFza19zdHJ1Y3QgKip0YXJyYXlf
cHRyOwoJc3RydWN0IHdhaXRfcXVldWUgKndhaXRfY2hsZGV4aXQ7CSAKCXN0cnVjdCBzZW1hcGhv
cmUgKnZmb3JrX3NlbTsJCSAKCXVuc2lnbmVkIGxvbmcgcG9saWN5LCBydF9wcmlvcml0eTsKCXVu
c2lnbmVkIGxvbmcgaXRfcmVhbF92YWx1ZSwgaXRfcHJvZl92YWx1ZSwgaXRfdmlydF92YWx1ZTsK
CXVuc2lnbmVkIGxvbmcgaXRfcmVhbF9pbmNyLCBpdF9wcm9mX2luY3IsIGl0X3ZpcnRfaW5jcjsK
CXN0cnVjdCB0aW1lcl9saXN0IHJlYWxfdGltZXI7CglzdHJ1Y3QgdG1zIHRpbWVzOwoJdW5zaWdu
ZWQgbG9uZyBzdGFydF90aW1lOwoJbG9uZyBwZXJfY3B1X3V0aW1lWzEgXSwgcGVyX2NwdV9zdGlt
ZVsxIF07CiAKCXVuc2lnbmVkIGxvbmcgbWluX2ZsdCwgbWFqX2ZsdCwgbnN3YXAsIGNtaW5fZmx0
LCBjbWFqX2ZsdCwgY25zd2FwOwoJaW50IHN3YXBwYWJsZToxOwogCgl1aWRfdCB1aWQsZXVpZCxz
dWlkLGZzdWlkOwoJZ2lkX3QgZ2lkLGVnaWQsc2dpZCxmc2dpZDsKCWludCBuZ3JvdXBzOwoJZ2lk
X3QJZ3JvdXBzWzMyIF07CiAgICAgICAga2VybmVsX2NhcF90ICAgY2FwX2VmZmVjdGl2ZSwgY2Fw
X2luaGVyaXRhYmxlLCBjYXBfcGVybWl0dGVkOwoJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyOwog
CglzdHJ1Y3QgcmxpbWl0IHJsaW1bMTAgXTsKCXVuc2lnbmVkIHNob3J0IHVzZWRfbWF0aDsKCWNo
YXIgY29tbVsxNl07CiAKCWludCBsaW5rX2NvdW50OwoJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsg
IAogCglzdHJ1Y3Qgc2VtX3VuZG8gKnNlbXVuZG87CglzdHJ1Y3Qgc2VtX3F1ZXVlICpzZW1zbGVl
cGluZzsKIAoJc3RydWN0IHRocmVhZF9zdHJ1Y3QgdHNzOwogCglzdHJ1Y3QgZnNfc3RydWN0ICpm
czsKIAoJc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXM7CiAKCXN0cnVjdCBtbV9zdHJ1Y3QgKm1t
OwogCglzcGlubG9ja190IHNpZ21hc2tfbG9jazsJIAoJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNp
ZzsKCXNpZ3NldF90IHNpZ25hbCwgYmxvY2tlZDsKCXN0cnVjdCBzaWduYWxfcXVldWUgKnNpZ3F1
ZXVlLCAqKnNpZ3F1ZXVlX3RhaWw7Cgl1bnNpZ25lZCBsb25nIHNhc19zc19zcDsKCXNpemVfdCBz
YXNfc3Nfc2l6ZTsKCQogCiAgIAl1MzIgcGFyZW50X2V4ZWNfaWQ7CiAgIAl1MzIgc2VsZl9leGVj
X2lkOwp9OwogCgkJCQkJIAogCiAKIyA0MTIgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRl
L2xpbnV4L3NjaGVkLmgiCnVuaW9uIHRhc2tfdW5pb24gewoJc3RydWN0IHRhc2tfc3RydWN0IHRh
c2s7Cgl1bnNpZ25lZCBsb25nIHN0YWNrWzIwNDhdOwp9OwpleHRlcm4gdW5pb24gdGFza191bmlv
biBpbml0X3Rhc2tfdW5pb247CmV4dGVybiBzdHJ1Y3QgICBtbV9zdHJ1Y3QgaW5pdF9tbTsKZXh0
ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza1s1MTIgXTsKZXh0ZXJuIHN0cnVjdCB0YXNrX3N0
cnVjdCAqKnRhcnJheV9mcmVlbGlzdDsKZXh0ZXJuIHNwaW5sb2NrX3QgdGFza3Nsb3RfbG9jazsK
ZXh0ZXJuIF9faW5saW5lX18gdm9pZCBhZGRfZnJlZV90YXNrc2xvdChzdHJ1Y3QgdGFza19zdHJ1
Y3QgKip0KQp7Cgkodm9pZCkoICZ0YXNrc2xvdF9sb2NrICkgOwoJKnQgPSAoc3RydWN0IHRhc2tf
c3RydWN0ICopIHRhcnJheV9mcmVlbGlzdDsKCXRhcnJheV9mcmVlbGlzdCA9IHQ7CglkbyB7IH0g
d2hpbGUoMCkgOwp9CmV4dGVybiBfX2lubGluZV9fIHN0cnVjdCB0YXNrX3N0cnVjdCAqKmdldF9m
cmVlX3Rhc2tzbG90KHZvaWQpCnsKCXN0cnVjdCB0YXNrX3N0cnVjdCAqKnRzbG90OwoJKHZvaWQp
KCAmdGFza3Nsb3RfbG9jayApIDsKCWlmKCh0c2xvdCA9IHRhcnJheV9mcmVlbGlzdCkgIT0gKCh2
b2lkICopMCkgKQoJCXRhcnJheV9mcmVlbGlzdCA9IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiopICp0
c2xvdDsKCWRvIHsgfSB3aGlsZSgwKSA7CglyZXR1cm4gdHNsb3Q7Cn0KIApleHRlcm4gc3RydWN0
IHRhc2tfc3RydWN0ICpwaWRoYXNoWyg1MTIgID4+IDIpIF07CmV4dGVybiBfX2lubGluZV9fIHZv
aWQgaGFzaF9waWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQp7CglzdHJ1Y3QgdGFza19zdHJ1Y3Qg
KipodGFibGUgPSAmcGlkaGFzaFsoKCgoIHAtPnBpZCApID4+IDgpIF4gKCBwLT5waWQgKSkgJiAo
KDUxMiAgPj4gMikgIC0gMSkpIF07CglpZigocC0+cGlkaGFzaF9uZXh0ID0gKmh0YWJsZSkgIT0g
KCh2b2lkICopMCkgKQoJCSgqaHRhYmxlKS0+cGlkaGFzaF9wcHJldiA9ICZwLT5waWRoYXNoX25l
eHQ7CgkqaHRhYmxlID0gcDsKCXAtPnBpZGhhc2hfcHByZXYgPSBodGFibGU7Cn0KZXh0ZXJuIF9f
aW5saW5lX18gdm9pZCB1bmhhc2hfcGlkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKewoJaWYocC0+
cGlkaGFzaF9uZXh0KQoJCXAtPnBpZGhhc2hfbmV4dC0+cGlkaGFzaF9wcHJldiA9IHAtPnBpZGhh
c2hfcHByZXY7CgkqcC0+cGlkaGFzaF9wcHJldiA9IHAtPnBpZGhhc2hfbmV4dDsKfQpleHRlcm4g
X19pbmxpbmVfXyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZpbmRfdGFza19ieV9waWQoaW50IHBpZCkK
ewoJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqKmh0YWJsZSA9ICZwaWRoYXNoWygoKCggcGlkICkg
Pj4gOCkgXiAoIHBpZCApKSAmICgoNTEyICA+PiAyKSAgLSAxKSkgXTsKCWZvcihwID0gKmh0YWJs
ZTsgcCAmJiBwLT5waWQgIT0gcGlkOyBwID0gcC0+cGlkaGFzaF9uZXh0KQoJCTsKCXJldHVybiBw
Owp9CiAKZXh0ZXJuIGludCBhbGxvY191aWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKdm9pZCBm
cmVlX3VpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwojIDEgIi9ob21lL2p3NS90bXAvbGludXgy
Mi9pbmNsdWRlL2FzbS9jdXJyZW50LmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5j
bHVkZS9hc20vbDRhcmNoL2N1cnJlbnQuaCIgMQogCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIy
L2luY2x1ZGUvYXNtLWkzODYvY3VycmVudC5oIiAxCnN0cnVjdCB0YXNrX3N0cnVjdDsKc3RhdGlj
IGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBnZXRfY3VycmVudCh2b2lkKQp7CglzdHJ1Y3Qg
dGFza19zdHJ1Y3QgKmN1cnJlbnQ7CglfX2FzbV9fKCJhbmRsICUlZXNwLCUwOyAiOiI9ciIgKGN1
cnJlbnQpIDogIjAiICh+ODE5MVVMKSk7CglyZXR1cm4gY3VycmVudDsKIH0KIAojIDUgIi9ob21l
L2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvY3VycmVudC5oIiAyCiMgNCAiL2hv
bWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2N1cnJlbnQuaCIgMgojIDQ4MyAiL2hvbWUv
anc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgpleHRlcm4gdW5zaWduZWQg
bG9uZyB2b2xhdGlsZSBqaWZmaWVzOwpleHRlcm4gdW5zaWduZWQgbG9uZyBpdGltZXJfdGlja3M7
CmV4dGVybiB1bnNpZ25lZCBsb25nIGl0aW1lcl9uZXh0OwpleHRlcm4gc3RydWN0IHRpbWV2YWwg
eHRpbWU7CmV4dGVybiB2b2lkIGRvX3RpbWVyKHN0cnVjdCBwdF9yZWdzICopOwpleHRlcm4gdW5z
aWduZWQgaW50ICogcHJvZl9idWZmZXI7CmV4dGVybiB1bnNpZ25lZCBsb25nIHByb2ZfbGVuOwpl
eHRlcm4gdW5zaWduZWQgbG9uZyBwcm9mX3NoaWZ0OwpleHRlcm4gdm9pZCAgX193YWtlX3VwKHN0
cnVjdCB3YWl0X3F1ZXVlICoqIHAsIHVuc2lnbmVkIGludCBtb2RlKSAgX19hdHRyaWJ1dGVfXygo
cmVncGFybSgzKSkpIDsKZXh0ZXJuIHZvaWQgIHNsZWVwX29uKHN0cnVjdCB3YWl0X3F1ZXVlICoq
IHApICBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSkgOwpleHRlcm4gbG9uZyAgc2xlZXBfb25f
dGltZW91dChzdHJ1Y3Qgd2FpdF9xdWV1ZSAqKiBwLAoJCQkJICAgICAgc2lnbmVkIGxvbmcgdGlt
ZW91dCkgIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKSA7CmV4dGVybiB2b2lkICBpbnRlcnJ1
cHRpYmxlX3NsZWVwX29uKHN0cnVjdCB3YWl0X3F1ZXVlICoqIHApICBfX2F0dHJpYnV0ZV9fKChy
ZWdwYXJtKDMpKSkgOwpleHRlcm4gbG9uZyAgaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0
KHN0cnVjdCB3YWl0X3F1ZXVlICoqIHAsCgkJCQkJCSAgICBzaWduZWQgbG9uZyB0aW1lb3V0KSAg
X19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpIDsKZXh0ZXJuIHZvaWQgIHdha2VfdXBfcHJvY2Vz
cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0c2spICBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSkg
OwpleHRlcm4gaW50IGluX2dyb3VwX3AoZ2lkX3QgZ3JwKTsKZXh0ZXJuIHZvaWQgZmx1c2hfc2ln
bmFscyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmV4dGVybiB2b2lkIGZsdXNoX3NpZ25hbF9oYW5k
bGVycyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmV4dGVybiBpbnQgZGVxdWV1ZV9zaWduYWwoc2ln
c2V0X3QgKmJsb2NrLCBzaWdpbmZvX3QgKik7CmV4dGVybiBpbnQgc2VuZF9zaWdfaW5mbyhpbnQs
IHN0cnVjdCBzaWdpbmZvICppbmZvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmV4dGVybiBpbnQg
Zm9yY2Vfc2lnX2luZm8oaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgc3RydWN0IHRhc2tfc3Ry
dWN0ICopOwpleHRlcm4gaW50IGtpbGxfcGdfaW5mbyhpbnQsIHN0cnVjdCBzaWdpbmZvICppbmZv
LCBwaWRfdCk7CmV4dGVybiBpbnQga2lsbF9zbF9pbmZvKGludCwgc3RydWN0IHNpZ2luZm8gKmlu
Zm8sIHBpZF90KTsKZXh0ZXJuIGludCBraWxsX3Byb2NfaW5mbyhpbnQsIHN0cnVjdCBzaWdpbmZv
ICppbmZvLCBwaWRfdCk7CmV4dGVybiBpbnQga2lsbF9zb21ldGhpbmdfaW5mbyhpbnQsIHN0cnVj
dCBzaWdpbmZvICppbmZvLCBpbnQpOwpleHRlcm4gdm9pZCBub3RpZnlfcGFyZW50KHN0cnVjdCB0
YXNrX3N0cnVjdCAqIHRzaywgaW50KTsKZXh0ZXJuIHZvaWQgZm9yY2Vfc2lnKGludCBzaWcsIHN0
cnVjdCB0YXNrX3N0cnVjdCAqIHApOwpleHRlcm4gaW50IHNlbmRfc2lnKGludCBzaWcsIHN0cnVj
dCB0YXNrX3N0cnVjdCAqIHAsIGludCBwcml2KTsKZXh0ZXJuIGludCBraWxsX3BnKHBpZF90LCBp
bnQsIGludCk7CmV4dGVybiBpbnQga2lsbF9zbChwaWRfdCwgaW50LCBpbnQpOwpleHRlcm4gaW50
IGtpbGxfcHJvYyhwaWRfdCwgaW50LCBpbnQpOwpleHRlcm4gaW50IGRvX3NpZ2FjdGlvbihpbnQg
c2lnLCBjb25zdCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmFjdCwKCQkJc3RydWN0IGtfc2lnYWN0aW9u
ICpvYWN0KTsKZXh0ZXJuIGludCBkb19zaWdhbHRzdGFjayhjb25zdCBzdGFja190ICpzcywgc3Rh
Y2tfdCAqb3NzLCB1bnNpZ25lZCBsb25nIHNwKTsKZXh0ZXJuIGlubGluZSBpbnQgc2lnbmFsX3Bl
bmRpbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKQp7CglyZXR1cm4gKHAtPnNpZ3BlbmRpbmcgIT0g
MCk7Cn0KIApzdGF0aWMgaW5saW5lIHZvaWQgcmVjYWxjX3NpZ3BlbmRpbmcoc3RydWN0IHRhc2tf
c3RydWN0ICp0KQp7Cgl1bnNpZ25lZCBsb25nIHJlYWR5OwoJbG9uZyBpOwoJc3dpdGNoICgoNjQg
IC8gMzIgKSApIHsKCWRlZmF1bHQ6CgkJZm9yIChpID0gKDY0ICAvIDMyICkgLCByZWFkeSA9IDA7
IC0taSA+PSAwIDspCgkJCXJlYWR5IHw9IHQtPnNpZ25hbC5zaWdbaV0gJn4gdC0+YmxvY2tlZC5z
aWdbaV07CgkJYnJlYWs7CgljYXNlIDQ6IHJlYWR5ICA9IHQtPnNpZ25hbC5zaWdbM10gJn4gdC0+
YmxvY2tlZC5zaWdbM107CgkJcmVhZHkgfD0gdC0+c2lnbmFsLnNpZ1syXSAmfiB0LT5ibG9ja2Vk
LnNpZ1syXTsKCQlyZWFkeSB8PSB0LT5zaWduYWwuc2lnWzFdICZ+IHQtPmJsb2NrZWQuc2lnWzFd
OwoJCXJlYWR5IHw9IHQtPnNpZ25hbC5zaWdbMF0gJn4gdC0+YmxvY2tlZC5zaWdbMF07CgkJYnJl
YWs7CgljYXNlIDI6IHJlYWR5ICA9IHQtPnNpZ25hbC5zaWdbMV0gJn4gdC0+YmxvY2tlZC5zaWdb
MV07CgkJcmVhZHkgfD0gdC0+c2lnbmFsLnNpZ1swXSAmfiB0LT5ibG9ja2VkLnNpZ1swXTsKCQli
cmVhazsKCWNhc2UgMTogcmVhZHkgID0gdC0+c2lnbmFsLnNpZ1swXSAmfiB0LT5ibG9ja2VkLnNp
Z1swXTsKCX0KCXQtPnNpZ3BlbmRpbmcgPSAocmVhZHkgIT0gMCk7Cn0KIApzdGF0aWMgaW5saW5l
IGludCBvbl9zaWdfc3RhY2sodW5zaWduZWQgbG9uZyBzcCkKewoJcmV0dXJuIChzcCA+PSBnZXRf
Y3VycmVudCgpIC0+c2FzX3NzX3NwCgkJJiYgc3AgPCBnZXRfY3VycmVudCgpIC0+c2FzX3NzX3Nw
ICsgZ2V0X2N1cnJlbnQoKSAtPnNhc19zc19zaXplKTsKfQpzdGF0aWMgaW5saW5lIGludCBzYXNf
c3NfZmxhZ3ModW5zaWduZWQgbG9uZyBzcCkKewoJcmV0dXJuIChnZXRfY3VycmVudCgpIC0+c2Fz
X3NzX3NpemUgPT0gMCA/IDIgCgkJOiBvbl9zaWdfc3RhY2soc3ApID8gMSAgOiAwKTsKfQpleHRl
cm4gaW50IHJlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsCgkJICAgICAgIHZvaWQgKCpoYW5k
bGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCgkJICAgICAgIHVuc2lnbmVkIGxv
bmcgZmxhZ3MsIAoJCSAgICAgICBjb25zdCBjaGFyICpkZXZpY2UsCgkJICAgICAgIHZvaWQgKmRl
dl9pZCk7CmV4dGVybiB2b2lkIGZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9p
ZCk7CiAKZXh0ZXJuIGlubGluZSBpbnQgc3VzZXIodm9pZCkKewoJaWYgKCEgKCAoMSA8PCAoIDAg
ICsxKSkgJiAweDAwMDAwMDAwICA/ICgxIDw8ICggMCAgKSkgJiAweDAwMDAwMDAwICA6CSgxIDw8
ICggMCAgKSkgJiBzZWN1cmViaXRzICkgICYmIGdldF9jdXJyZW50KCkgLT5ldWlkID09IDApIHsg
CgkJZ2V0X2N1cnJlbnQoKSAtPmZsYWdzIHw9IDB4MDAwMDAxMDAgOwoJCXJldHVybiAxOwoJfQoJ
cmV0dXJuIDA7Cn0KZXh0ZXJuIGlubGluZSBpbnQgZnN1c2VyKHZvaWQpCnsKCWlmICghICggKDEg
PDwgKCAwICArMSkpICYgMHgwMDAwMDAwMCAgPyAoMSA8PCAoIDAgICkpICYgMHgwMDAwMDAwMCAg
OgkoMSA8PCAoIDAgICkpICYgc2VjdXJlYml0cyApICAmJiBnZXRfY3VycmVudCgpIC0+ZnN1aWQg
PT0gMCkgewoJCWdldF9jdXJyZW50KCkgLT5mbGFncyB8PSAweDAwMDAwMTAwIDsKCQlyZXR1cm4g
MTsKCX0KCXJldHVybiAwOwp9CiAKZXh0ZXJuIGlubGluZSBpbnQgY2FwYWJsZShpbnQgY2FwKQp7
CglpZiAoKCggIGdldF9jdXJyZW50KCkgLT5jYXBfZWZmZWN0aXZlICApICAmICgxIDw8ICggICBj
YXAgICkpICAmIGNhcF9ic2V0KSApCiAgICAgICAgewoJCWdldF9jdXJyZW50KCkgLT5mbGFncyB8
PSAweDAwMDAwMTAwIDsKCQlyZXR1cm4gMTsKCX0KCXJldHVybiAwOwp9CiAKZXh0ZXJuIHN0cnVj
dCBtbV9zdHJ1Y3QgKiBtbV9hbGxvYyh2b2lkKTsKc3RhdGljIGlubGluZSB2b2lkIG1tZ2V0KHN0
cnVjdCBtbV9zdHJ1Y3QgKiBtbSkKewoJYXRvbWljX2luYygmbW0tPmNvdW50KTsKfQpleHRlcm4g
dm9pZCBtbXB1dChzdHJ1Y3QgbW1fc3RydWN0ICopOwogCmV4dGVybiB2b2lkIG1tX3JlbGVhc2Uo
dm9pZCk7CiAKZXh0ZXJuIHN0cnVjdCBmaWxlICoqIGFsbG9jX2ZkX2FycmF5KGludCk7CmV4dGVy
biBpbnQgZXhwYW5kX2ZkX2FycmF5KHN0cnVjdCBmaWxlc19zdHJ1Y3QgKiwgaW50IG5yKTsKZXh0
ZXJuIHZvaWQgZnJlZV9mZF9hcnJheShzdHJ1Y3QgZmlsZSAqKiwgaW50KTsKZXh0ZXJuIGZkX3Nl
dCAqYWxsb2NfZmRzZXQoaW50KTsKZXh0ZXJuIGludCBleHBhbmRfZmRzZXQoc3RydWN0IGZpbGVz
X3N0cnVjdCAqLCBpbnQgbnIpOwpleHRlcm4gdm9pZCBmcmVlX2Zkc2V0KGZkX3NldCAqLCBpbnQp
OwogCnN0YXRpYyBpbmxpbmUgaW50IGV4cGFuZF9maWxlcyhzdHJ1Y3QgZmlsZXNfc3RydWN0ICpm
aWxlcywgaW50IG5yKQp7CglpbnQgZXJyLCBleHBhbmQgPSAwOwoJCglpZiAobnIgPj0gZmlsZXMt
Pm1heF9mZHNldCkgewoJCWV4cGFuZCA9IDE7CgkJaWYgKChlcnIgPSBleHBhbmRfZmRzZXQoZmls
ZXMsIG5yICsgMSkpKQoJCQlnb3RvIG91dDsKCX0KCWlmIChuciA+PSBmaWxlcy0+bWF4X2Zkcykg
ewoJCWV4cGFuZCA9IDE7CgkJaWYgKChlcnIgPSBleHBhbmRfZmRfYXJyYXkoZmlsZXMsIG5yICsg
MSkpKQoJCQlnb3RvIG91dDsKCX0KCWVyciA9IGV4cGFuZDsKIG91dDoKCXJldHVybiBlcnI7Cn0K
ZXh0ZXJuIGludCAgY29weV90aHJlYWQoaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IHB0X3JlZ3MgKik7CmV4dGVybiB2b2lkIGZs
dXNoX3RocmVhZCh2b2lkKTsKZXh0ZXJuIHZvaWQgZXhpdF90aHJlYWQodm9pZCk7CmV4dGVybiB2
b2lkIGV4aXRfbW0oc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRlcm4gdm9pZCBleGl0X2ZzKHN0
cnVjdCB0YXNrX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgZXhpdF9maWxlcyhzdHJ1Y3QgdGFza19z
dHJ1Y3QgKik7CmV4dGVybiB2b2lkIGV4aXRfc2lnaGFuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7
CmV4dGVybiBpbnQgZG9fZXhlY3ZlKGNoYXIgKiwgY2hhciAqKiwgY2hhciAqKiwgc3RydWN0IHB0
X3JlZ3MgKik7CmV4dGVybiBpbnQgZG9fZm9yayh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCBzdHJ1Y3QgcHRfcmVncyAqKTsKIApleHRlcm4gaW5saW5lIHZvaWQgX19hZGRfd2FpdF9xdWV1
ZShzdHJ1Y3Qgd2FpdF9xdWV1ZSAqKiBwLCBzdHJ1Y3Qgd2FpdF9xdWV1ZSAqIHdhaXQpCnsKCXdh
aXQtPm5leHQgPSAqcCA/IDogKChzdHJ1Y3Qgd2FpdF9xdWV1ZSAqKSgoIHAgKS0xKSkgOwoJKnAg
PSB3YWl0Owp9CmV4dGVybiByd2xvY2tfdCB3YWl0cXVldWVfbG9jazsKZXh0ZXJuIGlubGluZSB2
b2lkIGFkZF93YWl0X3F1ZXVlKHN0cnVjdCB3YWl0X3F1ZXVlICoqIHAsIHN0cnVjdCB3YWl0X3F1
ZXVlICogd2FpdCkKewoJdW5zaWduZWQgbG9uZyBmbGFnczsKCWRvIHsgX19hc21fXyBfX3ZvbGF0
aWxlX18oInB1c2hmbCA7IHBvcGwgJTAiOiI9ZyIgKCAgICAgZmxhZ3MgICAgKTogICA6Im1lbW9y
eSIpICAgOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImNsaSI6IDogOiJtZW1vcnkiKSAgIDsgfSB3
aGlsZSAoMCkgOwoJX19hZGRfd2FpdF9xdWV1ZShwLCB3YWl0KTsKCV9fYXNtX18gX192b2xhdGls
ZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogICA6ImciICggICAgIGZsYWdzICAgICk6Im1lbW9yeSIp
ICAgIDsKfQpleHRlcm4gaW5saW5lIHZvaWQgX19yZW1vdmVfd2FpdF9xdWV1ZShzdHJ1Y3Qgd2Fp
dF9xdWV1ZSAqKiBwLCBzdHJ1Y3Qgd2FpdF9xdWV1ZSAqIHdhaXQpCnsKCXN0cnVjdCB3YWl0X3F1
ZXVlICogbmV4dCA9IHdhaXQtPm5leHQ7CglzdHJ1Y3Qgd2FpdF9xdWV1ZSAqIGhlYWQgPSBuZXh0
OwoJc3RydWN0IHdhaXRfcXVldWUgKiB0bXA7Cgl3aGlsZSAoKHRtcCA9IGhlYWQtPm5leHQpICE9
IHdhaXQpIHsKCQloZWFkID0gdG1wOwoJfQoJaGVhZC0+bmV4dCA9IG5leHQ7Cn0KZXh0ZXJuIGlu
bGluZSB2b2lkIHJlbW92ZV93YWl0X3F1ZXVlKHN0cnVjdCB3YWl0X3F1ZXVlICoqIHAsIHN0cnVj
dCB3YWl0X3F1ZXVlICogd2FpdCkKewoJdW5zaWduZWQgbG9uZyBmbGFnczsKCWRvIHsgX19hc21f
XyBfX3ZvbGF0aWxlX18oInB1c2hmbCA7IHBvcGwgJTAiOiI9ZyIgKCAgICAgZmxhZ3MgICAgKTog
ICA6Im1lbW9yeSIpICAgOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImNsaSI6IDogOiJtZW1vcnki
KSAgIDsgfSB3aGlsZSAoMCkgOwoJX19yZW1vdmVfd2FpdF9xdWV1ZShwLCB3YWl0KTsKCV9fYXNt
X18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogICA6ImciICggICAgIGZsYWdzICAg
ICk6Im1lbW9yeSIpICAgIDsgCn0KIyA3NjEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRl
L2xpbnV4L3NjaGVkLmgiCiMgNzkwICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51
eC9zY2hlZC5oIgoJCiMgODA5ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9z
Y2hlZC5oIgojIDgyMCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvc2NoZWQu
aCIKIyA0ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9tbS5oIiAyCmV4dGVy
biB1bnNpZ25lZCBsb25nIG1heF9tYXBucjsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbnVtX3BoeXNw
YWdlczsKZXh0ZXJuIHZvaWQgKiBoaWdoX21lbW9yeTsKZXh0ZXJuIGludCBwYWdlX2NsdXN0ZXI7
CiAKIApzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgewoJc3RydWN0IG1tX3N0cnVjdCAqIHZtX21tOwkg
Cgl1bnNpZ25lZCBsb25nIHZtX3N0YXJ0OwoJdW5zaWduZWQgbG9uZyB2bV9lbmQ7CgkgCglzdHJ1
Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtX25leHQ7CglwZ3Byb3RfdCB2bV9wYWdlX3Byb3Q7Cgl1bnNp
Z25lZCBzaG9ydCB2bV9mbGFnczsKCSAKCXNob3J0IHZtX2F2bF9oZWlnaHQ7CglzdHJ1Y3Qgdm1f
YXJlYV9zdHJ1Y3QgKiB2bV9hdmxfbGVmdDsKCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtX2F2
bF9yaWdodDsKCSAKCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1fbmV4dF9zaGFyZTsKCXN0cnVj
dCB2bV9hcmVhX3N0cnVjdCAqKnZtX3BwcmV2X3NoYXJlOwoJc3RydWN0IHZtX29wZXJhdGlvbnNf
c3RydWN0ICogdm1fb3BzOwoJdW5zaWduZWQgbG9uZyB2bV9vZmZzZXQ7CglzdHJ1Y3QgZmlsZSAq
IHZtX2ZpbGU7Cgl1bnNpZ25lZCBsb25nIHZtX3B0ZTsJCQkgCn07CiAKIApleHRlcm4gcGdwcm90
X3QgcHJvdGVjdGlvbl9tYXBbMTZdOwogCnN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7Cgl2
b2lkICgqb3Blbikoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogYXJlYSk7Cgl2b2lkICgqY2xvc2Up
KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIGFyZWEpOwoJdm9pZCAoKnVubWFwKShzdHJ1Y3Qgdm1f
YXJlYV9zdHJ1Y3QgKmFyZWEsIHVuc2lnbmVkIGxvbmcsIHNpemVfdCk7Cgl2b2lkICgqcHJvdGVj
dCkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhLCB1bnNpZ25lZCBsb25nLCBzaXplX3QsIHVu
c2lnbmVkIGludCBuZXdwcm90KTsKCWludCAoKnN5bmMpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq
YXJlYSwgdW5zaWduZWQgbG9uZywgc2l6ZV90LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwoJdm9pZCAo
KmFkdmlzZSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhLCB1bnNpZ25lZCBsb25nLCBzaXpl
X3QsIHVuc2lnbmVkIGludCBhZHZpc2UpOwoJdW5zaWduZWQgbG9uZyAoKm5vcGFnZSkoc3RydWN0
IHZtX2FyZWFfc3RydWN0ICogYXJlYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgd3JpdGVf
YWNjZXNzKTsKCXVuc2lnbmVkIGxvbmcgKCp3cHBhZ2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq
IGFyZWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKCQl1bnNpZ25lZCBsb25nIHBhZ2UpOwoJaW50
ICgqc3dhcG91dCkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCBwYWdlICopOwoJcHRl
X3QgKCpzd2FwaW4pKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nKTsKfTsKIAp0eXBlZGVmIHN0cnVjdCBwYWdlIHsKCSAKCXN0cnVjdCBwYWdlICpu
ZXh0OwoJc3RydWN0IHBhZ2UgKnByZXY7CglzdHJ1Y3QgaW5vZGUgKmlub2RlOwoJdW5zaWduZWQg
bG9uZyBvZmZzZXQ7CglzdHJ1Y3QgcGFnZSAqbmV4dF9oYXNoOwoJYXRvbWljX3QgY291bnQ7Cgl1
bnNpZ25lZCBsb25nIGZsYWdzOwkgCglzdHJ1Y3Qgd2FpdF9xdWV1ZSAqd2FpdDsKCXN0cnVjdCBw
YWdlICoqcHByZXZfaGFzaDsKCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJ1ZmZlcnM7Cn0gbWVtX21h
cF90OwogCiAKIApleHRlcm4gbWVtX21hcF90ICogbWVtX21hcDsKIApleHRlcm4gdW5zaWduZWQg
bG9uZyAgX19nZXRfZnJlZV9wYWdlcyhpbnQgZ2ZwX21hc2ssIHVuc2lnbmVkIGxvbmcgZ2ZwX29y
ZGVyKSAgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpIDsKZXh0ZXJuIGlubGluZSB1bnNpZ25l
ZCBsb25nIGdldF9mcmVlX3BhZ2UoaW50IGdmcF9tYXNrKQp7Cgl1bnNpZ25lZCBsb25nIHBhZ2U7
CglwYWdlID0gX19nZXRfZnJlZV9wYWdlcygoIGdmcF9tYXNrICksMCkgOwoJaWYgKHBhZ2UpCgkJ
KF9fYnVpbHRpbl9jb25zdGFudF9wKCAgMCApID8gKF9fYnVpbHRpbl9jb25zdGFudF9wKCAoICAo
MVVMIDw8IDEyICkgICkgKSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCggKCAodm9p
ZCAqKSggcGFnZSApICkgKSwoICgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKCAgMCApKSAp
LCggKCAgKDFVTCA8PCAxMiApICApICkpIDogX19jb25zdGFudF9jX21lbXNldCgoICggKHZvaWQg
KikoIHBhZ2UgKSApICksKCAoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSggIDAgKSkgKSwo
ICggICgxVUwgPDwgMTIgKSAgKSApKSkgIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKCAoICAoMVVM
IDw8IDEyICkgICkgKSA/IF9fbWVtc2V0X2dlbmVyaWMoKCAoICggKHZvaWQgKikoIHBhZ2UgKSAp
ICkgKSwoICggKCAgMCApICkgKSwoICggKCAgKDFVTCA8PCAxMiApICApICkgKSkgIDogX19tZW1z
ZXRfZ2VuZXJpYygoICggKHZvaWQgKikoIHBhZ2UgKSApICksKCAoICAwICkgKSwoICggICgxVUwg
PDwgMTIgKSAgKSApKSkgKSAgOwoJcmV0dXJuIHBhZ2U7Cn0KZXh0ZXJuIGludCBsb3dfb25fbWVt
b3J5OwogCmV4dGVybiB2b2lkICBmcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWdu
ZWQgbG9uZyBvcmRlcikgIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKSA7CmV4dGVybiB2b2lk
ICBfX2ZyZWVfcGFnZShzdHJ1Y3QgcGFnZSAqKSAgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkp
IDsKZXh0ZXJuIHZvaWQgc2hvd19mcmVlX2FyZWFzKHZvaWQpOwpleHRlcm4gdW5zaWduZWQgbG9u
ZyBwdXRfZGlydHlfcGFnZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0c2ssdW5zaWduZWQgbG9uZyBw
YWdlLAoJdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKZXh0ZXJuIHZvaWQgZnJlZV9wYWdlX3RhYmxl
cyhzdHJ1Y3QgbW1fc3RydWN0ICogbW0pOwpleHRlcm4gdm9pZCBjbGVhcl9wYWdlX3RhYmxlcyhz
dHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIGludCk7CmV4dGVybiBpbnQgbmV3X3Bh
Z2VfdGFibGVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHRzayk7CmV4dGVybiB2b2lkIHphcF9wYWdl
X3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2ln
bmVkIGxvbmcgc2l6ZSk7CmV4dGVybiBpbnQgY29weV9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1
Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZt
YSk7CmV4dGVybiBpbnQgcmVtYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGZyb20sIHVuc2ln
bmVkIGxvbmcgdG8sIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCk7CmV4dGVybiBp
bnQgemVyb21hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyBz
aXplLCBwZ3Byb3RfdCBwcm90KTsKZXh0ZXJuIHZvaWQgdm10cnVuY2F0ZShzdHJ1Y3QgaW5vZGUg
KiBpbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwpleHRlcm4gaW50IGhhbmRsZV9tbV9mYXVs
dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayxzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5z
aWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgd3JpdGVfYWNjZXNzKTsKZXh0ZXJuIGludCBtYWtlX3Bh
Z2VzX3ByZXNlbnQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCk7CmV4dGVy
biBpbnQgcGd0X2NhY2hlX3dhdGVyWzJdOwpleHRlcm4gaW50IGNoZWNrX3BndF9jYWNoZSh2b2lk
KTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGFnaW5nX2luaXQodW5zaWduZWQgbG9uZyBzdGFydF9t
ZW0sIHVuc2lnbmVkIGxvbmcgZW5kX21lbSk7CmV4dGVybiB2b2lkIG1lbV9pbml0KHVuc2lnbmVk
IGxvbmcgc3RhcnRfbWVtLCB1bnNpZ25lZCBsb25nIGVuZF9tZW0pOwpleHRlcm4gdm9pZCBzaG93
X21lbSh2b2lkKTsKZXh0ZXJuIHZvaWQgc2lfbWVtaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqIHZhbCk7
CiAKZXh0ZXJuIHZvaWQgdm1hX2luaXQodm9pZCk7CmV4dGVybiB2b2lkIG1lcmdlX3NlZ21lbnRz
KHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CmV4dGVy
biB2b2lkIGluc2VydF92bV9zdHJ1Y3Qoc3RydWN0IG1tX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJl
YV9zdHJ1Y3QgKik7CmV4dGVybiB2b2lkIGJ1aWxkX21tYXBfYXZsKHN0cnVjdCBtbV9zdHJ1Y3Qg
Kik7CmV4dGVybiB2b2lkIGV4aXRfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICopOwpleHRlcm4gdW5z
aWduZWQgbG9uZyBnZXRfdW5tYXBwZWRfYXJlYSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
KTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBsb25nLAoJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZyk7CmV4dGVybiBpbnQgZG9fbXVubWFwKHVuc2lnbmVkIGxvbmcsIHNpemVfdCk7CiAK
ZXh0ZXJuIHZvaWQgcmVtb3ZlX2lub2RlX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CmV4dGVybiB1bnNp
Z25lZCBsb25nIHBhZ2VfdW51c2Uoc3RydWN0IHBhZ2UgKik7CmV4dGVybiBpbnQgc2hyaW5rX21t
YXAoaW50LCBpbnQpOwpleHRlcm4gdm9pZCB0cnVuY2F0ZV9pbm9kZV9wYWdlcyhzdHJ1Y3QgaW5v
ZGUgKiwgdW5zaWduZWQgbG9uZyk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGdldF9jYWNoZWRfcGFn
ZShzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQgbG9uZywgaW50KTsKZXh0ZXJuIHZvaWQgcHV0X2Nh
Y2hlZF9wYWdlKHVuc2lnbmVkIGxvbmcpOwogCiAKIApzdGF0aWMgaW5saW5lIGludCBleHBhbmRf
c3RhY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3Mp
CnsKCXVuc2lnbmVkIGxvbmcgZ3JvdzsKCWFkZHJlc3MgJj0gKH4oKDFVTCA8PCAxMiApIC0xKSkg
OwoJZ3JvdyA9IHZtYS0+dm1fc3RhcnQgLSBhZGRyZXNzOwoJaWYgKCh2bWEtPnZtX2VuZCAtIGFk
ZHJlc3MKCSAgICA+IGdldF9jdXJyZW50KCkgLT5ybGltWzMgXS5ybGltX2N1cikgfHwKCSAgICAo
KGdldF9jdXJyZW50KCkgLT5ybGltWzkgXS5ybGltX2N1ciA8ICgobG9uZykofjBVTD4+MSkpICkg
JiYKCSAgICAoKHZtYS0+dm1fbW0tPnRvdGFsX3ZtIDw8IDEyICkgKyBncm93CgkgICAgPiBnZXRf
Y3VycmVudCgpIC0+cmxpbVs5IF0ucmxpbV9jdXIpKSkKCQlyZXR1cm4gLSAxMiA7Cgl2bWEtPnZt
X3N0YXJ0ID0gYWRkcmVzczsKCXZtYS0+dm1fb2Zmc2V0IC09IGdyb3c7Cgl2bWEtPnZtX21tLT50
b3RhbF92bSArPSBncm93ID4+IDEyIDsKCWlmICh2bWEtPnZtX2ZsYWdzICYgMHgyMDAwICkKCQl2
bWEtPnZtX21tLT5sb2NrZWRfdm0gKz0gZ3JvdyA+PiAxMiA7CglyZXR1cm4gMDsKfQogCmV4dGVy
biBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBmaW5kX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICogbW0s
IHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1
Y3QgKiBmaW5kX3ZtYV9pbnRlcnNlY3Rpb24oc3RydWN0IG1tX3N0cnVjdCAqIG1tLCB1bnNpZ25l
ZCBsb25nIHN0YXJ0X2FkZHIsIHVuc2lnbmVkIGxvbmcgZW5kX2FkZHIpCnsKCXN0cnVjdCB2bV9h
cmVhX3N0cnVjdCAqIHZtYSA9IGZpbmRfdm1hKG1tLHN0YXJ0X2FkZHIpOwoJaWYgKHZtYSAmJiBl
bmRfYWRkciA8PSB2bWEtPnZtX3N0YXJ0KQoJCXZtYSA9ICgodm9pZCAqKTApIDsKCXJldHVybiB2
bWE7Cn0KIyAxNCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvc2xhYi5oIiAy
CiAKIAogCiAKZXh0ZXJuIGxvbmcga21lbV9jYWNoZV9pbml0KGxvbmcsIGxvbmcpOwpleHRlcm4g
dm9pZCBrbWVtX2NhY2hlX3NpemVzX2luaXQodm9pZCk7CmV4dGVybiBrbWVtX2NhY2hlX3QgKmtt
ZW1fZmluZF9nZW5lcmFsX2NhY2hlcChzaXplX3QpOwpleHRlcm4ga21lbV9jYWNoZV90ICprbWVt
X2NhY2hlX2NyZWF0ZShjb25zdCBjaGFyICosIHNpemVfdCwgc2l6ZV90LCB1bnNpZ25lZCBsb25n
LAoJCQkJICAgICAgIHZvaWQgKCopKHZvaWQgKiwga21lbV9jYWNoZV90ICosIHVuc2lnbmVkIGxv
bmcpLAoJCQkJICAgICAgIHZvaWQgKCopKHZvaWQgKiwga21lbV9jYWNoZV90ICosIHVuc2lnbmVk
IGxvbmcpKTsKZXh0ZXJuIGludCBrbWVtX2NhY2hlX3NocmluayhrbWVtX2NhY2hlX3QgKik7CmV4
dGVybiB2b2lkICprbWVtX2NhY2hlX2FsbG9jKGttZW1fY2FjaGVfdCAqLCBpbnQpOwpleHRlcm4g
dm9pZCBrbWVtX2NhY2hlX2ZyZWUoa21lbV9jYWNoZV90ICosIHZvaWQgKik7CmV4dGVybiB2b2lk
ICprbWFsbG9jKHNpemVfdCwgaW50KTsKZXh0ZXJuIHZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqKTsK
ZXh0ZXJuIHZvaWQga2ZyZWVfcyhjb25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiB2b2lkIGtt
ZW1fY2FjaGVfcmVhcChpbnQpOwpleHRlcm4gaW50IGdldF9zbGFiaW5mbyhjaGFyICopOwogCmV4
dGVybiBrbWVtX2NhY2hlX3QJKnZtX2FyZWFfY2FjaGVwOwpleHRlcm4ga21lbV9jYWNoZV90CSpt
bV9jYWNoZXA7CiMgNCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvbWFsbG9j
LmgiIDIKIyA1ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgi
IDIKIAogCmVudW0gcm9vdF9kaXJlY3RvcnlfaW5vcyB7CglQUk9DX1JPT1RfSU5PID0gMSwKCVBS
T0NfTE9BREFWRywKCVBST0NfVVBUSU1FLAoJUFJPQ19NRU1JTkZPLAoJUFJPQ19LTVNHLAoJUFJP
Q19WRVJTSU9OLAoJUFJPQ19DUFVJTkZPLAoJUFJPQ19QQ0ksCglQUk9DX01DQSwKCVBST0NfTlVC
VVMsCglQUk9DX1NFTEYsCSAKCVBST0NfTkVULAogICAgICAgIFBST0NfU0NTSSwKCVBST0NfTUFM
TE9DLAoJUFJPQ19LQ09SRSwKCVBST0NfTU9EVUxFUywKCVBST0NfU1RBVCwKCVBST0NfREVWSUNF
UywKCVBST0NfUEFSVElUSU9OUywKCVBST0NfSU5URVJSVVBUUywKCVBST0NfRklMRVNZU1RFTVMs
CglQUk9DX0tTWU1TLAoJUFJPQ19ETUEsCQoJUFJPQ19JT1BPUlRTLAoJUFJPQ19QUk9GSUxFLCAg
CglQUk9DX0NNRExJTkUsCglQUk9DX1NZUywKCVBST0NfTVRBQiwKCVBST0NfU1dBUCwKCVBST0Nf
TUQsCglQUk9DX1JUQywKCVBST0NfTE9DS1MsCglQUk9DX0hBUkRXQVJFLAoJUFJPQ19TTEFCSU5G
TywKCVBST0NfUEFSUE9SVCwKCVBST0NfUFBDX0hUQUIsCglQUk9DX1NUUkFNLAoJUFJPQ19TT1VO
RCwKCVBST0NfTVRSUiwgIAoJUFJPQ19GUwp9OwplbnVtIHBpZF9kaXJlY3RvcnlfaW5vcyB7CglQ
Uk9DX1BJRF9JTk8gPSAyLAoJUFJPQ19QSURfU1RBVFVTLAoJUFJPQ19QSURfTUVNLAoJUFJPQ19Q
SURfQ1dELAoJUFJPQ19QSURfUk9PVCwKCVBST0NfUElEX0VYRSwKCVBST0NfUElEX0ZELAoJUFJP
Q19QSURfRU5WSVJPTiwKCVBST0NfUElEX0NNRExJTkUsCglQUk9DX1BJRF9TVEFULAoJUFJPQ19Q
SURfU1RBVE0sCglQUk9DX1BJRF9NQVBTLAoJUFJPQ19QSURfQ1BVLAp9OwplbnVtIHBpZF9zdWJk
aXJlY3RvcnlfaW5vcyB7CglQUk9DX1BJRF9GRF9ESVIgPSAweDgwMDAsCSAKfTsKZW51bSBuZXRf
ZGlyZWN0b3J5X2lub3MgewoJUFJPQ19ORVRfVU5JWCA9IDEyOCwKCVBST0NfTkVUX0FSUCwKCVBS
T0NfTkVUX1JPVVRFLAoJUFJPQ19ORVRfREVWLAoJUFJPQ19ORVRfUkFXLAoJUFJPQ19ORVRfUkFX
NiwKCVBST0NfTkVUX1RDUCwKCVBST0NfTkVUX1RDUDYsCglQUk9DX05FVF9VRFAsCglQUk9DX05F
VF9VRFA2LAoJUFJPQ19ORVRfU05NUCwKCVBST0NfTkVUX1JBUlAsCglQUk9DX05FVF9JR01QLAoJ
UFJPQ19ORVRfSVBNUl9WSUYsCglQUk9DX05FVF9JUE1SX01GQywKCVBST0NfTkVUX0lQRldGV0Qs
CglQUk9DX05FVF9JUEZXSU4sCglQUk9DX05FVF9JUEZXT1VULAoJUFJPQ19ORVRfSVBBQ0NULAoJ
UFJPQ19ORVRfSVBNU1FIU1QsCglQUk9DX05FVF9XSVJFTEVTUywKCVBST0NfTkVUX0lQWF9JTlRF
UkZBQ0UsCglQUk9DX05FVF9JUFhfUk9VVEUsCglQUk9DX05FVF9JUFgsCglQUk9DX05FVF9BVEFM
SywKCVBST0NfTkVUX0FUX1JPVVRFLAoJUFJPQ19ORVRfQVRJRiwKCVBST0NfTkVUX0FYMjVfUk9V
VEUsCglQUk9DX05FVF9BWDI1LAoJUFJPQ19ORVRfQVgyNV9DQUxMUywKCVBST0NfTkVUX0JNQUMs
CglQUk9DX05FVF9OUl9OT0RFUywKCVBST0NfTkVUX05SX05FSUdILAoJUFJPQ19ORVRfTlIsCglQ
Uk9DX05FVF9TT0NLU1RBVCwKCVBST0NfTkVUX1NPQ0tTVEFUNiwKCVBST0NfTkVUX1JUQ0FDSEUs
CglQUk9DX05FVF9BWDI1X0JQUUVUSEVSLAoJUFJPQ19ORVRfSVBfTUFTUV9BUFAsCglQUk9DX05F
VF9SVDYsCglQUk9DX05FVF9TTk1QNiwKCVBST0NfTkVUX1JUNl9TVEFUUywKCVBST0NfTkVUX05E
SVNDLAoJUFJPQ19ORVRfU1RSSVBfU1RBVFVTLAoJUFJPQ19ORVRfU1RSSVBfVFJBQ0UsCglQUk9D
X05FVF9aODUzMCwKCVBST0NfTkVUX1JTX05PREVTLAoJUFJPQ19ORVRfUlNfTkVJR0gsCglQUk9D
X05FVF9SU19ST1VURVMsCglQUk9DX05FVF9SUywKCVBST0NfTkVUX0NMMkxMQywKCVBST0NfTkVU
X1gyNV9ST1VURVMsCglQUk9DX05FVF9YMjUsCglQUk9DX05FVF9UUl9SSUYsCglQUk9DX05FVF9E
Tl9ERVYsCglQUk9DX05FVF9ETl9BREosCglQUk9DX05FVF9ETl9MMSwKCVBST0NfTkVUX0ROX0wy
LAoJUFJPQ19ORVRfRE5fQ0FDSEUsCglQUk9DX05FVF9ETl9TS1QsCglQUk9DX05FVF9ETl9GVywK
CVBST0NfTkVUX0ROX1JBVywKCVBST0NfTkVUX05FVFNUQVQsCglQUk9DX05FVF9JUEZXX0NIQUlO
UywKCVBST0NfTkVUX0lQRldfQ0hBSU5fTkFNRVMsCglQUk9DX05FVF9BVF9BQVJQLAoJUFJPQ19O
RVRfQlJJREdFLAoJUFJPQ19ORVRfTEFTVAp9OwplbnVtIHNjc2lfZGlyZWN0b3J5X2lub3MgewoJ
UFJPQ19TQ1NJX1NDU0kgPSAyNTYsCglQUk9DX1NDU0lfQURWQU5TWVMsCglQUk9DX1NDU0lfUENJ
MjAwMCwKCVBST0NfU0NTSV9QQ0kyMjIwSSwKCVBST0NfU0NTSV9QU0kyNDBJLAoJUFJPQ19TQ1NJ
X0VBVEEsCglQUk9DX1NDU0lfRUFUQV9QSU8sCglQUk9DX1NDU0lfQUhBMTUyWCwKCVBST0NfU0NT
SV9BSEExNTQyLAoJUFJPQ19TQ1NJX0FIQTE3NDAsCglQUk9DX1NDU0lfQUlDN1hYWCwKCVBST0Nf
U0NTSV9CVVNMT0dJQywKCVBST0NfU0NTSV9VMTRfMzRGLAoJUFJPQ19TQ1NJX0ZET01BSU4sCglQ
Uk9DX1NDU0lfR0RUSCwKCVBST0NfU0NTSV9HRU5FUklDX05DUjUzODAsCglQUk9DX1NDU0lfSU4y
MDAwLAoJUFJPQ19TQ1NJX1BBUzE2LAoJUFJPQ19TQ1NJX1FMT0dJQ0ZBUywKCVBST0NfU0NTSV9R
TE9HSUNJU1AsCglQUk9DX1NDU0lfUUxPR0lDRkMsCglQUk9DX1NDU0lfU0VBR0FURSwKCVBST0Nf
U0NTSV9UMTI4LAoJUFJPQ19TQ1NJX05DUjUzQzd4eCwKCVBST0NfU0NTSV9TWU01M0M4WFgsCglQ
Uk9DX1NDU0lfTkNSNTNDOFhYLAoJUFJPQ19TQ1NJX1VMVFJBU1RPUiwKCVBST0NfU0NTSV83MDAw
RkFTU1QsCglQUk9DX1NDU0lfSUJNTUNBLAoJUFJPQ19TQ1NJX0ZEX01DUywKCVBST0NfU0NTSV9F
QVRBMlgsCglQUk9DX1NDU0lfREMzOTBULAoJUFJPQ19TQ1NJX0FNNTNDOTc0LAoJUFJPQ19TQ1NJ
X1NTQywKCVBST0NfU0NTSV9OQ1I1M0M0MDZBLAoJUFJPQ19TQ1NJX1NZTTUzQzQxNiwKCVBST0Nf
U0NTSV9NRUdBUkFJRCwKCVBST0NfU0NTSV9QUEEsCglQUk9DX1NDU0lfQVRQODcwVSwKCVBST0Nf
U0NTSV9FU1AsCglQUk9DX1NDU0lfUUxPR0lDUFRJLAoJUFJPQ19TQ1NJX0FNSUdBN1hYLAoJUFJP
Q19TQ1NJX01WTUUxNngsCglQUk9DX1NDU0lfQlZNRTYwMDAsCglQUk9DX1NDU0lfU0lNNzEwLAoJ
UFJPQ19TQ1NJX0EzMDAwLAoJUFJPQ19TQ1NJX0EyMDkxLAoJUFJPQ19TQ1NJX0dWUDExLAoJUFJP
Q19TQ1NJX0FUQVJJLAoJUFJPQ19TQ1NJX01BQywKCVBST0NfU0NTSV9JREVTQ1NJLAoJUFJPQ19T
Q1NJX1NHSVdEOTMsCglQUk9DX1NDU0lfTUVTSCwKCVBST0NfU0NTSV81M0M5NCwKCVBST0NfU0NT
SV9QTFVUTywKCVBST0NfU0NTSV9JTkk5MTAwVSwKCVBST0NfU0NTSV9JTklBMTAwLAogCVBST0Nf
U0NTSV9JUEg1NTI2X0ZDLAoJUFJPQ19TQ1NJX0ZDQUwsCglQUk9DX1NDU0lfSTJPLAoJUFJPQ19T
Q1NJX1VTQl9TQ1NJLAoJUFJPQ19TQ1NJX1NDU0lfREVCVUcsCQoJUFJPQ19TQ1NJX05PVF9QUkVT
RU5ULAoJUFJPQ19TQ1NJX0ZJTEUsICAgICAgICAgICAgICAgICAgICAgICAgIAoJUFJPQ19TQ1NJ
X0xBU1QgPSAoUFJPQ19TQ1NJX0ZJTEUgKyAxNikgIAp9OyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKZW51bSBtY2FfZGlyZWN0b3J5X2lub3MgewoJUFJPQ19N
Q0FfTUFDSElORSA9IChQUk9DX1NDU0lfTEFTVCsxKSwKCVBST0NfTUNBX1JFR0lTVEVSUywKCVBS
T0NfTUNBX1ZJREVPLAoJUFJPQ19NQ0FfU0NTSSwKCVBST0NfTUNBX1NMT1QsCSAKCVBST0NfTUNB
X0xBU1QgPSAoUFJPQ19NQ0FfU0xPVCArIDgpCn07CmVudW0gYnVzX2RpcmVjdG9yeV9pbm9zIHsK
CVBST0NfQlVTX1BDSSA9IFBST0NfTUNBX0xBU1QsCglQUk9DX0JVU19QQ0lfREVWSUNFUywKCVBS
T0NfQlVTX1pPUlJPLAoJUFJPQ19CVVNfWk9SUk9fREVWSUNFUywKCVBST0NfQlVTX0xBU1QKfTsK
ZW51bSBmc19kaXJlY3RvcnlfaW5vcyB7CglQUk9DX0ZTX0NPREEgPSBQUk9DX0JVU19MQVNULAoJ
UFJPQ19GU19MQVNUCn07CmVudW0gZnNfY29kYV9kaXJlY3RvcnlfaW5vcyB7CglQUk9DX1ZGU19T
VEFUUyA9IFBST0NfRlNfTEFTVCwKCVBST0NfVVBDQUxMX1NUQVRTLAoJUFJPQ19QRVJNSVNTSU9O
X1NUQVRTLAoJUFJPQ19DQUNIRV9JTlZfU1RBVFMsCglQUk9DX0NPREFfRlNfTEFTVAp9OwogCiAK
c3RydWN0IHByb2NfZGlyX2VudHJ5IHsKCXVuc2lnbmVkIHNob3J0IGxvd19pbm87Cgl1bnNpZ25l
ZCBzaG9ydCBuYW1lbGVuOwoJY29uc3QgY2hhciAqbmFtZTsKCW1vZGVfdCBtb2RlOwoJbmxpbmtf
dCBubGluazsKCXVpZF90IHVpZDsKCWdpZF90IGdpZDsKCXVuc2lnbmVkIGxvbmcgc2l6ZTsKCXN0
cnVjdCBpbm9kZV9vcGVyYXRpb25zICogb3BzOwoJaW50ICgqZ2V0X2luZm8pKGNoYXIgKiwgY2hh
ciAqKiwgb2ZmX3QsIGludCwgaW50KTsKCXZvaWQgKCpmaWxsX2lub2RlKShzdHJ1Y3QgaW5vZGUg
KiwgaW50KTsKCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqbmV4dCwgKnBhcmVudCwgKnN1YmRpcjsK
CXZvaWQgKmRhdGE7CglpbnQgKCpyZWFkX3Byb2MpKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwg
b2ZmX3Qgb2ZmLAoJCQkgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CglpbnQgKCp3
cml0ZV9wcm9jKShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmZmVyLAoJCQkgIHVu
c2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpOwoJaW50ICgqcmVhZGxpbmtfcHJvYykoc3Ry
dWN0IHByb2NfZGlyX2VudHJ5ICpkZSwgY2hhciAqcGFnZSk7Cgl1bnNpZ25lZCBpbnQgY291bnQ7
CSAKCWludCBkZWxldGVkOwkJIAp9Owp0eXBlZGVmCWludCAocmVhZF9wcm9jX3QpKGNoYXIgKnBh
Z2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAoJCQkgIGludCBjb3VudCwgaW50ICplb2YsIHZv
aWQgKmRhdGEpOwp0eXBlZGVmCWludCAod3JpdGVfcHJvY190KShzdHJ1Y3QgZmlsZSAqZmlsZSwg
Y29uc3QgY2hhciAqYnVmZmVyLAoJCQkgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRh
KTsKZXh0ZXJuIGludCAoKiBkaXNwYXRjaF9zY3NpX2luZm9fcHRyKSAoaW50IGlubywgY2hhciAq
YnVmZmVyLCBjaGFyICoqc3RhcnQsCgkJCQlvZmZfdCBvZmZzZXQsIGludCBsZW5ndGgsIGludCBp
bm91dCk7CmV4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgcHJvY19yb290OwpleHRlcm4gc3Ry
dWN0IHByb2NfZGlyX2VudHJ5IHByb2Nfcm9vdF9mczsKZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9l
bnRyeSAqcHJvY19uZXQ7CmV4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nfc2NzaTsK
ZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSBwcm9jX3N5czsKZXh0ZXJuIHN0cnVjdCBwcm9j
X2Rpcl9lbnRyeSBwcm9jX29wZW5wcm9tOwpleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5IHBy
b2NfcGlkOwpleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5IHByb2NfcGlkX2ZkOwpleHRlcm4g
c3RydWN0IHByb2NfZGlyX2VudHJ5IHByb2NfbWNhOwpleHRlcm4gc3RydWN0IHByb2NfZGlyX2Vu
dHJ5ICpwcm9jX2J1czsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHByb2Nfc2NzaV9p
bm9kZV9vcGVyYXRpb25zOwpleHRlcm4gdm9pZCBwcm9jX3Jvb3RfaW5pdCh2b2lkKTsKZXh0ZXJu
IHZvaWQgcHJvY19iYXNlX2luaXQodm9pZCk7CmV4dGVybiBpbnQgcHJvY19yZWdpc3RlcihzdHJ1
Y3QgcHJvY19kaXJfZW50cnkgKiwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICopOwpleHRlcm4gaW50
IHByb2NfdW5yZWdpc3RlcihzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKiwgaW50KTsKc3RhdGljIGlu
bGluZSBpbnQgcHJvY19uZXRfcmVnaXN0ZXIoc3RydWN0IHByb2NfZGlyX2VudHJ5ICogeCkKewoJ
cmV0dXJuIHByb2NfcmVnaXN0ZXIocHJvY19uZXQsIHgpOwp9CnN0YXRpYyBpbmxpbmUgaW50IHBy
b2NfbmV0X3VucmVnaXN0ZXIoaW50IHgpCnsKCXJldHVybiBwcm9jX3VucmVnaXN0ZXIocHJvY19u
ZXQsIHgpOwp9CnN0YXRpYyBpbmxpbmUgaW50IHByb2Nfc2NzaV9yZWdpc3RlcihzdHJ1Y3QgcHJv
Y19kaXJfZW50cnkgKmRyaXZlciwgCgkJCQkgICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqeCkK
ewogICAgeC0+b3BzID0gJnByb2Nfc2NzaV9pbm9kZV9vcGVyYXRpb25zOwogICAgaWYoeC0+bG93
X2lubyA8IFBST0NfU0NTSV9GSUxFKXsKCXJldHVybihwcm9jX3JlZ2lzdGVyKHByb2Nfc2NzaSwg
eCkpOwogICAgfWVsc2V7CglyZXR1cm4ocHJvY19yZWdpc3Rlcihkcml2ZXIsIHgpKTsKICAgIH0K
fQpzdGF0aWMgaW5saW5lIGludCBwcm9jX3Njc2lfdW5yZWdpc3RlcihzdHJ1Y3QgcHJvY19kaXJf
ZW50cnkgKmRyaXZlciwgaW50IHgpCnsKICAgIGV4dGVybiB2b2lkIHNjc2lfaW5pdF9mcmVlKGNo
YXIgKnB0ciwgdW5zaWduZWQgaW50IHNpemUpOwogICAgaWYoeCA8IFBST0NfU0NTSV9GSUxFKQoJ
cmV0dXJuKHByb2NfdW5yZWdpc3Rlcihwcm9jX3Njc2ksIHgpKTsKICAgIGVsc2UgewoJc3RydWN0
IHByb2NfZGlyX2VudHJ5ICoqcCA9ICZkcml2ZXItPnN1YmRpciwgKmRwOwoJaW50IHJldDsKCXdo
aWxlICgoZHAgPSAqcCkgIT0gKCh2b2lkICopMCkgKSB7CgkJaWYgKGRwLT5sb3dfaW5vID09IHgp
IAoJCSAgICBicmVhazsKCQlwID0gJmRwLT5uZXh0OwoJfQoJcmV0ID0gcHJvY191bnJlZ2lzdGVy
KGRyaXZlciwgeCk7CglzY3NpX2luaXRfZnJlZSgoY2hhciAqKSBkcCwgc2l6ZW9mKHN0cnVjdCBw
cm9jX2Rpcl9lbnRyeSkgKyA0KTsKCXJldHVybihyZXQpOwogICAgfQp9CmV4dGVybiBzdHJ1Y3Qg
ZGVudHJ5X29wZXJhdGlvbnMgcHJvY19kZW50cnlfb3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBz
dXBlcl9ibG9jayAqcHJvY19yZWFkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqLHZvaWQgKixp
bnQpOwpleHRlcm4gaW50IGluaXRfcHJvY19mcyh2b2lkKTsKZXh0ZXJuIHN0cnVjdCBpbm9kZSAq
IHByb2NfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIHN0cnVjdCBwcm9jX2Rp
cl9lbnRyeSAqKTsKZXh0ZXJuIGludCBwcm9jX3N0YXRmcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwg
c3RydWN0IHN0YXRmcyAqLCBpbnQpOwpleHRlcm4gdm9pZCBwcm9jX3JlYWRfaW5vZGUoc3RydWN0
IGlub2RlICopOwpleHRlcm4gdm9pZCBwcm9jX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsK
ZXh0ZXJuIGludCBwcm9jX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICosIGludCk7CmV4dGVybiBp
bnQgcHJvY19tYXRjaChpbnQsIGNvbnN0IGNoYXIgKixzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKik7
CiAKZXh0ZXJuIGludCBwcm9jX3JlYWRkaXIoc3RydWN0IGZpbGUgKiwgdm9pZCAqLCBmaWxsZGly
X3QpOwpleHRlcm4gc3RydWN0IGRlbnRyeSAqcHJvY19sb29rdXAoc3RydWN0IGlub2RlICosIHN0
cnVjdCBkZW50cnkgKik7CnN0cnVjdCBvcGVucHJvbWZzX2RldiB7CiAJc3RydWN0IG9wZW5wcm9t
ZnNfZGV2ICpuZXh0OwogCXUzMiBub2RlOwogCWlub190IGlub2RlOwogCWtkZXZfdCByZGV2Owog
CW1vZGVfdCBtb2RlOwogCWNoYXIgbmFtZVszMl07Cn07CmV4dGVybiBzdHJ1Y3QgaW5vZGVfb3Bl
cmF0aW9ucyAqCnByb2Nfb3BlbnByb21fcmVnaXN0ZXIoaW50ICgqcmVhZGRpcikoc3RydWN0IGZp
bGUgKiwgdm9pZCAqLCBmaWxsZGlyX3QpLAoJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICogKCpsb29r
dXApKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopLAoJCSAgICAgICB2b2lkICgqdXNl
KShzdHJ1Y3QgaW5vZGUgKiwgaW50KSwKCQkgICAgICAgc3RydWN0IG9wZW5wcm9tZnNfZGV2ICoq
Kik7CmV4dGVybiB2b2lkIHByb2Nfb3BlbnByb21fZGVyZWdpc3Rlcih2b2lkKTsKZXh0ZXJuIHZv
aWQgKCpwcm9jX29wZW5wcm9tX3VzZSkoc3RydWN0IGlub2RlICosaW50KTsKZXh0ZXJuIGludCBw
cm9jX29wZW5wcm9tX3JlZ2RldihzdHJ1Y3Qgb3BlbnByb21mc19kZXYgKik7CmV4dGVybiBpbnQg
cHJvY19vcGVucHJvbV91bnJlZ2RldihzdHJ1Y3Qgb3BlbnByb21mc19kZXYgKik7CiAgCmV4dGVy
biBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwcm9jX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwpleHRl
cm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHJvY19maWxlX2lub2RlX29wZXJhdGlvbnM7CmV4
dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwcm9jX25ldF9pbm9kZV9vcGVyYXRpb25zOwpl
eHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHJvY19uZXRkaXJfaW5vZGVfb3BlcmF0aW9u
czsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHByb2Nfb3BlbnByb21faW5vZGVfb3Bl
cmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHByb2NfbWVtX2lub2RlX29w
ZXJhdGlvbnM7CmV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwcm9jX3N5c19pbm9kZV9v
cGVyYXRpb25zOwpleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHJvY19hcnJheV9pbm9k
ZV9vcGVyYXRpb25zOwpleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHJvY19hcnJheWxv
bmdfaW5vZGVfb3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHByb2Nf
a2NvcmVfaW5vZGVfb3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHBy
b2NfcHJvZmlsZV9pbm9kZV9vcGVyYXRpb25zOwpleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlv
bnMgcHJvY19rbXNnX2lub2RlX29wZXJhdGlvbnM7CmV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0
aW9ucyBwcm9jX2xpbmtfaW5vZGVfb3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVy
YXRpb25zIHByb2NfZmRfaW5vZGVfb3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVy
YXRpb25zIHByb2Nfb21pcnJfaW5vZGVfb3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9v
cGVyYXRpb25zIHByb2NfcHBjX2h0YWJfaW5vZGVfb3BlcmF0aW9uczsKIApzdHJ1Y3QgcHJvY19k
aXJfZW50cnkgKmNyZWF0ZV9wcm9jX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2Rl
LAoJCQkJCSBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCk7CnZvaWQgcmVtb3ZlX3Byb2Nf
ZW50cnkoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJlbnQpOwog
CmV4dGVybiB2b2lkIHByb2NfdHR5X2luaXQodm9pZCk7CmV4dGVybiB2b2lkIHByb2NfdHR5X3Jl
Z2lzdGVyX2RyaXZlcihzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyKTsKZXh0ZXJuIHZvaWQgcHJv
Y190dHlfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlcik7CiAKZXh0
ZXJuIHZvaWQgcHJvY19kZXZpY2VfdHJlZV9pbml0KHZvaWQpOwojIDQ3MSAiL2hvbWUvanc1L3Rt
cC9saW51eDIyL2luY2x1ZGUvbGludXgvcHJvY19mcy5oIgojIDE1ICJpbml0L21haW4uYyIgMgoj
IDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3VuaXN0ZC5oIiAxCmV4dGVy
biBpbnQgZXJybm87CiAKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vdW5p
c3RkLmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL3Vu
aXN0ZC5oIiAxCiAKIAojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS1pMzg2
L3VuaXN0ZC5oIiAxCiAKIAogCiMgMjIwICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9h
c20taTM4Ni91bmlzdGQuaCIKIyAyMzAgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2Fz
bS1pMzg2L3VuaXN0ZC5oIgojIDI0MCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNt
LWkzODYvdW5pc3RkLmgiCiMgMjUxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20t
aTM4Ni91bmlzdGQuaCIKIyAyNjIgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS1p
Mzg2L3VuaXN0ZC5oIgojIDI3NCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtLWkz
ODYvdW5pc3RkLmgiCiMgMzEwICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20taTM4
Ni91bmlzdGQuaCIKIyAxMyAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2w0YXJj
aC91bmlzdGQuaCIgMgogCiMgNDggIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9s
NGFyY2gvdW5pc3RkLmgiCiMgNTkgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9s
NGFyY2gvdW5pc3RkLmgiCiMgNzEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9s
NGFyY2gvdW5pc3RkLmgiCiMgODMgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9s
NGFyY2gvdW5pc3RkLmgiCiAKZXh0ZXJuIGlubGluZSAgaW50ICAgaWRsZSAodm9pZCkgeyAgIF9f
YXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSAgbG9uZyBfX1NDX19pZGxlICh2b2lkKSBhc20oInN5
c18iICJpZGxlIik7IGxvbmcgX19yZXMgPSBfX1NDX19pZGxlICgpOyBpZiAoX19yZXMgPj0gMCkg
cmV0dXJuICggaW50ICkgX19yZXM7IGVycm5vID0gLV9fcmVzOyByZXR1cm4gLTE7IH0gCiAKIAog
CmV4dGVybiBpbmxpbmUgIGludCAgIHNldHVwICh2b2lkKSB7ICAgX19hdHRyaWJ1dGVfXygocmVn
cGFybSgwKSkpICBsb25nIF9fU0NfX3NldHVwICh2b2lkKSBhc20oInN5c18iICJzZXR1cCIpOyBs
b25nIF9fcmVzID0gX19TQ19fc2V0dXAgKCk7IGlmIChfX3JlcyA+PSAwKSByZXR1cm4gKCBpbnQg
KSBfX3JlczsgZXJybm8gPSAtX19yZXM7IHJldHVybiAtMTsgfSAKZXh0ZXJuIGlubGluZSAgaW50
ICAgc3luYyAodm9pZCkgeyAgIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSAgbG9uZyBfX1ND
X19zeW5jICh2b2lkKSBhc20oInN5c18iICJzeW5jIik7IGxvbmcgX19yZXMgPSBfX1NDX19zeW5j
ICgpOyBpZiAoX19yZXMgPj0gMCkgcmV0dXJuICggaW50ICkgX19yZXM7IGVycm5vID0gLV9fcmVz
OyByZXR1cm4gLTE7IH0gCmV4dGVybiBpbmxpbmUgIHBpZF90ICAgc2V0c2lkICh2b2lkKSB7ICAg
X19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpICBsb25nIF9fU0NfX3NldHNpZCAodm9pZCkgYXNt
KCJzeXNfIiAic2V0c2lkIik7IGxvbmcgX19yZXMgPSBfX1NDX19zZXRzaWQgKCk7IGlmIChfX3Jl
cyA+PSAwKSByZXR1cm4gKCBwaWRfdCApIF9fcmVzOyBlcnJubyA9IC1fX3JlczsgcmV0dXJuIC0x
OyB9IApleHRlcm4gaW5saW5lICBpbnQgICB3cml0ZSAoIGludCAgIGZkICwgY29uc3QgY2hhciAq
ICAgYnVmICwgb2ZmX3QgICBjb3VudCApIHsgICBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkg
IGxvbmcgX19TQ19fd3JpdGUgKCBpbnQgICBmZCAsICBjb25zdCBjaGFyICogICBidWYgLCAgb2Zm
X3QgICBjb3VudCApIGFzbSgic3lzXyIgIndyaXRlIik7IGxvbmcgX19yZXMgPSBfX1NDX193cml0
ZSAoIGZkICwgIGJ1ZiAsICBjb3VudCApOyBpZiAoX19yZXM+PTApIHJldHVybiAoIGludCApIF9f
cmVzOyBlcnJubz0tX19yZXM7IHJldHVybiAtMTsgfSAKZXh0ZXJuIGlubGluZSAgaW50ICAgZHVw
ICggaW50ICAgZmQgKSB7ICAgX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpICBsb25nIF9fU0Nf
X2R1cCAoIGludCAgIGZkICkgYXNtKCJzeXNfIiAiZHVwIik7IGxvbmcgX19yZXMgPSBfX1NDX19k
dXAgKCBmZCApOyBpZiAoX19yZXMgPj0gMCkgcmV0dXJuICggaW50ICkgX19yZXM7IGVycm5vID0g
LV9fcmVzOyByZXR1cm4gLTE7IH0gCmV4dGVybiBpbmxpbmUgIGludCAgIG9wZW4gKCBjb25zdCBj
aGFyICogICBmaWxlICwgaW50ICAgZmxhZyAsIGludCAgIG1vZGUgKSB7ICAgX19hdHRyaWJ1dGVf
XygocmVncGFybSgwKSkpICBsb25nIF9fU0NfX29wZW4gKCBjb25zdCBjaGFyICogICBmaWxlICwg
IGludCAgIGZsYWcgLCAgaW50ICAgbW9kZSApIGFzbSgic3lzXyIgIm9wZW4iKTsgbG9uZyBfX3Jl
cyA9IF9fU0NfX29wZW4gKCBmaWxlICwgIGZsYWcgLCAgbW9kZSApOyBpZiAoX19yZXM+PTApIHJl
dHVybiAoIGludCApIF9fcmVzOyBlcnJubz0tX19yZXM7IHJldHVybiAtMTsgfSAKZXh0ZXJuIGlu
bGluZSAgaW50ICAgY2xvc2UgKCBpbnQgICBmZCApIHsgICBfX2F0dHJpYnV0ZV9fKChyZWdwYXJt
KDApKSkgIGxvbmcgX19TQ19fY2xvc2UgKCBpbnQgICBmZCApIGFzbSgic3lzXyIgImNsb3NlIik7
IGxvbmcgX19yZXMgPSBfX1NDX19jbG9zZSAoIGZkICk7IGlmIChfX3JlcyA+PSAwKSByZXR1cm4g
KCBpbnQgKSBfX3JlczsgZXJybm8gPSAtX19yZXM7IHJldHVybiAtMTsgfSAKZXh0ZXJuIGlubGlu
ZSAgcGlkX3QgICB3YWl0cGlkICggcGlkX3QgICBwaWQgLCBpbnQgKiAgIHdhaXRfc3RhdCAsIGlu
dCAgIG9wdGlvbnMgKSB7ICAgX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpICBsb25nIF9fU0Nf
X3dhaXRwaWQgKCBwaWRfdCAgIHBpZCAsICBpbnQgKiAgIHdhaXRfc3RhdCAsICBpbnQgICBvcHRp
b25zICkgYXNtKCJzeXNfIiAid2FpdHBpZCIpOyBsb25nIF9fcmVzID0gX19TQ19fd2FpdHBpZCAo
IHBpZCAsICB3YWl0X3N0YXQgLCAgb3B0aW9ucyApOyBpZiAoX19yZXM+PTApIHJldHVybiAoIHBp
ZF90ICkgX19yZXM7IGVycm5vPS1fX3JlczsgcmV0dXJuIC0xOyB9IAppbnQgZXhlY3ZlKGNoYXIg
KiBmaWxlLCBjaGFyICoqIGFyZ3YsIGNoYXIgKiogZW52cCk7CmV4dGVybiBpbmxpbmUgdm9pZCBf
ZXhpdChpbnQgZXhpdGNvZGUpCnsKICAgIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSAgdm9p
ZCBfX1NDX19leGl0KGludCBleGl0Y29kZSkgYXNtKCJzeXNfIiAgImV4aXQiKTsKICBfX1NDX19l
eGl0KGV4aXRjb2RlKTsKfQpleHRlcm4gaW5saW5lIHBpZF90IHdhaXQoaW50ICogd2FpdF9zdGF0
KQp7CiAgcmV0dXJuIHdhaXRwaWQoLTEsd2FpdF9zdGF0LDApOwp9CiMgNCAiL2hvbWUvanc1L3Rt
cC9saW51eDIyL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIiAyCiMgOSAiL2hvbWUvanc1L3RtcC9saW51
eDIyL2luY2x1ZGUvbGludXgvdW5pc3RkLmgiIDIKIyAxNiAiaW5pdC9tYWluLmMiIDIKIyAxICIv
aG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9jdHlwZS5oIiAxCiAKZXh0ZXJuIHVu
c2lnbmVkIGNoYXIgX2N0eXBlW107CnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBfX3RvbG93
ZXIodW5zaWduZWQgY2hhciBjKQp7CglpZiAoKCgoX2N0eXBlWyhpbnQpKHVuc2lnbmVkIGNoYXIp
KCAgYyAgKV0pICYoMHgwMSApKSAhPSAwKSApCgkJYyAtPSAnQSctJ2EnOwoJcmV0dXJuIGM7Cn0K
c3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIF9fdG91cHBlcih1bnNpZ25lZCBjaGFyIGMpCnsK
CWlmICgoKChfY3R5cGVbKGludCkodW5zaWduZWQgY2hhcikoICBjICApXSkgJigweDAyICkpICE9
IDApICkKCQljIC09ICdhJy0nQSc7CglyZXR1cm4gYzsKfQojIDE3ICJpbml0L21haW4uYyIgMgoj
IDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2RlbGF5LmgiIDEKIApleHRl
cm4gdW5zaWduZWQgbG9uZyBsb29wc19wZXJfc2VjOwojIDEgIi9ob21lL2p3NS90bXAvbGludXgy
Mi9pbmNsdWRlL2FzbS9kZWxheS5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1
ZGUvYXNtL2w0YXJjaC9kZWxheS5oIiAxCiAKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5j
bHVkZS9hc20taTM4Ni9kZWxheS5oIiAxCiAKIApleHRlcm4gdm9pZCBfX3VkZWxheSh1bnNpZ25l
ZCBsb25nIHVzZWNzKTsKZXh0ZXJuIHZvaWQgX19jb25zdF91ZGVsYXkodW5zaWduZWQgbG9uZyB1
c2Vjcyk7CmV4dGVybiB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcyk7CiMgNSAiL2hv
bWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2w0YXJjaC9kZWxheS5oIiAyCiMgNCAiL2hv
bWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2RlbGF5LmgiIDIKIyAxMiAiL2hvbWUvanc1
L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvZGVsYXkuaCIgMgogCiMgMTggImluaXQvbWFpbi5j
IiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvdXRzbmFtZS5oIiAx
CnN0cnVjdCBvbGRvbGRfdXRzbmFtZSB7CgljaGFyIHN5c25hbWVbOV07CgljaGFyIG5vZGVuYW1l
WzldOwoJY2hhciByZWxlYXNlWzldOwoJY2hhciB2ZXJzaW9uWzldOwoJY2hhciBtYWNoaW5lWzld
Owp9OwpzdHJ1Y3Qgb2xkX3V0c25hbWUgewoJY2hhciBzeXNuYW1lWzY1XTsKCWNoYXIgbm9kZW5h
bWVbNjVdOwoJY2hhciByZWxlYXNlWzY1XTsKCWNoYXIgdmVyc2lvbls2NV07CgljaGFyIG1hY2hp
bmVbNjVdOwp9OwpzdHJ1Y3QgbmV3X3V0c25hbWUgewoJY2hhciBzeXNuYW1lWzY1XTsKCWNoYXIg
bm9kZW5hbWVbNjVdOwoJY2hhciByZWxlYXNlWzY1XTsKCWNoYXIgdmVyc2lvbls2NV07CgljaGFy
IG1hY2hpbmVbNjVdOwoJY2hhciBkb21haW5uYW1lWzY1XTsKfTsKZXh0ZXJuIHN0cnVjdCBuZXdf
dXRzbmFtZSBzeXN0ZW1fdXRzbmFtZTsKZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgdXRzX3NlbTsK
IyAxOSAiaW5pdC9tYWluLmMiIDIKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9s
aW51eC9pb3BvcnQuaCIgMQogCiAKZXh0ZXJuIHZvaWQgcmVzZXJ2ZV9zZXR1cChjaGFyICpzdHIs
IGludCAqaW50cyk7CmV4dGVybiBpbnQgY2hlY2tfcmVnaW9uKHVuc2lnbmVkIGxvbmcgZnJvbSwg
dW5zaWduZWQgbG9uZyBleHRlbnQpOwpleHRlcm4gdm9pZCByZXF1ZXN0X3JlZ2lvbih1bnNpZ25l
ZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgZXh0ZW50LGNvbnN0IGNoYXIgKm5hbWUpOwpleHRl
cm4gdm9pZCByZWxlYXNlX3JlZ2lvbih1bnNpZ25lZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcg
ZXh0ZW50KTsKZXh0ZXJuIGludCBnZXRfaW9wb3J0X2xpc3QoY2hhciAqKTsKZXh0ZXJuIHZvaWQg
YXV0b2lycV9zZXR1cChpbnQgd2FpdHRpbWUpOwpleHRlcm4gaW50IGF1dG9pcnFfcmVwb3J0KGlu
dCB3YWl0dGltZSk7CiMgMjAgImluaXQvbWFpbi5jIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51
eDIyL2luY2x1ZGUvbGludXgvaW5pdC5oIiAxCiAKIAojIDEgIi9ob21lL2p3NS90bXAvbGludXgy
Mi9pbmNsdWRlL2FzbS9pbml0LmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVk
ZS9hc20vbDRhcmNoL2luaXQuaCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRl
L2FzbS1pMzg2L2luaXQuaCIgMQogCiMgNCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUv
YXNtL2w0YXJjaC9pbml0LmgiIDIKIyA0ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9h
c20vaW5pdC5oIiAyCiMgNTEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2lu
aXQuaCIgMgojIDYwICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9pbml0Lmgi
CiMgMjEgImluaXQvbWFpbi5jIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUv
bGludXgvc21wX2xvY2suaCIgMQojIDIyICJpbml0L21haW4uYyIgMgojIDEgIi9ob21lL2p3NS90
bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2Jsay5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9saW51
eDIyL2luY2x1ZGUvbGludXgvYmxrZGV2LmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIv
aW5jbHVkZS9saW51eC9nZW5oZC5oIiAxCiAKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5j
bHVkZS9hc20vdW5hbGlnbmVkLmgiIDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVk
ZS9hc20vbDRhcmNoL3VuYWxpZ25lZC5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2lu
Y2x1ZGUvYXNtLWkzODYvdW5hbGlnbmVkLmgiIDEKIAojIDQgIi9ob21lL2p3NS90bXAvbGludXgy
Mi9pbmNsdWRlL2FzbS9sNGFyY2gvdW5hbGlnbmVkLmgiIDIKIyA0ICIvaG9tZS9qdzUvdG1wL2xp
bnV4MjIvaW5jbHVkZS9hc20vdW5hbGlnbmVkLmgiIDIKIyAxNCAiL2hvbWUvanc1L3RtcC9saW51
eDIyL2luY2x1ZGUvbGludXgvZ2VuaGQuaCIgMgogCgkKc3RydWN0IHBhcnRpdGlvbiB7Cgl1bnNp
Z25lZCBjaGFyIGJvb3RfaW5kOwkJIAoJdW5zaWduZWQgY2hhciBoZWFkOwkJIAoJdW5zaWduZWQg
Y2hhciBzZWN0b3I7CQkgCgl1bnNpZ25lZCBjaGFyIGN5bDsJCSAKCXVuc2lnbmVkIGNoYXIgc3lz
X2luZDsJCSAKCXVuc2lnbmVkIGNoYXIgZW5kX2hlYWQ7CQkgCgl1bnNpZ25lZCBjaGFyIGVuZF9z
ZWN0b3I7CSAKCXVuc2lnbmVkIGNoYXIgZW5kX2N5bDsJCSAKCXVuc2lnbmVkIGludCBzdGFydF9z
ZWN0OwkgCgl1bnNpZ25lZCBpbnQgbnJfc2VjdHM7CQkgCn0gX19hdHRyaWJ1dGVfXygocGFja2Vk
KSk7CnN0cnVjdCBoZF9zdHJ1Y3QgewoJbG9uZyBzdGFydF9zZWN0OwoJbG9uZyBucl9zZWN0czsK
CWludCB0eXBlOwkJIAp9OwogCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHB0eXBlICh1bnNp
Z25lZCBjaGFyIHJhd190eXBlKQp7Cglzd2l0Y2ggKHJhd190eXBlKSB7CgkJY2FzZSAweDg2IDoK
CQkJcmV0dXJuIDB4ODYgOwoJCWNhc2UgMHhmZCA6CgkJCXJldHVybiAweGZkIDsKCQlkZWZhdWx0
OgoJfQoJcmV0dXJuIDA7Cn0KIApzdHJ1Y3QgZ2VuZGlzayB7CglpbnQgbWFqb3I7CQkJIAoJY29u
c3QgY2hhciAqbWFqb3JfbmFtZTsJCSAKCWludCBtaW5vcl9zaGlmdDsJCSAKCWludCBtYXhfcDsJ
CQkgCglpbnQgbWF4X25yOwkJCSAKCXZvaWQgKCppbml0KShzdHJ1Y3QgZ2VuZGlzayAqKTsJIAoJ
c3RydWN0IGhkX3N0cnVjdCAqcGFydDsJCSAKCWludCAqc2l6ZXM7CQkJIAoJaW50IG5yX3JlYWw7
CQkJIAoJdm9pZCAqcmVhbF9kZXZpY2VzOwkJIAoJc3RydWN0IGdlbmRpc2sgKm5leHQ7Cn07CiMg
MTM1ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9saW51eC9nZW5oZC5oIgojIDE5OSAi
L2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvZ2VuaGQuaCIKIyAyNTUgIi9ob21l
L2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgiCmV4dGVybiBzdHJ1Y3QgZ2Vu
ZGlzayAqZ2VuZGlza19oZWFkOwkgCiAKY2hhciAqZGlza19uYW1lIChzdHJ1Y3QgZ2VuZGlzayAq
aGQsIGludCBtaW5vciwgY2hhciAqYnVmKTsKIyA2ICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5j
bHVkZS9saW51eC9ibGtkZXYuaCIgMgogCnN0cnVjdCByZXF1ZXN0IHsKCXZvbGF0aWxlIGludCBy
cV9zdGF0dXM7CSAKCWtkZXZfdCBycV9kZXY7CglpbnQgY21kOwkJIAoJaW50IGVycm9yczsKCXVu
c2lnbmVkIGxvbmcgc2VjdG9yOwoJdW5zaWduZWQgbG9uZyBucl9zZWN0b3JzOwoJdW5zaWduZWQg
bG9uZyBucl9zZWdtZW50czsKCXVuc2lnbmVkIGxvbmcgY3VycmVudF9ucl9zZWN0b3JzOwoJY2hh
ciAqIGJ1ZmZlcjsKCXN0cnVjdCBzZW1hcGhvcmUgKiBzZW07CglzdHJ1Y3QgYnVmZmVyX2hlYWQg
KiBiaDsKCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJodGFpbDsKCXN0cnVjdCByZXF1ZXN0ICogbmV4
dDsKfTsKdHlwZWRlZiB2b2lkIChyZXF1ZXN0X2ZuX3Byb2MpICh2b2lkKTsKdHlwZWRlZiBzdHJ1
Y3QgcmVxdWVzdCAqKiAocXVldWVfcHJvYykgKGtkZXZfdCBkZXYpOwpzdHJ1Y3QgYmxrX2Rldl9z
dHJ1Y3QgewoJcmVxdWVzdF9mbl9wcm9jCQkqcmVxdWVzdF9mbjsKCSAKCXF1ZXVlX3Byb2MJCSpx
dWV1ZTsKCXZvaWQJCQkqZGF0YTsKCXN0cnVjdCByZXF1ZXN0CQkqY3VycmVudF9yZXF1ZXN0OwoJ
c3RydWN0IHJlcXVlc3QgICBwbHVnOwoJc3RydWN0IHRxX3N0cnVjdCBwbHVnX3RxOwp9OwpzdHJ1
Y3Qgc2VjX3NpemUgewoJdW5zaWduZWQgYmxvY2tfc2l6ZTsKCXVuc2lnbmVkIGJsb2NrX3NpemVf
Yml0czsKfTsKZXh0ZXJuIHN0cnVjdCBzZWNfc2l6ZSAqIGJsa19zZWNbMjU1IF07CmV4dGVybiBz
dHJ1Y3QgYmxrX2Rldl9zdHJ1Y3QgYmxrX2RldlsyNTUgXTsKZXh0ZXJuIHN0cnVjdCB3YWl0X3F1
ZXVlICogd2FpdF9mb3JfcmVxdWVzdDsKZXh0ZXJuIHZvaWQgcmVzZXR1cF9vbmVfZGV2KHN0cnVj
dCBnZW5kaXNrICpkZXYsIGludCBkcml2ZSk7CmV4dGVybiB2b2lkIHVucGx1Z19kZXZpY2Uodm9p
ZCAqIGRhdGEpOwpleHRlcm4gdm9pZCBtYWtlX3JlcXVlc3QoaW50IG1ham9yLGludCBydywgc3Ry
dWN0IGJ1ZmZlcl9oZWFkICogYmgpOwogCmV4dGVybiBpbnQgbWRfbWFwIChpbnQgbWlub3IsIGtk
ZXZfdCAqcmRldiwgdW5zaWduZWQgbG9uZyAqcnNlY3RvciwgdW5zaWduZWQgbG9uZyBzaXplKTsK
ZXh0ZXJuIGludCBtZF9tYWtlX3JlcXVlc3QgKGludCBtaW5vciwgaW50IHJ3LCBzdHJ1Y3QgYnVm
ZmVyX2hlYWQgKiBiaCk7CmV4dGVybiBpbnQgbWRfZXJyb3IgKGtkZXZfdCBtZGRldiwga2Rldl90
IHJkZXYpOwpleHRlcm4gaW50ICogYmxrX3NpemVbMjU1IF07CmV4dGVybiBpbnQgKiBibGtzaXpl
X3NpemVbMjU1IF07CmV4dGVybiBpbnQgKiBoYXJkc2VjdF9zaXplWzI1NSBdOwpleHRlcm4gaW50
ICogbWF4X3JlYWRhaGVhZFsyNTUgXTsKZXh0ZXJuIGludCAqIG1heF9zZWN0b3JzWzI1NSBdOwpl
eHRlcm4gaW50ICogbWF4X3NlZ21lbnRzWzI1NSBdOwojIDQgIi9ob21lL2p3NS90bXAvbGludXgy
Mi9pbmNsdWRlL2xpbnV4L2Jsay5oIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1
ZGUvbGludXgvbG9ja3MuaCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xp
bnV4L3BhZ2VtYXAuaCIgMQogCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2FkZHJl
c3Moc3RydWN0IHBhZ2UgKiBwYWdlKQp7CglyZXR1cm4gKCh1bnNpZ25lZCBsb25nKSgwKSApICAr
ICgxVUwgPDwgMTIgKSAgKiAocGFnZSAtIG1lbV9tYXApOwp9CiAKIApleHRlcm4gdW5zaWduZWQg
bG9uZyBwYWdlX2NhY2hlX3NpemU7ICAKZXh0ZXJuIHVuc2lnbmVkIGludCBwYWdlX2hhc2hfYml0
czsKZXh0ZXJuIHVuc2lnbmVkIGludCBwYWdlX2hhc2hfbWFzazsKZXh0ZXJuIHN0cnVjdCBwYWdl
ICoqcGFnZV9oYXNoX3RhYmxlOwpleHRlcm4gdm9pZCBwYWdlX2NhY2hlX2luaXQodW5zaWduZWQg
bG9uZyk7CiAKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9wYWdlX2hhc2hmbihzdHJ1Y3Qg
aW5vZGUgKiBpbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCnsKCXJldHVybiAoKCgoKHVuc2ln
bmVkIGxvbmcpIGlub2RlKS8oc2l6ZW9mKHN0cnVjdCBpbm9kZSkgJiB+IChzaXplb2Yoc3RydWN0
IGlub2RlKSAtIDEpKSkgKyAoKG9mZnNldCA+PiAxMiApICsgKG9mZnNldCAmIH4ofigoMVVMIDw8
IDEyICkgLTEpKSApKSApICYgcGFnZV9oYXNoX21hc2sgKTsKfQpzdGF0aWMgaW5saW5lIHN0cnVj
dCBwYWdlICogX19maW5kX3BhZ2Uoc3RydWN0IGlub2RlICogaW5vZGUsIHVuc2lnbmVkIGxvbmcg
b2Zmc2V0LCBzdHJ1Y3QgcGFnZSAqcGFnZSkKewoJZ290byBpbnNpZGU7Cglmb3IgKDs7KSB7CgkJ
cGFnZSA9IHBhZ2UtPm5leHRfaGFzaDsKaW5zaWRlOgoJCWlmICghcGFnZSkKCQkJZ290byBub3Rf
Zm91bmQ7CgkJaWYgKHBhZ2UtPmlub2RlICE9IGlub2RlKQoJCQljb250aW51ZTsKCQlpZiAocGFn
ZS0+b2Zmc2V0ID09IG9mZnNldCkKCQkJYnJlYWs7Cgl9CgkgCglhdG9taWNfaW5jKCZwYWdlLT5j
b3VudCk7CglzZXRfYml0KDIgLCAmcGFnZS0+ZmxhZ3MpOwpub3RfZm91bmQ6CglyZXR1cm4gcGFn
ZTsKfQpzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpmaW5kX3BhZ2Uoc3RydWN0IGlub2RlICog
aW5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQp7CglyZXR1cm4gX19maW5kX3BhZ2UoaW5vZGUs
IG9mZnNldCwgKiAocGFnZV9oYXNoX3RhYmxlK19wYWdlX2hhc2hmbiggaW5vZGUgLCAgb2Zmc2V0
ICkpICk7Cn0Kc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9wYWdlX2Zyb21faGFzaF9xdWV1ZShz
dHJ1Y3QgcGFnZSAqIHBhZ2UpCnsKCWlmKHBhZ2UtPnBwcmV2X2hhc2gpIHsKCQlpZihwYWdlLT5u
ZXh0X2hhc2gpCgkJCXBhZ2UtPm5leHRfaGFzaC0+cHByZXZfaGFzaCA9IHBhZ2UtPnBwcmV2X2hh
c2g7CgkJKnBhZ2UtPnBwcmV2X2hhc2ggPSBwYWdlLT5uZXh0X2hhc2g7CgkJcGFnZS0+cHByZXZf
aGFzaCA9ICgodm9pZCAqKTApIDsKCX0KCXBhZ2VfY2FjaGVfc2l6ZS0tOwp9CnN0YXRpYyBpbmxp
bmUgdm9pZCBfX2FkZF9wYWdlX3RvX2hhc2hfcXVldWUoc3RydWN0IHBhZ2UgKiBwYWdlLCBzdHJ1
Y3QgcGFnZSAqKnApCnsKCXBhZ2VfY2FjaGVfc2l6ZSsrOwoJaWYoKHBhZ2UtPm5leHRfaGFzaCA9
ICpwKSAhPSAoKHZvaWQgKikwKSApCgkJKCpwKS0+cHByZXZfaGFzaCA9ICZwYWdlLT5uZXh0X2hh
c2g7CgkqcCA9IHBhZ2U7CglwYWdlLT5wcHJldl9oYXNoID0gcDsKfQpzdGF0aWMgaW5saW5lIHZv
aWQgYWRkX3BhZ2VfdG9faGFzaF9xdWV1ZShzdHJ1Y3QgcGFnZSAqIHBhZ2UsIHN0cnVjdCBpbm9k
ZSAqIGlub2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKewoJX19hZGRfcGFnZV90b19oYXNoX3F1
ZXVlKHBhZ2UsIChwYWdlX2hhc2hfdGFibGUrX3BhZ2VfaGFzaGZuKCBpbm9kZSAsIG9mZnNldCAp
KSApOwp9CnN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfcGFnZV9mcm9tX2lub2RlX3F1ZXVlKHN0
cnVjdCBwYWdlICogcGFnZSkKewoJc3RydWN0IGlub2RlICogaW5vZGUgPSBwYWdlLT5pbm9kZTsK
CXBhZ2UtPmlub2RlID0gKCh2b2lkICopMCkgOwoJaW5vZGUtPmlfbnJwYWdlcy0tOwoJaWYgKGlu
b2RlLT5pX3BhZ2VzID09IHBhZ2UpCgkJaW5vZGUtPmlfcGFnZXMgPSBwYWdlLT5uZXh0OwoJaWYg
KHBhZ2UtPm5leHQpCgkJcGFnZS0+bmV4dC0+cHJldiA9IHBhZ2UtPnByZXY7CglpZiAocGFnZS0+
cHJldikKCQlwYWdlLT5wcmV2LT5uZXh0ID0gcGFnZS0+bmV4dDsKCXBhZ2UtPm5leHQgPSAoKHZv
aWQgKikwKSA7CglwYWdlLT5wcmV2ID0gKCh2b2lkICopMCkgOwp9CnN0YXRpYyBpbmxpbmUgdm9p
ZCBhZGRfcGFnZV90b19pbm9kZV9xdWV1ZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IHBh
Z2UgKiBwYWdlKQp7CglzdHJ1Y3QgcGFnZSAqKnAgPSAmaW5vZGUtPmlfcGFnZXM7Cglpbm9kZS0+
aV9ucnBhZ2VzKys7CglwYWdlLT5pbm9kZSA9IGlub2RlOwoJcGFnZS0+cHJldiA9ICgodm9pZCAq
KTApIDsKCWlmICgocGFnZS0+bmV4dCA9ICpwKSAhPSAoKHZvaWQgKikwKSApCgkJcGFnZS0+bmV4
dC0+cHJldiA9IHBhZ2U7CgkqcCA9IHBhZ2U7Cn0KZXh0ZXJuIHZvaWQgX193YWl0X29uX3BhZ2Uo
c3RydWN0IHBhZ2UgKik7CnN0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X29uX3BhZ2Uoc3RydWN0IHBh
Z2UgKiBwYWdlKQp7CglpZiAoKChfX2J1aWx0aW5fY29uc3RhbnRfcCggMCAgKSA/IF9fY29uc3Rh
bnRfdGVzdF9iaXQoKCAwICApLCggICYoIHBhZ2UgKS0+ZmxhZ3MgKSkgOiBfX3Rlc3RfYml0KCgg
MCAgKSwoICAmKCBwYWdlICktPmZsYWdzICkpKSApICkKCQlfX3dhaXRfb25fcGFnZShwYWdlKTsK
fQpleHRlcm4gdm9pZCB1cGRhdGVfdm1fY2FjaGVfY29uZGl0aW9uYWwoc3RydWN0IGlub2RlICos
IHVuc2lnbmVkIGxvbmcsIGNvbnN0IGNoYXIgKiwgaW50LCB1bnNpZ25lZCBsb25nKTsKZXh0ZXJu
IHZvaWQgdXBkYXRlX3ZtX2NhY2hlKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nLCBjb25z
dCBjaGFyICosIGludCk7CiMgOCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgv
bG9ja3MuaCIgMgogCmV4dGVybiB2b2lkIF9fd2FpdF9vbl9idWZmZXIoc3RydWN0IGJ1ZmZlcl9o
ZWFkICopOwpleHRlcm4gaW5saW5lIHZvaWQgd2FpdF9vbl9idWZmZXIoc3RydWN0IGJ1ZmZlcl9o
ZWFkICogYmgpCnsKCWlmICgoX19idWlsdGluX2NvbnN0YW50X3AoIDIgICkgPyBfX2NvbnN0YW50
X3Rlc3RfYml0KCggMiAgKSwoICAmYmgtPmJfc3RhdGUgKSkgOiBfX3Rlc3RfYml0KCggMiAgKSwo
ICAmYmgtPmJfc3RhdGUgKSkpICkKCQlfX3dhaXRfb25fYnVmZmVyKGJoKTsKfQpleHRlcm4gaW5s
aW5lIHZvaWQgbG9ja19idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpCnsKCXdoaWxlICh0
ZXN0X2FuZF9zZXRfYml0KDIgLCAmYmgtPmJfc3RhdGUpKQoJCV9fd2FpdF9vbl9idWZmZXIoYmgp
Owp9CmV4dGVybiBpbmxpbmUgdm9pZCB1bmxvY2tfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAq
YmgpCnsKCWNsZWFyX2JpdCgyICwgJmJoLT5iX3N0YXRlKTsKCV9fd2FrZV91cCgoICZiaC0+Yl93
YWl0ICksMiAgfCAxICkgOwp9CiAKZXh0ZXJuIHZvaWQgX193YWl0X29uX3N1cGVyKHN0cnVjdCBz
dXBlcl9ibG9jayAqKTsKZXh0ZXJuIGlubGluZSB2b2lkIHdhaXRfb25fc3VwZXIoc3RydWN0IHN1
cGVyX2Jsb2NrICogc2IpCnsKCWlmIChzYi0+c19sb2NrKQoJCV9fd2FpdF9vbl9zdXBlcihzYik7
Cn0KZXh0ZXJuIGlubGluZSB2b2lkIGxvY2tfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICogc2Ip
CnsKCWlmIChzYi0+c19sb2NrKQoJCV9fd2FpdF9vbl9zdXBlcihzYik7CglzYi0+c19sb2NrID0g
MTsKfQpleHRlcm4gaW5saW5lIHZvaWQgdW5sb2NrX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAq
IHNiKQp7CglzYi0+c19sb2NrID0gMDsKCV9fd2FrZV91cCgoICZzYi0+c193YWl0ICksMiAgfCAx
ICkgOwp9CiMgNSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvYmxrLmgiIDIK
IApleHRlcm4gc3BpbmxvY2tfdCBpb19yZXF1ZXN0X2xvY2s7CiAKIAogCmV4dGVybiBpbnQgaXNw
MTZfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBjZHUzMWFfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBh
Y3NpX2luaXQodm9pZCk7CmV4dGVybiBpbnQgbWNkX2luaXQodm9pZCk7CmV4dGVybiBpbnQgbWNk
eF9pbml0KHZvaWQpOwpleHRlcm4gaW50IHNicGNkX2luaXQodm9pZCk7CmV4dGVybiBpbnQgYXp0
Y2RfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBzb255NTM1X2luaXQodm9pZCk7CmV4dGVybiBpbnQg
Z3NjZF9pbml0KHZvaWQpOwpleHRlcm4gaW50IGNtMjA2X2luaXQodm9pZCk7CmV4dGVybiBpbnQg
b3B0Y2RfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBzamNkX2luaXQodm9pZCk7CmV4dGVybiBpbnQg
Y2RpX2luaXQodm9pZCk7CmV4dGVybiBpbnQgaGRfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBpZGVf
aW5pdCh2b2lkKTsKZXh0ZXJuIGludCB4ZF9pbml0KHZvaWQpOwpleHRlcm4gaW50IG1mbV9pbml0
KHZvaWQpOwpleHRlcm4gaW50IGxvb3BfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBtZF9pbml0KHZv
aWQpOwpleHRlcm4gaW50IGFwX2luaXQodm9pZCk7CmV4dGVybiBpbnQgZGR2X2luaXQodm9pZCk7
CmV4dGVybiBpbnQgejJfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBzd2ltM19pbml0KHZvaWQpOwpl
eHRlcm4gaW50IGFtaWdhX2Zsb3BweV9pbml0KHZvaWQpOwpleHRlcm4gaW50IGF0YXJpX2Zsb3Bw
eV9pbml0KHZvaWQpOwpleHRlcm4gaW50IG5iZF9pbml0KHZvaWQpOwpleHRlcm4gaW50IGV6X2lu
aXQodm9pZCk7CmV4dGVybiBpbnQgYnBjZF9pbml0KHZvaWQpOwpleHRlcm4gaW50IHBzMmVzZGlf
aW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgc2V0X2RldmljZV9ybyhrZGV2X3QgZGV2LGludCBmbGFn
KTsKdm9pZCBhZGRfYmxrZGV2X3JhbmRvbW5lc3MoaW50IG1ham9yKTsKZXh0ZXJuIGludCBmbG9w
cHlfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgcmRfbG9hZCh2b2lkKTsKZXh0ZXJuIGludCByZF9p
bml0KHZvaWQpOwpleHRlcm4gaW50IHJkX2RvbG9hZDsJCSAKZXh0ZXJuIGludCByZF9wcm9tcHQ7
CQkgCmV4dGVybiBpbnQgcmRfaW1hZ2Vfc3RhcnQ7CSAKIyA5MSAiL2hvbWUvanc1L3RtcC9saW51
eDIyL2luY2x1ZGUvbGludXgvYmxrLmgiCgkJIAogCmludCBlbmRfdGhhdF9yZXF1ZXN0X2ZpcnN0
KHN0cnVjdCByZXF1ZXN0ICpyZXEsIGludCB1cHRvZGF0ZSwgY2hhciAqbmFtZSk7CnZvaWQgZW5k
X3RoYXRfcmVxdWVzdF9sYXN0KHN0cnVjdCByZXF1ZXN0ICpyZXEpOwojIDQ4NyAiL2hvbWUvanc1
L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvYmxrLmgiCiMgMjMgImluaXQvbWFpbi5jIiAyCiMg
MSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvbGludXgvaGRyZWcuaCIgMQogCiAKIAog
CiAKIAogCiAKIAogCnN0cnVjdCBoZF9nZW9tZXRyeSB7CiAgICAgIHVuc2lnbmVkIGNoYXIgaGVh
ZHM7CiAgICAgIHVuc2lnbmVkIGNoYXIgc2VjdG9yczsKICAgICAgdW5zaWduZWQgc2hvcnQgY3ls
aW5kZXJzOwogICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0Owp9OwogCiAKIApzdHJ1Y3QgaGRfZHJp
dmVpZCB7Cgl1bnNpZ25lZCBzaG9ydAljb25maWc7CQkgCgl1bnNpZ25lZCBzaG9ydAljeWxzOwkJ
IAoJdW5zaWduZWQgc2hvcnQJcmVzZXJ2ZWQyOwkgCgl1bnNpZ25lZCBzaG9ydAloZWFkczsJCSAK
CXVuc2lnbmVkIHNob3J0CXRyYWNrX2J5dGVzOwkgCgl1bnNpZ25lZCBzaG9ydAlzZWN0b3JfYnl0
ZXM7CSAKCXVuc2lnbmVkIHNob3J0CXNlY3RvcnM7CSAKCXVuc2lnbmVkIHNob3J0CXZlbmRvcjA7
CSAKCXVuc2lnbmVkIHNob3J0CXZlbmRvcjE7CSAKCXVuc2lnbmVkIHNob3J0CXZlbmRvcjI7CSAK
CXVuc2lnbmVkIGNoYXIJc2VyaWFsX25vWzIwXTsJIAoJdW5zaWduZWQgc2hvcnQJYnVmX3R5cGU7
Cgl1bnNpZ25lZCBzaG9ydAlidWZfc2l6ZTsJIAoJdW5zaWduZWQgc2hvcnQJZWNjX2J5dGVzOwkg
Cgl1bnNpZ25lZCBjaGFyCWZ3X3Jldls4XTsJIAoJdW5zaWduZWQgY2hhcgltb2RlbFs0MF07CSAK
CXVuc2lnbmVkIGNoYXIJbWF4X211bHRzZWN0OwkgCgl1bnNpZ25lZCBjaGFyCXZlbmRvcjM7CSAK
CXVuc2lnbmVkIHNob3J0CWR3b3JkX2lvOwkgCgl1bnNpZ25lZCBjaGFyCXZlbmRvcjQ7CSAKCXVu
c2lnbmVkIGNoYXIJY2FwYWJpbGl0eTsJIAoJdW5zaWduZWQgc2hvcnQJcmVzZXJ2ZWQ1MDsJIAoJ
dW5zaWduZWQgY2hhcgl2ZW5kb3I1OwkgCgl1bnNpZ25lZCBjaGFyCXRQSU87CQkgCgl1bnNpZ25l
ZCBjaGFyCXZlbmRvcjY7CSAKCXVuc2lnbmVkIGNoYXIJdERNQTsJCSAKCXVuc2lnbmVkIHNob3J0
CWZpZWxkX3ZhbGlkOwkgCgl1bnNpZ25lZCBzaG9ydAljdXJfY3lsczsJIAoJdW5zaWduZWQgc2hv
cnQJY3VyX2hlYWRzOwkgCgl1bnNpZ25lZCBzaG9ydAljdXJfc2VjdG9yczsJIAoJdW5zaWduZWQg
c2hvcnQJY3VyX2NhcGFjaXR5MDsJIAoJdW5zaWduZWQgc2hvcnQJY3VyX2NhcGFjaXR5MTsJIAoJ
dW5zaWduZWQgY2hhcgltdWx0c2VjdDsJIAoJdW5zaWduZWQgY2hhcgltdWx0c2VjdF92YWxpZDsJ
IAoJdW5zaWduZWQgaW50CWxiYV9jYXBhY2l0eTsJIAoJdW5zaWduZWQgc2hvcnQJZG1hXzF3b3Jk
OwkgCgl1bnNpZ25lZCBzaG9ydAlkbWFfbXdvcmQ7CSAKCXVuc2lnbmVkIHNob3J0ICBlaWRlX3Bp
b19tb2RlczsgIAoJdW5zaWduZWQgc2hvcnQgIGVpZGVfZG1hX21pbjsJIAoJdW5zaWduZWQgc2hv
cnQgIGVpZGVfZG1hX3RpbWU7CSAKCXVuc2lnbmVkIHNob3J0ICBlaWRlX3BpbzsgICAgICAgIAoJ
dW5zaWduZWQgc2hvcnQgIGVpZGVfcGlvX2lvcmR5OyAgCgl1bnNpZ25lZCBzaG9ydCAgd29yZDY5
OwoJdW5zaWduZWQgc2hvcnQgIHdvcmQ3MDsKCSAKCXVuc2lnbmVkIHNob3J0ICB3b3JkNzE7Cgl1
bnNpZ25lZCBzaG9ydCAgd29yZDcyOwoJdW5zaWduZWQgc2hvcnQgIHdvcmQ3MzsKCXVuc2lnbmVk
IHNob3J0ICB3b3JkNzQ7Cgl1bnNpZ25lZCBzaG9ydCAgd29yZDc1OwoJdW5zaWduZWQgc2hvcnQg
IHdvcmQ3NjsKCXVuc2lnbmVkIHNob3J0ICB3b3JkNzc7Cgl1bnNpZ25lZCBzaG9ydCAgd29yZDc4
OwoJdW5zaWduZWQgc2hvcnQgIHdvcmQ3OTsKCXVuc2lnbmVkIHNob3J0ICB3b3JkODA7Cgl1bnNp
Z25lZCBzaG9ydCAgd29yZDgxOwoJdW5zaWduZWQgc2hvcnQgIGNvbW1hbmRfc2V0czsJIAoJdW5z
aWduZWQgc2hvcnQgIHdvcmQ4MzsJCSAKCXVuc2lnbmVkIHNob3J0ICB3b3JkODQ7Cgl1bnNpZ25l
ZCBzaG9ydCAgd29yZDg1OwoJdW5zaWduZWQgc2hvcnQgIHdvcmQ4NjsKCXVuc2lnbmVkIHNob3J0
ICB3b3JkODc7Cgl1bnNpZ25lZCBzaG9ydCAgZG1hX3VsdHJhOwoJdW5zaWduZWQgc2hvcnQJd29y
ZDg5OwkJIAoJdW5zaWduZWQgc2hvcnQJd29yZDkwOwkJIAoJdW5zaWduZWQgc2hvcnQJd29yZDkx
OwkJIAoJdW5zaWduZWQgc2hvcnQJd29yZDkyOwkJIAoJdW5zaWduZWQgc2hvcnQJd29yZDkzOwkJ
IAoJdW5zaWduZWQgc2hvcnQJd29yZDk0OwkJIAoJdW5zaWduZWQgc2hvcnQJd29yZDk1OwkJIAoJ
dW5zaWduZWQgc2hvcnQJd29yZDk2OwkJIAoJdW5zaWduZWQgc2hvcnQJd29yZDk3OwkJIAoJdW5z
aWduZWQgc2hvcnQJd29yZDk4OwkJIAoJdW5zaWduZWQgc2hvcnQJd29yZDk5OwkJIAoJdW5zaWdu
ZWQgc2hvcnQJd29yZDEwMDsJIAoJdW5zaWduZWQgc2hvcnQJd29yZDEwMTsJIAoJdW5zaWduZWQg
c2hvcnQJd29yZDEwMjsJIAoJdW5zaWduZWQgc2hvcnQJd29yZDEwMzsJIAoJdW5zaWduZWQgc2hv
cnQJd29yZDEwNDsJIAoJdW5zaWduZWQgc2hvcnQJd29yZDEwNTsJIAoJdW5zaWduZWQgc2hvcnQJ
d29yZDEwNjsJIAoJdW5zaWduZWQgc2hvcnQJd29yZDEwNzsJIAoJdW5zaWduZWQgc2hvcnQJd29y
ZDEwODsJIAoJdW5zaWduZWQgc2hvcnQJd29yZDEwOTsJIAoJdW5zaWduZWQgc2hvcnQJd29yZDEx
MDsJIAoJdW5zaWduZWQgc2hvcnQJd29yZDExMTsJIAoJdW5zaWduZWQgc2hvcnQJd29yZDExMjsJ
IAoJdW5zaWduZWQgc2hvcnQJd29yZDExMzsJIAoJdW5zaWduZWQgc2hvcnQJd29yZDExNDsJIAoJ
dW5zaWduZWQgc2hvcnQJd29yZDExNTsJIAoJdW5zaWduZWQgc2hvcnQJd29yZDExNjsJIAoJdW5z
aWduZWQgc2hvcnQJd29yZDExNzsJIAoJdW5zaWduZWQgc2hvcnQJd29yZDExODsJIAoJdW5zaWdu
ZWQgc2hvcnQJd29yZDExOTsJIAoJdW5zaWduZWQgc2hvcnQJd29yZDEyMDsJIAoJdW5zaWduZWQg
c2hvcnQJd29yZDEyMTsJIAoJdW5zaWduZWQgc2hvcnQJd29yZDEyMjsJIAoJdW5zaWduZWQgc2hv
cnQJd29yZDEyMzsJIAoJdW5zaWduZWQgc2hvcnQJd29yZDEyNDsJIAoJdW5zaWduZWQgc2hvcnQJ
d29yZDEyNTsJIAoJdW5zaWduZWQgc2hvcnQJd29yZDEyNjsJIAoJdW5zaWduZWQgc2hvcnQJd29y
ZDEyNzsJIAoJdW5zaWduZWQgc2hvcnQJc2VjdXJpdHk7CSAKCXVuc2lnbmVkIHNob3J0CXJlc2Vy
dmVkWzEyN107Cn07CiAKIAppbnQgaWRlX3JlZ2lzdGVyKGludCBpb19wb3J0LCBpbnQgY3RsX3Bv
cnQsIGludCBpcnEpOwp2b2lkIGlkZV91bnJlZ2lzdGVyKHVuc2lnbmVkIGludCk7CiMgMjQgImlu
aXQvbWFpbi5jIiAyCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2lvLmgi
IDEKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20vbDRhcmNoL2lvLmgiIDEK
IyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIvaW5jbHVkZS9hc20taTM4Ni9pby5oIiAxCiAKIAog
IAogCmV4dGVybiBpbmxpbmUgdW5zaWduZWQgY2hhciAgaW5iICAodW5zaWduZWQgc2hvcnQgcG9y
dCkgeyB1bnNpZ25lZCBjaGFyICBfdjsgIF9fYXNtX18gX192b2xhdGlsZV9fICgiaW4iICJiIiAi
ICUiICAidyIgICIxLCUiICAgIiIgICAiMCIgIDogIj1hIiAoX3YpIDogIk5kIiAocG9ydCkgICAp
OyByZXR1cm4gX3Y7IH0gZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBjaGFyICBpbmJfcCAodW5zaWdu
ZWQgc2hvcnQgcG9ydCkgeyB1bnNpZ25lZCBjaGFyICBfdjsgIF9fYXNtX18gX192b2xhdGlsZV9f
ICgiaW4iICJiIiAiICUiICAidyIgICIxLCUiICAgIiIgICAiMCIgICJcbm91dGIgJSVhbCwkMHg4
MCIgICA6ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpICAgKTsgcmV0dXJuIF92OyB9IApleHRlcm4g
aW5saW5lIHVuc2lnbmVkIHNob3J0ICBpbncgICh1bnNpZ25lZCBzaG9ydCBwb3J0KSB7IHVuc2ln
bmVkIHNob3J0ICBfdjsgIF9fYXNtX18gX192b2xhdGlsZV9fICgiaW4iICJ3IiAiICUiICAidyIg
ICIxLCUiICAgIiIgICAiMCIgIDogIj1hIiAoX3YpIDogIk5kIiAocG9ydCkgICApOyByZXR1cm4g
X3Y7IH0gZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBzaG9ydCAgaW53X3AgKHVuc2lnbmVkIHNob3J0
IHBvcnQpIHsgdW5zaWduZWQgc2hvcnQgIF92OyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJpbiIg
InciICIgJSIgICJ3IiAgIjEsJSIgICAiIiAgICIwIiAgIlxub3V0YiAlJWFsLCQweDgwIiAgIDog
Ij1hIiAoX3YpIDogIk5kIiAocG9ydCkgICApOyByZXR1cm4gX3Y7IH0gCmV4dGVybiBpbmxpbmUg
dW5zaWduZWQgaW50ICBpbmwgICh1bnNpZ25lZCBzaG9ydCBwb3J0KSB7IHVuc2lnbmVkIGludCAg
X3Y7ICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImluIiAibCIgIiAlIiAgInciICAiMSwlIiAgICIi
ICAgIjAiICA6ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpICAgKTsgcmV0dXJuIF92OyB9IGV4dGVy
biBpbmxpbmUgdW5zaWduZWQgaW50ICBpbmxfcCAodW5zaWduZWQgc2hvcnQgcG9ydCkgeyB1bnNp
Z25lZCBpbnQgIF92OyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJpbiIgImwiICIgJSIgICJ3IiAg
IjEsJSIgICAiIiAgICIwIiAgIlxub3V0YiAlJWFsLCQweDgwIiAgIDogIj1hIiAoX3YpIDogIk5k
IiAocG9ydCkgICApOyByZXR1cm4gX3Y7IH0gCmV4dGVybiBpbmxpbmUgdm9pZCBvdXRiICAodW5z
aWduZWQgICBjaGFyICAgdmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgIF9fYXNtX18gX192
b2xhdGlsZV9fICgib3V0IiAiYiIgIiAlIiAgICJiIiAgICIwLCUiICAidyIgICIxIiAgOiA6ICJh
IiAodmFsdWUpLCAiTmQiIChwb3J0KSk7IH0gZXh0ZXJuIGlubGluZSB2b2lkIG91dGJfcCAodW5z
aWduZWQgICBjaGFyICAgdmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgIF9fYXNtX18gX192
b2xhdGlsZV9fICgib3V0IiAiYiIgIiAlIiAgICJiIiAgICIwLCUiICAidyIgICIxIiAgIlxub3V0
YiAlJWFsLCQweDgwIiAgIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpO30gCmV4dGVybiBp
bmxpbmUgdm9pZCBvdXR3ICAodW5zaWduZWQgICBzaG9ydCAgIHZhbHVlLCB1bnNpZ25lZCBzaG9y
dCBwb3J0KSB7ICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm91dCIgInciICIgJSIgICAidyIgICAi
MCwlIiAgInciICAiMSIgIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpOyB9IGV4dGVybiBp
bmxpbmUgdm9pZCBvdXR3X3AgKHVuc2lnbmVkICAgc2hvcnQgICB2YWx1ZSwgdW5zaWduZWQgc2hv
cnQgcG9ydCkgeyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJvdXQiICJ3IiAiICUiICAgInciICAg
IjAsJSIgICJ3IiAgIjEiICAiXG5vdXRiICUlYWwsJDB4ODAiICAgOiA6ICJhIiAodmFsdWUpLCAi
TmQiIChwb3J0KSk7fSAKZXh0ZXJuIGlubGluZSB2b2lkIG91dGwgICh1bnNpZ25lZCAgIGludCAg
IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBwb3J0KSB7ICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm91
dCIgImwiICIgJSIgICAgICAiMCwlIiAgInciICAiMSIgIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAo
cG9ydCkpOyB9IGV4dGVybiBpbmxpbmUgdm9pZCBvdXRsX3AgKHVuc2lnbmVkICAgaW50ICAgdmFs
dWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgIF9fYXNtX18gX192b2xhdGlsZV9fICgib3V0IiAi
bCIgIiAlIiAgICAgICIwLCUiICAidyIgICIxIiAgIlxub3V0YiAlJWFsLCQweDgwIiAgIDogOiAi
YSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpO30gCmV4dGVybiBpbmxpbmUgdm9pZCBpbnNiICh1bnNp
Z25lZCBzaG9ydCBwb3J0LCB2b2lkICogYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkgeyBfX2Fz
bV9fIF9fdm9sYXRpbGVfXyAoImNsZCA7IHJlcCA7IGlucyIgImIiIDogIj1EIiAoYWRkciksICI9
YyIgKGNvdW50KSA6ICJkIiAocG9ydCksIjAiIChhZGRyKSwiMSIgKGNvdW50KSk7IH0gCmV4dGVy
biBpbmxpbmUgdm9pZCBpbnN3ICh1bnNpZ25lZCBzaG9ydCBwb3J0LCB2b2lkICogYWRkciwgdW5z
aWduZWQgbG9uZyBjb3VudCkgeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImNsZCA7IHJlcCA7IGlu
cyIgInciIDogIj1EIiAoYWRkciksICI9YyIgKGNvdW50KSA6ICJkIiAocG9ydCksIjAiIChhZGRy
KSwiMSIgKGNvdW50KSk7IH0gCmV4dGVybiBpbmxpbmUgdm9pZCBpbnNsICh1bnNpZ25lZCBzaG9y
dCBwb3J0LCB2b2lkICogYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkgeyBfX2FzbV9fIF9fdm9s
YXRpbGVfXyAoImNsZCA7IHJlcCA7IGlucyIgImwiIDogIj1EIiAoYWRkciksICI9YyIgKGNvdW50
KSA6ICJkIiAocG9ydCksIjAiIChhZGRyKSwiMSIgKGNvdW50KSk7IH0gCmV4dGVybiBpbmxpbmUg
dm9pZCBvdXRzYiAodW5zaWduZWQgc2hvcnQgcG9ydCwgY29uc3Qgdm9pZCAqIGFkZHIsIHVuc2ln
bmVkIGxvbmcgY291bnQpIHsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJjbGQgOyByZXAgOyBvdXRz
IiAiYiIgOiAiPVMiIChhZGRyKSwgIj1jIiAoY291bnQpIDogImQiIChwb3J0KSwiMCIgKGFkZHIp
LCIxIiAoY291bnQpKTsgfSAKZXh0ZXJuIGlubGluZSB2b2lkIG91dHN3ICh1bnNpZ25lZCBzaG9y
dCBwb3J0LCBjb25zdCB2b2lkICogYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkgeyBfX2FzbV9f
IF9fdm9sYXRpbGVfXyAoImNsZCA7IHJlcCA7IG91dHMiICJ3IiA6ICI9UyIgKGFkZHIpLCAiPWMi
IChjb3VudCkgOiAiZCIgKHBvcnQpLCIwIiAoYWRkciksIjEiIChjb3VudCkpOyB9IApleHRlcm4g
aW5saW5lIHZvaWQgb3V0c2wgKHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHZvaWQgKiBhZGRy
LCB1bnNpZ25lZCBsb25nIGNvdW50KSB7IF9fYXNtX18gX192b2xhdGlsZV9fICgiY2xkIDsgcmVw
IDsgb3V0cyIgImwiIDogIj1TIiAoYWRkciksICI9YyIgKGNvdW50KSA6ICJkIiAocG9ydCksIjAi
IChhZGRyKSwiMSIgKGNvdW50KSk7IH0gCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1
ZGUvbGludXgvdm1hbGxvYy5oIiAxCiMgMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUv
YXNtL3BndGFibGUuaCIgMQojIDEgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9s
NGFyY2gvcGd0YWJsZS5oIiAxCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCmV4
dGVybiB1bnNpZ25lZCBsb25nIHBnMFsxMDI0XTsKIApleHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0
eV96ZXJvX3BhZ2VbMTAyNF07CiAKZXh0ZXJuIHB0ZV90IF9fYmFkX3BhZ2Uodm9pZCk7CmV4dGVy
biBwdGVfdCAqIF9fYmFkX3BhZ2V0YWJsZSh2b2lkKTsKIAogCiAKIAogCiAKIApleHRlcm4gaW5s
aW5lIGludCBwZ2Rfbm9uZShwZ2RfdCBwZ2QpCQl7IHJldHVybiAwOyB9CmV4dGVybiBpbmxpbmUg
aW50IHBnZF9iYWQocGdkX3QgcGdkKQkJeyByZXR1cm4gMDsgfQpleHRlcm4gaW5saW5lIGludCBw
Z2RfcHJlc2VudChwZ2RfdCBwZ2QpCXsgcmV0dXJuIDE7IH0KZXh0ZXJuIGlubGluZSB2b2lkIHBn
ZF9jbGVhcihwZ2RfdCAqIHBnZHApCXsgfQogCmV4dGVybiBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0
ZV90IHB0ZSkJCXsgcmV0dXJuICgoIHB0ZSApLnB0ZSkgICYgMHgwMDQgOyB9CmV4dGVybiBpbmxp
bmUgaW50IHB0ZV9leGVjKHB0ZV90IHB0ZSkJCXsgcmV0dXJuICgoIHB0ZSApLnB0ZSkgICYgMHgw
MDQgOyB9CmV4dGVybiBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCQl7IHJldHVybiAo
KCBwdGUgKS5wdGUpICAmIDB4MDQwIDsgfQpleHRlcm4gaW5saW5lIGludCBwdGVfeW91bmcocHRl
X3QgcHRlKQkJeyByZXR1cm4gKCggcHRlICkucHRlKSAgJiAweDAyMCA7IH0KZXh0ZXJuIGlubGlu
ZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkJCXsgcmV0dXJuICgoIHB0ZSApLnB0ZSkgICYgMHgw
MDIgOyB9CmV4dGVybiBpbmxpbmUgaW50IHB0ZV9tYXBwZWQocHRlX3QgcHRlKSAJeyByZXR1cm4g
KCggcHRlICkucHRlKSAgJiAweDIwMCA7IH0KZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfcmRwcm90
ZWN0KHB0ZV90IHB0ZSkJeyAoKCBwdGUgKS5wdGUpICAmPSB+MHgwMDQgOyByZXR1cm4gcHRlOyB9
CmV4dGVybiBpbmxpbmUgcHRlX3QgcHRlX2V4cHJvdGVjdChwdGVfdCBwdGUpCXsgKCggcHRlICku
cHRlKSAgJj0gfjB4MDA0IDsgcmV0dXJuIHB0ZTsgfQpleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9t
a2NsZWFuKHB0ZV90IHB0ZSkJeyAoKCBwdGUgKS5wdGUpICAmPSB+MHgwNDAgOyByZXR1cm4gcHRl
OyB9CmV4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkJeyAoKCBwdGUgKS5w
dGUpICAmPSB+MHgwMjAgOyByZXR1cm4gcHRlOyB9CmV4dGVybiBpbmxpbmUgcHRlX3QgcHRlX3dy
cHJvdGVjdChwdGVfdCBwdGUpCXsgKCggcHRlICkucHRlKSAgJj0gfjB4MDAyIDsgcmV0dXJuIHB0
ZTsgfQpleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta3JlYWQocHRlX3QgcHRlKQl7ICgoIHB0ZSAp
LnB0ZSkgIHw9IDB4MDA0IDsgcmV0dXJuIHB0ZTsgfQpleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9t
a2V4ZWMocHRlX3QgcHRlKQl7ICgoIHB0ZSApLnB0ZSkgIHw9IDB4MDA0IDsgcmV0dXJuIHB0ZTsg
fQpleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkJeyAoKCBwdGUgKS5w
dGUpICB8PSAweDA0MCA7IHJldHVybiBwdGU7IH0KZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWt5
b3VuZyhwdGVfdCBwdGUpCXsgKCggcHRlICkucHRlKSAgfD0gMHgwMjAgOyByZXR1cm4gcHRlOyB9
CmV4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQl7ICgoIHB0ZSApLnB0
ZSkgIHw9IDB4MDAyIDsgcmV0dXJuIHB0ZTsgfQogCiAKZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVf
bW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKeyAoKCBwdGUgKS5wdGUpICA9ICgo
KCBwdGUgKS5wdGUpICAmICgofigoMVVMIDw8IDEyICkgLTEpKSAgfCAweDAyMCAgfCAweDA0MCAg
fCAweDIwMCApICkgfCAoKCBuZXdwcm90ICkucGdwcm90KSA7IHJldHVybiBwdGU7IH0KIAogCiAK
ZXh0ZXJuIGlubGluZSBwbWRfdCAqIHBtZF9vZmZzZXQocGdkX3QgKiBkaXIsIHVuc2lnbmVkIGxv
bmcgYWRkcmVzcykKewoJcmV0dXJuIChwbWRfdCAqKSBkaXI7Cn0KICAKIApleHRlcm4gX19pbmxp
bmVfXyBwZ2RfdCAqZ2V0X3BnZF9zbG93KHZvaWQpCnsKICAJIAoJcGdkX3QgKnJldCA9IChwZ2Rf
dCAqKWdldF9mcmVlX3BhZ2UoKDB4MDQgIHwgMHgwMSAgfCAweDEwICkgKTsKCXJldHVybiByZXQ7
Cn0KZXh0ZXJuIF9faW5saW5lX18gcGdkX3QgKmdldF9wZ2RfZmFzdCh2b2lkKQp7Cgl1bnNpZ25l
ZCBsb25nICpyZXQ7CglpZigocmV0ID0gKGJvb3RfY3B1X2RhdGEgLnBnZF9xdWljaykgKSAhPSAo
KHZvaWQgKikwKSApIHsKCQkoYm9vdF9jcHVfZGF0YSAucGdkX3F1aWNrKSAgPSAodW5zaWduZWQg
bG9uZyAqKSgqcmV0KTsKCQlyZXRbMF0gPSByZXRbMV07CgkJKGJvb3RfY3B1X2RhdGEgLnBndGFi
bGVfY2FjaGVfc3opIC0tOwoJfSBlbHNlCgkJcmV0ID0gKHVuc2lnbmVkIGxvbmcgKilnZXRfcGdk
X3Nsb3coKTsKCXJldHVybiAocGdkX3QgKilyZXQ7Cn0KZXh0ZXJuIF9faW5saW5lX18gdm9pZCBm
cmVlX3BnZF9mYXN0KHBnZF90ICpwZ2QpCnsKCSoodW5zaWduZWQgbG9uZyAqKXBnZCA9ICh1bnNp
Z25lZCBsb25nKSAoYm9vdF9jcHVfZGF0YSAucGdkX3F1aWNrKSA7CgkoYm9vdF9jcHVfZGF0YSAu
cGdkX3F1aWNrKSAgPSAodW5zaWduZWQgbG9uZyAqKSBwZ2Q7CgkoYm9vdF9jcHVfZGF0YSAucGd0
YWJsZV9jYWNoZV9zeikgKys7Cn0KZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmcmVlX3BnZF9zbG93
KHBnZF90ICpwZ2QpCnsKCWZyZWVfcGFnZXMoKCAodW5zaWduZWQgbG9uZylwZ2QgKSwwKSA7Cn0K
ZXh0ZXJuIHB0ZV90ICpnZXRfcHRlX3Nsb3cocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRy
ZXNzX3ByZWFkanVzdGVkKTsKZXh0ZXJuIHB0ZV90ICpnZXRfcHRlX2tlcm5lbF9zbG93KHBtZF90
ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzc19wcmVhZGp1c3RlZCk7CmV4dGVybiBfX2lubGlu
ZV9fIHB0ZV90ICpnZXRfcHRlX2Zhc3Qodm9pZCkKewoJdW5zaWduZWQgbG9uZyAqcmV0OwoJaWYo
KHJldCA9ICh1bnNpZ25lZCBsb25nICopKGJvb3RfY3B1X2RhdGEgLnB0ZV9xdWljaykgKSAhPSAo
KHZvaWQgKikwKSApIHsKCQkoYm9vdF9jcHVfZGF0YSAucHRlX3F1aWNrKSAgPSAodW5zaWduZWQg
bG9uZyAqKSgqcmV0KTsKCQlyZXRbMF0gPSByZXRbMV07CgkJKGJvb3RfY3B1X2RhdGEgLnBndGFi
bGVfY2FjaGVfc3opIC0tOwoJfQoJcmV0dXJuIChwdGVfdCAqKXJldDsKfQpleHRlcm4gX19pbmxp
bmVfXyB2b2lkIGZyZWVfcHRlX2Zhc3QocHRlX3QgKnB0ZSkKewoJKih1bnNpZ25lZCBsb25nICop
cHRlID0gKHVuc2lnbmVkIGxvbmcpIChib290X2NwdV9kYXRhIC5wdGVfcXVpY2spIDsKCShib290
X2NwdV9kYXRhIC5wdGVfcXVpY2spICA9ICh1bnNpZ25lZCBsb25nICopIHB0ZTsKCShib290X2Nw
dV9kYXRhIC5wZ3RhYmxlX2NhY2hlX3N6KSArKzsKfQpleHRlcm4gX19pbmxpbmVfXyB2b2lkIGZy
ZWVfcHRlX3Nsb3cocHRlX3QgKnB0ZSkKewoJZnJlZV9wYWdlcygoICh1bnNpZ25lZCBsb25nKXB0
ZSApLDApIDsKfQogCmV4dGVybiBfX2lubGluZV9fIHBtZF90ICpnZXRfcG1kX2Zhc3Qodm9pZCkK
ewoJcmV0dXJuIChwbWRfdCAqKTA7Cn0KZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmcmVlX3BtZF9m
YXN0KHBtZF90ICpwbWQpCnsKfQpleHRlcm4gX19pbmxpbmVfXyB2b2lkIGZyZWVfcG1kX3Nsb3co
cG1kX3QgKnBtZCkKewp9CmV4dGVybiB2b2lkIF9fYmFkX3B0ZShwbWRfdCAqcG1kKTsKZXh0ZXJu
IHZvaWQgX19iYWRfcHRlX2tlcm5lbChwbWRfdCAqcG1kKTsKZXh0ZXJuIGlubGluZSBwdGVfdCAq
IHB0ZV9hbGxvY19rZXJuZWwocG1kX3QgKiBwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKewoJ
YWRkcmVzcyA9IChhZGRyZXNzID4+IDEyICkgJiAoMTAyNCAgLSAxKTsKCWlmICgoISAoKCAgKnBt
ZCAgKS5wbWQpICkgKSB7CgkJcHRlX3QgKiBwYWdlID0gKHB0ZV90ICopIGdldF9wdGVfZmFzdCgp
OwoJCQoJCWlmICghcGFnZSkKCQkJcmV0dXJuIGdldF9wdGVfa2VybmVsX3Nsb3cocG1kLCBhZGRy
ZXNzKTsKCQkoKCAqcG1kICkucG1kKSAgPSAoMHgwMDEgIHwgMHgwMDIgIHwgMHgwMjAgIHwgMHgw
NDAgKSAgKyAoKHVuc2lnbmVkIGxvbmcpKCBwYWdlICktICgodW5zaWduZWQgbG9uZykoMCkgKSAp
IDsKCQlyZXR1cm4gcGFnZSArIGFkZHJlc3M7Cgl9CglpZiAoKCgoKCAgKnBtZCAgKS5wbWQpICAm
ICh+KH4oKDFVTCA8PCAxMiApIC0xKSkgICYgfjB4MDA0ICkpICE9ICgweDAwMSAgfCAweDAwMiAg
fCAweDAyMCAgfCAweDA0MCApICkgKSB7CgkJX19iYWRfcHRlX2tlcm5lbChwbWQpOwoJCXJldHVy
biAoKHZvaWQgKikwKSA7Cgl9CglyZXR1cm4gKHB0ZV90ICopICgodW5zaWduZWQgbG9uZykgKCh2
b2lkICopKCh1bnNpZ25lZCBsb25nKSggKCggICpwbWQgICkucG1kKSAgJiAofigoMVVMIDw8IDEy
ICkgLTEpKSAgKSsgKCh1bnNpZ25lZCBsb25nKSgwKSApICkpICkgICsgYWRkcmVzczsKfQpleHRl
cm4gaW5saW5lIHB0ZV90ICogcHRlX2FsbG9jKHBtZF90ICogcG1kLCB1bnNpZ25lZCBsb25nIGFk
ZHJlc3MpCnsKCWFkZHJlc3MgPSAoYWRkcmVzcyA+PiAoMTIgLTIpKSAmIDQqKDEwMjQgIC0gMSk7
CglpZiAoKCEgKCggICpwbWQgICkucG1kKSApICkKCQlnb3RvIGdldG5ldzsKCWlmICgoKCgoICAq
cG1kICApLnBtZCkgICYgKH4ofigoMVVMIDw8IDEyICkgLTEpKSAgJiB+MHgwMDQgKSkgIT0gKDB4
MDAxICB8IDB4MDAyICB8IDB4MDIwICB8IDB4MDQwICkgKSApCgkJZ290byBmaXg7CglyZXR1cm4g
KHB0ZV90ICopICgoKHVuc2lnbmVkIGxvbmcpICgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoICgo
ICAqcG1kICApLnBtZCkgICYgKH4oKDFVTCA8PCAxMiApIC0xKSkgICkrICgodW5zaWduZWQgbG9u
ZykoMCkgKSApKSApICArIGFkZHJlc3MpOwpnZXRuZXc6CnsKCXVuc2lnbmVkIGxvbmcgcGFnZSA9
ICh1bnNpZ25lZCBsb25nKSBnZXRfcHRlX2Zhc3QoKTsKCQoJaWYgKCFwYWdlKQoJCXJldHVybiBn
ZXRfcHRlX3Nsb3cocG1kLCBhZGRyZXNzKTsKCSgoICpwbWQgKS5wbWQpICA9ICgweDAwMSAgfCAw
eDAwMiAgfCAweDAwNCAgfCAweDAyMCAgfCAweDA0MCApICArICgodW5zaWduZWQgbG9uZykoIHBh
Z2UgKS0gKCh1bnNpZ25lZCBsb25nKSgwKSApICkgOwoJcmV0dXJuIChwdGVfdCAqKSAocGFnZSAr
IGFkZHJlc3MpOwp9CmZpeDoKCV9fYmFkX3B0ZShwbWQpOwoJcmV0dXJuICgodm9pZCAqKTApIDsK
fQogCmV4dGVybiBpbmxpbmUgdm9pZCBwbWRfZnJlZShwbWRfdCAqIHBtZCkKewp9CmV4dGVybiBp
bmxpbmUgcG1kX3QgKiBwbWRfYWxsb2MocGdkX3QgKiBwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVz
cykKewoJcmV0dXJuIChwbWRfdCAqKSBwZ2Q7Cn0KZXh0ZXJuIGludCBkb19jaGVja19wZ3RfY2Fj
aGUoaW50LCBpbnQpOwogCiAKZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyWzEwMjRdOwogCmV4
dGVybiBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq
IHZtYSwKCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQp7Cn0KIApleHRlcm4gdW5z
aWduZWQgbG9uZyAgIF9fc2V0X3B0ZShwdGVfdCBwdGVwdHIsIHB0ZV90IHB0ZXZhbCkgIF9fYXR0
cmlidXRlX18oKHJlZ3Bhcm0oMykpKSA7CmV4dGVybiB2b2lkICAgX19wdGVfY2xlYXIocHRlX3Qg
cHRlcCkgIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKSA7CmV4dGVybiBpbmxpbmUgdm9pZCBz
ZXRfcHRlKHB0ZV90ICpwdGVwdHIsIHB0ZV90IHB0ZXZhbCkgewogICAgIAlpZiAoKCgoICpwdGVw
dHIgKS5wdGUpICAmICgweDAwMSAgfCAweDIwMCApKSA9PSAoMHgwMDEgIHwgMHgyMDAgKSkKCSAg
CSgoIHB0ZXZhbCApLnB0ZSkgID0gX19zZXRfcHRlKCpwdGVwdHIsIHB0ZXZhbCk7CgkqcHRlcHRy
ID0gcHRldmFsOwp9CmV4dGVybiBpbmxpbmUgdm9pZCBwdGVfY2xlYXIocHRlX3QgKnB0ZXB0cikg
ewogICAgIAlpZiAoKCgoICpwdGVwdHIgKS5wdGUpICAmICgweDAwMSAgfCAweDIwMCApKSA9PSAo
MHgwMDEgIHwgMHgyMDAgKSkKCSAgCV9fcHRlX2NsZWFyKCpwdGVwdHIpOwoJKCggKnB0ZXB0ciAp
LnB0ZSkgID0gMDsKfQogCiMgNCAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL3Bn
dGFibGUuaCIgMgojIDcgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2xpbnV4L3ZtYWxs
b2MuaCIgMgpzdHJ1Y3Qgdm1fc3RydWN0IHsKCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cgl2b2lkICog
YWRkcjsKCXVuc2lnbmVkIGxvbmcgc2l6ZTsKCXN0cnVjdCB2bV9zdHJ1Y3QgKiBuZXh0Owp9Owpz
dHJ1Y3Qgdm1fc3RydWN0ICogZ2V0X3ZtX2FyZWEodW5zaWduZWQgbG9uZyBzaXplKTsKdm9pZCB2
ZnJlZSh2b2lkICogYWRkcik7CnZvaWQgKiB2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSk7Cmxv
bmcgdnJlYWQoY2hhciAqYnVmLCBjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKdm9p
ZCB2bWZyZWVfYXJlYV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcg
c2l6ZSk7CmludCB2bWFsbG9jX2FyZWFfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNp
Z25lZCBsb25nIHNpemUpOwojIDEwMSAiL2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNt
LWkzODYvaW8uaCIgMgogCmV4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXMo
dm9sYXRpbGUgdm9pZCAqIGFkZHJlc3MpCnsKCXJldHVybiAoKHVuc2lnbmVkIGxvbmcpKCBhZGRy
ZXNzICkgJiB+KCh1bnNpZ25lZCBsb25nKSgwKSApICkgOwp9CmV4dGVybiBpbmxpbmUgdm9pZCAq
IHBoeXNfdG9fdmlydCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCnsKCXJldHVybiAoKHZvaWQgKiko
KCh1bnNpZ25lZCBsb25nKSgwKSApICB8ICh1bnNpZ25lZCBsb25nKSggYWRkcmVzcyApKSkgOwp9
CmV4dGVybiB2b2lkICogX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBs
b25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwpleHRlcm4gaW5saW5lIHZvaWQgKiBpb3Jl
bWFwICh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQp7CglyZXR1cm4g
X19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgMCk7Cn0KIApleHRlcm4gaW5saW5lIHZvaWQgKiBpb3Jl
bWFwX25vY2FjaGUgKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCnsK
ICAgICAgICByZXR1cm4gX19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgMHgwMTAgKTsKfQpleHRlcm4g
dm9pZCBpb3VubWFwKHZvaWQgKmFkZHIpOwogCiAKIApzdGF0aWMgaW5saW5lIGludCBjaGVja19z
aWduYXR1cmUodW5zaWduZWQgbG9uZyBpb19hZGRyLAoJY29uc3QgdW5zaWduZWQgY2hhciAqc2ln
bmF0dXJlLCBpbnQgbGVuZ3RoKQp7CglpbnQgcmV0dmFsID0gMDsKCWRvIHsKCQlpZiAoKCoodm9s
YXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoKCh1bnNpZ25lZCBsb25nKSgwKSApICB8
ICh1bnNpZ25lZCBsb25nKSggIGlvX2FkZHIgICkpKSApICAhPSAqc2lnbmF0dXJlKQoJCQlnb3Rv
IG91dDsKCQlpb19hZGRyKys7CgkJc2lnbmF0dXJlKys7CgkJbGVuZ3RoLS07Cgl9IHdoaWxlIChs
ZW5ndGgpOwoJcmV0dmFsID0gMTsKb3V0OgoJcmV0dXJuIHJldHZhbDsKfQojIDQgIi9ob21lL2p3
NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvaW8uaCIgMgojIDQgIi9ob21lL2p3NS90
bXAvbGludXgyMi9pbmNsdWRlL2FzbS9pby5oIiAyCiMgMjYgImluaXQvbWFpbi5jIiAyCiMgMSAi
L2hvbWUvanc1L3RtcC9saW51eDIyL2luY2x1ZGUvYXNtL2J1Z3MuaCIgMQojIDEgIi9ob21lL2p3
NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9sNGFyY2gvYnVncy5oIiAxCiAKIApzdGF0aWMgZG91
YmxlIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi5kYXRhLmluaXQiKSkpICB4ID0gNDE5
NTgzNS4wOwpzdGF0aWMgZG91YmxlIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi5kYXRh
LmluaXQiKSkpICB5ID0gMzE0NTcyNy4wOwogc3RhdGljIHZvaWQgY2hlY2tfZnB1KHZvaWQpICBf
X2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIudGV4dC5pbml0IikpKSA7ICBzdGF0aWMgdm9p
ZCBjaGVja19mcHUodm9pZCkgIAp7Cglib290X2NwdV9kYXRhLmhhcmRfbWF0aCA9IDE7CglfX2Fz
bV9fKCJmbmluaXRcblx0IgoJCSJmbGRsICUxXG5cdCIKCQkiZmRpdmwgJTJcblx0IgoJCSJmbXVs
bCAlMlxuXHQiCgkJImZsZGwgJTFcblx0IgoJCSJmc3VicCAlJXN0LCUlc3QoMSlcblx0IgoJCSJm
aXN0cGwgJTBcblx0IgoJCSJmd2FpdFxuXHQiCgkJImZuaW5pdCIKCQk6ICI9bSIgKComYm9vdF9j
cHVfZGF0YS5mZGl2X2J1ZykKCQk6ICJtIiAoKiZ4KSwgIm0iICgqJnkpKTsKCWlmICghYm9vdF9j
cHVfZGF0YS5mZGl2X2J1ZykKCQlwcmludGsoIk9LLCBGUFUgdXNpbmcgZXhjZXB0aW9uIDE2IGVy
cm9yIHJlcG9ydGluZy5cbiIpOwoJZWxzZQoJCXByaW50aygiSG1tLCBGUFUgdXNpbmcgZXhjZXB0
aW9uIDE2IGVycm9yIHJlcG9ydGluZyB3aXRoIEZESVYgYnVnLlxuIik7Cn0KIAogCmV4dGVybiB2
b2lkIHZpZGUodm9pZCk7Cl9fYXNtX18oIi5hbGlnbiA0XG52aWRlOiByZXQiKTsKIHN0YXRpYyB2
b2lkIGNoZWNrX2FtZF9rNih2b2lkKSAgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLnRl
eHQuaW5pdCIpKSkgOyAgc3RhdGljIHZvaWQgY2hlY2tfYW1kX2s2KHZvaWQpICAKewoJaWYgKGJv
b3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSAyICAmJgoJICAgIGJvb3RfY3B1X2RhdGEueDg2X21v
ZGVsID09IDYgJiYKCSAgICBib290X2NwdV9kYXRhLng4Nl9tYXNrID09IDEpCgl7CgkJaW50IG47
CgkJdm9pZCAoKmZfdmlkZSkodm9pZCk7CgkJdW5zaWduZWQgbG9uZyBkLCBkMjsKCQlwcmludGso
Ijw2PiIgICJBTUQgSzYgc3RlcHBpbmcgQiBkZXRlY3RlZCAtICIpOwoJCSAKCQluID0gMTAwMDAw
MCA7CgkJZl92aWRlID0gdmlkZTsKCQlfX2FzbV9fICgicmR0c2MiIDogIj1hIiAoZCkpOwoJCXdo
aWxlIChuLS0pIAoJCQlmX3ZpZGUoKTsKCQlfX2FzbV9fICgicmR0c2MiIDogIj1hIiAoZDIpKTsK
CQlkID0gZDItZDsKCQkgCgkJcHJpbnRrKCI8Nj4iICAiSzYgQlVHICVsZCAlZCAoUmVwb3J0IHRo
ZXNlIGlmIHRlc3QgcmVwb3J0IGlzIGluY29ycmVjdClcbiIsIGQsIDIwKiAxMDAwMDAwICk7CgkJ
cHJpbnRrKCI8Nj4iICAiQU1EIEs2IHN0ZXBwaW5nIEIgZGV0ZWN0ZWQgLSAiKTsKCQkgCgkJaWYg
KGQgPiAyMCogMTAwMDAwMCApIAoJCQlwcmludGsoInN5c3RlbSBzdGFiaWxpdHkgbWF5IGJlIGlt
cGFpcmVkIHdoZW4gbW9yZSB0aGFuIDMyIE1CIGFyZSB1c2VkLlxuIik7CgkJZWxzZSAKCQkJcHJp
bnRrKCJwcm9iYWJseSBPSyAoYWZ0ZXIgQjk3MzB4eHh4KS5cbiIpOwoJCXByaW50aygiPDY+IiAg
IlBsZWFzZSBzZWUgaHR0cDovL3d3dy5teWdhbGUuY29tL35wb3Vsb3QvazZidWcuaHRtbFxuIik7
Cgl9Cn0KIAogc3RhdGljIHZvaWQgY2hlY2tfY29uZmlnKHZvaWQpICBfX2F0dHJpYnV0ZV9fICgo
X19zZWN0aW9uX18gKCIudGV4dC5pbml0IikpKSA7ICBzdGF0aWMgdm9pZCBjaGVja19jb25maWco
dm9pZCkgIAp7CiAKCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAzKQoJCXBhbmljKCJLZXJuZWwg
cmVxdWlyZXMgaTQ4NisgZm9yICdpbnZscGcnIGFuZCBvdGhlciBmZWF0dXJlcyIpOwogCiAKfQog
c3RhdGljIHZvaWQgY2hlY2tfYnVncyh2b2lkKSAgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9f
ICgiLnRleHQuaW5pdCIpKSkgOyAgc3RhdGljIHZvaWQgY2hlY2tfYnVncyh2b2lkKSAgCnsKCWlk
ZW50aWZ5X2NwdSgmYm9vdF9jcHVfZGF0YSk7CglwcmludGsoIkNQVTogIik7CglwcmludF9jcHVf
aW5mbygmYm9vdF9jcHVfZGF0YSk7CgljaGVja19jb25maWcoKTsKCWNoZWNrX2ZwdSgpOwoJY2hl
Y2tfYW1kX2s2KCk7CiAKfQojIDQgIi9ob21lL2p3NS90bXAvbGludXgyMi9pbmNsdWRlL2FzbS9i
dWdzLmgiIDIKIyAyNyAiaW5pdC9tYWluLmMiIDIKIyAxICIvaG9tZS9qdzUvdG1wL2xpbnV4MjIv
aW5jbHVkZS9saW51eC9wY2kuaCIgMQogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCnN0cnVjdCBwY2lfZGV2IHsKCXN0cnVjdCBwY2lfYnVzCSpidXM7CQkgCglzdHJ1Y3QgcGNp
X2Rldgkqc2libGluZzsJIAoJc3RydWN0IHBjaV9kZXYJKm5leHQ7CQkgCgl2b2lkCQkqc3lzZGF0
YTsJIAoJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jZW50OwkgCgl1bnNpZ25lZCBpbnQJZGV2
Zm47CQkgCgl1bnNpZ25lZCBzaG9ydAl2ZW5kb3I7Cgl1bnNpZ25lZCBzaG9ydAlkZXZpY2U7Cgl1
bnNpZ25lZCBpbnQJY2xhc3M7CQkgCgl1bnNpZ25lZCBpbnQJaGRyX3R5cGU7CSAKCXVuc2lnbmVk
IGludAltYXN0ZXIgOiAxOwkgCgkgCgl1bnNpZ25lZCBpbnQJaXJxOwkJIAoJIAoJdW5zaWduZWQg
bG9uZwliYXNlX2FkZHJlc3NbNl07Cgl1bnNpZ25lZCBsb25nCXJvbV9hZGRyZXNzOwp9OwpzdHJ1
Y3QgcGNpX2J1cyB7CglzdHJ1Y3QgcGNpX2J1cwkqcGFyZW50OwkgCglzdHJ1Y3QgcGNpX2J1cwkq
Y2hpbGRyZW47CSAKCXN0cnVjdCBwY2lfYnVzCSpuZXh0OwkJIAoJc3RydWN0IHBjaV9kZXYJKnNl
bGY7CQkgCglzdHJ1Y3QgcGNpX2RldgkqZGV2aWNlczsJIAoJdm9pZAkJKnN5c2RhdGE7CSAKCXN0
cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY2RpcjsJIAoJdW5zaWduZWQgY2hhcgludW1iZXI7CQkg
Cgl1bnNpZ25lZCBjaGFyCXByaW1hcnk7CSAKCXVuc2lnbmVkIGNoYXIJc2Vjb25kYXJ5OwkgCgl1
bnNpZ25lZCBjaGFyCXN1Ym9yZGluYXRlOwkgCn07CmV4dGVybiBzdHJ1Y3QgcGNpX2J1cwlwY2lf
cm9vdDsJIApleHRlcm4gc3RydWN0IHBjaV9kZXYJKnBjaV9kZXZpY2VzOwkgCiAKIAppbnQgcGNp
Ymlvc19wcmVzZW50ICh2b2lkKTsKdm9pZCBwY2liaW9zX2luaXQodm9pZCk7CnZvaWQgcGNpYmlv
c19maXh1cCh2b2lkKTsKdm9pZCBwY2liaW9zX2ZpeHVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqKTsK
Y2hhciAqcGNpYmlvc19zZXR1cCAoY2hhciAqc3RyKTsKaW50IHBjaWJpb3NfcmVhZF9jb25maWdf
Ynl0ZSAodW5zaWduZWQgY2hhciBidXMsIHVuc2lnbmVkIGNoYXIgZGV2X2ZuLAoJCQkgICAgICB1
bnNpZ25lZCBjaGFyIHdoZXJlLCB1bnNpZ25lZCBjaGFyICp2YWwpOwppbnQgcGNpYmlvc19yZWFk
X2NvbmZpZ193b3JkICh1bnNpZ25lZCBjaGFyIGJ1cywgdW5zaWduZWQgY2hhciBkZXZfZm4sCgkJ
CSAgICAgIHVuc2lnbmVkIGNoYXIgd2hlcmUsIHVuc2lnbmVkIHNob3J0ICp2YWwpOwppbnQgcGNp
Ymlvc19yZWFkX2NvbmZpZ19kd29yZCAodW5zaWduZWQgY2hhciBidXMsIHVuc2lnbmVkIGNoYXIg
ZGV2X2ZuLAoJCQkgICAgICAgdW5zaWduZWQgY2hhciB3aGVyZSwgdW5zaWduZWQgaW50ICp2YWwp
OwppbnQgcGNpYmlvc193cml0ZV9jb25maWdfYnl0ZSAodW5zaWduZWQgY2hhciBidXMsIHVuc2ln
bmVkIGNoYXIgZGV2X2ZuLAoJCQkgICAgICAgdW5zaWduZWQgY2hhciB3aGVyZSwgdW5zaWduZWQg
Y2hhciB2YWwpOwppbnQgcGNpYmlvc193cml0ZV9jb25maWdfd29yZCAodW5zaWduZWQgY2hhciBi
dXMsIHVuc2lnbmVkIGNoYXIgZGV2X2ZuLAoJCQkgICAgICAgdW5zaWduZWQgY2hhciB3aGVyZSwg
dW5zaWduZWQgc2hvcnQgdmFsKTsKaW50IHBjaWJpb3Nfd3JpdGVfY29uZmlnX2R3b3JkICh1bnNp
Z25lZCBjaGFyIGJ1cywgdW5zaWduZWQgY2hhciBkZXZfZm4sCgkJCQl1bnNpZ25lZCBjaGFyIHdo
ZXJlLCB1bnNpZ25lZCBpbnQgdmFsKTsKIAppbnQgcGNpYmlvc19maW5kX2NsYXNzICh1bnNpZ25l
ZCBpbnQgY2xhc3NfY29kZSwgdW5zaWduZWQgc2hvcnQgaW5kZXgsIHVuc2lnbmVkIGNoYXIgKmJ1
cywgdW5zaWduZWQgY2hhciAqZGV2X2ZuKTsKaW50IHBjaWJpb3NfZmluZF9kZXZpY2UgKHVuc2ln
bmVkIHNob3J0IHZlbmRvciwgdW5zaWduZWQgc2hvcnQgZGV2X2lkLAoJCQkgdW5zaWduZWQgc2hv
cnQgaW5kZXgsIHVuc2lnbmVkIGNoYXIgKmJ1cywKCQkJIHVuc2lnbmVkIGNoYXIgKmRldl9mbik7
CiAKdm9pZCBwY2lfaW5pdCh2b2lkKTsKdm9pZCBwY2lfc2V0dXAoY2hhciAqc3RyLCBpbnQgKmlu
dHMpOwp2b2lkIHBjaV9xdWlya3NfaW5pdCh2b2lkKTsKdW5zaWduZWQgaW50IHBjaV9zY2FuX2J1
cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKc3RydWN0IHBjaV9idXMgKnBjaV9zY2FuX3BlZXJfYnJp
ZGdlKGludCBidXMpOwp2b2lkIHBjaV9wcm9jX2luaXQodm9pZCk7CnZvaWQgcHJvY19vbGRfcGNp
X2luaXQodm9pZCk7CmludCBnZXRfcGNpX2xpc3QoY2hhciAqYnVmKTsKaW50IHBjaV9wcm9jX2F0
dGFjaF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CmludCBwY2lfcHJvY19kZXRhY2hfZGV2
aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwpzdHJ1Y3QgcGNpX2RldiAqcGNpX2ZpbmRfZGV2aWNl
ICh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBpbnQgZGV2aWNlLCBzdHJ1Y3QgcGNpX2Rl
diAqZnJvbSk7CnN0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9jbGFzcyAodW5zaWduZWQgaW50IGNs
YXNzLCBzdHJ1Y3QgcGNpX2RldiAqZnJvbSk7CnN0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9zbG90
ICh1bnNpZ25lZCBpbnQgYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4pOwppbnQgcGNpX3JlYWRfY29u
ZmlnX2J5dGUoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggd2hlcmUsIHU4ICp2YWwpOwppbnQgcGNp
X3JlYWRfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggd2hlcmUsIHUxNiAqdmFs
KTsKaW50IHBjaV9yZWFkX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCB3aGVy
ZSwgdTMyICp2YWwpOwppbnQgcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHN0cnVjdCBwY2lfZGV2ICpk
ZXYsIHU4IHdoZXJlLCB1OCB2YWwpOwppbnQgcGNpX3dyaXRlX2NvbmZpZ193b3JkKHN0cnVjdCBw
Y2lfZGV2ICpkZXYsIHU4IHdoZXJlLCB1MTYgdmFsKTsKaW50IHBjaV93cml0ZV9jb25maWdfZHdv
cmQoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggd2hlcmUsIHUzMiB2YWwpOwp2b2lkIHBjaV9zZXRf
bWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwojIDEzNTYgIi9ob21lL2p3NS90bXAvbGludXgy
Mi9pbmNsdWRlL2xpbnV4L3BjaS5oIgojIDMwICJpbml0L21haW4uYyIgMgogCmV4dGVybiBjaGFy
IF9zdGV4dCwgX2V0ZXh0OwpleHRlcm4gY2hhciAqbGludXhfYmFubmVyOwpleHRlcm4gaW50IGNv
bnNvbGVfbG9nbGV2ZWw7CnN0YXRpYyBpbnQgaW5pdCh2b2lkICopOwpleHRlcm4gaW50IGJkZmx1
c2godm9pZCAqKTsKZXh0ZXJuIGludCBrdXBkYXRlKHZvaWQgKik7CmV4dGVybiBpbnQga3N3YXBk
KHZvaWQgKik7CmV4dGVybiBpbnQga3Bpb2Qodm9pZCAqKTsKZXh0ZXJuIHZvaWQga3N3YXBkX3Nl
dHVwKHZvaWQpOwpleHRlcm4gdm9pZCBpbml0X0lSUSh2b2lkKTsKZXh0ZXJuIHZvaWQgaW5pdF9t
b2R1bGVzKHZvaWQpOwpleHRlcm4gbG9uZyBjb25zb2xlX2luaXQobG9uZywgbG9uZyk7CmV4dGVy
biB2b2lkIHNvY2tfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgdWlkY2FjaGVfaW5pdCh2b2lkKTsK
ZXh0ZXJuIHZvaWQgbWNhX2luaXQodm9pZCk7CmV4dGVybiB2b2lkIHNidXNfaW5pdCh2b2lkKTsK
ZXh0ZXJuIHZvaWQgcHBjX2luaXQodm9pZCk7CmV4dGVybiB2b2lkIHN5c2N0bF9pbml0KHZvaWQp
OwpleHRlcm4gdm9pZCBmaWxlc2NhY2hlX2luaXQodm9pZCk7CmV4dGVybiB2b2lkIHNpZ25hbHNf
aW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgZGV2aWNlX3NldHVwKHZvaWQpOwpleHRlcm4gdm9pZCBi
aW5mbXRfc2V0dXAodm9pZCk7CmV4dGVybiB2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKTsKZXh0ZXJu
IHZvaWQgZmlsZXN5c3RlbV9zZXR1cCh2b2lkKTsKZXh0ZXJuIHZvaWQgc21wX3NldHVwKGNoYXIg
KnN0ciwgaW50ICppbnRzKTsKZXh0ZXJuIHZvaWQgaW9hcGljX3BpcnFfc2V0dXAoY2hhciAqc3Ry
LCBpbnQgKmludHMpOwpleHRlcm4gdm9pZCBpb2FwaWNfc2V0dXAoY2hhciAqc3RyLCBpbnQgKmlu
dHMpOwpleHRlcm4gdm9pZCBub19zY3JvbGwoY2hhciAqc3RyLCBpbnQgKmludHMpOwpleHRlcm4g
dm9pZCBrYmRfcmVzZXRfc2V0dXAoY2hhciAqc3RyLCBpbnQgKmludHMpOwpleHRlcm4gdm9pZCBw
YW5pY19zZXR1cChjaGFyICpzdHIsIGludCAqaW50cyk7CmV4dGVybiB2b2lkIGJtb3VzZV9zZXR1
cChjaGFyICpzdHIsIGludCAqaW50cyk7CmV4dGVybiB2b2lkIG1zbW91c2Vfc2V0dXAoY2hhciAq
c3RyLCBpbnQgKmludHMpOwpleHRlcm4gdm9pZCBjb25zb2xlX3NldHVwKGNoYXIgKnN0ciwgaW50
ICppbnRzKTsKZXh0ZXJuIHZvaWQgZXRoX3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKTsKZXh0
ZXJuIHZvaWQgaWRlX3NldHVwKGNoYXIgKik7CmV4dGVybiB2b2lkIGZsb3BweV9zZXR1cChjaGFy
ICpzdHIsIGludCAqaW50cyk7CmV4dGVybiB2b2lkIHN0X3NldHVwKGNoYXIgKnN0ciwgaW50ICpp
bnRzKTsKZXh0ZXJuIHZvaWQgc3QweF9zZXR1cChjaGFyICpzdHIsIGludCAqaW50cyk7CmV4dGVy
biB2b2lkIGFkdmFuc3lzX3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKTsKZXh0ZXJuIHZvaWQg
dG1jOHh4X3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKTsKZXh0ZXJuIHZvaWQgdDEyOF9zZXR1
cChjaGFyICpzdHIsIGludCAqaW50cyk7CmV4dGVybiB2b2lkIHBhczE2X3NldHVwKGNoYXIgKnN0
ciwgaW50ICppbnRzKTsKZXh0ZXJuIHZvaWQgZ2VuZXJpY19OQ1I1MzgwX3NldHVwKGNoYXIgKnN0
ciwgaW50ICppbnRyKTsKZXh0ZXJuIHZvaWQgZ2VuZXJpY19OQ1I1M0M0MDBfc2V0dXAoY2hhciAq
c3RyLCBpbnQgKmludHIpOwpleHRlcm4gdm9pZCBnZW5lcmljX05DUjUzQzQwMEFfc2V0dXAoY2hh
ciAqc3RyLCBpbnQgKmludHIpOwpleHRlcm4gdm9pZCBnZW5lcmljX0RUQzMxODFFX3NldHVwKGNo
YXIgKnN0ciwgaW50ICppbnRyKTsKZXh0ZXJuIHZvaWQgYWhhMTUyeF9zZXR1cChjaGFyICpzdHIs
IGludCAqaW50cyk7CmV4dGVybiB2b2lkIGFoYTE1NDJfc2V0dXAoY2hhciAqc3RyLCBpbnQgKmlu
dHMpOwpleHRlcm4gdm9pZCBnZHRoX3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKTsKZXh0ZXJu
IHZvaWQgYWljN3h4eF9zZXR1cChjaGFyICpzdHIsIGludCAqaW50cyk7CmV4dGVybiB2b2lkIEFN
NTNDOTc0X3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKTsKZXh0ZXJuIHZvaWQgQnVzTG9naWNf
U2V0dXAoY2hhciAqc3RyLCBpbnQgKmludHMpOwpleHRlcm4gdm9pZCBuY3I1M2M4eHhfc2V0dXAo
Y2hhciAqc3RyLCBpbnQgKmludHMpOwpleHRlcm4gdm9pZCBzeW01M2M4eHhfc2V0dXAoY2hhciAq
c3RyLCBpbnQgKmludHMpOwpleHRlcm4gdm9pZCBlYXRhMnhfc2V0dXAoY2hhciAqc3RyLCBpbnQg
KmludHMpOwpleHRlcm4gdm9pZCB1MTRfMzRmX3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKTsK
ZXh0ZXJuIHZvaWQgZmRvbWFpbl9zZXR1cChjaGFyICpzdHIsIGludCAqaW50cyk7CmV4dGVybiB2
b2lkIGlibW1jYV9zY3NpX3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKTsKZXh0ZXJuIHZvaWQg
ZmRfbWNzX3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKTsKZXh0ZXJuIHZvaWQgaW4yMDAwX3Nl
dHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKTsKZXh0ZXJuIHZvaWQgTkNSNTNjNDA2YV9zZXR1cChj
aGFyICpzdHIsIGludCAqaW50cyk7CmV4dGVybiB2b2lkIHN5bTUzYzQxNl9zZXR1cChjaGFyICpz
dHIsIGludCAqaW50cyk7CmV4dGVybiB2b2lkIHdkNzAwMF9zZXR1cChjaGFyICpzdHIsIGludCAq
aW50cyk7CmV4dGVybiB2b2lkIGRjMzkwX3NldHVwKGNoYXIqIHN0ciwgaW50ICppbnRzKTsKZXh0
ZXJuIHZvaWQgc2NzaV9sdW5zX3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKTsKZXh0ZXJuIHZv
aWQgc2NzaV9sb2dnaW5nX3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKTsKZXh0ZXJuIHZvaWQg
c291bmRfc2V0dXAoY2hhciAqc3RyLCBpbnQgKmludHMpOwpleHRlcm4gdm9pZCByZWJvb3Rfc2V0
dXAoY2hhciAqc3RyLCBpbnQgKmludHMpOwpleHRlcm4gdm9pZCB2aWRlb19zZXR1cChjaGFyICpz
dHIsIGludCAqaW50cyk7CiMgMjcwICJpbml0L21haW4uYyIKZXh0ZXJuIHZvaWQgc3RyYW1fc3dh
cF9zZXR1cCAoY2hhciAqc3RyLCBpbnQgKmludHMpOwpleHRlcm4gdm9pZCB3ZDMzYzkzX3NldHVw
IChjaGFyICpzdHIsIGludCAqaW50cyk7CmV4dGVybiB2b2lkIGd2cDExX3NldHVwIChjaGFyICpz
dHIsIGludCAqaW50cyk7CmV4dGVybiB2b2lkIG5jcjUzYzd4eF9zZXR1cCAoY2hhciAqc3RyLCBp
bnQgKmludHMpOwpleHRlcm4gdm9pZCBzaW03MTBfc2V0dXAgKGNoYXIgKnN0ciwgaW50ICppbnRz
KTsKZXh0ZXJuIHZvaWQgaXBjX2luaXQodm9pZCk7CiAKZXh0ZXJuIHZvaWQgdGltZV9pbml0KHZv
aWQpOwpzdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1vcnlfc3RhcnQgPSAwOwpzdGF0aWMgdW5zaWdu
ZWQgbG9uZyBtZW1vcnlfZW5kID0gMDsKaW50IHJvd3MsIGNvbHM7CiMgMzk4ICJpbml0L21haW4u
YyIKaW50IHJvb3RfbW91bnRmbGFncyA9IDEgOwpjaGFyICpleGVjdXRlX2NvbW1hbmQgPSAoKHZv
aWQgKikwKSA7CnN0YXRpYyBjaGFyICogYXJndl9pbml0WzggKzJdID0geyAiaW5pdCIsICgodm9p
ZCAqKTApICwgfTsKc3RhdGljIGNoYXIgKiBlbnZwX2luaXRbOCArMl0gPSB7ICJIT01FPS8iLCAi
VEVSTT1saW51eCIsICgodm9pZCAqKTApICwgfTsKY2hhciAqZ2V0X29wdGlvbnMoY2hhciAqc3Ry
LCBpbnQgKmludHMpCnsKCWNoYXIgKmN1ciA9IHN0cjsKCWludCBpPTE7Cgl3aGlsZSAoY3VyICYm
ICgqY3VyPT0nLScgfHwgKCgoX2N0eXBlWyhpbnQpKHVuc2lnbmVkIGNoYXIpKCAgKmN1ciAgKV0p
ICYoMHgwNCApKSAhPSAwKSApICYmIGkgPD0gMTApIHsKCQlpbnRzW2krK10gPSBzaW1wbGVfc3Ry
dG9sKGN1ciwoKHZvaWQgKikwKSAsMCk7CgkJaWYgKChjdXIgPSBzdHJjaHIoY3VyLCcsJykpICE9
ICgodm9pZCAqKTApICkKCQkJY3VyKys7Cgl9CglpbnRzWzBdID0gaS0xOwoJcmV0dXJuKGN1cik7
Cn0Kc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLnRleHQuaW5pdCIp
KSkgIHByb2ZpbGVfc2V0dXAoY2hhciAqc3RyLCBpbnQgKmludHMpCnsKCWlmIChpbnRzWzBdID4g
MCkKCQlwcm9mX3NoaWZ0ID0gKHVuc2lnbmVkIGxvbmcpIGludHNbMV07CgllbHNlCgkJcHJvZl9z
aGlmdCA9IDI7Cn0Kc3RhdGljIHN0cnVjdCBkZXZfbmFtZV9zdHJ1Y3QgewoJY29uc3QgY2hhciAq
bmFtZTsKCWNvbnN0IGludCBudW07Cn0gcm9vdF9kZXZfbmFtZXNbXSBfX2F0dHJpYnV0ZV9fICgo
X19zZWN0aW9uX18gKCIuZGF0YS5pbml0IikpKSAgPSB7Cgl7ICJoZGEiLCAgICAgMHgwMzAwIH0s
Cgl7ICJoZGIiLCAgICAgMHgwMzQwIH0sCgl7ICJoZGMiLCAgICAgMHgxNjAwIH0sCgl7ICJoZGQi
LCAgICAgMHgxNjQwIH0sCgl7ICJoZGUiLCAgICAgMHgyMTAwIH0sCgl7ICJoZGYiLCAgICAgMHgy
MTQwIH0sCgl7ICJoZGciLCAgICAgMHgyMjAwIH0sCgl7ICJoZGgiLCAgICAgMHgyMjQwIH0sCgl7
ICJoZGkiLCAgICAgMHgzODAwIH0sCgl7ICJoZGoiLCAgICAgMHgzODQwIH0sCgl7ICJoZGsiLCAg
ICAgMHgzOTAwIH0sCgl7ICJoZGwiLCAgICAgMHgzOTQwIH0sCgl7ICJzZGEiLCAgICAgMHgwODAw
IH0sCgl7ICJzZGIiLCAgICAgMHgwODEwIH0sCgl7ICJzZGMiLCAgICAgMHgwODIwIH0sCgl7ICJz
ZGQiLCAgICAgMHgwODMwIH0sCgl7ICJzZGUiLCAgICAgMHgwODQwIH0sCgl7ICJzZGYiLCAgICAg
MHgwODUwIH0sCgl7ICJzZGciLCAgICAgMHgwODYwIH0sCgl7ICJzZGgiLCAgICAgMHgwODcwIH0s
Cgl7ICJzZGkiLCAgICAgMHgwODgwIH0sCgl7ICJzZGoiLCAgICAgMHgwODkwIH0sCgl7ICJzZGsi
LCAgICAgMHgwOGEwIH0sCgl7ICJzZGwiLCAgICAgMHgwOGIwIH0sCgl7ICJzZG0iLCAgICAgMHgw
OGMwIH0sCgl7ICJzZG4iLCAgICAgMHgwOGQwIH0sCgl7ICJzZG8iLCAgICAgMHgwOGUwIH0sCgl7
ICJzZHAiLCAgICAgMHgwOGYwIH0sCiMgNDg4ICJpbml0L21haW4uYyIKCXsgImZkIiwgICAgICAw
eDAyMDAgfSwKIyA1NjIgImluaXQvbWFpbi5jIgojIDU3MiAiaW5pdC9tYWluLmMiCgl7ICgodm9p
ZCAqKTApICwgMCB9Cn07CmtkZXZfdCBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIudGV4
dC5pbml0IikpKSAgbmFtZV90b19rZGV2X3QoY2hhciAqbGluZSkKewoJaW50IGJhc2UgPSAwOwoJ
aWYgKHN0cm5jbXAobGluZSwiL2Rldi8iLDUpID09IDApIHsKCQlzdHJ1Y3QgZGV2X25hbWVfc3Ry
dWN0ICpkZXYgPSByb290X2Rldl9uYW1lczsKCQlsaW5lICs9IDU7CgkJZG8gewoJCQlpbnQgbGVu
ID0gc3RybGVuKGRldi0+bmFtZSk7CgkJCWlmIChzdHJuY21wKGxpbmUsZGV2LT5uYW1lLGxlbikg
PT0gMCkgewoJCQkJbGluZSArPSBsZW47CgkJCQliYXNlID0gZGV2LT5udW07CgkJCQlicmVhazsK
CQkJfQoJCQlkZXYrKzsKCQl9IHdoaWxlIChkZXYtPm5hbWUpOwoJfQoJcmV0dXJuIHRvX2tkZXZf
dChiYXNlICsgc2ltcGxlX3N0cnRvdWwobGluZSwoKHZvaWQgKikwKSAsYmFzZT8xMDoxNikpOwp9
CnN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi50ZXh0LmluaXQiKSkp
ICByb290X2Rldl9zZXR1cChjaGFyICpsaW5lLCBpbnQgKm51bSkKewoJUk9PVF9ERVYgPSBuYW1l
X3RvX2tkZXZfdChsaW5lKTsKfQogCnN0cnVjdCBrZXJuZWxfcGFyYW0gewoJY29uc3QgY2hhciAq
c3RyOwoJdm9pZCAoKnNldHVwX2Z1bmMpKGNoYXIgKiwgaW50ICopOwp9OwpzdGF0aWMgc3RydWN0
IGtlcm5lbF9wYXJhbSBjb29rZWRfcGFyYW1zW10gX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9f
ICgiLmRhdGEuaW5pdCIpKSkgID0gewogCgl7ICJyZXNlcnZlPSIsIHJlc2VydmVfc2V0dXAgfSwK
CXsgInByb2ZpbGU9IiwgcHJvZmlsZV9zZXR1cCB9LAojIDY0MSAiaW5pdC9tYWluLmMiCgl7ICJw
YW5pYz0iLCBwYW5pY19zZXR1cCB9LAoJeyAiY29uc29sZT0iLCBjb25zb2xlX3NldHVwIH0sCgl7
ICJuby1zY3JvbGwiLCBub19zY3JvbGwgfSwKCXsgImtiZC1yZXNldCIsIGtiZF9yZXNldF9zZXR1
cCB9LAoJeyAiZXRoZXI9IiwgZXRoX3NldHVwIH0sCgl7ICJtYXhfc2NzaV9sdW5zPSIsIHNjc2lf
bHVuc19zZXR1cCB9LAoJeyAic2NzaV9sb2dnaW5nPSIsIHNjc2lfbG9nZ2luZ19zZXR1cCB9LAoJ
eyAibmNyNTNjOHh4PSIsIG5jcjUzYzh4eF9zZXR1cH0sCgl7ICJmbG9wcHk9IiwgZmxvcHB5X3Nl
dHVwIH0sCgl7IDAsIDAgfQp9OwpzdGF0aWMgc3RydWN0IGtlcm5lbF9wYXJhbSByYXdfcGFyYW1z
W10gX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmRhdGEuaW5pdCIpKSkgID0gewoJeyAi
cm9vdD0iLCByb290X2Rldl9zZXR1cCB9LAoJeyAicGNpPSIsIHBjaV9zZXR1cCB9LAoJeyAwLCAw
IH0KfTsKIyAxMDE3ICJpbml0L21haW4uYyIKc3RhdGljIGludCBfX2F0dHJpYnV0ZV9fICgoX19z
ZWN0aW9uX18gKCIudGV4dC5pbml0IikpKSAgY2hlY2tzZXR1cChjaGFyICpsaW5lKQp7CglpbnQg
aSwgaW50c1sxMV07CgkgCglpZiAoIXN0cm5jbXAobGluZSwiaWRlIiwzKSB8fCAoIXN0cm5jbXAo
bGluZSwiaGQiLDIpICYmIGxpbmVbMl0gIT0gJz0nKSkgewoJCWlkZV9zZXR1cChsaW5lKTsKCQly
ZXR1cm4gMTsKCX0KCWZvciAoaT0wOyByYXdfcGFyYW1zW2ldLnN0cjsgaSsrKSB7CgkJaW50IG4g
PSBzdHJsZW4ocmF3X3BhcmFtc1tpXS5zdHIpOwoJCWlmICghc3RybmNtcChsaW5lLHJhd19wYXJh
bXNbaV0uc3RyLG4pKSB7CgkJCXJhd19wYXJhbXNbaV0uc2V0dXBfZnVuYyhsaW5lK24sICgodm9p
ZCAqKTApICk7CgkJCXJldHVybiAxOwoJCX0KCX0KCWZvciAoaT0wOyBjb29rZWRfcGFyYW1zW2ld
LnN0cjsgaSsrKSB7CgkJaW50IG4gPSBzdHJsZW4oY29va2VkX3BhcmFtc1tpXS5zdHIpOwoJCWlm
ICghc3RybmNtcChsaW5lLGNvb2tlZF9wYXJhbXNbaV0uc3RyLG4pKSB7CgkJCWNvb2tlZF9wYXJh
bXNbaV0uc2V0dXBfZnVuYyhnZXRfb3B0aW9ucyhsaW5lK24sIGludHMpLCBpbnRzKTsKCQkJcmV0
dXJuIDE7CgkJfQoJfQoJcmV0dXJuIDA7Cn0KIAp1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9zZWMg
PSAoMTw8MTIpOwogCnZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLnRleHQuaW5p
dCIpKSkgIGNhbGlicmF0ZV9kZWxheSh2b2lkKQp7Cgl1bnNpZ25lZCBsb25nIHRpY2tzLCBsb29w
Yml0OwoJaW50IGxwc19wcmVjaXNpb24gPSA4IDsKCWxvb3BzX3Blcl9zZWMgPSAoMTw8MTIpOwoJ
cHJpbnRrKCJDYWxpYnJhdGluZyBkZWxheSBsb29wLi4uICIpOwoJd2hpbGUgKGxvb3BzX3Blcl9z
ZWMgPDw9IDEpIHsKCQkgCgkJdGlja3MgPSBqaWZmaWVzOwoJCXdoaWxlICh0aWNrcyA9PSBqaWZm
aWVzKQoJCQkgOwoJCSAKCQl0aWNrcyA9IGppZmZpZXM7CgkJX19kZWxheShsb29wc19wZXJfc2Vj
KTsKCQl0aWNrcyA9IGppZmZpZXMgLSB0aWNrczsKCQlpZiAodGlja3MpCgkJCWJyZWFrOwoJfQog
Cglsb29wc19wZXJfc2VjID4+PSAxOwoJbG9vcGJpdCA9IGxvb3BzX3Blcl9zZWM7Cgl3aGlsZSAo
IGxwc19wcmVjaXNpb24tLSAmJiAobG9vcGJpdCA+Pj0gMSkgKSB7CgkJbG9vcHNfcGVyX3NlYyB8
PSBsb29wYml0OwoJCXRpY2tzID0gamlmZmllczsKCQl3aGlsZSAodGlja3MgPT0gamlmZmllcyk7
CgkJdGlja3MgPSBqaWZmaWVzOwoJCV9fZGVsYXkobG9vcHNfcGVyX3NlYyk7CgkJaWYgKGppZmZp
ZXMgIT0gdGlja3MpCSAKCQkJbG9vcHNfcGVyX3NlYyAmPSB+bG9vcGJpdDsKCX0KIAkKCWxvb3Bz
X3Blcl9zZWMgKj0gMTAwIDsKIAkKCXByaW50aygiJWx1LiUwMmx1IEJvZ29NSVBTXG4iLAoJCShs
b29wc19wZXJfc2VjKzI1MDApLzUwMDAwMCwKCQkoKGxvb3BzX3Blcl9zZWMrMjUwMCkvNTAwMCkg
JSAxMDApOwp9CiAKc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLnRl
eHQuaW5pdCIpKSkgIHBhcnNlX29wdGlvbnMoY2hhciAqbGluZSkKewoJY2hhciAqbmV4dDsKCWlu
dCBhcmdzLCBlbnZzOwoJaWYgKCEqbGluZSkKCQlyZXR1cm47CglhcmdzID0gMDsKCWVudnMgPSAx
OwkgCgluZXh0ID0gbGluZTsKCXdoaWxlICgobGluZSA9IG5leHQpICE9ICgodm9pZCAqKTApICkg
ewoJCWlmICgobmV4dCA9IHN0cmNocihsaW5lLCcgJykpICE9ICgodm9pZCAqKTApICkKCQkJKm5l
eHQrKyA9IDA7CgkJIAoJCWlmICghc3RyY21wKGxpbmUsInJvIikpIHsKCQkJcm9vdF9tb3VudGZs
YWdzIHw9IDEgOwoJCQljb250aW51ZTsKCQl9CgkJaWYgKCFzdHJjbXAobGluZSwicnciKSkgewoJ
CQlyb290X21vdW50ZmxhZ3MgJj0gfjEgOwoJCQljb250aW51ZTsKCQl9CgkJaWYgKCFzdHJjbXAo
bGluZSwiZGVidWciKSkgewoJCQljb25zb2xlX2xvZ2xldmVsID0gMTA7CgkJCWNvbnRpbnVlOwoJ
CX0KCQlpZiAoIXN0cm5jbXAobGluZSwiaW5pdD0iLDUpKSB7CgkJCWxpbmUgKz0gNTsKCQkJZXhl
Y3V0ZV9jb21tYW5kID0gbGluZTsKCQkJIAoJCQlhcmdzID0gMDsKCQkJY29udGludWU7CgkJfQoJ
CWlmIChjaGVja3NldHVwKGxpbmUpKQoJCQljb250aW51ZTsKCQkKCQkgCgkJaWYgKHN0cmNocihs
aW5lLCc9JykpIHsKCQkJaWYgKGVudnMgPj0gOCApCgkJCQlicmVhazsKCQkJZW52cF9pbml0Wysr
ZW52c10gPSBsaW5lOwoJCX0gZWxzZSB7CgkJCWlmIChhcmdzID49IDggKQoJCQkJYnJlYWs7CgkJ
CWFyZ3ZfaW5pdFsrK2FyZ3NdID0gbGluZTsKCQl9Cgl9Cglhcmd2X2luaXRbYXJncysxXSA9ICgo
dm9pZCAqKTApIDsKCWVudnBfaW5pdFtlbnZzKzFdID0gKCh2b2lkICopMCkgOwp9CmV4dGVybiB2
b2lkIHNldHVwX2FyY2goY2hhciAqKiwgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICop
OwogCiAKaW50IGNwdV9pZGxlKHZvaWQgKnVudXNlZCkKewoJZm9yKDs7KQoJCWlkbGUoKTsKfQoj
IDEyMDIgImluaXQvbWFpbi5jIgpleHRlcm4gdm9pZCBpbml0aWFsaXplX3NlY29uZGFyeSh2b2lk
KTsKIAogCiAgX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpICB2b2lkIF9fYXR0cmlidXRlX18g
KChfX3NlY3Rpb25fXyAoIi50ZXh0LmluaXQiKSkpICBzdGFydF9rZXJuZWwodm9pZCkKewoJY2hh
ciAqIGNvbW1hbmRfbGluZTsKIAoJcHJpbnRrKGxpbnV4X2Jhbm5lcik7CglzZXR1cF9hcmNoKCZj
b21tYW5kX2xpbmUsICZtZW1vcnlfc3RhcnQsICZtZW1vcnlfZW5kKTsKCW1lbW9yeV9zdGFydCA9
IHBhZ2luZ19pbml0KG1lbW9yeV9zdGFydCxtZW1vcnlfZW5kKTsKCXRyYXBfaW5pdCgpOwoJaW5p
dF9JUlEoKTsKCXNjaGVkX2luaXQoKTsKCXRpbWVfaW5pdCgpOwoJcGFyc2Vfb3B0aW9ucyhjb21t
YW5kX2xpbmUpOwoJIAoJbWVtb3J5X3N0YXJ0ID0gY29uc29sZV9pbml0KG1lbW9yeV9zdGFydCxt
ZW1vcnlfZW5kKTsKCWluaXRfbW9kdWxlcygpOwoJaWYgKHByb2Zfc2hpZnQpIHsKCQlwcm9mX2J1
ZmZlciA9ICh1bnNpZ25lZCBpbnQgKikgbWVtb3J5X3N0YXJ0OwoJCSAKCQlwcm9mX2xlbiA9ICh1
bnNpZ25lZCBsb25nKSAmX2V0ZXh0IC0gKHVuc2lnbmVkIGxvbmcpICZfc3RleHQ7CgkJcHJvZl9s
ZW4gPj49IHByb2Zfc2hpZnQ7CgkJbWVtb3J5X3N0YXJ0ICs9IHByb2ZfbGVuICogc2l6ZW9mKHVu
c2lnbmVkIGludCk7CgkJKF9fYnVpbHRpbl9jb25zdGFudF9wKCAgMCApID8gKF9fYnVpbHRpbl9j
b25zdGFudF9wKCAoICBwcm9mX2xlbiAqIHNpemVvZih1bnNpZ25lZCBpbnQpICkgKSA/IF9fY29u
c3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCggKCBwcm9mX2J1ZmZlciApICksKCAoMHgwMTAxMDEw
MVVMKih1bnNpZ25lZCBjaGFyKSggIDAgKSkgKSwoICggIHByb2ZfbGVuICogc2l6ZW9mKHVuc2ln
bmVkIGludCkgKSApKSA6IF9fY29uc3RhbnRfY19tZW1zZXQoKCAoIHByb2ZfYnVmZmVyICkgKSwo
ICgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKCAgMCApKSApLCggKCAgcHJvZl9sZW4gKiBz
aXplb2YodW5zaWduZWQgaW50KSApICkpKSAgOiAoX19idWlsdGluX2NvbnN0YW50X3AoICggIHBy
b2ZfbGVuICogc2l6ZW9mKHVuc2lnbmVkIGludCkgKSApID8gX19tZW1zZXRfZ2VuZXJpYygoICgg
KCBwcm9mX2J1ZmZlciApICkgKSwoICggKCAgMCApICkgKSwoICggKCAgcHJvZl9sZW4gKiBzaXpl
b2YodW5zaWduZWQgaW50KSApICkgKSkgIDogX19tZW1zZXRfZ2VuZXJpYygoICggcHJvZl9idWZm
ZXIgKSApLCggKCAgMCApICksKCAoICBwcm9mX2xlbiAqIHNpemVvZih1bnNpZ25lZCBpbnQpICkg
KSkpICkgOwoJfQoJbWVtb3J5X3N0YXJ0ID0ga21lbV9jYWNoZV9pbml0KG1lbW9yeV9zdGFydCwg
bWVtb3J5X2VuZCk7CglfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0aSI6IDogOiJtZW1vcnkiKSAg
IDsKCWNhbGlicmF0ZV9kZWxheSgpOwoJbWVtX2luaXQobWVtb3J5X3N0YXJ0LG1lbW9yeV9lbmQp
OwoJa21lbV9jYWNoZV9zaXplc19pbml0KCk7Cglwcm9jX3Jvb3RfaW5pdCgpOwoJdWlkY2FjaGVf
aW5pdCgpOwoJZmlsZXNjYWNoZV9pbml0KCk7CglkY2FjaGVfaW5pdCgpOwoJdm1hX2luaXQoKTsK
CWJ1ZmZlcl9pbml0KG1lbW9yeV9lbmQtbWVtb3J5X3N0YXJ0KTsKIAlwYWdlX2NhY2hlX2luaXQo
bWVtb3J5X2VuZC1tZW1vcnlfc3RhcnQpOwoJc2lnbmFsc19pbml0KCk7Cglpbm9kZV9pbml0KCk7
CglmaWxlX3RhYmxlX2luaXQoKTsKCWlwY19pbml0KCk7CgljaGVja19idWdzKCk7CglwcmludGso
IlBPU0lYIGNvbmZvcm1hbmNlIHRlc3RpbmcgYnkgVU5JRklYXG4iKTsKCSAKCWRvIHsgfSB3aGls
ZSAoMCkgOwoJa2VybmVsX3RocmVhZChpbml0LCAoKHZvaWQgKikwKSAsIDB4MDAwMDAyMDAgIHwg
MHgwMDAwMDQwMCAgfCAweDAwMDAwODAwICk7CglnZXRfY3VycmVudCgpIC0+IHRzcy5uZWVkX3Jl
c2NoZWQtPmdsb2JhbF9uZWVkX3Jlc2NoZWQgID0gMTsKIAljcHVfaWRsZSgoKHZvaWQgKikwKSAp
Owp9CiMgMTMxNyAiaW5pdC9tYWluLmMiCnN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGRfcmVhcGVy
ID0gJiAoaW5pdF90YXNrX3VuaW9uLnRhc2spIDsKIApzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9f
ICgoX19zZWN0aW9uX18gKCIudGV4dC5pbml0IikpKSAgZG9fYmFzaWNfc2V0dXAodm9pZCkKewoJ
IAoJY2hpbGRfcmVhcGVyID0gZ2V0X2N1cnJlbnQoKSA7CglzeXNjdGxfaW5pdCgpOwoJIAoJcGNp
X2luaXQoKTsKCSAgCglzb2NrX2luaXQoKTsKCSAKCWtlcm5lbF90aHJlYWQoYmRmbHVzaCwgKCh2
b2lkICopMCkgLCAweDAwMDAwMjAwICB8IDB4MDAwMDA0MDAgIHwgMHgwMDAwMDgwMCApOwoJa2Vy
bmVsX3RocmVhZChrdXBkYXRlLCAoKHZvaWQgKikwKSAsIDB4MDAwMDAyMDAgIHwgMHgwMDAwMDQw
MCAgfCAweDAwMDAwODAwICk7CgkgCglrc3dhcGRfc2V0dXAoKTsKCWtlcm5lbF90aHJlYWQoa3Bp
b2QsICgodm9pZCAqKTApICwgMHgwMDAwMDIwMCAgfCAweDAwMDAwNDAwICB8IDB4MDAwMDA4MDAg
KTsKCWtlcm5lbF90aHJlYWQoa3N3YXBkLCAoKHZvaWQgKikwKSAsIDB4MDAwMDAyMDAgIHwgMHgw
MDAwMDQwMCAgfCAweDAwMDAwODAwICk7CgkgCglkZXZpY2Vfc2V0dXAoKTsKCSAKCWJpbmZtdF9z
ZXR1cCgpOwoJIAoJZmlsZXN5c3RlbV9zZXR1cCgpOwoJIAoJbW91bnRfcm9vdCgpOwojIDE0NDMg
ImluaXQvbWFpbi5jIgp9CnN0YXRpYyBpbnQgaW5pdCh2b2lkICogdW51c2VkKQp7CglkbyB7IH0g
d2hpbGUoMCkgOwoJZG9fYmFzaWNfc2V0dXAoKTsKCSAKCWZyZWVfaW5pdG1lbSgpOwoJZG8geyB9
IHdoaWxlKDApIDsKCWlmIChvcGVuKCIvZGV2L2NvbnNvbGUiLCAwMiAsIDApIDwgMCkKCQlwcmlu
dGsoIldhcm5pbmc6IHVuYWJsZSB0byBvcGVuIGFuIGluaXRpYWwgY29uc29sZS5cbiIpOwoJKHZv
aWQpIGR1cCgwKTsKCSh2b2lkKSBkdXAoMCk7CgkKCSAKCWlmIChleGVjdXRlX2NvbW1hbmQpCgkJ
ZXhlY3ZlKGV4ZWN1dGVfY29tbWFuZCxhcmd2X2luaXQsZW52cF9pbml0KTsKCWV4ZWN2ZSgiL3Ni
aW4vaW5pdCIsYXJndl9pbml0LGVudnBfaW5pdCk7CglleGVjdmUoIi9ldGMvaW5pdCIsYXJndl9p
bml0LGVudnBfaW5pdCk7CglleGVjdmUoIi9iaW4vaW5pdCIsYXJndl9pbml0LGVudnBfaW5pdCk7
CglleGVjdmUoIi9iaW4vc2giLGFyZ3ZfaW5pdCxlbnZwX2luaXQpOwoJcGFuaWMoIk5vIGluaXQg
Zm91bmQuICBUcnkgcGFzc2luZyBpbml0PSBvcHRpb24gdG8ga2VybmVsLiIpOwp9Cg==

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]