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]
Other format: [Raw text]

optimization/9570: Assember error with -finline-functions with g++-3.3


>Number:         9570
>Category:       optimization
>Synopsis:       Assember error with -finline-functions with g++-3.3
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Feb 04 13:46:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Adam Lackorzynski
>Release:        gcc version 3.3 20030203 (prerelease),
>Organization:
>Environment:
Debian Woody/3.0_r1, x86, Linux 2.4.20, SMP
>Description:
Hi,

compiling the attached code with

g++ -c -fno-rtti  -fno-exceptions -march=i586  -fno-defer-pop -freg-struct-return -g -Wall -W -finline-limit=2000 -finline-functions -O2 profile.ii -o profile.o -save-temps

gives the following assembler error:
profile.s: Assembler messages:
profile.s:501: Error: attempt to .org backwards

When removing -finline-functions (or using -O2 instead of -O3) it compiles fine.
It also works with g++-3.2.

The GNU as version is
GNU assembler version 2.13.90.0.16 (i386-linux) using BFD version 2.13.90.0.16 20021126 Debian GNU/Linux

I don't know if this behaviour could also be related to "as".
>How-To-Repeat:

>Fix:
Don't use -finline-functions or -O3 or higher, or use g++-3.2
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="profile.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="profile.ii"

IyAxICJhdXRvL3Byb2ZpbGUuY2MiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5l
PiIKIyAxICJhdXRvL3Byb2ZpbGUuY2MiCgoKIyAxICJhdXRvL3Byb2ZpbGUuaCIgMQoKCgoKCiMg
MSAiLi4vc3JjL3R5cGVzL3R5cGVzLmgiIDEKIyAxMSAiLi4vc3JjL3R5cGVzL3R5cGVzLmgiCiMg
MSAiL2hvbWUvYWRhbS9lcndpbi90bXAvZ2NjLzMuMy9pbnN0L2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDE1MSAiL2hvbWUvYWRhbS9l
cndpbi90bXAvZ2NjLzMuMy9pbnN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAzIDQKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDIxMyAiL2hvbWUv
YWRhbS9lcndpbi90bXAvZ2NjLzMuMy9pbnN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90Owoj
IDEyICIuLi9zcmMvdHlwZXMvdHlwZXMuaCIgMgojIDEgIi4uL3NyYy90eXBlcy9pYTMyL3R5cGVz
LWFyY2guaCIgMQoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVW5zaWduZWQ4Owp0eXBlZGVm
IHNpZ25lZCBjaGFyIFNpZ25lZDg7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgVW5zaWduZWQxNjsK
dHlwZWRlZiBzaWduZWQgc2hvcnQgU2lnbmVkMTY7CnR5cGVkZWYgdW5zaWduZWQgaW50IFVuc2ln
bmVkMzI7CnR5cGVkZWYgc2lnbmVkIGludCBTaWduZWQzMjsKdHlwZWRlZiB1bnNpZ25lZCBsb25n
IGxvbmcgaW50IFVuc2lnbmVkNjQ7CnR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgU2lnbmVk
NjQ7CgoKdHlwZWRlZiBTaWduZWQzMiBTbXdvcmQ7CnR5cGVkZWYgVW5zaWduZWQzMiBNd29yZDsK
ZW51bSB7CiAgTVdPUkRfQklUUyA9MzIKfTsKCgp0eXBlZGVmIFVuc2lnbmVkMzIgdm1fb2Zmc2V0
X3Q7CnR5cGVkZWYgVW5zaWduZWQzMiBBZGRyZXNzOwoKCnR5cGVkZWYgVW5zaWduZWQzMiB2bV9z
aXplX3Q7Cgp0eXBlZGVmIFVuc2lnbmVkNjQgQ3B1X3RpbWU7CiMgMTMgIi4uL3NyYy90eXBlcy90
eXBlcy5oIiAyCgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBhLCB0eXBlbmFtZSBiID4gaW5saW5lCmEg
bm9udWxsX3N0YXRpY19jYXN0KCBiIHAgKQp7CiAgaW50IGQgPSByZWludGVycHJldF9jYXN0PGlu
dD4oc3RhdGljX2Nhc3Q8YT4ocmVpbnRlcnByZXRfY2FzdDxiPigxMCkpKSAtIDEwOwogIHJldHVy
biByZWludGVycHJldF9jYXN0PGE+KCByZWludGVycHJldF9jYXN0PE13b3JkPihwKSArIGQgKTsK
fQoKCgoKdHlwZWRlZiBzdHJ1Y3QgeyBVbnNpZ25lZDMyIGxvdywgaGlnaDsgfSBsNF9sb3dfaGln
aF90OwoKCnR5cGVkZWYgc3RydWN0IHsgQWRkcmVzcyBsb3csIGhpZ2g7IH0gbDRfYWRkcl9yYW5n
ZV90OwoKCgp0eXBlZGVmIFNtd29yZCBzc2l6ZV90OwojIDcgImF1dG8vcHJvZmlsZS5oIiAyCgoK
CgoKCmNsYXNzIHByb2ZpbGUKewogIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRpY2tzOwogIHN0YXRp
YyBib29sIGV4aXQ7CgpwdWJsaWM6CgoKCgogIHN0YXRpYyB2b2lkIGluaXQoKTsKCiAgc3RhdGlj
IHZvaWQgc3RhcnQoKTsKCiAgc3RhdGljIHZvaWQgc3RvcCgpOwoKICBzdGF0aWMgdm9pZCBzdG9w
X2FuZF9kdW1wKCk7CgogIHN0YXRpYyB2b2lkIGhhbmRsZV9wcm9maWxlX2ludGVycnVwdCh2bV9v
ZmZzZXRfdCBwYyk7Cn07CgpleHRlcm4gIkMiIHZvaWQgcHJvZmlsZV9pbnRlcnJ1cHQodm1fb2Zm
c2V0X3QgcGMpOwoKZXh0ZXJuICJDIiB2b2lkIHByb2ZpbGVfbWNvdW50X3dyYXAodW5zaWduZWQg
c2hvcnQgKmZyb21wY2luZGV4LCBjaGFyICpzZWxmcGMgKTsKIyA0ICJhdXRvL3Byb2ZpbGUuY2Mi
IDIKIyAxICJhdXRvL3Byb2ZpbGVfaS5oIiAxCgoKCgoKIyAxICIuLi9zcmMvbGliL21pbmlsaWJj
L2luY2x1ZGUvY3N0ZGxpYiIgMQoKCgoKCiMgMSAiLi4vc3JjL2xpYi9taW5pbGliYy9pbmNsdWRl
L3N0ZGxpYi5oIiAxCgoKCiMgMSAiLi4vc3JjL2xpYi9rZXJuL2luY2x1ZGUvY2RlZnMuaCIgMQoj
IDUgIi4uL3NyYy9saWIvbWluaWxpYmMvaW5jbHVkZS9zdGRsaWIuaCIgMgojIDEgIi9ob21lL2Fk
YW0vZXJ3aW4vdG1wL2djYy8zLjMvaW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyA2ICIuLi9zcmMvbGliL21pbmlsaWJjL2luY2x1
ZGUvc3RkbGliLmgiIDIKCmV4dGVybiAiQyIgewoKaW50IGF0ZXhpdCh2b2lkICgqZnVuY3Rpb24p
KHZvaWQpKTsKCmRvdWJsZSBzdHJ0b2QoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cik7
CmxvbmcgaW50IHN0cnRvbChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFz
ZSk7CnVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVu
ZHB0ciwgaW50IGJhc2UpOwoKZXh0ZXJuIGludCBfX2x0b3N0cihjaGFyICpzLCB1bnNpZ25lZCBp
bnQgc2l6ZSwgdW5zaWduZWQgbG9uZyBpLCB1bnNpZ25lZCBpbnQgYmFzZSwgaW50IFVwQ2FzZSk7
CmV4dGVybiBpbnQgX19kdG9zdHIoZG91YmxlIGQsY2hhciAqYnVmLHVuc2lnbmVkIGludCBtYXhs
ZW4sdW5zaWduZWQgaW50IHByZWMpOwoKCl9fZXh0ZW5zaW9uX18gbG9uZyBsb25nIGludCBzdHJ0
b2xsKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKTsKX19leHRlbnNp
b25fXyB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsKGNvbnN0IGNoYXIgKm5wdHIsIGNo
YXIgKiplbmRwdHIsIGludCBiYXNlKTsKX19leHRlbnNpb25fXyBpbnQgX19sbHRvc3RyKGNoYXIg
KnMsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBsb25nIGxvbmcgaSwgdW5zaWduZWQgaW50
IGJhc2UsIGludCBVcENhc2UpOwoKCmludCBhdG9pKGNvbnN0IGNoYXIgKm5wdHIpOwpsb25nIGlu
dCBhdG9sKGNvbnN0IGNoYXIgKm5wdHIpOwpkb3VibGUgYXRvZihjb25zdCBjaGFyICpucHRyKTsK
CgoKCnZvaWQgZXhpdChpbnQgc3RhdHVzKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwp2b2lk
IGFib3J0KHZvaWQpOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgeyBpbnQgcXVvdCxyZW07IH0gZGl2X3Q7
CmRpdl90IGRpdihpbnQgbnVtZXIsIGludCBkZW5vbSkgX19hdHRyaWJ1dGVfXygoY29uc3QpKTsK
CnR5cGVkZWYgc3RydWN0IHsgbG9uZyBpbnQgcXVvdCxyZW07IH0gbGRpdl90OwpsZGl2X3QgbGRp
dihsb25nIGludCBudW1lciwgbG9uZyBpbnQgZGVub20pIF9fYXR0cmlidXRlX18oKGNvbnN0KSk7
Cgp0eXBlZGVmIHN0cnVjdCB7IGxvbmcgbG9uZyBpbnQgcXVvdCxyZW07IH0gbGxkaXZfdDsKbGxk
aXZfdCBsbGRpdihsb25nIGxvbmcgaW50IG51bWVyLCBsb25nIGxvbmcgaW50IGRlbm9tKSBfX2F0
dHJpYnV0ZV9fKChjb25zdCkpOwoKaW50IGFicyhpbnQgaSkgX19hdHRyaWJ1dGVfXygoY29uc3Qp
KTsKbG9uZyBpbnQgbGFicyhsb25nIGludCBpKSBfX2F0dHJpYnV0ZV9fKChjb25zdCkpOwpfX2V4
dGVuc2lvbl9fIGxvbmcgbG9uZyBpbnQgbGxhYnMobG9uZyBsb25nIGludCBpKSBfX2F0dHJpYnV0
ZV9fKChjb25zdCkpOwoKfQojIDcgIi4uL3NyYy9saWIvbWluaWxpYmMvaW5jbHVkZS9jc3RkbGli
IiAyCgoKbmFtZXNwYWNlIHN0ZCB7CgoKCiAgdXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphYnM7
CiAgdXNpbmcgOjpsYWJzOwogIHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CiAgdXNp
bmcgOjpsbGRpdl90OwogIHVzaW5nIDo6ZGl2OwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Omxs
ZGl2OwogIHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmFib3J0OwogIHVzaW5nIDo6YXRvaTsKICB1
c2luZyA6OmF0b2w7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6c3RydG91bDsKICB1c2luZyA6
OnN0cnRvbDsKICB1c2luZyA6OnN0cnRvZDsKCgoKICBpbmxpbmUgbG9uZwogIGFicyhsb25nIGkp
IHsgcmV0dXJuIGxhYnMoaSk7IH0KCiAgaW5saW5lIGxvbmcgbG9uZwogIGFicyhsb25nIGxvbmcg
aSkgeyByZXR1cm4gbGxhYnMoaSk7IH0KCiAgaW5saW5lIGxkaXZfdAogIGRpdiggbG9uZyBpLCBs
b25nIGogKSB7IHJldHVybiBsZGl2KGksaik7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBkaXYoIGxv
bmcgbG9uZyBpLCBsb25nIGxvbmcgaiApIHsgcmV0dXJuIGxsZGl2KGksaik7IH0KCn07CiMgNyAi
YXV0by9wcm9maWxlX2kuaCIgMgojIDEgIi4uL3NyYy9saWIva2Vybi9pbmNsdWRlL2ZsdXgveDg2
L3NlZy5oIiAxCiMgNDQgIi4uL3NyYy9saWIva2Vybi9pbmNsdWRlL2ZsdXgveDg2L3NlZy5oIgpz
dHJ1Y3QgeDg2X2Rlc2MgewogICAgICAgIHVuc2lnbmVkIGludCBsaW1pdF9sb3c6MTYsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGJhc2VfbG93OjE2LAogICAgICAgICAgICAgICAgICAgICAgICBi
YXNlX21lZDo4LAogICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3M6OCwKICAgICAgICAgICAg
ICAgICAgICAgICAgbGltaXRfaGlnaDo0LAogICAgICAgICAgICAgICAgICAgICAgICBncmFudWxh
cml0eTo0LAogICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2hpZ2g6ODsKfTsKCgoKCnN0cnVj
dCB4ODZfZ2F0ZSB7CiAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldF9sb3c6MTYsCiAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGVjdG9yOjE2LAogICAgICAgICAgICAgICAgICAgICAgICB3b3Jk
X2NvdW50OjgsCiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzczo4LAogICAgICAgICAgICAg
ICAgICAgICAgICBvZmZzZXRfaGlnaDoxNjsKfTsKIyAxMjcgIi4uL3NyYy9saWIva2Vybi9pbmNs
dWRlL2ZsdXgveDg2L3NlZy5oIgpzdHJ1Y3QgcHNldWRvX2Rlc2NyaXB0b3IKewogICAgICAgIHNo
b3J0IHBhZDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBsaW1pdDsKICAgICAgICB1bnNpZ25lZCBs
b25nIGxpbmVhcl9iYXNlOwp9OwoKCgpleHRlcm4gX19pbmxpbmUgdm9pZApmaWxsX2Rlc2NyaXB0
b3Ioc3RydWN0IHg4Nl9kZXNjICpkZXNjLCB1bnNpZ25lZCBiYXNlLCB1bnNpZ25lZCBsaW1pdCwK
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWNjZXNzLCB1bnNpZ25lZCBjaGFyIHNpemVi
aXRzKQp7CiAgICAgICAgaWYgKGxpbWl0ID4gMHhmZmZmZikKICAgICAgICB7CiAgICAgICAgICAg
ICAgICBsaW1pdCA+Pj0gMTI7CiAgICAgICAgICAgICAgICBzaXplYml0cyB8PSAweDg7CiAgICAg
ICAgfQogICAgICAgIGRlc2MtPmxpbWl0X2xvdyA9IGxpbWl0ICYgMHhmZmZmOwogICAgICAgIGRl
c2MtPmJhc2VfbG93ID0gYmFzZSAmIDB4ZmZmZjsKICAgICAgICBkZXNjLT5iYXNlX21lZCA9IChi
YXNlID4+IDE2KSAmIDB4ZmY7CiAgICAgICAgZGVzYy0+YWNjZXNzID0gYWNjZXNzIHwgMHg4MDsK
ICAgICAgICBkZXNjLT5saW1pdF9oaWdoID0gbGltaXQgPj4gMTY7CiAgICAgICAgZGVzYy0+Z3Jh
bnVsYXJpdHkgPSBzaXplYml0czsKICAgICAgICBkZXNjLT5iYXNlX2hpZ2ggPSBiYXNlID4+IDI0
Owp9CgoKZXh0ZXJuIF9faW5saW5lIHZvaWQKZmlsbF9kZXNjcmlwdG9yX2Jhc2Uoc3RydWN0IHg4
Nl9kZXNjICpkZXNjLCB1bnNpZ25lZCBiYXNlKQp7CiAgICAgICAgZGVzYy0+YmFzZV9sb3cgPSBi
YXNlICYgMHhmZmZmOwogICAgICAgIGRlc2MtPmJhc2VfbWVkID0gKGJhc2UgPj4gMTYpICYgMHhm
ZjsKICAgICAgICBkZXNjLT5iYXNlX2hpZ2ggPSBiYXNlID4+IDI0Owp9CgoKZXh0ZXJuIF9faW5s
aW5lIHZvaWQKZmlsbF9kZXNjcmlwdG9yX2xpbWl0KHN0cnVjdCB4ODZfZGVzYyAqZGVzYywgdW5z
aWduZWQgbGltaXQpCnsKICAgICAgICBpZiAobGltaXQgPiAweGZmZmZmKQogICAgICAgIHsKICAg
ICAgICAgICAgICAgIGxpbWl0ID4+PSAxMjsKICAgICAgICAgICAgICAgIGRlc2MtPmdyYW51bGFy
aXR5IHw9IDB4ODsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZGVzYy0+
Z3JhbnVsYXJpdHkgJj0gfjB4ODsKICAgICAgICBkZXNjLT5saW1pdF9sb3cgPSBsaW1pdCAmIDB4
ZmZmZjsKICAgICAgICBkZXNjLT5saW1pdF9oaWdoID0gbGltaXQgPj4gMTY7Cn0KCgpleHRlcm4g
X19pbmxpbmUgdm9pZApmaWxsX2dhdGUoc3RydWN0IHg4Nl9nYXRlICpnYXRlLCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIHNob3J0IHNlbGVjdG9yLAogICAgICAgICAgdW5zaWduZWQgY2hhciBh
Y2Nlc3MsIHVuc2lnbmVkIGNoYXIgd29yZF9jb3VudCkKewogICAgICAgIGdhdGUtPm9mZnNldF9s
b3cgPSBvZmZzZXQgJiAweGZmZmY7CiAgICAgICAgZ2F0ZS0+c2VsZWN0b3IgPSBzZWxlY3RvcjsK
ICAgICAgICBnYXRlLT53b3JkX2NvdW50ID0gd29yZF9jb3VudDsKICAgICAgICBnYXRlLT5hY2Nl
c3MgPSBhY2Nlc3MgfCAweDgwOwogICAgICAgIGdhdGUtPm9mZnNldF9oaWdoID0gKG9mZnNldCA+
PiAxNikgJiAweGZmZmY7Cn0KIyA4ICJhdXRvL3Byb2ZpbGVfaS5oIiAyCiMgMSAiLi4vc3JjL2xp
Yi9rZXJuL2luY2x1ZGUvZmx1eC94ODYvYXNtLmgiIDEKIyA5ICJhdXRvL3Byb2ZpbGVfaS5oIiAy
CgojIDEgImF1dG8vY29uZmlnLmgiIDEKCgoKCgojIDEgImdsb2JhbGNvbmZpZy5oIiAxCiMgNyAi
YXV0by9jb25maWcuaCIgMgoKIyAxICJhdXRvL2w0X3R5cGVzLmgiIDEKIyAyMiAiYXV0by9sNF90
eXBlcy5oIgp0eXBlZGVmIE13b3JkIFRhc2tfbnVtOwoKCnR5cGVkZWYgTXdvcmQgTFRocmVhZF9u
dW07CgoKdHlwZWRlZiBNd29yZCBHVGhyZWFkX251bTsKIyAzNyAiYXV0by9sNF90eXBlcy5oIgpj
bGFzcyBMNF9mcGFnZQp7CnB1YmxpYzoKIyA1MCAiYXV0by9sNF90eXBlcy5oIgogIEw0X2ZwYWdl
KCBNd29yZCBncmFudCwgTXdvcmQgd3JpdGUsIE13b3JkIG9yZGVyLCBNd29yZCBwYWdlICk7CgoK
CgoKCiAgTXdvcmQgZ3JhbnQoKSBjb25zdDsKCgoKCgoKICB2b2lkIGdyYW50KCBNd29yZCBnICk7
CgoKCgoKCiAgTXdvcmQgd3JpdGUoKSBjb25zdDsKCgoKCgoKICB2b2lkIHdyaXRlKCBNd29yZCB3
ICk7CgoKCgoKICBNd29yZCBzaXplKCkgY29uc3Q7CgoKCgoKICB2b2lkIHNpemUoIE13b3JkIG9y
ZGVyICk7CgoKCgoKICBNd29yZCBwYWdlKCkgY29uc3Q7CgoKCgoKICB2b2lkIHBhZ2UoIE13b3Jk
IGJhc2UgKTsKCgoKCgoKICBNd29yZCBpc193aG9sZV9zcGFjZSgpIGNvbnN0OwoKCgoKCgogIE13
b3JkIGlzX3ZhbGlkKCkgY29uc3Q7Cgpwcml2YXRlOgoKcHVibGljOgoKCgoKICBlbnVtIHsKICAg
IFdIT0xFX1NQQUNFID0gMzIsCiAgfTsKCgoKCgogIEw0X2ZwYWdlKCBNd29yZCB3ID0gMCApOwoK
CgoKCiAgTXdvcmQgcmF3KCkgY29uc3Q7Cgpwcml2YXRlOgoKICBNd29yZCBfcmF3OwoKICBlbnVt
IHsKICAgIEdSQU5UX0JJVCA9IDAsCiAgICBXUklURV9CSVQgPSAxLAogICAgU0laRV9NQVNLID0g
MHgwMDAwMDBmYywKICAgIFNJWkVfU0hJRlQgPSAyLAogICAgU0laRV9TSVpFID0gNiwKICAgIFBB
R0VfTUFTS19TVFVQSURfTUFDUk9fV09SS0FST1VORCA9IDB4ZmZmZmYwMDAsCiAgICBQQUdFX1NI
SUZUX1NUVVBJRF9NQUNST19XT1JLQVJPVU5EID0gMCwKICAgIFBBR0VfU0laRV9TVFVQSURfTUFD
Uk9fV09SS0FST1VORCA9IDMyLAogIH07Cgpwcml2YXRlOgoKcHVibGljOgoKCgogIGVudW0gewog
ICAgV0hPTEVfSU9fU1BBQ0UgPSAxNiwKICAgIElPX1BPUlRfTUFYID0gMUwgPDwgV0hPTEVfSU9f
U1BBQ0UsCiAgfTsKCgoKCgogIE13b3JkIGlvcGFnZSgpIGNvbnN0OwoKCgoKCiAgdm9pZCBpb3Bh
Z2UoIE13b3JkIGFkZHIgKTsKCgoKCgogIE13b3JkIGlzX2lvcGFnZSgpIGNvbnN0OwojIDE5MiAi
YXV0by9sNF90eXBlcy5oIgogIE13b3JkIGlzX3dob2xlX2lvX3NwYWNlKCkgY29uc3Q7CgoKCgoK
CgogIHN0YXRpYyBMNF9mcGFnZSBpbyggTXdvcmQgcG9ydCwgTXdvcmQgb3JkZXIsIE13b3JkIGdy
YW50ICk7Cgpwcml2YXRlOgogIGVudW0gewogICAgSU9QQUdFX01BU0sgPSAweDBmZmZmMDAwLAog
ICAgSU9QQUdFX1NISUZUID0gMTIsCiAgICBJT0lEX01BU0sgPSAweGYwMDAwMDAwLAogICAgSU9f
SUQgPSAweGYwMDAwMDAwLAogIH07Cgp9OwoKCgoKY2xhc3MgTDRfc25kX2Rlc2MKewpwdWJsaWM6
CgoKCgogIEw0X3NuZF9kZXNjKCBNd29yZCB3ID0gKE13b3JkKS0xICk7CgoKCgogIE13b3JkIGRl
Y2VpdGUoKSBjb25zdDsKCgoKCiAgTXdvcmQgbWFwKCkgY29uc3Q7CgoKCgogIHZvaWQgKm1zZygp
IGNvbnN0OwoKCgoKICBNd29yZCBpc19sb25nX2lwYygpIGNvbnN0OwoKCgoKICBNd29yZCBoYXNf
c2VuZCgpIGNvbnN0OwoKcHJpdmF0ZToKICBNd29yZCBfZDsKfTsKCgoKCmNsYXNzIEw0X3Jjdl9k
ZXNjCnsKcHVibGljOgojIDI3MCAiYXV0by9sNF90eXBlcy5oIgogIHN0YXRpYyBMNF9yY3ZfZGVz
YyBzaG9ydF9mcGFnZSggTDRfZnBhZ2UgZnAgKTsKCgoKCiAgTDRfcmN2X2Rlc2MoIE13b3JkIHcg
PSAoTXdvcmQpLTEgKTsKCgoKCgogIE13b3JkIG9wZW5fd2FpdCgpIGNvbnN0OwoKCgoKCiAgTXdv
cmQgcm1hcCgpIGNvbnN0OwoKCgoKCgogIHZvaWQgKm1zZygpIGNvbnN0OwoKCgoKCgogIEw0X2Zw
YWdlIGZwYWdlKCkgY29uc3Q7CgoKCgoKICBNd29yZCBpc19yZWdpc3Rlcl9pcGMoKSBjb25zdDsK
CgoKCgogIE13b3JkIGhhc19yZWNlaXZlKCkgY29uc3Q7Cgpwcml2YXRlOgogIE13b3JkIF9kOwoK
CnB1YmxpYzoKCiAgTXdvcmQgcmF3KCkgY29uc3Q7Cn07CgoKCgpjbGFzcyBMNF90aW1lb3V0CnsK
cHJpdmF0ZToKICBlbnVtIHsKICAgIFJDVl9FWFBfTUFTSyA9IDB4MGYsCiAgICBSQ1ZfRVhQX1NI
SUZUID0gMCwKCiAgICBTTkRfRVhQX01BU0sgPSAweDBmMCwKICAgIFNORF9FWFBfU0hJRlQgPSA0
LAoKICAgIFJDVl9QRkFVTFRfTUFTSyA9IDB4MGYwMCwKICAgIFJDVl9QRkFVTFRfU0hJRlQgPSA4
LAoKICAgIFNORF9QRkFVTFRfTUFTSyA9IDB4MGYwMDAsCiAgICBTTkRfUEZBVUxUX1NISUZUID0g
MTIsCgogICAgU05EX01BTl9NQVNLID0gMHgwZmYwMDAwLAogICAgU05EX01BTl9TSElGVCA9IDE2
LAoKICAgIFJDVl9NQU5fTUFTSyA9IDB4MGZmMDAwMDAwLAogICAgUkNWX01BTl9TSElGVCA9IDI0
LAogIH07CgpwdWJsaWM6CgogIGVudW0gewogICAgTkVWRVIgPSAwLAogIH07CgoKCgoKICBleHBs
aWNpdCBMNF90aW1lb3V0KCBNd29yZCB0ID0gMCApOwojIDM3NSAiYXV0by9sNF90eXBlcy5oIgog
IEw0X3RpbWVvdXQoIE13b3JkIHNuZF9tYW4sIE13b3JkIHNuZF9leHAsCiAgICAgICAgICAgICAg
TXdvcmQgcmN2X21hbiwgTXdvcmQgcmN2X2V4cCwKICAgICAgICAgICAgICBNd29yZCBzbmRfcGZs
dCwgTXdvcmQgcmN2X3BmbHQgKTsKCgoKCgogIFVuc2lnbmVkNjQgcmF3KCk7CgoKCgoKCiAgTXdv
cmQgcmN2X2V4cCgpIGNvbnN0OwoKCgoKCgogIHZvaWQgcmN2X2V4cCggTXdvcmQgZXIgKTsKCgoK
CgoKICBNd29yZCByY3ZfbWFuKCkgY29uc3Q7CgoKCgoKCiAgdm9pZCByY3ZfbWFuKCBNd29yZCBt
ciApOwoKCgoKCgogIE13b3JkIHNuZF9leHAoKSBjb25zdDsKCgoKCgoKICB2b2lkIHNuZF9leHAo
IE13b3JkIGVzICk7CgoKCgoKCiAgTXdvcmQgc25kX21hbigpIGNvbnN0OwoKCgoKCgogIHZvaWQg
c25kX21hbiggTXdvcmQgbXMgKTsKCgoKCgogIE13b3JkIHJjdl9wZmF1bHQoKSBjb25zdDsKCgoK
CgogIHZvaWQgcmN2X3BmYXVsdCggTXdvcmQgcHIgKTsKCgoKCgogIE13b3JkIHNuZF9wZmF1bHQo
KSBjb25zdDsKCgoKCgogIHZvaWQgc25kX3BmYXVsdCggTXdvcmQgcHMgKTsKCgoKCgogIFVuc2ln
bmVkNjQgcmN2X21pY3Jvc2VjcygpIGNvbnN0OwoKCgoKCiAgVW5zaWduZWQ2NCBzbmRfbWljcm9z
ZWNzKCkgY29uc3Q7Cgpwcml2YXRlOgogIE13b3JkIF90OwoKfTsKIyA0OTIgImF1dG8vbDRfdHlw
ZXMuaCIKY2xhc3MgTDRfdWlkCnsKcHVibGljOgojIDUwNCAiYXV0by9sNF90eXBlcy5oIgogIEw0
X3VpZCggVGFza19udW0gdGFzaywgTFRocmVhZF9udW0gbHRocmVhZCApOwoKCgoKCiAgdW5zaWdu
ZWQgdmVyc2lvbigpIGNvbnN0OwoKCiAgTFRocmVhZF9udW0gbHRocmVhZCgpIGNvbnN0OwoKCiAg
VGFza19udW0gdGFzaygpIGNvbnN0OwoKCiAgR1RocmVhZF9udW0gZ3RocmVhZCgpIGNvbnN0OwoK
CiAgVGFza19udW0gY2hpZWYoKSBjb25zdDsKCgogIHZvaWQgdmVyc2lvbiggdW5zaWduZWQgKTsK
CgogIHZvaWQgbHRocmVhZCggTFRocmVhZF9udW0gKTsKCgogIHZvaWQgdGFzayggVGFza19udW0g
KTsKCgogIHZvaWQgY2hpZWYoIFRhc2tfbnVtICk7CgoKCgoKICBNd29yZCBpc19uaWwoKSBjb25z
dDsKCgoKCgogIE13b3JkIGlzX2ludmFsaWQoKSBjb25zdDsKCgogIEw0X3VpZCB0YXNrX2lkKCkg
Y29uc3Q7CgoKICBzdGF0aWMgTDRfdWlkIGlycSggdW5zaWduZWQgaXJxICk7CgoKICBNd29yZCBp
c19pcnEoKSBjb25zdDsKCgoKCgoKICBNd29yZCBpcnEoKSBjb25zdDsKCgogIGJvb2wgb3BlcmF0
b3IgPT0gKCBMNF91aWQgbyApIGNvbnN0OwoKCiAgYm9vbCBvcGVyYXRvciAhPSAoIEw0X3VpZCBv
ICkgY29uc3QKICB7IHJldHVybiAhIG9wZXJhdG9yID09IChvKTsgfQoKCiAgc3RhdGljIHVuc2ln
bmVkIGNvbnN0IHRocmVhZHNfcGVyX3Rhc2soKTsKCnByaXZhdGU6CgpwdWJsaWM6CgoKICBlbnVt
IHsKICAgIElOVkFMSUQgPSAweDBmZmZmZmZmZiwKICAgIE5JTCA9IDB4MDAwMDAwMDAwLAogIH07
CgoKICBMNF91aWQoIFVuc2lnbmVkNjQgPSBOSUwgKTsKCgogIEw0X3VpZCggVGFza19udW0gdGFz
aywgTFRocmVhZF9udW0gbHRocmVhZCwgdW5zaWduZWQgc2l0ZSwKICAgICAgICAgIFRhc2tfbnVt
IGNoaWVmLCB1bnNpZ25lZCBuZXN0ID0gMCwgdW5zaWduZWQgdmVyc2lvbiA9IDAgKTsKCgogIHVu
c2lnbmVkIHNpdGUoKSBjb25zdDsKCgogIHVuc2lnbmVkIG5lc3QoKSBjb25zdDsKCgogIHZvaWQg
c2l0ZSggdW5zaWduZWQgKTsKCgogIHZvaWQgbmVzdCggdW5zaWduZWQgKTsKCgogIFVuc2lnbmVk
NjQgcmF3KCkgY29uc3Q7Cgpwcml2YXRlOgogIGVudW0gewogICAgSVJRX01BU0sgPSAweDAwMDAw
MDAwMDAwMDAwZmZMTCwKICAgIExPV19NQVNLID0gMHgwMDAwMDAwMGZmZmZmZmZmTEwsCiAgICBW
RVJTSU9OX0xPV19NQVNLID0gMHgwMDAwMDAwMDAwMDAwM2ZmTEwsCiAgICBWRVJTSU9OX0xPV19T
SElGVCA9IDAsCiAgICBWRVJTSU9OX0xPV19TSVpFID0gMTAsCiAgICBMVEhSRUFEX01BU0sgPSAw
eDAwMDAwMDAwMDAwMWZjMDBMTCwKICAgIExUSFJFQURfU0hJRlQgPSBWRVJTSU9OX0xPV19TSElG
VCArIFZFUlNJT05fTE9XX1NJWkUsCiAgICBMVEhSRUFEX1NJWkUgPSA3LAogICAgVEFTS19NQVNL
ID0gMHgwMDAwMDAwMDBmZmUwMDAwTEwsCiAgICBUQVNLX1NISUZUID0gTFRIUkVBRF9TSElGVCAr
IExUSFJFQURfU0laRSwKICAgIFRBU0tfU0laRSA9IDExLAogICAgVkVSU0lPTl9ISUdIX01BU0sg
PSAweDAwMDAwMDAwZjAwMDAwMDBMTCwKICAgIFZFUlNJT05fSElHSF9TSElGVCA9IFRBU0tfU0hJ
RlQgKyBUQVNLX1NJWkUsCiAgICBWRVJTSU9OX0hJR0hfU0laRSA9IDQsCiAgICBTSVRFX01BU0sg
PSAweDAwMDFmZmZmMDAwMDAwMDBMTCwKICAgIFNJVEVfU0hJRlQgPSBWRVJTSU9OX0hJR0hfU0hJ
RlQgKyBWRVJTSU9OX0hJR0hfU0laRSwKICAgIFNJVEVfU0laRSA9IDE3LAogICAgQ0hJRUZfTUFT
SyA9IDB4MGZmZTAwMDAwMDAwMDAwMExMLAogICAgQ0hJRUZfU0hJRlQgPSBTSVRFX1NISUZUICsg
U0lURV9TSVpFLAogICAgQ0hJRUZfU0laRSA9IDExLAogICAgTkVTVF9NQVNLID0gMHhmMDAwMDAw
MDAwMDAwMDAwTEwsCiAgICBORVNUX1NISUZUID0gQ0hJRUZfU0hJRlQgKyBDSElFRl9TSVpFLAog
ICAgTkVTVF9TSVpFID0gNCwKICB9OwoKICBVbnNpZ25lZDY0IF9yYXc7Cgp9OwoKCgoKCgoKY2xh
c3MgTDRfbXNnZG9wZQp7CnB1YmxpYzoKCgoKCiAgZW51bSB7CgogICAgU0VORF9FUlJPUiA9IDB4
MTAsCiAgICBFTk9UX0VYSVNURU5UID0gMHgxMCwKICAgIFJFVElNRU9VVCA9IDB4MjAsCiAgICBT
RVRJTUVPVVQgPSAweDMwLAogICAgUkVDQU5DRUxFRCA9IDB4NDAsCiAgICBTRUNBTkNFTEVEID0g
MHg1MCwKICAgIFJFTUFQRkFJTEVEID0gMHg2MCwKICAgIFNFTUFQRkFJTEVEID0gMHg3MCwKICAg
IFJFU05EUEZUTyA9IDB4ODAsCiAgICBTRVNORFBGVE8gPSAweDkwLAogICAgUkVSQ1ZQRlRPID0g
MHhBMCwKICAgIFNFUkNWUEZUTyA9IDB4QjAsCiAgICBSRUFCT1JURUQgPSAweEMwLAogICAgU0VB
Qk9SVEVEID0gMHhEMCwKICAgIFJFTVNHQ1VUID0gMHhFMCwKICAgIFNFTVNHQ1VUID0gMHhGMCwK
ICB9OwoKCgoKCiAgTDRfbXNnZG9wZSggTXdvcmQgcmF3ID0gMCApOwoKCgoKCgogIEw0X21zZ2Rv
cGUoIE13b3JkIG13b3JkcywgTXdvcmQgc3RyaW5ncyApOwoKCgoKCiAgTXdvcmQgcmF3KCkgY29u
c3Q7CgoKCgoKICBNd29yZCBkZWNlaWRldCgpIGNvbnN0OwoKCgoKCiAgTXdvcmQgZnBhZ2VfcmVj
ZWl2ZWQoKSBjb25zdDsKCgoKCgogIHZvaWQgZnBhZ2VfcmVjZWl2ZWQoIE13b3JkIGYgKTsKCgoK
CgogIE13b3JkIHJlZGlyZWN0ZWQoKSBjb25zdDsKCgoKCgogIE13b3JkIHNyY19pbnNpZGUoKSBj
b25zdDsKCgoKCgogIE13b3JkIHNuZF9lcnJvcigpIGNvbnN0OwoKCgoKCiAgTXdvcmQgZXJyb3Io
KSBjb25zdDsKCgoKCgoKICB2b2lkIGVycm9yKCBNd29yZCBlcnJvciApOwoKCgoKCiAgTXdvcmQg
aGFzX2Vycm9yKCkgY29uc3Q7CgoKCgoKICBNd29yZCBzdHJpbmdzKCkgY29uc3Q7CgoKCgoKICB2
b2lkIHN0cmluZ3MoIE13b3JkIHMgKTsKCgoKCgogIE13b3JkIG13b3JkcygpIGNvbnN0OwoKCgoK
CiAgdm9pZCBtd29yZHMoIE13b3JkIHcgKTsKCgoKCgoKICBNd29yZCByY3ZfbWFwX2ZhaWxlZCgp
IGNvbnN0OwoKCgoKCgogIE13b3JkIHNuZF9tYXBfZmFpbGVkKCkgY29uc3Q7CiMgNzkxICJhdXRv
L2w0X3R5cGVzLmgiCiAgdm9pZCBjb21iaW5lKCBMNF9tc2dkb3BlIG90aGVyICk7Cgpwcml2YXRl
OgogIE13b3JkIF9yYXc7CiAgZW51bSB7CiAgICBERUNFSVRFX0JJVCA9IDAsCiAgICBGUEFHRV9C
SVQgPSAxLAogICAgUkVESVJFQ1RFRF9CSVQgPSAyLAogICAgU1JDX0lOU0lERV9CSVQgPSAzLAog
ICAgU05EX0VSUk9SX0JJVCA9IDQsCiAgICBFUlJPUl9DT0RFX1NISUZUID0gNSwKICAgIEVSUk9S
X0NPREVfTUFTSyA9IDB4N0wgPDwgRVJST1JfQ09ERV9TSElGVCwKICAgIEVSUk9SX0NPREVfU0la
RSA9IDMsCiAgICBFUlJPUl9TSElGVCA9IDQsCiAgICBFUlJPUl9NQVNLID0gMHhmTCA8PCBFUlJP
Ul9TSElGVCwKICAgIEVSUk9SX1NJWkUgPSA0LAogICAgU1RSSU5HU19TSElGVCA9IEVSUk9SX0NP
REVfU0hJRlQgKyBFUlJPUl9DT0RFX1NJWkUsCiAgICBTVFJJTkdTX01BU0sgPSAweDFmTCA8PCBT
VFJJTkdTX1NISUZULAogICAgU1RSSU5HU19TSVpFID0gNSwKICAgIE1XT1JEU19TSElGVCA9IFNU
UklOR1NfU0hJRlQgKyBTVFJJTkdTX1NJWkUsCiAgICBNV09SRFNfTUFTSyA9IDB4N2ZmZmZMIDw8
IE1XT1JEU19TSElGVCwKICAgIE1XT1JEU19TSVpFID0gMTksCgogIH07Cgp9OwoKCgoKCgoKY2xh
c3MgTDRfc3RyX2RvcGUKewpwdWJsaWM6CgogIE13b3JkIHNuZF9zaXplOwoKCiAgTXdvcmQgc25k
X3N0cjsKCgogIE13b3JkIHJjdl9zaXplOwoKCiAgTXdvcmQgcmN2X3N0cjsKfTsKCgoKCgpjbGFz
cyBMNF9zY2hlZF9wYXJhbQp7CnB1YmxpYzoKCgoKCiAgTDRfc2NoZWRfcGFyYW0oIE13b3JkIHJh
dyA9IDAgKTsKCgoKCgogIE13b3JkIGlzX3ZhbGlkKCkgY29uc3Q7CgoKCgoKICBNd29yZCBwcmlv
KCkgY29uc3Q7CgoKCgoKICB2b2lkIHByaW8oIE13b3JkIHAgKTsKCgoKCgogIE13b3JkIHNtYWxs
KCkgY29uc3Q7CgoKCgoKICB2b2lkIHNtYWxsKCBNd29yZCBzICk7CgoKCgoKCiAgdm9pZCB0aW1l
KCBVbnNpZ25lZDY0IHQgKTsKCgoKCgoKICBVbnNpZ25lZDY0IHRpbWUoKTsKCgoKCgoKICBNd29y
ZCB0aW1lX2V4cCgpIGNvbnN0OwoKCgoKCgogIHZvaWQgdGltZV9leHAoIE13b3JkIGUgKTsKCgoK
CgoKICBNd29yZCB0aW1lX21hbigpIGNvbnN0OwoKCgoKCgogIHZvaWQgdGltZV9tYW4oIE13b3Jk
IG0gKTsKCgoKCgogIE13b3JkIHJhdygpIGNvbnN0OwoKCgoKCiAgTXdvcmQgZXJyb3IoKSBjb25z
dDsKCgoKCgogIHZvaWQgZXJyb3IoIE13b3JkIGUgKTsKCnByaXZhdGU6CgogIE13b3JkIF9yYXc7
CgogIGVudW0gewogICAgUFJJT19TSElGVCA9IDAsCiAgICBQUklPX01BU0sgPSAweDBmZiwKICAg
IFBSSU9fU0laRSA9IDgsCiAgICBTTUFMTF9TSElGVCA9IFBSSU9fU0laRSArIFBSSU9fU0hJRlQs
CiAgICBTTUFMTF9TSVpFID0gOCwKICAgIFNNQUxMX01BU0sgPSAoKDFVTCA8PCBTTUFMTF9TSVpF
KS0xKSA8PCBTTUFMTF9TSElGVCwKICAgIEVSUk9SX1NISUZUID0gU01BTExfU0hJRlQgKyBTTUFM
TF9TSVpFLAogICAgRVJST1JfU0laRSA9IDQsCiAgICBFUlJPUl9NQVNLID0gKCgxVUwgPDwgRVJS
T1JfU0laRSktMSkgPDwgRVJST1JfU0hJRlQsCiAgICBUSU1FX0VYUF9TSElGVCA9IEVSUk9SX1NI
SUZUICsgRVJST1JfU0laRSwKICAgIFRJTUVfRVhQX1NJWkUgPSA0LAogICAgVElNRV9FWFBfTUFT
SyA9ICgoMVVMIDw8IFRJTUVfRVhQX1NJWkUpLTEpIDw8IFRJTUVfRVhQX1NISUZULAogICAgVElN
RV9NQU5fU0hJRlQgPSBUSU1FX0VYUF9TSVpFICsgVElNRV9FWFBfU0hJRlQsCiAgICBUSU1FX01B
Tl9TSVpFID0gOCwKICAgIFRJTUVfTUFOX01BU0sgPSAoKDFVTCA8PCBUSU1FX01BTl9TSVpFKS0x
KSA8PCBUSU1FX01BTl9TSElGVCwKICB9OwoKfTsKIyA5NzQgImF1dG8vbDRfdHlwZXMuaCIKaW5s
aW5lIE13b3JkIEw0X2ZwYWdlOjppc192YWxpZCgpIGNvbnN0CnsKICByZXR1cm4gX3JhdzsKfQoK
CgppbmxpbmUgTDRfZnBhZ2U6Okw0X2ZwYWdlKCBNd29yZCByYXcgKQogIDogX3JhdyhyYXcpCnt9
CgoKCmlubGluZSBMNF9mcGFnZTo6TDRfZnBhZ2UoIE13b3JkIGdyYW50LCBNd29yZCB3cml0ZSwg
TXdvcmQgc2l6ZSwgTXdvcmQgcGFnZSApCiAgOiBfcmF3KCAoZ3JhbnQgPyAoMTw8R1JBTlRfQklU
KSA6IDApCiAgICAgICAgICB8ICh3cml0ZSA/ICgxPDxXUklURV9CSVQpIDogMCkKICAgICAgICAg
IHwgKChzaXplIDw8IFNJWkVfU0hJRlQpICYgU0laRV9NQVNLKQogICAgICAgICAgfCAoKHBhZ2Ug
PDwgUEFHRV9TSElGVF9TVFVQSURfTUFDUk9fV09SS0FST1VORCkgJiBQQUdFX01BU0tfU1RVUElE
X01BQ1JPX1dPUktBUk9VTkQpICkKe30KCgoKaW5saW5lIE13b3JkIEw0X2ZwYWdlOjpncmFudCgp
IGNvbnN0CnsKICByZXR1cm4gX3JhdyAmICgxPDxHUkFOVF9CSVQpOwp9CgoKCmlubGluZSBNd29y
ZCBMNF9mcGFnZTo6d3JpdGUoKSBjb25zdAp7CiAgcmV0dXJuIF9yYXcgJiAoMTw8V1JJVEVfQklU
KTsKfQoKCgppbmxpbmUgTXdvcmQgTDRfZnBhZ2U6OnNpemUoKSBjb25zdAp7CiAgcmV0dXJuIChf
cmF3ICYgU0laRV9NQVNLKSA+PiBTSVpFX1NISUZUOwp9CgoKCmlubGluZSBNd29yZCBMNF9mcGFn
ZTo6cGFnZSgpIGNvbnN0CnsKICByZXR1cm4gKF9yYXcgJiBQQUdFX01BU0tfU1RVUElEX01BQ1JP
X1dPUktBUk9VTkQpID4+IFBBR0VfU0hJRlRfU1RVUElEX01BQ1JPX1dPUktBUk9VTkQ7Cn0KCgoK
aW5saW5lIHZvaWQgTDRfZnBhZ2U6OmdyYW50KCBNd29yZCB3ICkKewogIGlmKHcpCiAgICBfcmF3
IHw9ICgxPDxHUkFOVF9CSVQpOwogIGVsc2UKICAgIF9yYXcgJj0gfigxPDxHUkFOVF9CSVQpOwp9
CgoKCmlubGluZSB2b2lkIEw0X2ZwYWdlOjp3cml0ZSggTXdvcmQgdyApCnsKICBpZih3KQogICAg
X3JhdyB8PSAoMTw8V1JJVEVfQklUKTsKICBlbHNlCiAgICBfcmF3ICY9IH4oMTw8V1JJVEVfQklU
KTsKfQoKCgppbmxpbmUgdm9pZCBMNF9mcGFnZTo6c2l6ZSggTXdvcmQgdyApCnsKICBfcmF3ID0g
KF9yYXcgJiB+U0laRV9NQVNLKSB8ICgodzw8U0laRV9TSElGVCkgJiBTSVpFX01BU0spOwp9CgoK
CmlubGluZSB2b2lkIEw0X2ZwYWdlOjpwYWdlKCBNd29yZCB3ICkKewogIF9yYXcgPSAoX3JhdyAm
IH5QQUdFX01BU0tfU1RVUElEX01BQ1JPX1dPUktBUk9VTkQpIHwgKCh3PDxQQUdFX1NISUZUX1NU
VVBJRF9NQUNST19XT1JLQVJPVU5EKSAmIFBBR0VfTUFTS19TVFVQSURfTUFDUk9fV09SS0FST1VO
RCk7Cn0KCgoKaW5saW5lIE13b3JkIEw0X2ZwYWdlOjpyYXcoKSBjb25zdAp7CiAgcmV0dXJuIF9y
YXc7Cn0KCgoKaW5saW5lIE13b3JkIEw0X2ZwYWdlOjppc193aG9sZV9zcGFjZSgpIGNvbnN0CnsK
ICByZXR1cm4gKF9yYXcgPj4gMikgPT0gMzI7Cn0KCgoKaW5saW5lIE13b3JkIEw0X2ZwYWdlOjpp
b3BhZ2UoKSBjb25zdAp7CiAgcmV0dXJuIChfcmF3ICYgSU9QQUdFX01BU0spID4+IElPUEFHRV9T
SElGVDsKfQoKCgppbmxpbmUgdm9pZCBMNF9mcGFnZTo6aW9wYWdlKCBNd29yZCB3ICkKewogIF9y
YXcgPSAoX3JhdyAmIH5JT1BBR0VfTUFTSykgfCAoKHcgPDwgSU9QQUdFX1NISUZUKSAmIElPUEFH
RV9NQVNLKTsKfQoKCgppbmxpbmUgTXdvcmQgTDRfZnBhZ2U6OmlzX2lvcGFnZSgpIGNvbnN0CnsK
ICByZXR1cm4gKF9yYXcgJiBJT0lEX01BU0spID09IElPX0lEOwp9CgoKCmlubGluZSBMNF9mcGFn
ZSBMNF9mcGFnZTo6aW8oIE13b3JkIHBvcnQsIE13b3JkIHNpemUsIE13b3JkIGdyYW50ICkKewog
IHJldHVybiBMNF9mcGFnZSggKGdyYW50ID8gMSA6IDApCiAgICAgICAgICAgICAgICAgICB8ICgo
cG9ydCA8PCBJT1BBR0VfU0hJRlQpICYgSU9QQUdFX01BU0spCiAgICAgICAgICAgICAgICAgICB8
ICgoc2l6ZSA8PCBTSVpFX1NISUZUKSAmIFNJWkVfTUFTSykKICAgICAgICAgICAgICAgICAgIHwg
SU9fSUQgKTsKfQoKCgppbmxpbmUgTXdvcmQgTDRfZnBhZ2U6OmlzX3dob2xlX2lvX3NwYWNlKCkg
Y29uc3QKewogIHJldHVybiAoX3JhdyA+PiAyKSA9PSBXSE9MRV9JT19TUEFDRTsKfQoKCgppbmxp
bmUgTDRfc25kX2Rlc2M6Okw0X3NuZF9kZXNjKCBNd29yZCB3ICkKICA6IF9kKHcpCnt9CgoKCmlu
bGluZSBNd29yZCBMNF9zbmRfZGVzYzo6ZGVjZWl0ZSgpIGNvbnN0CnsKICByZXR1cm4gX2QgJiAx
Owp9CgoKCmlubGluZSBNd29yZCBMNF9zbmRfZGVzYzo6bWFwKCkgY29uc3QKewogIHJldHVybiBf
ZCAmIDI7Cn0KCgoKaW5saW5lIE13b3JkIEw0X3NuZF9kZXNjOjppc19sb25nX2lwYygpIGNvbnN0
CnsKICByZXR1cm4gX2QgJiB+MTsKfQoKCgppbmxpbmUgTXdvcmQgTDRfc25kX2Rlc2M6Omhhc19z
ZW5kKCkgY29uc3QKewogIHJldHVybiBfZCAhPSAoTXdvcmQpLTE7Cn0KCgoKaW5saW5lIHZvaWQg
Kkw0X3NuZF9kZXNjOjptc2coKSBjb25zdAp7CiAgcmV0dXJuICh2b2lkKikoX2QgJiB+Myk7Cn0K
CgoKCmlubGluZSBNd29yZCBMNF9yY3ZfZGVzYzo6cmF3KCkgY29uc3QKewogIHJldHVybiBfZDsK
fQoKCgppbmxpbmUgTDRfcmN2X2Rlc2MgTDRfcmN2X2Rlc2M6OnNob3J0X2ZwYWdlKCBMNF9mcGFn
ZSBmcCApCnsKICByZXR1cm4gTDRfcmN2X2Rlc2MoIDIgfCAoZnAucmF3KCkgJiB+MykgKTsKfQoK
CgppbmxpbmUgTDRfcmN2X2Rlc2M6Okw0X3Jjdl9kZXNjKCBNd29yZCB3KQogIDogX2QodykKe30K
CgoKaW5saW5lIE13b3JkIEw0X3Jjdl9kZXNjOjpvcGVuX3dhaXQoKSBjb25zdAp7CiAgcmV0dXJu
IF9kICYgMTsKfQoKCgppbmxpbmUgTXdvcmQgTDRfcmN2X2Rlc2M6OnJtYXAoKSBjb25zdAp7CiAg
cmV0dXJuIF9kICYgMjsKfQoKCgppbmxpbmUgdm9pZCAqTDRfcmN2X2Rlc2M6Om1zZygpIGNvbnN0
CnsKICByZXR1cm4gKHZvaWQqKShfZCAmIH4zKTsKfQoKCgppbmxpbmUgTDRfZnBhZ2UgTDRfcmN2
X2Rlc2M6OmZwYWdlKCkgY29uc3QKewogIHJldHVybiBMNF9mcGFnZSggX2QgJiB+MyApOwp9CgoK
CmlubGluZSBNd29yZCBMNF9yY3ZfZGVzYzo6aXNfcmVnaXN0ZXJfaXBjKCkgY29uc3QKewogIHJl
dHVybiAoX2QgJiB+MSkgPT0gMDsKfQoKCgppbmxpbmUgTXdvcmQgTDRfcmN2X2Rlc2M6Omhhc19y
ZWNlaXZlKCkgY29uc3QKewogIHJldHVybiBfZCAhPSAoTXdvcmQpLTE7Cn0KCgoKaW5saW5lIEw0
X3RpbWVvdXQ6Okw0X3RpbWVvdXQoIE13b3JkIHQgKQogIDogX3QodCkKe30KCgoKaW5saW5lIEw0
X3RpbWVvdXQ6Okw0X3RpbWVvdXQoIE13b3JkIHNuZF9tYW4sIE13b3JkIHNuZF9leHAsCiAgICAg
ICAgICAgICAgICAgICAgICAgIE13b3JkIHJjdl9tYW4sIE13b3JkIHJjdl9leHAsCiAgICAgICAg
ICAgICAgICAgICAgICAgIE13b3JkIHNuZF9wZmx0LCBNd29yZCByY3ZfcGZsdCApCiAgOiBfdCgg
KChzbmRfbWFuIDw8IFNORF9NQU5fU0hJRlQpICYgU05EX01BTl9NQVNLKSB8CiAgICAgICAgKChz
bmRfZXhwIDw8IFNORF9FWFBfU0hJRlQpICYgU05EX0VYUF9NQVNLKSB8CiAgICAgICAgKChyY3Zf
bWFuIDw8IFJDVl9NQU5fU0hJRlQpICYgUkNWX01BTl9NQVNLKSB8CiAgICAgICAgKChyY3ZfZXhw
IDw8IFJDVl9FWFBfU0hJRlQpICYgUkNWX0VYUF9NQVNLKSB8CiAgICAgICAgKChyY3ZfcGZsdCA8
PCBSQ1ZfUEZBVUxUX1NISUZUKSAmIFJDVl9QRkFVTFRfTUFTSykgfAogICAgICAgICgoc25kX3Bm
bHQgPDwgU05EX1BGQVVMVF9TSElGVCkgJiBTTkRfUEZBVUxUX01BU0spICkKe30KCgoKaW5saW5l
IFVuc2lnbmVkNjQgTDRfdGltZW91dDo6cmF3KCkKewogIHJldHVybiBfdDsKfQoKCgppbmxpbmUg
TXdvcmQgTDRfdGltZW91dDo6cmN2X2V4cCgpIGNvbnN0CnsKICByZXR1cm4gKF90ICYgUkNWX0VY
UF9NQVNLKSA+PiBSQ1ZfRVhQX1NISUZUOwp9CgoKCmlubGluZSB2b2lkIEw0X3RpbWVvdXQ6OnJj
dl9leHAoIE13b3JkIHcgKQp7CiAgX3QgPSAoX3QgJiB+UkNWX0VYUF9NQVNLKSB8ICgodyA8PCBS
Q1ZfRVhQX1NISUZUKSAmIFJDVl9FWFBfTUFTSyk7Cn0KCgoKaW5saW5lIE13b3JkIEw0X3RpbWVv
dXQ6OnNuZF9leHAoKSBjb25zdAp7CiAgcmV0dXJuIChfdCAmIFNORF9FWFBfTUFTSykgPj4gU05E
X0VYUF9TSElGVDsKfQoKCgppbmxpbmUgdm9pZCBMNF90aW1lb3V0OjpzbmRfZXhwKCBNd29yZCB3
ICkKewogIF90ID0gKF90ICYgflNORF9FWFBfTUFTSykgfCAoKHcgPDwgU05EX0VYUF9TSElGVCkg
JiBTTkRfRVhQX01BU0spOwp9CgoKCmlubGluZSBNd29yZCBMNF90aW1lb3V0OjpyY3ZfcGZhdWx0
KCkgY29uc3QKewogIHJldHVybiAoX3QgJiBSQ1ZfUEZBVUxUX01BU0spID4+IFJDVl9QRkFVTFRf
U0hJRlQ7Cn0KCgoKaW5saW5lIHZvaWQgTDRfdGltZW91dDo6cmN2X3BmYXVsdCggTXdvcmQgdyAp
CnsKICBfdCA9IChfdCAmIH5SQ1ZfUEZBVUxUX01BU0spIHwgKCh3IDw8IFJDVl9QRkFVTFRfU0hJ
RlQpICYgUkNWX1BGQVVMVF9NQVNLKTsKfQoKCgppbmxpbmUgTXdvcmQgTDRfdGltZW91dDo6c25k
X3BmYXVsdCgpIGNvbnN0CnsKICByZXR1cm4gKF90ICYgU05EX1BGQVVMVF9NQVNLKSA+PiBTTkRf
UEZBVUxUX1NISUZUOwp9CgoKCmlubGluZSB2b2lkIEw0X3RpbWVvdXQ6OnNuZF9wZmF1bHQoIE13
b3JkIHcgKQp7CiAgX3QgPSAoX3QgJiB+U05EX1BGQVVMVF9NQVNLKSB8ICgodyA8PCBTTkRfUEZB
VUxUX1NISUZUKSAmIFNORF9QRkFVTFRfTUFTSyk7Cn0KCgoKaW5saW5lIE13b3JkIEw0X3RpbWVv
dXQ6OnJjdl9tYW4oKSBjb25zdAp7CiAgcmV0dXJuIChfdCAmIFJDVl9NQU5fTUFTSykgPj4gUkNW
X01BTl9TSElGVDsKfQoKCgppbmxpbmUgdm9pZCBMNF90aW1lb3V0OjpyY3ZfbWFuKCBNd29yZCB3
ICkKewogIF90ID0gKF90ICYgflJDVl9NQU5fTUFTSykgfCAoKHcgPDwgUkNWX01BTl9TSElGVCkg
JiBSQ1ZfTUFOX01BU0spOwp9CgoKCmlubGluZSBNd29yZCBMNF90aW1lb3V0OjpzbmRfbWFuKCkg
Y29uc3QKewogIHJldHVybiAoX3QgJiBTTkRfTUFOX01BU0spID4+IFNORF9NQU5fU0hJRlQ7Cn0K
CgoKaW5saW5lIHZvaWQgTDRfdGltZW91dDo6c25kX21hbiggTXdvcmQgdyApCnsKICBfdCA9IChf
dCAmIH5TTkRfTUFOX01BU0spIHwgKCh3IDw8IFNORF9NQU5fU0hJRlQpICYgU05EX01BTl9NQVNL
KTsKfQoKCgppbmxpbmUgVW5zaWduZWQ2NCBMNF90aW1lb3V0OjpyY3ZfbWljcm9zZWNzKCkgY29u
c3QKewogIHJldHVybiAoVW5zaWduZWQ2NCkocmN2X21hbigpKSA8PCAoKDE1IC0gcmN2X2V4cCgp
KSA8PCAxKTsKfQoKCgppbmxpbmUgVW5zaWduZWQ2NCBMNF90aW1lb3V0OjpzbmRfbWljcm9zZWNz
KCkgY29uc3QKewogIHJldHVybiAoVW5zaWduZWQ2NCkoc25kX21hbigpKSA8PCAoKDE1IC0gc25k
X2V4cCgpKSA8PCAxKTsKfQoKCgppbmxpbmUgdW5zaWduZWQgY29uc3QgTDRfdWlkOjp0aHJlYWRz
X3Blcl90YXNrKCkKewogIHJldHVybiAxPDxMVEhSRUFEX1NJWkU7Cn0KCgoKaW5saW5lIGJvb2wg
TDRfdWlkOjpvcGVyYXRvciA9PSAoIEw0X3VpZCBvICkgY29uc3QKewogIHJldHVybiBvLl9yYXcg
PT0gX3JhdzsKfQoKCgppbmxpbmUgTDRfdWlkOjpMNF91aWQoIFVuc2lnbmVkNjQgdyApCiAgOiBf
cmF3KHcpCnt9CgoKCmlubGluZSBMNF91aWQ6Okw0X3VpZCggVGFza19udW0gdGFzaywgTFRocmVh
ZF9udW0gbHRocmVhZCApCiAgOiBfcmF3KCAoKChVbnNpZ25lZDY0KXRhc2sgPDwgVEFTS19TSElG
VCApICYgVEFTS19NQVNLICkKICAgICAgICAgIHwgKCgoVW5zaWduZWQ2NClsdGhyZWFkIDw8IExU
SFJFQURfU0hJRlQpICYgTFRIUkVBRF9NQVNLKSkKe30KCgoKaW5saW5lIEw0X3VpZDo6TDRfdWlk
KCBUYXNrX251bSB0YXNrLCBMVGhyZWFkX251bSBsdGhyZWFkLCB1bnNpZ25lZCBzaXRlLAogICAg
ICAgICAgICAgICAgVGFza19udW0gY2hpZWYsIHVuc2lnbmVkIG5lc3QsIHVuc2lnbmVkIHZlcnNp
b24gKQogIDogX3JhdyAoICgoKFVuc2lnbmVkNjQpdGFzayA8PCBUQVNLX1NISUZUKSAmIFRBU0tf
TUFTSyApCiAgICAgICAgICB8ICgoKFVuc2lnbmVkNjQpbHRocmVhZCA8PCBMVEhSRUFEX1NISUZU
KSAmIExUSFJFQURfTUFTSyApCiAgICAgICAgICB8ICgoKFVuc2lnbmVkNjQpc2l0ZSA8PCBTSVRF
X1NISUZUKSAmIFNJVEVfTUFTSyApCiAgICAgICAgICB8ICgoKFVuc2lnbmVkNjQpY2hpZWYgPDwg
Q0hJRUZfU0hJRlQpICYgQ0hJRUZfTUFTSyApCiAgICAgICAgICB8ICgoKFVuc2lnbmVkNjQpbmVz
dCA8PCBORVNUX1NISUZUKSAmIE5FU1RfTUFTSyApCiAgICAgICAgICB8ICgoKFVuc2lnbmVkNjQp
dmVyc2lvbiA8PCBWRVJTSU9OX0xPV19TSElGVCkgJiBWRVJTSU9OX0xPV19NQVNLICkKICAgICAg
ICAgIHwgKCgoVW5zaWduZWQ2NCl2ZXJzaW9uIDw8IFZFUlNJT05fSElHSF9TSElGVCkgJiBWRVJT
SU9OX0hJR0hfTUFTSykgKQp7fQoKCgppbmxpbmUgdW5zaWduZWQgTDRfdWlkOjp2ZXJzaW9uKCkg
Y29uc3QKewogIHJldHVybiAoKF9yYXcgJiBWRVJTSU9OX0hJR0hfTUFTSykgPj4gVkVSU0lPTl9I
SUdIX1NISUZUKQogICAgICAgfCAoKF9yYXcgJiBWRVJTSU9OX0xPV19NQVNLICkgPj4gVkVSU0lP
Tl9MT1dfU0hJRlQpOwp9CgoKCmlubGluZSBMVGhyZWFkX251bSBMNF91aWQ6Omx0aHJlYWQoKSBj
b25zdAp7CgogIHJldHVybiAoKHVuc2lnbmVkKV9yYXcgJiBMVEhSRUFEX01BU0spID4+IExUSFJF
QURfU0hJRlQ7Cn0KCgoKaW5saW5lIFRhc2tfbnVtIEw0X3VpZDo6dGFzaygpIGNvbnN0CnsKCiAg
cmV0dXJuICgodW5zaWduZWQpX3JhdyAmIFRBU0tfTUFTSykgPj4gVEFTS19TSElGVDsKfQoKCgpp
bmxpbmUgR1RocmVhZF9udW0gTDRfdWlkOjpndGhyZWFkKCkgY29uc3QKewoKICByZXR1cm4gKCgo
dW5zaWduZWQpX3JhdyAmIExUSFJFQURfTUFTSykgPj4gTFRIUkVBRF9TSElGVCkgfAogICAgICAg
ICAoKCh1bnNpZ25lZClfcmF3ICYgVEFTS19NQVNLICkgPj4gKFRBU0tfU0hJRlQgLSBMVEhSRUFE
X1NJWkUpKTsKfQoKCgppbmxpbmUgdW5zaWduZWQgTDRfdWlkOjpzaXRlKCkgY29uc3QKewogIHJl
dHVybiAoX3JhdyAmIFNJVEVfTUFTSykgPj4gU0lURV9TSElGVDsKfQoKCgppbmxpbmUgdW5zaWdu
ZWQgTDRfdWlkOjpjaGllZigpIGNvbnN0CnsKICByZXR1cm4gKF9yYXcgJiBDSElFRl9NQVNLKSA+
PiBDSElFRl9TSElGVDsKfQoKCgppbmxpbmUgdW5zaWduZWQgTDRfdWlkOjpuZXN0KCkgY29uc3QK
ewogIHJldHVybiAoX3JhdyAmIE5FU1RfTUFTSykgPj4gTkVTVF9TSElGVDsKfQoKCgppbmxpbmUg
dm9pZCBMNF91aWQ6OnZlcnNpb24oIHVuc2lnbmVkIHcgKQp7CiAgX3JhdyA9IChfcmF3ICYgfihW
RVJTSU9OX0xPV19NQVNLIHwgVkVSU0lPTl9ISUdIX01BU0spKQogICAgICAgfCAoKChVbnNpZ25l
ZDY0KXcgPDwgVkVSU0lPTl9MT1dfU0hJRlQpICYgVkVSU0lPTl9MT1dfTUFTSykKICAgICAgIHwg
KCgoVW5zaWduZWQ2NCl3IDw8IFZFUlNJT05fSElHSF9TSElGVCkgJiBWRVJTSU9OX0hJR0hfTUFT
Syk7Cn0KCgoKaW5saW5lIHZvaWQgTDRfdWlkOjpsdGhyZWFkKCBMVGhyZWFkX251bSB3ICkKewog
IF9yYXcgPSAoX3JhdyAmIH5MVEhSRUFEX01BU0spCiAgICAgICB8ICgoKFVuc2lnbmVkNjQpdyA8
PCBMVEhSRUFEX1NISUZUKSAmIExUSFJFQURfTUFTSyk7Cn0KCgoKaW5saW5lIHZvaWQgTDRfdWlk
Ojp0YXNrKCBUYXNrX251bSB3ICkKewogIF9yYXcgPSAoX3JhdyAmIH5UQVNLX01BU0spCiAgICAg
ICB8ICgoKFVuc2lnbmVkNjQpdyA8PCBUQVNLX1NISUZUKSAmIFRBU0tfTUFTSyk7Cn0KCgoKaW5s
aW5lIHZvaWQgTDRfdWlkOjpzaXRlKCB1bnNpZ25lZCB3ICkKewogIF9yYXcgPSAoX3JhdyAmIH5T
SVRFX01BU0spIHwgKCgoVW5zaWduZWQ2NCl3IDw8IFNJVEVfU0hJRlQpICYgU0lURV9NQVNLKTsK
fQoKCgppbmxpbmUgdm9pZCBMNF91aWQ6OmNoaWVmKCBUYXNrX251bSB3ICkKewogIF9yYXcgPSAo
X3JhdyAmIH5DSElFRl9NQVNLKSB8ICgoKFVuc2lnbmVkNjQpdyA8PCBDSElFRl9TSElGVCkgJiBD
SElFRl9NQVNLKTsKfQoKCgppbmxpbmUgdm9pZCBMNF91aWQ6Om5lc3QoIHVuc2lnbmVkIHcgKQp7
CiAgX3JhdyA9IChfcmF3ICYgfk5FU1RfTUFTSykgfCAoKChVbnNpZ25lZDY0KXcgPDwgTkVTVF9T
SElGVCkgJiBORVNUX01BU0spOwp9CgoKCmlubGluZSBNd29yZCBMNF91aWQ6OmlzX25pbCgpIGNv
bnN0CnsKICByZXR1cm4gKF9yYXcgJiBMT1dfTUFTSykgPT0gMDsKfQoKCgppbmxpbmUgTXdvcmQg
TDRfdWlkOjppc19pbnZhbGlkKCkgY29uc3QKewogIHJldHVybiAoX3JhdyAmIExPV19NQVNLKSA9
PSBJTlZBTElEOwp9CgoKCmlubGluZSBMNF91aWQgTDRfdWlkOjp0YXNrX2lkKCkgY29uc3QKewog
IHJldHVybiBMNF91aWQoIF9yYXcgJiB+TFRIUkVBRF9NQVNLICk7Cn0KCgoKaW5saW5lIEw0X3Vp
ZCBMNF91aWQ6OmlycSggdW5zaWduZWQgaXJxICkKewogIHJldHVybiBMNF91aWQoIChpcnEgKyAx
KSAmIElSUV9NQVNLICk7Cn0KCgoKaW5saW5lIE13b3JkIEw0X3VpZDo6aXNfaXJxKCkgY29uc3QK
ewogIHJldHVybiAoX3JhdyAmIH5JUlFfTUFTSykgPT0gMCAmJiBfcmF3Owp9CgoKCmlubGluZSBN
d29yZCBMNF91aWQ6OmlycSgpIGNvbnN0CnsKICByZXR1cm4gX3Jhdy0xOwp9CgoKCmlubGluZSBV
bnNpZ25lZDY0IEw0X3VpZDo6cmF3KCkgY29uc3QKewogIHJldHVybiBfcmF3Owp9CgoKCmlubGlu
ZSBMNF9tc2dkb3BlOjpMNF9tc2dkb3BlKCBNd29yZCBtd29yZHMsIE13b3JkIHN0cmluZ3MgKQog
IDogX3JhdyggKChzdHJpbmdzIDw8IFNUUklOR1NfU0hJRlQpICYgU1RSSU5HU19NQVNLKQogICAg
ICAgICAgfCgobXdvcmRzIDw8IE1XT1JEU19TSElGVCkgJiBNV09SRFNfTUFTSykgKQp7fQoKCgpp
bmxpbmUgTDRfbXNnZG9wZTo6TDRfbXNnZG9wZSggTXdvcmQgcmF3ICkKICA6IF9yYXcocmF3KQp7
fQoKCgppbmxpbmUgTXdvcmQgTDRfbXNnZG9wZTo6cmF3KCkgY29uc3QKewogIHJldHVybiBfcmF3
Owp9CgoKCmlubGluZSBNd29yZCBMNF9tc2dkb3BlOjpkZWNlaWRldCgpIGNvbnN0CnsKICByZXR1
cm4gX3JhdyAmICgxIDw8IERFQ0VJVEVfQklUKTsKfQoKCgppbmxpbmUgTXdvcmQgTDRfbXNnZG9w
ZTo6ZnBhZ2VfcmVjZWl2ZWQoKSBjb25zdAp7CiAgcmV0dXJuIF9yYXcgJiAoMSA8PCBGUEFHRV9C
SVQpOwp9CgoKCmlubGluZSBNd29yZCBMNF9tc2dkb3BlOjpyZWRpcmVjdGVkKCkgY29uc3QKewog
IHJldHVybiBfcmF3ICYgKDEgPDwgUkVESVJFQ1RFRF9CSVQpOwp9CgoKCmlubGluZSBNd29yZCBM
NF9tc2dkb3BlOjpzcmNfaW5zaWRlKCkgY29uc3QKewogIHJldHVybiBfcmF3ICYgKDEgPDwgU1JD
X0lOU0lERV9CSVQpOwp9CgoKCmlubGluZSBNd29yZCBMNF9tc2dkb3BlOjpzbmRfZXJyb3IoKSBj
b25zdAp7CiAgcmV0dXJuIF9yYXcgJiAoMSA8PCBTTkRfRVJST1JfQklUKTsKfQoKCgppbmxpbmUg
TXdvcmQgTDRfbXNnZG9wZTo6c3RyaW5ncygpIGNvbnN0CnsKICByZXR1cm4gKF9yYXcgJiBTVFJJ
TkdTX01BU0spID4+IFNUUklOR1NfU0hJRlQ7Cn0KCgoKaW5saW5lIE13b3JkIEw0X21zZ2RvcGU6
Om13b3JkcygpIGNvbnN0CnsKICByZXR1cm4gKF9yYXcgJiBNV09SRFNfTUFTSykgPj4gTVdPUkRT
X1NISUZUOwp9CgoKCmlubGluZSB2b2lkIEw0X21zZ2RvcGU6Om13b3JkcyggTXdvcmQgdyApCnsK
ICBfcmF3ID0gKF9yYXcgJiB+TVdPUkRTX01BU0spIHwgKCh3PDxNV09SRFNfU0hJRlQpICYgTVdP
UkRTX01BU0spOwp9CgoKCmlubGluZSB2b2lkIEw0X21zZ2RvcGU6OnN0cmluZ3MoIE13b3JkIHcg
KQp7CiAgX3JhdyA9IChfcmF3ICYgflNUUklOR1NfTUFTSykgfCAoKHc8PFNUUklOR1NfU0hJRlQp
ICYgU1RSSU5HU19NQVNLKTsKfQoKCgppbmxpbmUgTXdvcmQgTDRfbXNnZG9wZTo6aGFzX2Vycm9y
KCkgY29uc3QKewogIHJldHVybiBfcmF3ICYgRVJST1JfTUFTSzsKfQoKCgppbmxpbmUgTXdvcmQg
TDRfbXNnZG9wZTo6ZXJyb3IoKSBjb25zdAp7CiAgcmV0dXJuIF9yYXcgJiBFUlJPUl9NQVNLOwp9
CgoKCmlubGluZSBNd29yZCBMNF9tc2dkb3BlOjpyY3ZfbWFwX2ZhaWxlZCgpIGNvbnN0CnsKICBy
ZXR1cm4gKF9yYXcgJiBFUlJPUl9NQVNLKSA9PSBSRU1BUEZBSUxFRDsKfQoKCgppbmxpbmUgTXdv
cmQgTDRfbXNnZG9wZTo6c25kX21hcF9mYWlsZWQoKSBjb25zdAp7CiByZXR1cm4gKF9yYXcgJiBF
UlJPUl9NQVNLKSA9PSBTRU1BUEZBSUxFRDsKfQoKCgppbmxpbmUgdm9pZCBMNF9tc2dkb3BlOjpl
cnJvciggTXdvcmQgZSApCnsKICBfcmF3ID0gKF9yYXcgJiB+RVJST1JfTUFTSykgfCAoZSAmIEVS
Uk9SX01BU0spOwp9CgoKCmlubGluZSB2b2lkIEw0X21zZ2RvcGU6OmZwYWdlX3JlY2VpdmVkKCBN
d29yZCB3ICkKewogIGlmKHcpCiAgICBfcmF3IHw9ICgxTDw8RlBBR0VfQklUKTsKICBlbHNlCiAg
ICBfcmF3ICY9IH4oMUw8PEZQQUdFX0JJVCk7Cn0KCgoKaW5saW5lIHZvaWQgTDRfbXNnZG9wZTo6
Y29tYmluZSggTDRfbXNnZG9wZSBvICkKewogIF9yYXcgPSAoX3JhdyAmIH5FUlJPUl9NQVNLKSB8
IG8uX3JhdzsKfQoKCgppbmxpbmUgTDRfc2NoZWRfcGFyYW06Okw0X3NjaGVkX3BhcmFtKCBNd29y
ZCByYXcgKQogIDogX3JhdyhyYXcpCnt9CgoKCmlubGluZSBNd29yZCBMNF9zY2hlZF9wYXJhbTo6
cHJpbygpIGNvbnN0CnsKICByZXR1cm4gKF9yYXcgJiBQUklPX01BU0spID4+IFBSSU9fU0hJRlQ7
Cn0KCgoKaW5saW5lIHZvaWQgTDRfc2NoZWRfcGFyYW06OnByaW8oIE13b3JkIHAgKQp7CiAgX3Jh
dyA9IChfcmF3ICYgflBSSU9fTUFTSykgfCAoKHA8PFBSSU9fU0hJRlQpICYgUFJJT19NQVNLKTsK
fQoKCgppbmxpbmUgTXdvcmQgTDRfc2NoZWRfcGFyYW06OnNtYWxsKCkgY29uc3QKewogIHJldHVy
biAoX3JhdyAmIFNNQUxMX01BU0spID4+IFNNQUxMX1NISUZUOwp9CgoKCmlubGluZSB2b2lkIEw0
X3NjaGVkX3BhcmFtOjpzbWFsbCggTXdvcmQgcyApCnsKICBfcmF3ID0gKF9yYXcgJiB+U01BTExf
TUFTSykgfCAoKHM8PFNNQUxMX1NISUZUKSAmIFNNQUxMX01BU0spOwp9CgoKCmlubGluZSBNd29y
ZCBMNF9zY2hlZF9wYXJhbTo6dGltZV9leHAoKSBjb25zdAp7CiAgcmV0dXJuIChfcmF3ICYgVElN
RV9FWFBfTUFTSykgPj4gVElNRV9FWFBfU0hJRlQ7Cn0KCgoKaW5saW5lIHZvaWQgTDRfc2NoZWRf
cGFyYW06OnRpbWVfZXhwKCBNd29yZCBlICkKewogIF9yYXcgPSAoX3JhdyAmIH5USU1FX0VYUF9N
QVNLKSB8ICgoZTw8VElNRV9FWFBfU0hJRlQpICYgVElNRV9FWFBfTUFTSyk7Cn0KCgoKaW5saW5l
IE13b3JkIEw0X3NjaGVkX3BhcmFtOjp0aW1lX21hbigpIGNvbnN0CnsKICByZXR1cm4gKF9yYXcg
JiBUSU1FX01BTl9NQVNLKSA+PiBUSU1FX01BTl9TSElGVDsKfQoKCgppbmxpbmUgdm9pZCBMNF9z
Y2hlZF9wYXJhbTo6dGltZV9tYW4oIE13b3JkIG0gKQp7CiAgX3JhdyA9IChfcmF3ICYgflRJTUVf
TUFOX01BU0spIHwgKChtPDxUSU1FX01BTl9TSElGVCkgJiBUSU1FX01BTl9NQVNLKTsKfQoKCgpp
bmxpbmUgTXdvcmQgTDRfc2NoZWRfcGFyYW06OmVycm9yKCkgY29uc3QKewogIHJldHVybiAoX3Jh
dyAmIEVSUk9SX01BU0spID4+IEVSUk9SX1NISUZUOwp9CgoKCmlubGluZSB2b2lkIEw0X3NjaGVk
X3BhcmFtOjplcnJvciggTXdvcmQgZSApCnsKICBfcmF3ID0gKF9yYXcgJiB+RVJST1JfTUFTSykg
fCAoKGU8PEVSUk9SX1NISUZUKSAmIEVSUk9SX01BU0spOwp9CgoKCmlubGluZSBNd29yZCBMNF9z
Y2hlZF9wYXJhbTo6cmF3KCkgY29uc3QKewogIHJldHVybiBfcmF3Owp9CgoKCmlubGluZSBNd29y
ZCBMNF9zY2hlZF9wYXJhbTo6aXNfdmFsaWQoKSBjb25zdAp7CiAgcmV0dXJuIF9yYXcgIT0gKE13
b3JkKS0xOwp9CgoKCmlubGluZSB2b2lkIEw0X3NjaGVkX3BhcmFtOjp0aW1lKCBVbnNpZ25lZDY0
IHQgKQp7CiAgTXdvcmQgZXhwID0gMTU7CiAgd2hpbGUgKHQgPiAyNTUpCiAgICB7CiAgICAgIHQg
Pj49IDI7CiAgICAgIGV4cC0tOwogICAgfQoKICB0aW1lX2V4cChleHApOwogIHRpbWVfbWFuKHQp
Owp9CgoKCmlubGluZSBVbnNpZ25lZDY0IEw0X3NjaGVkX3BhcmFtOjp0aW1lKCkKewogIGlmKHRp
bWVfZXhwKCkpCiAgICB7CiAgICAgIGlmKHRpbWVfbWFuKCkpCiAgICAgICAgcmV0dXJuIChVbnNp
Z25lZDY0KXRpbWVfbWFuKCkgPDwgKCgxNS10aW1lX2V4cCgpKSA8PCAxKTsKICAgICAgZWxzZQog
ICAgICAgIHJldHVybiAwOwogICAgfQogIGVsc2UKICAgIHJldHVybiAoVW5zaWduZWQ2NCktMTsK
fQojIDkgImF1dG8vY29uZmlnLmgiIDIKIyAxICIuLi9zcmMva2Vybi9jb25maWdfdGNic2l6ZS5o
IiAxCiMgMTAgImF1dG8vY29uZmlnLmgiIDIKIyA0NiAiYXV0by9jb25maWcuaCIKY2xhc3MgQ29u
ZmlnCnsKcHVibGljOgoKICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qga2VybmVsX3ZlcnNpb25f
c3RyaW5nOwoKICBlbnVtIHsKICAgIE1BWF9OVU1fSVJRID0gMjAsCiAgICBTRVJJQUxfRVNDX0lS
USA9IDIsCiAgICBTRVJJQUxfRVNDX05PSVJRID0gMSwKICAgIFNFUklBTF9OT19FU0MgPSAwLAog
IH07CgoKICBzdGF0aWMgY29uc3QgdW5zaWduZWQga2VybmVsX3ZlcnNpb25faWQgPSAweDAxMDA0
NDQ0OwojIDcwICJhdXRvL2NvbmZpZy5oIgogIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBrZXJuZWxf
bWVtX3Blcl9jZW50ID0gMTA7CgogIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB0aHJlYWRfYmxvY2tf
c2l6ZSA9ICgweDgwMCk7CgogIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB0aHJlYWRfYmxvY2tfbWFz
awogICAgPSAodGhyZWFkX2Jsb2NrX3NpemUgLSAxKSB8IH4oKHRocmVhZF9ibG9ja19zaXplIDw8
ICgxMSs3KSkgLSAxKTsKICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdGhyZWFkX2Jsb2NrX2lkX2Zh
Y3RvciA9IHRocmVhZF9ibG9ja19zaXplLzB4NDAwOwoKICBzdGF0aWMgY29uc3QgYm9vbCBjb25z
ZXJ2YXRpdmUgPSBmYWxzZTsKICBzdGF0aWMgY29uc3QgYm9vbCBtb25pdG9yX3BhZ2VfZmF1bHRz
ID0gY29uc2VydmF0aXZlOwoKCiAgc3RhdGljIGNvbnN0IGJvb2wgZGVjZWl0X2JpdF9kaXNhYmxl
c19zd2l0Y2ggPSB0cnVlOwoKCgogIHN0YXRpYyBjb25zdCBib29sIGZpbmVfZ3JhaW5lZF9jcHV0
aW1lID0gZmFsc2U7CgogIHN0YXRpYyBib29sIGlycV9hY2tfaW5fa2VybmVsOwoKICBzdGF0aWMg
Ym9vbCBlc2NfaGFjazsKICBzdGF0aWMgaW50IHNlcmlhbF9lc2M7CiAgc3RhdGljIGJvb2wgd2F0
Y2hkb2c7CiAgc3RhdGljIGJvb2wgYXBpYzsKCiAgc3RhdGljIHVuc2lnbmVkIHRidWZfZW50cmll
czsKCgoKCiAgc3RhdGljIGNvbnN0IGJvb2wgcHJvZmlsaW5nID0gZmFsc2U7CgogIHN0YXRpYyBj
b25zdCBpbnQgcHJvZmlsaW5nX3JhdGUgPSAxMDA7CiAgc3RhdGljIGNvbnN0IGludCBwcm9maWxl
X2lycSA9IDA7CgoKICBzdGF0aWMgY29uc3QgdW5zaWduZWQga2VybmVsX3Rhc2tubyA9IDA7CiAg
c3RhdGljIGNvbnN0IEw0X3VpZCBrZXJuZWxfaWQ7CiAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtl
cm5lbF9wcmlvID0gMTsKICBzdGF0aWMgY29uc3QgdW5zaWduZWQga2VybmVsX21jcCA9IDI1NTsK
CgogIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaWdtYTBfdGFza25vID0gMjsKICBzdGF0aWMgY29u
c3QgTDRfdWlkIHNpZ21hMF9pZDsKICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2lnbWEwX3ByaW8g
PSAweDEwOwogIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaWdtYTBfbWNwID0gMDsKCgogIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBib290X3Rhc2tubyA9IDQ7CiAgc3RhdGljIGNvbnN0IEw0X3VpZCBi
b290X2lkOwogIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBib290X3ByaW8gPSAweDEwOwogIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBib290X21jcCA9IDI1NTsKCgogIHN0YXRpYyBjb25zdCBpbnQgZGVm
YXVsdF90aW1lX3NsaWNlID0gMTA7CgoKICBlbnVtIHsKCgoKICAgIFgyX0xJS0VfU1lTX0NBTExT
ID0gMSwKCiAgfTsKCnByaXZhdGU6CgpwdWJsaWM6CgogIGVudW0gewogICAgVEJVRl9JUlEgPSAx
NiwKICB9OwoKICBzdGF0aWMgY29uc3QgYm9vbCBiYWNrd2FyZF9jb21wYXRpYmlsaXR5ID0gdHJ1
ZTsKCgogIHN0YXRpYyBjb25zdCBib29sIHNjaGVkdWxpbmdfdXNpbmdfcGl0ID0gdHJ1ZTsKCgoK
CgogIHN0YXRpYyBjb25zdCBib29sIGhsdF93b3Jrc19vayA9IHRydWU7CgogIHN0YXRpYyBjb25z
dCBib29sIGdldGNoYXJfZG9lc19obHQgPSB0cnVlOwoKCgogIHN0YXRpYyBjb25zdCBib29sIHBp
Y19wcmlvX21vZGlmeSA9IHRydWU7CgoKCgoKCiAgc3RhdGljIGNvbnN0IGJvb2wgZW5hYmxlX2lv
X3Byb3RlY3Rpb24gPSBmYWxzZTsKCgogIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaWNyb3NlY19w
ZXJfdGljayA9IDEwMDBMTDsKIyAxNzggImF1dG8vY29uZmlnLmgiCiAgc3RhdGljIHVuc2lnbmVk
IGNvbnN0IGRlZmF1bHRfY29uc29sZV91YXJ0ID0gMjsKICBzdGF0aWMgdW5zaWduZWQgY29uc3Qg
ZGVmYXVsdF9jb25zb2xlX3VhcnRfYmF1ZHJhdGUgPSAxMTUyMDA7Cgpwcml2YXRlOgoKcHVibGlj
OgoKICBlbnVtIHsKICAgIFBBR0VfU0hJRlQgPSAxMiwKICAgIFBBR0VfU0laRSA9IDEgPDwgUEFH
RV9TSElGVCwKICAgIFBBR0VfTUFTSyA9IH4oIFBBR0VfU0laRSAtIDEpLAoKICAgIFNVUEVSUEFH
RV9TSElGVCA9IDIyLAogICAgU1VQRVJQQUdFX1NJWkUgPSAxIDw8IFNVUEVSUEFHRV9TSElGVCwK
ICAgIFNVUEVSUEFHRV9NQVNLID0gfiggU1VQRVJQQUdFX1NJWkUgLTEgKSwKCiAgfTsKCiAgZW51
bSB7CiAgICBBVVRPX01BUF9LSVBfQUREUkVTUyA9IDB4YmZmZjAwMDAsCiAgfTsKCgpwdWJsaWM6
CgogIHN0YXRpYyB2b2lkIGluaXQoKTsKfTsKIyAxMSAiYXV0by9wcm9maWxlX2kuaCIgMgojIDEg
ImF1dG8va21lbS5oIiAxCgoKCgoKCiMgMSAiYXV0by9raXAuaCIgMQojIDE3ICJhdXRvL2tpcC5o
IgpzdHJ1Y3QgS2VybmVsX2luZm8KewoKICBNd29yZCBtYWdpYzsKICBNd29yZCB2ZXJzaW9uOwog
IFVuc2lnbmVkOCBvZmZzZXRfdmVyc2lvbl9zdHJpbmdzOwogIFVuc2lnbmVkOCByZXNlcnZlZFsz
XTsKICBVbnNpZ25lZDgga2lwX3N5c19jYWxsczsKICBVbnNpZ25lZDggcmVzZXJ2ZWQwMVszXTsK
CgoKCgoKCiAgTXdvcmQgaW5pdF9kZWZhdWx0X2tkZWJ1ZywgZGVmYXVsdF9rZGVidWdfZXhjZXB0
aW9uLAogICAgX191bmtub3duLCBkZWZhdWx0X2tkZWJ1Z19lbmQ7CgoKICBNd29yZCBzaWdtYTBf
ZXNwLCBzaWdtYTBfZWlwOwogIGw0X2xvd19oaWdoX3Qgc2lnbWEwX21lbW9yeTsKCgogIE13b3Jk
IHNpZ21hMV9lc3AsIHNpZ21hMV9laXA7CiAgbDRfbG93X2hpZ2hfdCBzaWdtYTFfbWVtb3J5OwoK
CiAgTXdvcmQgcm9vdF9lc3AsIHJvb3RfZWlwOwogIGw0X2xvd19oaWdoX3Qgcm9vdF9tZW1vcnk7
CgoKICBNd29yZCBsNF9jb25maWc7CiAgTXdvcmQgcmVzZXJ2ZWQyOwogIE13b3JkIGtkZWJ1Z19j
b25maWc7CiAgTXdvcmQga2RlYnVnX3Blcm1pc3Npb247CgoKICBsNF9sb3dfaGlnaF90IG1haW5f
bWVtb3J5OwogIGw0X2xvd19oaWdoX3QgcmVzZXJ2ZWQwOwoKCiAgbDRfbG93X2hpZ2hfdCByZXNl
cnZlZDE7CiAgbDRfbG93X2hpZ2hfdCBzZW1pX3Jlc2VydmVkOwoKCiAgbDRfbG93X2hpZ2hfdCBk
ZWRpY2F0ZWRbNF07CgoKICB2b2xhdGlsZSBDcHVfdGltZSBjbG9jazsKICBNd29yZCB1bnVzZWRf
NFsyXTsKCgogIE13b3JkIGZyZXF1ZW5jaWVzWzJdOwogIE13b3JkIHVudXNlZF81WzJdOwoKCiAg
TXdvcmQgc3lzX2lwYzsKICBNd29yZCBzeXNfaWRfbmVhcmVzdDsKICBNd29yZCBzeXNfZnBhZ2Vf
dW5tYXA7CiAgTXdvcmQgc3lzX3RocmVhZF9zd2l0Y2g7CgoKICBNd29yZCBzeXNfdGhyZWFkX3Nj
aGVkdWxlOwogIE13b3JkIHN5c19sdGhyZWFkX2V4X3JlZ3M7CiAgTXdvcmQgc3lzX3Rhc2tfbmV3
OwogIE13b3JkIHVudXNlZF82OwoKCiAgY2hhciB2ZXJzaW9uX3N0cmluZ3NbMjU2XTsKICBjaGFy
IHN5c19jYWxsc1tdOwp9OwojIDggImF1dG8va21lbS5oIiAyCgojIDEgIi4uL3NyYy9saWIvbWlu
aWxpYmMvaW5jbHVkZS9jc3RkZGVmIiAxCgoKCgoKIyAxICIvaG9tZS9hZGFtL2Vyd2luL3RtcC9n
Y2MvMy4zL2luc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3Rk
ZGVmLmgiIDEgMyA0CiMgNyAiLi4vc3JjL2xpYi9taW5pbGliYy9pbmNsdWRlL2NzdGRkZWYiIDIK
Cm5hbWVzcGFjZSBzdGQgewoKCgogIHVzaW5nIDo6cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90
OwoKCgp9OwojIDEwICJhdXRvL2ttZW0uaCIgMgoKCgojIDEgIi4uL3NyYy9saWIva2Vybi9pbmNs
dWRlL2ZsdXgveDg2L211bHRpYm9vdC5oIiAxCiMgMjQgIi4uL3NyYy9saWIva2Vybi9pbmNsdWRl
L2ZsdXgveDg2L211bHRpYm9vdC5oIgojIDEgIi4uL3NyYy9saWIva2Vybi9pbmNsdWRlL2ZsdXgv
eDg2L3R5cGVzLmgiIDEKIyA0NiAiLi4vc3JjL2xpYi9rZXJuL2luY2x1ZGUvZmx1eC94ODYvdHlw
ZXMuaCIKdHlwZWRlZiB1bnNpZ25lZCBpbnQgbmF0dXJhbF90OwojIDU1ICIuLi9zcmMvbGliL2tl
cm4vaW5jbHVkZS9mbHV4L3g4Ni90eXBlcy5oIgp0eXBlZGVmIGludCBpbnRlZ2VyX3Q7CgoKCgoK
dHlwZWRlZiBuYXR1cmFsX3Qgdm1fb2Zmc2V0X3Q7CgoKCgoKCnR5cGVkZWYgbmF0dXJhbF90IHZt
X3NpemVfdDsKCgoKCgp0eXBlZGVmIHNpZ25lZCBjaGFyIHNpZ25lZDhfdDsKdHlwZWRlZiBzaWdu
ZWQgc2hvcnQgc2lnbmVkMTZfdDsKdHlwZWRlZiBzaWduZWQgbG9uZyBzaWduZWQzMl90Owp0eXBl
ZGVmIHNpZ25lZCBsb25nIGxvbmcgc2lnbmVkNjRfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVu
c2lnbmVkOF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVuc2lnbmVkMTZfdDsKdHlwZWRlZiB1
bnNpZ25lZCBsb25nIHVuc2lnbmVkMzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdW5z
aWduZWQ2NF90Owp0eXBlZGVmIGZsb2F0IGZsb2F0MzJfdDsKdHlwZWRlZiBkb3VibGUgZmxvYXQ2
NF90OwojIDI1ICIuLi9zcmMvbGliL2tlcm4vaW5jbHVkZS9mbHV4L3g4Ni9tdWx0aWJvb3QuaCIg
MgoKCgpzdHJ1Y3QgbXVsdGlib290X2hlYWRlcgp7CgogICAgICAgIHVuc2lnbmVkIG1hZ2ljOwoK
CiAgICAgICAgdW5zaWduZWQgZmxhZ3M7CgoKICAgICAgICB1bnNpZ25lZCBjaGVja3N1bTsKCgog
ICAgICAgIHZtX29mZnNldF90IGhlYWRlcl9hZGRyOwogICAgICAgIHZtX29mZnNldF90IGxvYWRf
YWRkcjsKICAgICAgICB2bV9vZmZzZXRfdCBsb2FkX2VuZF9hZGRyOwogICAgICAgIHZtX29mZnNl
dF90IGJzc19lbmRfYWRkcjsKICAgICAgICB2bV9vZmZzZXRfdCBlbnRyeTsKfTsKIyA3NyAiLi4v
c3JjL2xpYi9rZXJuL2luY2x1ZGUvZmx1eC94ODYvbXVsdGlib290LmgiCnN0cnVjdCBtdWx0aWJv
b3RfaW5mbwp7CgoKICAgICAgICB1bnNpZ25lZCBmbGFnczsKCgoKICAgICAgICB2bV9zaXplX3Qg
bWVtX2xvd2VyOwogICAgICAgIHZtX3NpemVfdCBtZW1fdXBwZXI7CgoKCiAgICAgICAgdW5zaWdu
ZWQgY2hhciBib290X2RldmljZVs0XTsKCgoKICAgICAgICB2bV9vZmZzZXRfdCBjbWRsaW5lOwoK
CgogICAgICAgIHVuc2lnbmVkIG1vZHNfY291bnQ7CiAgICAgICAgdm1fb2Zmc2V0X3QgbW9kc19h
ZGRyOwoKCiAgICAgICAgdW5pb24KICAgICAgICB7CiAgICAgICAgICBzdHJ1Y3QKICAgICAgICAg
IHsKCgogICAgICAgICAgICB2bV9zaXplX3QgdGFic2l6ZTsKICAgICAgICAgICAgdm1fc2l6ZV90
IHN0cnNpemU7CiAgICAgICAgICAgIHZtX29mZnNldF90IGFkZHI7CiAgICAgICAgICAgIHVuc2ln
bmVkIHJlc2VydmVkOwogICAgICAgICAgfSBhOwoKICAgICAgICAgIHN0cnVjdAogICAgICAgICAg
ewoKCiAgICAgICAgICAgIHVuc2lnbmVkIG51bTsKICAgICAgICAgICAgdm1fc2l6ZV90IHNpemU7
CiAgICAgICAgICAgIHZtX29mZnNldF90IGFkZHI7CiAgICAgICAgICAgIHVuc2lnbmVkIHNobmR4
OwogICAgICAgICAgfSBlOwogICAgICAgIH0gc3ltczsKCgoKICAgICAgICB2bV9zaXplX3QgbW1h
cF9jb3VudDsKICAgICAgICB2bV9vZmZzZXRfdCBtbWFwX2FkZHI7Cn07CiMgMTQ1ICIuLi9zcmMv
bGliL2tlcm4vaW5jbHVkZS9mbHV4L3g4Ni9tdWx0aWJvb3QuaCIKc3RydWN0IG11bHRpYm9vdF9t
b2R1bGUKewoKICAgICAgICB2bV9vZmZzZXRfdCBtb2Rfc3RhcnQ7CiAgICAgICAgdm1fb2Zmc2V0
X3QgbW9kX2VuZDsKCgogICAgICAgIHZtX29mZnNldF90IHN0cmluZzsKCgogICAgICAgIHVuc2ln
bmVkIHJlc2VydmVkOwp9OwoKCgoKCgpzdHJ1Y3QgQWRkclJhbmdlRGVzYwp7CiAgdW5zaWduZWQg
bG9uZyBzaXplOwogIHVuc2lnbmVkIGxvbmcgQmFzZUFkZHJMb3c7CiAgdW5zaWduZWQgbG9uZyBC
YXNlQWRkckhpZ2g7CiAgdW5zaWduZWQgbG9uZyBMZW5ndGhMb3c7CiAgdW5zaWduZWQgbG9uZyBM
ZW5ndGhIaWdoOwogIHVuc2lnbmVkIGxvbmcgVHlwZTsKCgp9OwojIDE0ICJhdXRvL2ttZW0uaCIg
MgojIDEgIi4uL3NyYy9saWIva2Vybi9pbmNsdWRlL2ZsdXgveDg2L3BhZ2luZy5oIiAxCiMgMzUg
Ii4uL3NyYy9saWIva2Vybi9pbmNsdWRlL2ZsdXgveDg2L3BhZ2luZy5oIgojIDEgIi4uL3NyYy9s
aWIva2Vybi9pbmNsdWRlL2ZsdXgvcGFnZS5oIiAxCiMgNDIgIi4uL3NyYy9saWIva2Vybi9pbmNs
dWRlL2ZsdXgvcGFnZS5oIgojIDEgIi4uL3NyYy9saWIva2Vybi9pbmNsdWRlL2ZsdXgveDg2L3Bh
Z2UuaCIgMQojIDQzICIuLi9zcmMvbGliL2tlcm4vaW5jbHVkZS9mbHV4L3BhZ2UuaCIgMgojIDM2
ICIuLi9zcmMvbGliL2tlcm4vaW5jbHVkZS9mbHV4L3g4Ni9wYWdpbmcuaCIgMgojIDExOCAiLi4v
c3JjL2xpYi9rZXJuL2luY2x1ZGUvZmx1eC94ODYvcGFnaW5nLmgiCiMgMSAiLi4vc3JjL2xpYi9r
ZXJuL2luY2x1ZGUvZmx1eC94ODYvcHJvY19yZWcuaCIgMQojIDY3ICIuLi9zcmMvbGliL2tlcm4v
aW5jbHVkZS9mbHV4L3g4Ni9wcm9jX3JlZy5oIgpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgZ2V0
X2VmbGFncygpCnsKICAgICAgICB1bnNpZ25lZCBlZmxhZ3M7CiAgICAgICAgYXNtIHZvbGF0aWxl
KCJwdXNoZiA7IHBvcGwgJTAiIDogIj1yIiAoZWZsYWdzKSk7CiAgICAgICAgcmV0dXJuIGVmbGFn
czsKfQoKZXh0ZXJuIF9faW5saW5lIHZvaWQgc2V0X2VmbGFncyh1bnNpZ25lZCBlZmxhZ3MpCnsK
ICAgICAgICBhc20gdm9sYXRpbGUoInB1c2hsICUwIDsgcG9wZiIgOiA6ICJyIiAoZWZsYWdzKSA6
ICJtZW1vcnkiKTsKfQoKZXh0ZXJuIF9faW5saW5lIHZvaWQgY2xpKCkgeyBhc20gdm9sYXRpbGUg
KCJjbGkiIDogOiA6ICJtZW1vcnkiKTsgfQpleHRlcm4gX19pbmxpbmUgdm9pZCBzdGkoKSB7IGFz
bSB2b2xhdGlsZSAoInN0aSIgOiA6IDogIm1lbW9yeSIpOyB9CmV4dGVybiBfX2lubGluZSB2b2lk
IGNsZCgpIHsgYXNtKCJjbGQiKTsgfQoKCgoKCgpleHRlcm4gX19pbmxpbmUgdm9pZCBjbHRzKCkg
eyBhc20oImNsdHMiKTsgfQoKZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIHNob3J0IGdldF9jcygp
CnsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBjczsKICAgICAgICBhc20gdm9sYXRpbGUoIm1vdncg
JSVjcywldzAiIDogIj1yIiAoY3MpKTsKICAgICAgICByZXR1cm4gY3M7Cn0KCmV4dGVybiBfX2lu
bGluZSB1bnNpZ25lZCBzaG9ydCBnZXRfZHMoKQp7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZHM7
CiAgICAgICAgYXNtIHZvbGF0aWxlKCJtb3Z3ICUlZHMsJXcwIiA6ICI9ciIgKGRzKSk7CiAgICAg
ICAgcmV0dXJuIGRzOwp9CmV4dGVybiBfX2lubGluZSB2b2lkIHNldF9kcyh1bnNpZ25lZCBzaG9y
dCBkcykKewogICAgICAgIGFzbSB2b2xhdGlsZSgibW92dyAldzAsJSVkcyIgOiA6ICJyIiAoZHMp
KTsKfQoKZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIHNob3J0IGdldF9lcygpCnsKICAgICAgICB1
bnNpZ25lZCBzaG9ydCBlczsKICAgICAgICBhc20gdm9sYXRpbGUoIm1vdncgJSVlcywldzAiIDog
Ij1yIiAoZXMpKTsKICAgICAgICByZXR1cm4gZXM7Cn0KZXh0ZXJuIF9faW5saW5lIHZvaWQgc2V0
X2VzKHVuc2lnbmVkIHNob3J0IGVzKQp7CiAgICAgICAgYXNtIHZvbGF0aWxlKCJtb3Z3ICV3MCwl
JWVzIiA6IDogInIiIChlcykpOwp9CgpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgc2hvcnQgZ2V0
X2ZzKCkKewogICAgICAgIHVuc2lnbmVkIHNob3J0IGZzOwogICAgICAgIGFzbSB2b2xhdGlsZSgi
bW92dyAlJWZzLCV3MCIgOiAiPXIiIChmcykpOwogICAgICAgIHJldHVybiBmczsKfQpleHRlcm4g
X19pbmxpbmUgdm9pZCBzZXRfZnModW5zaWduZWQgc2hvcnQgZnMpCnsKICAgICAgICBhc20gdm9s
YXRpbGUoIm1vdncgJXcwLCUlZnMiIDogOiAiciIgKGZzKSk7Cn0KCmV4dGVybiBfX2lubGluZSB1
bnNpZ25lZCBzaG9ydCBnZXRfZ3MoKQp7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZ3M7CiAgICAg
ICAgYXNtIHZvbGF0aWxlKCJtb3Z3ICUlZ3MsJXcwIiA6ICI9ciIgKGdzKSk7CiAgICAgICAgcmV0
dXJuIGdzOwp9CmV4dGVybiBfX2lubGluZSB2b2lkIHNldF9ncyh1bnNpZ25lZCBzaG9ydCBncykK
ewogICAgICAgIGFzbSB2b2xhdGlsZSgibW92dyAldzAsJSVncyIgOiA6ICJyIiAoZ3MpKTsKfQoK
ZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIHNob3J0IGdldF9zcygpCnsKICAgICAgICB1bnNpZ25l
ZCBzaG9ydCBzczsKICAgICAgICBhc20gdm9sYXRpbGUoIm1vdncgJSVzcywldzAiIDogIj1yIiAo
c3MpKTsKICAgICAgICByZXR1cm4gc3M7Cn0KZXh0ZXJuIF9faW5saW5lIHZvaWQgc2V0X3NzKHVu
c2lnbmVkIHNob3J0IHNzKQp7CiAgICAgICAgYXNtIHZvbGF0aWxlKCJtb3Z3ICV3MCwlJXNzIiA6
IDogInIiIChzcykpOwp9CiMgMTE5ICIuLi9zcmMvbGliL2tlcm4vaW5jbHVkZS9mbHV4L3g4Ni9w
YWdpbmcuaCIgMgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRfZW50cnlfdDsKCgp0eXBlZGVm
IHVuc2lnbmVkIGludCBwZF9lbnRyeV90OwojIDE0NiAiLi4vc3JjL2xpYi9rZXJuL2luY2x1ZGUv
Zmx1eC94ODYvcGFnaW5nLmgiCmV4dGVybiBfX2lubGluZSB2b2lkIHBhZ2luZ19lbmFibGUodm1f
b2Zmc2V0X3QgcGRpcikKewoKICAgICAgICAoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQgX3RlbXBf
XyA9IChwZGlyKTsgYXNtIHZvbGF0aWxlKCJtb3YgJTAsICUlY3IzIiA6IDogInIiIChfdGVtcF9f
KSk7IH0pOwoKCiAgICAgICAgYXNtIHZvbGF0aWxlKCJtb3ZsICAlMCwlJWNyMAlcblx0IgogICAg
ICAgICAgICAgICAgICAgICAiam1wICAgMWYJCVxuXHQiCiAgICAgICAgICAgICAgICAgICAgICIx
OgkJXG5cdCIKICAgICAgICAgICAgICAgICAgICAgOiA6ICJyIiAoKHsgcmVnaXN0ZXIgdW5zaWdu
ZWQgaW50IF90ZW1wX187IGFzbSB2b2xhdGlsZSgibW92ICUlY3IwLCAlMCIgOiAiPXIiIChfdGVt
cF9fKSk7IF90ZW1wX187IH0pIHwgMHg4MDAwMDAwMCkpOwp9CiMgMTUgImF1dG8va21lbS5oIiAy
CgojIDEgImF1dG8va2Vybl90eXBlcy5oIiAxCiMgMTMgImF1dG8va2Vybl90eXBlcy5oIgp0ZW1w
bGF0ZTwgdHlwZW5hbWUgX1R5ID4Kc3RydWN0IFBfcHRyCnsKCnB1YmxpYzoKCiAgdHlwZWRlZiBf
VHkgKlJhd190eXBlOwogIHR5cGVkZWYgdm1fb2Zmc2V0X3QgVW5zaWduZWRfdHlwZTsKCiAgUF9w
dHI8IF9UeSA+ICZvcGVyYXRvciArKyAoKQogIHsKICAgICsrX19wdHI7CiAgICByZXR1cm4gKnRo
aXM7CiAgfQoKICBQX3B0cjwgX1R5ID4gJm9wZXJhdG9yIC0tICgpCiAgewogICAgLS1fX3B0cjsK
ICAgIHJldHVybiAqdGhpczsKICB9CgogIFBfcHRyPCBfVHkgPiBvcGVyYXRvciArKyAoaW50KQog
IHsKICAgIHJldHVybiBQX3B0cihfX3B0cisrKTsKICB9CgogIFBfcHRyPCBfVHkgPiBvcGVyYXRv
ciAtLSAoaW50KQogIHsKICAgIHJldHVybiBQX3B0cihfX3B0ci0tKTsKICB9CgogIFBfcHRyPCBf
VHkgPiBvcGVyYXRvciArICggU213b3JkIHBkICkgY29uc3QKICB7CiAgICByZXR1cm4gUF9wdHIo
X19wdHIgKyBwZCk7CiAgfQoKICBQX3B0cjwgX1R5ID4gb3BlcmF0b3IgLSAoIFNtd29yZCBwZCAp
IGNvbnN0CiAgewogICAgcmV0dXJuIFBfcHRyKF9fcHRyIC0gcGQpOwogIH0KCiAgUF9wdHI8IF9U
eSA+ICZvcGVyYXRvciArPSAoIFNtd29yZCBwZCApCiAgewogICAgX19wdHIgKz0gcGQ7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQoKICBQX3B0cjwgX1R5ID4gJm9wZXJhdG9yIC09ICggU213b3JkIHBk
ICkKICB7CiAgICBfX3B0ciAtPSBwZDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIFBfcHRyPCBf
VHkgPiBvcGVyYXRvciAmICggTXdvcmQgbyApCiAgewogICAgcmV0dXJuIChfVHkqKSgoTXdvcmQp
X19wdHIgJiBvKTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0gKCBQX3B0ciBjb25zdCAmbyApIGNv
bnN0CiAgewogICAgcmV0dXJuICh2b2lkKilfX3B0ciA9PSAodm9pZCopby5fX3B0cjsKICB9Cgog
IGJvb2wgb3BlcmF0b3IgIT0gKCBQX3B0ciBjb25zdCAmbyApIGNvbnN0CiAgewogICAgcmV0dXJu
ICh2b2lkKilfX3B0ciAhPSAodm9pZCopby5fX3B0cjsKICB9CgogIGJvb2wgaXNfbnVsbCgpIGNv
bnN0CiAgewogICAgcmV0dXJuIF9fcHRyID09ICh2b2lkKikoLTEpOwogIH0KCiAgYm9vbCBpc19p
bnZhbGlkKCkgY29uc3QKICB7CiAgICByZXR1cm4gX19wdHIgPT0gKHZvaWQqKSgtMSk7CiAgfQoK
ICBfVHkqIGdldF9yYXcoKSBjb25zdAogIHsKICAgIHJldHVybiBfX3B0cjsKICB9CgogIFVuc2ln
bmVkX3R5cGUgZ2V0X3Vuc2lnbmVkKCkgY29uc3QKICB7CiAgICByZXR1cm4gKFVuc2lnbmVkX3R5
cGUpX19wdHI7CiAgfQoKICBQX3B0cjx2b2lkPiB0b192b2lkKCkgY29uc3QKICB7CiAgICByZXR1
cm4gUF9wdHI8dm9pZD4oKHZvaWQqKV9fcHRyKTsKICB9CgogIFBfcHRyPCBfVHkgPiBvcGVyYXRv
ciA9IChfVHkgKm8pCiAgewogICAgcmV0dXJuIFBfcHRyKF9fcHRyPSBvKTsKICB9CgogIFBfcHRy
PCBfVHkgPiBvcGVyYXRvciA9IChQX3B0cjxfVHk+IGNvbnN0ICZvKQogIHsKICAgIHJldHVybiBQ
X3B0cihfX3B0cj0gby5fX3B0cik7CiAgfQoKICB0ZW1wbGF0ZTwgdHlwZW5hbWUgX1RvID4KICBz
dGF0aWMgUF9wdHIgY2FzdCggUF9wdHI8IF9UbyA+IGNvbnN0ICZvKQogIHsKICAgIHJldHVybiBQ
X3B0cjxfVHk+KHN0YXRpY19jYXN0PF9UeSo+KG8uZ2V0X3JhdygpKSk7CiAgfQoKICBleHBsaWNp
dCBQX3B0ciggTXdvcmQgYWRkciApCiAgICA6IF9fcHRyKChfVHkqKWFkZHIpCiAge30KCiAgUF9w
dHIoIF9UeSAqcCA9IChfVHkqKSgtMSkgKQogICAgOiBfX3B0cihwKQogIHt9CiMgMTM3ICJhdXRv
L2tlcm5fdHlwZXMuaCIKICB0ZW1wbGF0ZTwgdHlwZW5hbWUgX1RvID4KICBQX3B0ciggUF9wdHI8
X1RvPiBjb25zdCAmbyApCiAgICA6IF9fcHRyKG8uZ2V0X3JhdygpKQogIHt9Cgpwcml2YXRlOgoK
ICBfVHkgKl9fcHRyOwoKfTsKIyAxNyAiYXV0by9rbWVtLmgiIDIKCgoKIyAxICIuLi9zcmMva2Vy
bi9jb25maWdfZ2R0LmgiIDEKIyAyMSAiYXV0by9rbWVtLmgiIDIKIyAzMCAiYXV0by9rbWVtLmgi
CiMgMSAiLi4vc3JjL2tlcm4vaWEzMi9saW5rZXJfc3ltcy5oIiAxCgoKCmV4dGVybiAiQyIgewog
IGV4dGVybiBjaGFyIF9zdGFydCwgX2V0ZXh0LCBfc3N0YWNrLCBfc3RhY2ssIF9lZGF0YSwgX2Vu
ZDsKICBleHRlcm4gY2hhciBfcGh5c21lbV8xOwogIGV4dGVybiBjaGFyIF90Y2JzXzE7CiAgZXh0
ZXJuIGNoYXIgX2lvYml0bWFwXzE7CiAgZXh0ZXJuIGNoYXIgX3VudXNlZDFfMSwgX3VudXNlZDJf
MSwgX3VudXNlZDNfMSwgX3VudXNlZDRfaW9fMTsKICBleHRlcm4gY2hhciBfaXBjX3dpbmRvdzBf
MSwgX2lwY193aW5kb3cxXzE7CiAgZXh0ZXJuIGNoYXIgX3NlcnZpY2U7Cn0KIyAzMSAiYXV0by9r
bWVtLmgiIDIKCgoKCgoKc3RydWN0IHg4Nl9nYXRlOwpzdHJ1Y3QgeDg2X3RzczsKc3RydWN0IHg4
Nl9kZXNjOwoKCnZvaWQgKm9wZXJhdG9yIG5ldyhzaXplX3QpOwp2b2lkIG9wZXJhdG9yIGRlbGV0
ZSh2b2lkICpibG9jayk7CgoKY2xhc3Mga21lbQp7CnB1YmxpYzoKICBzdGF0aWMgS2VybmVsX2lu
Zm8gKmluZm8oKTsKcHJpdmF0ZToKCiAgZnJpZW5kIGNsYXNzIFZtZW1fYWxsb2M7CnB1YmxpYzoK
CgoKCiAgc3RhdGljIGNvbnN0IHZtX29mZnNldF90IG1lbV9waHlzID0gcmVpbnRlcnByZXRfY2Fz
dDx2bV9vZmZzZXRfdD4oJl9waHlzbWVtXzEpOwoKICBzdGF0aWMgY29uc3Qgdm1fb2Zmc2V0X3Qg
bWVtX3RjYnMgPSByZWludGVycHJldF9jYXN0PHZtX29mZnNldF90PigmX3RjYnNfMSk7CgogIHN0
YXRpYyBjb25zdCB2bV9vZmZzZXRfdCBtZW1fdXNlcl9tYXggPSAweGMwMDAwMDAwOwoKICBzdGF0
aWMgY29uc3Qgdm1fb2Zmc2V0X3QgaW9fYml0bWFwID0KICAgICByZWludGVycHJldF9jYXN0PHZt
X29mZnNldF90PigmX2lvYml0bWFwXzEpOwoKCiAgc3RhdGljIGNvbnN0IHZtX29mZnNldF90IHNl
cnZpY2VfcGFnZQogICAgPSByZWludGVycHJldF9jYXN0PHZtX29mZnNldF90PigmX3NlcnZpY2Up
OwoKICBzdGF0aWMgY29uc3Qgdm1fb2Zmc2V0X3QgbG9jYWxfYXBpY19wYWdlID0gc2VydmljZV9w
YWdlOwoKICBzdGF0aWMgY29uc3Qgdm1fb2Zmc2V0X3QgamRiX2FkYXB0ZXJfcGFnZSA9IGxvY2Fs
X2FwaWNfcGFnZSArIDB4MTAwMDsKCiAgc3RhdGljIGNvbnN0IHZtX29mZnNldF90IHRidWZfc3Rh
dHVzX3BhZ2UgPSBqZGJfYWRhcHRlcl9wYWdlICsgMHgxMDAwOwoKCgogIHN0YXRpYyBjb25zdCB2
bV9vZmZzZXRfdCB0YnVmX2J1ZmZlcl9hcmVhID0gc2VydmljZV9wYWdlICsgMHgyMDAwMDA7Cgog
IHN0YXRpYyBjb25zdCB2bV9vZmZzZXRfdCBpcGNfd2luZG93MAogICAgPSByZWludGVycHJldF9j
YXN0PHZtX29mZnNldF90PigmX2lwY193aW5kb3cwXzEpOwoKICBzdGF0aWMgY29uc3Qgdm1fb2Zm
c2V0X3QgaXBjX3dpbmRvdzEKICAgID0gcmVpbnRlcnByZXRfY2FzdDx2bV9vZmZzZXRfdD4oJl9p
cGNfd2luZG93MV8xKTsKCgoKICBzdGF0aWMgcHRfZW50cnlfdCAqamRiX2FkYXB0ZXJfcHQ7CgoK
ICBlbnVtIHsgZ2R0X3RzcyA9ICgweDA4KSwKICAgIGdkdF9jb2RlX2tlcm5lbCA9ICgweDEwKSwg
Z2R0X2RhdGFfa2VybmVsID0gKDB4MTgpLAogICAgZ2R0X2NvZGVfdXNlciA9ICgweDIwKSwgZ2R0
X2RhdGFfdXNlciA9ICgweDI4KSwKICAgIGdkdF9tYXggPSAoMHgzMCkgfTsKCiAgdGVtcGxhdGU8
IHR5cGVuYW1lIF9UeSA+CiAgc3RhdGljIF9UeSAqcGh5c190b192aXJ0KCBQX3B0cjxfVHk+ICk7
Cgpwcm90ZWN0ZWQ6CiAgc3RhdGljIHBkX2VudHJ5X3QgKmtkaXI7CiAgc3RhdGljIHBkX2VudHJ5
X3QgY3B1X2dsb2JhbDsKCnByaXZhdGU6CiAgZnJpZW5kIGNsYXNzIGtkYjsKICBmcmllbmQgY2xh
c3MgamRiOwogIGZyaWVuZCBjbGFzcyBKZGJfa2Vybl9pbmZvOwogIGZyaWVuZCBjbGFzcyBwcm9m
aWxlOwoKICBrbWVtKCk7CiAga21lbShjb25zdCBrbWVtJik7CgogIHN0YXRpYyB2bV9vZmZzZXRf
dCBtZW1fbWF4LCBfaGltZW07CgogIHN0YXRpYyBjb25zdCBwZF9lbnRyeV90IGZsYWdfZ2xvYmFs
ID0gMHgyMDA7CgogIHN0YXRpYyB4ODZfZ2F0ZSAqa2lkdDsKICBzdGF0aWMgeDg2X3RzcyB2b2xh
dGlsZSAqdHNzIGFzbSAoIktNRU1fVFNTIik7CiAgc3RhdGljIHg4Nl9kZXNjICpnZHQ7CgogIHN0
YXRpYyBLZXJuZWxfaW5mbyAqa2luZm87CgogIHN0YXRpYyBVbnNpZ25lZDggKmlvX2JpdG1hcF9k
ZWxpbWl0ZXI7CgpwdWJsaWM6CiMgMTM4ICJhdXRvL2ttZW0uaCIKICBzdGF0aWMgdm1fb2Zmc2V0
X3QgdmlydF90b19waHlzKGNvbnN0IHZvaWQgKmFkZHIpOwoKICBzdGF0aWMgdm9pZCAqIGxpbmVh
cl92aXJ0X3RvX3BoeXMoY29uc3Qgdm9pZCAqYWRkcik7CiMgMTQ5ICJhdXRvL2ttZW0uaCIKICBz
dGF0aWMgdm9pZCAqcGh5c190b192aXJ0KHZtX29mZnNldF90IGFkZHIpOwoKCgoKCgogIHN0YXRp
YyB2b2lkIGRpcl9pbml0KHBkX2VudHJ5X3QgKmQpOwoKCgoKICBzdGF0aWMgdm9pZCB0bGJfZmx1
c2godm1fb2Zmc2V0X3QgYWRkcik7CgoKICBzdGF0aWMgdm9pZCB0bGJfZmx1c2goKTsKIyAxNzMg
ImF1dG8va21lbS5oIgogIHN0YXRpYyB2bV9vZmZzZXRfdCBpcGNfd2luZG93KHVuc2lnbmVkIHdp
bik7CgoKCgoKCiAgc3RhdGljIGNvbnN0IHBkX2VudHJ5X3QgKmRpcigpOwoKCgoKCgoKICBzdGF0
aWMgcGRfZW50cnlfdCBwZGVfZ2xvYmFsKCk7CgogIHN0YXRpYyB4ODZfZ2F0ZSAqaWR0KCk7Cgog
IHN0YXRpYyB2bV9vZmZzZXRfdCBoaW1lbSgpOwoKCiAgc3RhdGljIHZtX29mZnNldF90IHZvbGF0
aWxlICprZXJuZWxfZXNwKCk7CgogIHN0YXRpYyB2bV9vZmZzZXRfdCBpb19iaXRtYXBfZGVsaW1p
dGVyX3BhZ2Uodm9pZCk7CgoKCiAgc3RhdGljIHZvaWQgaW5pdCgpOwp9OwojIDIxMSAiYXV0by9r
bWVtLmgiCiMgMSAiLi4vc3JjL2xpYi9rZXJuL2luY2x1ZGUvZmx1eC94ODYvdHNzLmgiIDEKIyAz
MiAiLi4vc3JjL2xpYi9rZXJuL2luY2x1ZGUvZmx1eC94ODYvdHNzLmgiCnN0cnVjdCB4ODZfdHNz
IHsKICAgICAgICBpbnQgYmFja19saW5rOwoKICAgICAgICBpbnQgZXNwMDsKICAgICAgICBpbnQg
c3MwOwogICAgICAgIGludCBlc3AxOwogICAgICAgIGludCBzczE7CiAgICAgICAgaW50IGVzcDI7
CiAgICAgICAgaW50IHNzMjsKICAgICAgICBpbnQgY3IzOwoKICAgICAgICBpbnQgZWlwOwogICAg
ICAgIGludCBlZmxhZ3M7CiAgICAgICAgaW50IGVheDsKICAgICAgICBpbnQgZWN4OwogICAgICAg
IGludCBlZHg7CiAgICAgICAgaW50IGVieDsKICAgICAgICBpbnQgZXNwOwogICAgICAgIGludCBl
YnA7CiAgICAgICAgaW50IGVzaTsKICAgICAgICBpbnQgZWRpOwogICAgICAgIGludCBlczsKICAg
ICAgICBpbnQgY3M7CiAgICAgICAgaW50IHNzOwogICAgICAgIGludCBkczsKICAgICAgICBpbnQg
ZnM7CiAgICAgICAgaW50IGdzOwogICAgICAgIGludCBsZHQ7CiAgICAgICAgdW5zaWduZWQgc2hv
cnQgdHJhY2VfdHJhcDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBpb19iaXRfbWFwX29mZnNldDsK
Cgp9OwojIDIxMiAiYXV0by9rbWVtLmgiIDIKIyAyMjcgImF1dG8va21lbS5oIgppbmxpbmUgdm9p
ZCAqa21lbTo6cGh5c190b192aXJ0KHZtX29mZnNldF90IGFkZHIpCnsKICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDx2b2lkICo+KGFkZHIgKyBtZW1fcGh5cyk7Cn0KCgoKCgppbmxpbmUgdm9pZCBr
bWVtOjp0bGJfZmx1c2godm1fb2Zmc2V0X3QgYWRkcikKewogIGFzbSB2b2xhdGlsZQogICAgKCJp
bnZscGcgJTAiIDogOiAibSIgKCooY2hhciopYWRkcikgOiAibWVtb3J5Iik7Cn0KCgoKCmlubGlu
ZSB2b2lkIGttZW06OnRsYl9mbHVzaCgpCnsKCiAgdW5zaWduZWQgZHVtbXk7CiAgYXNtIHZvbGF0
aWxlICgiIG1vdiAlJWNyMywlMDsgbW92ICUwLCUlY3IzICIgOiAiPXIiKGR1bW15KSApOwp9CiMg
MjYxICJhdXRvL2ttZW0uaCIKaW5saW5lIHZtX29mZnNldF90CmttZW06OmlwY193aW5kb3codW5z
aWduZWQgd2luKQp7CiAgaWYgKHdpbiA9PSAwKQogICAgcmV0dXJuIGlwY193aW5kb3cwOwoKICBy
ZXR1cm4gaXBjX3dpbmRvdzE7Cn0KCgoKCgoKCmlubGluZSBjb25zdCBwZF9lbnRyeV90ICprbWVt
OjpkaXIoKQp7CiAgcmV0dXJuIGtkaXI7Cn0KIyAyODggImF1dG8va21lbS5oIgppbmxpbmUgcGRf
ZW50cnlfdCBrbWVtOjpwZGVfZ2xvYmFsKCkKewogIHJldHVybiBjcHVfZ2xvYmFsOwp9CgoKCmlu
bGluZSB4ODZfZ2F0ZSAqa21lbTo6aWR0KCkKewogIHJldHVybiBraWR0Owp9CgoKCmlubGluZSB2
bV9vZmZzZXRfdCBrbWVtOjpoaW1lbSgpCnsKICByZXR1cm4gX2hpbWVtOwp9CgoKCgppbmxpbmUg
dm1fb2Zmc2V0X3Qgdm9sYXRpbGUgKmttZW06Omtlcm5lbF9lc3AoKQp7CiAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8dm1fb2Zmc2V0X3Qgdm9sYXRpbGUgKj4oJiB0c3MtPmVzcDApOwp9CgoKCmlu
bGluZSB2bV9vZmZzZXRfdCBrbWVtOjppb19iaXRtYXBfZGVsaW1pdGVyX3BhZ2Uodm9pZCkKewog
IHJldHVybiByZWludGVycHJldF9jYXN0PHZtX29mZnNldF90Pihpb19iaXRtYXBfZGVsaW1pdGVy
KTsKfQojIDMzMSAiYXV0by9rbWVtLmgiCnRlbXBsYXRlPCB0eXBlbmFtZSBfVHkgPiBpbmxpbmUg
X1R5ICprbWVtOjpwaHlzX3RvX3ZpcnQoIFBfcHRyPF9UeT4gYWRkcikKewogIHJldHVybiByZWlu
dGVycHJldF9jYXN0PF9UeSAqPihhZGRyLmdldF91bnNpZ25lZCgpICsgbWVtX3BoeXMpOwp9CgoK
CgoKaW5saW5lIEtlcm5lbF9pbmZvICprbWVtOjppbmZvKCkKewogIHJldHVybiBraW5mbzsKfQoj
IDEyICJhdXRvL3Byb2ZpbGVfaS5oIiAyCiMgMSAiYXV0by9pcnEuaCIgMQoKCgoKCiMgMSAiYXV0
by9zZW5kZXIuaCIgMQojIDEzICJhdXRvL3NlbmRlci5oIgpjbGFzcyBSZWNlaXZlcjsKCgoKY2xh
c3MgU2VuZGVyCnsKcHVibGljOgoKCgogIHZpcnR1YWwgdm9pZCBpcGNfcmVjZWl2ZXJfcmVhZHko
KSA9IDA7Cgpwcml2YXRlOgoKCgogICAgICAgICAgICAgTDRfdWlkIF9pZDsKICAgICAgICAgICAg
IFJlY2VpdmVyKiBfc2VuZF9wYXJ0bmVyOwogICAgICAgICAgICAgU2VuZGVyKiBzZW5kZXJfbmV4
dCwgKiBzZW5kZXJfcHJldjsKCgoKICBmcmllbmQgY2xhc3MgamRiOwogIGZyaWVuZCBjbGFzcyBq
ZGJfdGhyZWFkX2xpc3Q7CgpwdWJsaWM6CgoKCiAgTDRfdWlkIGlkKCkgY29uc3Q7CgoKCgogIFJl
Y2VpdmVyKiByZWNlaXZlcigpIGNvbnN0OwojIDU3ICJhdXRvL3NlbmRlci5oIgogIGJvb2wgaW5f
c2VuZGVyX2xpc3QoKTsKCnByb3RlY3RlZDoKCgoKCgoKCiAgU2VuZGVyKGNvbnN0IEw0X3VpZCYg
aWQpOwojIDc3ICJhdXRvL3NlbmRlci5oIgogIGV4cGxpY2l0IFNlbmRlcihjb25zdCBMNF91aWQm
IGlkLCBpbnQgKTsKCgoKCiAgdm9pZCBzZXRfcmVjZWl2ZXIoUmVjZWl2ZXIqIHJlY2VpdmVyKTsK
CgoKCiAgdm9pZCBzZW5kZXJfZW5xdWV1ZShTZW5kZXIgKipyKTsKCgoKCiAgdm9pZCBzZW5kZXJf
ZGVxdWV1ZShTZW5kZXIgKipyKTsKfTsKCgoKCgoKIyAxICIuLi9zcmMvbGliL21pbmlsaWJjL2lu
Y2x1ZGUvY2Fzc2VydCIgMQoKCgoKCiMgMSAiLi4vc3JjL2xpYi9taW5pbGliYy9pbmNsdWRlL2Fz
c2VydC5oIiAxCgoKCgoKZXh0ZXJuICJDIiB7Cgp2b2lkIF9fYXNzZXJ0X2ZhaWwgKGNvbnN0IGNo
YXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsIGNvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAg
X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKfQojIDcgIi4uL3NyYy9saWIvbWluaWxp
YmMvaW5jbHVkZS9jYXNzZXJ0IiAyCiMgMTAxICJhdXRvL3NlbmRlci5oIiAyCgojIDEgImF1dG8v
Y3B1X2xvY2suaCIgMQojIDIyICJhdXRvL2NwdV9sb2NrLmgiCmNsYXNzIENwdV9sb2NrCnsKcHVi
bGljOgoKICB0eXBlZGVmIE13b3JkIFN0YXR1czsKCgogIENwdV9sb2NrKCk7CgoKCgoKICBTdGF0
dXMgdGVzdCgpIGNvbnN0OwoKCgoKCgogIHZvaWQgbG9jaygpOwoKCgoKICB2b2lkIGNsZWFyKCk7
CgoKCgoKCiAgU3RhdHVzIHRlc3RfYW5kX3NldCgpOwoKCgoKCiAgdm9pZCBzZXQoU3RhdHVzIHN0
YXRlKTsKCnByaXZhdGU6CgogIENwdV9sb2NrIChjb25zdCBDcHVfbG9jayYpOwoKfTsKCgoKCgpl
eHRlcm4gQ3B1X2xvY2sgY3B1X2xvY2s7CiMgODUgImF1dG8vY3B1X2xvY2suaCIKIyAxICIuLi9z
cmMvZHJpdmVycy9wcm9jZXNzb3IuaCIgMQoKCgoKCiMgMSAiLi4vc3JjL2RyaXZlcnMvaWEzMi9w
cm9jZXNzb3ItYXJjaC5oIiAxCgoKCgoKCiMgMSAiYXV0by9zdGRfbWFjcm9zLmgiIDEKCgoKCgoj
IDEgImdsb2JhbGNvbmZpZy5oIiAxCiMgNyAiYXV0by9zdGRfbWFjcm9zLmgiIDIKIyA4ICIuLi9z
cmMvZHJpdmVycy9pYTMyL3Byb2Nlc3Nvci1hcmNoLmgiIDIKCm5hbWVzcGFjZSBQcm9jIHsKCiAg
dHlwZWRlZiBVbnNpZ25lZDMyIFN0YXR1czsKCiAgaW5saW5lCiAgdm9pZCBwYXVzZSgpCiAgewog
ICAgYXNtIHZvbGF0aWxlICgiIC5ieXRlIDB4ZjMsIDB4OTAgI3BhdXNlIFxuIiApOwogIH0KIyAy
NyAiLi4vc3JjL2RyaXZlcnMvaWEzMi9wcm9jZXNzb3ItYXJjaC5oIgogIGlubGluZQogIHZvaWQg
aGFsdCgpCiAgewogICAgYXNtIHZvbGF0aWxlICgiIGhsdCIgOiA6IDogIm1lbW9yeSIpOwogIH0K
CiAgaW5saW5lCiAgdm9pZCBjbGkoKQogIHsKICAgIGFzbSB2b2xhdGlsZSAoImNsaSIgOiA6IDog
Im1lbW9yeSIpOwogIH0KCiAgaW5saW5lCiAgdm9pZCBzdGkoKQogIHsKICAgIGFzbSB2b2xhdGls
ZSAoInN0aSIgOiA6IDogIm1lbW9yeSIpOwogIH0KCiAgaW5saW5lCiAgU3RhdHVzIGNsaV9zYXZl
KCkKICB7CiAgICBTdGF0dXMgcmV0OwogICAgYXNtIHZvbGF0aWxlICgicHVzaGZsCVxuXHQiCiAg
ICAgICAgICAgICAgICAgICJwb3BsICUwCVxuXHQiCiAgICAgICAgICAgICAgICAgICJjbGkJCVxu
XHQiCiAgICAgICAgICAgICAgICAgIDogIj1nIihyZXQpIDogOiAibWVtb3J5Iik7CiAgICByZXR1
cm4gcmV0OwogIH0KCiAgaW5saW5lCiAgdm9pZCBzdGlfcmVzdG9yZSggU3RhdHVzIHN0ICkKICB7
CiAgICBhc20gdm9sYXRpbGUgKCJ0ZXN0bCAkMHgwMjAwLCAlMAlcblx0IgogICAgICAgICAgICAg
ICAgICAianogMWYJCVxuXHQiCiAgICAgICAgICAgICAgICAgICJzdGkJCQlcblx0IgogICAgICAg
ICAgICAgICAgICAiMToJCQlcblx0IgogICAgICAgICAgICAgICAgICA6IDogImciKHN0KSA6ICJt
ZW1vcnkiKTsKICB9CgogIGlubGluZQogIFN0YXR1cyBpbnRlcnJ1cHRzKCkKICB7CiAgICBTdGF0
dXMgcmV0OwogICAgYXNtIHZvbGF0aWxlICgicHVzaGZsICAgICAgICAgXG4iCiAgICAgICAgICAg
ICAgICAgICJwb3BsICUwICAgICAgICBcbiIKICAgICAgICAgICAgICAgICAgOiAiPWciKHJldCkg
OiA6ICJtZW1vcnkiKTsKICAgIHJldHVybiByZXQgJiAweDAyMDA7CiAgfQp9OwojIDcgIi4uL3Ny
Yy9kcml2ZXJzL3Byb2Nlc3Nvci5oIiAyCgoKbmFtZXNwYWNlIFByb2MgewojIDIwICIuLi9zcmMv
ZHJpdmVycy9wcm9jZXNzb3IuaCIKICB2b2lkIGNsaSgpOwoKCiAgdm9pZCBzdGkoKTsKCgogIFN0
YXR1cyBpbnRlcnJ1cHRzKCk7CgoKICBTdGF0dXMgY2xpX3NhdmUoKTsKCgogIHZvaWQgc3RpX3Jl
c3RvcmUoIFN0YXR1cyApOwoKICB2b2lkIHBhdXNlKCk7CgogIHZvaWQgaGFsdCgpOwoKfTsKIyA4
NiAiYXV0by9jcHVfbG9jay5oIiAyCiMgOTUgImF1dG8vY3B1X2xvY2suaCIKaW5saW5lIENwdV9s
b2NrOjpTdGF0dXMgQ3B1X2xvY2s6OnRlc3RfYW5kX3NldCgpCnsKICBTdGF0dXMgcmV0ID0gdGVz
dCgpOwogIGxvY2soKTsKICByZXR1cm4gcmV0Owp9CgoKCgppbmxpbmUgdm9pZCBDcHVfbG9jazo6
c2V0KENwdV9sb2NrOjpTdGF0dXMgc3RhdGUpCnsKICBpZiAoc3RhdGUpCiAgICBsb2NrKCk7CiAg
ZWxzZQogICAgY2xlYXIoKTsKfQoKCgppbmxpbmUgdm9pZCBDcHVfbG9jazo6bG9jaygpCnsKICBQ
cm9jOjpjbGkoKTsKfQoKCgppbmxpbmUgdm9pZApDcHVfbG9jazo6Y2xlYXIoKQp7CiAgUHJvYzo6
c3RpKCk7Cn0KCgoKaW5saW5lIENwdV9sb2NrOjpTdGF0dXMgQ3B1X2xvY2s6OnRlc3QoKSBjb25z
dAp7CiAgcmV0dXJuICEgUHJvYzo6aW50ZXJydXB0cygpOwp9CiMgMTAzICJhdXRvL3NlbmRlci5o
IiAyCiMgMSAiYXV0by9sb2NrX2d1YXJkLmgiIDEKIyAxNCAiYXV0by9sb2NrX2d1YXJkLmgiCnRl
bXBsYXRlPHR5cGVuYW1lIExPQ0s+CmNsYXNzIExvY2tfZ3VhcmQKewogIExPQ0sgKl9sb2NrOwoK
cHVibGljOgogIExvY2tfZ3VhcmQoTE9DSyAqbCk7CgogIH5Mb2NrX2d1YXJkKCk7Cn07CiMgMzIg
ImF1dG8vbG9ja19ndWFyZC5oIgp0ZW1wbGF0ZTx0eXBlbmFtZSBMT0NLPiBpbmxpbmUgTG9ja19n
dWFyZDxMT0NLPjo6TG9ja19ndWFyZChMT0NLICpsKQogIDogX2xvY2sobCkKewogIGlmIChfbG9j
ay0+dGVzdF9hbmRfc2V0KCkpCiAgICBfbG9jayA9IDA7Cn0KCgoKdGVtcGxhdGU8dHlwZW5hbWUg
TE9DSz4gaW5saW5lIExvY2tfZ3VhcmQ8TE9DSz46On5Mb2NrX2d1YXJkKCkKewogIGlmIChfbG9j
aykKICAgIF9sb2NrLT5jbGVhcigpOwp9CiMgMTA0ICJhdXRvL3NlbmRlci5oIiAyCiMgMTE1ICJh
dXRvL3NlbmRlci5oIgppbmxpbmUgTDRfdWlkIFNlbmRlcjo6aWQoKSBjb25zdAp7IHJldHVybiBf
aWQ7IH0KCgoKCgoKaW5saW5lIFJlY2VpdmVyKiBTZW5kZXI6OnJlY2VpdmVyKCkgY29uc3QKeyBy
ZXR1cm4gX3NlbmRfcGFydG5lcjsgfQojIDEzNiAiYXV0by9zZW5kZXIuaCIKaW5saW5lIGJvb2wK
U2VuZGVyOjppbl9zZW5kZXJfbGlzdCgpCnsKICByZXR1cm4gc2VuZGVyX25leHQ7Cn0KIyAxNTEg
ImF1dG8vc2VuZGVyLmgiCmlubGluZSBTZW5kZXI6OlNlbmRlcihjb25zdCBMNF91aWQmIGlkKQog
IDogX2lkIChpZCksIHNlbmRlcl9uZXh0ICgwKQp7fQojIDE2NCAiYXV0by9zZW5kZXIuaCIKaW5s
aW5lIFNlbmRlcjo6U2VuZGVyKGNvbnN0IEw0X3VpZCYgaWQsIGludCApCiAgOiBfaWQgKGlkKQp7
fQoKCgoKCgppbmxpbmUgdm9pZCBTZW5kZXI6OnNldF9yZWNlaXZlcihSZWNlaXZlciogcmVjZWl2
ZXIpCnsKICBfc2VuZF9wYXJ0bmVyID0gcmVjZWl2ZXI7Cn0KCgoKCgoKaW5saW5lIHZvaWQKU2Vu
ZGVyOjpzZW5kZXJfZW5xdWV1ZShTZW5kZXIgKipyKQp7CiAgTG9ja19ndWFyZDxDcHVfbG9jaz4g
Z3VhcmQgKCZjcHVfbG9jayk7CgogIGlmICghIGluX3NlbmRlcl9saXN0KCkpCiAgICB7CiAgICAg
IGlmICgqcikKICAgICAgICB7CiAgICAgICAgICBzZW5kZXJfbmV4dCA9ICpyOwogICAgICAgICAg
c2VuZGVyX3ByZXYgPSBzZW5kZXJfbmV4dC0+c2VuZGVyX3ByZXY7CiAgICAgICAgICBzZW5kZXJf
cHJldi0+c2VuZGVyX25leHQgPSB0aGlzOwogICAgICAgICAgc2VuZGVyX25leHQtPnNlbmRlcl9w
cmV2ID0gdGhpczsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAqciA9
IHNlbmRlcl9wcmV2ID0gc2VuZGVyX25leHQgPSB0aGlzOwogICAgICAgIH0KICAgIH0KfQoKCgoK
CgppbmxpbmUgdm9pZApTZW5kZXI6OnNlbmRlcl9kZXF1ZXVlKFNlbmRlciAqKnIpCnsKICBMb2Nr
X2d1YXJkPENwdV9sb2NrPiBndWFyZCAoJmNwdV9sb2NrKTsKCiAgaWYgKGluX3NlbmRlcl9saXN0
KCkpCiAgICB7CiAgICAgIGlmIChzZW5kZXJfbmV4dCA9PSB0aGlzKQogICAgICAgIHsKICAgICAg
ICAgICgodm9pZCkgKCgqciA9PSB0aGlzKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIipyID09IHRo
aXMiLCAiYXV0by9zZW5kZXIuaCIsIDIxOCwgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsKCiAg
ICAgICAgICAqciA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg
aWYgKCpyID09IHRoaXMpCiAgICAgICAgICAgICpyID0gc2VuZGVyX25leHQ7CgogICAgICAgICAg
c2VuZGVyX3ByZXYtPnNlbmRlcl9uZXh0ID0gc2VuZGVyX25leHQ7CiAgICAgICAgICBzZW5kZXJf
bmV4dC0+c2VuZGVyX3ByZXYgPSBzZW5kZXJfcHJldjsKICAgICAgICB9CgogICAgICBzZW5kZXJf
bmV4dCA9IDA7CiAgICB9Cn0KIyA3ICJhdXRvL2lycS5oIiAyCgoKCgoKCmNsYXNzIFJlY2VpdmVy
OwoKCgoKCmNsYXNzIGlycV90IDogcHVibGljIFNlbmRlcgp7CnB1YmxpYzoKICB2aXJ0dWFsIGJv
b2wgYWxsb2MoUmVjZWl2ZXIgKnQsIGJvb2wgYWNrX2luX2tlcm5lbCkgPSAwOwogIHZpcnR1YWwg
Ym9vbCBmcmVlKFJlY2VpdmVyICp0KSA9IDA7CiAgdmlydHVhbCBSZWNlaXZlciAqb3duZXIoKSBj
b25zdCA9IDA7Cgpwcml2YXRlOgogIGlycV90KCk7CiAgaXJxX3QoaXJxX3QmKTsKCiAgY2xhc3Mg
SXJxX3AgewogIHB1YmxpYzoKICAgIElycV9wKCBpcnFfdCAqX3AgPSAwICkgOiBwKF9wKSB7fQog
ICAgSXJxX3AgJm9wZXJhdG9yID0gKGlycV90ICpfcCkgeyBwID0gX3A7IHJldHVybiAqdGhpczsg
fQogICAgb3BlcmF0b3IgaXJxX3QqKCkgeyByZXR1cm4gcDsgfQogIHByaXZhdGU6CiAgICBpcnFf
dCAqcDsKICB9OwoKICBzdGF0aWMgaXJxX3QgKmlycXNbXTsKCnB1YmxpYzoKCiAgc3RhdGljIGly
cV90ICpsb29rdXAoIHVuc2lnbmVkIGlycSApOwogIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX2lycSgg
dW5zaWduZWQgaXJxLCBpcnFfdCAqaSApOwoKcHJvdGVjdGVkOgogIFJlY2VpdmVyICpfaXJxX3Ro
cmVhZDsKICBpbnQgX3F1ZXVlZDsKICBib29sIF9hY2tfaW5fa2VybmVsOwoKcHVibGljOgogIHN0
YXRpYyB2b2lkIGluaXQoKTsKCgoKCiAgZXhwbGljaXQgaXJxX3QodW5zaWduZWQgaXJxbnVtKTsK
CiAgdmlydHVhbCB2b2lkIGlwY19yZWNlaXZlcl9yZWFkeSgpOwoKCgoKCiAgdm9pZCBtYXliZV9h
Y2tub3dsZWRnZSgpOwoKCiAgdm9pZCBtYXliZV9lbmFibGUoKTsKCnByaXZhdGU6CgoKCiAgaW50
IGNvbnN1bWUoKTsKfTsKCmV4dGVybiB1bnNpZ25lZCBwaWNfbWFza19tYXN0ZXI7CmV4dGVybiB1
bnNpZ25lZCBwaWNfbWFza19zbGF2ZTsKCmV4dGVybiAiQyIgdm9pZCBmYXN0X3JldF9mcm9tX2ly
cSh2b2lkKTsKCnZvaWQgc2V0X3RpbWVyX3ZlY3Rvcl9ydW4odm9pZCk7Cgp2b2lkIHNldF90aW1l
cl92ZWN0b3Jfc3RvcCh2b2lkKTsKCgoKCgoKIyAxICJhdXRvL2F0b21pYy5oIiAxCiMgMTUgImF1
dG8vYXRvbWljLmgiCmV4dGVybiAiQyIgdm9pZCBjYXNfZXJyb3JfdHlwZV93aXRoX2JhZF9zaXpl
X3VzZWQodm9pZCk7CgoKCgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUeXBlID4gYm9vbCB1cF9jYXMo
IFR5cGUgKnB0ciwgVHlwZSBvbGR2YWwsIFR5cGUgbmV3dmFsICk7Cgp0ZW1wbGF0ZTwgdHlwZW5h
bWUgVHlwZSA+IGJvb2wgc21wX2NhcyggVHlwZSAqcHRyLCBUeXBlIG9sZHZhbCwgVHlwZSBuZXd2
YWwgKTsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUeXBlID4gYm9vbCB1cF9jYXMyKCBUeXBlICpwdHIs
IFR5cGUgKm9sZHZhbCwgVHlwZSAqbmV3dmFsICk7Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVHlwZSA+
IGJvb2wgc21wX2NhczIoIFR5cGUgKnB0ciwgVHlwZSAqb2xkdmFsLCBUeXBlICpuZXd2YWwgKTsK
CgoKCgoKCmJvb2wgdXBfY2FzX3Vuc2F2ZSggTXdvcmQgKnB0ciwgTXdvcmQgb2xkdmFsLCBNd29y
ZCBuZXd2YWwgKTsKCmJvb2wgc21wX2Nhc191bnNhdmUoIE13b3JkICpwdHIsIE13b3JkIG9sZHZh
bCwgTXdvcmQgbmV3dmFsICk7Cgpib29sIHVwX2NhczJfdW5zYXZlKCBNd29yZCAqcHRyLCBNd29y
ZCAqb2xkdmFsLCBNd29yZCAqbmV3dmFsICk7Cgpib29sIHNtcF9jYXMyX3Vuc2F2ZSggTXdvcmQg
KnB0ciwgTXdvcmQgKm9sZHZhbCwgTXdvcmQgKm5ld3ZhbCApOwoKYm9vbCB1cF90YXMoIE13b3Jk
ICpsICk7Cgpib29sIHNtcF90YXMoIE13b3JkICpsICk7CiMgNTUgImF1dG8vYXRvbWljLmgiCnRl
bXBsYXRlPCB0eXBlbmFtZSBUeXBlID4gaW5saW5lIGJvb2wgdXBfY2FzKCBUeXBlICpwdHIsIFR5
cGUgb2xkdmFsLCBUeXBlIG5ld3ZhbCApCnsKICBpZiggKHNpemVvZihUeXBlKSkgIT0gKHNpemVv
ZihNd29yZCkpICkgY2FzX2Vycm9yX3R5cGVfd2l0aF9iYWRfc2l6ZV91c2VkKCk7CiAgcmV0dXJu
IHVwX2Nhc191bnNhdmUocmVpbnRlcnByZXRfY2FzdDxNd29yZCo+KHB0ciksCiAgICAgICAgICAg
ICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8TXdvcmQqPigmb2xkdmFsKSwKICAgICAgICAg
ICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxNd29yZCo+KCZuZXd2YWwpKTsKfQoKCgp0
ZW1wbGF0ZTwgdHlwZW5hbWUgVHlwZSA+IGlubGluZSBib29sIHNtcF9jYXMoIFR5cGUgKnB0ciwg
VHlwZSBvbGR2YWwsIFR5cGUgbmV3dmFsICkKewogIGlmKCAoc2l6ZW9mKFR5cGUpKSAhPSAoc2l6
ZW9mKE13b3JkKSkgKSBjYXNfZXJyb3JfdHlwZV93aXRoX2JhZF9zaXplX3VzZWQoKTsKICByZXR1
cm4gc21wX2Nhc191bnNhdmUocmVpbnRlcnByZXRfY2FzdDxNd29yZCo+KHB0ciksCiAgICAgICAg
ICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PE13b3JkKj4oJm9sZHZhbCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PE13b3JkKj4oJm5ld3ZhbCkpOwp9
CgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUeXBlID4gaW5saW5lIGJvb2wgdXBfY2FzMiggVHlwZSAq
cHRyLCBUeXBlICpvbGR2YWwsIFR5cGUgKm5ld3ZhbCApCnsKICBpZiggKHNpemVvZihUeXBlKSkg
IT0gKChzaXplb2YoTXdvcmQpKjIpKSApIGNhc19lcnJvcl90eXBlX3dpdGhfYmFkX3NpemVfdXNl
ZCgpOwogIHJldHVybiB1cF9jYXMyX3Vuc2F2ZShyZWludGVycHJldF9jYXN0PE13b3JkKj4ocHRy
KSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxNd29yZCo+KG9sZHZh
bCksCiAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TXdvcmQqPihuZXd2
YWwpKTsKfQoKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVHlwZSA+IGlubGluZSBib29sIHNtcF9jYXMy
KCBUeXBlICpwdHIsIFR5cGUgKm9sZHZhbCwgVHlwZSAqbmV3dmFsICkKewogIGlmKCAoc2l6ZW9m
KFR5cGUpKSAhPSAoKHNpemVvZihNd29yZCkqMikpICkgY2FzX2Vycm9yX3R5cGVfd2l0aF9iYWRf
c2l6ZV91c2VkKCk7CiAgcmV0dXJuIHNtcF9jYXMyX3Vuc2F2ZShyZWludGVycHJldF9jYXN0PE13
b3JkKj4ocHRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TXdv
cmQqPihvbGR2YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxN
d29yZCo+KG5ld3ZhbCkpOwp9CiMgMTAyICJhdXRvL2F0b21pYy5oIgppbmxpbmUgYm9vbCB1cF9j
YXNfdW5zYXZlKCBNd29yZCAqcHRyLCBNd29yZCBvbGR2YWwsIE13b3JkIG5ld3ZhbCApCnsKICBN
d29yZCB0bXA7CgogIGFzbSB2b2xhdGlsZQogICAgKCJjbXB4Y2hnbCAlMSwlMiIKICAgICA6ICI9
YSIgKHRtcCkKICAgICA6ICJyIiAobmV3dmFsKSwgIm0iICgqcHRyKSwgIjAiIChvbGR2YWwpCiAg
ICAgOiAibWVtb3J5Iik7CgogIHJldHVybiB0bXAgPT0gb2xkdmFsOwp9CgoKCmlubGluZSBib29s
IHNtcF9jYXNfdW5zYXZlKCBNd29yZCAqcHRyLCBNd29yZCBvbGR2YWwsIE13b3JkIG5ld3ZhbCAp
CnsKICByZXR1cm4gdXBfY2FzX3Vuc2F2ZShwdHIsb2xkdmFsLG5ld3ZhbCk7Cn0KCgoKaW5saW5l
IGJvb2wgdXBfY2FzMl91bnNhdmUoIE13b3JkICpwdHIsIE13b3JkICpvbGR2YWwsIE13b3JkICpu
ZXd2YWwgKQp7CiAgY2hhciByZXQ7CiAgYXNtIHZvbGF0aWxlCiAgICAoImNtcHhjaGc4YiAlMyA7
IHNldGUgJSVjbCIKICAgICA6ICI9YyIgKHJldCksCiAgICAgICAiPWEiICgqIG9sZHZhbCksCiAg
ICAgICAiPWQiICgqKG9sZHZhbCsxKSkKICAgICA6ICJtIiAoKnB0cikgLAogICAgICAgIjEiICgq
IG9sZHZhbCksCiAgICAgICAiMiIgKCoob2xkdmFsKzEpKSwKICAgICAgICJiIiAoKiBuZXd2YWwp
LAogICAgICAgIjAiICgqKG5ld3ZhbCsxKSkKICAgICA6ICJtZW1vcnkiKTsKCiAgcmV0dXJuIHJl
dDsKfQoKCgppbmxpbmUgYm9vbCBzbXBfY2FzMl91bnNhdmUoIE13b3JkICpwdHIsIE13b3JkICpv
bGR2YWwsIE13b3JkICpuZXd2YWwgKQp7CiAgcmV0dXJuIHVwX2NhczJfdW5zYXZlKHB0cixvbGR2
YWwsbmV3dmFsKTsKfQoKCgppbmxpbmUgYm9vbCB1cF90YXMoIE13b3JkICpsICkKewogIE13b3Jk
IHRtcDsKICBhc20gdm9sYXRpbGUKICAgICgieGNoZyAlMCwlMSIgOiAiPXIiICh0bXApIDogIm0i
ICgqbCksICIwIiAoMSkKICAgICA6ICJtZW1vcnkiKTsKCiAgcmV0dXJuIHRtcDsKfQoKCgppbmxp
bmUgYm9vbCBzbXBfdGFzKCBNd29yZCAqbCApCnsKICByZXR1cm4gdXBfdGFzKGwpOwp9CiMgOTIg
ImF1dG8vaXJxLmgiIDIKCgojIDEgImF1dG8vcGljLmgiIDEKIyAxNCAiYXV0by9waWMuaCIKY2xh
c3MgUGljCnsKcHVibGljOgoKCgogIHR5cGVkZWYgdW5zaWduZWQgU3RhdHVzOwoKCgoKICBzdGF0
aWMgdm9pZCBpbml0KCk7CgoKCgogIHN0YXRpYyB2b2lkIGRpc2FibGUoIHVuc2lnbmVkIGlycW51
bSApOwoKCgoKICBzdGF0aWMgdm9pZCBlbmFibGUgKCB1bnNpZ25lZCBpcnFudW0gKTsKCgoKCiAg
c3RhdGljIHZvaWQgYWNrbm93bGVkZ2UoIHVuc2lnbmVkIGlycSApOwojIDQ5ICJhdXRvL3BpYy5o
IgogIHN0YXRpYyB2b2lkIGRpc2FibGVfbG9ja2VkKCB1bnNpZ25lZCBpcnFudW0gKTsKIyA1OCAi
YXV0by9waWMuaCIKICBzdGF0aWMgdm9pZCBlbmFibGVfbG9ja2VkICggdW5zaWduZWQgaXJxbnVt
ICk7CgoKCgoKICBzdGF0aWMgU3RhdHVzIGRpc2FibGVfYWxsX3NhdmUoKTsKCgoKCgoKICBzdGF0
aWMgdm9pZCByZXN0b3JlX2FsbCggU3RhdHVzIHMgKTsKIyA4MSAiYXV0by9waWMuaCIKICBzdGF0
aWMgdm9pZCBhY2tub3dsZWRnZV9sb2NrZWQoIHVuc2lnbmVkIGlycSApOwoKcHJpdmF0ZToKCnB1
YmxpYzoKICBlbnVtIHsKICAgIE1BU1RFUl9QSUNfQkFTRSA9IDB4MjAsCiAgICBTTEFWRVNfUElD
X0JBU0UgPSAweGEwLAogICAgT0ZGX0lDVyA9IDB4MDAsCiAgICBPRkZfT0NXID0gMHgwMSwKCiAg
ICBNQVNURVJfSUNXID0gTUFTVEVSX1BJQ19CQVNFICsgT0ZGX0lDVywKICAgIE1BU1RFUl9PQ1cg
PSBNQVNURVJfUElDX0JBU0UgKyBPRkZfT0NXLAogICAgU0xBVkVTX0lDVyA9IFNMQVZFU19QSUNf
QkFTRSArIE9GRl9JQ1csCiAgICBTTEFWRVNfT0NXID0gU0xBVkVTX1BJQ19CQVNFICsgT0ZGX09D
VywKCgoKCgogICAgSUNXX1RFTVBMQVRFID0gMHgxMCwKCiAgICBMRVZMX1RSSUdHRVIgPSAweDA4
LAogICAgRURHRV9UUklHR0VSID0gMHgwMCwKICAgIEFERFJfSU5UUlZMNCA9IDB4MDQsCiAgICBB
RERSX0lOVFJWTDggPSAweDAwLAogICAgU0lOR0xFX19NT0RFID0gMHgwMiwKICAgIENBU0NBREVf
TU9ERSA9IDB4MDAsCiAgICBJQ1c0X19ORUVERUQgPSAweDAxLAogICAgTk9fSUNXNF9ORUVEID0g
MHgwMCwKCgoKCgogICAgU0xBVkVfT05fSVIwID0gMHgwMSwKICAgIFNMQVZFX09OX0lSMSA9IDB4
MDIsCiAgICBTTEFWRV9PTl9JUjIgPSAweDA0LAogICAgU0xBVkVfT05fSVIzID0gMHgwOCwKICAg
IFNMQVZFX09OX0lSNCA9IDB4MTAsCiAgICBTTEFWRV9PTl9JUjUgPSAweDIwLAogICAgU0xBVkVf
T05fSVI2ID0gMHg0MCwKICAgIFNMQVZFX09OX0lSNyA9IDB4ODAsCgogICAgSV9BTV9TTEFWRV8w
ID0gMHgwMCwKICAgIElfQU1fU0xBVkVfMSA9IDB4MDEsCiAgICBJX0FNX1NMQVZFXzIgPSAweDAy
LAogICAgSV9BTV9TTEFWRV8zID0gMHgwMywKICAgIElfQU1fU0xBVkVfNCA9IDB4MDQsCiAgICBJ
X0FNX1NMQVZFXzUgPSAweDA1LAogICAgSV9BTV9TTEFWRV82ID0gMHgwNiwKICAgIElfQU1fU0xB
VkVfNyA9IDB4MDcsCgoKCgoKICAgIFNORl9NT0RFX0VOQSA9IDB4MTAsCiAgICBTTkZfTU9ERV9E
SVMgPSAweDAwLAogICAgQlVGRkVSRF9NT0RFID0gMHgwOCwKICAgIE5PTkJVRkRfTU9ERSA9IDB4
MDAsCiAgICBBVVRPX0VPSV9NT0QgPSAweDAyLAogICAgTlJNTF9FT0lfTU9EID0gMHgwMCwKICAg
IEk4MDg2X0VNTV9NT0QgPSAweDAxLAogICAgU0VUX01DU19NT0RFID0gMHgwMCwKCgoKCgogICAg
UElDTV9NQVNLID0gMHhGRiwKICAgIFBJQ1NfTUFTSyA9IDB4RkYsCgoKCgoKICAgIE5PTl9TUEVD
X0VPSSA9IDB4MjAsCiAgICBTUEVDSUZJQ19FT0kgPSAweDYwLAogICAgUk9UX05PTl9TUEVDID0g
MHhhMCwKICAgIFNFVF9ST1RfQUVPSSA9IDB4ODAsCiAgICBSU0VUX1JPVEFFT0kgPSAweDAwLAog
ICAgUk9UX1NQRUNfRU9JID0gMHhlMCwKICAgIFNFVF9QUklPUklUWSA9IDB4YzAsCiAgICBOT19P
UEVSQVRJT04gPSAweDQwLAoKICAgIFNFTkRfRU9JX0lSMCA9IDB4MDAsCiAgICBTRU5EX0VPSV9J
UjEgPSAweDAxLAogICAgU0VORF9FT0lfSVIyID0gMHgwMiwKICAgIFNFTkRfRU9JX0lSMyA9IDB4
MDMsCiAgICBTRU5EX0VPSV9JUjQgPSAweDA0LAogICAgU0VORF9FT0lfSVI1ID0gMHgwNSwKICAg
IFNFTkRfRU9JX0lSNiA9IDB4MDYsCiAgICBTRU5EX0VPSV9JUjcgPSAweDA3LAoKCgoKCiAgICBP
Q1dfVEVNUExBVEUgPSAweDA4LAogICAgU1BFQ0lBTF9NQVNLID0gMHg0MCwKICAgIE1BU0tfTURF
X1NFVCA9IDB4MjAsCiAgICBNQVNLX01ERV9SU1QgPSAweDAwLAogICAgUE9MTF9DT01NQU5EID0g
MHgwNCwKICAgIE5PX1BPTExfQ01ORCA9IDB4MDAsCiAgICBSRUFEX05FWFRfUkQgPSAweDAyLAog
ICAgUkVBRF9JUl9PTlJEID0gMHgwMCwKICAgIFJFQURfSVNfT05SRCA9IDB4MDEsCgoKCgogICAg
UElDTV9JQ1cxID0gKElDV19URU1QTEFURSB8IEVER0VfVFJJR0dFUiB8IEFERFJfSU5UUlZMOAog
ICAgICAgICAgICAgICAgICAgICAgIHwgQ0FTQ0FERV9NT0RFIHwgSUNXNF9fTkVFREVEKSwKICAg
IFBJQ01fSUNXMyA9IFNMQVZFX09OX0lSMiwKICAgIFBJQ01fSUNXNCA9IChTTkZfTU9ERV9ESVMg
fCBOT05CVUZEX01PREUgfCBOUk1MX0VPSV9NT0QKICAgICAgICAgICAgICAgICAgICAgICB8IEk4
MDg2X0VNTV9NT0QpLAoKICAgIFBJQ1NfSUNXMSA9IChJQ1dfVEVNUExBVEUgfCBFREdFX1RSSUdH
RVIgfCBBRERSX0lOVFJWTDgKICAgICAgICAgICAgICAgICAgICAgICB8IENBU0NBREVfTU9ERSB8
IElDVzRfX05FRURFRCksCiAgICBQSUNTX0lDVzMgPSBJX0FNX1NMQVZFXzIsCiAgICBQSUNTX0lD
VzQgPSAoU05GX01PREVfRElTIHwgTk9OQlVGRF9NT0RFIHwgTlJNTF9FT0lfTU9ECiAgICAgICAg
ICAgICAgICAgICAgICAgfCBJODA4Nl9FTU1fTU9EKSwKCiAgfTsKCnByaXZhdGU6CiMgMjE5ICJh
dXRvL3BpYy5oIgogIHN0YXRpYyB2b2lkIHBpY19pbml0KHVuc2lnbmVkIGNoYXIgbWFzdGVyX2Jh
c2UsIHVuc2lnbmVkIGNoYXIgc2xhdmVfYmFzZSk7Cn07CiMgMjI5ICJhdXRvL3BpYy5oIgojIDEg
ImF1dG8vaW8uaCIgMQojIDE2ICJhdXRvL2lvLmgiCmNsYXNzIElvCnsKcHVibGljOgoKCiAgc3Rh
dGljIHZvaWQgaW9kZWxheSgpOwoKCgoKICBzdGF0aWMgVW5zaWduZWQ4IGluOCAoIHVuc2lnbmVk
IHBvcnQgKTsKCgoKCiAgc3RhdGljIFVuc2lnbmVkMTYgaW4xNiggdW5zaWduZWQgcG9ydCApOwoK
CgoKICBzdGF0aWMgVW5zaWduZWQzMiBpbjMyKCB1bnNpZ25lZCBwb3J0ICk7CgoKCgogIHN0YXRp
YyB2b2lkIG91dDggKCBVbnNpZ25lZDggdmFsLCB1bnNpZ25lZCBwb3J0ICk7CgoKCgogIHN0YXRp
YyB2b2lkIG91dDE2KCBVbnNpZ25lZDE2IHZhbCwgdW5zaWduZWQgcG9ydCApOwoKCgoKICBzdGF0
aWMgdm9pZCBvdXQzMiggVW5zaWduZWQzMiB2YWwsIHVuc2lnbmVkIHBvcnQgKTsKCgoKCgoKCiAg
c3RhdGljIFVuc2lnbmVkOCBpbjhfcCAoIHVuc2lnbmVkIHBvcnQgKTsKCgoKCiAgc3RhdGljIFVu
c2lnbmVkMTYgaW4xNl9wKCB1bnNpZ25lZCBwb3J0ICk7CgoKCgogIHN0YXRpYyBVbnNpZ25lZDMy
IGluMzJfcCggdW5zaWduZWQgcG9ydCApOwoKCgoKICBzdGF0aWMgdm9pZCBvdXQ4X3AgKCBVbnNp
Z25lZDggdmFsLCB1bnNpZ25lZCBwb3J0ICk7CgoKCgogIHN0YXRpYyB2b2lkIG91dDE2X3AoIFVu
c2lnbmVkMTYgdmFsLCB1bnNpZ25lZCBwb3J0ICk7CgoKCgogIHN0YXRpYyB2b2lkIG91dDMyX3Ao
IFVuc2lnbmVkMzIgdmFsLCB1bnNpZ25lZCBwb3J0ICk7CgoKfTsKIyA5NiAiYXV0by9pby5oIgpp
bmxpbmUgVW5zaWduZWQ4IElvOjppbjhfcCggdW5zaWduZWQgcG9ydCApCnsKICBVbnNpZ25lZDgg
dG1wID0gaW44KHBvcnQpOwogIGlvZGVsYXkoKTsKICByZXR1cm4gdG1wOwp9CgoKCmlubGluZSBV
bnNpZ25lZDE2IElvOjppbjE2X3AoIHVuc2lnbmVkIHBvcnQgKQp7CiAgVW5zaWduZWQxNiB0bXAg
PSBpbjE2KHBvcnQpOwogIGlvZGVsYXkoKTsKICByZXR1cm4gdG1wOwp9CgoKCmlubGluZSBVbnNp
Z25lZDMyIElvOjppbjMyX3AoIHVuc2lnbmVkIHBvcnQgKQp7CiAgVW5zaWduZWQzMiB0bXAgPSBp
bjMyKHBvcnQpOwogIGlvZGVsYXkoKTsKICByZXR1cm4gdG1wOwp9CgoKCmlubGluZSB2b2lkIElv
OjpvdXQ4X3AoIFVuc2lnbmVkOCB2YWwsIHVuc2lnbmVkIHBvcnQgKQp7CiAgb3V0OCh2YWwscG9y
dCk7IGlvZGVsYXkoKTsKfQoKCgppbmxpbmUgdm9pZCBJbzo6b3V0MTZfcCggVW5zaWduZWQxNiB2
YWwsIHVuc2lnbmVkIHBvcnQgKQp7CiAgb3V0MTYodmFsLHBvcnQpOyBpb2RlbGF5KCk7Cn0KCgpp
bmxpbmUgdm9pZCBJbzo6b3V0MzJfcCggVW5zaWduZWQzMiB2YWwsIHVuc2lnbmVkIHBvcnQgKQp7
CiAgb3V0MzIodmFsLHBvcnQpOyBpb2RlbGF5KCk7Cn0KCgoKCgppbmxpbmUgdm9pZCBJbzo6aW9k
ZWxheSgpCnsKICBhc20oInB1c2hsICVlYXg7IGluYiAkMHg4MCwlYWw7IGluYiAkMHg4MCwlYWw7
IHBvcGwgJWVheCIpOwp9CgoKCmlubGluZSBVbnNpZ25lZDggSW86OmluOCggdW5zaWduZWQgcG9y
dCApCnsKICBVbnNpZ25lZDggdG1wOwogIGFzbSB2b2xhdGlsZSAoImluYiAldzEsICViMCI6ICI9
YSIodG1wKSA6ICJOZCIocG9ydCkgKTsKICByZXR1cm4gdG1wOwp9CgoKCmlubGluZSBVbnNpZ25l
ZDE2IElvOjppbjE2KCB1bnNpZ25lZCBwb3J0ICkKewogIFVuc2lnbmVkMTYgdG1wOwogIGFzbSB2
b2xhdGlsZSAoImludyAldzEsICV3MCI6ICI9YSIodG1wKSA6ICJOZCIocG9ydCkgKTsKICByZXR1
cm4gdG1wOwp9CgoKCmlubGluZSBVbnNpZ25lZDMyIElvOjppbjMyKCB1bnNpZ25lZCBwb3J0ICkK
ewogIFVuc2lnbmVkMzIgdG1wOwogIGFzbSB2b2xhdGlsZSAoImluICV3MSwgJTAiOiAiPWEiKHRt
cCkgOiAiTmQiKHBvcnQpICk7CiAgcmV0dXJuIHRtcDsKfQoKCgppbmxpbmUgdm9pZCBJbzo6b3V0
OCggVW5zaWduZWQ4IHZhbCwgdW5zaWduZWQgcG9ydCApCnsKICBhc20gdm9sYXRpbGUgKCJvdXRi
ICViMCwgJXcxIjogOiAiYSIodmFsKSwgIk5kIihwb3J0KSApOwp9CgoKCmlubGluZSB2b2lkIElv
OjpvdXQxNiggVW5zaWduZWQxNiB2YWwsIHVuc2lnbmVkIHBvcnQgKQp7CiAgYXNtIHZvbGF0aWxl
ICgib3V0dyAldzAsICV3MSI6IDogImEiKHZhbCksICJOZCIocG9ydCkgKTsKfQoKCgppbmxpbmUg
dm9pZCBJbzo6b3V0MzIoIFVuc2lnbmVkMzIgdmFsLCB1bnNpZ25lZCBwb3J0ICkKewogIGFzbSB2
b2xhdGlsZSAoIm91dCAlMCwgJXcxIjogOiAiYSIodmFsKSwgIk5kIihwb3J0KSApOwp9CiMgMjMw
ICJhdXRvL3BpYy5oIiAyCiMgMjQ1ICJhdXRvL3BpYy5oIgppbmxpbmUgdm9pZCBQaWM6OmRpc2Fi
bGUoIHVuc2lnbmVkIGlycW51bSApCnsKICBQcm9jOjpTdGF0dXMgcyA9IFByb2M6OmNsaV9zYXZl
KCk7CiAgZGlzYWJsZV9sb2NrZWQoIGlycW51bSApOwogIFByb2M6OnN0aV9yZXN0b3JlKHMpOwp9
CgoKCmlubGluZSB2b2lkIFBpYzo6ZW5hYmxlKCB1bnNpZ25lZCBpcnFudW0gKQp7CiAgUHJvYzo6
U3RhdHVzIHMgPSBQcm9jOjpjbGlfc2F2ZSgpOwogIGVuYWJsZV9sb2NrZWQoIGlycW51bSApOwog
IFByb2M6OnN0aV9yZXN0b3JlKHMpOwp9CgoKCmlubGluZSB2b2lkIFBpYzo6YWNrbm93bGVkZ2Uo
IHVuc2lnbmVkIGlycSApCnsKICBQcm9jOjpTdGF0dXMgcyA9IFByb2M6OmNsaV9zYXZlKCk7CiAg
YWNrbm93bGVkZ2VfbG9ja2VkKGlycSk7CiAgUHJvYzo6c3RpX3Jlc3RvcmUocyk7Cn0KCgoKaW5s
aW5lIHZvaWQgUGljOjpkaXNhYmxlX2xvY2tlZCggdW5zaWduZWQgaXJxICkKewogIGlmIChpcnEg
PCA4KQogICAgSW86Om91dDgoSW86OmluOChNQVNURVJfT0NXKSB8ICgxIDw8IGlycSksIE1BU1RF
Ul9PQ1cpOwogIGVsc2UKICAgIElvOjpvdXQ4KElvOjppbjgoU0xBVkVTX09DVykgfCAoMSA8PCAo
aXJxLTgpKSwgU0xBVkVTX09DVyk7Cn0KCgoKaW5saW5lIHZvaWQgUGljOjplbmFibGVfbG9ja2Vk
KCB1bnNpZ25lZCBpcnEgKQp7CiAgaWYgKGlycSA8IDgpCiAgICBJbzo6b3V0OChJbzo6aW44KE1B
U1RFUl9PQ1cpICYgfigxIDw8IGlycSksIE1BU1RFUl9PQ1cpOwogIGVsc2UKICAgIElvOjpvdXQ4
KElvOjppbjgoU0xBVkVTX09DVykgJiB+KDEgPDwgKGlycS04KSksIFNMQVZFU19PQ1cpOwp9CgoK
CmlubGluZSB2b2lkIFBpYzo6YWNrbm93bGVkZ2VfbG9ja2VkKCB1bnNpZ25lZCBpcnEgKQp7CiAg
aWYgKGlycSA+PSA4KQogICAgewogICAgICBJbzo6b3V0OChOT05fU1BFQ19FT0ksIFNMQVZFU19J
Q1cpOwogICAgICBJbzo6b3V0OChPQ1dfVEVNUExBVEUgfCBSRUFEX05FWFRfUkQgfCBSRUFEX0lT
X09OUkQsIFNMQVZFU19JQ1cpOwogICAgICBpZiAoSW86OmluOChTTEFWRVNfSUNXKSkKICAgICAg
ICByZXR1cm47CiAgICB9CiAgSW86Om91dDgoTk9OX1NQRUNfRU9JLCBNQVNURVJfSUNXKTsKfQoK
CgppbmxpbmUgUGljOjpTdGF0dXMgUGljOjpkaXNhYmxlX2FsbF9zYXZlKCkKewogIFN0YXR1cyBz
OwogIHMgPSBJbzo6aW44KE1BU1RFUl9PQ1cpOwogIHMgfD0gSW86OmluOChTTEFWRVNfT0NXKSA8
PCA4OwogIElvOjpvdXQ4KCAweGZmLCBNQVNURVJfT0NXICk7CiAgSW86Om91dDgoIDB4ZmYsIFNM
QVZFU19PQ1cgKTsKCiAgcmV0dXJuIHM7Cn0KCgoKaW5saW5lIHZvaWQgUGljOjpyZXN0b3JlX2Fs
bCggU3RhdHVzIHMgKQp7CiAgSW86Om91dDgoIHMgJiAweDBmZiwgTUFTVEVSX09DVyApOwogIElv
OjpvdXQ4KCAocyA+PiA4KSAmIDB4MGZmLCBTTEFWRVNfT0NXICk7Cn0KIyA5NSAiYXV0by9pcnEu
aCIgMgojIDEwOCAiYXV0by9pcnEuaCIKaW5saW5lIHZvaWQgaXJxX3Q6Om1heWJlX2Fja25vd2xl
ZGdlKCkKewogIGlmIChfYWNrX2luX2tlcm5lbCkKICAgIHsKICAgICAgdW5zaWduZWQgaXJxbnVt
ID0gaWQoKS5pcnEoKTsKCiAgICAgIFBpYzo6ZGlzYWJsZV9sb2NrZWQoaXJxbnVtKTsKICAgICAg
UGljOjphY2tub3dsZWRnZV9sb2NrZWQoaXJxbnVtKTsKICAgIH0KfQoKCgoKaW5saW5lIHZvaWQg
aXJxX3Q6Om1heWJlX2VuYWJsZSgpCnsKICBpZiAoX2Fja19pbl9rZXJuZWwpCiAgICB7CiAgICAg
IHVuc2lnbmVkIGlycW51bSA9IGlkKCkuaXJxKCk7CiAgICAgIFBpYzo6ZW5hYmxlKGlycW51bSk7
CiAgICB9Cn0KCgoKaW5saW5lIGlycV90ICppcnFfdDo6bG9va3VwKCB1bnNpZ25lZCBpcnEgKQp7
CiAgaWYoaXJxIDwgQ29uZmlnOjpNQVhfTlVNX0lSUSkKICAgIHJldHVybiBpcnFzW2lycV07CiAg
ZWxzZQogICAgcmV0dXJuIDA7Cn0KCgoKaW5saW5lIHZvaWQgaXJxX3Q6OnJlZ2lzdGVyX2lycSgg
dW5zaWduZWQgaXJxLCBpcnFfdCAqaSApCnsKICBpZihpcnEgPCBDb25maWc6Ok1BWF9OVU1fSVJR
KSB7CiAgICBpcnFzW2lycV0gPSBpOwogIH0KfQojIDEzICJhdXRvL3Byb2ZpbGVfaS5oIiAyCgoj
IDEgImF1dG8vZ21vbi5oIiAxCiMgNDggImF1dG8vZ21vbi5oIgpzdHJ1Y3QgcGhkciB7CiAgICBj
aGFyICpscGM7CiAgICBjaGFyICpocGM7CiAgICBpbnQgbmNudDsKCiAgICBpbnQgdmVyc2lvbjsK
ICAgIGludCBwcm9mcmF0ZTsKICAgIGNoYXIgc3BhcmVbMyo0XTsKCn07CiMgMTAyICJhdXRvL2dt
b24uaCIKc3RydWN0IHRvc3RydWN0IHsKICAgIGNoYXIgKnNlbGZwYzsKICAgIGxvbmcgY291bnQ7
CiAgICB1bnNpZ25lZCBzaG9ydCBsaW5rOwp9OwoKCgoKCgpzdHJ1Y3QgcmF3YXJjIHsKICAgIHVu
c2lnbmVkIGxvbmcgcmF3X2Zyb21wYzsKICAgIHVuc2lnbmVkIGxvbmcgcmF3X3NlbGZwYzsKICAg
IGxvbmcgcmF3X2NvdW50Owp9OwojIDEzMCAiYXV0by9nbW9uLmgiCmV4dGVybiAiQyIgdm9pZCBt
b25jb250cm9sKCBpbnQgbW9kZSApOwoKZXh0ZXJuICJDIiB2b2lkIG1vbnN0YXJ0dXAoIGNoYXIg
Kmxvd3BjLCBjaGFyICpoaWdocGMsIHVuc2lnbmVkIHByb2ZfcmF0ZSApOwoKZXh0ZXJuICJDIiB2
b2lkIF9tY2xlYW51cCggdm9pZCApOwoKZXh0ZXJuICJDIiB2b2lkIF9fbWNvdW50X2ludGVybmFs
KHVuc2lnbmVkIHNob3J0ICpmcm9tcGNpbmRleCwgY2hhciAqc2VsZnBjICk7CiMgMTUgImF1dG8v
cHJvZmlsZV9pLmgiIDIKIyAxICJhdXRvL3VuaXN0ZC5oIiAxCiMgMTggImF1dG8vdW5pc3RkLmgi
CmV4dGVybiBjaGFyICpwcl9iYXNlOwpleHRlcm4gdm1fb2Zmc2V0X3QgcHJfb2ZmOwpleHRlcm4g
dm1fc2l6ZV90IHByX3NpemU7CmV4dGVybiB2bV9zaXplX3QgcHJfc2NhbGU7CgppbnQgY3JlYXQo
Y29uc3QgY2hhciogZm5hbWUsIGludCBtb2RlKTsKCnZvaWQgcGVycm9yKGNvbnN0IGNoYXIgKnMp
OwoKc3NpemVfdCB3cml0ZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpOwoK
aW50IGNsb3NlKGludCBmZCk7Cgp2b2lkICogc2JyayhzaXplX3Qgc2l6ZSk7Cgp2b2lkIHNicmtf
ZnJlZSh2b2lkKiBidWYsIHNpemVfdCBsZW4pOwoKaW50IHByb2ZpbChjaGFyICpzYW1wbGVzLCB2
bV9zaXplX3Qgc2l6ZSwgdm1fb2Zmc2V0X3Qgb2Zmc2V0LCB2bV9zaXplX3Qgc2NhbGUpOwojIDE2
ICJhdXRvL3Byb2ZpbGVfaS5oIiAyCiMgMSAiLi4vc3JjL2tlcm4vZW50cnkuaCIgMQoKCgoKCiMg
MSAiLi4vc3JjL2xpYi9rZXJuL2luY2x1ZGUvZmx1eC94ODYvYmFzZV90cmFwLmgiIDEKIyA0MyAi
Li4vc3JjL2xpYi9rZXJuL2luY2x1ZGUvZmx1eC94ODYvYmFzZV90cmFwLmgiCnN0cnVjdCB0cmFw
X3N0YXRlCnsKCiAgICAgICAgdW5zaWduZWQgaW50IGdzOwogICAgICAgIHVuc2lnbmVkIGludCBm
czsKICAgICAgICB1bnNpZ25lZCBpbnQgZXM7CiAgICAgICAgdW5zaWduZWQgaW50IGRzOwoKCiAg
ICAgICAgdW5zaWduZWQgaW50IGVkaTsKICAgICAgICB1bnNpZ25lZCBpbnQgZXNpOwogICAgICAg
IHVuc2lnbmVkIGludCBlYnA7CiAgICAgICAgdW5zaWduZWQgaW50IGNyMjsKICAgICAgICB1bnNp
Z25lZCBpbnQgZWJ4OwogICAgICAgIHVuc2lnbmVkIGludCBlZHg7CiAgICAgICAgdW5zaWduZWQg
aW50IGVjeDsKICAgICAgICB1bnNpZ25lZCBpbnQgZWF4OwoKCiAgICAgICAgdW5zaWduZWQgaW50
IHRyYXBubzsKCgogICAgICAgIHVuc2lnbmVkIGludCBlcnI7CgoKICAgICAgICB1bnNpZ25lZCBp
bnQgZWlwOwogICAgICAgIHVuc2lnbmVkIGludCBjczsKICAgICAgICB1bnNpZ25lZCBpbnQgZWZs
YWdzOwogICAgICAgIHVuc2lnbmVkIGludCBlc3A7CiAgICAgICAgdW5zaWduZWQgaW50IHNzOwoK
CiAgICAgICAgdW5zaWduZWQgaW50IHY4Nl9lczsKICAgICAgICB1bnNpZ25lZCBpbnQgdjg2X2Rz
OwogICAgICAgIHVuc2lnbmVkIGludCB2ODZfZnM7CiAgICAgICAgdW5zaWduZWQgaW50IHY4Nl9n
czsKfTsKIyA5MCAiLi4vc3JjL2xpYi9rZXJuL2luY2x1ZGUvZmx1eC94ODYvYmFzZV90cmFwLmgi
CmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gdm9pZCBiYXNlX3RyYXBfaW5pdCh2b2lkKTsKCgoK
CgoKCmV4dGVybiBzdHJ1Y3QgZ2F0ZV9pbml0X2VudHJ5IGJhc2VfdHJhcF9pbml0dGFiW107CiMg
MTE3ICIuLi9zcmMvbGliL2tlcm4vaW5jbHVkZS9mbHV4L3g4Ni9iYXNlX3RyYXAuaCIKZXh0ZXJu
IGludCAoKmJhc2VfdHJhcF9oYW5kbGVyKShzdHJ1Y3QgdHJhcF9zdGF0ZSAqc3RhdGUpOwojIDEy
OCAiLi4vc3JjL2xpYi9rZXJuL2luY2x1ZGUvZmx1eC94ODYvYmFzZV90cmFwLmgiCnZvaWQgdHJh
cF9kdW1wKGNvbnN0IHN0cnVjdCB0cmFwX3N0YXRlICpzdCk7CiMgMTM3ICIuLi9zcmMvbGliL2tl
cm4vaW5jbHVkZS9mbHV4L3g4Ni9iYXNlX3RyYXAuaCIKdm9pZCB0cmFwX2R1bXBfcGFuaWMoY29u
c3Qgc3RydWN0IHRyYXBfc3RhdGUgKnN0KTsKfQojIDcgIi4uL3NyYy9rZXJuL2VudHJ5LmgiIDIK
CmV4dGVybiAiQyIgdm9pZCBwcm9maWxlX2ludGVycnVwdF9lbnRyeSgpOwoKZXh0ZXJuIGdhdGVf
aW5pdF9lbnRyeSBpZHRfaW5pdF90YWJsZVtdOwoKY29uc3QgdW5zaWduZWQgaWR0X21heCA9IDB4
NDA7CiMgMTcgImF1dG8vcHJvZmlsZV9pLmgiIDIKIyAxICJhdXRvL3RocmVhZC5oIiAxCgoKCgoK
IyAxICIuLi9zcmMvbGliL21pbmlsaWJjL2lhMzIvaW5jbHVkZS9zZXRqbXAuaCIgMQoKCgoKCgoK
dHlwZWRlZiBpbnQgX19qbXBfYnVmWzZdOwojIDIxICIuLi9zcmMvbGliL21pbmlsaWJjL2lhMzIv
aW5jbHVkZS9zZXRqbXAuaCIKdHlwZWRlZiBzdHJ1Y3QgX19qbXBfYnVmX3RhZwp7CgoKCiAgX19q
bXBfYnVmIF9fam1wYnVmOwp9IGptcF9idWZbMV07CgpleHRlcm4gIkMiIHsKCnZvaWQgbG9uZ2pt
cCAoam1wX2J1ZiBfX2VudiwgaW50IF9fdmFsKQogICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0
dXJuX18pKTsKCmludCBzZXRqbXAoam1wX2J1ZiBlbnYpOwoKfQojIDcgImF1dG8vdGhyZWFkLmgi
IDIKCgoKCiMgMSAiYXV0by90aHJlYWRpZC5oIiAxCiMgMTMgImF1dG8vdGhyZWFkaWQuaCIKY2xh
c3MgVGhyZWFkOwoKY2xhc3MgdGhyZWFkaWRfdAp7CgogIFRocmVhZCAqdDsKCnB1YmxpYzoKCiAg
dGhyZWFkaWRfdChMNF91aWQgY29uc3QgKnB1YmxpY19pZCk7CgogIHRocmVhZGlkX3QoTDRfdWlk
IHB1YmxpY19pZCk7CgogIHRocmVhZGlkX3QoVGhyZWFkKiB0aHJlYWQpOwoKICBUaHJlYWQgKiBs
b29rdXAoKSBjb25zdDsKCiAgYm9vbCBpc19uaWwoKSBjb25zdDsKCiAgYm9vbCBpc192YWxpZCgp
IGNvbnN0Owp9OwoKCgoKCgoKIyAxICJhdXRvL3RocmVhZF91dGlsLmgiIDEKIyAxMyAiYXV0by90
aHJlYWRfdXRpbC5oIgpjbGFzcyBUaHJlYWQ7CgpUaHJlYWQqIGxvb2t1cF90aHJlYWQoTDRfdWlk
IGlkKTsKClRocmVhZCogbG9va3VwX2ZpcnN0X3RocmVhZCh1bnNpZ25lZCBzcGFjZSk7CiMgMzQg
ImF1dG8vdGhyZWFkX3V0aWwuaCIKaW5saW5lIFRocmVhZCoKbG9va3VwX3RocmVhZChMNF91aWQg
aWQpCnsKICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUaHJlYWQgKj4KICAgIChpZC5pc19pbnZh
bGlkKCkKICAgICA/IDAKICAgICA6IGttZW06Om1lbV90Y2JzIHwgKChpZC5ndGhyZWFkKCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAqIENvbmZpZzo6dGhyZWFkX2Jsb2NrX3NpemUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAmIH5Db25maWc6OnRocmVhZF9ibG9ja19tYXNrKSk7Cn0KCgoK
aW5saW5lIFRocmVhZCoKbG9va3VwX2ZpcnN0X3RocmVhZCh1bnNpZ25lZCBzcGFjZSkKewogIHJl
dHVybiBsb29rdXBfdGhyZWFkKCBMNF91aWQoIHNwYWNlLCAwICkgKTsKfQojIDQyICJhdXRvL3Ro
cmVhZGlkLmgiIDIKIyA1MSAiYXV0by90aHJlYWRpZC5oIgppbmxpbmUgdGhyZWFkaWRfdDo6dGhy
ZWFkaWRfdChMNF91aWQgY29uc3QgKnB1YmxpY19pZCkKICA6IHQgKGxvb2t1cF90aHJlYWQgKCpw
dWJsaWNfaWQpKQp7IH0KCgoKaW5saW5lIHRocmVhZGlkX3Q6OnRocmVhZGlkX3QoTDRfdWlkIHB1
YmxpY19pZCkKICA6IHQgKGxvb2t1cF90aHJlYWQgKHB1YmxpY19pZCkpCnsgfQoKCgppbmxpbmUg
dGhyZWFkaWRfdDo6dGhyZWFkaWRfdChUaHJlYWQqIHRocmVhZCkKICA6IHQodGhyZWFkKQp7IH0K
CgoKaW5saW5lIFRocmVhZCAqIHRocmVhZGlkX3Q6Omxvb2t1cCgpIGNvbnN0CnsgcmV0dXJuIHQ7
IH0KCgoKaW5saW5lIGJvb2wKdGhyZWFkaWRfdDo6aXNfbmlsKCkgY29uc3QKeyByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPih0KSA9PSBrbWVtOjptZW1fdGNiczsgfQoKCgpp
bmxpbmUgYm9vbAp0aHJlYWRpZF90Ojppc192YWxpZCgpIGNvbnN0CnsgcmV0dXJuIHQ7IH0KIyAx
MiAiYXV0by90aHJlYWQuaCIgMgojIDEgImF1dG8vc3BhY2UuaCIgMQoKCgoKCgojIDEgImF1dG8v
c3BhY2VfaW5kZXguaCIgMQojIDExICJhdXRvL3NwYWNlX2luZGV4LmgiCmNsYXNzIFNwYWNlOwpj
bGFzcyBTcGFjZV9yZWdpc3RyeTsKCmNsYXNzIFNwYWNlX2luZGV4CnsKcHVibGljOgogIGVudW0g
eyBtYXhfc3BhY2VfbnVtYmVyID0gMSA8PCAxMSB9OwoKcHJpdmF0ZToKCiAgc3RhdGljIFNwYWNl
X3JlZ2lzdHJ5KiBzcGFjZXM7CgoKICB1bnNpZ25lZCBzcGFjZV9pZDsKCnB1YmxpYzoKICBleHBs
aWNpdCBTcGFjZV9pbmRleCh1bnNpZ25lZCBudW1iZXIpOwoKCiAgb3BlcmF0b3IgdW5zaWduZWQg
KCk7CgogIFNwYWNlICogbG9va3VwKCk7CgogIGJvb2wgc2V0X2NoaWVmKFNwYWNlX2luZGV4IG9s
ZF9jaGllZiwgU3BhY2VfaW5kZXggbmV3X2NoaWVmKTsKCiAgU3BhY2VfaW5kZXggY2hpZWYoKTsK
CiAgc3RhdGljIGJvb2wgYWRkKFNwYWNlICpuZXdfc3BhY2UsIHVuc2lnbmVkIG5ld19udW1iZXIp
OwoKICBzdGF0aWMgYm9vbCBkZWwoU3BhY2VfaW5kZXggbnVtYmVyLCBTcGFjZV9pbmRleCBjaGll
Zik7Cn07CiMgNjEgImF1dG8vc3BhY2VfaW5kZXguaCIKaW5saW5lIFNwYWNlX2luZGV4OjpTcGFj
ZV9pbmRleCh1bnNpZ25lZCBudW1iZXIpCgogIDogc3BhY2VfaWQobnVtYmVyKQp7IH0KCgoKaW5s
aW5lIFNwYWNlX2luZGV4OjpvcGVyYXRvciB1bnNpZ25lZCAoKQp7IHJldHVybiBzcGFjZV9pZDsg
fQoKCgoKc3RydWN0IFNwYWNlX3JlZ2lzdHJ5CnsKICB1bmlvbiB7CiAgICBTcGFjZSAqc3BhY2U7
CiAgICBzdHJ1Y3QgewogICAgICB1bnNpZ25lZCBkZWFkIDogMTsKICAgICAgdW5zaWduZWQgY2hp
ZWYgOiAzMTsKICAgIH0gc3RhdGU7CiAgfTsKCgpwdWJsaWM6CgogIFNwYWNlX3JlZ2lzdHJ5KCk7
Cn07CgoKCmlubGluZSBTcGFjZSAqClNwYWNlX2luZGV4Ojpsb29rdXAoKQp7CiAgaWYgKHNwYWNl
c1tzcGFjZV9pZF0uc3RhdGUuZGVhZCkKICAgIHJldHVybiAwOwoKICByZXR1cm4gc3BhY2VzW3Nw
YWNlX2lkXS5zcGFjZTsKfQoKCgoKaW5saW5lIFNwYWNlX3JlZ2lzdHJ5OjpTcGFjZV9yZWdpc3Ry
eSgpCnsKICBzdGF0ZS5jaGllZiA9IDA7CiAgc3RhdGUuZGVhZCA9IDE7Cn0KCgoKaW5saW5lIGJv
b2wKU3BhY2VfaW5kZXg6OnNldF9jaGllZihTcGFjZV9pbmRleCBvbGRfY2hpZWYsIFNwYWNlX2lu
ZGV4IG5ld19jaGllZikKewogIFNwYWNlX3JlZ2lzdHJ5IG8oc3BhY2VzW3NwYWNlX2lkXSk7Cgog
IGlmICghIG8uc3RhdGUuZGVhZCB8fCBvLnN0YXRlLmNoaWVmICE9IG9sZF9jaGllZikKICAgIHJl
dHVybiBmYWxzZTsKCiAgU3BhY2VfcmVnaXN0cnkgbjsKICBuLnN0YXRlLmNoaWVmID0gbmV3X2No
aWVmOwoKICByZXR1cm4gc21wX2Nhcygmc3BhY2VzW3NwYWNlX2lkXSwgbywgbik7Cn0KCgoKaW5s
aW5lIFNwYWNlX2luZGV4ClNwYWNlX2luZGV4OjpjaGllZigpCnsKICAoKHZvaWQpICgoc3BhY2Vz
W3NwYWNlX2lkXS5zdGF0ZS5kZWFkKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInNwYWNlc1tzcGFj
ZV9pZF0uc3RhdGUuZGVhZCIsICJhdXRvL3NwYWNlX2luZGV4LmgiLCAxMzEsICgoY29uc3QgY2hh
ciAqKSAwKSksIDApKSk7CgogIHJldHVybiBTcGFjZV9pbmRleChzcGFjZXNbc3BhY2VfaWRdLnN0
YXRlLmNoaWVmKTsKfQoKCgppbmxpbmUgYm9vbApTcGFjZV9pbmRleDo6YWRkKFNwYWNlICpuZXdf
c3BhY2UsIHVuc2lnbmVkIG5ld19udW1iZXIpCnsKICBTcGFjZV9yZWdpc3RyeSBvKHNwYWNlc1tu
ZXdfbnVtYmVyXSk7CiAgKCh2b2lkKSAoKG8uc3RhdGUuZGVhZCkgPyAwIDogKF9fYXNzZXJ0X2Zh
aWwgKCJvLnN0YXRlLmRlYWQiLCAiYXV0by9zcGFjZV9pbmRleC5oIiwgMTQyLCAoKGNvbnN0IGNo
YXIgKikgMCkpLCAwKSkpOwoKICBTcGFjZV9yZWdpc3RyeSBuOwogIG4uc3BhY2UgPSBuZXdfc3Bh
Y2U7CgogIHJldHVybiBzbXBfY2FzKCZzcGFjZXNbbmV3X251bWJlcl0sIG8sIG4pOwp9CgoKCmlu
bGluZSBib29sClNwYWNlX2luZGV4OjpkZWwoU3BhY2VfaW5kZXggbnVtYmVyLCBTcGFjZV9pbmRl
eCBjaGllZikKewogICgodm9pZCkgKChudW1iZXIgPCBtYXhfc3BhY2VfbnVtYmVyKSA/IDAgOiAo
X19hc3NlcnRfZmFpbCAoIm51bWJlciA8IG1heF9zcGFjZV9udW1iZXIiLCAiYXV0by9zcGFjZV9p
bmRleC5oIiwgMTU1LCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwogICgodm9pZCkgKCghIHNw
YWNlc1tudW1iZXJdLnN0YXRlLmRlYWQpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiISBzcGFjZXNb
bnVtYmVyXS5zdGF0ZS5kZWFkIiwgImF1dG8vc3BhY2VfaW5kZXguaCIsIDE1NiwgKChjb25zdCBj
aGFyICopIDApKSwgMCkpKTsKCgogIHNwYWNlc1tudW1iZXJdLnN0YXRlLmRlYWQgPSAxOwogIHNw
YWNlc1tudW1iZXJdLnN0YXRlLmNoaWVmID0gY2hpZWY7CgogIHJldHVybiB0cnVlOwp9CiMgOCAi
YXV0by9zcGFjZS5oIiAyCiMgMSAiYXV0by9zcGFjZV9jb250ZXh0LmgiIDEKIyAyMCAiYXV0by9z
cGFjZV9jb250ZXh0LmgiCmNsYXNzIFNwYWNlX2NvbnRleHQKewpwcm90ZWN0ZWQ6CgogIHBkX2Vu
dHJ5X3QgX2RpclsxMDI0XTsKCnB1YmxpYzoKICBTcGFjZV9jb250ZXh0KCk7CgogIHN0YXRpYyBT
cGFjZV9jb250ZXh0ICogY3VycmVudCgpOwoKICB2b2lkIG1ha2VfY3VycmVudCgpOwoKICB2bV9v
ZmZzZXRfdCBsb29rdXAodm1fb2Zmc2V0X3QgYSkgY29uc3Q7CgogIGNvbnN0IHBkX2VudHJ5X3Qq
IGRpcigpIGNvbnN0OwoKICB2b2lkIHN3aXRjaGluX2NvbnRleHQoKTsKfTsKIyA0NyAiYXV0by9z
cGFjZV9jb250ZXh0LmgiCiMgMSAiYXV0by9nbG9iYWxzLmgiIDEKIyAxNyAiYXV0by9nbG9iYWxz
LmgiCmNsYXNzIENvbnRleHQ7CmNsYXNzIFRocmVhZDsKY2xhc3MgU3BhY2U7CgoKZXh0ZXJuIFRo
cmVhZCAqc2lnbWEwX3RocmVhZCwgKmtlcm5lbF90aHJlYWQsICpuaWxfdGhyZWFkOwpleHRlcm4g
U3BhY2UgKnNpZ21hMDsKZXh0ZXJuIGJvb2wgcnVubmluZzsKIyA0NCAiYXV0by9nbG9iYWxzLmgi
CkNvbnRleHQgKmNvbnRleHRfb2YoY29uc3Qgdm9pZCAqcHRyKTsKCkNvbnRleHQgKmN1cnJlbnQo
KTsKIyA2NiAiYXV0by9nbG9iYWxzLmgiCmlubGluZSBDb250ZXh0ICpjb250ZXh0X29mKGNvbnN0
IHZvaWQgKnB0cikKewogIHJldHVybiByZWludGVycHJldF9jYXN0PENvbnRleHQgKj4KICAgIChy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGxvbmc+KHB0cikgJiB+KENvbmZpZzo6dGhyZWFkX2Js
b2NrX3NpemUgLSAxKSk7Cn0KCgoKaW5saW5lIENvbnRleHQgKmN1cnJlbnQoKQp7CiAgdm9pZCog
ZXNwOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoIm1vdmwgJSVlc3AsICUwIiA6ICI9cSIg
KGVzcCkpOwoKICByZXR1cm4gY29udGV4dF9vZiAoZXNwKTsKfQojIDQ4ICJhdXRvL3NwYWNlX2Nv
bnRleHQuaCIgMgojIDU2ICJhdXRvL3NwYWNlX2NvbnRleHQuaCIKaW5saW5lIFNwYWNlX2NvbnRl
eHQgKiBTcGFjZV9jb250ZXh0OjpjdXJyZW50KCkKewogIEFkZHJlc3Mgc2M7CiAgYXNtICgiIG1v
diAlJWNyMywgJTAiIDogIj1yIihzYykgKTsKICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTcGFj
ZV9jb250ZXh0Kj4oa21lbTo6cGh5c190b192aXJ0KHNjKSk7Cn0KCgoKaW5saW5lIHZvaWQgU3Bh
Y2VfY29udGV4dDo6bWFrZV9jdXJyZW50KCkKewogIGFzbSB2b2xhdGlsZSAoIiBtb3YgJTAsICUl
Y3IzIiA6IDogInIiKGttZW06OnZpcnRfdG9fcGh5cyh0aGlzKSkgKTsKfQoKCgppbmxpbmUgdm1f
b2Zmc2V0X3QKU3BhY2VfY29udGV4dDo6bG9va3VwKHZtX29mZnNldF90IGEpIGNvbnN0CnsKIyA4
NCAiYXV0by9zcGFjZV9jb250ZXh0LmgiCiAgcGRfZW50cnlfdCBwID0gX2RpclsoYSA+PiAyMikg
JiAweDNmZl07CiAgaWYgKCEgKHAgJiAweDAwMDAwMDAxKSkgcmV0dXJuIDB4ZmZmZmZmZmY7CiAg
aWYgKHAgJiAweDAwMDAwMDgwKSByZXR1cm4gKHAgJiBDb25maWc6OlNVUEVSUEFHRV9NQVNLKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChhICYgfkNvbmZpZzo6U1VQRVJQQUdF
X01BU0spOwogIHB0X2VudHJ5X3QgdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8cHRfZW50cnlfdCAqPgog
ICAgKChwICYgQ29uZmlnOjpQQUdFX01BU0spICsga21lbTo6bWVtX3BoeXMpWyhhID4+IDEyKSAm
IDB4M2ZmXTsKCiAgcmV0dXJuICh0ICYgMHgwMDAwMDAwMSkgPyAodCAmIENvbmZpZzo6UEFHRV9N
QVNLKSB8IChhICYgfkNvbmZpZzo6UEFHRV9NQVNLKQogICAgOiAweGZmZmZmZmZmOwp9CgoKCmlu
bGluZSBjb25zdCBwZF9lbnRyeV90KgpTcGFjZV9jb250ZXh0OjpkaXIoKSBjb25zdAp7CiAgcmV0
dXJuIF9kaXI7Cn0KCgoKaW5saW5lIHZvaWQKU3BhY2VfY29udGV4dDo6c3dpdGNoaW5fY29udGV4
dCgpCnsKCiAgYm9vbCBuZWVkX2ZsdXNoX3RsYiA9IGZhbHNlOwoKICB1bnNpZ25lZCBpbmRleCA9
IChrbWVtOjppcGNfd2luZG93KDApID4+IDIyKSAmIDB4M2ZmOwoKICBpZiAoX2RpcltpbmRleF0g
fHwgX2RpciBbaW5kZXggKyAxXSkKICAgIHsKICAgICAgX2RpcltpbmRleF0gPSAwOwogICAgICBf
ZGlyW2luZGV4ICsgMV0gPSAwOwogICAgICBuZWVkX2ZsdXNoX3RsYiA9IHRydWU7CiAgICB9Cgog
IGluZGV4ID0gKGttZW06OmlwY193aW5kb3coMSkgPj4gMjIpICYgMHgzZmY7CgogIGlmIChfZGly
W2luZGV4XSB8fCBfZGlyIFtpbmRleCArIDFdKQogICAgewogICAgICBfZGlyW2luZGV4XSA9IDA7
CiAgICAgIF9kaXJbaW5kZXggKyAxXSA9IDA7CiAgICAgIG5lZWRfZmx1c2hfdGxiID0gdHJ1ZTsK
ICAgIH0KCiAgaWYgKG5lZWRfZmx1c2hfdGxiCiAgICAgIHx8IFNwYWNlX2NvbnRleHQ6OmN1cnJl
bnQoKSAhPSB0aGlzKQogICAgewogICAgICBtYWtlX2N1cnJlbnQoKTsKICAgIH0KfQojIDkgImF1
dG8vc3BhY2UuaCIgMgojIDIyICJhdXRvL3NwYWNlLmgiCmNsYXNzIFNwYWNlIDogcHVibGljIFNw
YWNlX2NvbnRleHQKewpwdWJsaWM6CgogIGVudW0gc3RhdHVzX3QgewogICAgSW5zZXJ0X29rID0g
MCwKICAgIEluc2VydF93YXJuX2V4aXN0cywKICAgIEluc2VydF93YXJuX2F0dHJpYl91cGdyYWRl
LAogICAgSW5zZXJ0X2Vycl9ub21lbSwKICAgIEluc2VydF9lcnJfZXhpc3RzCiAgfTsKCgogIGVu
dW0gcGFnZV9hdHRyaWJfdCB7CiAgICBQYWdlX25vX2F0dHJpYnMgPSAwLAogICAgUGFnZV93cml0
YWJsZSA9IDB4MDAwMDAwMDIsCiAgICBQYWdlX25vbmNhY2hlYWJsZSA9IDB4MDAwMDAwMTAgfCAw
eDAwMDAwMDA4LAoKICAgIFBhZ2VfdXNlcl9hY2Nlc3NpYmxlID0gMHgwMDAwMDAwNCwKCgogICAg
UGFnZV9hbGxfYXR0cmlicyA9IFBhZ2Vfd3JpdGFibGUgfCBQYWdlX25vbmNhY2hlYWJsZSB8IFBh
Z2VfdXNlcl9hY2Nlc3NpYmxlCiAgfTsKCnByaXZhdGU6CiAgU3BhY2UoKTsKICBTcGFjZShjb25z
dCBTcGFjZSYpOwoKCiAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbnVtYmVyX2luZGV4CiAg
ICA9IChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGxvbmc+KCZfdW51c2VkMV8xKSA+PiAyMikg
JiAweDNmZjsKICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBjaGllZl9pbmRleAogICAgPSAo
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPigmX3VudXNlZDJfMSkgPj4gMjIpICYgMHgz
ZmY7CgogIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGlvX2NvdW50ZXJfcGRfaW5kZXgKICAg
ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4oJl91bnVzZWQ0X2lvXzEpID4+IDIy
KSAmIDB4M2ZmOwogIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGlvX2NvdW50ZXJfcHRfaW5k
ZXgKICAgID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4oJl91bnVzZWQ0X2lvXzEp
ID4+IDEyKSAmIDB4M2ZmOwoKcHVibGljOgoKCgoKICBTcGFjZV9pbmRleCBzcGFjZSgpIGNvbnN0
OwoKCgoKICBTcGFjZV9pbmRleCBjaGllZigpIGNvbnN0OwojIDgzICJhdXRvL3NwYWNlLmgiCiAg
Ym9vbCB1cGRhdGUodm1fb2Zmc2V0X3QgYWRkciwgY29uc3QgU3BhY2VfY29udGV4dCAqZnJvbSwg
dm1fb2Zmc2V0X3QgZnJvbV9hZGRyKTsKCgogIHZvaWQgKiBvcGVyYXRvciBuZXcoc2l6ZV90KTsK
CiAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqYmxvY2spOwojIDEwMSAiYXV0by9zcGFjZS5o
IgogIHZtX29mZnNldF90IHZpcnRfdG9fcGh5cyh2bV9vZmZzZXRfdCBhKSBjb25zdDsKIyAxMTEg
ImF1dG8vc3BhY2UuaCIKICB1bnNpZ25lZCBnZXRfaW9fY291bnRlcih2b2lkKTsKCgoKCgogIGJv
b2wgaXNfcHJpdmlsZWdlZCh2b2lkKTsKCgoKCgogIHZvaWQgYWRkdG9faW9fY291bnRlcihpbnQg
aW5jcik7CgoKCgoKCiAgYm9vbCBpb19sb29rdXAodm1fb2Zmc2V0X3QgcG9ydF9udW1iZXIpOwoK
CgoKCgoKICBTcGFjZTo6c3RhdHVzX3QgaW9faW5zZXJ0KHZtX29mZnNldF90IHBvcnRfbnVtYmVy
KTsKCgoKCiAgdm9pZCBpb19kZWxldGUodm1fb2Zmc2V0X3QgcG9ydF9udW1iZXIpOwoKCgoKICB+
U3BhY2UoKTsKIyAxNTcgImF1dG8vc3BhY2UuaCIKICB2b2lkIGttZW1fdXBkYXRlKHZtX29mZnNl
dF90IGFkZHIpOwojIDE3NyAiYXV0by9zcGFjZS5oIgogIFNwYWNlOjpzdGF0dXNfdCB2X2luc2Vy
dCh2bV9vZmZzZXRfdCBwaHlzLCB2bV9vZmZzZXRfdCB2aXJ0LCB2bV9vZmZzZXRfdCBzaXplLCB1
bnNpZ25lZCBwYWdlX2F0dHJpYnMpOwojIDE5NCAiYXV0by9zcGFjZS5oIgogIGJvb2wgdl9sb29r
dXAodm1fb2Zmc2V0X3QgdmlydCwgdm1fb2Zmc2V0X3QgKnBoeXMgPSAwLCB2bV9vZmZzZXRfdCAq
c2l6ZSA9IDAsIHVuc2lnbmVkICpwYWdlX2F0dHJpYnMgPSAwKTsKIyAyMDUgImF1dG8vc3BhY2Uu
aCIKICBib29sIHZfZGVsZXRlKHZtX29mZnNldF90IHZpcnQsIHZtX29mZnNldF90IHNpemUsIHVu
c2lnbmVkIHBhZ2VfYXR0cmlicyA9IDApOwoKCgoKCgogIHZvaWQgcGFnZV9tYXAodm1fb2Zmc2V0
X3QsIHZtX29mZnNldF90LCB2bV9vZmZzZXRfdCwgdW5zaWduZWQpOwoKICB2b2lkIHBhZ2VfcHJv
dGVjdCh2bV9vZmZzZXRfdCwgdm1fb2Zmc2V0X3QsIHVuc2lnbmVkKTsKCiAgdm9pZCBwYWdlX3Vu
bWFwKHZtX29mZnNldF90LCB2bV9vZmZzZXRfdCk7Cgpwcm90ZWN0ZWQ6CiMgMjI5ICJhdXRvL3Nw
YWNlLmgiCiAgU3BhY2UodW5zaWduZWQgbmV3X251bWJlcik7Cgpwcml2YXRlOgoKCgogIHZtX29m
ZnNldF90IGdldF92aXJ0X3BvcnRfYWRkcih2bV9vZmZzZXRfdCBjb25zdCBwb3J0KSBjb25zdDsK
CiAgdm1fb2Zmc2V0X3QgZ2V0X3BoeXNfcG9ydF9hZGRyKHZtX29mZnNldF90IGNvbnN0IHBvcnQp
IGNvbnN0Owp9OwoKClNwYWNlICogY3VycmVudF9zcGFjZSgpOwoKVW5zaWduZWQ4IGdldF9wb3J0
X2JpdCh2bV9vZmZzZXRfdCBjb25zdCBwb3J0KTsKIyAyNjIgImF1dG8vc3BhY2UuaCIKaW5saW5l
IFNwYWNlX2luZGV4ClNwYWNlOjpzcGFjZSgpIGNvbnN0CnsKICByZXR1cm4gU3BhY2VfaW5kZXgo
X2RpcltudW1iZXJfaW5kZXhdID4+IDgpOwp9CgoKCgoKaW5saW5lIFNwYWNlX2luZGV4ClNwYWNl
OjpjaGllZigpIGNvbnN0CnsKICByZXR1cm4gU3BhY2VfaW5kZXgoX2RpcltjaGllZl9pbmRleF0g
Pj4gOCk7Cn0KIyAyODkgImF1dG8vc3BhY2UuaCIKaW5saW5lIGJvb2wKU3BhY2U6OnVwZGF0ZSh2
bV9vZmZzZXRfdCBhZGRyLCBjb25zdCBTcGFjZV9jb250ZXh0ICpmcm9tLAogICAgICAgICAgICAg
ICAgdm1fb2Zmc2V0X3QgZnJvbV9hZGRyKQp7CiAgaWYgKGZyb20tPmxvb2t1cChmcm9tX2FkZHIp
ID09IDB4ZmZmZmZmZmYpCiAgICByZXR1cm4gZmFsc2U7CgogIF9kaXJbKGFkZHIgPj4gMjIpICYg
MHgzZmZdCiAgICA9IGZyb20tPmRpcigpWyhmcm9tX2FkZHIgPj4gMjIpICYgMHgzZmZdOwogIHJl
dHVybiB0cnVlOwp9CiMgMzE0ICJhdXRvL3NwYWNlLmgiCmlubGluZSB2bV9vZmZzZXRfdApTcGFj
ZTo6dmlydF90b19waHlzKHZtX29mZnNldF90IGEpIGNvbnN0CnsKICBpZiAodGhpcyA9PSBzaWdt
YTApCiAgICByZXR1cm4gYTsKCiAgcmV0dXJuIFNwYWNlX2NvbnRleHQ6Omxvb2t1cChhKTsKfQoj
IDMzMCAiYXV0by9zcGFjZS5oIgppbmxpbmUgYm9vbCBTcGFjZTo6aXNfcHJpdmlsZWdlZCh2b2lk
KQp7CiAgcmV0dXJuICEgQ29uZmlnOjplbmFibGVfaW9fcHJvdGVjdGlvbgogICAgICAgICB8fCAo
Z2V0X2lvX2NvdW50ZXIoKSA9PSBMNF9mcGFnZTo6SU9fUE9SVF9NQVgpOwp9CiMgMzQ0ICJhdXRv
L3NwYWNlLmgiCmlubGluZSB2b2lkClNwYWNlOjprbWVtX3VwZGF0ZSh2bV9vZmZzZXRfdCBhZGRy
KQp7CiAgdW5zaWduZWQgaSA9IChhZGRyID4+IDIyKSAmIDB4M2ZmOwogIF9kaXJbaV0gPSBrbWVt
OjpkaXIoKVtpXTsKfQojIDM1OCAiYXV0by9zcGFjZS5oIgppbmxpbmUgdm9pZApTcGFjZTo6cGFn
ZV9tYXAodm1fb2Zmc2V0X3QsIHZtX29mZnNldF90LCB2bV9vZmZzZXRfdCwgdW5zaWduZWQpCnt9
CgoKCmlubGluZSB2b2lkClNwYWNlOjpwYWdlX3Byb3RlY3Qodm1fb2Zmc2V0X3QsIHZtX29mZnNl
dF90LCB1bnNpZ25lZCkKe30KCgoKaW5saW5lIHZvaWQKU3BhY2U6OnBhZ2VfdW5tYXAodm1fb2Zm
c2V0X3QsIHZtX29mZnNldF90KQp7fQoKCgoKaW5saW5lIFNwYWNlICoKY3VycmVudF9zcGFjZSgp
CnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8U3BhY2UqPihTcGFjZV9jb250ZXh0OjpjdXJyZW50KCkp
Owp9CgoKCmlubGluZSBVbnNpZ25lZDggZ2V0X3BvcnRfYml0KHZtX29mZnNldF90IGNvbnN0IHBv
cnQpCnsKICByZXR1cm4gMSA8PCAocG9ydCAmIDcpOwp9CiMgMTMgImF1dG8vdGhyZWFkLmgiIDIK
CiMgMSAiYXV0by9yZWNlaXZlci5oIiAxCgoKCgoKIyAxICJhdXRvL2NvbnRleHQuaCIgMQoKCgoK
CiMgMSAiLi4vc3JjL2xpYi9taW5pbGliYy9pbmNsdWRlL2NzdGRpbyIgMQoKCgoKCiMgMSAiLi4v
c3JjL2xpYi9taW5pbGliYy9pbmNsdWRlL3N0ZGlvLmgiIDEKCgoKCiMgMSAiL2hvbWUvYWRhbS9l
cndpbi90bXAvZ2NjLzMuMy9pbnN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDYgIi4uL3NyYy9saWIvbWluaWxpYmMvaW5jbHVkZS9z
dGRpby5oIiAyCiMgMSAiLi4vc3JjL2xpYi9taW5pbGliYy9pbmNsdWRlL21pbmlfZGVmcy5oIiAx
CiMgNyAiLi4vc3JjL2xpYi9taW5pbGliYy9pbmNsdWRlL3N0ZGlvLmgiIDIKCmV4dGVybiAiQyIg
ewoKaW50IHB1dGNoYXIoaW50IGMpOwppbnQgcHV0cyhjb25zdCBjaGFyICpzKTsKaW50IHB1dHN0
cihjb25zdCBjaGFyICpjb25zdCBzKTsKaW50IHB1dG5zdHIoIGNvbnN0IGNoYXIgKmNvbnN0IGMs
IGludCBsZW4gKTsKaW50IHByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgX19hdHRyaWJ1
dGVfXygoZm9ybWF0KHByaW50ZiwxLDIpKSk7CmludCBzcHJpbnRmKGNoYXIgKnN0ciwgY29uc3Qg
Y2hhciAqZm9ybWF0LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsMiwzKSkpOwpp
bnQgc25wcmludGYoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAu
Li4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsMyw0KSkpOwppbnQgYXNwcmludGYoY2hh
ciAqKnB0ciwgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChw
cmludGYsMiwzKSkpOwoKCgoKCgojIDEgIi4uL3NyYy9saWIvbWluaWxpYmMvaW5jbHVkZS9zdGRh
cmcuaCIgMQojIDkgIi4uL3NyYy9saWIvbWluaWxpYmMvaW5jbHVkZS9zdGRhcmcuaCIKdHlwZWRl
ZiBfX2J1aWx0aW5fdmFfbGlzdCB2YV9saXN0OwojIDI1ICIuLi9zcmMvbGliL21pbmlsaWJjL2lu
Y2x1ZGUvc3RkaW8uaCIgMgoKaW50IHZwcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0
IGFwKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLDEsMCkpKTsKaW50IHZzcHJpbnRmKGNo
YXIgKnN0ciwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFwKSBfX2F0dHJpYnV0ZV9fKChm
b3JtYXQocHJpbnRmLDIsMCkpKTsKaW50IHZzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBzaXpl
LCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXApIF9fYXR0cmlidXRlX18oKGZvcm1hdChw
cmludGYsMywwKSkpOwoKCnR5cGVkZWYgaW50IEZJTEU7CgppbnQgZ2V0Y2hhcih2b2lkKTsKY2hh
ciAqZ2V0cyhjaGFyICpzKSBfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKSk7CmNoYXIgKmZnZXRz
KGNoYXIgKnMsIGludCBzaXplLCBGSUxFICpzdHJlYW0pOwoKaW50IHZzY2FuZihjb25zdCBjaGFy
ICpmb3JtYXQsIHZhX2xpc3QgYXApIF9fYXR0cmlidXRlX18oKGZvcm1hdChzY2FuZiwxLDApKSk7
CmludCB2c3NjYW5mKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0
IGFwKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoc2NhbmYsMiwwKSkpOwoKaW50IHNzY2FuZihjb25z
dCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKCn0KIyA3ICIuLi9zcmMvbGli
L21pbmlsaWJjL2luY2x1ZGUvY3N0ZGlvIiAyCgoKbmFtZXNwYWNlIHN0ZCB7CiAgdXNpbmcgOjpw
dXRjaGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2luZyA6OnB1dHN0cjsKICB1c2luZyA6OnB1dG5z
dHI7CiAgdXNpbmcgOjpwcmludGY7CiAgdXNpbmcgOjpzcHJpbnRmOwogIHVzaW5nIDo6c25wcmlu
dGY7CiAgdXNpbmcgOjphc3ByaW50ZjsKICB1c2luZyA6OnNzY2FuZjsKCiAgdXNpbmcgOjp2cHJp
bnRmOwogIHVzaW5nIDo6dnNwcmludGY7CiAgdXNpbmcgOjp2c25wcmludGY7CiAgdXNpbmcgOjpn
ZXRjaGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6OmZnZXRzOwogIHVzaW5nIDo6dnNjYW5m
OwogIHVzaW5nIDo6dnNzY2FuZjsKCn07CiMgNyAiYXV0by9jb250ZXh0LmgiIDIKCgoKIyAxICJh
dXRvL3NjaGVkLmgiIDEKIyAxNCAiYXV0by9zY2hlZC5oIgpjbGFzcyBzY2hlZF90CnsKICB1bnNp
Z25lZCBzaG9ydCBfcHJpbzsKICB1bnNpZ25lZCBzaG9ydCBfbWNwOwogIHVuc2lnbmVkIHNob3J0
IF90aW1lc2xpY2UsIF90aWNrc19sZWZ0OwogIHVuc2lnbmVkIGxvbmcgX3RvdGFsX3RpY2tzOwog
IHVuc2lnbmVkIGxvbmcgX3N0YXJ0X2NwdXRpbWU7CiAgdW5zaWduZWQgbG9uZyBsb25nIF90b3Rh
bF9jcHV0aW1lOwoKcHVibGljOgogIHVuc2lnbmVkIHNob3J0IHByaW8oKSBjb25zdDsKCiAgdm9p
ZCBzZXRfcHJpbyh1bnNpZ25lZCBzaG9ydCBwcmlvKTsKCiAgdW5zaWduZWQgc2hvcnQgbWNwKCkg
Y29uc3Q7CgogIHZvaWQgc2V0X21jcCh1bnNpZ25lZCBzaG9ydCBtY3ApOwoKICB1bnNpZ25lZCBz
aG9ydCB0aW1lc2xpY2UoKSBjb25zdDsKCiAgdm9pZCBzZXRfdGltZXNsaWNlKHVuc2lnbmVkIHNo
b3J0IHRpbWVzbGljZSk7CgogIHVuc2lnbmVkIHNob3J0IHRpY2tzX2xlZnQoKSBjb25zdDsKCiAg
dm9pZCBzZXRfdGlja3NfbGVmdCh1bnNpZ25lZCBzaG9ydCB0aWNrc19sZWZ0KTsKCiAgdm9pZCBy
ZXNldF9jcHV0aW1lKHZvaWQpOwoKICB2b2lkIHVwZGF0ZV9jcHV0aW1lKHZvaWQpOwoKICB1bnNp
Z25lZCBsb25nIGxvbmcgZ2V0X3RvdGFsX2NwdXRpbWUoKTsKCiAgdm9pZCBzdGFydF90aHJlYWQo
dW5zaWduZWQgbG9uZyB0c2NfMzIpOwoKICB2b2lkIHN0b3BfdGhyZWFkKHVuc2lnbmVkIGxvbmcg
dHNjXzMyKTsKfTsKIyA1OCAiYXV0by9zY2hlZC5oIgppbmxpbmUgdW5zaWduZWQgc2hvcnQKc2No
ZWRfdDo6cHJpbygpIGNvbnN0CnsKICByZXR1cm4gX3ByaW87Cn0KCgoKaW5saW5lIHZvaWQKc2No
ZWRfdDo6c2V0X3ByaW8odW5zaWduZWQgc2hvcnQgcHJpbykKewogIF9wcmlvID0gcHJpbzsKfQoK
CgppbmxpbmUgdW5zaWduZWQgc2hvcnQKc2NoZWRfdDo6bWNwKCkgY29uc3QKewogIHJldHVybiBf
bWNwOwp9CgoKCmlubGluZSB2b2lkCnNjaGVkX3Q6OnNldF9tY3AodW5zaWduZWQgc2hvcnQgbWNw
KQp7CiAgX21jcCA9IG1jcDsKfQoKCgppbmxpbmUgdW5zaWduZWQgc2hvcnQKc2NoZWRfdDo6dGlt
ZXNsaWNlKCkgY29uc3QKewogIHJldHVybiBfdGltZXNsaWNlOwp9CgoKCmlubGluZSB2b2lkCnNj
aGVkX3Q6OnNldF90aW1lc2xpY2UodW5zaWduZWQgc2hvcnQgdGltZXNsaWNlKQp7CiAgX3RpbWVz
bGljZSA9IHRpbWVzbGljZTsKfQoKCgppbmxpbmUgdW5zaWduZWQgc2hvcnQKc2NoZWRfdDo6dGlj
a3NfbGVmdCgpIGNvbnN0CnsKICByZXR1cm4gX3RpY2tzX2xlZnQ7Cn0KCgoKaW5saW5lIHZvaWQK
c2NoZWRfdDo6c2V0X3RpY2tzX2xlZnQodW5zaWduZWQgc2hvcnQgdGlja3NfbGVmdCkKewogIF90
aWNrc19sZWZ0ID0gdGlja3NfbGVmdDsKfQoKCgppbmxpbmUgdm9pZApzY2hlZF90OjpyZXNldF9j
cHV0aW1lKHZvaWQpCnsKICBpZiAoQ29uZmlnOjpmaW5lX2dyYWluZWRfY3B1dGltZSkKICAgIF90
b3RhbF9jcHV0aW1lID0gMDsKICBlbHNlCiAgICBfdG90YWxfdGlja3MgPSAwOwp9CgoKCmlubGlu
ZSB2b2lkCnNjaGVkX3Q6OnVwZGF0ZV9jcHV0aW1lKHZvaWQpCnsKICBfdG90YWxfdGlja3MrKzsK
fQoKCgppbmxpbmUgdm9pZApzY2hlZF90OjpzdGFydF90aHJlYWQodW5zaWduZWQgbG9uZyB0c2Nf
MzIpCnsKICBfc3RhcnRfY3B1dGltZSA9IHRzY18zMjsKfQoKCgppbmxpbmUgdm9pZApzY2hlZF90
OjpzdG9wX3RocmVhZCh1bnNpZ25lZCBsb25nIHRzY18zMikKewogIF90b3RhbF9jcHV0aW1lICs9
IHRzY18zMiAtIF9zdGFydF9jcHV0aW1lOwp9CiMgMTEgImF1dG8vY29udGV4dC5oIiAyCgojIDEg
ImF1dG8vZnB1LmgiIDEKIyAxMSAiYXV0by9mcHUuaCIKY2xhc3Mgc2xhYl9jYWNoZV9hbm9uOwpj
bGFzcyBDb250ZXh0OwoKCgoKCgpjbGFzcyBGcHVfc3RhdGUKewpwdWJsaWM6CiAgdm9pZCBhbGxv
Y19zdGF0ZSgpOwogIHZvaWQgZnJlZV9zdGF0ZSgpOwogIHZvaWQgc2F2ZV9zdGF0ZSgpOwogIHZv
aWQgcmVzdG9yZV9zdGF0ZSgpOwogIHZvaWQgKnN0YXRlX2J1ZmZlcigpOwoKICBGcHVfc3RhdGUo
KTsKICB+RnB1X3N0YXRlKCk7Cgpwcml2YXRlOgoKICB2b2lkICpfc3RhdGVfYnVmZmVyOwoKcHJp
dmF0ZToKICBzdGF0aWMgc2xhYl9jYWNoZV9hbm9uICpzbGFiX2FsbG9jKCk7Cn07CgpjbGFzcyBG
cHUKewpwdWJsaWM6CgogIHN0YXRpYyBDb250ZXh0ICpvd25lcigpOwogIHN0YXRpYyB2b2lkIHNl
dF9vd25lcihDb250ZXh0ICpvd25lcik7CiAgc3RhdGljIGJvb2wgaXNfb3duZXIoQ29udGV4dCAq
b3duZXIpOwoKCiAgc3RhdGljIHZvaWQgaW5pdCgpOwogIHN0YXRpYyB1bnNpZ25lZCBjb25zdCBz
dGF0ZV9zaXplKCk7CiAgc3RhdGljIHVuc2lnbmVkIGNvbnN0IHN0YXRlX2FsaWduKCk7CiAgc3Rh
dGljIHZvaWQgaW5pdF9zdGF0ZSggRnB1X3N0YXRlICopOwogIHN0YXRpYyB2b2lkIHJlc3RvcmVf
c3RhdGUoIEZwdV9zdGF0ZSAqICk7CiAgc3RhdGljIHZvaWQgc2F2ZV9zdGF0ZSggRnB1X3N0YXRl
ICogKTsKICBzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZSgpOwogIHN0YXRpYyB2b2lkIGRpc2FibGUo
KTsKICBzdGF0aWMgdm9pZCBlbmFibGUoKTsKCnByaXZhdGU6CgogIHN0YXRpYyBDb250ZXh0ICpf
b3duZXI7CnByaXZhdGU6Cgpwcml2YXRlOgogIHN0cnVjdCBmcHVfcmVncwogIHsKICAgIGxvbmcg
Y3dkOwogICAgbG9uZyBzd2Q7CiAgICBsb25nIHR3ZDsKICAgIGxvbmcgZmlwOwogICAgbG9uZyBm
Y3M7CiAgICBsb25nIGZvbzsKICAgIGxvbmcgZm9zOwogICAgbG9uZyBzdF9zcGFjZVsyMF07CiAg
fTsKCiAgc3RydWN0IHNzZV9yZWdzCiAgewogICAgdW5zaWduZWQgc2hvcnQgY3dkOwogICAgdW5z
aWduZWQgc2hvcnQgc3dkOwogICAgdW5zaWduZWQgc2hvcnQgdHdkOwogICAgdW5zaWduZWQgc2hv
cnQgZm9wOwogICAgbG9uZyBmaXA7CiAgICBsb25nIGZjczsKICAgIGxvbmcgZm9vOwogICAgbG9u
ZyBmb3M7CiAgICBsb25nIG14Y3NyOwogICAgbG9uZyByZXNlcnZlZDsKICAgIGxvbmcgc3Rfc3Bh
Y2VbMzJdOwogICAgbG9uZyB4bW1fc3BhY2VbMzJdOwogICAgbG9uZyBwYWRkaW5nWzU2XTsKICB9
Owp9OwojIDEwMyAiYXV0by9mcHUuaCIKIyAxICJhdXRvL2ttZW1fc2xhYl9zaW1wbGUuaCIgMQoK
CgoKCiMgMSAiL2hvbWUvYWRhbS9lcndpbi90bXAvZ2NjLzMuMy9pbnN0L2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDcgImF1dG8va21l
bV9zbGFiX3NpbXBsZS5oIiAyCiMgMSAiYXV0by9oZWxwaW5nX2xvY2suaCIgMQoKCgoKCgojIDEg
ImF1dG8vc3dpdGNoX2xvY2suaCIgMQoKCgoKCiMgMSAiYXV0by9zdGFjay5oIiAxCiMgMTEgImF1
dG8vc3RhY2suaCIKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgU3RhY2s7Cgp0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgpjbGFzcyBTdGFja190b3AKewpwcml2YXRlOgogIGZyaWVuZCBjbGFzcyBTdGFj
azxUPjsKCgoKICBpbnQgX3ZlcnNpb247CiAgVCAqX25leHQ7CgpwdWJsaWM6CiMgMzcgImF1dG8v
c3RhY2suaCIKICBTdGFja190b3AoaW50IHZlcnNpb24sIFQgKm5leHQpOwoKICBTdGFja190b3Ao
KTsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmNsYXNzIFN0YWNrCnsKcHJpdmF0ZToKICBTdGFj
a190b3A8VD4gX2hlYWQ7CgpwdWJsaWM6CgoKCiAgU3RhY2soKTsKCiAgaW50IGluc2VydChUICpl
KTsKCiAgVCogZGVxdWV1ZSgpOwoKCgogIFQqIGRlcXVldWUoVCAqdG9wKTsKCiAgVCogZmlyc3Qo
KTsKCiAgdm9pZCByZXNldCgpOwp9OwojIDkyICJhdXRvL3N0YWNrLmgiCnRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBTdGFja190b3A8VD46OlN0YWNrX3RvcChpbnQgdmVyc2lvbiwgVCAqbmV4
dCkKICA6IF92ZXJzaW9uICh2ZXJzaW9uKSwKICAgIF9uZXh0IChuZXh0KQp7fQoKCgp0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgU3RhY2tfdG9wPFQ+OjpTdGFja190b3AoKQogIDogX3ZlcnNp
b24gKDApLAogICAgX25leHQgKDApCnt9CiMgMTE0ICJhdXRvL3N0YWNrLmgiCnRlbXBsYXRlPHR5
cGVuYW1lIFQ+IFN0YWNrPFQ+OjpTdGFjaygpCiAgOiBfaGVhZCAoMCwgMCkKe30KCgoKdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW50ClN0YWNrPFQ+OjppbnNlcnQoVCAqZSkKewogIFN0YWNrX3RvcDxU
PiBvbGRfaGVhZCwKICAgICAgICAgICAgICAgICAgbmV3X2hlYWQ7CgogIGRvIHsKICAgICAgb2xk
X2hlYWQgPSBfaGVhZDsKICAgICAgZS0+c2V0X25leHQob2xkX2hlYWQuX25leHQpOwogICAgICBu
ZXdfaGVhZC5fdmVyc2lvbiA9IG9sZF9oZWFkLl92ZXJzaW9uKzE7CiAgICAgIG5ld19oZWFkLl9u
ZXh0ID0gZTsKICB9IHdoaWxlICghIHNtcF9jYXMyKCZfaGVhZCwKICAgICAgICAgICAgICAgICAg
ICAgICAmb2xkX2hlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgJm5ld19oZWFkKSk7CiAgcmV0
dXJuIG5ld19oZWFkLl92ZXJzaW9uOwp9CgoKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqClN0YWNr
PFQ+OjpkZXF1ZXVlKCkKewogIFN0YWNrX3RvcDxUPiBvbGRfaGVhZCwKICAgICAgICAgICAgICAg
ICBuZXdfaGVhZDsKCiAgVCAqZmlyc3Q7CgogIGRvIHsKICAgIG9sZF9oZWFkID0gX2hlYWQ7Cgog
ICAgZmlyc3QgPSBvbGRfaGVhZC5fbmV4dDsKICAgIGlmKCEgZmlyc3QpCiAgICAgIGJyZWFrOwoK
ICAgIG5ld19oZWFkLl9uZXh0ID0gZmlyc3QtPmdldF9uZXh0KCk7CiAgICBuZXdfaGVhZC5fdmVy
c2lvbiA9IG9sZF9oZWFkLl92ZXJzaW9uICsgMTsKICB9IHdoaWxlICghIHNtcF9jYXMyKCZfaGVh
ZCwKICAgICAgICAgICAgICAgICAgICAgICAmb2xkX2hlYWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgJm5ld19oZWFkKSk7CgoKCgoKICByZXR1cm4gZmlyc3Q7Cn0KCgoKCgp0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBUKgpTdGFjazxUPjo6ZGVxdWV1ZShUICp0b3ApCnsKICBTdGFja190b3A8VD4gb2xk
X2hlYWQsCiAgICAgICAgICAgICAgICAgbmV3X2hlYWQ7CgoKICBvbGRfaGVhZC5fdmVyc2lvbiA9
IF9oZWFkLl92ZXJzaW9uOwogIG9sZF9oZWFkLl9uZXh0ID0gdG9wOwogIGlmICghb2xkX2hlYWQu
X25leHQpCiAgICByZXR1cm4gMDsKCiAgbmV3X2hlYWQuX3ZlcnNpb24gPSBvbGRfaGVhZC5fdmVy
c2lvbiArIDE7CiAgbmV3X2hlYWQuX25leHQgPSB0b3AtPmdldF9uZXh0KCk7CgogIGlmKCEgc21w
X2NhczIoJl9oZWFkLAogICAgICAgICAgICAgICAgJm9sZF9oZWFkLAogICAgICAgICAgICAgICAg
Jm5ld19oZWFkKSkKCiAgICByZXR1cm4gMDsKICBlbHNlCgogICAgcmV0dXJuIHRvcDsKfQoKCgp0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKgpTdGFjazxUPjo6Zmlyc3QoKQp7CiAgcmV0dXJuIF9oZWFk
Ll9uZXh0Owp9CgoKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQKU3RhY2s8VD46OnJlc2V0KCkK
ewogIF9oZWFkLl92ZXJzaW9uID0gMDsKICBfaGVhZC5fbmV4dCA9IDA7Cn0KIyA3ICJhdXRvL3N3
aXRjaF9sb2NrLmgiIDIKCgoKCgoKY2xhc3MgQ29udGV4dDsKCgoKY2xhc3MgU3dpdGNoX2xvY2sK
ewogIENvbnRleHQgKl9sb2NrX293bmVyOwogIFN0YWNrPENvbnRleHQ+IF9sb2NrX3N0YWNrOwoK
cHVibGljOgoKCgoKCiAgU3dpdGNoX2xvY2soKTsKCgoKCiAgQ29udGV4dCAqIGxvY2tfb3duZXIo
KSBjb25zdDsKCgoKCiAgYm9vbCB0ZXN0KCkgY29uc3Q7CgoKCgoKICB2b2lkIGxvY2soKTsKCgoK
CiAgYm9vbCB0ZXN0X2FuZF9zZXQoKTsKCgoKCgogIHZvaWQgY2xlYXIoKTsKCnByaXZhdGU6CgoK
CgoKICBib29sIHRyeV9sb2NrKCk7Cn07CiMgODUgImF1dG8vc3dpdGNoX2xvY2suaCIKaW5saW5l
IFN3aXRjaF9sb2NrOjpTd2l0Y2hfbG9jaygpCiAgOiBfbG9ja19vd25lcigwKQp7Cn0KCgoKCgoK
aW5saW5lIENvbnRleHQgKgpTd2l0Y2hfbG9jazo6bG9ja19vd25lcigpIGNvbnN0CnsKICByZXR1
cm4gX2xvY2tfb3duZXI7Cn0KCgoKCgoKaW5saW5lIGJvb2wKU3dpdGNoX2xvY2s6OnRlc3QoKSBj
b25zdAp7CiAgcmV0dXJuIF9sb2NrX293bmVyOwp9CiMgOCAiYXV0by9oZWxwaW5nX2xvY2suaCIg
MgojIDE5ICJhdXRvL2hlbHBpbmdfbG9jay5oIgpjbGFzcyBIZWxwaW5nX2xvY2sKewogIFN3aXRj
aF9sb2NrIF9zd2l0Y2hfbG9jazsKCnB1YmxpYzoKICBzdGF0aWMgYm9vbCB0aHJlYWRpbmdfc3lz
dGVtX2FjdGl2ZTsKCnB1YmxpYzoKCgoKICBib29sIHRlc3RfYW5kX3NldCgpOwoKCgoKCiAgdm9p
ZCBsb2NrKCk7CgoKCgogIGJvb2wgdGVzdCgpOwoKCgoKCiAgdm9pZCBjbGVhcigpOwoKCgoKICBD
b250ZXh0KiBsb2NrX293bmVyKCk7Cn07Cgp0eXBlZGVmIExvY2tfZ3VhcmQ8SGVscGluZ19sb2Nr
PiBIZWxwaW5nX2xvY2tfZ3VhcmQ7CiMgNjcgImF1dG8vaGVscGluZ19sb2NrLmgiCmlubGluZSBi
b29sCkhlbHBpbmdfbG9jazo6dGVzdCgpCnsKICByZXR1cm4gX3N3aXRjaF9sb2NrLnRlc3QoKTsK
fQoKCgoKCgppbmxpbmUgQ29udGV4dCoKSGVscGluZ19sb2NrOjpsb2NrX293bmVyKCkKewogIHJl
dHVybiBfc3dpdGNoX2xvY2subG9ja19vd25lcigpOwp9CiMgOCAiYXV0by9rbWVtX3NsYWJfc2lt
cGxlLmgiIDIKCiMgMSAiYXV0by9zbGFiX2NhY2hlX2Fub24uaCIgMQojIDE0ICJhdXRvL3NsYWJf
Y2FjaGVfYW5vbi5oIgpjbGFzcyBzbGFiX2NhY2hlX2Fub24Kewpwcm90ZWN0ZWQ6CiAgZnJpZW5k
IGNsYXNzIHNsYWI7CgoKCgogIHZpcnR1YWwgdm9pZCAqYmxvY2tfYWxsb2ModW5zaWduZWQgbG9u
ZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWdubWVudCkgPSAwOwogIHZpcnR1YWwgdm9pZCBibG9j
a19mcmVlKHZvaWQgKmJsb2NrLCB1bnNpZ25lZCBsb25nIHNpemUpID0gMDsKCnByaXZhdGU6CiAg
c2xhYl9jYWNoZV9hbm9uKCk7CiAgc2xhYl9jYWNoZV9hbm9uKGNvbnN0IHNsYWJfY2FjaGVfYW5v
biYpOwojIDM3ICJhdXRvL3NsYWJfY2FjaGVfYW5vbi5oIgogIHNsYWIgKl9maXJzdF9zbGFiLCAq
X2ZpcnN0X2F2YWlsYWJsZV9zbGFiLCAqX2xhc3Rfc2xhYjsKICB1bnNpZ25lZCBsb25nIF9zbGFi
X3NpemU7CiAgdW5zaWduZWQgX2VsZW1fc2l6ZSwgX2xhdGVzdF9vZmZzZXQsIF9hbGlnbm1lbnQ7
CgpwdWJsaWM6CgoKCiAgc2xhYl9jYWNoZV9hbm9uKHVuc2lnbmVkIGxvbmcgc2xhYl9zaXplLCB1
bnNpZ25lZCBlbGVtX3NpemUsIHVuc2lnbmVkIGFsaWdubWVudCk7CgogIHZpcnR1YWwgfnNsYWJf
Y2FjaGVfYW5vbigpOwoKICB2aXJ0dWFsIHZvaWQgKiBhbGxvYygpOwoKICB2aXJ0dWFsIHZvaWQg
ZnJlZSh2b2lkICpjYWNoZV9lbnRyeSk7CgogIHZpcnR1YWwgYm9vbCByZWFwKCk7Cgpwcm90ZWN0
ZWQ6CiAgdm9pZCBkZXN0cm95KCk7CgoKICB2aXJ0dWFsIHZvaWQgZWxlbV9jdG9yKHZvaWQgKik7
CgogIHZpcnR1YWwgdm9pZCBlbGVtX2R0b3Iodm9pZCAqKTsKfTsKIyAxMCAiYXV0by9rbWVtX3Ns
YWJfc2ltcGxlLmgiIDIKCgoKCgoKY2xhc3Mga21lbV9zbGFiX3NpbXBsZV90IDogcHVibGljIHNs
YWJfY2FjaGVfYW5vbgp7CgogIEhlbHBpbmdfbG9jayBfbG9jazsKCnB1YmxpYzoKCiAga21lbV9z
bGFiX3NpbXBsZV90KHVuc2lnbmVkIGVsZW1fc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50KTsKCiAg
fmttZW1fc2xhYl9zaW1wbGVfdCgpOwoKCiAgdm9pZCAqIGFsbG9jKCk7CgogIHZvaWQgZnJlZSh2
b2lkICpjYWNoZV9lbnRyeSk7CgogIGJvb2wgcmVhcCgpOwoKCiAgdm9pZCAqIG9wZXJhdG9yIG5l
dyhzaXplX3Qgc2l6ZSk7CgogIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKmJsb2NrLCBzaXpl
X3Qgc2l6ZSk7Cgpwcm90ZWN0ZWQ6CgoKICBrbWVtX3NsYWJfc2ltcGxlX3QodW5zaWduZWQgbG9u
ZyBzbGFiX3NpemUsIHVuc2lnbmVkIGVsZW1fc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50KTsKCnBy
aXZhdGU6CgoKICB2aXJ0dWFsIHZvaWQgKiBibG9ja19hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUs
IHVuc2lnbmVkIGxvbmcpOwoKICB2aXJ0dWFsIHZvaWQgYmxvY2tfZnJlZSh2b2lkICpibG9jaywg
dW5zaWduZWQgbG9uZyk7Cn07CiMgMTA0ICJhdXRvL2ZwdS5oIiAyCgoKIyAxICIuLi9zcmMvbGli
L21pbmlsaWJjL2luY2x1ZGUvY3N0cmluZyIgMQoKCgoKCiMgMSAiLi4vc3JjL2xpYi9taW5pbGli
Yy9pbmNsdWRlL3N0cmluZy5oIiAxCgoKCgojIDEgIi9ob21lL2FkYW0vZXJ3aW4vdG1wL2djYy8z
LjMvaW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzIDQKIyA2ICIuLi9zcmMvbGliL21pbmlsaWJjL2luY2x1ZGUvc3RyaW5nLmgiIDIKCmV4
dGVybiAiQyIgewoKY2hhciAqc3RyY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYyk7CmNo
YXIgKnN0cm5jcHkoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgbik7Cgp2b2lk
ICptZW1jY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgaW50IGMsIHNpemVfdCBuKTsK
dm9pZCAqbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pOwp2b2lk
ICptZW1tb3ZlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pOwoKaW50IG1l
bWNjbXAoY29uc3Qgdm9pZCAqczEsIGNvbnN0IHZvaWQgKnMyLCBpbnQgYywgc2l6ZV90IG4pOwpp
bnQgbWVtY21wKGNvbnN0IHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMiwgc2l6ZV90IG4pOwppbnQg
c3RyY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMik7CmludCBzdHJuY21wKGNvbnN0
IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pOwoKaW50IHN0cmNhc2VjbXAoY29u
c3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKTsKaW50IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIg
KnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pOwoKc2l6ZV90IHN0cmxlbihjb25zdCBjaGFy
ICpzKTsKCmNoYXIgKnN0cnN0cihjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVl
ZGxlKTsKCmNoYXIgKnN0cmR1cChjb25zdCBjaGFyICpzKTsKCmNoYXIgKnN0cmNocihjb25zdCBj
aGFyICpzLCBpbnQgYyk7CmNoYXIgKnN0cnJjaHIoY29uc3QgY2hhciAqcywgaW50IGMpOwoKY2hh
ciAqc3RyY2F0KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYyk7CmNoYXIgKnN0cm5jYXQoY2hh
ciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgbik7CgpzaXplX3Qgc3Ryc3BuKGNvbnN0
IGNoYXIgKnMsIGNvbnN0IGNoYXIgKl9hY2NlcHQpOwpzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFy
ICpzLCBjb25zdCBjaGFyICpyZWplY3QpOwoKY2hhciAqc3RycGJyayhjb25zdCBjaGFyICpzLCBj
b25zdCBjaGFyICpfYWNjZXB0KTsKY2hhciAqc3Ryc2VwKGNoYXIgKipzdHJpbmdwLCBjb25zdCBj
aGFyICpkZWxpbSk7Cgp2b2lkKiBtZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKdm9p
ZCogbWVtY2hyKGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7CgppbnQgc3RyY29sbChj
b25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpOwoKCn0KIyA3ICIuLi9zcmMvbGliL21pbmls
aWJjL2luY2x1ZGUvY3N0cmluZyIgMgoKCm5hbWVzcGFjZSBzdGQgewoKCgoKCgogIHVzaW5nIDo6
bWVtY3B5OwogIHVzaW5nIDo6bWVtY2NweTsKICB1c2luZyA6Om1lbW1vdmU7CiAgdXNpbmcgOjpt
ZW1jY21wOwogIHVzaW5nIDo6bWVtY21wOwogIHVzaW5nIDo6bWVtc2V0OwogIHVzaW5nIDo6bWVt
Y2hyOwoKCiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3Ry
Y2F0OwogIHVzaW5nIDo6c3RybmNhdDsKICB1c2luZyA6OnN0cmNtcDsKICB1c2luZyA6OnN0cm5j
bXA7CiAgdXNpbmcgOjpzdHJsZW47CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJjc3Bu
OwogIHVzaW5nIDo6c3RyY29sbDsKCgogIHVzaW5nIDo6c3RycGJyazsKICB1c2luZyA6OnN0cnJj
aHI7CiAgdXNpbmcgOjpzdHJjaHI7CiAgdXNpbmcgOjpzdHJzdHI7CgoKCgoKICBpbmxpbmUgY2hh
cioKICBzdHJwYnJrKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19i
dWlsdGluX3N0cnBicmsoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9CgoK
CiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFyKiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJu
IF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9
CgoKCiAgaW5saW5lIGNoYXIqCiAgc3RyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1
cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsg
fQoKCgogIGlubGluZSBjaGFyKgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3My
KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19z
MSksIF9fczIpOyB9CgoKCn07CiMgMTA3ICJhdXRvL2ZwdS5oIiAyCiMgMSAiYXV0by9jcHUuaCIg
MQojIDE2ICJhdXRvL2NwdS5oIgpjbGFzcyBDcHUKewpwdWJsaWM6CgogIGVudW0gVmVuZG9yIHsK
ICAgIFZFTkRPUl9VTktOT1dOID0gMCwKICAgIFZFTkRPUl9JTlRFTCwKICAgIFZFTkRPUl9BTUQs
CiAgICBWRU5ET1JfQ1lSSVgsCiAgICBWRU5ET1JfSURULAogICAgVkVORE9SX1VNQywKICAgIFZF
TkRPUl9ORVhHRU4sCiAgICBWRU5ET1JfUklTRSwKICAgIFZFTkRPUl9UUkFOU01FVEEsCiAgfTsK
CiAgZW51bSBDYWNoZSB7CiAgICBDQUNIRV9VTktOT1dOID0gMCwKICAgIENBQ0hFX0wxX0RBVEEs
CiAgICBDQUNIRV9MMV9JTlNULAogICAgQ0FDSEVfVFJBQ0UsCiAgICBDQUNIRV9MMiwKICAgIENB
Q0hFX0wzLAogIH07CgogIHN0YXRpYyBjb25zdCBjaGFyICogdmVuZG9yX3N0cigpOwogIHN0YXRp
YyBjb25zdCBjaGFyICogbW9kZWxfc3RyKCk7CiAgc3RhdGljIGNvbnN0IENwdTo6VmVuZG9yIHZl
bmRvcigpOwogIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZmFtaWx5KCk7CiAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGludCBtb2RlbCgpOwogIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3Rl
cHBpbmcoKTsKICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGFwaWMoKTsKICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgaW50IGZlYXR1cmVzKCk7CiAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0
IGwxX2NhY2hlKCk7CiAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGwyX2NhY2hlKCk7CiAg
c3RhdGljIHZvaWQgaWRlbnRpZnkoKTsKICBzdGF0aWMgdm9pZCBzZXRfc3lzZW50ZXJfc3RhY2sg
KHVuc2lnbmVkIHN0YWNrcHRyKTsKCnByaXZhdGU6CgogIHN0cnVjdCBWZW5kb3JfdGFibGUgewog
ICAgdW5zaWduZWQgdmVuZG9yX21hc2s7CiAgICB1bnNpZ25lZCB2ZW5kb3JfY29kZTsKICAgIHVu
c2lnbmVkIHNob3J0IGwyX2NhY2hlOwogICAgY29uc3QgY2hhciAqIHZlbmRvcl9zdHJpbmc7CiAg
fTsKCiAgc3RydWN0IENhY2hlX3RhYmxlIHsKICAgIHVuc2lnbmVkIGNoYXIgY2FjaGVfZGVzYzsK
ICAgIENwdTo6Q2FjaGUgY2FjaGVfbGV2ZWw7CiAgICB1bnNpZ25lZCBzaG9ydCBjYWNoZV9zaXpl
OwogIH07CgogIHN0YXRpYyB1bnNpZ25lZCBjcHVfc3lzZW50ZXJfc3RhY2sgYXNtICgiQ1BVX1NZ
U0VOVEVSX1NUQUNLIik7CiAgc3RhdGljIHVuc2lnbmVkIGNwdV92ZXJzaW9uOwogIHN0YXRpYyB1
bnNpZ25lZCBjcHVfYXBpYzsKICBzdGF0aWMgdW5zaWduZWQgY3B1X2ZlYXR1cmVzOwogIHN0YXRp
YyB1bnNpZ25lZCBzaG9ydCBjcHVfbDFfY2FjaGU7CiAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGNw
dV9sMl9jYWNoZTsKICBzdGF0aWMgVmVuZG9yIGNwdV92ZW5kb3I7CiAgc3RhdGljIGNoYXIgY3B1
X3ZlbmRvcl9zdHJbMTNdOwogIHN0YXRpYyBjb25zdCBjaGFyICogY3B1X21vZGVsX3N0cjsKCiAg
c3RhdGljIFZlbmRvcl90YWJsZSBpbnRlbF90YWJsZVtdOwogIHN0YXRpYyBWZW5kb3JfdGFibGUg
YW1kX3RhYmxlW107CiAgc3RhdGljIFZlbmRvcl90YWJsZSBjeXJpeF90YWJsZVtdOwogIHN0YXRp
YyBWZW5kb3JfdGFibGUgaWR0X3RhYmxlW107CiAgc3RhdGljIENhY2hlX3RhYmxlIGludGVsX2Nh
Y2hlX3RhYmxlW107CgogIHN0YXRpYyBjb25zdCBjaGFyICogbG9va3VwX21vZGVsX3N0ciAoY29u
c3QgQ3B1OjpWZW5kb3IgdmVuZG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCB2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBsMl9jYWNoZSk7CgogIHN0YXRp
YyB2b2lkIGNhY2hlX3NpemVfaW50ZWwoKTsKICBzdGF0aWMgdm9pZCBjYWNoZV9zaXplX2FtZF9s
MSgpOwogIHN0YXRpYyB2b2lkIGNhY2hlX3NpemVfYW1kX2wyKCk7CiAgc3RhdGljIHZvaWQgd3Jt
c3IgKHVuc2lnbmVkIGVjeCwgdW5zaWduZWQgZWF4LCB1bnNpZ25lZCBlZHgpOwogIHN0YXRpYyB2
b2lkIGNwdWlkICh1bnNpZ25lZCBtb2RlLCB1bnNpZ25lZCAqZWF4LCB1bnNpZ25lZCAqZWJ4LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKmVj
eCwgdW5zaWduZWQgKmVkeCk7CnByaXZhdGU6CgpwdWJsaWM6CiAgZW51bSBMYnIKICAgIHsKICAg
ICAgTEJSX1VOSU5JVElBTElaRUQgPSAwLAogICAgICBMQlJfTk9ORSwKICAgICAgTEJSX1A2LAog
ICAgICBMQlJfUDQsCiAgICB9OwoKcHJpdmF0ZToKICBzdGF0aWMgTGJyIGNwdV9sYnI7CgpwdWJs
aWM6CiAgc3RhdGljIGNvbnN0IENwdTo6TGJyIGhhc19sYnIoKTsKCiAgc3RhdGljIHZvaWQgaW5p
dCh2b2lkKTsKCnByaXZhdGU6CiAgc3RhdGljIHZvaWQgYm9jaHNfdHdlYWtzKCk7Cn07CiMgMTMw
ICJhdXRvL2NwdS5oIgppbmxpbmUgdm9pZApDcHU6OndybXNyKHVuc2lnbmVkIGVjeCwgdW5zaWdu
ZWQgZWF4LCB1bnNpZ25lZCBlZHgpCnsKICBhc20gdm9sYXRpbGUgKCJ3cm1zciIgOiA6ICJjIihl
Y3gpLCAiYSIoZWF4KSwgImQiKGVkeCkpOwp9CgoKCmlubGluZSB2b2lkCkNwdTo6Y3B1aWQodW5z
aWduZWQgbW9kZSwKICAgICAgICAgICAgdW5zaWduZWQgKmVheCwgdW5zaWduZWQgKmVieCwgdW5z
aWduZWQgKmVjeCwgdW5zaWduZWQgKmVkeCkKewogIGFzbSB2b2xhdGlsZSAoImNwdWlkIiA6ICI9
YSIoKmVheCksICI9YiIoKmVieCksICI9YyIoKmVjeCksICI9ZCIoKmVkeCkKICAgICAgICAgICAg
ICAgICAgICAgICAgOiAiYSIobW9kZSkpOwp9CgoKCmlubGluZSB2b2lkCkNwdTo6c2V0X3N5c2Vu
dGVyX3N0YWNrKHVuc2lnbmVkIHN0YWNrcHRyKQp7CiAgY3B1X3N5c2VudGVyX3N0YWNrID0gc3Rh
Y2twdHI7Cn0KCgoKaW5saW5lIGNvbnN0IGNoYXIgKgpDcHU6OnZlbmRvcl9zdHIoKQp7CiAgcmV0
dXJuIGNwdV92ZW5kb3Jfc3RyOwp9CgoKCmlubGluZSBjb25zdCBjaGFyICoKQ3B1Ojptb2RlbF9z
dHIoKQp7CiAgcmV0dXJuIGNwdV9tb2RlbF9zdHI7Cn0KCgoKaW5saW5lIGNvbnN0IENwdTo6VmVu
ZG9yCkNwdTo6dmVuZG9yKCkKewogIHJldHVybiBjcHVfdmVuZG9yOwp9CgoKCmlubGluZSBjb25z
dCB1bnNpZ25lZCBpbnQKQ3B1OjpmYW1pbHkoKQp7CiAgdW5zaWduZWQgaW50IHZhbCA9IChjcHVf
dmVyc2lvbiA+PiA4KSAmIDB4RjsKCiAgaWYgKHZhbCA9PSAweEYpCiAgICB2YWwgKz0gKGNwdV92
ZXJzaW9uID4+IDIwKSAmIDB4RkY7CgogIHJldHVybiB2YWw7Cn0KCgoKaW5saW5lIGNvbnN0IHVu
c2lnbmVkIGludApDcHU6Om1vZGVsKCkKewogIHVuc2lnbmVkIGludCB2YWwgPSAoY3B1X3ZlcnNp
b24gPj4gNCkgJiAweEY7CgogIGlmICh2YWwgPT0gMHhGKQogICAgdmFsICs9IChjcHVfdmVyc2lv
biA+PiAxMikgJiAweEYwOwoKICByZXR1cm4gdmFsOwp9CgoKCmlubGluZSBjb25zdCB1bnNpZ25l
ZCBpbnQKQ3B1OjpzdGVwcGluZygpCnsKICByZXR1cm4gY3B1X3ZlcnNpb24gJiAweEY7Cn0KCgoK
aW5saW5lIGNvbnN0IHVuc2lnbmVkIGludApDcHU6OmFwaWMoKQp7CiAgcmV0dXJuIChjcHVfYXBp
YyA+PiAyNCkgJiAweEZGOwp9CgoKCmlubGluZSBjb25zdCB1bnNpZ25lZCBpbnQKQ3B1OjpmZWF0
dXJlcygpCnsKICByZXR1cm4gY3B1X2ZlYXR1cmVzOwp9CgoKCmlubGluZSBjb25zdCB1bnNpZ25l
ZCBzaG9ydApDcHU6OmwxX2NhY2hlKCkKewogIHJldHVybiBjcHVfbDFfY2FjaGU7Cn0KCgoKaW5s
aW5lIGNvbnN0IHVuc2lnbmVkIHNob3J0CkNwdTo6bDJfY2FjaGUoKQp7CiAgcmV0dXJuIGNwdV9s
Ml9jYWNoZTsKfQojIDEwOCAiYXV0by9mcHUuaCIgMgojIDEgIi4uL3NyYy9rZXJuL2lhMzIvcmVn
ZGVmcy5oIiAxCiMgMTA5ICJhdXRvL2ZwdS5oIiAyCiMgMTE3ICJhdXRvL2ZwdS5oIgppbmxpbmUg
RnB1X3N0YXRlOjpGcHVfc3RhdGUoKSA6IF9zdGF0ZV9idWZmZXIoMCkKe30KCgoKaW5saW5lIEZw
dV9zdGF0ZTo6fkZwdV9zdGF0ZSgpCnsKICBmcmVlX3N0YXRlKCk7Cn0KCgoKaW5saW5lIHZvaWQg
KkZwdV9zdGF0ZTo6c3RhdGVfYnVmZmVyKCkKewogIHJldHVybiBfc3RhdGVfYnVmZmVyOwp9CgoK
CmlubGluZSB2b2lkIEZwdV9zdGF0ZTo6c2F2ZV9zdGF0ZSgpCnsKICBGcHU6OnNhdmVfc3RhdGUo
dGhpcyk7Cn0KCgoKaW5saW5lIHZvaWQgRnB1X3N0YXRlOjpyZXN0b3JlX3N0YXRlKCkKewogIEZw
dTo6cmVzdG9yZV9zdGF0ZSh0aGlzKTsKfQoKCgppbmxpbmUgQ29udGV4dCAqIEZwdTo6b3duZXIo
KQp7CiAgcmV0dXJuIF9vd25lcjsKfQoKCgppbmxpbmUgdm9pZCBGcHU6OnNldF9vd25lcihDb250
ZXh0ICpvd25lcikKewogIF9vd25lciA9IG93bmVyOwp9CgoKCmlubGluZSBib29sIEZwdTo6aXNf
b3duZXIoQ29udGV4dCAqb3duZXIpCnsKICByZXR1cm4gX293bmVyID09IG93bmVyOwp9CiMgMTc2
ICJhdXRvL2ZwdS5oIgppbmxpbmUgdm9pZCBGcHU6OmluaXRfc3RhdGUoIEZwdV9zdGF0ZSAqcyAp
CnsKICBpZiAoKENwdTo6ZmVhdHVyZXMoKSAmIDB4MDEwMDAwMDApKSB7CgogICAgc3NlX3JlZ3Mg
KnNzZSA9IG5vbnVsbF9zdGF0aWNfY2FzdDxzc2VfcmVncyAqPihzLT5zdGF0ZV9idWZmZXIoKSk7
CgogICAgbWVtc2V0IChzc2UsIDAsIHNpemVvZiAoKnNzZSkpOwogICAgc3NlLT5jd2QgPSAweDM3
ZjsKCiAgICBpZiAoKENwdTo6ZmVhdHVyZXMoKSAmIDB4MDIwMDAwMDApICYmIChDcHU6OmZlYXR1
cmVzKCkgJiAweDA0MDAwMDAwKSkKICAgICAgc3NlLT5teGNzciA9IDB4MWY4MDsKCiAgfSBlbHNl
IHsKCiAgICBmcHVfcmVncyAqZnB1ID0gbm9udWxsX3N0YXRpY19jYXN0PGZwdV9yZWdzICo+KHMt
PnN0YXRlX2J1ZmZlcigpKTsKCiAgICBtZW1zZXQgKGZwdSwgMCwgc2l6ZW9mICgqZnB1KSk7CiAg
ICBmcHUtPmN3ZCA9IDB4ZmZmZjAzN2Y7CiAgICBmcHUtPnN3ZCA9IDB4ZmZmZjAwMDA7CiAgICBm
cHUtPnR3ZCA9IDB4ZmZmZmZmZmY7CiAgICBmcHUtPmZvcyA9IDB4ZmZmZjAwMDA7CiAgfQp9CgoK
CgoKCgppbmxpbmUgdW5zaWduZWQgY29uc3QgRnB1OjpzdGF0ZV9zaXplKCkKewogIHJldHVybiAo
Q3B1OjpmZWF0dXJlcygpICYgMHgwMTAwMDAwMCkgPyBzaXplb2YgKHNzZV9yZWdzKSA6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChmcHVfcmVncyk7Cn0K
CgoKCgoKCmlubGluZSB1bnNpZ25lZCBjb25zdCBGcHU6OnN0YXRlX2FsaWduKCkKewogIHJldHVy
biAoQ3B1OjpmZWF0dXJlcygpICYgMHgwMTAwMDAwMCkgPyAxNiA6IDQ7Cn0KCgoKCgoKaW5saW5l
IHZvaWQgRnB1OjpzYXZlX3N0YXRlKCBGcHVfc3RhdGUgKnMgKQp7CiAgKCh2b2lkKSAoKHMtPnN0
YXRlX2J1ZmZlcigpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInMtPnN0YXRlX2J1ZmZlcigpIiwg
ImF1dG8vZnB1LmgiLCAyMzAsICgoY29uc3QgY2hhciAqKSAwKSksIDApKSk7CgogIGlmICgoQ3B1
OjpmZWF0dXJlcygpICYgMHgwMTAwMDAwMCkpCiAgICBhc20gdm9sYXRpbGUgKCJmeHNhdmUgKCUw
KSIgOiA6ICJyIiAocy0+c3RhdGVfYnVmZmVyKCkpIDogIm1lbW9yeSIpOwogIGVsc2UKICAgIGFz
bSB2b2xhdGlsZSAoImZuc2F2ZSAoJTApIiA6IDogInIiIChzLT5zdGF0ZV9idWZmZXIoKSkgOiAi
bWVtb3J5Iik7Cn0KCgoKCgoKaW5saW5lIHZvaWQgRnB1OjpyZXN0b3JlX3N0YXRlKCBGcHVfc3Rh
dGUgKnMgKQp7CiAgKCh2b2lkKSAoKHMtPnN0YXRlX2J1ZmZlcigpKSA/IDAgOiAoX19hc3NlcnRf
ZmFpbCAoInMtPnN0YXRlX2J1ZmZlcigpIiwgImF1dG8vZnB1LmgiLCAyNDUsICgoY29uc3QgY2hh
ciAqKSAwKSksIDApKSk7CgogIGlmICgoQ3B1OjpmZWF0dXJlcygpICYgMHgwMTAwMDAwMCkpCiAg
ICBhc20gdm9sYXRpbGUgKCJmeHJzdG9yICglMCkiIDogOiAiciIgKHMtPnN0YXRlX2J1ZmZlcigp
KSk7CiAgZWxzZQogICAgYXNtIHZvbGF0aWxlICgiZnJzdG9yICAoJTApIiA6IDogInIiIChzLT5z
dGF0ZV9idWZmZXIoKSkpOwp9CgoKCgoKCgppbmxpbmUgdm9pZCBGcHU6OnN5bmNocm9uaXplKCkK
ewogIGFzbSB2b2xhdGlsZSAoImZ3YWl0Iik7Cn0KCgoKCgoKaW5saW5lIHZvaWQgRnB1OjpkaXNh
YmxlKCkKewogIFVuc2lnbmVkMzIgZHVtbXk7CgogIGFzbSB2b2xhdGlsZSAoIm1vdmwgJSVjcjAs
ICUwOyBvcmwgJTEsICUwOyBtb3ZsICUwLCAlJWNyMCIKICAgICAgICAgICAgICAgIDogIj1yIiAo
ZHVtbXkpCiAgICAgICAgICAgICAgICA6ICJpIiAoMHgwMDAwMDAwOCkpOwp9CgoKCgoKCmlubGlu
ZSB2b2lkIEZwdTo6ZW5hYmxlKCkKewogIGFzbSB2b2xhdGlsZSAoImNsdHMiKTsKfQojIDEzICJh
dXRvL2NvbnRleHQuaCIgMgoKCgoKCgpjbGFzcyBTcGFjZV9jb250ZXh0OwpjbGFzcyBUaHJlYWRf
bG9jazsKY2xhc3MgUmV0dXJuX2ZyYW1lOwoKCgoKCmNsYXNzIENvbnRleHQKewpwdWJsaWM6CiAg
c3RhdGljIGNvbnN0IHZtX3NpemVfdCBzaXplID0gQ29uZmlnOjp0aHJlYWRfYmxvY2tfc2l6ZTsK
CnByaXZhdGU6CgogIHZvaWQgc3dpdGNoaW5fY29udGV4dCgpIGFzbSgiY2FsbF9zd2l0Y2hpbl9j
b250ZXh0Iik7CgogIGZyaWVuZCBjbGFzcyBqZGI7CiAgZnJpZW5kIGNsYXNzIGpkYl90YnVmOwoK
CgoKICAgICAgICAgICAgIHVuc2lnbmVkIF9zdGF0ZTsKCgpwcm90ZWN0ZWQ6CiAgICAgICAgICAg
ICBDb250ZXh0ICpyZWFkeV9uZXh0OwogICAgICAgICAgICAgQ29udGV4dCAqcmVhZHlfcHJldjsK
ICAgICAgICAgICAgIE13b3JkICprZXJuZWxfc3A7Cgpwcml2YXRlOgogICAgICAgICAgICAgU3Bh
Y2VfY29udGV4dCogX3NwYWNlX2NvbnRleHQ7CgogIENvbnRleHQqIF9zdGFja19saW5rOwoKICBD
b250ZXh0KiBfZG9uYXRlZTsKCgoKCgogIGludCBfbG9ja19jbnQ7CiAgVGhyZWFkX2xvY2sqIGNv
bnN0IF90aHJlYWRfbG9jazsKCgoKCiAgc2NoZWRfdCBfc2NoZWQ7CgoKICBGcHVfc3RhdGUgX2Zw
dV9zdGF0ZTsKCgpwcm90ZWN0ZWQ6CiAgc3RhdGljIENvbnRleHQgKnByaW9fZmlyc3RbMjU2XSBh
c20gKCJDT05URVhUX1BSSU9fRklSU1QiKTsKICBzdGF0aWMgQ29udGV4dCAqcHJpb19uZXh0WzI1
Nl0gYXNtICgiQ09OVEVYVF9QUklPX05FWFQiKTsKICBzdGF0aWMgdW5zaWduZWQgcHJpb19oaWdo
ZXN0IGFzbSAoIkNPTlRFWFRfUFJJT19ISUdIRVNUIik7CiAgc3RhdGljIGludCB0aW1lc2xpY2Vf
dGlja3NfbGVmdDsKICBzdGF0aWMgQ29udGV4dCAqdGltZXNsaWNlX293bmVyOwoKcHVibGljOgoj
IDg5ICJhdXRvL2NvbnRleHQuaCIKICBDb250ZXh0KFRocmVhZF9sb2NrICp0aHJlYWRfbG9jaywg
U3BhY2VfY29udGV4dCogc3BhY2VfY29udGV4dCk7CgoKCiAgdmlydHVhbCB+Q29udGV4dCgpOwoK
CgoKICB1bnNpZ25lZCBzdGF0ZSgpIGNvbnN0OwoKCgoKICBib29sIGV4aXN0cygpIGNvbnN0OwoK
CgoKCiAgYm9vbCBzdGF0ZV9hZGQodW5zaWduZWQgYml0cyk7CgoKCgoKICBib29sIHN0YXRlX2Rl
bCh1bnNpZ25lZCBiaXRzKTsKCgoKCgoKCiAgYm9vbCBzdGF0ZV9jaGFuZ2UodW5zaWduZWQgbWFz
aywgdW5zaWduZWQgYml0cyk7CiMgMTM2ICJhdXRvL2NvbnRleHQuaCIKICBib29sIHN0YXRlX2No
YW5nZV9zYWZlbHkodW5zaWduZWQgbWFzaywgdW5zaWduZWQgYml0cyk7CgoKCgoKCgogIHZvaWQg
c3RhdGVfY2hhbmdlX2RpcnR5KHVuc2lnbmVkIG1hc2ssIHVuc2lnbmVkIGJpdHMpOwoKCgoKCiAg
U3BhY2VfY29udGV4dCAqIHNwYWNlX2NvbnRleHQoKSBjb25zdDsKCgoKCiAgVGhyZWFkX2xvY2sg
KiB0aHJlYWRfbG9jaygpOwoKCgoKICBzY2hlZF90ICogc2NoZWQoKTsKCgoKCiAgUmV0dXJuX2Zy
YW1lICpyZWdzKCkgY29uc3Q7CgoKCiAgdm9pZCBpbmNfbG9ja19jbnQoKTsKCgoKCiAgdm9pZCBk
ZWNfbG9ja19jbnQoKTsKCgoKCiAgaW50IGxvY2tfY250KCk7CgoKCgoKCiAgdm9pZCBzY2hlZHVs
ZSgpOwoKCiAgc3RhdGljIHZvaWQgdGltZXJfdGljaygpOwoKCgoKICBib29sIGluX3JlYWR5X2xp
c3QoKTsKCgoKICB2b2lkIHJlYWR5X2VucXVldWUoKTsKCgoKICB2b2lkIHJlYWR5X2RlcXVldWUo
KTsKCgoKCgoKCiAgQ29udGV4dCAqIGdldF9uZXh0KCk7CgoKCgogIHZvaWQgc2V0X25leHQoQ29u
dGV4dCAqbmV4dCk7CgoKCgoKCiAgQ29udGV4dCogZG9uYXRlZSgpOwoKICB2b2lkIHNldF9kb25h
dGVlKENvbnRleHQqIGRvbmF0ZWUpOwoKICB2b2lkIHNldF9rZXJuZWxfc3AoTXdvcmQgKmVzcCk7
CgogIEZwdV9zdGF0ZSAqY29uc3QgZnB1X3N0YXRlKCk7CiMgMjM3ICJhdXRvL2NvbnRleHQuaCIK
ICBib29sIHN3aXRjaF90byhDb250ZXh0ICp0KTsKCgoKCiAgdm9pZCBoYW5kbGVfZnB1X3RyYXAo
KTsKfTsKCgoKCgpleHRlcm4gIkMiIHZvaWQgdGhyZWFkX2hhbmRsZV9mcHV0cmFwKCk7CiMgMjYy
ICJhdXRvL2NvbnRleHQuaCIKIyAxICJhdXRvL2VudHJ5X2ZyYW1lLmgiIDEKIyAyMSAiYXV0by9l
bnRyeV9mcmFtZS5oIgpjbGFzcyBTeXNjYWxsX2ZyYW1lCnsKcHJpdmF0ZToKCnB1YmxpYzoKCiAg
VW5zaWduZWQzMiBlY3g7CiAgVW5zaWduZWQzMiBlZHg7CiAgVW5zaWduZWQzMiBlc2k7CiAgVW5z
aWduZWQzMiBlZGk7CiAgVW5zaWduZWQzMiBlYng7CiAgVW5zaWduZWQzMiBlYnA7CiAgVW5zaWdu
ZWQzMiBlYXg7Cn07CgpjbGFzcyBSZXR1cm5fZnJhbWUKewpwcml2YXRlOgoKcHVibGljOgogIFVu
c2lnbmVkMzIgZWlwOwogIFVuc2lnbmVkMTYgY3MsIF9fY3N1OwogIFVuc2lnbmVkMzIgZWZsYWdz
OwogIFVuc2lnbmVkMzIgZXNwOwogIFVuc2lnbmVkMTYgc3MsIF9fc3N1OwoKfTsKCgoKCgoKCmNs
YXNzIEVudHJ5X2ZyYW1lIDogcHVibGljIFN5c2NhbGxfZnJhbWUsIHB1YmxpYyBSZXR1cm5fZnJh
bWUKewp9OwoKCgoKY2xhc3MgU3lzX2lwY19mcmFtZSA6IHB1YmxpYyBTeXNjYWxsX2ZyYW1lCnsK
cHVibGljOgoKICB2b2lkIHJjdl9zb3VyY2UoIEw0X3VpZCBpZCApOwoKCiAgTDRfdWlkIHJjdl9z
b3VyY2UoKTsKCgogIEw0X3VpZCBzbmRfZGVzdCgpIGNvbnN0OwoKCiAgTXdvcmQgaGFzX3NuZF9k
ZXN0KCkgY29uc3Q7CgoKICBNd29yZCBpcnEoKSBjb25zdDsKCgogIHZvaWQgc25kX2Rlc2MoIE13
b3JkIHcgKTsKCgogIEw0X3NuZF9kZXNjIHNuZF9kZXNjKCkgY29uc3Q7CgoKICB2b2lkIHJjdl9k
ZXNjKCBMNF9yY3ZfZGVzYyBkICk7CgoKICBMNF9yY3ZfZGVzYyByY3ZfZGVzYygpIGNvbnN0OwoK
CiAgTDRfdGltZW91dCB0aW1lb3V0KCkgY29uc3Q7CgoKICBNd29yZCBtc2dfd29yZCggdW5zaWdu
ZWQgaW5kZXggKSBjb25zdDsKCgogIHZvaWQgc2V0X21zZ193b3JkKCB1bnNpZ25lZCBpbmRleCwg
TXdvcmQgdmFsdWUgKTsKCgogIHZvaWQgY29weV9tc2coIFN5c19pcGNfZnJhbWUgKnRvICkgY29u
c3QgOwoKCiAgTDRfbXNnZG9wZSBtc2dfZG9wZSgpIGNvbnN0OwoKCiAgdm9pZCBtc2dfZG9wZV9z
ZXRfZXJyb3IoIE13b3JkICk7CgoKICB2b2lkIG1zZ19kb3BlKCBMNF9tc2dkb3BlIGQgKTsKCgog
IHZvaWQgbXNnX2RvcGVfY29tYmluZSggTDRfbXNnZG9wZSBkICk7CgoKICBzdGF0aWMgdW5zaWdu
ZWQgY29uc3QgbnVtX3JlZ193b3JkcygpOwp9OwoKCgoKY2xhc3MgU3lzX2lkX25lYXJlc3RfZnJh
bWUgOiBwdWJsaWMgU3lzY2FsbF9mcmFtZQp7CnB1YmxpYzoKCgogIEw0X3VpZCBkZXN0KCkgY29u
c3Q7CgoKICB2b2lkIG5lYXJlc3QoIEw0X3VpZCBpZCApIDsKfTsKCgoKCmNsYXNzIFN5c19leF9y
ZWdzX2ZyYW1lIDogcHVibGljIFN5c2NhbGxfZnJhbWUKewpwdWJsaWM6CgoKICBNd29yZCBsdGhy
ZWFkKCkgY29uc3Q7CgoKICBNd29yZCBzcCgpIGNvbnN0OwoKCiAgTXdvcmQgaXAoKSBjb25zdDsK
CgogIEw0X3VpZCBwcmVlbXB0ZXIoKSBjb25zdDsKCgogIEw0X3VpZCBwYWdlcigpIGNvbnN0OwoK
CiAgdm9pZCBvbGRfZWZsYWdzKCBNd29yZCBvZWZsICk7CgoKICB2b2lkIG9sZF9zcCggTXdvcmQg
b3NwICk7CgoKICB2b2lkIG9sZF9pcCggTXdvcmQgb2lwICk7CgoKICB2b2lkIG9sZF9wcmVlbXB0
ZXIoIEw0X3VpZCBpZCApOwoKCiAgdm9pZCBvbGRfcGFnZXIoIEw0X3VpZCBpZCApOwp9OwoKCgoK
Y2xhc3MgU3lzX3RocmVhZF9zd2l0Y2hfZnJhbWUgOiBwdWJsaWMgU3lzY2FsbF9mcmFtZQp7CnB1
YmxpYzoKCgogIEw0X3VpZCBkZXN0KCkgY29uc3Q7CgoKICBNd29yZCBoYXNfZGVzdCgpIGNvbnN0
OwoKfTsKCgoKCmNsYXNzIFN5c190aHJlYWRfc2NoZWR1bGVfZnJhbWUgOiBwdWJsaWMgU3lzY2Fs
bF9mcmFtZQp7CnB1YmxpYzoKCgogIEw0X3NjaGVkX3BhcmFtIHBhcmFtKCkgY29uc3Q7CgoKICBM
NF91aWQgcHJlZW1wdGVyKCkgY29uc3Q7CgoKICBMNF91aWQgZGVzdCgpIGNvbnN0OwoKCiAgdm9p
ZCBvbGRfcGFyYW0oIEw0X3NjaGVkX3BhcmFtIG9wICk7CgoKICB2b2lkIHRpbWUoIFVuc2lnbmVk
NjQgdCApOwoKCiAgdm9pZCBvbGRfcHJlZW1wdGVyKCBMNF91aWQgaWQgKTsKCgogIHZvaWQgcGFy
dG5lciggTDRfdWlkIGlkICk7Cn07CgoKCgpjbGFzcyBTeXNfdW5tYXBfZnJhbWUgOiBwdWJsaWMg
U3lzY2FsbF9mcmFtZQp7CnB1YmxpYzoKCgogIEw0X2ZwYWdlIGZwYWdlKCkgY29uc3Q7CgoKICBN
d29yZCBtYXBfbWFzaygpIGNvbnN0OwoKCiAgYm9vbCBkb3duZ3JhZGUoKSBjb25zdDsKCgogIGJv
b2wgc2VsZl91bm1hcCgpIGNvbnN0Owp9OwoKCgoKY2xhc3MgU3lzX3Rhc2tfbmV3X2ZyYW1lIDog
cHVibGljIFN5c2NhbGxfZnJhbWUKewpwdWJsaWM6CgoKICBNd29yZCBtY3AoKSBjb25zdDsKCgog
IEw0X3VpZCBuZXdfY2hpZWYoKSBjb25zdDsKCgogIE13b3JkIHNwKCkgY29uc3Q7CgoKICBNd29y
ZCBpcCgpIGNvbnN0OwoKCiAgTXdvcmQgaGFzX3BhZ2VyKCkgY29uc3Q7CgoKICBMNF91aWQgcGFn
ZXIoKSBjb25zdDsKCgogIEw0X3VpZCBkZXN0KCkgY29uc3Q7CgoKICB2b2lkIG5ld190YXNraWQo
IEw0X3VpZCBpZCApOwoKfTsKIyAyODEgImF1dG8vZW50cnlfZnJhbWUuaCIKaW5saW5lIHZvaWQg
U3lzX2lwY19mcmFtZTo6cmN2X3NvdXJjZSggTDRfdWlkIGlkICkKewogIGVzaSA9IGlkLnJhdygp
OyBlZGkgPSAoaWQucmF3KCkgPj4gMzIpOwp9CgoKCmlubGluZSBMNF91aWQgU3lzX2lwY19mcmFt
ZTo6cmN2X3NvdXJjZSgpCnsKICByZXR1cm4gTDRfdWlkKCgoVW5zaWduZWQ2NCllZGkgPDwgMzIp
IHwgKFVuc2lnbmVkNjQpZXNpKTsKfQoKCgppbmxpbmUgTDRfdWlkIFN5c19pcGNfZnJhbWU6OnNu
ZF9kZXN0KCkgY29uc3QKewogIHJldHVybiBMNF91aWQoIChVbnNpZ25lZDY0KWVzaSB8ICgoVW5z
aWduZWQ2NCllZGkgPDwgMzIpICk7Cn0KCgoKaW5saW5lIE13b3JkIFN5c19pcGNfZnJhbWU6Omhh
c19zbmRfZGVzdCgpIGNvbnN0CnsKICByZXR1cm4gZXNpOwp9CgoKCmlubGluZSBNd29yZCBTeXNf
aXBjX2ZyYW1lOjppcnEoKSBjb25zdAp7CiAgcmV0dXJuIGVzaSAtMTsKfQoKCgppbmxpbmUgdm9p
ZCBTeXNfaXBjX2ZyYW1lOjpzbmRfZGVzYyggTXdvcmQgdyApCnsKICBlYXggPXc7Cn0KCgoKaW5s
aW5lIEw0X3NuZF9kZXNjIFN5c19pcGNfZnJhbWU6OnNuZF9kZXNjKCkgY29uc3QKewogIHJldHVy
biBlYXg7Cn0KCgoKaW5saW5lIEw0X3RpbWVvdXQgU3lzX2lwY19mcmFtZTo6dGltZW91dCgpIGNv
bnN0CnsKICByZXR1cm4gTDRfdGltZW91dCggZWN4ICk7Cn0KCgoKaW5saW5lIE13b3JkIFN5c19p
cGNfZnJhbWU6Om1zZ193b3JkKCB1bnNpZ25lZCBpbmRleCApIGNvbnN0CnsKICBzd2l0Y2goaW5k
ZXgpCiAgICB7CiAgICBjYXNlIDA6CiAgICAgIHJldHVybiBlZHg7CiAgICBjYXNlIDE6CiAgICAg
IHJldHVybiBlYng7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gMDsKICAgIH0KfQoKCgppbmxp
bmUgdm9pZCBTeXNfaXBjX2ZyYW1lOjpzZXRfbXNnX3dvcmQoIHVuc2lnbmVkIGluZGV4LCBNd29y
ZCB2YWx1ZSApCnsKICBzd2l0Y2goaW5kZXgpCiAgICB7CiAgICBjYXNlIDA6CiAgICAgIGVkeCA9
IHZhbHVlOwogICAgICBicmVhazsKICAgIGNhc2UgMToKICAgICAgZWJ4ID0gdmFsdWU7CiAgICAg
IGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgYnJlYWs7CiAgICB9Cn0KCgoKaW5saW5lIEw0X3Jj
dl9kZXNjIFN5c19pcGNfZnJhbWU6OnJjdl9kZXNjKCkgY29uc3QKewogIHJldHVybiBlYnA7Cn0K
CgoKaW5saW5lIHZvaWQgU3lzX2lwY19mcmFtZTo6cmN2X2Rlc2MoIEw0X3Jjdl9kZXNjIGQgKQp7
CiAgZWJwID0gZC5yYXcoKTsKfQoKCgppbmxpbmUgTDRfbXNnZG9wZSBTeXNfaXBjX2ZyYW1lOjpt
c2dfZG9wZSgpIGNvbnN0CnsKICByZXR1cm4gTDRfbXNnZG9wZShlYXgpOwp9CgoKCmlubGluZSB2
b2lkIFN5c19pcGNfZnJhbWU6Om1zZ19kb3BlX3NldF9lcnJvciggTXdvcmQgZSApCnsKICByZWlu
dGVycHJldF9jYXN0PEw0X21zZ2RvcGUqPigmZWF4KS0+ZXJyb3IoZSk7Cn0KCgoKaW5saW5lIHVu
c2lnbmVkIGNvbnN0IFN5c19pcGNfZnJhbWU6Om51bV9yZWdfd29yZHMoKQp7CiAgcmV0dXJuIDI7
Cn0KCgoKaW5saW5lIHZvaWQgU3lzX2lwY19mcmFtZTo6bXNnX2RvcGUoIEw0X21zZ2RvcGUgZCAp
CnsKICBlYXggPSBkLnJhdygpOwp9CgoKCmlubGluZSB2b2lkIFN5c19pcGNfZnJhbWU6Om1zZ19k
b3BlX2NvbWJpbmUoIEw0X21zZ2RvcGUgZCApCnsKICBMNF9tc2dkb3BlIG0oZWF4KTsKICBtLmNv
bWJpbmUoZCk7CiAgZWF4ID0gbS5yYXcoKTsKfQoKCgppbmxpbmUgdm9pZCBTeXNfaXBjX2ZyYW1l
Ojpjb3B5X21zZyggU3lzX2lwY19mcmFtZSAqdG8gKSBjb25zdAp7CgogIFVuc2lnbmVkMzIgdG1w
X2VkeCA9IGVkeCwgdG1wX2VieCA9IGVieDsKICB0by0+ZWR4ID0gdG1wX2VkeDsKICB0by0+ZWJ4
ID0gdG1wX2VieDsKfQoKCgoKCmlubGluZSBMNF91aWQgU3lzX2lkX25lYXJlc3RfZnJhbWU6OmRl
c3QoKSBjb25zdAp7CiAgcmV0dXJuIEw0X3VpZCggKFVuc2lnbmVkNjQpZXNpIHwgKChVbnNpZ25l
ZDY0KWVkaSA8PCAzMikgKTsKfQoKCgppbmxpbmUgdm9pZCBTeXNfaWRfbmVhcmVzdF9mcmFtZTo6
bmVhcmVzdCggTDRfdWlkIGlkICkKewogIGVzaSA9IGlkLnJhdygpOyBlZGkgPSAoaWQucmF3KCkg
Pj4gMzIpOwp9CgoKCgoKaW5saW5lIE13b3JkIFN5c19leF9yZWdzX2ZyYW1lOjpsdGhyZWFkKCkg
Y29uc3QKewogIHJldHVybiBlYXg7Cn0KCgoKaW5saW5lIE13b3JkIFN5c19leF9yZWdzX2ZyYW1l
OjpzcCgpIGNvbnN0CnsKICByZXR1cm4gZWN4Owp9CgoKCmlubGluZSBNd29yZCBTeXNfZXhfcmVn
c19mcmFtZTo6aXAoKSBjb25zdAp7CiAgcmV0dXJuIGVkeDsKfQoKCgppbmxpbmUgTDRfdWlkIFN5
c19leF9yZWdzX2ZyYW1lOjpwcmVlbXB0ZXIoKSBjb25zdAp7CiAgcmV0dXJuIEw0X3VpZCggKFVu
c2lnbmVkNjQpZWJ4IHwgKChVbnNpZ25lZDY0KWVicCA8PCAzMikgKTsKfQoKCgppbmxpbmUgTDRf
dWlkIFN5c19leF9yZWdzX2ZyYW1lOjpwYWdlcigpIGNvbnN0CnsKICByZXR1cm4gTDRfdWlkKCAo
VW5zaWduZWQ2NCllc2kgfCAoKFVuc2lnbmVkNjQpZWRpIDw8IDMyKSApOwp9CgoKCmlubGluZSB2
b2lkIFN5c19leF9yZWdzX2ZyYW1lOjpvbGRfZWZsYWdzKCBNd29yZCBvZWZsICkKewogIGVheCA9
IG9lZmw7Cn0KCgoKaW5saW5lIHZvaWQgU3lzX2V4X3JlZ3NfZnJhbWU6Om9sZF9zcCggTXdvcmQg
b3NwICkKewogIGVjeCA9IG9zcDsKfQoKCgppbmxpbmUgdm9pZCBTeXNfZXhfcmVnc19mcmFtZTo6
b2xkX2lwKCBNd29yZCBvaXAgKQp7CiAgZWR4ID0gb2lwOwp9CgoKCmlubGluZSB2b2lkIFN5c19l
eF9yZWdzX2ZyYW1lOjpvbGRfcHJlZW1wdGVyKCBMNF91aWQgaWQgKQp7CiAgZWJ4ID0gaWQucmF3
KCk7IGVicCA9IGlkLnJhdygpID4+IDMyOwp9CgoKCmlubGluZSB2b2lkIFN5c19leF9yZWdzX2Zy
YW1lOjpvbGRfcGFnZXIoIEw0X3VpZCBpZCApCnsKICBlc2kgPSBpZC5yYXcoKTsgZWRpID0gaWQu
cmF3KCkgPj4gMzI7Cn0KCgoKCgppbmxpbmUgTDRfdWlkIFN5c190aHJlYWRfc3dpdGNoX2ZyYW1l
OjpkZXN0KCkgY29uc3QKewoKICByZXR1cm4gTDRfdWlkKCAoVW5zaWduZWQ2NCllc2kgfCAoKFVu
c2lnbmVkNjQpZWRpIDw8IDMyKSApOwp9CgoKCmlubGluZSBNd29yZCBTeXNfdGhyZWFkX3N3aXRj
aF9mcmFtZTo6aGFzX2Rlc3QoKSBjb25zdAp7CiAgcmV0dXJuIGVzaTsKfQoKCgoKCmlubGluZSBM
NF9zY2hlZF9wYXJhbSBTeXNfdGhyZWFkX3NjaGVkdWxlX2ZyYW1lOjpwYXJhbSgpIGNvbnN0CnsK
ICByZXR1cm4gTDRfc2NoZWRfcGFyYW0oZWF4KTsKfQoKCgppbmxpbmUgTDRfdWlkIFN5c190aHJl
YWRfc2NoZWR1bGVfZnJhbWU6OnByZWVtcHRlcigpIGNvbnN0CnsKICByZXR1cm4gTDRfdWlkKCAo
VW5zaWduZWQ2NCllYnggfCAoKFVuc2lnbmVkNjQpZWJwIDw8IDMyKSApOwp9CgoKCmlubGluZSBM
NF91aWQgU3lzX3RocmVhZF9zY2hlZHVsZV9mcmFtZTo6ZGVzdCgpIGNvbnN0CnsKICByZXR1cm4g
TDRfdWlkKCAoVW5zaWduZWQ2NCllc2kgfCAoKFVuc2lnbmVkNjQpZWRpIDw8IDMyKSApOwp9CgoK
CmlubGluZSB2b2lkIFN5c190aHJlYWRfc2NoZWR1bGVfZnJhbWU6Om9sZF9wYXJhbSggTDRfc2No
ZWRfcGFyYW0gb3AgKQp7CiAgZWF4ID0gb3AucmF3KCk7Cn0KCgoKaW5saW5lIHZvaWQgU3lzX3Ro
cmVhZF9zY2hlZHVsZV9mcmFtZTo6dGltZSggVW5zaWduZWQ2NCB0ICkKewogIGVjeCA9IHQ7IGVk
eCA9IHQgPj4gMzI7Cn0KCgoKaW5saW5lIHZvaWQgU3lzX3RocmVhZF9zY2hlZHVsZV9mcmFtZTo6
b2xkX3ByZWVtcHRlciggTDRfdWlkIGlkICkKewogIGVieCA9IGlkLnJhdygpOyBlYnAgPSBpZC5y
YXcoKSA+PiAzMjsKfQoKCgppbmxpbmUgdm9pZCBTeXNfdGhyZWFkX3NjaGVkdWxlX2ZyYW1lOjpw
YXJ0bmVyKCBMNF91aWQgaWQgKQp7CiAgZXNpID0gaWQucmF3KCk7IGVkaSA9IGlkLnJhdygpID4+
IDMyOwp9CgoKCgoKaW5saW5lIEw0X2ZwYWdlIFN5c191bm1hcF9mcmFtZTo6ZnBhZ2UoKSBjb25z
dAp7CiAgcmV0dXJuIEw0X2ZwYWdlKCBlYXggKSA7Cn0KCgoKaW5saW5lIE13b3JkIFN5c191bm1h
cF9mcmFtZTo6bWFwX21hc2soKSBjb25zdAp7CiAgcmV0dXJuIGVjeDsKfQoKCgppbmxpbmUgYm9v
bCBTeXNfdW5tYXBfZnJhbWU6OmRvd25ncmFkZSgpIGNvbnN0CnsKICByZXR1cm4gIShlY3ggJiAy
KTsKfQoKCgppbmxpbmUgYm9vbCBTeXNfdW5tYXBfZnJhbWU6OnNlbGZfdW5tYXAoKSBjb25zdAp7
CiAgcmV0dXJuIGVjeCAmIDB4ODAwMDAwMDA7Cn0KCgoKCgppbmxpbmUgTXdvcmQgU3lzX3Rhc2tf
bmV3X2ZyYW1lOjptY3AoKSBjb25zdAp7CiAgcmV0dXJuIGVheDsKfQoKCgppbmxpbmUgTDRfdWlk
IFN5c190YXNrX25ld19mcmFtZTo6bmV3X2NoaWVmKCkgY29uc3QKewogIHJldHVybiBMNF91aWQo
IChVbnNpZ25lZDY0KWVheCApOwp9CgoKCmlubGluZSBNd29yZCBTeXNfdGFza19uZXdfZnJhbWU6
OnNwKCkgY29uc3QKewogIHJldHVybiBlY3g7Cn0KCgoKaW5saW5lIE13b3JkIFN5c190YXNrX25l
d19mcmFtZTo6aXAoKSBjb25zdAp7CiAgcmV0dXJuIGVkeDsKfQoKCgppbmxpbmUgTXdvcmQgU3lz
X3Rhc2tfbmV3X2ZyYW1lOjpoYXNfcGFnZXIoKSBjb25zdAp7CiAgcmV0dXJuIGVieDsKfQoKCgpp
bmxpbmUgTDRfdWlkIFN5c190YXNrX25ld19mcmFtZTo6cGFnZXIoKSBjb25zdAp7CiAgcmV0dXJu
IEw0X3VpZCggKFVuc2lnbmVkNjQpZWJ4IHwgKChVbnNpZ25lZDY0KWVicCA8PCAzMikgKTsKfQoK
CgppbmxpbmUgTDRfdWlkIFN5c190YXNrX25ld19mcmFtZTo6ZGVzdCgpIGNvbnN0CnsKICByZXR1
cm4gTDRfdWlkKCAoVW5zaWduZWQ2NCllc2kgfCAoKFVuc2lnbmVkNjQpZWRpIDw8IDMyKSApOwp9
CgoKCmlubGluZSB2b2lkIFN5c190YXNrX25ld19mcmFtZTo6bmV3X3Rhc2tpZCggTDRfdWlkIGlk
ICkKewogIGVzaSA9IGlkLnJhdygpOyBlZGkgPSBpZC5yYXcoKSA+PiAzMjsKfQojIDI2MyAiYXV0
by9jb250ZXh0LmgiIDIKIyAxICJhdXRvL3RocmVhZF9zdGF0ZS5oIiAxCiMgMTIgImF1dG8vdGhy
ZWFkX3N0YXRlLmgiCmVudW0KewogIFRocmVhZF9pbnZhbGlkID0gMCwKICBUaHJlYWRfcnVubmlu
ZyA9IDB4MSwKICBUaHJlYWRfd2FpdGluZyA9IDB4MiwKICBUaHJlYWRfcmVjZWl2aW5nID0gMHg0
LAogIFRocmVhZF9wb2xsaW5nID0gMHg4LAogIFRocmVhZF9pcGNfaW5fcHJvZ3Jlc3MgPSAweDEw
LAogIFRocmVhZF9zZW5kX2luX3Byb2dyZXNzID0gMHgyMCwKICBUaHJlYWRfYnVzeSA9IDB4NDAs
CiAgVGhyZWFkX2NhbmNlbCA9IDB4MTAwLAogIFRocmVhZF9kZWFkID0gMHgyMDAsCiAgVGhyZWFk
X3BvbGxpbmdfbG9uZyA9IDB4NDAwLAogIFRocmVhZF9idXN5X2xvbmcgPSAweDgwMCwKICBUaHJl
YWRfcmN2bG9uZ19pbl9wcm9ncmVzcyA9IDB4NDAwMCwKICBUaHJlYWRfZnB1X293bmVyID0gMHgx
MDAwMCwKCgogIFRocmVhZF9pcGNfc2VuZGluZ19tYXNrID0gVGhyZWFkX3NlbmRfaW5fcHJvZ3Jl
c3MKICAgIHwgVGhyZWFkX3BvbGxpbmcgfCBUaHJlYWRfcG9sbGluZ19sb25nLAogIFRocmVhZF9p
cGNfcmVjZWl2aW5nX21hc2sgPSBUaHJlYWRfd2FpdGluZyB8IFRocmVhZF9yZWNlaXZpbmcKICAg
IHwgVGhyZWFkX2J1c3kgfCBUaHJlYWRfcmN2bG9uZ19pbl9wcm9ncmVzcyB8IFRocmVhZF9idXN5
X2xvbmcsCiAgVGhyZWFkX2lwY19tYXNrID0gVGhyZWFkX2lwY19pbl9wcm9ncmVzcwogICAgfCBU
aHJlYWRfaXBjX3NlbmRpbmdfbWFzayB8IFRocmVhZF9pcGNfcmVjZWl2aW5nX21hc2ssCgp9Owoj
IDI2NCAiYXV0by9jb250ZXh0LmgiIDIKIyAyODAgImF1dG8vY29udGV4dC5oIgppbmxpbmUgQ29u
dGV4dDo6Q29udGV4dChUaHJlYWRfbG9jayAqdGhyZWFkX2xvY2ssCiAgICAgICAgICAgICAgICAg
IFNwYWNlX2NvbnRleHQqIHNwYWNlX2NvbnRleHQpCiAgOiBfc3BhY2VfY29udGV4dCAoc3BhY2Vf
Y29udGV4dCksCiAgICBfdGhyZWFkX2xvY2sgKHRocmVhZF9sb2NrKQp7CgoKCgoKCgogIE13b3Jk
ICppbml0X3NwID0gcmVpbnRlcnByZXRfY2FzdDxNd29yZCo+CiAgICAocmVpbnRlcnByZXRfY2Fz
dDxNd29yZD4odGhpcykgKyBzaXplIC0gc2l6ZW9mKEVudHJ5X2ZyYW1lKSk7CgoKCgogIHNtcF9j
YXMoJmtlcm5lbF9zcCwgKE13b3JkKikwLCBpbml0X3NwKTsKfQoKCgoKCgppbmxpbmUgdW5zaWdu
ZWQgQ29udGV4dDo6c3RhdGUoKSBjb25zdAp7IHJldHVybiBfc3RhdGU7IH0KCgoKCgoKaW5saW5l
IGJvb2wgQ29udGV4dDo6ZXhpc3RzKCkgY29uc3QKeyByZXR1cm4gX3N0YXRlICE9IFRocmVhZF9p
bnZhbGlkOyB9CgoKCgoKCgppbmxpbmUgYm9vbApDb250ZXh0OjpzdGF0ZV9hZGQodW5zaWduZWQg
Yml0cykKewogIGJvb2wgcmV0OwogIHVuc2lnbmVkIG9sZDsKICBkbwogICAgewogICAgICBvbGQg
PSBfc3RhdGU7CiAgICAgIHJldCA9IChfc3RhdGUgJiBiaXRzKSA9PSAwOwogICAgfQogIHdoaWxl
ICghIHNtcF9jYXMoJl9zdGF0ZSwgb2xkLCBvbGQgfCBiaXRzKSk7CgogIHJldHVybiByZXQ7Cn0K
CgoKCgoKCmlubGluZSBib29sCkNvbnRleHQ6OnN0YXRlX2RlbCh1bnNpZ25lZCBiaXRzKQp7CiAg
Ym9vbCByZXQ7CiAgdW5zaWduZWQgb2xkOwogIGRvCiAgICB7CiAgICAgIG9sZCA9IF9zdGF0ZTsK
ICAgICAgcmV0ID0gKF9zdGF0ZSAmIGJpdHMpID09IGJpdHM7CiAgICB9CiAgd2hpbGUgKCEgc21w
X2NhcygmX3N0YXRlLCBvbGQsIG9sZCAmIH5iaXRzKSk7CgogIHJldHVybiByZXQ7Cn0KIyAzNjcg
ImF1dG8vY29udGV4dC5oIgppbmxpbmUgYm9vbApDb250ZXh0OjpzdGF0ZV9jaGFuZ2UodW5zaWdu
ZWQgbWFzaywgdW5zaWduZWQgYml0cykKewogIGJvb2wgcmV0OwogIHVuc2lnbmVkIG9sZDsKICBk
bwogICAgewogICAgICBvbGQgPSBfc3RhdGU7CiAgICAgIHJldCA9ICgob2xkICYgYml0cyAmIG1h
c2spID09IDApICYmICgob2xkICYgfm1hc2spID09IH5tYXNrKTsKICAgIH0KICB3aGlsZSAoISBz
bXBfY2FzKCZfc3RhdGUsIG9sZCwgKG9sZCAmIG1hc2spIHwgYml0cykpOwoKICByZXR1cm4gcmV0
Owp9CiMgMzk1ICJhdXRvL2NvbnRleHQuaCIKaW5saW5lIGJvb2wKQ29udGV4dDo6c3RhdGVfY2hh
bmdlX3NhZmVseSh1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBiaXRzKQp7CiAgYm9vbCByZXQ7CiAg
dW5zaWduZWQgb2xkOwogIGRvCiAgICB7CiAgICAgIG9sZCA9IF9zdGF0ZTsKICAgICAgcmV0ID0g
KChvbGQgJiBiaXRzICYgbWFzaykgPT0gMCkgJiYgKChvbGQgJiB+bWFzaykgPT0gfm1hc2spOwog
ICAgICBpZiAoISByZXQpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIHdoaWxlICghIHNt
cF9jYXMoJl9zdGF0ZSwgb2xkLCAob2xkICYgbWFzaykgfCBiaXRzKSk7CgogIHJldHVybiB0cnVl
Owp9CiMgNDIxICJhdXRvL2NvbnRleHQuaCIKaW5saW5lIHZvaWQKQ29udGV4dDo6c3RhdGVfY2hh
bmdlX2RpcnR5KHVuc2lnbmVkIG1hc2ssIHVuc2lnbmVkIGJpdHMpCnsKICBfc3RhdGUgJj0gbWFz
azsKICBfc3RhdGUgfD0gYml0czsKfQoKCgoKCgoKaW5saW5lIFNwYWNlX2NvbnRleHQgKgpDb250
ZXh0OjpzcGFjZV9jb250ZXh0KCkgY29uc3QKewogIHJldHVybiBfc3BhY2VfY29udGV4dDsKfQoK
CgoKCgppbmxpbmUgVGhyZWFkX2xvY2sgKgpDb250ZXh0Ojp0aHJlYWRfbG9jaygpCnsKICByZXR1
cm4gX3RocmVhZF9sb2NrOwp9CgoKCgoKCmlubGluZSBzY2hlZF90ICoKQ29udGV4dDo6c2NoZWQo
KQp7CiAgcmV0dXJuICZfc2NoZWQ7Cn0KCgoKCgoKaW5saW5lIFJldHVybl9mcmFtZSAqQ29udGV4
dDo6cmVncygpIGNvbnN0CnsKICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXR1cm5fZnJhbWUg
Kj4KICAgIChyZWludGVycHJldF9jYXN0PE13b3JkPih0aGlzKSArIHNpemUgLSBzaXplb2YoUmV0
dXJuX2ZyYW1lKSk7Cn0KCgoKCgppbmxpbmUgdm9pZApDb250ZXh0OjppbmNfbG9ja19jbnQoKQp7
CiAgX2xvY2tfY250ICsrOwp9CgoKCgoKCmlubGluZSB2b2lkCkNvbnRleHQ6OmRlY19sb2NrX2Nu
dCgpCnsKICBfbG9ja19jbnQtLTsKfQoKCgoKCgppbmxpbmUgaW50CkNvbnRleHQ6OmxvY2tfY250
KCkKewogIHJldHVybiBfbG9ja19jbnQ7Cn0KCgoKCmlubGluZSB2b2lkCkNvbnRleHQ6OnRpbWVy
X3RpY2soKQp7CiAgaWYgKCFDb25maWc6OmZpbmVfZ3JhaW5lZF9jcHV0aW1lKQogICAgY3VycmVu
dCgpLT5zY2hlZCgpLT51cGRhdGVfY3B1dGltZSgpOwoKICBpZiAoLS10aW1lc2xpY2VfdGlja3Nf
bGVmdCA8PSAwKQogICAgY3VycmVudCgpLT5zY2hlZHVsZSgpOwp9CgoKCgoKCmlubGluZSBib29s
CkNvbnRleHQ6OmluX3JlYWR5X2xpc3QoKQp7CiAgcmV0dXJuIHJlYWR5X25leHQ7Cn0KCgoKCgpp
bmxpbmUgdm9pZApDb250ZXh0OjpyZWFkeV9lbnF1ZXVlKCkKewogIExvY2tfZ3VhcmQgPENwdV9s
b2NrPiBndWFyZCAoJmNwdV9sb2NrKTsKCiAgQ29udGV4dCAqc2libGluZyA9IDA7CiAgdW5zaWdu
ZWQgaTsKCiAgaWYgKCEgaW5fcmVhZHlfbGlzdCgpKQogICAgewogICAgICBpZiAoISBwcmlvX2Zp
cnN0W3NjaGVkKCktPnByaW8oKV0pCiAgICAgICAgcHJpb19maXJzdFtzY2hlZCgpLT5wcmlvKCld
ID0gdGhpczsKICAgICAgaWYgKCEgcHJpb19uZXh0W3NjaGVkKCktPnByaW8oKV0pCiAgICAgICAg
cHJpb19uZXh0W3NjaGVkKCktPnByaW8oKV0gPSB0aGlzOwoKICAgICAgaWYgKHNjaGVkKCktPnBy
aW8oKSA+IHByaW9faGlnaGVzdCkKICAgICAgICBwcmlvX2hpZ2hlc3QgPSBzY2hlZCgpLT5wcmlv
KCk7CgoKCiAgICAgIGkgPSBzY2hlZCgpLT5wcmlvKCk7CiAgICAgIGRvCiAgICAgICAgewogICAg
ICAgICAgaWYgKCsraSA9PSAyNTYpIGkgPSAwOwogICAgICAgICAgc2libGluZyA9IHByaW9fZmly
c3RbaV07CiAgICAgICAgfQogICAgICB3aGlsZSAoISBzaWJsaW5nKTsKCiAgICAgICgodm9pZCkg
KCghIGluX3JlYWR5X2xpc3QoKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIhIGluX3JlYWR5X2xp
c3QoKSIsICJhdXRvL2NvbnRleHQuaCIsIDU2MSwgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsK
CiAgICAgIHJlYWR5X25leHQgPSBzaWJsaW5nOwogICAgICByZWFkeV9wcmV2ID0gc2libGluZy0+
cmVhZHlfcHJldjsKICAgICAgc2libGluZy0+cmVhZHlfcHJldiA9IHRoaXM7CiAgICAgIHJlYWR5
X3ByZXYtPnJlYWR5X25leHQgPSB0aGlzOwoKICAgICAgKCh2b2lkKSAoKHJlYWR5X3ByZXYtPnNj
aGVkKCktPnByaW8oKSA8PSBzY2hlZCgpLT5wcmlvKCkgfHwgc2NoZWQoKS0+cHJpbygpID09IDAp
ID8gMCA6IChfX2Fzc2VydF9mYWlsICgicmVhZHlfcHJldi0+c2NoZWQoKS0+cHJpbygpIDw9IHNj
aGVkKCktPnByaW8oKSB8fCBzY2hlZCgpLT5wcmlvKCkgPT0gMCIsICJhdXRvL2NvbnRleHQuaCIs
IDU2OSwgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsKCiAgICB9Cgp9CgoKCgoKaW5saW5lIHZv
aWQKQ29udGV4dDo6cmVhZHlfZGVxdWV1ZSgpCnsKICBMb2NrX2d1YXJkIDxDcHVfbG9jaz4gZ3Vh
cmQgKCZjcHVfbG9jayk7CgogIGlmIChpbl9yZWFkeV9saXN0KCkpCiAgICB7CiAgICAgIGlmIChw
cmlvX2ZpcnN0W3NjaGVkKCktPnByaW8oKV0gPT0gdGhpcykKICAgICAgICBwcmlvX2ZpcnN0W3Nj
aGVkKCktPnByaW8oKV0gPSByZWFkeV9uZXh0LT5zY2hlZCgpLT5wcmlvKCkgPT0gc2NoZWQoKS0+
cHJpbygpID8gcmVhZHlfbmV4dCA6IDA7CiAgICAgIGlmIChwcmlvX25leHRbc2NoZWQoKS0+cHJp
bygpXSA9PSB0aGlzKQogICAgICAgIHByaW9fbmV4dFtzY2hlZCgpLT5wcmlvKCldID0gcmVhZHlf
bmV4dC0+c2NoZWQoKS0+cHJpbygpID09IHNjaGVkKCktPnByaW8oKSA/CiAgICAgICAgICByZWFk
eV9uZXh0IDogcHJpb19maXJzdFtzY2hlZCgpLT5wcmlvKCldOwoKICAgICAgaWYgKHByaW9fZmly
c3Rbc2NoZWQoKS0+cHJpbygpXSA9PSAwICYmIHNjaGVkKCktPnByaW8oKSA9PSBwcmlvX2hpZ2hl
c3QpCiAgICAgICAgewogICAgICAgICAgKCh2b2lkKSAoKHJlYWR5X25leHQtPnNjaGVkKCktPnBy
aW8oKSA8IHNjaGVkKCktPnByaW8oKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJyZWFkeV9uZXh0
LT5zY2hlZCgpLT5wcmlvKCkgPCBzY2hlZCgpLT5wcmlvKCkiLCAiYXV0by9jb250ZXh0LmgiLCA1
OTMsICgoY29uc3QgY2hhciAqKSAwKSksIDApKSk7CiAgICAgICAgICBwcmlvX2hpZ2hlc3QgPSBy
ZWFkeV9wcmV2LT5zY2hlZCgpLT5wcmlvKCk7CiAgICAgICAgfQogICAgICByZWFkeV9wcmV2LT5y
ZWFkeV9uZXh0ID0gcmVhZHlfbmV4dDsKICAgICAgcmVhZHlfbmV4dC0+cmVhZHlfcHJldiA9IHJl
YWR5X3ByZXY7CiAgICAgIHJlYWR5X25leHQgPSAwOwoKICAgIH0KCn0KIyA2MTIgImF1dG8vY29u
dGV4dC5oIgppbmxpbmUgQ29udGV4dCAqCkNvbnRleHQ6OmdldF9uZXh0KCkKewogIHJldHVybiBf
c3RhY2tfbGluazsKfQoKCgoKCgppbmxpbmUgdm9pZApDb250ZXh0OjpzZXRfbmV4dChDb250ZXh0
ICpuZXh0KQp7CiAgX3N0YWNrX2xpbmsgPSBuZXh0Owp9CiMgNjM2ICJhdXRvL2NvbnRleHQuaCIK
aW5saW5lIENvbnRleHQqCkNvbnRleHQ6OmRvbmF0ZWUoKQp7CiAgcmV0dXJuIF9kb25hdGVlOwp9
CgoKCmlubGluZSB2b2lkCkNvbnRleHQ6OnNldF9kb25hdGVlKENvbnRleHQqIGRvbmF0ZWUpCnsK
ICBfZG9uYXRlZSA9IGRvbmF0ZWU7Cn0KCgoKaW5saW5lIHZvaWQKQ29udGV4dDo6c2V0X2tlcm5l
bF9zcChNd29yZCAqZXNwKQp7CiAga2VybmVsX3NwID0gZXNwOwp9CgoKCmlubGluZSBGcHVfc3Rh
dGUgKmNvbnN0IENvbnRleHQ6OmZwdV9zdGF0ZSgpCnsKICByZXR1cm4gJl9mcHVfc3RhdGU7Cn0K
CgoKCgoKaW5saW5lIHZvaWQgQ29udGV4dDo6aGFuZGxlX2ZwdV90cmFwKCkKewoKICBGcHU6OmVu
YWJsZSgpOwoKCiAgaWYgKEZwdTo6b3duZXIoKSkgewogICAgRnB1Ojpvd25lcigpLT5zdGF0ZV9j
aGFuZ2VfZGlydHkgKH5UaHJlYWRfZnB1X293bmVyLCAwKTsKICAgIEZwdTo6b3duZXIoKS0+ZnB1
X3N0YXRlKCktPnNhdmVfc3RhdGUoKTsKICB9CgoKICBpZiAoIWZwdV9zdGF0ZSgpLT5zdGF0ZV9i
dWZmZXIoKSkKICAgIGZwdV9zdGF0ZSgpLT5hbGxvY19zdGF0ZSgpOwoKCiAgc3RhdGVfY2hhbmdl
X2RpcnR5ICh+MCwgVGhyZWFkX2ZwdV9vd25lcik7CiAgZnB1X3N0YXRlKCktPnJlc3RvcmVfc3Rh
dGUoKTsKCiAgRnB1OjpzZXRfb3duZXIodGhpcyk7Cn0KIyA3ICJhdXRvL3JlY2VpdmVyLmgiIDIK
IyAxICJhdXRvL3RpbWVyLmgiIDEKIyAxMSAiYXV0by90aW1lci5oIgpjbGFzcyBDb250ZXh0OwoK
Y2xhc3MgVGltZXIKewpwdWJsaWM6CgoKCgoKCiAgc3RhdGljIHZvaWQgaW5pdCgpOwoKCgoKICBz
dGF0aWMgYm9vbCBpbml0X2RvbmU7CgoKCgoKCiAgc3RhdGljIHZvaWQgYWNrbm93bGVkZ2UoKTsK
CgoKCgoKICBzdGF0aWMgdm9pZCBlbmFibGUoKTsKCgoKCiAgc3RhdGljIHZvaWQgZGlzYWJsZSgp
Owp9OwoKY2xhc3MgdGltZW91dF90CnsKICBmcmllbmQgY2xhc3MgdGltZXI7CgogIHRpbWVvdXRf
dChjb25zdCB0aW1lb3V0X3QmKTsKCgogIHVuc2lnbmVkIGxvbmcgbG9uZyBfd2FrZXVwOwogIHRp
bWVvdXRfdCAqX25leHQsICpfcHJldjsKCiAgdW5pb24gewogICAgc3RydWN0IHsKICAgICAgYm9v
bCBzZXQgOiAxOwogICAgICBib29sIGhpdCA6IDE7CiAgICB9IF9mbGFnczsKICAgIHVuc2lnbmVk
IHNob3J0IF9mbGFnd29yZDsKICB9OwoKcHVibGljOgoKCgogIHRpbWVvdXRfdCgpOwoKICBib29s
IGlzX3NldCgpOwoKICBib29sIGhhc19oaXQoKTsKCiAgQ29udGV4dCAqIG93bmVyKCk7CgogIHZv
aWQgc2V0KHVuc2lnbmVkIGxvbmcgbG9uZyBhYnNfbWljcm9zZWMpOwoKICB2b2lkIHNldF9hZ2Fp
bigpOwoKICB2b2lkIHJlc2V0KCk7CgogIGxvbmcgbG9uZyBnZXRfdGltZW91dCgpOwoKcHJpdmF0
ZToKICB2b2lkIGVucXVldWUoKTsKCiAgYm9vbCBjaGVja19oaXQoKTsKfTsKCmNsYXNzIHRpbWVy
CnsKICBmcmllbmQgY2xhc3MgdGltZW91dF90OwoKCiAgdGltZXIoKTsKICB0aW1lcihjb25zdCB0
aW1lciYpOwoKCiAgc3RhdGljIHRpbWVvdXRfdCAqZmlyc3RfdGltZW91dDsKCnB1YmxpYzoKICBz
dGF0aWMgdm9pZCB1cGRhdGVfc3lzdGVtX2Nsb2NrKCk7Cgpwcml2YXRlOgogIHN0YXRpYyB2b2lk
IGRvX3RpbWVvdXRzKCk7Cn07CiMgMTM0ICJhdXRvL3RpbWVyLmgiCmlubGluZSB2b2lkIFRpbWVy
OjphY2tub3dsZWRnZSgpCnsKICBQaWM6OmRpc2FibGVfbG9ja2VkKDApOwogIFBpYzo6YWNrbm93
bGVkZ2VfbG9ja2VkKDApOwogIFBpYzo6ZW5hYmxlX2xvY2tlZCgwKTsKfQoKCgppbmxpbmUgdm9p
ZCBUaW1lcjo6ZW5hYmxlKCkKewogIFBpYzo6ZW5hYmxlKDApOwp9CgoKCmlubGluZSB2b2lkIFRp
bWVyOjpkaXNhYmxlKCkKewogIFBpYzo6ZGlzYWJsZSgwKTsKfQoKCgoKCgppbmxpbmUgdGltZW91
dF90Ojp0aW1lb3V0X3QoKQp7CiAgX2ZsYWd3b3JkID0gMDsKfQoKCgppbmxpbmUgYm9vbAp0aW1l
b3V0X3Q6OmlzX3NldCgpCnsKICByZXR1cm4gX2ZsYWdzLnNldDsKfQoKCgppbmxpbmUgYm9vbAp0
aW1lb3V0X3Q6Omhhc19oaXQoKQp7CiAgcmV0dXJuIF9mbGFncy5oaXQ7Cn0KCgoKaW5saW5lIENv
bnRleHQgKgp0aW1lb3V0X3Q6Om93bmVyKCkKewogIHJldHVybiBjb250ZXh0X29mICh0aGlzKTsK
fQoKCgppbmxpbmUgdm9pZAp0aW1lb3V0X3Q6OmVucXVldWUoKQp7CiAgX2ZsYWdzLnNldCA9IDE7
CiAgaWYgKCF0aW1lcjo6Zmlyc3RfdGltZW91dCkKICAgIHsKICAgICAgdGltZXI6OmZpcnN0X3Rp
bWVvdXQgPSB0aGlzOwogICAgICBfcHJldiA9IF9uZXh0ID0gMDsKICAgIH0KICBlbHNlCiAgICB7
CiAgICAgIHRpbWVvdXRfdCAqdGkgPSB0aW1lcjo6Zmlyc3RfdGltZW91dDsKCiAgICAgIGZvciAo
OzspCiAgICAgICAgewogICAgICAgICAgaWYgKHRpLT5fd2FrZXVwID49IF93YWtldXApCiAgICAg
ICAgICAgIHsKCiAgICAgICAgICAgICAgX25leHQgPSB0aTsKICAgICAgICAgICAgICBfcHJldiA9
IHRpLT5fcHJldjsKICAgICAgICAgICAgICB0aS0+X3ByZXYgPSB0aGlzOwogICAgICAgICAgICAg
IGlmIChfcHJldikKICAgICAgICAgICAgICAgIF9wcmV2LT5fbmV4dCA9IHRoaXM7CiAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGltZXI6OmZpcnN0X3RpbWVvdXQgPSB0aGlzOwoK
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoISB0aS0+
X25leHQpCiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgIHRpID0gdGktPl9uZXh0OwogICAg
ICAgIH0KCgogICAgICB0aS0+X25leHQgPSB0aGlzOwogICAgICBfcHJldiA9IHRpOwogICAgICBf
bmV4dCA9IDA7CiAgICB9Cn0KCgoKaW5saW5lIHZvaWQKdGltZW91dF90OjpzZXQodW5zaWduZWQg
bG9uZyBsb25nIGFic19taWNyb3NlYykKewoKICBMb2NrX2d1YXJkPENwdV9sb2NrPiBndWFyZCAo
JmNwdV9sb2NrKTsKCiAgKCh2b2lkKSAoKCEgaXNfc2V0KCkpID8gMCA6IChfX2Fzc2VydF9mYWls
ICgiISBpc19zZXQoKSIsICJhdXRvL3RpbWVyLmgiLCAyNDEsICgoY29uc3QgY2hhciAqKSAwKSks
IDApKSk7CiAgX3dha2V1cCA9IGFic19taWNyb3NlYzsKICBlbnF1ZXVlKCk7Cn0KCgoKaW5saW5l
IHZvaWQKdGltZW91dF90OjpzZXRfYWdhaW4oKQp7CgogIExvY2tfZ3VhcmQ8Q3B1X2xvY2s+IGd1
YXJkICgmY3B1X2xvY2spOwoKICAoKHZvaWQpICgoISBpc19zZXQoKSkgPyAwIDogKF9fYXNzZXJ0
X2ZhaWwgKCIhIGlzX3NldCgpIiwgImF1dG8vdGltZXIuaCIsIDI1NCwgKChjb25zdCBjaGFyICop
IDApKSwgMCkpKTsKICBpZiAoISBoYXNfaGl0KCkpCiAgICB7CiAgICAgIGVucXVldWUoKTsKICAg
IH0KfQoKCgppbmxpbmUgdm9pZAp0aW1lb3V0X3Q6OnJlc2V0KCkKewoKCiAgaWYgKCEgaXNfc2V0
KCkpCiAgICByZXR1cm47CgogIHsKICAgIExvY2tfZ3VhcmQ8Q3B1X2xvY2s+IGd1YXJkICgmY3B1
X2xvY2spOwoKICAgIGlmIChpc19zZXQoKSkKICAgICAgewogICAgICAgIGlmIChfcHJldikKICAg
ICAgICBfcHJldi0+X25leHQgPSBfbmV4dDsKICAgICAgICBlbHNlCiAgICAgICAgdGltZXI6OmZp
cnN0X3RpbWVvdXQgPSBfbmV4dDsKICAgICAgICBpZiAoX25leHQpCiAgICAgICAgX25leHQtPl9w
cmV2ID0gX3ByZXY7CiAgICAgIH0KCiAgICBfZmxhZ3Muc2V0ID0gMDsKCiAgfQp9CgoKCmlubGlu
ZSBsb25nIGxvbmcKdGltZW91dF90OjpnZXRfdGltZW91dCgpCnsKICByZXR1cm4gX3dha2V1cCAt
IGttZW06OmluZm8oKS0+Y2xvY2s7Cn0KCgoKaW5saW5lIGJvb2wKdGltZW91dF90OjpjaGVja19o
aXQoKQp7CgoKICBpZiAoa21lbTo6aW5mbygpLT5jbG9jayA8IF93YWtldXApCiAgICByZXR1cm4g
ZmFsc2U7CgogIHRpbWVyOjpmaXJzdF90aW1lb3V0ID0gX25leHQ7CiAgaWYgKF9uZXh0KSBfbmV4
dC0+X3ByZXYgPSAwOwogIF9mbGFncy5oaXQgPSAxOwogIF9mbGFncy5zZXQgPSAwOwogIG93bmVy
KCktPnN0YXRlX2NoYW5nZSh+VGhyZWFkX2lwY19pbl9wcm9ncmVzcywKICAgICAgICAgICAgICAg
ICAgICAgICAgVGhyZWFkX3J1bm5pbmcpOwoKCgoKICBvd25lcigpLT5yZWFkeV9lbnF1ZXVlKCk7
CgogIHJldHVybiB0cnVlOwp9CgoKCmlubGluZSB2b2lkCnRpbWVyOjpkb190aW1lb3V0cygpCnsK
ICB3aGlsZSAoZmlyc3RfdGltZW91dCkKICAgIHsKICAgICAgaWYgKCEgZmlyc3RfdGltZW91dC0+
Y2hlY2tfaGl0KCkpCiAgICAgICAgYnJlYWs7CiAgICB9Cn0KCgoKaW5saW5lIHZvaWQKdGltZXI6
OnVwZGF0ZV9zeXN0ZW1fY2xvY2soKQp7CiAga21lbTo6aW5mbygpLT5jbG9jayArPSBDb25maWc6
Om1pY3Jvc2VjX3Blcl90aWNrOwoKICBkb190aW1lb3V0cygpOwp9CiMgOCAiYXV0by9yZWNlaXZl
ci5oIiAyCgoKCgoKCmNsYXNzIFN5c19pcGNfZnJhbWU7CmNsYXNzIFNlbmRlcjsKY2xhc3MgVGhy
ZWFkOwojIDI2ICJhdXRvL3JlY2VpdmVyLmgiCmNsYXNzIFJlY2VpdmVyIDogcHVibGljIENvbnRl
eHQKewoKICBTZW5kZXIqIF9wYXJ0bmVyOwogIFN5c19pcGNfZnJhbWUgKl9yZWNlaXZlX3JlZ3M7
CiAgdm1fb2Zmc2V0X3QgX3BhZ2Vpbl9yZXF1ZXN0OwogIFRocmVhZCogX3BhZ2Vpbl9hcHBsaWNh
bnQ7CiAgU2VuZGVyKiBfc2VuZGVyX2ZpcnN0OwoKcHJvdGVjdGVkOgoKCgoKCiAgdGltZW91dF90
KiBfdGltZW91dDsKCnB1YmxpYzoKIyA1MiAiYXV0by9yZWNlaXZlci5oIgogIFN5c19pcGNfZnJh
bWUqIHJlY2VpdmVfcmVncygpIGNvbnN0OwojIDYzICJhdXRvL3JlY2VpdmVyLmgiCiAgdm9pZCBz
ZXRfcGFnZWluX3JlcXVlc3Qodm1fb2Zmc2V0X3QgYWRkcmVzcywgVGhyZWFkICpub3RpZnkpOwoK
CgoKCgoKICBib29sIHNlbmRlcl9vayhTZW5kZXIqIHNlbmRlcikgY29uc3Q7CgoKCgoKCiAgYm9v
bCBpbl9sb25nX2lwYyhTZW5kZXIqIHNlbmRlcikgY29uc3Q7CiMgODggImF1dG8vcmVjZWl2ZXIu
aCIKICBpbnQgaXBjX3RyeV9sb2NrKFNlbmRlciogc2VuZGVyKTsKCgogIHZvaWQgaXBjX3VubG9j
aygpOwoKCgoKICBTZW5kZXIqKiBzZW5kZXJfbGlzdCgpOwoKICB2b2lkIHJlc2V0X3JlY2VpdmVf
dGltZW91dCgpOwoKcHJvdGVjdGVkOgojIDEwOSAiYXV0by9yZWNlaXZlci5oIgogIFJlY2VpdmVy
KFRocmVhZF9sb2NrICp0aHJlYWRfbG9jaywgU3BhY2VfY29udGV4dCogc3BhY2VfY29udGV4dCk7
CgoKCgogIFNlbmRlciogcGFydG5lcigpIGNvbnN0OwoKCgoKCiAgdm9pZCByZXN0b3JlX3JlY2Vp
dmVyX3N0YXRlKFNlbmRlciogcGFydG5lciwgU3lzX2lwY19mcmFtZSogcmVncyk7CgoKCgoKICB2
b2lkIHNhdmVfcmVjZWl2ZXJfc3RhdGUoU2VuZGVyKiogb3V0X3BhcnRuZXIsIFN5c19pcGNfZnJh
bWUqKiBvdXRfcmVncyk7CgoKCiAgdm9pZCBjbGVhcl9wYWdlaW5fcmVxdWVzdCgpOwoKCgogIHZt
X29mZnNldF90IHBhZ2Vpbl9yZXF1ZXN0KCkgY29uc3Q7CgoKCgogIFRocmVhZCogcGFnZWluX2Fw
cGxpY2FudCgpOwojIDE0OSAiYXV0by9yZWNlaXZlci5oIgogIHVuc2lnbmVkIHNldHVwX3JlY2Vp
dmVyX3N0YXRlKFNlbmRlciogc2VuZGVyLCBTeXNfaXBjX2ZyYW1lKiByZWdzKTsKIyAxNjAgImF1
dG8vcmVjZWl2ZXIuaCIKICB2b2lkIHNldHVwX3JlY2VpdmVyKFNlbmRlciogc2VuZGVyLCBTeXNf
aXBjX2ZyYW1lKiByZWdzKTsKCiAgdm9pZCBzZXRfcmVjZWl2ZV90aW1lb3V0KHRpbWVvdXRfdCAq
dCk7Cgpwcml2YXRlOgoKICB2b2lkIHNldF9yZWNlaXZlX3JlZ3MoU3lzX2lwY19mcmFtZSogcmVn
cyk7CgogIHZvaWQgc2V0X3BhcnRuZXIoU2VuZGVyKiBwYXJ0bmVyKTsKfTsKIyAxODEgImF1dG8v
cmVjZWl2ZXIuaCIKIyAxICJhdXRvL3RocmVhZF9sb2NrLmgiIDEKCgoKCgoKCiMgMSAiLi4vc3Jj
L2xpYi9taW5pbGliYy9pbmNsdWRlL3BhbmljLmgiIDEKCgoKCgpleHRlcm4gIkMiIHsKCnZvaWQg
cGFuaWMgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy
bl9fKSk7Cgp9CiMgOSAiYXV0by90aHJlYWRfbG9jay5oIiAyCgoKCgoKCmVudW0gU3dpdGNoX2hp
bnQKewogIFNXSVRDSF9ET05UX0NBUkUgPSAwLAogIFNXSVRDSF9BQ1RJVkFURV9SRUNFSVZFUiwK
ICBTV0lUQ0hfQUNUSVZBVEVfU0VOREVSCn07CiMgMzEgImF1dG8vdGhyZWFkX2xvY2suaCIKY2xh
c3MgVGhyZWFkX2xvY2sKewpwcml2YXRlOgogIFN3aXRjaF9sb2NrIF9zd2l0Y2hfbG9jazsKICBT
d2l0Y2hfaGludCBfc3dpdGNoX2hpbnQ7CgpwdWJsaWM6CgoKCiAgdm9pZCBzZXRfc3dpdGNoX2hp
bnQoU3dpdGNoX2hpbnQgaGludCk7CgoKCgogIGJvb2wgdGVzdF9hbmRfc2V0KCk7CgoKCgoKICB2
b2lkIGxvY2soKTsKCgoKCgoKCiAgdm9pZCBjbGVhcigpOwoKCgoKICBDb250ZXh0ICogbG9ja19v
d25lcigpIGNvbnN0OwoKCgoKICBib29sIHRlc3QoKTsKCnByaXZhdGU6CgoKCiAgQ29udGV4dCog
Y29udGV4dCgpIGNvbnN0Owp9OwojIDk2ICJhdXRvL3RocmVhZF9sb2NrLmgiCmlubGluZSB2b2lk
ClRocmVhZF9sb2NrOjpzZXRfc3dpdGNoX2hpbnQoU3dpdGNoX2hpbnQgaGludCkKewogIF9zd2l0
Y2hfaGludCA9IGhpbnQ7Cn0KCgoKCgoKCmlubGluZSB2b2lkClRocmVhZF9sb2NrOjpsb2NrKCkK
ewogICgodm9pZCkgKCh0ZXN0X2FuZF9zZXQgKCkgPT0gZmFsc2UpID8gMCA6IChfX2Fzc2VydF9m
YWlsICgidGVzdF9hbmRfc2V0ICgpID09IGZhbHNlIiwgImF1dG8vdGhyZWFkX2xvY2suaCIsIDEx
MSwgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsKfQoKCgoKCgppbmxpbmUgQ29udGV4dCAqClRo
cmVhZF9sb2NrOjpsb2NrX293bmVyKCkgY29uc3QKewogIHJldHVybiBfc3dpdGNoX2xvY2subG9j
a19vd25lcigpOwp9CgoKCgoKCmlubGluZSBib29sClRocmVhZF9sb2NrOjp0ZXN0KCkKewogIHJl
dHVybiBfc3dpdGNoX2xvY2sudGVzdCgpOwp9CiMgMTgyICJhdXRvL3JlY2VpdmVyLmgiIDIKIyAy
MDEgImF1dG8vcmVjZWl2ZXIuaCIKaW5saW5lIFN5c19pcGNfZnJhbWUqClJlY2VpdmVyOjpyZWNl
aXZlX3JlZ3MoKSBjb25zdAp7CiAgKCh2b2lkKSAoKHN0YXRlICgpICYgVGhyZWFkX2lwY19yZWNl
aXZpbmdfbWFzaykgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJzdGF0ZSAoKSAmIFRocmVhZF9pcGNf
cmVjZWl2aW5nX21hc2siLCAiYXV0by9yZWNlaXZlci5oIiwgMjA0LCAoKGNvbnN0IGNoYXIgKikg
MCkpLCAwKSkpOwoKICByZXR1cm4gX3JlY2VpdmVfcmVnczsKfQojIDIyMCAiYXV0by9yZWNlaXZl
ci5oIgppbmxpbmUgdm9pZApSZWNlaXZlcjo6c2V0X3BhZ2Vpbl9yZXF1ZXN0KHZtX29mZnNldF90
IGFkZHJlc3MsIFRocmVhZCAqbm90aWZ5KQp7CiAgKCh2b2lkKSAoKGFkZHJlc3MgIT0gMHhmZmZm
ZmZmZikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJhZGRyZXNzICE9IDB4ZmZmZmZmZmYiLCAiYXV0
by9yZWNlaXZlci5oIiwgMjIzLCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwoKICBfcGFnZWlu
X3JlcXVlc3QgPSBhZGRyZXNzOwogIF9wYWdlaW5fYXBwbGljYW50ID0gbm90aWZ5OwoKICBzdGF0
ZV9jaGFuZ2UgKH5UaHJlYWRfYnVzeV9sb25nLCBUaHJlYWRfcnVubmluZyk7Cn0KCgoKCgoKaW5s
aW5lIFNlbmRlcioKUmVjZWl2ZXI6OnBhcnRuZXIoKSBjb25zdAp7CiAgcmV0dXJuIF9wYXJ0bmVy
Owp9CiMgMjUwICJhdXRvL3JlY2VpdmVyLmgiCmlubGluZSBib29sClJlY2VpdmVyOjpzZW5kZXJf
b2soU2VuZGVyKiBzZW5kZXIpIGNvbnN0CnsKICB1bnNpZ25lZCBpcGNfc3RhdGUgPSBzdGF0ZSgp
ICYgKFRocmVhZF9yZWNlaXZpbmd8VGhyZWFkX3dhaXRpbmcKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgVGhyZWFkX3NlbmRfaW5fcHJvZ3Jlc3MKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgVGhyZWFkX2lwY19pbl9wcm9ncmVzcyk7CgoKICBpZiAoIChfX2J1
aWx0aW5fZXhwZWN0KChpcGNfc3RhdGUgPT0gKFRocmVhZF93YWl0aW5nIHxUaHJlYWRfaXBjX2lu
X3Byb2dyZXNzKSksdHJ1ZSkpCiAgICAgIHx8IChfX2J1aWx0aW5fZXhwZWN0KCgoaXBjX3N0YXRl
ID09IChUaHJlYWRfcmVjZWl2aW5nfFRocmVhZF9pcGNfaW5fcHJvZ3Jlc3MpKSAmJiBwYXJ0bmVy
KCkgPT0gc2VuZGVyKSx0cnVlKSkKCiAgICAgICkKICAgIHsKICAgICAgcmV0dXJuIHRydWU7CiAg
ICB9CgogIHJldHVybiBmYWxzZTsKfQojIDI3NiAiYXV0by9yZWNlaXZlci5oIgppbmxpbmUgYm9v
bApSZWNlaXZlcjo6aW5fbG9uZ19pcGMoU2VuZGVyKiBzZW5kZXIpIGNvbnN0CnsKICBpZiAoKChz
dGF0ZSgpICYgKFRocmVhZF9yY3Zsb25nX2luX3Byb2dyZXNzfFRocmVhZF9pcGNfaW5fcHJvZ3Jl
c3MpKQogICAgICAgIT0gKFRocmVhZF9yY3Zsb25nX2luX3Byb2dyZXNzfFRocmVhZF9pcGNfaW5f
cHJvZ3Jlc3MpKQogICAgICB8fCBwYXJ0bmVyKCkgIT0gc2VuZGVyKQogICAgcmV0dXJuIGZhbHNl
OwoKICByZXR1cm4gdHJ1ZTsKfQoKCgppbmxpbmUgdm9pZApSZWNlaXZlcjo6c2V0X3BhcnRuZXIo
U2VuZGVyKiBwYXJ0bmVyKQp7CiAgX3BhcnRuZXIgPSBwYXJ0bmVyOwp9CgoKCgoKaW5saW5lIHZv
aWQKUmVjZWl2ZXI6OmNsZWFyX3BhZ2Vpbl9yZXF1ZXN0KCkKewogIF9wYWdlaW5fcmVxdWVzdCA9
IDB4ZmZmZmZmZmY7Cn0KIyAzMTYgImF1dG8vcmVjZWl2ZXIuaCIKaW5saW5lIGludApSZWNlaXZl
cjo6aXBjX3RyeV9sb2NrKFNlbmRlciogc2VuZGVyKQp7CiAgaWYgKF9fYnVpbHRpbl9leHBlY3Qo
KHN0YXRlICgpID09IFRocmVhZF9pbnZhbGlkKSxmYWxzZSkgKQogICAgcmV0dXJuIEw0X21zZ2Rv
cGU6OkVOT1RfRVhJU1RFTlQ7CgogIHRocmVhZF9sb2NrKCktPmxvY2soKTsKCiAgaWYgKF9fYnVp
bHRpbl9leHBlY3QoKCEgc2VuZGVyX29rIChzZW5kZXIpKSxmYWxzZSkgKQogICAgewogICAgICB0
aHJlYWRfbG9jaygpLT5jbGVhcigpOwogICAgICByZXR1cm4gLTE7CiAgICB9CgogIHNldF9wYXJ0
bmVyIChzZW5kZXIpOwogIHJlY2VpdmVfcmVncygpLT5yY3Zfc291cmNlKCBzZW5kZXItPmlkKCkg
KTsKICBjbGVhcl9wYWdlaW5fcmVxdWVzdCAoKTsKCiAgcmV0dXJuIDA7Cn0KCgoKCmlubGluZSB2
b2lkClJlY2VpdmVyOjppcGNfdW5sb2NrKCkKewogICgodm9pZCkgKCh0aHJlYWRfbG9jaygpLT5s
b2NrX293bmVyKCkgPT0gY3VycmVudCgpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInRocmVhZF9s
b2NrKCktPmxvY2tfb3duZXIoKSA9PSBjdXJyZW50KCkiLCAiYXV0by9yZWNlaXZlci5oIiwgMzQz
LCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwoKICB0aHJlYWRfbG9jaygpLT5jbGVhcigpOwp9
CgoKCgoKCmlubGluZSBTZW5kZXIqKgpSZWNlaXZlcjo6c2VuZGVyX2xpc3QoKQp7CiAgcmV0dXJu
ICZfc2VuZGVyX2ZpcnN0Owp9CgoKCmlubGluZSB2b2lkClJlY2VpdmVyOjpyZXNldF9yZWNlaXZl
X3RpbWVvdXQoKQp7CiAgaWYgKF90aW1lb3V0KQogICAgewogICAgICBfdGltZW91dC0+cmVzZXQo
KTsKICAgICAgX3RpbWVvdXQgPSAwOwogICAgfQp9CiMgMzgxICJhdXRvL3JlY2VpdmVyLmgiCmlu
bGluZSBSZWNlaXZlcjo6UmVjZWl2ZXIoVGhyZWFkX2xvY2sgKnRocmVhZF9sb2NrLAogICAgICAg
ICAgICAgICAgICAgU3BhY2VfY29udGV4dCogc3BhY2VfY29udGV4dCkKICA6IENvbnRleHQgKHRo
cmVhZF9sb2NrLCBzcGFjZV9jb250ZXh0KQp7fQoKCgoKaW5saW5lIHZvaWQKUmVjZWl2ZXI6OnNl
dF9yZWNlaXZlX3JlZ3MoU3lzX2lwY19mcmFtZSogcmVncykKewogIF9yZWNlaXZlX3JlZ3MgPSBy
ZWdzOwp9CgoKCgoKCgppbmxpbmUgdm9pZApSZWNlaXZlcjo6cmVzdG9yZV9yZWNlaXZlcl9zdGF0
ZShTZW5kZXIqIHBhcnRuZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXNf
aXBjX2ZyYW1lKiByZWdzKQp7CiAgc2V0X3BhcnRuZXIgKHBhcnRuZXIpOwogIHNldF9yZWNlaXZl
X3JlZ3MgKHJlZ3MpOwp9CgoKCgoKCgppbmxpbmUgdm9pZApSZWNlaXZlcjo6c2F2ZV9yZWNlaXZl
cl9zdGF0ZShTZW5kZXIqKiBvdXRfcGFydG5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN5c19pcGNfZnJhbWUqKiBvdXRfcmVncykKewogICpvdXRfcGFydG5lciA9IF9wYXJ0bmVy
OwogICpvdXRfcmVncyA9IF9yZWNlaXZlX3JlZ3M7Cn0KCgoKCgppbmxpbmUgdm1fb2Zmc2V0X3QK
UmVjZWl2ZXI6OnBhZ2Vpbl9yZXF1ZXN0KCkgY29uc3QKewogIHJldHVybiBfcGFnZWluX3JlcXVl
c3Q7Cn0KCgoKCgoKaW5saW5lIFRocmVhZCoKUmVjZWl2ZXI6OnBhZ2Vpbl9hcHBsaWNhbnQoKQp7
CiAgcmV0dXJuIF9wYWdlaW5fYXBwbGljYW50Owp9CiMgNDU0ICJhdXRvL3JlY2VpdmVyLmgiCmlu
bGluZSB1bnNpZ25lZApSZWNlaXZlcjo6c2V0dXBfcmVjZWl2ZXJfc3RhdGUoU2VuZGVyKiBzZW5k
ZXIsIFN5c19pcGNfZnJhbWUqIHJlZ3MpCnsKICBzZXRfcmVjZWl2ZV9yZWdzIChyZWdzKTsKCiAg
aWYgKHNlbmRlcikKICAgIHsKICAgICAgc2V0X3BhcnRuZXIgKHNlbmRlcik7CiAgICAgIHJldHVy
biBUaHJlYWRfcmVjZWl2aW5nOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgcmV0dXJuIFRocmVh
ZF93YWl0aW5nOwogICAgfQp9CiMgNDgxICJhdXRvL3JlY2VpdmVyLmgiCmlubGluZSB2b2lkClJl
Y2VpdmVyOjpzZXR1cF9yZWNlaXZlcihTZW5kZXIqIHNlbmRlciwgU3lzX2lwY19mcmFtZSogcmVn
cykKewogIHN0YXRlX2FkZCAoc2V0dXBfcmVjZWl2ZXJfc3RhdGUoc2VuZGVyLCByZWdzKSk7Cn0K
CgoKaW5saW5lIHZvaWQKUmVjZWl2ZXI6OnNldF9yZWNlaXZlX3RpbWVvdXQodGltZW91dF90ICp0
KQp7CiAgX3RpbWVvdXQgPSB0Owp9CiMgMTUgImF1dG8vdGhyZWFkLmgiIDIKCgoKCgoKCmNsYXNz
IHRpbWVvdXRfdDsKY2xhc3MgaXJxX3Q7CmNsYXNzIFJldHVybl9mcmFtZTsKY2xhc3MgU3lzY2Fs
bF9mcmFtZTsKY2xhc3MgRW50cnlfZnJhbWU7CmNsYXNzIFN5c19pcGNfZnJhbWU7CgpjbGFzcyB0
cmFwX3N0YXRlOwoKCgpjbGFzcyBUaHJlYWQgOiBwdWJsaWMgUmVjZWl2ZXIsIHB1YmxpYyBTZW5k
ZXIKewpwcml2YXRlOgogIFRocmVhZChjb25zdCBUaHJlYWQmKTsKICB2b2lkICpvcGVyYXRvciBu
ZXcoc2l6ZV90KTsKCnByb3RlY3RlZDoKCgoKCgogICAgICAgICAgICAgU3BhY2UqIF9zcGFjZTsK
ICAgICAgICAgICAgIFRocmVhZF9sb2NrIF90aHJlYWRfbG9jazsKCgogIFRocmVhZCAqX3BhZ2Vy
LCAqX3ByZWVtcHRlciwgKl9leHRfcHJlZW1wdGVyOwoKICBUaHJlYWQgKnByZXNlbnRfbmV4dCwg
KnByZXNlbnRfcHJldjsKICBpcnFfdCAqX2lycTsKCiAgeDg2X2dhdGUgKl9pZHQ7CiAgdW5zaWdu
ZWQgc2hvcnQgX2lkdF9saW1pdDsKCgogIEw0X3Jjdl9kZXNjIF90YXJnZXRfZGVzYzsKICB1bnNp
Z25lZCBfcGFnZWluX2Vycm9yX2NvZGU7CgogIHZtX29mZnNldF90IF92bV93aW5kb3cwLCBfdm1f
d2luZG93MTsKCiAgam1wX2J1ZiAqX3JlY292ZXJfam1wYnVmOwogIEw0X3RpbWVvdXQgX3BmX3Rp
bWVvdXQ7CgoKICB2bV9vZmZzZXRfdCBfbGFzdF9wZl9hZGRyZXNzOwogIHVuc2lnbmVkIF9sYXN0
X3BmX2Vycm9yX2NvZGU7CgogIHVuc2lnbmVkIF9tYWdpYzsKICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbWFnaWMgPSAweGYwMDFjMDAxOwoKICBzdGF0aWMgaW50ICgqbmVzdGVkX3RyYXBfaGFuZGxl
cikodHJhcF9zdGF0ZSAqc3RhdGUpOwoKCiAgVGhyZWFkIChTcGFjZSogc3BhY2UsIEw0X3VpZCBp
ZCk7CgpwdWJsaWM6CgoKICBUaHJlYWQgKFNwYWNlKiBzcGFjZSwgTDRfdWlkIGlkLAogICAgICAg
ICAgaW50IGluaXRfcHJpbywgdW5zaWduZWQgc2hvcnQgbWNwKTsKCiAgTXdvcmQgc3lzX2lwYyAo
U3lzY2FsbF9mcmFtZSAqcmVncyk7CiAgTXdvcmQgc3lzX2lkX25lYXJlc3QgKFN5c2NhbGxfZnJh
bWUgKnJlZ3MpOwogIE13b3JkIHN5c19mcGFnZV91bm1hcCAoU3lzY2FsbF9mcmFtZSAqcmVncyk7
CiAgTXdvcmQgc3lzX3RocmVhZF9zd2l0Y2ggKFN5c2NhbGxfZnJhbWUgKnJlZ3MpOwogIE13b3Jk
IHN5c190aHJlYWRfc2NoZWR1bGUgKFN5c2NhbGxfZnJhbWUgKnJlZ3MpOwogIE13b3JkIHN5c190
aHJlYWRfZXhfcmVncyAoU3lzY2FsbF9mcmFtZSAqcmVncyk7CiAgTXdvcmQgc3lzX3Rhc2tfbmV3
IChTeXNjYWxsX2ZyYW1lICpyZWdzKTsKcHJpdmF0ZToKCnByaXZhdGU6CiAgYm9vbCBpcGNfc2hv
cnRfY3V0KCBTeXNfaXBjX2ZyYW1lKikgYXNtICgiY2FsbF9pcGNfc2hvcnRfY3V0Iik7CnByaXZh
dGU6Cgpwcm90ZWN0ZWQ6CiAgZnJpZW5kIGNsYXNzIGpkYjsKICBmcmllbmQgY2xhc3MgamRiX3Ro
cmVhZF9saXN0OwoKcHVibGljOgoKCgoKCgogIHZvaWQgKiBvcGVyYXRvciBuZXcoc2l6ZV90LCB0
aHJlYWRpZF90IGlkKTsKCgoKCiAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqKTsKIyAxMjIg
ImF1dG8vdGhyZWFkLmgiCiAgdmlydHVhbCB+VGhyZWFkKCk7CgoKCgoKICBzdGF0aWMgVGhyZWFk
KiBsb29rdXAoQ29udGV4dCogYyk7CiMgMTM4ICJhdXRvL3RocmVhZC5oIgogIFNwYWNlX2luZGV4
IHNwYWNlX2luZGV4KCkgY29uc3Q7CgoKCgoKICBTcGFjZV9pbmRleCBjaGllZl9pbmRleCgpIGNv
bnN0OwoKCgoKICBTcGFjZSAqIHNwYWNlKCkgY29uc3Q7CgoKCgoKCiAgVGhyZWFkX2xvY2sgKiB0
aHJlYWRfbG9jaygpOwojIDE3MyAiYXV0by90aHJlYWQuaCIKICBib29sIGluaXRpYWxpemUodm1f
b2Zmc2V0X3QgZWlwLCB2bV9vZmZzZXRfdCBlc3AsIFRocmVhZCogcGFnZXIsIFRocmVhZCogcHJl
ZW1wdGVyLCB2bV9vZmZzZXRfdCAqb19laXAgPSAwLCB2bV9vZmZzZXRfdCAqb19lc3AgPSAwLCBU
aHJlYWQqICpvX3BhZ2VyID0gMCwgVGhyZWFkKiAqb19wcmVlbXB0ZXIgPSAwLCB2bV9vZmZzZXRf
dCAqb19lZmxhZ3MgPSAwKTsKIyAxODcgImF1dG8vdGhyZWFkLmgiCiAgYm9vbCBzZXRfc2NoZWRf
cGFyYW0oTDRfc2NoZWRfcGFyYW0gcGFyYW0sIFRocmVhZCogZXh0X3ByZWVtcHRlciwgTDRfc2No
ZWRfcGFyYW0gKm9fcGFyYW0sIFVuc2lnbmVkNjQgKnRpbWUsIFRocmVhZCAqKm9fZXh0X3ByZWVt
cHRlciwgU2VuZGVyICoqaXBjcGFydG5lcik7CiMgMTk4ICJhdXRvL3RocmVhZC5oIgogIGJvb2wg
cmFpc2VfZXhjZXB0aW9uKHRyYXBfc3RhdGUgKnRzLCB2bV9vZmZzZXRfdCBoYW5kbGVyKTsKIyAy
MDggImF1dG8vdGhyZWFkLmgiCiAgYm9vbCBraWxsX3Rhc2soU3BhY2VfaW5kZXggc3VidGFzayk7
CgoKCgogIHVuc2lnbmVkIG5lc3QoKSBjb25zdDsKIyAyMjMgImF1dG8vdGhyZWFkLmgiCiAgdmly
dHVhbCB2b2lkIGlwY19yZWNlaXZlcl9yZWFkeSgpOwojIDIzMyAiYXV0by90aHJlYWQuaCIKICBM
NF9tc2dkb3BlIGlwY19jb250aW51ZShMNF9tc2dkb3BlIGlwY19jb2RlKTsKCiAgYm9vbCBoYW5k
bGVfc2xvd190cmFwKHRyYXBfc3RhdGUgKnRzKTsKIyAyNTAgImF1dG8vdGhyZWFkLmgiCiAgYm9v
bCBoYW5kbGVfcGFnZV9mYXVsdCh2bV9vZmZzZXRfdCBwZmEsIHVuc2lnbmVkIGVycm9yX2NvZGUs
IHVuc2lnbmVkIGVpcCk7CgogIHZvaWQgc3lzY2FsbF9sb2coU3lzY2FsbF9mcmFtZSAqICwgdW5z
aWduZWQgbnVtYmVyLAogIGJvb2wgZW50ZXIsIHVuc2lnbmVkIHJldHZhbCk7CgoKCgoKCiAgTXdv
cmQgc3lzX2lwY19sb2coU3lzY2FsbF9mcmFtZSAqaV9yZWdzKTsKCgoKCiAgdW5zaWduZWQgc3lz
X2lwY190cmFjZShTeXNjYWxsX2ZyYW1lICppX3JlZ3MpOwoKCiAgdW5zaWduZWQgc3lzX2ZwYWdl
X3VubWFwX2xvZyhTeXNjYWxsX2ZyYW1lICpyZWdzKTsKCnByb3RlY3RlZDoKIyAyODIgImF1dG8v
dGhyZWFkLmgiCiAgdm9pZCBzZXR1cF9pcGNfd2luZG93KHVuc2lnbmVkIHdpbiwgdm1fb2Zmc2V0
X3QgYWRkcmVzcyk7CgoKCgogIGJvb2wgaW5fcHJlc2VudF9saXN0KCk7CgoKCgoKICB2b2lkIHBy
ZXNlbnRfZW5xdWV1ZShUaHJlYWQgKnNpYmxpbmcpOwoKCgoKICB2b2lkIHByZXNlbnRfZGVxdWV1
ZSgpOwoKCgoKICBzdGF0aWMgdm9pZCB1c2VyX2ludm9rZSgpOwoKcHJpdmF0ZToKCgoKCgoKICBi
b29sIGtpbGwoKTsKIyAzMjMgImF1dG8vdGhyZWFkLmgiCiAgTXdvcmQgaXBjX3NlbmRfcmVncyhU
aHJlYWQqIHJlY2VpdmVyLCBTeXNfaXBjX2ZyYW1lIGNvbnN0ICpzZW5kZXJfcmVncyk7CiMgMzMy
ICJhdXRvL3RocmVhZC5oIgogIEw0X21zZ2RvcGUgZG9fc2VuZChUaHJlYWQgKnBhcnRuZXIsIEw0
X3RpbWVvdXQgdCwgU3lzX2lwY19mcmFtZSAqcmVncyk7CiMgMzQxICJhdXRvL3RocmVhZC5oIgog
IHZvaWQgcHJlcGFyZV9yZWNlaXZlKFNlbmRlciAqcGFydG5lciwgU3lzX2lwY19mcmFtZSAqcmVn
cyk7CiMgMzUzICJhdXRvL3RocmVhZC5oIgogIEw0X21zZ2RvcGUgZG9fcmVjZWl2ZShTZW5kZXIg
KnNlbmRlciwgTDRfdGltZW91dCB0LCBTeXNfaXBjX2ZyYW1lICpyZWdzKTsKCgoKCgoKCiAgTDRf
bXNnZG9wZSBoYW5kbGVfcGFnZV9mYXVsdF9wYWdlcih2bV9vZmZzZXRfdCBwZmEsIHVuc2lnbmVk
IGVycm9yX2NvZGUpOwojIDM3MCAiYXV0by90aHJlYWQuaCIKICBMNF9tc2dkb3BlIGhhbmRsZV9p
cGNfcGFnZV9mYXVsdCh2bV9vZmZzZXRfdCBwZmEpOwojIDM4MiAiYXV0by90aHJlYWQuaCIKICBM
NF9tc2dkb3BlIGlwY19zZW5kX2ZwYWdlKFRocmVhZCogcmVjZWl2ZXIsIEw0X2ZwYWdlIGZyb21f
ZnBhZ2UsIEw0X2ZwYWdlIHRvX2ZwYWdlLCB2bV9vZmZzZXRfdCBvZmZzZXQsIGJvb2wgZmluaXNo
KTsKCgoKCgoKICBMNF9tc2dkb3BlIGlwY19maW5pc2goVGhyZWFkKiByZWNlaXZlciwgTDRfbXNn
ZG9wZSBuZXdfc3RhdGUpOwojIDM5OSAiYXV0by90aHJlYWQuaCIKICBMNF9tc2dkb3BlIGlwY19w
YWdlaW5fcmVxdWVzdChSZWNlaXZlciogcmVjZWl2ZXIsIHZtX29mZnNldF90IGFkZHJlc3MpOwoj
IDQxNCAiYXV0by90aHJlYWQuaCIKICBib29sIGdldF9pb3BvcnQodm1fb2Zmc2V0X3QgZWlwLCB0
cmFwX3N0YXRlICogdHMsIHVuc2lnbmVkICogcG9ydCwgdW5zaWduZWQgKiBzaXplKTsKIyA0Mjkg
ImF1dG8vdGhyZWFkLmgiCiAgTDRfbXNnZG9wZSBkb19zZW5kX2xvbmcoVGhyZWFkICpwYXJ0bmVy
LAogIFN5c19pcGNfZnJhbWUgKmlfcmVncyk7CgogIHN0YXRpYyB2b2lkIGhvb2tfaXBjX3ZlY3Rv
cigpOwoKICBzdGF0aWMgdm9pZCByZXN0b3JlX2lwY192ZWN0b3IoKTsKCgoKCiAgdm9pZCBwYWdl
X2ZhdWx0X2xvZyh2bV9vZmZzZXRfdCBwZmEsIHVuc2lnbmVkIGVycm9yX2NvZGUsIHVuc2lnbmVk
IGVpcCk7CgogIHN0YXRpYyB2b2lkIGhvb2tfdW5tYXBfdmVjdG9yKCk7CgogIHN0YXRpYyB2b2lk
IHJlc3RvcmVfdW5tYXBfdmVjdG9yKCk7Cn07CgpleHRlcm4gdW5zaWduZWQgKFRocmVhZDo6KnN5
c2NhbGxfdGFibGVbXSkoU3lzY2FsbF9mcmFtZSAqcmVncyk7CgpleHRlcm4gYm9vbCBsb2dfaXBj
OwpleHRlcm4gYm9vbCBsb2dfaXBjX3RvX2J1ZjsKZXh0ZXJuIGJvb2wgbG9nX2lwY19yZXN1bHQ7
CmV4dGVybiBib29sIGxvZ19wYWdlX2ZhdWx0OwpleHRlcm4gYm9vbCBsb2dfcGZfdG9fYnVmOwpl
eHRlcm4gYm9vbCBsb2dfdW5tYXA7CmV4dGVybiBib29sIGxvZ191bm1hcF90b19idWY7CmV4dGVy
biBib29sIHRyYWNlX2lwYzsKZXh0ZXJuIGJvb2wgc2xvd19pcGM7CgoKCgpUaHJlYWQqIGN1cnJl
bnRfdGhyZWFkKCk7CiMgNDcwICJhdXRvL3RocmVhZC5oIgpleHRlcm4gIkMiIGludCB0aHJlYWRf
aGFuZGxlX3RyYXAodHJhcF9zdGF0ZSAqc3RhdGUpOwoKZXh0ZXJuICJDIiB2b2lkIHRocmVhZF90
aW1lcl9pbnRlcnJ1cHQodm9pZCk7CgoKCgpleHRlcm4gIkMiIE13b3JkIGRpc3BhdGNoX3N5c2Nh
bGwoVGhyZWFkICp0LCBFbnRyeV9mcmFtZSAqcmVncywgdW5zaWduZWQgaW50IG51bWJlcik7Cgp2
b2lkIHRocmVhZF90aW1lcl9pbnRlcnJ1cHRfYXJjaCh2b2lkKTsKCgoKZXh0ZXJuICJDIiB2b2lk
IHRocmVhZF90aW1lcl9pbnRlcnJ1cHRfc3RvcCh2b2lkKTsKCgoKCgpleHRlcm4gIkMiIHZvaWQg
dGhyZWFkX3RpbWVyX2ludGVycnVwdF9zbG93KHZvaWQpOwojIDUwMCAiYXV0by90aHJlYWQuaCIK
ZXh0ZXJuICJDIiBpbnQgdGhyZWFkX3BhZ2VfZmF1bHQoY29uc3Qgdm1fb2Zmc2V0X3QgcGZhLCBj
b25zdCB1bnNpZ25lZCBlcnJvcl9jb2RlLCBjb25zdCB1bnNpZ25lZCAsCmNvbnN0IHVuc2lnbmVk
ICwKY29uc3QgdW5zaWduZWQgLApjb25zdCB1bnNpZ25lZCAsCmNvbnN0IHVuc2lnbmVkIGVpcCwg
Y29uc3QgdW5zaWduZWQgLApjb25zdCB1bnNpZ25lZCBlZmxhZ3MpOwoKZXh0ZXJuICJDIiB2b2lk
IHRocmVhZF9zeXNjYWxsX2xvZ19iZWdpbihUaHJlYWQgKnQsIFN5c2NhbGxfZnJhbWUgKnJlZ3Ms
IHVuc2lnbmVkIG51bWJlcik7CgpleHRlcm4gIkMiIHZvaWQgdGhyZWFkX3N5c2NhbGxfbG9nX2Vu
ZCh1bnNpZ25lZCByZXR2YWwsIFRocmVhZCAqdCwgU3lzY2FsbF9mcmFtZSAqcmVncywgdW5zaWdu
ZWQgbnVtYmVyKTsKIyA1MTggImF1dG8vdGhyZWFkLmgiCiMgMSAiLi4vc3JjL2tlcm4vaWEzMi9s
b2dkZWZzLmgiIDEKCgoKCgojIDEgImF1dG8vamRiX3RidWYuaCIgMQoKCgoKCgojIDEgImF1dG8v
amRiX2t0cmFjZS5oIiAxCiMgMTUgImF1dG8vamRiX2t0cmFjZS5oIgplbnVtIHsKICBMT0dfRVZF
TlRfTUFYX0VWRU5UUyA9IDE2LAp9OwoKc3RydWN0IGw0X3RyYWNlYnVmZmVyX3N0YXR1c190CnsK
ICBVbnNpZ25lZDMyIHRyYWNlYnVmZmVyMDsKICBVbnNpZ25lZDMyIHNpemUwOwogIFVuc2lnbmVk
MzIgdmVyc2lvbjA7CiAgVW5zaWduZWQzMiB0cmFjZWJ1ZmZlcjE7CiAgVW5zaWduZWQzMiBzaXpl
MTsKICBVbnNpZ25lZDMyIHZlcnNpb24xOwogIFVuc2lnbmVkMzIgbG9nZXZlbnRzW0xPR19FVkVO
VF9NQVhfRVZFTlRTXTsKfTsKCmVudW0gewogIExPR19FVkVOVF9DT05URVhUX1NXSVRDSCA9IDAs
CiAgTE9HX0VWRU5UX0lQQ19TSE9SVENVVCA9IDEsCiAgTE9HX0VWRU5UX0lSUV9SQUlTRUQgPSAy
LAogIExPR19FVkVOVF9USU1FUl9JUlEgPSAzLAogIExPR19FVkVOVF9USFJFQURfRVhfUkVHUyA9
IDQsCn07CiMgOCAiYXV0by9qZGJfdGJ1Zi5oIiAyCgoKCgoKCmNsYXNzIExvZ19ldmVudDsKY2xh
c3MgQ29udGV4dDsKIyAzMyAiYXV0by9qZGJfdGJ1Zi5oIgpjbGFzcyBqZGJfdGJ1Zgp7CnB1Ymxp
YzoKICB0eXBlZGVmIHN0cnVjdCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQogICAgewogICAgICB1
bnNpZ25lZCBudW1iZXI7CiAgICAgIHVuc2lnbmVkIGVpcDsKICAgICAgQ29udGV4dCAqY3VycmVu
dDsKICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHRzYzsKICAgICAgdW5zaWduZWQgbG9uZyBsb25n
IHBtYzsKICAgICAgdW5pb24gX19hdHRyaWJ1dGVfXygocGFja2VkKSkKICAgICAgICB7CiAgICAg
ICAgICBzdHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkKICAgICAgICAgICAgewoKICAgICAg
ICAgICAgICB1bnNpZ25lZCBlYXgsIGVkeCwgZWJ4LCBlYnA7CiAgICAgICAgICAgICAgVW5zaWdu
ZWQ2NCBkZXN0OwogICAgICAgICAgICB9IGlwYzsKICAgICAgICAgIHN0cnVjdCBfX2F0dHJpYnV0
ZV9fKChwYWNrZWQpKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIHVuc2lnbmVkIGVheCwg
ZWR4LCBlYng7CiAgICAgICAgICAgICAgdW5zaWduZWQgb3JpZ19lYnA7CiAgICAgICAgICAgICAg
VW5zaWduZWQ2NCBzcmM7CiAgICAgICAgICAgICAgdW5zaWduZWQgcmVmX2V2ZW50OwogICAgICAg
ICAgICAgIGNoYXIgaGF2ZV9zZW5kOwogICAgICAgICAgICB9IGlwY19yZXM7CiAgICAgICAgICBz
dHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkKICAgICAgICAgICAgewoKICAgICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgc2VuZF90c2M7CiAgICAgICAgICAgICAgVW5zaWduZWQ2NCBz
ZW5kX2VzaV9lZGk7CiAgICAgICAgICAgICAgVW5zaWduZWQ2NCByZWN2X2VzaV9lZGk7CiAgICAg
ICAgICAgICAgTXdvcmQgZG9wZTsKICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHNlbmRfZGVz
YywgcmVjdl9kZXNjOwogICAgICAgICAgICB9IGlwY190cmFjZTsKICAgICAgICAgIHN0cnVjdCBf
X2F0dHJpYnV0ZV9fKChwYWNrZWQpKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIHVuc2ln
bmVkIHBmYTsKICAgICAgICAgICAgICB1bnNpZ25lZCBlcnI7CiAgICAgICAgICAgIH0gcGY7CiAg
ICAgICAgICBzdHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkKICAgICAgICAgICAgewoKICAg
ICAgICAgICAgICBjaGFyIG1zZ1szNV07CiAgICAgICAgICAgIH0ga2U7CiAgICAgICAgICBzdHJ1
Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICB1
bnNpZ25lZCBlYXgsIGVkeCwgZWN4OwogICAgICAgICAgICAgIGNoYXIgbXNnWzIzXTsKICAgICAg
ICAgICAgfSBrZV9yZWc7CiAgICAgICAgICBzdHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkK
ICAgICAgICAgICAgewoKICAgICAgICAgICAgICBNd29yZCBmcGFnZTsKICAgICAgICAgICAgICB1
bnNpZ25lZCBtYXNrOwogICAgICAgICAgICAgIGJvb2wgcmVzdWx0OwogICAgICAgICAgICB9IHVu
bWFwOwogICAgICAgICAgc3RydWN0IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCiAgICAgICAgICAg
IHsKCiAgICAgICAgICAgICAgdW5zaWduZWQgbHRocmVhZDsKICAgICAgICAgICAgICB1bnNpZ25l
ZCBvbGRfZXNwOwogICAgICAgICAgICAgIHVuc2lnbmVkIG5ld19lc3A7CiAgICAgICAgICAgICAg
dW5zaWduZWQgb2xkX2VpcDsKICAgICAgICAgICAgICB1bnNpZ25lZCBuZXdfZWlwOwogICAgICAg
ICAgICB9IGV4X3JlZ3M7CiAgICAgICAgICBzdHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkK
ICAgICAgICAgICAgewoKICAgICAgICAgICAgICB1bnNpZ25lZCBhZGRyOwogICAgICAgICAgICAg
IHVuc2lnbmVkIGxlbjsKICAgICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZTsKICAgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyIG1vZGU7CiAgICAgICAgICAgIH0gYnA7CiAgICAgICAgICBzdHJ1Y3Qg
X19hdHRyaWJ1dGVfXygocGFja2VkKSkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICB1bnNp
Z25lZCBlYXgsIGVicCwgZWN4OwogICAgICAgICAgICAgIFVuc2lnbmVkNjQgZGVzdDsKICAgICAg
ICAgICAgICBjaGFyIGlzX2lycSwgc25kX2xzdCwgZHN0X29rLCBkc3RfbGNrOwogICAgICAgICAg
ICB9IGlwY19zZmw7CiAgICAgICAgICBzdHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkKICAg
ICAgICAgICAgewoKICAgICAgICAgICAgICBDb250ZXh0ICpkZXN0OwogICAgICAgICAgICAgIHVu
c2lnbmVkIGtlcm5lbF9laXA7CiAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqa2VybmVsX3Nw
OwogICAgICAgICAgICB9IGN0eF9zdzsKICAgICAgICB9IG07CiAgICAgIGNoYXIgdHlwZTsKICAg
IH0gVGJfZW50cnk7CgoKICBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSkg
KCppbml0X3BtYykodW5zaWduZWQgZXZlbnQsIGludCB1c2VyLCBpbnQga2VybmVsKTsKCiAgc3Rh
dGljIHZvaWQgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpICgqcmVhZF9wbWMpKFRiX2VudHJ5
ICp0YmUpOwoKICBzdGF0aWMgTG9nX2V2ZW50ICogY29uc3QgbG9nX2V2ZW50c1tdOwoKcHJpdmF0
ZToKICBzdGF0aWMgVGJfZW50cnkgKnRidWY7CiAgc3RhdGljIFRiX2VudHJ5ICp0YnVmX2FjdDsK
ICBzdGF0aWMgbDRfdHJhY2VidWZmZXJfc3RhdHVzX3QgKnN0YXR1czsKICBzdGF0aWMgdW5zaWdu
ZWQgZW50cmllczsKICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyOwoKICBzdGF0aWMgaW50IHBlcmZf
dXNlcjsKICBzdGF0aWMgaW50IHBlcmZfa2VybmVsOwogIHN0YXRpYyB1bnNpZ25lZCBwZXJmX2V2
ZW50OwoKICBzdGF0aWMgY29uc3QgY2hhciAqcGVyZl90eXBlOwogIHN0YXRpYyBpbnQgaGF2ZV90
c2M7CgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkIGluaXQodm9pZCk7CgogIHN0YXRpYyBpbnQgZ2V0
X2hhdmVfdHNjKCk7CgogIHN0YXRpYyBjb25zdCBjaGFyKiBnZXRfcGVyZl90eXBlKCk7CgoKICBz
dGF0aWMgaW50IGdldF9wZXJmX21vZGUoY29uc3QgY2hhciAqKnR5cGUsIGNvbnN0IGNoYXIgKipt
b2RlLCB1bnNpZ25lZCAqZXZlbnQsIGludCAqdXNlciwgaW50ICprZXJuZWwpOwoKCiAgc3RhdGlj
IHZvaWQgaW5pdF9wZXJmKHVuc2lnbmVkIGV2ZW50LCBpbnQgdXNlciwgaW50IGtlcm5lbCk7CgoK
ICBzdGF0aWMgdm9pZCBjbGVhcl90YnVmKCk7CgoKICBzdGF0aWMgamRiX3RidWY6OlRiX2VudHJ5
KiBuZXdfZW50cnkoKTsKCgogIHN0YXRpYyB2b2lkIGNvbW1pdF9lbnRyeSgpOwoKCiAgc3RhdGlj
IGludCBnZXRfZW50cmllcygpOwoKCiAgc3RhdGljIGludCBnZXRfdGhyZWFkX2VpcChpbnQgZV9u
ciwgTDRfdWlkICp0aWQsIHVuc2lnbmVkICplaXApOwoKICBzdGF0aWMgaW50IGdldF9ldmVudChp
bnQgZV9uciwgdW5zaWduZWQgKm51bWJlciwgdW5zaWduZWQgbG9uZyBsb25nICp0c2MsIHVuc2ln
bmVkIGxvbmcgbG9uZyAqcG1jKTsKCiAgc3RhdGljIHVuc2lnbmVkIGdldF9yZWZfZXZlbnQoaW50
IGVfbnIsIGNoYXIgKnR5cGUpOwoKICBzdGF0aWMgaW50IGdldF9kaWZmX3RzYyhpbnQgZV9uciwg
dW5zaWduZWQgbG9uZyBsb25nICpkZWx0YSk7CgogIHN0YXRpYyBpbnQgZ2V0X2RpZmZfcG1jKGlu
dCBlX25yLCB1bnNpZ25lZCBsb25nIGxvbmcgKmRlbHRhKTsKCiAgc3RhdGljIHZvaWQgcHJpbnRf
ZW50cnkoaW50IGVfbnIsIGNoYXIgKmJ1ZiwgaW50IG1heGxlbik7CgogIHN0YXRpYyB2b2lkIHBy
aW50X2VudHJ5KFRiX2VudHJ5ICplLCBjaGFyICpidWYsIGludCBtYXhsZW4pOwoKcHJpdmF0ZToK
ICBzdGF0aWMgaW50IGV2ZW50X3ZhbGlkKHVuc2lnbmVkIGVfbnIpOwoKICBzdGF0aWMgamRiX3Ri
dWY6OlRiX2VudHJ5KiBsb29rdXAoaW50IGVfbnIpOwoKICBzdGF0aWMgdm9pZCBteV9zbnByaW50
ZihjaGFyICoqYnVmLCBpbnQgKm1heGxlbiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwp9OwoK
Y2xhc3MgbG9nX3BhdGNoX3QKewpwdWJsaWM6CiAgbG9nX3BhdGNoX3QgKm5leHQ7Cgpwcml2YXRl
OgogIHR5cGVkZWYgdW5zaWduZWQgY2hhciBsb2dfcGF0Y2hfY29kZV90WzVdOwogIGxvZ19wYXRj
aF9jb2RlX3QgKm9yaWdfY29kZTsKICBsb2dfcGF0Y2hfY29kZV90IHNhdmVfY29kZTsKCnB1Ymxp
YzoKICBleHBsaWNpdCBsb2dfcGF0Y2hfdCh2b2lkICpjb2RlKTsKCiAgdm9pZCBlbmFibGUoYm9v
bCBlbmFibGUpOwoKICBib29sIGVuYWJsZWQodm9pZCk7Cn07CgpjbGFzcyBMb2dfZXZlbnQKewog
IGNvbnN0IGNoYXIgKmV2ZW50X25hbWU7CiAgbG9nX3BhdGNoX3QgKnBhdGNoOwogIGludCBldmVu
dF90eXBlOwoKcHVibGljOgogIGV4cGxpY2l0IExvZ19ldmVudChjb25zdCBjaGFyICpuYW1lLCBp
bnQgdHlwZSwgaW50IGNvdW50LCBsb2dfcGF0Y2hfdCAqbHAsIC4uLik7CgoKICB2b2lkIGVuYWJs
ZShib29sIGVuYWJsZSk7CgoKICBib29sIGVuYWJsZWQodm9pZCk7CgoKICBjb25zdCBjaGFyKiBn
ZXRfbmFtZSh2b2lkKTsKCgogIGludCBnZXRfdHlwZSh2b2lkKTsKfTsKIyAyOTAgImF1dG8vamRi
X3RidWYuaCIKaW5saW5lIGludApqZGJfdGJ1Zjo6Z2V0X2hhdmVfdHNjKCkKewogIHJldHVybiBo
YXZlX3RzYzsKfQoKCgppbmxpbmUgY29uc3QgY2hhcioKamRiX3RidWY6OmdldF9wZXJmX3R5cGUo
KQp7CiAgcmV0dXJuIHBlcmZfdHlwZTsKfQoKCgoKaW5saW5lIGludApqZGJfdGJ1Zjo6Z2V0X2Vu
dHJpZXMoKQp7CiAgcmV0dXJuIGVudHJpZXM7Cn0KCgoKCmlubGluZSBjb25zdCBjaGFyKgpMb2df
ZXZlbnQ6OmdldF9uYW1lKHZvaWQpCnsKICByZXR1cm4gZXZlbnRfbmFtZTsKfQoKCgoKaW5saW5l
IGludApMb2dfZXZlbnQ6OmdldF90eXBlKHZvaWQpCnsKICByZXR1cm4gZXZlbnRfdHlwZTsKfQoj
IDcgIi4uL3NyYy9rZXJuL2lhMzIvbG9nZGVmcy5oIiAyCiMgNTE5ICJhdXRvL3RocmVhZC5oIiAy
CiMgNTM0ICJhdXRvL3RocmVhZC5oIgppbmxpbmUgdm9pZCAqClRocmVhZDo6b3BlcmF0b3IgbmV3
KHNpemVfdCwgdGhyZWFkaWRfdCBpZCkKewoKCgogIHJldHVybiBzdGF0aWNfY2FzdDx2b2lkKj4o
aWQubG9va3VwKCkpOwp9CgoKCgoKCgppbmxpbmUgVGhyZWFkKgpUaHJlYWQ6Omxvb2t1cChDb250
ZXh0KiBjKQp7CiAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VGhyZWFkKj4oYyk7Cn0KIyA1NjQg
ImF1dG8vdGhyZWFkLmgiCmlubGluZSBTcGFjZV9pbmRleCBUaHJlYWQ6OnNwYWNlX2luZGV4KCkg
Y29uc3QKeyByZXR1cm4gU3BhY2VfaW5kZXgoaWQoKS50YXNrKCkpOyB9CgoKCgoKCmlubGluZSBT
cGFjZV9pbmRleCBUaHJlYWQ6OmNoaWVmX2luZGV4KCkgY29uc3QKeyByZXR1cm4gU3BhY2VfaW5k
ZXgoaWQoKS5jaGllZigpKTsgfQoKCgoKCgoKaW5saW5lIFNwYWNlICoKVGhyZWFkOjpzcGFjZSgp
IGNvbnN0CnsKICByZXR1cm4gX3NwYWNlOwp9CiMgNTk0ICJhdXRvL3RocmVhZC5oIgppbmxpbmUg
VGhyZWFkX2xvY2sgKgpUaHJlYWQ6OnRocmVhZF9sb2NrKCkKewogIHJldHVybiAmX3RocmVhZF9s
b2NrOwp9CgoKCgoKCmlubGluZSB1bnNpZ25lZCBUaHJlYWQ6Om5lc3QoKSBjb25zdAp7IHJldHVy
biBpZCgpLm5lc3QoKTsgfQojIDYyMSAiYXV0by90aHJlYWQuaCIKaW5saW5lIHZvaWQKVGhyZWFk
OjpzZXR1cF9pcGNfd2luZG93KHVuc2lnbmVkIHdpbiwgdm1fb2Zmc2V0X3QgYWRkcmVzcykKewog
IGlmICh3aW4gPT0gMCkKICAgIHsKICAgICAgaWYgKF92bV93aW5kb3cwICE9IGFkZHJlc3MpCiAg
ICAgICAgewogICAgICAgICAgX3ZtX3dpbmRvdzAgPSBhZGRyZXNzOwogICAgICAgICAga21lbTo6
dGxiX2ZsdXNoKCk7CiAgICAgICAgfQogICAgfQogIGVsc2UKICAgIHsKICAgICAgaWYgKF92bV93
aW5kb3cxICE9IGFkZHJlc3MpCiAgICAgICAgewogICAgICAgICAgX3ZtX3dpbmRvdzEgPSBhZGRy
ZXNzOwogICAgICAgICAga21lbTo6dGxiX2ZsdXNoKCk7CiAgICAgICAgfQogICAgfQp9CgoKCgoK
CmlubGluZSBib29sClRocmVhZDo6aW5fcHJlc2VudF9saXN0KCkKewogIHJldHVybiBwcmVzZW50
X25leHQ7Cn0KCgoKCgoKCmlubGluZSB2b2lkClRocmVhZDo6cHJlc2VudF9lbnF1ZXVlKFRocmVh
ZCAqc2libGluZykKewogIExvY2tfZ3VhcmQ8Q3B1X2xvY2s+IGd1YXJkICgmY3B1X2xvY2spOwoK
ICBpZiAoISBpbl9wcmVzZW50X2xpc3QoKSkKICAgIHsKICAgICAgcHJlc2VudF9uZXh0ID0gc2li
bGluZy0+cHJlc2VudF9uZXh0OwogICAgICBwcmVzZW50X3ByZXYgPSBzaWJsaW5nOwogICAgICBz
aWJsaW5nLT5wcmVzZW50X25leHQgPSB0aGlzOwogICAgICBwcmVzZW50X25leHQtPnByZXNlbnRf
cHJldiA9IHRoaXM7CiAgICB9Cn0KCgoKCgoKaW5saW5lIHZvaWQKVGhyZWFkOjpwcmVzZW50X2Rl
cXVldWUoKQp7CiAgTG9ja19ndWFyZDxDcHVfbG9jaz4gZ3VhcmQgKCZjcHVfbG9jayk7CgogIGlm
IChpbl9wcmVzZW50X2xpc3QoKSkKICAgIHsKICAgICAgcHJlc2VudF9wcmV2LT5wcmVzZW50X25l
eHQgPSBwcmVzZW50X25leHQ7CiAgICAgIHByZXNlbnRfbmV4dC0+cHJlc2VudF9wcmV2ID0gcHJl
c2VudF9wcmV2OwogICAgICBwcmVzZW50X25leHQgPSAwOwogICAgfQp9CgoKCgoKCmlubGluZSBU
aHJlYWQqCmN1cnJlbnRfdGhyZWFkKCkKewogIHJldHVybiBUaHJlYWQ6Omxvb2t1cChjdXJyZW50
ICgpKTsKfQoKCgppbmxpbmUgdm9pZCB0aHJlYWRfdGltZXJfaW50ZXJydXB0X2FyY2godm9pZCkK
ewoKCgogIGlmIChDb25maWc6OnNjaGVkdWxpbmdfdXNpbmdfcGl0KQogICAgICBkbyB7IGFzbSB2
b2xhdGlsZSAoIi5nbG9ibCAgIiJsb2dfdGltZXJfaXJxIiIJCQlcblx0IiAiLmdsb2JsICBwYXRj
aF8iImxvZ190aW1lcl9pcnEiIgkJXG5cdCIgInBhdGNoXyIibG9nX3RpbWVyX2lycSIiOgkJCVxu
XHQiICJqbXAgICAgICIibG9nX3RpbWVyX2lycSIiCQkJXG5cdCIgIjE6CQkJCQlcblx0IiAiLnRl
eHQgICAxCQkJCVxuXHQiICIiImxvZ190aW1lcl9pcnEiIjoJCQkJXG5cdCIpOyB7IGpkYl90YnVm
OjpUYl9lbnRyeSAqdGJlID0gamRiX3RidWY6Om5ld19lbnRyeSgpOyB0YmUtPnR5cGUgPSAyOyB0
YmUtPmN1cnJlbnQgPSBjdXJyZW50KCk7IHRiZS0+ZWlwID0gdGJlLT5jdXJyZW50LT5yZWdzKCkt
PmVpcDsgdGJlLT5tLmlwYy5lYXggPSB0YmUtPm0uaXBjLmVicCA9IDA7IHRiZS0+bS5pcGMuZGVz
dCA9IDAgKyAxOyBqZGJfdGJ1Zjo6Y29tbWl0X2VudHJ5KCk7IH0gYXNtIHZvbGF0aWxlICgiam1w
ICAgICAxYgkJCQlcblx0IiAiLnByZXZpb3VzCQkJCVxuXHQiIDogOiA6ICJlYXgiLCJlYngiLCJl
Y3giLCJlZHgiLCJlc2kiLCAiZWRpIiwibWVtb3J5Iik7IH0gd2hpbGUgKDApOwogIGVsc2UKICAg
ICAgZG8geyBhc20gdm9sYXRpbGUgKCIuZ2xvYmwgICIibG9nX3RpbWVyX2lycSIiCQkJXG5cdCIg
Ii5nbG9ibCAgcGF0Y2hfIiJsb2dfdGltZXJfaXJxIiIJCVxuXHQiICJwYXRjaF8iImxvZ190aW1l
cl9pcnEiIjoJCQlcblx0IiAiam1wICAgICAiImxvZ190aW1lcl9pcnEiIgkJCVxuXHQiICIxOgkJ
CQkJXG5cdCIgIi50ZXh0ICAgMQkJCQlcblx0IiAiIiJsb2dfdGltZXJfaXJxIiI6CQkJCVxuXHQi
KTsgeyBqZGJfdGJ1Zjo6VGJfZW50cnkgKnRiZSA9IGpkYl90YnVmOjpuZXdfZW50cnkoKTsgdGJl
LT50eXBlID0gMjsgdGJlLT5jdXJyZW50ID0gY3VycmVudCgpOyB0YmUtPmVpcCA9IHRiZS0+Y3Vy
cmVudC0+cmVncygpLT5laXA7IHRiZS0+bS5pcGMuZWF4ID0gdGJlLT5tLmlwYy5lYnAgPSAwOyB0
YmUtPm0uaXBjLmRlc3QgPSA4ICsgMTsgamRiX3RidWY6OmNvbW1pdF9lbnRyeSgpOyB9IGFzbSB2
b2xhdGlsZSAoImptcCAgICAgMWIJCQkJXG5cdCIgIi5wcmV2aW91cwkJCQlcblx0IiA6IDogOiAi
ZWF4IiwiZWJ4IiwiZWN4IiwiZWR4IiwiZXNpIiwgImVkaSIsIm1lbW9yeSIpOyB9IHdoaWxlICgw
KTsKCiAgVGltZXI6OmFja25vd2xlZGdlKCk7CgoKCgp9CiMgMTggImF1dG8vcHJvZmlsZV9pLmgi
IDIKCiMgMSAiYXV0by9waXQuaCIgMQojIDEwICJhdXRvL3BpdC5oIgpjbGFzcyBQaXQKewpwdWJs
aWM6CiAgc3RhdGljIHZvaWQgaW5pdCggdW5zaWduZWQgcmF0ZSApOwogIHN0YXRpYyB2b2lkIGRv
bmUoKTsKICBzdGF0aWMgdm9pZCBzZXRfZnJlcV9zbG93KCk7CiAgICBzdGF0aWMgdm9pZCBzZXRf
ZnJlcV9ub3JtYWwoKTsKfTsKIyAzNiAiYXV0by9waXQuaCIKaW5saW5lIHZvaWQgUGl0Ojppbml0
KCB1bnNpZ25lZCByYXRlICkKewoKICBJbzo6b3V0OF9wKDB4MzQsIDB4NDMpOwoKCiAgdW5zaWdu
ZWQgdCA9IDExOTMxODAgLyByYXRlOwogIElvOjpvdXQ4X3AodCAmIDB4ZmYsMHg0MCk7CiAgSW86
Om91dDhfcCgodCA+PiA4KSAmIDB4ZmYsMHg0MCk7CgoKICBQaWM6OmVuYWJsZSgwKTsKCn0KCgoK
aW5saW5lIHZvaWQgUGl0OjpzZXRfZnJlcV9zbG93KCkKewoKICBJbzo6b3V0OF9wKDB4MzQsIDB4
NDMpOwoKCiAgdW5zaWduZWQgdCA9IDU5NjU5OwogIElvOjpvdXQ4X3AodCAmIDB4ZmYsMHg0MCk7
CiAgSW86Om91dDhfcCgodCA+PiA4KSAmIDB4ZmYsMHg0MCk7Cn0KCgoKaW5saW5lIHZvaWQgUGl0
OjpzZXRfZnJlcV9ub3JtYWwoKQp7CgogIElvOjpvdXQ4X3AoMHgzNCwweDQzKTsKCgogIHVuc2ln
bmVkIHQgPSAxMTkzMTgwIC8gMTAwMDsKICBJbzo6b3V0OF9wKHQgJiAweGZmLDB4NDApOwogIElv
OjpvdXQ4X3AoKHQgPj4gOCkgJiAweGZmLDB4NDApOwp9CiMgMjAgImF1dG8vcHJvZmlsZV9pLmgi
IDIKIyA1ICJhdXRvL3Byb2ZpbGUuY2MiIDIKIyAzMyAiLi4vc3JjL2tlcm4vaWEzMi9wcm9maWxl
LmNwcCIKc3RhdGljIHZvaWQKZHVtcF9pZl9hY3RpdmUoKTsKIyAyNyAiLi4vc3JjL2tlcm4vaWEz
Mi9wcm9maWxlLmNwcCIKCnVuc2lnbmVkIGxvbmcgcHJvZmlsZTo6dGlja3MgPSAwOwojIDI5ICIu
Li9zcmMva2Vybi9pYTMyL3Byb2ZpbGUuY3BwIgpib29sIHByb2ZpbGU6OmV4aXQgPSBmYWxzZTsK
IyAzMCAiLi4vc3JjL2tlcm4vaWEzMi9wcm9maWxlLmNwcCIKCnN0YXRpYyBib29sIHByb2ZpbGVf
YWN0aXZlID0gZmFsc2U7CiMgMzIgIi4uL3NyYy9rZXJuL2lhMzIvcHJvZmlsZS5jcHAiCgpzdGF0
aWMgdm9pZApkdW1wX2lmX2FjdGl2ZSgpCnsKICBpZiAocHJvZmlsZV9hY3RpdmUpCiAgICBfbWNs
ZWFudXAoKTsKfQojIDM5ICIuLi9zcmMva2Vybi9pYTMyL3Byb2ZpbGUuY3BwIgoKCgoKCgp2b2lk
CnByb2ZpbGU6OmluaXQoKQp7CiAgYXRleGl0KGR1bXBfaWZfYWN0aXZlKTsKCgoKCgoKfQojIDU2
ICIuLi9zcmMva2Vybi9pYTMyL3Byb2ZpbGUuY3BwIgoKCnZvaWQKcHJvZmlsZTo6c3RhcnQoKQp7
CiAgaWYgKCEgcHJvZmlsZV9hY3RpdmUpCiAgICB7CiAgICAgIG1vbnN0YXJ0dXAoJl9zdGFydCwg
Jl9lbmQsIENvbmZpZzo6cHJvZmlsaW5nX3JhdGUpOwogICAgICBwcm9maWxlX2FjdGl2ZSA9IHRy
dWU7CgogICAgICBQaXQ6OmluaXQoQ29uZmlnOjpwcm9maWxpbmdfcmF0ZSk7CiAgICAgIFBpYzo6
ZW5hYmxlKENvbmZpZzo6cHJvZmlsZV9pcnEpOwogICAgfQp9CiMgNzAgIi4uL3NyYy9rZXJuL2lh
MzIvcHJvZmlsZS5jcHAiCgoKdm9pZApwcm9maWxlOjpzdG9wKCkKewogIGlmIChwcm9maWxlX2Fj
dGl2ZSkKICAgIHsKICAgICAgUGljOjpkaXNhYmxlKENvbmZpZzo6cHJvZmlsZV9pcnEpOwoKICAg
ICAgbW9uY29udHJvbCgwKTsKICAgICAgcHJvZmlsZV9hY3RpdmUgPSBmYWxzZTsKICAgIH0KfQoj
IDgzICIuLi9zcmMva2Vybi9pYTMyL3Byb2ZpbGUuY3BwIgoKCnZvaWQKcHJvZmlsZTo6c3RvcF9h
bmRfZHVtcCgpCnsKICBpZiAocHJvZmlsZV9hY3RpdmUpCiAgICB7CiAgICAgIFBpYzo6ZGlzYWJs
ZShDb25maWc6OnByb2ZpbGVfaXJxKTsKCiAgICAgIF9tY2xlYW51cCgpOwogICAgICBwcm9maWxl
X2FjdGl2ZSA9IGZhbHNlOwogICAgfQp9CiMgOTYgIi4uL3NyYy9rZXJuL2lhMzIvcHJvZmlsZS5j
cHAiCiMgMTA3ICIuLi9zcmMva2Vybi9pYTMyL3Byb2ZpbGUuY3BwIgoKCgppbmxpbmUgdm9pZApw
cm9maWxlOjpoYW5kbGVfcHJvZmlsZV9pbnRlcnJ1cHQodm1fb2Zmc2V0X3QgcGMpCnsKCgogIFBp
Yzo6ZGlzYWJsZV9sb2NrZWQoQ29uZmlnOjpwcm9maWxlX2lycSk7CiAgUGljOjphY2tub3dsZWRn
ZV9sb2NrZWQoQ29uZmlnOjpwcm9maWxlX2lycSk7CiAgUGljOjplbmFibGVfbG9ja2VkKENvbmZp
Zzo6cHJvZmlsZV9pcnEpOwoKICB0aWNrcysrOwoKICB2bV9zaXplX3QgaTsKCiAgaWYgKCEgcHJf
c2NhbGUpCiAgICByZXR1cm47CgogIGlmIChwYyA8IHByX29mZgogICAgICB8fCAoaSA9ICgodm1f
b2Zmc2V0X3QpKCgodW5zaWduZWQgbG9uZyBsb25nKSgocGMpIC0gKHByX29mZikpICogKHVuc2ln
bmVkIGxvbmcgbG9uZykoKHByX3NjYWxlKSkpID4+IDE2KSAmIH4xKSkgPj0gcHJfc2l6ZSkKICAg
IHJldHVybjsKCiAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihwcl9iYXNlICsg
aSkgKz0gMTsKCiAgaWYgKGV4aXQpCiAgICA6OmV4aXQoMCk7Cn0KIyAxMzUgIi4uL3NyYy9rZXJu
L2lhMzIvcHJvZmlsZS5jcHAiCgpleHRlcm4gIkMiIHZvaWQKcHJvZmlsZV9pbnRlcnJ1cHQodm1f
b2Zmc2V0X3QgcGMpCnsKICBwcm9maWxlOjpoYW5kbGVfcHJvZmlsZV9pbnRlcnJ1cHQocGMpOwp9
CiMgMTQxICIuLi9zcmMva2Vybi9pYTMyL3Byb2ZpbGUuY3BwIgoKZXh0ZXJuICJDIgp2b2lkIHBy
b2ZpbGVfbWNvdW50X3dyYXAodW5zaWduZWQgc2hvcnQgKmZyb21wY2luZGV4LCBjaGFyICpzZWxm
cGMgKQp7CgoKICBzdGF0aWMgYm9vbCBvdmVycnVuID0gZmFsc2U7CiAgaWYgKCEgb3ZlcnJ1bikK
ICAgIHsKICAgICAgdm1fb2Zmc2V0X3Qgc3A7CiAgICAgIGFzbSgibW92bCAlJWVzcCwgJTAiIDog
Ij1yIiAoc3ApKTsKICAgICAgaWYgKChzcCAmIDB4ZjgwMDAwMDApID09IGttZW06Om1lbV90Y2Jz
CiAgICAgICAgICAmJiAoKHZtX29mZnNldF90KWN1cnJlbnQoKSkgKyBzaXplb2YoVGhyZWFkKSAr
IDB4MjAgPiBzcCkKICAgICAgICB7CiAgICAgICAgICBvdmVycnVuID0gdHJ1ZTsKICAgICAgICAg
IHBhbmljKCJzdGFjayBvdmVycnVuOiBjdXJyZW50PTB4JXgsIGVzcD0weCV4IiwKICAgICAgICAg
ICAgICAgICh2bV9vZmZzZXRfdCljdXJyZW50KCksIHNwKTsKICAgICAgICB9CiAgICB9CgogIF9f
bWNvdW50X2ludGVybmFsIChmcm9tcGNpbmRleCwgc2VsZnBjKTsKfQojIDE2MyAiLi4vc3JjL2tl
cm4vaWEzMi9wcm9maWxlLmNwcCIKIyAxNzQgIi4uL3NyYy9rZXJuL2lhMzIvcHJvZmlsZS5jcHAi
CiMgMTc1ICIuLi9zcmMva2Vybi9pYTMyL3Byb2ZpbGUuY3BwIgoKYXNtKCIucDJhbGlnbiAiICIy
IiAiOyAuZ2xvYmwgbWNvdW50OyBtY291bnQ6IgogICAgInB1c2hsICVlYXgJCQlcblx0IgogICAg
InB1c2hsICVlY3gJCQlcblx0IgogICAgInB1c2hsICVlZHgJCQlcblx0IgoKICAgICJtb3ZsIDEy
KCVlc3ApLCAlZWF4CVxuXHQiCiAgICAibW92bCA0KCVlYnApLCAlZWN4CQlcblx0IgogICAgInB1
c2hsICVlYXgJCQlcblx0IgogICAgInB1c2hsICVlY3gJCQlcblx0IgoKICAgICJjYWxsICIgInBy
b2ZpbGVfbWNvdW50X3dyYXAiICJcblx0IgogICAgImFkZGwgJDgsJWVzcAkJXG5cdCIKCiAgICAi
cG9wbCAlZWR4CQkJXG5cdCIKICAgICJwb3BsICVlY3gJCQlcblx0IgogICAgInBvcGwgJWVheAkJ
CVxuXHQiCiAgICAicmV0Iik7Cg==


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