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]

c++/6982: outlined code in text section


>Number:         6982
>Category:       c++
>Synopsis:       outlined code in text section
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Mon Jun 10 05:16:02 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     ro@suse.de
>Release:        gcc version 3.1.1 20020603 (prerelease) (SuSE Linux)
>Organization:
>Environment:
i386/SuSE Linux
>Description:
outlined version of string::assign generated into text section instead of
linkonce section causing linker failure (multiple definition of ...)
>How-To-Repeat:
g++ Map.ii -O2 -c
nm -C Map.o | grep assign

output:
000024c0 T std::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign(char const*, unsigned)
         U std::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="Map.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Map.ii"

IyAxICJNYXAuY3BwIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMgMSAi
TWFwLmNwcCIKIyAxOSAiTWFwLmNwcCIKIyAxICIvdXNyL2luY2x1ZGUvZysrL2lvc3RyZWFtIiAx
IDMKIyA0MyAiL3Vzci9pbmNsdWRlL2crKy9pb3N0cmVhbSIgMwoKIyAxICIvdXNyL2luY2x1ZGUv
ZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL3Vzci9pbmNs
dWRlL2crKy9pNDg2LXN1c2UtbGludXgvYml0cy9jKytjb25maWcuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvb3NfZGVmaW5lcy5oIiAxIDMKIyAzOSAiL3Vz
ci9pbmNsdWRlL2crKy9pNDg2LXN1c2UtbGludXgvYml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjgzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMzEzICIvdXNyL2luY2x1ZGUvZmVhdHVy
ZXMuaCIgMiAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvb3Nf
ZGVmaW5lcy5oIiAyIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy9pNDg2LXN1c2UtbGludXgvYml0
cy9jKytjb25maWcuaCIgMiAzCiMgNDUgIi91c3IvaW5jbHVkZS9nKysvaW9zdHJlYW0iIDIgMwoj
IDEgIi91c3IvaW5jbHVkZS9nKysvb3N0cmVhbSIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9nKysv
b3N0cmVhbSIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2lvcyIgMSAzCiMgNDMgIi91c3IvaW5j
bHVkZS9nKysvaW9zIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKysvaW9zZndkIiAxIDMKIyA0MyAi
L3Vzci9pbmNsdWRlL2crKy9pb3Nmd2QiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9z
dHJpbmdmd2QuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdHJpbmdmd2QuaCIg
MwoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3Qg
Y2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0
ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90PjsKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0
eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJp
bmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+IHN0cmluZzsKICB0eXBlZGVmIGJhc2lj
X3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwp9CiMgNDYgIi91c3IvaW5jbHVkZS9nKysvaW9zZndk
IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvZnBvcy5oIiAxIDMKIyA0MyAiL3Vzci9p
bmNsdWRlL2crKy9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3Vz
ZS1saW51eC9iaXRzL2MrK2lvLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3Vz
ZS1saW51eC9iaXRzL2MrK2lvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2NzdGRpbyIgMSAz
CiMgNDggIi91c3IvaW5jbHVkZS9nKysvY3N0ZGlvIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvZysr
L2NzdGRkZWYiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvZysrL2NzdGRkZWYiIDMKCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
CiMgMTQ3ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjEuMS9pbmNsdWRlL3N0
ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAyMDEgIi91c3IvbGliL2djYy1saWIv
aTQ4Ni1zdXNlLWxpbnV4LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgc2l6ZV90OwojIDQ5ICIvdXNyL2luY2x1ZGUvZysrL2NzdGRkZWYiIDIgMwoKbmFtZXNw
YWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpzaXplX3Q7Cn0KIyA1MSAi
L3Vzci9pbmNsdWRlL2crKy9jc3RkaW8iIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg
MSAzCiMgMzAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91
c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MwojIDM1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L3R5cGVzLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
CiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQg
Y2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYg
dW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9f
ZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9f
ZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2lu
Y2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVk
ZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2lu
dDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2ln
bmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4
dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVu
c2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRl
ZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVk
ZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3Vf
bG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBf
X25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xv
ZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVm
IF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRl
ZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwog
IH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2Fk
ZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191
c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBp
bnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQg
X19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBf
X2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBl
ZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90
Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNi
bGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191
X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoK
dHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRf
dDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25n
IGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJl
YWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2Jp
dHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3By
aW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMK
CgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBf
X3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpf
cHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBp
bnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9w
YXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwog
IHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3Rh
Y2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRl
ZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVh
ZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QK
ewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVk
IGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2Vy
dmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBf
X21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9t
dXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRf
bXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBz
dHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3
X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsK
ICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3
X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0
aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBp
bnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGls
ZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0
aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2Jh
X3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmll
cl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmll
cmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNDQg
Ii91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUvc3RkaW8u
aCIgMiAzCiMgNDUgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19G
SUxFIEZJTEU7CiMgNTUgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9J
T19GSUxFIF9fRklMRTsKIyA2NSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvbGliaW8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyAxNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o
IiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9z
dGRkZWYuaCIgMSAzCiMgMzIxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjEu
MS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAi
L3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZp
Zy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUv
d2NoYXIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMS4xL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIu
aCIgMiAzCiMgNjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgc3RydWN0CnsKICBp
bnQgX19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hi
WzRdOwogIH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2Nv
bmZpZy5oIiAyIDMKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0
ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9f
cG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5j
bHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAyOCAi
L3Vzci9pbmNsdWRlL2djb252LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMg
NDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1
c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCiMgMSAiL3Vzci9s
aWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MzIgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgplbnVtCnsKICBfX0dDT05WX09LID0g
MCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9OT01FTSwKCiAg
X19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9fR0NPTlZfSUxM
RUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NPTlZfSUxMRUdB
TF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IKfTsKCgoKZW51bQp7CiAgX19H
Q09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4MDAwMgp9
OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGE7CnN0cnVj
dCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGE7CgoKCnR5
cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosIHN0cnVjdCBf
X2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1
bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBpbnQsIGludCk7CgoKdHlw
ZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKdHlw
ZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKCgoK
dHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0
YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVu
c2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
dW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19j
b250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICos
IHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2Zj
dCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90
cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAoKl9f
Z2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRh
CnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAgX19nY29udl90cmFuc19jb250
ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBfX3Ry
YW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEg
Kl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3RydWN0IF9fZ2NvbnZfbG9h
ZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBjaGFyICpfX21vZG5hbWU7Cgog
IGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwogIGNoYXIgKl9fdG9fbmFtZTsK
CiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBfX2luaXRfZmN0OwogIF9f
Z2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9fbWluX25lZWRlZF9mcm9tOwogIGlu
dCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVkX3RvOwogIGludCBfX21heF9u
ZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRhOwp9OwoKCgpzdHJ1
Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmOwogIHVuc2ln
bmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdzOwoKCgogIGludCBfX2ludm9j
YXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7CgogIF9fbWJzdGF0ZV90ICpf
X3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0cnVjdCBfX2djb252X3RyYW5z
X2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6
ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3RlcHM7CiAgX19leHRlbnNp
b25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhIFtdOwp9ICpfX2djb252X3Q7CiMg
NDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVkZWYgdW5pb24KewogIHN0cnVj
dCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZv
IF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5l
ZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3Qg
X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50
IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwojIDMzICIv
dXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMg
MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRhcmcu
aCIgMSAzCiMgNDMgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMS4xL2luY2x1
ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsK
IyA1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzAgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9f
bWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpf
c2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoK
ZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRp
YWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKCgoKCnN0cnVjdCBf
SU9fY29kZWN2dAp7CiAgdm9pZCAoKl9fY29kZWN2dF9kZXN0cikgKHN0cnVjdCBfSU9fY29kZWN2
dCAqKTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fb3V0KSAoc3RydWN0
IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICoqLCBjaGFyICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBf
X2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX3Vuc2hpZnQpIChzdHJ1Y3QgX0lPX2NvZGVj
dnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bWJzdGF0ZV90ICosIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgq
X19jb2RlY3Z0X2RvX2luKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoq
LCB3Y2hhcl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fZW5jb2RpbmcpIChz
dHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2Fsd2F5c19ub2NvbnYp
IChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2xlbmd0aCkgKHN0
cnVjdCBfSU9fY29kZWN2dCAqLCBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKICBpbnQgKCpfX2Nv
ZGVjdnRfZG9fbWF4X2xlbmd0aCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKCiAgX0dfaWNvbnZf
dCBfX2NkX2luOwogIF9HX2ljb252X3QgX19jZF9vdXQ7Cn07CgoKc3RydWN0IF9JT193aWRlX2Rh
dGEKewogIHdjaGFyX3QgKl9JT19yZWFkX3B0cjsKICB3Y2hhcl90ICpfSU9fcmVhZF9lbmQ7CiAg
d2NoYXJfdCAqX0lPX3JlYWRfYmFzZTsKICB3Y2hhcl90ICpfSU9fd3JpdGVfYmFzZTsKICB3Y2hh
cl90ICpfSU9fd3JpdGVfcHRyOwogIHdjaGFyX3QgKl9JT193cml0ZV9lbmQ7CiAgd2NoYXJfdCAq
X0lPX2J1Zl9iYXNlOwogIHdjaGFyX3QgKl9JT19idWZfZW5kOwoKICB3Y2hhcl90ICpfSU9fc2F2
ZV9iYXNlOwogIHdjaGFyX3QgKl9JT19iYWNrdXBfYmFzZTsKCiAgd2NoYXJfdCAqX0lPX3NhdmVf
ZW5kOwoKICBfX21ic3RhdGVfdCBfSU9fc3RhdGU7CiAgX19tYnN0YXRlX3QgX0lPX2xhc3Rfc3Rh
dGU7CiAgc3RydWN0IF9JT19jb2RlY3Z0IF9jb2RlY3Z0OwoKICB3Y2hhcl90IF9zaG9ydGJ1Zlsx
XTsKCiAgc3RydWN0IF9JT19qdW1wX3QgKl93aWRlX3Z0YWJsZTsKfTsKCgpzdHJ1Y3QgX0lPX0ZJ
TEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9f
cmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsK
ICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lP
X2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwog
IGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBf
SU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBf
ZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2ln
bmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNo
YXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMwNSAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgogIHN0cnVjdCBfSU9fY29kZWN2
dCAqX2NvZGVjdnQ7CiAgc3RydWN0IF9JT193aWRlX2RhdGEgKl93aWRlX2RhdGE7CgoKCgogIGlu
dCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2Yg
KHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3Qg
X0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVz
IF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rk
ZXJyXzsKIyAzNDQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9f
aW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMp
OwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUs
IF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tp
ZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9m
biAodm9pZCAqX19jb29raWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRf
ZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90
Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9f
aW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewog
IF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtf
Zm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlv
bnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlv
bnNfdDsKCnN0cnVjdCBfSU9fY29va2llX2ZpbGU7CgoKZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9p
bml0IChzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlICpfX2NmaWxlLCBpbnQgX19yZWFkX3dyaXRlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fY29va2llLCBfSU9fY29va2llX2lv
X2Z1bmN0aW9uc190IF9fZm5zKTsKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRl
cmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxF
ICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgdGhy
b3cgKCk7CmV4dGVybiB3aW50X3QgX193dW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsK
ZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50
X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgdGhyb3cgKCk7CiMgNDI2ICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpl
eHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVy
biB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBf
SU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5
bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwojIDQ1NiAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25z
dCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp
c3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChf
SU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBf
SU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6
ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0
ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGlu
dCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9f
b2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVh
IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9JT19nZXR3YyAoX0lPX0ZJ
TEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9JT19wdXR3YyAod2NoYXJfdCBfX3dj
LCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Z3aWRlIChfSU9fRklM
RSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7CiMgNTA1ICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMwpleHRlcm4gaW50IF9JT192ZndzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25z
dCB3Y2hhcl90ICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192
YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9JT192Zndwcmlu
dGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9f
c3NpemVfdCBfSU9fd3BhZG4gKF9JT19GSUxFICosIHdpbnRfdCwgX19zc2l6ZV90KSB0aHJvdyAo
KTsKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfd2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAo
KTsKCgoKfQojIDY2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVmIF9fZ251
Y192YV9saXN0IHZhX2xpc3Q7CiMgODAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYg
X0dfZnBvc190IGZwb3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CiMgMTI5
ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xp
bS5oIiAxIDMKIyAxMzAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUg
KnN0ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwoKCgoKCgpl
eHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSB0aHJvdyAoKTsKIyAx
NTggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQp
IHRocm93ICgpOwoKCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoK
CgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgMTc4ICIvdXNy
L2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpf
X2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZv
cGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4g
RklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAg
ICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDIy
MiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwpleHRlcm4gRklMRSAqZnJlb3Bl
bjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJu
IEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuY29va2llICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNf
Y29va2llLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rp
b25zX3QgX19pb19mdW5jcykgdGhyb3cgKCk7CgoKZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lk
ICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxv
YykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBz
ZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
LAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVzLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hh
ciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zaXpl
KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzZXRsaW5lYnVmIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s
CiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu
Li4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19y
ZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9f
cmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAg
ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg
dnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlz
dCBfX2FyZykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVz
dHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAg
ICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBz
bnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7
CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21h
eGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CgoKCgoKZXh0ZXJuIGludCB2YXNwcmlu
dGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
LAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVy
biBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVy
biBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgpleHRlcm4g
aW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAog
ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGlu
dCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4p
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIs
IDMpKSk7CgoKCgpleHRlcm4gaW50IGZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwK
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4u
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUg
Kl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAg
ICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgpleHRlcm4gaW50IHZz
Y2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBf
X2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9f
LCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKCgpleHRlcm4gaW50IGZnZXRjIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0Y2hhciAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRl
cm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmdldGNf
dW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dGMg
KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjIChpbnQg
X19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQg
X19jKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2Ms
IEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHV0Y191bmxvY2tlZCAo
aW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGNoYXJfdW5s
b2NrZWQgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0dyAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9f
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpnZXRzIChjaGFyICpfX3MpIHRocm93ICgpOwoj
IDQyNiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRlbGlt
IChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK
ZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBf
X2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipf
X3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq
X19yZXN0cmljdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6
ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2
b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgpleHRlcm4g
c2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19z
aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jl
c3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQg
KF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcg
aW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxs
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKIyA0ODkgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBp
bnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0
aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3Nf
dCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZnNldHBvcyAo
RklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cgKCk7CiMgNTIzICIv
dXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbzY0IChGSUxFICpfX3N0cmVh
bSwgX19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwpleHRlcm4gX19vZmY2
NF90IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmdldHBv
czY0IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3Bv
cykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBf
X2NvbnN0IGZwb3M2NF90ICpfX3BvcykgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJy
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK
CgoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJs
aXN0W107CgoKZXh0ZXJuIGludCBfc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29u
c3QgX3N5c19lcnJsaXN0W107CgoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpfX2Nv
bW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwY2xv
c2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAo
Y2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19z
KSB0aHJvdyAoKTsKCgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVybiBpbnQgb2JzdGFja19wcmlu
dGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93
ICgpOwpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJp
Y3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3Zh
X2xpc3QgX19hcmdzKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CiMgNjMwICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5o
IiAzCmlubGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBf
X2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKewogIHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0
LCBfX2ZtdCwgX19hcmcpOwp9CgoKaW5saW5lIGludApnZXRjaGFyICh2b2lkKSB0aHJvdyAoKQp7
CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmlubGluZSBpbnQKZ2V0Y191bmxvY2tl
ZCAoRklMRSAqX19mcCkgdGhyb3cgKCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVhZF9wdHIg
Pj0gKF9fZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWduZWQgY2hh
ciAqKSAoX19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhcl91bmxv
Y2tlZCAodm9pZCkgdGhyb3cgKCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRfcHRyID49
IChzdGRpbiktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWduZWQgY2hh
ciAqKSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmlubGluZSBpbnQKcHV0Y2hhciAo
aW50IF9fYykgdGhyb3cgKCkKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9CgoK
CgppbmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFt
KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIp
IChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9
IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0
ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAo
dW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lP
X3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCmlubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tlZCAo
aW50IF9fYykgdGhyb3cgKCkKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRyID49
IChzdGRvdXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2lnbmVk
IGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVfcHRy
KysgPSAoX19jKSkpOwp9CgoKCgoKaW5saW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoqX19s
aW5lcHRyLCBzaXplX3QgKl9fbiwgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4g
X19nZXRkZWxpbSAoX19saW5lcHRyLCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoKCmlubGlu
ZSBpbnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4g
KCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmlubGluZSBpbnQKZmVycm9y
X3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVh
bSktPl9mbGFncyAmIDB4MjApICE9IDApOwp9CiMgNjMxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg
MiAzCgoKfQojIDUzICIvdXNyL2luY2x1ZGUvZysrL2NzdGRpbyIgMiAzCiMgOTcgIi91c3IvaW5j
bHVkZS9nKysvY3N0ZGlvIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2lu
ZyA6OmZwb3NfdDsKCiAgdXNpbmcgOjpjbGVhcmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2lu
ZyA6OmZlb2Y7CiAgdXNpbmcgOjpmZXJyb3I7CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpm
Z2V0YzsKICB1c2luZyA6OmZnZXRwb3M7CiAgdXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVu
OwogIHVzaW5nIDo6ZnByaW50ZjsKICB1c2luZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAg
dXNpbmcgOjpmcmVhZDsKICB1c2luZyA6OmZyZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNp
bmcgOjpmc2VlazsKICB1c2luZyA6OmZzZXRwb3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6
OmZ3cml0ZTsKICB1c2luZyA6OmdldGM7CiAgdXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0
czsKICB1c2luZyA6OnBlcnJvcjsKICB1c2luZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAg
dXNpbmcgOjpwdXRjaGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2lu
ZyA6OnJlbmFtZTsKICB1c2luZyA6OnJld2luZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6
c2V0YnVmOwogIHVzaW5nIDo6c2V0dmJ1ZjsKICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpz
c2NhbmY7CiAgdXNpbmcgOjp0bXBmaWxlOwogIHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5n
ZXRjOwogIHVzaW5nIDo6dmZwcmludGY7CiAgdXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNw
cmludGY7Cn0KIyAxNTMgIi91c3IvaW5jbHVkZS9nKysvY3N0ZGlvIiAzCm5hbWVzcGFjZSBfX2du
dV9jeHgKewogIHVzaW5nIDo6c25wcmludGY7CiAgdXNpbmcgOjp2ZnNjYW5mOwogIHVzaW5nIDo6
dnNjYW5mOwogIHVzaW5nIDo6dnNucHJpbnRmOwogIHVzaW5nIDo6dnNzY2FuZjsKfQoKbmFtZXNw
YWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6
OnZmc2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2
c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c3NjYW5mOwp9CiMgMzYgIi91c3IvaW5jbHVk
ZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvYysraW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVk
ZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvZ3Roci5oIiAxIDMKIyA5OCAiL3Vzci9pbmNsdWRl
L2crKy9pNDg2LXN1c2UtbGludXgvYml0cy9ndGhyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysr
L2k0ODYtc3VzZS1saW51eC9iaXRzL2d0aHItZGVmYXVsdC5oIiAxIDMKIyAzNyAiL3Vzci9pbmNs
dWRlL2crKy9pNDg2LXN1c2UtbGludXgvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9wdGhyZWFkLmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25nIGlu
dCB0dl9uc2VjOwogIH07CiMgMzAgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hl
ZC5oIiAzCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5Owog
IH07CgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIGludCBjbG9uZSAoaW50ICgqX19mbikgKHZvaWQg
Kl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFjaywKICAgICAgICAgICAgICAgICAgaW50IF9fZmxh
Z3MsIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgp9CiMgMzMgIi91c3IvaW5jbHVkZS9zY2hlZC5o
IiAyIDMKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gKF9fcGlk
X3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBz
Y2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hl
ZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz
Y2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0
IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwoKfQojIDIxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o
IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1
c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNDMgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDU5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVk
ZWYgX19jbG9ja190IGNsb2NrX3Q7CiMgNzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRl
ZiBfX3RpbWVfdCB0aW1lX3Q7CiMgODIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBf
X2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgOTQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRl
ZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMTggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0
IHRtCnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAgaW50IHRt
X21kYXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsKICBpbnQg
dG1feWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAgX19jb25z
dCBjaGFyICp0bV96b25lOwoKCgoKfTsKCgoKCnN0cnVjdCBpdGltZXJzcGVjCiAgewogICAgc3Ry
dWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwogICAgc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOwog
IH07CgoKc3RydWN0IHNpZ2V2ZW50OwoKCgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCgoK
CmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRp
bWUgKHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAo
dGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3Rw
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0
IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpz
dHJwdGltZSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCkKICAg
ICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3QgdGltZV90
ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2Nv
bnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRp
bWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9f
dGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJp
Y3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1
Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1l
X3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9yIChfX2Nv
bnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWVfciAo
X19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpu
YW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCBfX3RpbWV6b25l
OwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoKZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQp
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgdGltZXpv
bmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikgdGhyb3cg
KCk7CiMgMjcxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiB0aW1lX3QgdGltZWdtIChz
dHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1
Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZHlzaXplIChpbnQgX195ZWFyKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBuYW5v
c2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLAogICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRp
bWVzcGVjICpfX3JlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lIChjbG9j
a2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3RwKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVj
dCB0aW1lc3BlYyAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19uYW5v
c2xlZXAgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW0pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3QgX19waWQsIGNsb2NraWRfdCAqX19jbG9j
a19pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9f
Y2xvY2tfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVz
dHJpY3QgX19ldnAsCiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0
IF9fdGltZXJpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3Qg
X190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUgKHRpbWVyX3Qg
X190aW1lcmlkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fdmFsdWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIHN0cnVjdCBp
dGltZXJzcGVjICpfX3ZhbHVlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0
b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwojIDM0MiAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0g
KmdldGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwojIDM1NyAiL3Vzci9p
bmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3Ry
aWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKCn0KIyAyMiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQu
aCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDEgMwojIDMxICIvdXNyL2luY2x1
ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3Nl
dC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQg
X19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcg
aW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9
IF9fc2lnc2V0X3Q7CiMgMzQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzCiMgNDggIi91c3Iv
aW5jbHVkZS9zaWduYWwuaCIgMwp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CiMgMzcxICIv
dXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKfQojIDI1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAy
IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjYgIi91c3Iv
aW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2luaXRzcGluLmgi
IDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA1
OSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwplbnVtCnsKICBQVEhSRUFEX0NSRUFURV9KT0lO
QUJMRSwKCiAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX0lO
SEVSSVRfU0NIRUQsCgogIFBUSFJFQURfRVhQTElDSVRfU0NIRUQKCn07CgplbnVtCnsKICBQVEhS
RUFEX1NDT1BFX1NZU1RFTSwKCiAgUFRIUkVBRF9TQ09QRV9QUk9DRVNTCgp9OwoKZW51bQp7CiAg
UFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQ
VEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoK
ICAsCiAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBU
SFJFQURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRI
UkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBU
SFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVURVhfTk9STUFMCgoKCiAgLCBQVEhSRUFE
X01VVEVYX0ZBU1RfTlAgPSBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCgp9OwoKZW51bQp7CiAg
UFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQKCn07CgoK
ZW51bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURFUl9OUCwKICBQVEhSRUFEX1JXTE9D
S19QUkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTk9OUkVD
VVJTSVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RFRkFVTFRfTlAgPSBQVEhSRUFEX1JXTE9DS19Q
UkVGRVJfV1JJVEVSX05QCn07CiMgMTMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCnN0cnVj
dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKik7
CiAgdm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xl
YW51cF9idWZmZXIgKl9fcHJldjsKfTsKCgoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxF
LAoKICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9E
RUZFUlJFRCwKCiAgUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCgp9OwojIDE2MyAiL3Vzci9p
bmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlIChwdGhyZWFkX3Qg
Kl9fcmVzdHJpY3QgX190aHJlYWRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKSB0aHJvdyAoKTsKCgpleHRlcm4gcHRo
cmVhZF90IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X2VxdWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQyKSB0aHJvdyAo
KTsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0dmFsKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9qb2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3JldHVybikgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2RldGFjaCAocHRocmVhZF90IF9fdGgpIHRocm93ICgp
OwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3QgKl9f
YXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveSAocHRocmVh
ZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0
ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3Qg
Kl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19k
ZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRw
YXJhbSAocHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0
cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3BhcmFtKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtIChfX2NvbnN0IHB0
aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsIGludCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0
cl9nZXRzY2hlZHBvbGljeSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJp
Y3QgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0
aW5oZXJpdHNjaGVkIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2luaGVyaXQpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq
X19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0
ciwgaW50ICpfX3Jlc3RyaWN0IF9faW5oZXJpdCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9zZXRzY29wZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fc2Nv
cGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgKF9f
Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2NvcGUpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fZ3VhcmRz
aXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUgKF9f
Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX2d1YXJkc2l6ZSkKICAg
ICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyIChw
dGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKl9fc3RhY2thZGRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0
cl9nZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHZvaWQgKipfX3Jlc3RyaWN0
IF9fc3RhY2thZGRyKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldHN0YWNrIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2sgKF9fY29uc3QgcHRocmVhZF9h
dHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9f
YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFj
a3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSAo
X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKQog
ICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0YXR0cl9ucCAocHRocmVhZF90
IF9fdGgsIHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50
IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9f
cG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qg
c2NoZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X2dldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3ksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19w
YXJhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGNvbmN1cnJlbmN5
ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y29uY3VycmVuY3kgKGlu
dCBfX2xldmVsKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF95aWVsZCAodm9p
ZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9pbml0IChwdGhyZWFk
X211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19tdXRleF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpfX211
dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9t
dXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3Rp
bWVkbG9jayAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3Ry
aWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAq
X19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5p
dCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0
IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19h
dHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFy
ZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAo
cHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKQogICAgIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZSAoX19jb25zdCBwdGhyZWFkX211
dGV4YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19raW5kKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy
biBpbnQgcHRocmVhZF9jb25kX2luaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29u
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2NvbmRhdHRy
X3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25kX2F0dHIp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kgKHB0aHJlYWRfY29u
ZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3NpZ25hbCAo
cHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2Nv
bmRfYnJvYWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBwdGhyZWFkX2NvbmRfd2FpdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25k
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJp
Y3QgX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3
YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMg
Kl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJlYWRf
Y29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0
dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfY29uZGF0
dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0
IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19y
ZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0
cl9zZXRwc2hhcmVkIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKCgoK
ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3Ry
aWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRo
cmVhZF9yd2xvY2thdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfZGVzdHJv
eSAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9yd2xvY2tfcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnlyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3Qg
Kl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHJk
bG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVz
dHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193cmxvY2sgKHB0aHJlYWRfcnds
b2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3Ry
eXdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IHB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3Ry
aWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRf
cndsb2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgKHB0aHJlYWRfcndsb2NrYXR0cl90
ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ry
b3kgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRy
X3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0
IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpf
X3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j
a2F0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0a2luZF9ucCAoX19jb25zdCBwdGhy
ZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgKl9fcHJlZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3
bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHJlZikgdGhyb3cgKCk7
CiMgNTA5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zcGlu
X2luaXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrLCBpbnQgX19wc2hhcmVkKQogICAgIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2Rlc3Ryb3kgKHB0aHJlYWRfc3Bpbmxv
Y2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9sb2NrIChw
dGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X3NwaW5fdHJ5bG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9zcGluX3VubG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2sp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfaW5pdCAocHRocmVhZF9i
YXJyaWVyX3QgKl9fcmVzdHJpY3QgX19iYXJyaWVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19yZXN0cmljdAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHVuc2lnbmVkIGludCBfX2NvdW50KSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3kgKHB0aHJlYWRfYmFy
cmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJh
dHRyX2luaXQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJhdHRyX3Qg
Kl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfZ2V0cHNo
YXJlZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9zZXRwc2hhcmVkIChwdGhy
ZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFk
X2JhcnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhyb3cgKCk7CiMg
NTU2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfY3Jl
YXRlIChwdGhyZWFkX2tleV90ICpfX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcG9pbnRlcikgdGhyb3cg
KCk7CgoKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19r
ZXkpIHRocm93ICgpOwojIDU3NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50
IHB0aHJlYWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9sLAogICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGludCBfX3N0YXRlLCBpbnQg
Kl9fb2xkc3RhdGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlw
ZSAoaW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9jYW5jZWwgKHB0aHJlYWRfdCBfX2NhbmNlbHRocmVhZCkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gdm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwgKHZvaWQpIHRocm93ICgpOwojIDYxMCAiL3Vzci9p
bmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2ggKHN0
cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCgoKCgoKZXh0
ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1
ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19l
eGVjdXRlKSB0aHJvdyAoKTsKIyA2MzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJu
IHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoX2RlZmVyIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51
cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKIyA2NDIgIi91c3IvaW5jbHVk
ZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3BfcmVzdG9yZSAo
c3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGludCBwdGhyZWFkX2dldGNwdWNsb2NraWQgKHB0aHJlYWRfdCBfX3RocmVhZF9pZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NraWRfdCAqX19jbG9ja19pZCkg
dGhyb3cgKCk7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMKIyAz
MSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX3Np
Z21hc2sgKGludCBfX2hvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgX19z
aWdzZXRfdCAqX19yZXN0cmljdCBfX25ld21hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fb2xkbWFzayl0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkaWQsIGludCBfX3NpZ25vKSB0aHJvdyAo
KTsKIyA2NTYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDY3MSAiL3Vzci9pbmNsdWRl
L3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJl
KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3BhcmVudCkgKHZv
aWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wICh2
b2lkKSB0aHJvdyAoKTsKCn0KIyAzOCAiL3Vzci9pbmNsdWRlL2crKy9pNDg2LXN1c2UtbGludXgv
Yml0cy9ndGhyLWRlZmF1bHQuaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19ndGhyZWFk
X2tleV90Owp0eXBlZGVmIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7CnR5cGVkZWYg
cHRocmVhZF9tdXRleF90IF9fZ3RocmVhZF9tdXRleF90OwoKCgoKCgojcHJhZ21hIHdlYWsgcHRo
cmVhZF9vbmNlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUKI3ByYWdtYSB3ZWFrIHB0
aHJlYWRfa2V5X2RlbGV0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYwojcHJhZ21h
IHdlYWsgcHRocmVhZF9zZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9jcmVhdGUKCiNw
cmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2xvY2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4
X3RyeWxvY2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3VubG9jayAKIyA4MCAiL3Vzci9p
bmNsdWRlL2crKy9pNDg2LXN1c2UtbGludXgvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMg
aW5saW5lIGludApfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpCnsKICBzdGF0aWMgdm9pZCAqY29u
c3QgX19ndGhyZWFkX2FjdGl2ZV9wdHIgPSAodm9pZCAqKSAmcHRocmVhZF9jcmVhdGU7CiAgcmV0
dXJuIF9fZ3RocmVhZF9hY3RpdmVfcHRyICE9IDA7Cn0KIyA0MzcgIi91c3IvaW5jbHVkZS9nKysv
aTQ4Ni1zdXNlLWxpbnV4L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQK
X19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZvaWQgKCpmdW5jKSAodm9p
ZCkpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfb25j
ZSAob25jZSwgZnVuYyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9CgpzdGF0aWMgaW5saW5lIGlu
dApfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpkdG9y
KSAodm9pZCAqKSkKewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVhdGUgKGtleSwgZHRvcik7Cn0K
CnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZHRvciAoX19ndGhyZWFkX2tleV90IGtl
eSwgdm9pZCAqcHRyKQp7CgogIGlmIChwdHIpCiAgICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZp
YyAoa2V5LCAwKTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19n
dGhyZWFkX2tleV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVh
ZF9rZXlfZGVsZXRlIChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgKgpfX2d0aHJlYWRfZ2V0
c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9nZXRzcGVj
aWZpYyAoa2V5KTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX3NldHNwZWNpZmljIChf
X2d0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkICpwdHIpCnsKICByZXR1cm4gcHRocmVhZF9z
ZXRzcGVjaWZpYyAoa2V5LCBwdHIpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0
ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3Rp
dmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xvY2sgKG11dGV4KTsKICBlbHNlCiAg
ICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sg
KF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkp
CiAgICByZXR1cm4gcHRocmVhZF9tdXRleF90cnlsb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0
dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3Ro
cmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICBy
ZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsK
fQojIDk5ICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2d0aHIuaCIgMiAz
CiMgMzggIi91c3IvaW5jbHVkZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvYysraW8uaCIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdHlwZWRlZiBsb25nIHN0cmVhbW9mZjsKICB0eXBlZGVmIHB0
cmRpZmZfdCBzdHJlYW1zaXplOwoKICB0eXBlZGVmIHB0cmRpZmZfdCB3c3RyZWFtc2l6ZTsKCiAg
dHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsKCiAgdHlwZWRlZiBfX2d0aHJlYWRfbXV0ZXhf
dCBfX2NfbG9jazsKCgogIHR5cGVkZWYgRklMRSBfX2NfZmlsZTsKCgogIHN0cnVjdCBfX2lvc19m
bGFncwogIHsKICAgIHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsKCiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19ib29sYWxwaGEgPSAweDAwMDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf
dHlwZSBfU19kZWMgPSAweDAwMDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhl
ZCA9IDB4MDAwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2hleCA9IDB4MDAwODsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ludGVybmFsID0gMHgwMDEwOwogICAgc3Rh
dGljIGNvbnN0IF9faW50X3R5cGUgX1NfbGVmdCA9IDB4MDAyMDsKICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX29jdCA9IDB4MDA0MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X3JpZ2h0ID0gMHgwMDgwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2NpZW50aWZp
YyA9IDB4MDEwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3diYXNlID0gMHgw
MjAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOwog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvcyA9IDB4MDgwMDsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX3NraXB3cyA9IDB4MTAwMDsKICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX3VuaXRidWYgPSAweDIwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU191cHBlcmNhc2UgPSAweDQwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19h
ZGp1c3RmaWVsZCA9IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4MDAwMiB8IDB4MDA0MCB8IDB4MDAwODsKICAgIHN0
YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7CgoK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7CiAgICBzdGF0aWMg
Y29uc3QgX19pbnRfdHlwZSBfU19lb2ZiaXQgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50
X3R5cGUgX1NfZmFpbGJpdCA9IDB4MDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2FwcCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hdGUgPSAweDAyOwog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmluID0gMHgwNDsKICAgIHN0YXRpYyBjb25z
dCBfX2ludF90eXBlIF9TX2luID0gMHgwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X291dCA9IDB4MTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU190cnVuYyA9IDB4MjA7
CiAgfTsKfQojIDQ1ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvdXNy
L2luY2x1ZGUvZysrL2N3Y2hhciIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9nKysvY3djaGFyIiAz
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9jdGltZSIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9n
KysvY3RpbWUiIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2crKy9jdGltZSIgMwpuYW1lc3BhY2Ugc3Rk
CnsKICB1c2luZyA6OmNsb2NrX3Q7CiAgdXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAg
dXNpbmcgOjpjbG9jazsKICB1c2luZyA6OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0aW1lOwogIHVz
aW5nIDo6dGltZTsKICB1c2luZyA6OmFzY3RpbWU7CiAgdXNpbmcgOjpjdGltZTsKICB1c2luZyA6
OmdtdGltZTsKICB1c2luZyA6OmxvY2FsdGltZTsKICB1c2luZyA6OnN0cmZ0aW1lOwp9CiMgNTIg
Ii91c3IvaW5jbHVkZS9nKysvY3djaGFyIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5o
IiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGli
L2k0ODYtc3VzZS1saW51eC8zLjEuMS9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MSAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3Vz
ZS1saW51eC8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3dj
aGFyLmgiIDIgMwojIDg1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIF9fbWJzdGF0
ZV90IG1ic3RhdGVfdDsKIyAxMDUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnN0cnVjdCB0bTsK
CgpleHRlcm4gIkMiIHsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY3B5ICh3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5ICh3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRl
cm4gd2NoYXJfdCAqd2NzY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAo
KTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3Ny
Yywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjc2NtcCAoX19jb25z
dCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHdjc25jbXAgKF9fY29uc3Qgd2No
YXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXAg
KF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHdjc25jYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qg
d2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVk
ZS94bG9jYWxlLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfc3RydWN0CnsKCiAgc3RydWN0
IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNbMTNdOwoKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50
ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50ICpf
X2N0eXBlX3RvdXBwZXI7Cn0gKl9fbG9jYWxlX3Q7CiMgMTQ0ICIvdXNyL2luY2x1ZGUvd2NoYXIu
aCIgMiAzCgpleHRlcm4gaW50IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEs
IF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2Nh
bGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9fd2NzbmNhc2VjbXBfbCAoX19jb25z
dCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgd2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3Qg
Kl9fczIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9fd2Nz
Y29sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAg
ICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCmV4dGVy
biBzaXplX3QgX193Y3N4ZnJtX2wgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19z
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xv
YykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hhcl90ICpf
X3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB3Y2hh
cl90ICp3Y3NjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3Ny
Y2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hybnVs
IChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0
IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2Nv
bnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3Bicmsg
KF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nz
c3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVk
bGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB3
Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hh
cl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgoKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGltLAog
ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3B0cikgdGhyb3cg
KCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NubGVuIChf
X2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKF9fY29u
c3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHdtZW1jbXAgKF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5ICh3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90
ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpf
X3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90
ICp3bWVtcGNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAg
IHRocm93ICgpOwoKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBt
YnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX3B3YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19wKSB0
aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjcnRvbWIgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCB3
Y2hhcl90IF9fd2MsCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0
IF9fcHMpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIG1ic3Rh
dGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBtYnJsZW4gKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAg
ICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4dGVybiBfX2lu
bGluZSBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg
X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0
IF9fcHMpIHRocm93ICgpCnsgcmV0dXJuIChfX3BzICE9IF9fbnVsbAogICAgICAgICAgPyBtYnJ0
b3djIChfX251bGwsIF9fcywgX19uLCBfX3BzKSA6IF9fbWJybGVuIChfX3MsIF9fbiwgX19udWxs
KSk7IH0KCgoKCmV4dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
ZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBf
X3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpf
X3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hh
ciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
c2l6ZV90IG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9f
bm1jLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpf
X3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25ydG9tYnMgKGNo
YXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3
Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgX19ud2MsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRl
X3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgd2N3aWR0aCAo
d2NoYXJfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjc3dpZHRoIChfX2NvbnN0IHdj
aGFyX3QgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSB3Y3N0
b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBm
bG9hdCB3Y3N0b2YgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKZXh0
ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu
ZHB0cikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAoX19jb25zdCB3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gdW5z
aWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpl
eHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu
IGxvbmcgbG9uZyBpbnQgd2NzdG9sbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh
cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQxMCAiL3Vzci9pbmNsdWRlL3djaGFy
LmgiIDMKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0
cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2Nz
dG91bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxl
X3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBf
X3djc3RvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBf
X2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcg
aW50IF9fd2NzdG91bGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0
cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRv
dWJsZSBfX3djc3RvZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xv
Y2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2wgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0
aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfbCAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh
cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9k
X2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3djc3RvZl9pbnRlcm5hbCAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAg
ICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfaW50ZXJuYWwgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGxvbmcgaW50IF9fd2NzdG9sX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50
IF9fd2NzdG91bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9f
CmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoK
Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9p
bnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKioKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2VuZHB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSB3
Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkK
eyByZXR1cm4gX193Y3N0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9CmV4dGVy
biBfX2lubGluZSBsb25nIGludCB3Y3N0b2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl
KSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg
X19iYXNlLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cg
KCkKeyByZXR1cm4gX193Y3N0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us
IDApOyB9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG9mX2ludGVybmFs
IChfX25wdHIsIF9fZW5kcHRyLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgd2Nz
dG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJv
dyAoKQp7IHJldHVybiBfX3djc3RvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9
CgoKX19leHRlbnNpb25fXwpleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludCB3Y3N0b3EgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKeyByZXR1cm4g
X193Y3N0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9Cl9fZXh0
ZW5zaW9uX18KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAo
X19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJv
dyAoKQp7IHJldHVybiBfX3djc3RvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jh
c2UsIDApOyB9CgoKCgoKCgpleHRlcm4gd2NoYXJfdCAqd2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3Qs
IF9fY29uc3Qgd2NoYXJfdCAqX19zcmMpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2Nw
bmNweSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjLCBzaXplX3QgX19u
KQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmd2lkZSAoX19GSUxFICpfX2ZwLCBp
bnQgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmd3ByaW50ZiAoX19GSUxFICpfX3Jl
c3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHdwcmlu
dGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93
ICgpIDsKCmV4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXpl
X3QgX19uLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2ZndwcmludGYgKF9f
RklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf
bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3cHJpbnRmIChfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251
Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZzd3ByaW50ZiAo
d2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQg
ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgp
IDsKCmV4dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3c2NhbmYgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIGlu
dCB2ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAg
ICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3c2Nh
bmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg
ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZz
d3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAg
ICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoKCmV4dGVybiB3
aW50X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBn
ZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hh
ciAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgZnB1dHdjICh3Y2hhcl90IF9fd2Ms
IF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90
IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgcHV0d2No
YXIgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdzICh3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg
IF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmcHV0
d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAogICAgICAgICAgICAgICAgICAg
X19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCB1
bmdldHdjICh3aW50X3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4
dGVybiB3aW50X3QgZ2V0d2NoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB3
aW50X3QgZmdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl
cm4gd2ludF90IGZwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3dj
LCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhcl91bmxv
Y2tlZCAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3c191
bmxvY2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgZnB1dHdzX3VubG9ja2VkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBzaXplX3Qgd2NzZnRpbWUgKHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwojIDY4
MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKfQojIDU1ICIvdXNyL2luY2x1ZGUvZysrL2N3Y2hh
ciIgMiAzCiMgNjkgIi91c3IvaW5jbHVkZS9nKysvY3djaGFyIiAzCm5hbWVzcGFjZSBzdGQKewog
IHVzaW5nIDo6bWJzdGF0ZV90Owp9CiMgMTMzICIvdXNyL2luY2x1ZGUvZysrL2N3Y2hhciIgMwpu
YW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgdXNpbmcgOjpidG93YzsKICB1c2lu
ZyA6OmZnZXR3YzsKICB1c2luZyA6OmZnZXR3czsKICB1c2luZyA6OmZwdXR3YzsKICB1c2luZyA6
OmZwdXR3czsKICB1c2luZyA6OmZ3aWRlOwogIHVzaW5nIDo6ZndwcmludGY7CiAgdXNpbmcgOjpm
d3NjYW5mOwogIHVzaW5nIDo6Z2V0d2M7CiAgdXNpbmcgOjpnZXR3Y2hhcjsKICB1c2luZyA6Om1i
cmxlbjsKICB1c2luZyA6Om1icnRvd2M7CiAgdXNpbmcgOjptYnNpbml0OwogIHVzaW5nIDo6bWJz
cnRvd2NzOwogIHVzaW5nIDo6cHV0d2M7CiAgdXNpbmcgOjpwdXR3Y2hhcjsKICB1c2luZyA6OnN3
cHJpbnRmOwogIHVzaW5nIDo6c3dzY2FuZjsKICB1c2luZyA6OnVuZ2V0d2M7CiAgdXNpbmcgOjp2
ZndwcmludGY7CiAgdXNpbmcgOjp2ZndzY2FuZjsKICB1c2luZyA6OnZzd3ByaW50ZjsKICB1c2lu
ZyA6OnZzd3NjYW5mOwogIHVzaW5nIDo6dndwcmludGY7CiAgdXNpbmcgOjp2d3NjYW5mOwogIHVz
aW5nIDo6d2NydG9tYjsKICB1c2luZyA6Ondjc2NhdDsKICB1c2luZyA6Ondjc2NtcDsKICB1c2lu
ZyA6Ondjc2NvbGw7CiAgdXNpbmcgOjp3Y3NjcHk7CiAgdXNpbmcgOjp3Y3Njc3BuOwogIHVzaW5n
IDo6d2NzZnRpbWU7CiAgdXNpbmcgOjp3Y3NsZW47CiAgdXNpbmcgOjp3Y3NuY2F0OwogIHVzaW5n
IDo6d2NzbmNtcDsKICB1c2luZyA6Ondjc25jcHk7CiAgdXNpbmcgOjp3Y3NydG9tYnM7CiAgdXNp
bmcgOjp3Y3NzcG47CiAgdXNpbmcgOjp3Y3N0b2Q7CiAgdXNpbmcgOjp3Y3N0b2Y7CiAgdXNpbmcg
Ojp3Y3N0b2s7CiAgdXNpbmcgOjp3Y3N0b2w7CiAgdXNpbmcgOjp3Y3N0b3VsOwogIHVzaW5nIDo6
d2NzeGZybTsKICB1c2luZyA6OndjdG9iOwogIHVzaW5nIDo6d21lbWNtcDsKICB1c2luZyA6Ondt
ZW1jcHk7CiAgdXNpbmcgOjp3bWVtbW92ZTsKICB1c2luZyA6OndtZW1zZXQ7CiAgdXNpbmcgOjp3
cHJpbnRmOwogIHVzaW5nIDo6d3NjYW5mOwoKICB1c2luZyA6Ondjc2NocjsKCiAgaW5saW5lIHdj
aGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2Nz
Y2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3
Y3NwYnJrOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NwYnJrKHdjaGFyX3QqIF9fczEsIHdjaGFy
X3QqIF9fczIpCiAgeyByZXR1cm4gd2NzcGJyayhjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihf
X3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3Y3NyY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3
Y3NyY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzcmNocihjb25z
dF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6d2Nzc3RyOwoK
ICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NzdHIod2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19zMikK
ICB7IHJldHVybiB3Y3NzdHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIp
OyB9CgogIHVzaW5nIDo6d21lbWNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd21lbWNocih3Y2hh
cl90KiBfX3AsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogIHsgcmV0dXJuIHdtZW1jaHIoY29u
c3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jLCBfX24pOyB9Cn0KCgoKCgoKCm5hbWVz
cGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6d2NzdG9sZDsKICB1c2luZyA6Ondjc3RvbGw7CiAg
dXNpbmcgOjp3Y3N0b3VsbDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4Ojp3
Y3N0b2xkOwogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sbDsKICB1c2luZyBfX2dudV9jeHg6Ondj
c3RvdWxsOwp9CiMgNDYgIi91c3IvaW5jbHVkZS9nKysvYml0cy9mcG9zLmgiIDIgMwoKbmFtZXNw
YWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGZwb3MK
ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX1N0YXRlVCBfX3N0YXRlX3R5cGU7Cgog
ICAgcHJpdmF0ZToKICAgICAgc3RyZWFtb2ZmIF9NX29mZjsKICAgICAgX19zdGF0ZV90eXBlIF9N
X3N0OwoKICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90eXBlCiAgICAgIHN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAgICAgc3RhdGUoX19zdGF0ZV90eXBlIF9f
c3QpIHsgX01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZwb3MoKTogX01fb2ZmKHN0cmVhbW9mZigp
KSwgX01fc3QoX19zdGF0ZV90eXBlKCkpIHsgfQoKICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYs
IF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpCiAgICAgIDogX01fb2ZmKF9fb2Zm
KSwgX01fc3QoX19zdCkgeyB9CgogICAgICBvcGVyYXRvciBzdHJlYW1vZmYoKSBjb25zdCB7IHJl
dHVybiBfTV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9f
b2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zJgogICAg
ICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0gX19vZmY7IHJldHVybiAq
dGhpczsgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvcisoc3RyZWFtb2ZmIF9fb2ZmKQogICAg
ICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCArPSBfX29mZjsKICAgICAg
ICByZXR1cm4gX190OwogICAgICB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9yLShzdHJlYW1v
ZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190IC09
IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGJvb2wKICAgICAgb3Bl
cmF0b3I9PShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmID09
IF9fcG9zLl9NX29mZjsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciE9KGNvbnN0IGZwb3Mm
IF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19wb3MuX01fb2ZmOyB9Cgog
ICAgICBzdHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBfTV9vZmY7
IH0KCiAgICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29m
ZiA9IF9fb2ZmOyB9CiAgICB9OwoKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gc3RyZWFtcG9z
OwoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiB3c3RyZWFtcG9zOwoKfQojIDQ3ICIvdXNyL2lu
Y2x1ZGUvZysrL2lvc2Z3ZCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhj
ZXB0LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9nKysvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3Iv
aW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2
b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQK
ICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZs
b3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25z
dCBjaGFyKiBfX3MpOwp9CiMgNDggIi91c3IvaW5jbHVkZS9nKysvaW9zZndkIiAyIDMKCm5hbWVz
cGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4K
ICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19p
c3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBj
aGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4g
PgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgIHR5cGVu
YW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1
ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0No
YXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAg
ICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj
X29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0g
YWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh
clQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz
aWNfaWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D
aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBp
c3RyZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRl
cmF0b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7CgoKICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyPiBp
b3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4gc3RyZWFtYnVmOwogIHR5cGVkZWYg
YmFzaWNfaXN0cmVhbTxjaGFyPiBpc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFy
PiBvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07CiAgdHlw
ZWRlZiBiYXNpY19zdHJpbmdidWY8Y2hhcj4gc3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0
cmluZ3N0cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0
cmVhbTxjaGFyPiBvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNo
YXI+IHN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmlsZWJ1ZjsK
ICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNf
b2ZzdHJlYW08Y2hhcj4gb2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZz
dHJlYW07CgogIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+IHdpb3M7CiAgdHlwZWRlZiBiYXNp
Y19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08
d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+IHdvc3Ry
ZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08d2NoYXJfdD4gd2lvc3RyZWFtOwogIHR5cGVk
ZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19p
c3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0
cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmlu
Z3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3
Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPHdjaGFyX3Q+IHdpZnN0
cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+IHdvZnN0cmVhbTsKICB0eXBl
ZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07Cn0KIyA0NSAiL3Vzci9pbmNsdWRl
L2crKy9pb3MiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKysvZXhjZXB0aW9uIiAxIDMKIyA0MCAi
L3Vzci9pbmNsdWRlL2crKy9leGNlcHRpb24iIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBz
dGQKewoKCgoKCgogIGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNlcHRpb24o
KSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgogICAgdmly
dHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNzIGJh
ZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9leGNl
cHRpb24oKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3co
KTsKICB9OwoKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0eXBl
ZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRsZXIg
c2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVybWlu
YXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9oYW5k
bGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQg
dW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA5OCAiL3Vzci9p
bmNsdWRlL2crKy9leGNlcHRpb24iIDMKICBib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93
KCk7Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewojIDExMSAiL3Vzci9pbmNsdWRlL2crKy9leGNl
cHRpb24iIDMKICB2b2lkIF9fdmVyYm9zZV90ZXJtaW5hdGVfaGFuZGxlciAoKTsKfQoKfQojIDQ2
ICIvdXNyL2luY2x1ZGUvZysrL2lvcyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2No
YXJfdHJhaXRzLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvY2hhcl90cmFpdHMu
aCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2NzdHJpbmciIDEgMwojIDQ4ICIvdXNyL2luY2x1
ZGUvZysrL2NzdHJpbmciIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI4
ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbGli
L2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0
ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lk
ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpf
X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVt
bW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQogICAg
IHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9f
ZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICpt
ZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy
biB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQog
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB2b2lk
ICpyYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtcmNociAoX19jb25zdCB2b2lk
ICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBf
X2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4
dGVybiBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFy
ICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3My
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBz
dHJuY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9f
bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50
IHN0cmNvbGwgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJt
IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwojIDExMSAiL3Vz
ci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBpbnQgX19zdHJjb2xsX2wgKF9fY29uc3QgY2hh
ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3QgX19zdHJ4ZnJtX2wg
KGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo
YXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X21hbGxvY19fKSk7CgoKCgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9f
c3RyaW5nLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxv
Y19fKSk7CiMgMTU1ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNo
ciAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQg
X19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFy
ICpzdHJjaHJudWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBj
aGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAq
X19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBf
X2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBf
X2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0
YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4
dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7Cgpl
eHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19j
b25zdCB2b2lkICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB2b2lkICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19t
ZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0
ZXJuIHZvaWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4g
KF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50
IF9fZXJybnVtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vy
cm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g
dm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4g
dm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2
b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5k
ZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVy
biBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hh
ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19z
MSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKF9fY29u
c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u
c3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9f
bG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAog
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19j
b25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJu
IGNoYXIgKl9fc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFy
ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAg
IHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9f
ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
c3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9f
cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5
IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQg
Kl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAo
X19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKIyAzNjQgIi91c3IvaW5jbHVkZS9z
dHJpbmcuaCIgMwp9CiMgNTIgIi91c3IvaW5jbHVkZS9nKysvY3N0cmluZyIgMiAzCiMgNzcgIi91
c3IvaW5jbHVkZS9nKysvY3N0cmluZyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1lbWNw
eTsKICB1c2luZyA6Om1lbW1vdmU7CiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5
OwogIHVzaW5nIDo6c3RyY2F0OwogIHVzaW5nIDo6c3RybmNhdDsKICB1c2luZyA6Om1lbWNtcDsK
ICB1c2luZyA6OnN0cmNtcDsKICB1c2luZyA6OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJuY21wOwog
IHVzaW5nIDo6c3RyeGZybTsKICB1c2luZyA6OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJzcG47CiAg
dXNpbmcgOjpzdHJ0b2s7CiAgdXNpbmcgOjptZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1
c2luZyA6OnN0cmxlbjsKCiAgdXNpbmcgOjptZW1jaHI7CgogIGlubGluZSB2b2lkKgogIG1lbWNo
cih2b2lkKiBfX3AsIGludCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0
X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9fYywgX19uKTsgfQoKICB1c2luZyA6OnN0cmNocjsK
CiAgaW5saW5lIGNoYXIqCiAgc3RyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4g
X19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoK
ICB1c2luZyA6OnN0cnBicms7CgogIGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwg
Y29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0
PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoKICBpbmxp
bmUgY2hhcioKICBzdHJyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWls
dGluX3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNp
bmcgOjpzdHJzdHI7CgogIGlubGluZSBjaGFyKgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBj
aGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBj
aGFyKj4oX19zMSksIF9fczIpOyB9Cn0KIyA0NSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2NoYXJf
dHJhaXRzLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPGNsYXNzIF9DaGFy
VD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0cwogICAgewogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy
X3R5cGU7CgogICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50X3R5cGU7CiAgICAgIHR5cGVk
ZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsK
ICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAg
ICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAg
eyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90
eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0g
X19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2Mx
LCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9Cgog
ICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25z
dCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBmb3IgKHNpemVf
dCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQogICAgICAgICAgaWYgKCFlcShfX3MxW19faV0s
IF9fczJbX19pXSkpCiAgICAgICAgICAgIHJldHVybiBsdChfX3MxW19faV0sIF9fczJbX19pXSkg
PyAtMSA6IDE7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBzaXplX3QK
ICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7CiAgICAgICAgY29uc3Qg
Y2hhcl90eXBlKiBfX3AgPSBfX3M7CiAgICAgICAgd2hpbGUgKCpfX3ApICsrX19wOwogICAgICAg
IHJldHVybiAoX19wIC0gX19zKTsKICAgICAgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlw
ZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hh
cl90eXBlJiBfX2EpCiAgICAgIHsKICAgICAgICBmb3IgKGNvbnN0IGNoYXJfdHlwZSogX19wID0g
X19zOyBzaXplX3QoX19wIC0gX19zKSA8IF9fbjsgKytfX3ApCiAgICAgICAgICBpZiAoKl9fcCA9
PSBfX2EpIHJldHVybiBfX3A7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgICAgIHN0YXRp
YyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUq
IF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1tb3ZlKF9f
czEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKTsgfQoKICAgICAgc3RhdGljIGNoYXJf
dHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwg
c2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbWNweShfX3MxLCBfX3My
LCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAg
ICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAg
ICAgewogICAgICAgIGZvciAoY2hhcl90eXBlKiBfX3AgPSBfX3M7IF9fcCA8IF9fcyArIF9fbjsg
KytfX3ApCiAgICAgICAgICBhc3NpZ24oKl9fcCwgX19hKTsKICAgICAgICByZXR1cm4gX19zOwog
ICAgICB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBp
bnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBjaGFyX3R5cGUoX19jKTsgfQoKICAgICAgc3Rh
dGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKSB7IHJl
dHVybiBpbnRfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlw
ZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0
dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigtMSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlw
ZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIGVxX2lu
dF90eXBlKF9fYywgZW9mKCkpID8gaW50X3R5cGUoMCkgOiBfX2M7IH0KICAgIH07CgoKCiAgdGVt
cGxhdGU8PgogICAgc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+CiAgICB7CiAgICAgIHR5cGVkZWYg
Y2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgaW50IGludF90eXBlOwogICAgICB0eXBlZGVm
IHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAg
ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAg
ICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg
X19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlw
ZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9f
YzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwg
Y29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAg
ICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3Qg
Y2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBtZW1jbXAoX19zMSwg
X19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hh
cl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJuIHN0cmxlbihfX3MpOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3Qg
X19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgY2hhcl90eXBlKj4obWVtY2hyKF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNo
YXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19z
Miwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVt
bW92ZShfX3MxLCBfX3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAg
Y29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikK
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtY3B5KF9fczEsIF9fczIs
IF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBl
KiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGNoYXJfdHlwZSo+KG1lbXNldChfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBj
aGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZT4oX19jKTsgfQoKCgogICAgICBzdGF0aWMgaW50
X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpCiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGludF90eXBlPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2Mp
KTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUm
IF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7
IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxpbnRfdHlwZT4oKC0xKSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9m
KGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIChfX2MgPT0gZW9mKCkpID8gMCA6
IF9fYzsgfQogIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFy
X3Q+CiAgICB7CiAgICAgIHR5cGVkZWYgd2NoYXJfdCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg
d2ludF90IGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAg
dHlwZWRlZiB3c3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0
ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwg
Y29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9CgogICAgICBzdGF0
aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYg
X19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAog
ICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAg
ICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFy
ZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9f
bikKICAgICAgeyByZXR1cm4gd21lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0
aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgeyByZXR1
cm4gd2NzbGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZp
bmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19h
KQogICAgICB7IHJldHVybiB3bWVtY2hyKF9fcywgX19hLCBfX24pOyB9CgogICAgICBzdGF0aWMg
Y2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBf
X3MyLCBpbnRfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHdtZW1tb3ZlKF9fczEsIF9fczIsIF9f
bik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3Mx
LCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHdtZW1j
cHkoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNz
aWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJl
dHVybiB3bWVtc2V0KF9fcywgX19hLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAg
ICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKSB7IHJldHVybiBjaGFyX3R5cGUo
X19jKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNo
YXJfdHlwZSYgX19jKSB7IHJldHVybiBpbnRfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgYm9v
bAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUm
IF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90
eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoMHhmZmZmZmZm
ZnUpKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5
cGUmIF9fYykKICAgICAgeyByZXR1cm4gZXFfaW50X3R5cGUoX19jLCBlb2YoKSkgPyAwIDogX19j
OyB9CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIHN0cnVjdCBfQ2hhcl90cmFpdHNfbWF0Y2gKICAgIHsKICAgICAgX0NoYXJUIF9NX2M7CiAg
ICAgIF9DaGFyX3RyYWl0c19tYXRjaChfQ2hhclQgY29uc3QmIF9fYykgOiBfTV9jKF9fYykgeyB9
CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yKCkoX0NoYXJUIGNvbnN0JiBfX2EpIHsgcmV0dXJu
IF9UcmFpdHM6OmVxKF9NX2MsIF9fYSk7IH0KICAgIH07Cn0KIyA0NyAiL3Vzci9pbmNsdWRlL2cr
Ky9pb3MiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlZndkLmgiIDEgMwoj
IDQ0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlZndkLmgiIDMKCgojIDEgIi91c3IvaW5j
bHVkZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDEgMwojIDM2ICIvdXNy
L2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2crKy9jbG9jYWxlIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2crKy9jbG9jYWxl
IiAzCgojIDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9s
b2NhbGUuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMS4xL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMv
bG9jYWxlLmgiIDMKZW51bQp7CiAgX19MQ19DVFlQRSA9IDAsCiAgX19MQ19OVU1FUklDID0gMSwK
ICBfX0xDX1RJTUUgPSAyLAogIF9fTENfQ09MTEFURSA9IDMsCiAgX19MQ19NT05FVEFSWSA9IDQs
CiAgX19MQ19NRVNTQUdFUyA9IDUsCiAgX19MQ19BTEwgPSA2LAogIF9fTENfUEFQRVIgPSA3LAog
IF9fTENfTkFNRSA9IDgsCiAgX19MQ19BRERSRVNTID0gOSwKICBfX0xDX1RFTEVQSE9ORSA9IDEw
LAogIF9fTENfTUVBU1VSRU1FTlQgPSAxMSwKICBfX0xDX0lERU5USUZJQ0FUSU9OID0gMTIKfTsK
IyAzMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMKCmV4dGVybiAiQyIgewojIDUyICIvdXNy
L2luY2x1ZGUvbG9jYWxlLmgiIDMKc3RydWN0IGxjb252CnsKCgogIGNoYXIgKmRlY2ltYWxfcG9p
bnQ7CiAgY2hhciAqdGhvdXNhbmRzX3NlcDsKCgoKCgogIGNoYXIgKmdyb3VwaW5nOwoKCgoKCiAg
Y2hhciAqaW50X2N1cnJfc3ltYm9sOwogIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsKICBjaGFyICpt
b25fZGVjaW1hbF9wb2ludDsKICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsKICBjaGFyICptb25f
Z3JvdXBpbmc7CiAgY2hhciAqcG9zaXRpdmVfc2lnbjsKICBjaGFyICpuZWdhdGl2ZV9zaWduOwog
IGNoYXIgaW50X2ZyYWNfZGlnaXRzOwogIGNoYXIgZnJhY19kaWdpdHM7CgogIGNoYXIgcF9jc19w
cmVjZWRlczsKCiAgY2hhciBwX3NlcF9ieV9zcGFjZTsKCiAgY2hhciBuX2NzX3ByZWNlZGVzOwoK
ICBjaGFyIG5fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgcF9zaWduX3Bvc247CiAgY2hhciBu
X3NpZ25fcG9zbjsKCgogIGNoYXIgaW50X3BfY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50X3Bfc2Vw
X2J5X3NwYWNlOwoKICBjaGFyIGludF9uX2NzX3ByZWNlZGVzOwoKICBjaGFyIGludF9uX3NlcF9i
eV9zcGFjZTsKCgoKCgoKICBjaGFyIGludF9wX3NpZ25fcG9zbjsKICBjaGFyIGludF9uX3NpZ25f
cG9zbjsKIyAxMTkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwp9OwoKCgpleHRlcm4gY2hhciAq
c2V0bG9jYWxlIChpbnQgX19jYXRlZ29yeSwgX19jb25zdCBjaGFyICpfX2xvY2FsZSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIHN0cnVjdCBsY29udiAqbG9jYWxlY29udiAodm9pZCkgdGhyb3cgKCk7CiMg
MTQ5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKZXh0ZXJuIF9fbG9jYWxlX3QgX19uZXdsb2Nh
bGUgKGludCBfX2NhdGVnb3J5X21hc2ssIF9fY29uc3QgY2hhciAqX19sb2NhbGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBfX2xvY2FsZV90IF9fZHVwbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cg
KCk7CgoKCmV4dGVybiB2b2lkIF9fZnJlZWxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRo
cm93ICgpOwoKCn0KIyA1MCAiL3Vzci9pbmNsdWRlL2crKy9jbG9jYWxlIiAyIDMKCgoKCgpuYW1l
c3BhY2Ugc3RkCnsKICB1c2luZyA6Omxjb252OwogIHVzaW5nIDo6c2V0bG9jYWxlOwogIHVzaW5n
IDo6bG9jYWxlY29udjsKfQojIDM3ICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9i
aXRzL2MrK2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMSAzCiMg
MjQgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVz
LmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaCIgMwpleHRlcm4gIkMiIHsKCgp0
eXBlZGVmIHZvaWQgKm5sX2NhdGQ7CgoKdHlwZWRlZiBpbnQgbmxfaXRlbTsKCgpleHRlcm4gbmxf
Y2F0ZCBjYXRvcGVuIChfX2NvbnN0IGNoYXIgKl9fY2F0X25hbWUsIGludCBfX2ZsYWcpIHRocm93
ICgpOwoKCgpleHRlcm4gY2hhciAqY2F0Z2V0cyAobmxfY2F0ZCBfX2NhdGFsb2csIGludCBfX3Nl
dCwgaW50IF9fbnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3N0
cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjYXRjbG9zZSAobmxfY2F0ZCBfX2NhdGFsb2cp
IHRocm93ICgpOwoKfQojIDI1ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMiAzCgojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZv
LmgiIDIgMwoKCmV4dGVybiAiQyIgewojIDQzICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwpl
bnVtCnsKCgoKICBBQkRBWV8xID0gKCgoX19MQ19USU1FKSA8PCAxNikgfCAoMCkpLAoKICBBQkRB
WV8yLAoKICBBQkRBWV8zLAoKICBBQkRBWV80LAoKICBBQkRBWV81LAoKICBBQkRBWV82LAoKICBB
QkRBWV83LAoKCgogIERBWV8xLAoKICBEQVlfMiwKCiAgREFZXzMsCgogIERBWV80LAoKICBEQVlf
NSwKCiAgREFZXzYsCgogIERBWV83LAoKCgogIEFCTU9OXzEsCgogIEFCTU9OXzIsCgogIEFCTU9O
XzMsCgogIEFCTU9OXzQsCgogIEFCTU9OXzUsCgogIEFCTU9OXzYsCgogIEFCTU9OXzcsCgogIEFC
TU9OXzgsCgogIEFCTU9OXzksCgogIEFCTU9OXzEwLAoKICBBQk1PTl8xMSwKCiAgQUJNT05fMTIs
CgoKCiAgTU9OXzEsCgogIE1PTl8yLAoKICBNT05fMywKCiAgTU9OXzQsCgogIE1PTl81LAoKICBN
T05fNiwKCiAgTU9OXzcsCgogIE1PTl84LAoKICBNT05fOSwKCiAgTU9OXzEwLAoKICBNT05fMTEs
CgogIE1PTl8xMiwKCgogIEFNX1NUUiwKCiAgUE1fU1RSLAoKCiAgRF9UX0ZNVCwKCiAgRF9GTVQs
CgogIFRfRk1ULAoKICBUX0ZNVF9BTVBNLAoKCiAgRVJBLAoKICBfX0VSQV9ZRUFSLAoKCgogIEVS
QV9EX0ZNVCwKCiAgQUxUX0RJR0lUUywKCiAgRVJBX0RfVF9GTVQsCgogIEVSQV9UX0ZNVCwKCgog
IF9OTF9USU1FX0VSQV9OVU1fRU5UUklFUywKICBfTkxfVElNRV9FUkFfRU5UUklFUywKCiAgX05M
X1dBQkRBWV8xLAogIF9OTF9XQUJEQVlfMiwKICBfTkxfV0FCREFZXzMsCiAgX05MX1dBQkRBWV80
LAogIF9OTF9XQUJEQVlfNSwKICBfTkxfV0FCREFZXzYsCiAgX05MX1dBQkRBWV83LAoKCiAgX05M
X1dEQVlfMSwKICBfTkxfV0RBWV8yLAogIF9OTF9XREFZXzMsCiAgX05MX1dEQVlfNCwKICBfTkxf
V0RBWV81LAogIF9OTF9XREFZXzYsCiAgX05MX1dEQVlfNywKCgogIF9OTF9XQUJNT05fMSwKICBf
TkxfV0FCTU9OXzIsCiAgX05MX1dBQk1PTl8zLAogIF9OTF9XQUJNT05fNCwKICBfTkxfV0FCTU9O
XzUsCiAgX05MX1dBQk1PTl82LAogIF9OTF9XQUJNT05fNywKICBfTkxfV0FCTU9OXzgsCiAgX05M
X1dBQk1PTl85LAogIF9OTF9XQUJNT05fMTAsCiAgX05MX1dBQk1PTl8xMSwKICBfTkxfV0FCTU9O
XzEyLAoKCiAgX05MX1dNT05fMSwKICBfTkxfV01PTl8yLAogIF9OTF9XTU9OXzMsCiAgX05MX1dN
T05fNCwKICBfTkxfV01PTl81LAogIF9OTF9XTU9OXzYsCiAgX05MX1dNT05fNywKICBfTkxfV01P
Tl84LAogIF9OTF9XTU9OXzksCiAgX05MX1dNT05fMTAsCiAgX05MX1dNT05fMTEsCiAgX05MX1dN
T05fMTIsCgogIF9OTF9XQU1fU1RSLAogIF9OTF9XUE1fU1RSLAoKICBfTkxfV0RfVF9GTVQsCiAg
X05MX1dEX0ZNVCwKICBfTkxfV1RfRk1ULAogIF9OTF9XVF9GTVRfQU1QTSwKCiAgX05MX1dFUkFf
WUVBUiwKICBfTkxfV0VSQV9EX0ZNVCwKICBfTkxfV0FMVF9ESUdJVFMsCiAgX05MX1dFUkFfRF9U
X0ZNVCwKICBfTkxfV0VSQV9UX0ZNVCwKCiAgX05MX1RJTUVfV0VFS19OREFZUywKICBfTkxfVElN
RV9XRUVLXzFTVERBWSwKICBfTkxfVElNRV9XRUVLXzFTVFdFRUssCiAgX05MX1RJTUVfRklSU1Rf
V0VFS0RBWSwKICBfTkxfVElNRV9GSVJTVF9XT1JLREFZLAogIF9OTF9USU1FX0NBTF9ESVJFQ1RJ
T04sCiAgX05MX1RJTUVfVElNRVpPTkUsCgogIF9EQVRFX0ZNVCwKCiAgX05MX1dfREFURV9GTVQs
CgogIF9OTF9USU1FX0NPREVTRVQsCgogIF9OTF9OVU1fTENfVElNRSwKCgoKCiAgX05MX0NPTExB
VEVfTlJVTEVTID0gKCgoX19MQ19DT0xMQVRFKSA8PCAxNikgfCAoMCkpLAogIF9OTF9DT0xMQVRF
X1JVTEVTRVRTLAogIF9OTF9DT0xMQVRFX1RBQkxFTUIsCiAgX05MX0NPTExBVEVfV0VJR0hUTUIs
CiAgX05MX0NPTExBVEVfRVhUUkFNQiwKICBfTkxfQ09MTEFURV9JTkRJUkVDVE1CLAogIF9OTF9D
T0xMQVRFX0dBUDEsCiAgX05MX0NPTExBVEVfR0FQMiwKICBfTkxfQ09MTEFURV9HQVAzLAogIF9O
TF9DT0xMQVRFX1RBQkxFV0MsCiAgX05MX0NPTExBVEVfV0VJR0hUV0MsCiAgX05MX0NPTExBVEVf
RVhUUkFXQywKICBfTkxfQ09MTEFURV9JTkRJUkVDVFdDLAogIF9OTF9DT0xMQVRFX1NZTUJfSEFT
SF9TSVpFTUIsCiAgX05MX0NPTExBVEVfU1lNQl9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJf
RVhUUkFNQiwKICBfTkxfQ09MTEFURV9DT0xMU0VRTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUVdD
LAogIF9OTF9DT0xMQVRFX0NPREVTRVQsCiAgX05MX05VTV9MQ19DT0xMQVRFLAoKCgoKICBfTkxf
Q1RZUEVfQ0xBU1MgPSAoKChfX0xDX0NUWVBFKSA8PCAxNikgfCAoMCkpLAogIF9OTF9DVFlQRV9U
T1VQUEVSLAogIF9OTF9DVFlQRV9HQVAxLAogIF9OTF9DVFlQRV9UT0xPV0VSLAogIF9OTF9DVFlQ
RV9HQVAyLAogIF9OTF9DVFlQRV9DTEFTUzMyLAogIF9OTF9DVFlQRV9HQVAzLAogIF9OTF9DVFlQ
RV9HQVA0LAogIF9OTF9DVFlQRV9HQVA1LAogIF9OTF9DVFlQRV9HQVA2LAogIF9OTF9DVFlQRV9D
TEFTU19OQU1FUywKICBfTkxfQ1RZUEVfTUFQX05BTUVTLAogIF9OTF9DVFlQRV9XSURUSCwKICBf
TkxfQ1RZUEVfTUJfQ1VSX01BWCwKICBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FLAogIENPREVTRVQg
PSBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FLAoKICBfTkxfQ1RZUEVfVE9VUFBFUjMyLAogIF9OTF9D
VFlQRV9UT0xPV0VSMzIsCiAgX05MX0NUWVBFX0NMQVNTX09GRlNFVCwKICBfTkxfQ1RZUEVfTUFQ
X09GRlNFVCwKICBfTkxfQ1RZUEVfSU5ESUdJVFNfTUJfTEVOLAogIF9OTF9DVFlQRV9JTkRJR0lU
UzBfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTMV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMyX01C
LAogIF9OTF9DVFlQRV9JTkRJR0lUUzNfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNF9NQiwKICBf
TkxfQ1RZUEVfSU5ESUdJVFM1X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzZfTUIsCiAgX05MX0NU
WVBFX0lORElHSVRTN19NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM4X01CLAogIF9OTF9DVFlQRV9J
TkRJR0lUUzlfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTX1dDX0xFTiwKICBfTkxfQ1RZUEVfSU5E
SUdJVFMwX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfV0MsCiAgX05MX0NUWVBFX0lORElHSVRT
Ml9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfV0Ms
CiAgX05MX0NUWVBFX0lORElHSVRTNV9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X1dDLAogIF9O
TF9DVFlQRV9JTkRJR0lUUzdfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTOF9XQywKICBfTkxfQ1RZ
UEVfSU5ESUdJVFM5X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDBfTUIsCiAgX05MX0NUWVBFX09V
VERJR0lUMV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQyX01CLAogIF9OTF9DVFlQRV9PVVRESUdJ
VDNfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ1X01C
LAogIF9OTF9DVFlQRV9PVVRESUdJVDZfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUN19NQiwKICBf
TkxfQ1RZUEVfT1VURElHSVQ4X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDlfTUIsCiAgX05MX0NU
WVBFX09VVERJR0lUMF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQxX1dDLAogIF9OTF9DVFlQRV9P
VVRESUdJVDJfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUM19XQywKICBfTkxfQ1RZUEVfT1VURElH
SVQ0X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDVfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUNl9X
QywKICBfTkxfQ1RZUEVfT1VURElHSVQ3X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDhfV0MsCiAg
X05MX0NUWVBFX09VVERJR0lUOV9XQywKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVEFCX1NJWkUsCiAg
X05MX0NUWVBFX1RSQU5TTElUX0ZST01fSURYLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX1RC
TCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9fSURYLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19U
QkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX0RFRkFVTFRfTUlTU0lOR19MRU4sCiAgX05MX0NUWVBF
X1RSQU5TTElUX0RFRkFVTFRfTUlTU0lORywKICBfTkxfQ1RZUEVfVFJBTlNMSVRfSUdOT1JFX0xF
TiwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfSUdOT1JFLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMSwK
ICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzIsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8zLAogIF9OTF9D
VFlQRV9FWFRSQV9NQVBfNCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzUsCiAgX05MX0NUWVBFX0VY
VFJBX01BUF82LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQ
XzgsCiAgX05MX0NUWVBFX0VYVFJBX01BUF85LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTAsCiAg
X05MX0NUWVBFX0VYVFJBX01BUF8xMSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEyLAogIF9OTF9D
VFlQRV9FWFRSQV9NQVBfMTMsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xNCwKICBfTkxfTlVNX0xD
X0NUWVBFLAoKCgoKICBfX0lOVF9DVVJSX1NZTUJPTCA9ICgoKF9fTENfTU9ORVRBUlkpIDw8IDE2
KSB8ICgwKSksCgoKCiAgX19DVVJSRU5DWV9TWU1CT0wsCgoKCiAgX19NT05fREVDSU1BTF9QT0lO
VCwKCgoKICBfX01PTl9USE9VU0FORFNfU0VQLAoKCgogIF9fTU9OX0dST1VQSU5HLAoKCgogIF9f
UE9TSVRJVkVfU0lHTiwKCgoKICBfX05FR0FUSVZFX1NJR04sCgoKCiAgX19JTlRfRlJBQ19ESUdJ
VFMsCgoKCiAgX19GUkFDX0RJR0lUUywKCgoKICBfX1BfQ1NfUFJFQ0VERVMsCgoKCiAgX19QX1NF
UF9CWV9TUEFDRSwKCgoKICBfX05fQ1NfUFJFQ0VERVMsCgoKCiAgX19OX1NFUF9CWV9TUEFDRSwK
CgoKICBfX1BfU0lHTl9QT1NOLAoKCgogIF9fTl9TSUdOX1BPU04sCgoKCiAgX05MX01PTkVUQVJZ
X0NSTkNZU1RSLAoKICBfX0lOVF9QX0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX1BfU0VQX0JZX1NQ
QUNFLAoKCgogIF9fSU5UX05fQ1NfUFJFQ0VERVMsCgoKCiAgX19JTlRfTl9TRVBfQllfU1BBQ0Us
CgoKCiAgX19JTlRfUF9TSUdOX1BPU04sCgoKCiAgX19JTlRfTl9TSUdOX1BPU04sCgoKCiAgX05M
X01PTkVUQVJZX0RVT19JTlRfQ1VSUl9TWU1CT0wsCiAgX05MX01PTkVUQVJZX0RVT19DVVJSRU5D
WV9TWU1CT0wsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfRlJBQ19ESUdJVFMsCiAgX05MX01PTkVU
QVJZX0RVT19GUkFDX0RJR0lUUywKICBfTkxfTU9ORVRBUllfRFVPX1BfQ1NfUFJFQ0VERVMsCiAg
X05MX01PTkVUQVJZX0RVT19QX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX05fQ1Nf
UFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RVT19OX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRB
UllfRFVPX0lOVF9QX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfU0VQX0JZ
X1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVU
QVJZX0RVT19JTlRfTl9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19QX1NJR05fUE9T
TiwKICBfTkxfTU9ORVRBUllfRFVPX05fU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fSU5U
X1BfU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0lHTl9QT1NOLAogIF9OTF9N
T05FVEFSWV9VTk9fVkFMSURfRlJPTSwKICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX1RPLAogIF9O
TF9NT05FVEFSWV9EVU9fVkFMSURfRlJPTSwKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX1RPLAog
IF9OTF9NT05FVEFSWV9DT05WRVJTSU9OX1JBVEUsCiAgX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9J
TlRfV0MsCiAgX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsCiAgX05MX01PTkVUQVJZX0NP
REVTRVQsCiAgX05MX05VTV9MQ19NT05FVEFSWSwKCgoKICBfX0RFQ0lNQUxfUE9JTlQgPSAoKChf
X0xDX05VTUVSSUMpIDw8IDE2KSB8ICgwKSksCgoKCiAgUkFESVhDSEFSID0gX19ERUNJTUFMX1BP
SU5ULAoKICBfX1RIT1VTQU5EU19TRVAsCgoKCiAgVEhPVVNFUCA9IF9fVEhPVVNBTkRTX1NFUCwK
CiAgX19HUk9VUElORywKCgoKICBfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLAogIF9OTF9O
VU1FUklDX1RIT1VTQU5EU19TRVBfV0MsCiAgX05MX05VTUVSSUNfQ09ERVNFVCwKICBfTkxfTlVN
X0xDX05VTUVSSUMsCgogIF9fWUVTRVhQUiA9ICgoKF9fTENfTUVTU0FHRVMpIDw8IDE2KSB8ICgw
KSksCgogIF9fTk9FWFBSLAoKICBfX1lFU1NUUiwKCgoKICBfX05PU1RSLAoKCgogIF9OTF9NRVNT
QUdFU19DT0RFU0VULAogIF9OTF9OVU1fTENfTUVTU0FHRVMsCgogIF9OTF9QQVBFUl9IRUlHSFQg
PSAoKChfX0xDX1BBUEVSKSA8PCAxNikgfCAoMCkpLAogIF9OTF9QQVBFUl9XSURUSCwKICBfTkxf
UEFQRVJfQ09ERVNFVCwKICBfTkxfTlVNX0xDX1BBUEVSLAoKICBfTkxfTkFNRV9OQU1FX0ZNVCA9
ICgoKF9fTENfTkFNRSkgPDwgMTYpIHwgKDApKSwKICBfTkxfTkFNRV9OQU1FX0dFTiwKICBfTkxf
TkFNRV9OQU1FX01SLAogIF9OTF9OQU1FX05BTUVfTVJTLAogIF9OTF9OQU1FX05BTUVfTUlTUywK
ICBfTkxfTkFNRV9OQU1FX01TLAogIF9OTF9OQU1FX0NPREVTRVQsCiAgX05MX05VTV9MQ19OQU1F
LAoKICBfTkxfQUREUkVTU19QT1NUQUxfRk1UID0gKCgoX19MQ19BRERSRVNTKSA8PCAxNikgfCAo
MCkpLAogIF9OTF9BRERSRVNTX0NPVU5UUllfTkFNRSwKICBfTkxfQUREUkVTU19DT1VOVFJZX1BP
U1QsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9BQjIsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9BQjMs
CiAgX05MX0FERFJFU1NfQ09VTlRSWV9DQVIsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9OVU0sCiAg
X05MX0FERFJFU1NfQ09VTlRSWV9JU0JOLAogIF9OTF9BRERSRVNTX0xBTkdfTkFNRSwKICBfTkxf
QUREUkVTU19MQU5HX0FCLAogIF9OTF9BRERSRVNTX0xBTkdfVEVSTSwKICBfTkxfQUREUkVTU19M
QU5HX0xJQiwKICBfTkxfQUREUkVTU19DT0RFU0VULAogIF9OTF9OVU1fTENfQUREUkVTUywKCiAg
X05MX1RFTEVQSE9ORV9URUxfSU5UX0ZNVCA9ICgoKF9fTENfVEVMRVBIT05FKSA8PCAxNikgfCAo
MCkpLAogIF9OTF9URUxFUEhPTkVfVEVMX0RPTV9GTVQsCiAgX05MX1RFTEVQSE9ORV9JTlRfU0VM
RUNULAogIF9OTF9URUxFUEhPTkVfSU5UX1BSRUZJWCwKICBfTkxfVEVMRVBIT05FX0NPREVTRVQs
CiAgX05MX05VTV9MQ19URUxFUEhPTkUsCgogIF9OTF9NRUFTVVJFTUVOVF9NRUFTVVJFTUVOVCA9
ICgoKF9fTENfTUVBU1VSRU1FTlQpIDw8IDE2KSB8ICgwKSksCiAgX05MX01FQVNVUkVNRU5UX0NP
REVTRVQsCiAgX05MX05VTV9MQ19NRUFTVVJFTUVOVCwKCiAgX05MX0lERU5USUZJQ0FUSU9OX1RJ
VExFID0gKCgoX19MQ19JREVOVElGSUNBVElPTikgPDwgMTYpIHwgKDApKSwKICBfTkxfSURFTlRJ
RklDQVRJT05fU09VUkNFLAogIF9OTF9JREVOVElGSUNBVElPTl9BRERSRVNTLAogIF9OTF9JREVO
VElGSUNBVElPTl9DT05UQUNULAogIF9OTF9JREVOVElGSUNBVElPTl9FTUFJTCwKICBfTkxfSURF
TlRJRklDQVRJT05fVEVMLAogIF9OTF9JREVOVElGSUNBVElPTl9GQVgsCiAgX05MX0lERU5USUZJ
Q0FUSU9OX0xBTkdVQUdFLAogIF9OTF9JREVOVElGSUNBVElPTl9URVJSSVRPUlksCiAgX05MX0lE
RU5USUZJQ0FUSU9OX0FVRElFTkNFLAogIF9OTF9JREVOVElGSUNBVElPTl9BUFBMSUNBVElPTiwK
ICBfTkxfSURFTlRJRklDQVRJT05fQUJCUkVWSUFUSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9S
RVZJU0lPTiwKICBfTkxfSURFTlRJRklDQVRJT05fREFURSwKICBfTkxfSURFTlRJRklDQVRJT05f
Q0FURUdPUlksCiAgX05MX0lERU5USUZJQ0FUSU9OX0NPREVTRVQsCiAgX05MX05VTV9MQ19JREVO
VElGSUNBVElPTiwKCgogIF9OTF9OVU0KfTsKIyA1NzUgIi91c3IvaW5jbHVkZS9sYW5naW5mby5o
IiAzCmV4dGVybiBjaGFyICpubF9sYW5naW5mbyAobmxfaXRlbSBfX2l0ZW0pIHRocm93ICgpOwoj
IDU4NiAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMKZXh0ZXJuIGNoYXIgKl9fbmxfbGFuZ2lu
Zm9fbCAobmxfaXRlbSBfX2l0ZW0sIF9fbG9jYWxlX3QgbCk7CgoKfQojIDM4ICIvdXNyL2luY2x1
ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvaWNvbnYuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9pY29udi5oIiAzCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
CiMgMjUgIi91c3IvaW5jbHVkZS9pY29udi5oIiAyIDMKCgpleHRlcm4gIkMiIHsKCgp0eXBlZGVm
IHZvaWQgKmljb252X3Q7CgoKCgpleHRlcm4gaWNvbnZfdCBpY29udl9vcGVuIChfX2NvbnN0IGNo
YXIgKl9fdG9jb2RlLCBfX2NvbnN0IGNoYXIgKl9fZnJvbWNvZGUpCiAgICAgdGhyb3cgKCk7CgoK
CgpleHRlcm4gc2l6ZV90IGljb252IChpY29udl90IF9fY2QsIGNoYXIgKipfX3Jlc3RyaWN0IF9f
aW5idWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX2luYnl0ZXNs
ZWZ0LAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX291dGJ1ZiwKICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fb3V0Ynl0ZXNsZWZ0KTsKCgpl
eHRlcm4gaW50IGljb252X2Nsb3NlIChpY29udl90IF9fY2QpIHRocm93ICgpOwoKfQojIDM5ICIv
dXNyL2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKIyAx
ICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2xpYmludGwu
aCIgMwpleHRlcm4gIkMiIHsKCgoKCmV4dGVybiBjaGFyICpnZXR0ZXh0IChfX2NvbnN0IGNoYXIg
Kl9fbXNnaWQpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZGdldHRleHQgKF9fY29uc3QgY2hh
ciAqX19kb21haW5uYW1lLCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQpCiAgICAgdGhyb3cgKCk7CmV4
dGVybiBjaGFyICpfX2RnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25z
dCBjaGFyICpfX21zZ2lkKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9h
cmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2Rv
bWFpbm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZCwg
aW50IF9fY2F0ZWdvcnkpIHRocm93ICgpOwpleHRlcm4gY2hhciAqX19kY2dldHRleHQgKF9fY29u
c3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19tc2dpZCwgaW50IF9fY2F0ZWdvcnkpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fZm9ybWF0X2FyZ19fICgyKSkpOwoKCgoKZXh0ZXJuIGNoYXIgKm5nZXR0ZXh0IChfX2Nv
bnN0IGNoYXIgKl9fbXNnaWQxLCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQyLAogICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19mb3JtYXRfYXJnX18gKDEpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19f
ICgyKSkpOwoKCgpleHRlcm4gY2hhciAqZG5nZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlu
bmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKSBfX2F0dHJpYnV0ZV9fICgoX19m
b3JtYXRfYXJnX18gKDMpKSk7CgoKCmV4dGVybiBjaGFyICpkY25nZXR0ZXh0IChfX2NvbnN0IGNo
YXIgKl9fZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkMSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IF9fbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2NhdGVnb3J5KQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt
YXRfYXJnX18gKDMpKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnRleHRkb21haW4gKF9fY29uc3QgY2hh
ciAqX19kb21haW5uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0ZG9tYWlu
IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fZGlybmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpiaW5k
X3RleHRkb21haW5fY29kZXNldCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2NvZGVzZXQpIHRo
cm93ICgpOwoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjEu
MS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA5NSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMiAz
CiMgMTE1ICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAzCn0KIyA0MCAiL3Vzci9pbmNsdWRlL2cr
Ky9pNDg2LXN1c2UtbGludXgvYml0cy9jKytsb2NhbGUuaCIgMiAzCgoKCm5hbWVzcGFjZSBzdGQK
ewogIHR5cGVkZWYgX19sb2NhbGVfdCBfX2NfbG9jYWxlOwp9CiMgNDcgIi91c3IvaW5jbHVkZS9n
KysvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9jbGltaXRzIiAx
IDMKIyA0OCAiL3Vzci9pbmNsdWRlL2crKy9jbGltaXRzIiAzCgojIDEgIi91c3IvbGliL2djYy1s
aWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMS4xL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNy
L2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjEuMS9pbmNsdWRlL2xpbWl0cy5oIiAzCiMg
MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zeXNsaW1p
dHMuaCIgMSAzCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4x
LjEvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMyICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3Vz
ZS1saW51eC8zLjEuMS9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0
cy5oIiAxIDMKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFf
bGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiMgMzYgIi91
c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xp
bWl0cy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMwojIDEy
NyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3IvaW5jbHVk
ZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAx
IDMKIyAxNDkgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMveG9wZW5fbGltLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0u
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9p
bmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMveG9w
ZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAxMzcg
Ii91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMKIyAxNTMgIi91c3IvaW5jbHVkZS9s
aW1pdHMuaCIgMiAzCiMgMTMzICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjEu
MS9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1s
aW51eC8zLjEuMS9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9saWIvZ2NjLWxp
Yi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgNTAgIi91c3Iv
aW5jbHVkZS9nKysvY2xpbWl0cyIgMiAzCiMgNDggIi91c3IvaW5jbHVkZS9nKysvYml0cy9sb2Nh
bGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9jY3R5cGUiIDEgMwojIDQ3ICIvdXNy
L2luY2x1ZGUvZysrL2NjdHlwZSIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwoj
IDI5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gIkMiIHsKIyA0MCAiL3Vzci9pbmNs
dWRlL2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDM3ICIvdXNy
L2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAz
CiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgNDEgIi91c3IvaW5jbHVkZS9jdHlw
ZS5oIiAyIDMKCgoKCgoKZW51bQp7CiAgX0lTdXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkp
IDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkpLAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEg
PDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkpID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4
ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEgPDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAo
KDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgpIDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hk
aWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSks
CiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgoMSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkg
Pj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8
PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkg
OiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lTYmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkp
IDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkpLAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEg
PDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkpID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwg
OCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgoMSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0g
PSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkgPDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07
CiMgNzUgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNo
b3J0IGludCAqX19jdHlwZV9iOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG9s
b3dlcjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvdXBwZXI7CiMgOTEgIi91
c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmwgKGlu
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3JhcGggKGludCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0
IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzYmxhbmsgKGludCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50
IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAoaW50IF9fYykgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX3RvbG93ZXIgKGludCkgdGhy
b3cgKCk7CiMgMjIzICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IF9faXNhbG51
bV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNhbHBoYV9sIChp
bnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNjbnRybF9sIChpbnQsIF9f
bG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNkaWdpdF9sIChpbnQsIF9fbG9jYWxl
X3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRo
cm93ICgpOwpleHRlcm4gaW50IF9faXNncmFwaF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgp
OwpleHRlcm4gaW50IF9faXNwcmludF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRl
cm4gaW50IF9faXNwdW5jdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50
IF9faXNzcGFjZV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN1
cHBlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN4ZGlnaXRf
bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX19pc2JsYW5rX2wgKGlu
dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX190b2xvd2VyX2wgKGludCBf
X2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChp
bnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CiMgMjc2ICIvdXNyL2luY2x1ZGUvY3R5
cGUuaCIgMwp9CiMgNTAgIi91c3IvaW5jbHVkZS9nKysvY2N0eXBlIiAyIDMKIyA2NiAiL3Vzci9p
bmNsdWRlL2crKy9jY3R5cGUiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjppc2FsbnVtOwog
IHVzaW5nIDo6aXNhbHBoYTsKICB1c2luZyA6OmlzY250cmw7CiAgdXNpbmcgOjppc2RpZ2l0Owog
IHVzaW5nIDo6aXNncmFwaDsKICB1c2luZyA6OmlzbG93ZXI7CiAgdXNpbmcgOjppc3ByaW50Owog
IHVzaW5nIDo6aXNwdW5jdDsKICB1c2luZyA6Omlzc3BhY2U7CiAgdXNpbmcgOjppc3VwcGVyOwog
IHVzaW5nIDo6aXN4ZGlnaXQ7CiAgdXNpbmcgOjp0b2xvd2VyOwogIHVzaW5nIDo6dG91cHBlcjsK
fQojIDQ5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3Iv
aW5jbHVkZS9nKysvc3RyaW5nIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2crKy9zdHJpbmciIDMK
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9tZW1vcnkiIDEgMwojIDUzICIvdXNyL2luY2x1ZGUv
ZysrL21lbW9yeSIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvZysrL2NzdGRsaWIiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvZysrL2NzdGRs
aWIiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAzMyAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4x
LjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAz
CgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0ZmxhZ3MuaCIg
MSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5o
IiAzCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBzdHJ1Y3QKICAgICAgewoK
ICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAgICB1bnNpZ25lZCBpbnQg
X193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRjb2RlOjg7CiAgICAg
ICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAg
IHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHZhbDo4OwogICAg
ICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsK
CgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDIgMwojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QK
ICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1
Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoK
CgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGxvbmcgaW50IHF1
b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsKICB9IGxsZGl2X3Q7CiMgMTMzICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lk
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IGF0b2kgKF9f
Y29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gZG91YmxlIHN0cnRvZCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHN0cnRvZiAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGlu
dCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAo
KTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgoKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4g
dW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwojIDIxNSAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9sIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25n
IGludCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xv
Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp
bnQgX19zdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19s
b2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu
dCBfX3N0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
YmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgX19z
dHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykK
ICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91
YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9h
dCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRf
aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7
CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBp
bnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpl
eHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVu
c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwg
KF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg
aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91Ymxl
CnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0
ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwg
KF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVk
IGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAg
cmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsK
fQoKCmV4dGVybiBfX2lubGluZSBmbG9hdApzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJu
IF9fc3RydG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxp
bmUgbG9uZyBkb3VibGUKc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xk
X2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4dGVy
biBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkg
dGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs
IF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9u
ZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewog
IHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDAp
Owp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9s
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xs
X2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18g
ZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29uc3Qg
Y2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5h
bCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBkb3Vi
bGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9k
IChfX25wdHIsIChjaGFyICoqKSBfX251bGwpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAo
X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gKGludCkgc3RydG9sIChf
X25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQK
YXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sIChf
X25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9f
aW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAo
KQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CiMg
Mzg0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50
IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19z
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91c3IvaW5jbHVk
ZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwpleHRl
cm4gIkMiIHsKCgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQg
dV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsK
dHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlw
ZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlw
ZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoK
dHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlw
ZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoK
dHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoK
dHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKIyAxMDQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMwp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsK
CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90
OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAxMzYgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMwp0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vjb25kc190OwoKCgp0eXBlZGVmIF9fc3Vz
ZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3Vz
ZS1saW51eC8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVk
ZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsK
IyAxOTAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19h
dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19h
dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19h
dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19h
dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
dV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5z
aWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
X19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAo
KF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CiMgMjE1ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAzMSAiL3Vzci9pbmNs
dWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMK
IyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9zaWdzZXQuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoj
IDQ2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
dGltZS5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCnN0cnVjdCB0aW1l
dmFsCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwog
IH07CiMgNDcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwojIDU1ICIvdXNyL2luY2x1
ZGUvc3lzL3NlbGVjdC5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoKdHlw
ZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6
ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21h
c2sgZmRfbWFzazsKIyA5NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4gIkMi
IHsKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmlj
dCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0
ZWZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywK
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9f
cmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmlj
dCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4
Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVz
dHJpY3QgX190aW1lb3V0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9f
cmVzdHJpY3QgX19zaWdtYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjE2ICIvdXNyL2luY2x1ZGUvc3lz
L3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMg
MjE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3NpemVf
dCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRl
ZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxj
bnRfdDsKIyAyNTcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250
NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlw
ZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDM5MSAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAq
X19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIHRo
cm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIHRocm93
ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAg
IGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAg
ICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwog
IH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3Qg
X19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQp
IHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0
cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBpbml0c3RhdGVf
ciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lk
IHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYW5k
X3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUg
ZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQg
c2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4
ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0
IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9p
ZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg
X194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19z
ZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNp
Z25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0
OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIHRocm93ICgpOwoKCgoKCnN0cnVjdCBk
cmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAgdW5zaWdu
ZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwogICAg
dW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19h
OwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVz
dHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQg
aW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRh
ICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jl
c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0
IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg
IGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBucmFu
ZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAg
ICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZl
ciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp
WzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmlj
dCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9f
cmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVk
dmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sCiAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsK
IyA1MjcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXpl
X3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJu
IHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxv
YyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoK
CmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9p
bmNsdWRlL2FsbG9jYS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAi
L3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIg
MSAzCiMgMjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpl
eHRlcm4gdm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTQ3
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6
ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4
dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxpZ25t
ZW50LCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxv
Y19fKSk7CgoKCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAo
dm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAo
aW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgpOwoK
CgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGNoYXIg
KmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAq
X19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50
IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50
IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0
IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQp
IHRocm93ICgpOwojIDYyMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpt
a3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0
ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2NDAgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7
CiMgNjUwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNo
YXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3Qg
Y2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmNhbm9uaWNhbGl6
ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKIyA2NzIgIi91c3Iv
aW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmlj
dCBfX3Jlc29sdmVkKSB0aHJvdyAoKTsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90
KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgp0eXBlZGVmIF9fY29tcGFyX2Zu
X3QgY29tcGFyaXNvbl9mbl90OwoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZv
aWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoK
ZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBf
X3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0
ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBs
bGFicyAobG9uZyBsb25nIGludCBfX3gpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVu
b20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRp
dl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbGxk
aXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb25nIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDcyOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4
dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVz
dHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24p
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u
ZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpf
X3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAg
ICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3Np
Z24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGlu
dCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwg
aW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZ2N2dCAobG9u
ZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpf
X3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19z
aWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f
bGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u
ZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpf
X3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91
YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz
dHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAg
ICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4g
aW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAg
ICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2ln
biwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19s
ZW4pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywg
c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19z
LCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gc2l6
ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikKICAgICB0
aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3Bv
bnNlKSB0aHJvdyAoKTsKIyA4MDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50
IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAogICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywKICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
dm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBp
bnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubG9ja3B0IChp
bnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVm
LCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwg
aW50IF9fbmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyA1MyAiL3Vzci9pbmNsdWRlL2crKy9jc3Rk
bGliIiAyIDMKIyA4NCAiL3Vzci9pbmNsdWRlL2crKy9jc3RkbGliIiAzCm5hbWVzcGFjZSBzdGQK
ewogIHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAg
dXNpbmcgOjphYnM7CiAgdXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6
YXRvaTsKICB1c2luZyA6OmF0b2w7CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9j
OwogIHVzaW5nIDo6ZGl2OwogIHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcg
OjpnZXRlbnY7CiAgdXNpbmcgOjpsYWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxv
YzsKICB1c2luZyA6Om1ibGVuOwogIHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7
CiAgdXNpbmcgOjpxc29ydDsKICB1c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVz
aW5nIDo6c3JhbmQ7CiAgdXNpbmcgOjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcg
OjpzdHJ0b3VsOwogIHVzaW5nIDo6c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcg
Ojp3Y3RvbWI7CgogIGlubGluZSBsb25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9f
aSk7IH0KCiAgaW5saW5lIGxkaXZfdAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJu
IGxkaXYoX19pLCBfX2opOyB9Cn0KIyAxMzYgIi91c3IvaW5jbHVkZS9nKysvY3N0ZGxpYiIgMwpu
YW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6OmxsZGl2X3Q7CiAgdXNpbmcgOjpfRXhpdDsK
CiAgaW5saW5lIGxvbmcgbG9uZwogIGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0g
MCA/IF9feCA6IC1fX3g7IH0KCiAgaW5saW5lIGxvbmcgbG9uZwogIGxsYWJzKGxvbmcgbG9uZyBf
X3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbGxkaXZfdAog
IGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5x
dW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CgogIGlu
bGluZSBsbGRpdl90CiAgbGxkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkKICB7IGxs
ZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0
dXJuIF9fcTsgfQoKICB1c2luZyA6OmF0b2xsOwogIHVzaW5nIDo6c3RydG9mOwogIHVzaW5nIDo6
c3RydG9sbDsKICB1c2luZyA6OnN0cnRvdWxsOwogIHVzaW5nIDo6c3RydG9sZDsKfQoKbmFtZXNw
YWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRpdl90OwogIHVzaW5nIF9fZ251X2N4eDo6
X0V4aXQ7CiAgdXNpbmcgX19nbnVfY3h4OjphYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGFiczsK
ICB1c2luZyBfX2dudV9jeHg6OmRpdjsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2OwogIHVzaW5n
IF9fZ251X2N4eDo6YXRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2Y7CiAgdXNpbmcgX19n
bnVfY3h4OjpzdHJ0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG91bGw7CiAgdXNpbmcgX19n
bnVfY3h4OjpzdHJ0b2xkOwp9CiMgNjggIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jh
c2UuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKysvbmV3IiAxIDMKIyA0NCAiL3Vzci9pbmNs
dWRlL2crKy9uZXciIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3Mg
YmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2Mo
KSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07Cgog
IHN0cnVjdCBub3Rocm93X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsK
CgogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3
X2hhbmRsZXIobmV3X2hhbmRsZXIpOwp9CiMgNzkgIi91c3IvaW5jbHVkZS9nKysvbmV3IiAzCnZv
aWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9p
ZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZv
aWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtd
KHZvaWQqKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0
ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qs
IGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9p
ZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVb
XSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlubGluZSB2b2lkKiBv
cGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7
IH0KaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRo
cm93KCkgeyByZXR1cm4gX19wOyB9Cgp9CiMgNzAgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxf
YWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfcGFpci5oIiAx
IDMKIyA2NCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0
ZAp7CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7CiAgdHlw
ZWRlZiBfVDEgZmlyc3RfdHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAgX1QxIGZp
cnN0OwogIF9UMiBzZWNvbmQ7CgoKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9CgoK
CgogIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNl
Y29uZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihj
b25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Au
c2Vjb25kKSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwg
X1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29u
ZCA9PSBfX3kuc2Vjb25kOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp
bmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxf
VDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwKICAgICAg
ICAgKCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkg
ewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg
X1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29u
c3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFp
cjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAh
KF9feSA8IF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBi
b29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEs
IF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KIyAxNDAgIi91c3IvaW5jbHVk
ZS9nKysvYml0cy9zdGxfcGFpci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K
CgppbmxpbmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKF9UMSBfX3gsIF9UMiBfX3kpCgoKCnsK
ICByZXR1cm4gcGFpcjxfVDEsIF9UMj4oX194LCBfX3kpOwp9Cgp9CiMgNzIgIi91c3IvaW5jbHVk
ZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRz
L3R5cGVfdHJhaXRzLmgiIDEgMwojIDUzICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvdHlwZV90cmFp
dHMuaCIgMwojIDkwICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1
Y3QgX190cnVlX3R5cGUge307CnN0cnVjdCBfX2ZhbHNlX3R5cGUge307Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhp
c19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyAxMTMgIi91c3IvaW5jbHVkZS9nKysvYml0
cy90eXBlX3RyYWl0cy5oIiAzCiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rl
ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Nv
cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29sPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5z
aWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf
X3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp
c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5z
aWduZWQgaW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9
OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGxvbmc+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBs
b25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190
eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w
bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVj
dCBfSXNfaW50ZWdlciB7CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5
cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2lu
dGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy
PHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50
ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X0lzX2ludGVnZXI8aW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxv
bmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J
bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz
X2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50
ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJh
dG9yIHsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX05vcm1hbDsKfTsKCgpuYW1lc3BhY2UgX19n
bnVfY3h4CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWlu
ZXI+IGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0
b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBfX2du
dV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsKfTsKIyA3MyAiL3Vzci9pbmNsdWRlL2crKy9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJh
dG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRl
cmF0b3JfYmFzZV90eXBlcy5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA4MCAiL3Vzci9pbmNsdWRl
L2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKICBzdHJ1Y3QgaW5wdXRfaXRl
cmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0
IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAg
c3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0
b3JfdGFnIHt9OwoKICBzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMg
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CiMgMTAwICIvdXNyL2luY2x1ZGUvZysrL2Jp
dHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DYXRl
Z29yeSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAg
ICAgICAgdHlwZW5hbWUgX1BvaW50ZXIgPSBfVHAqLCB0eXBlbmFtZSBfUmVmZXJlbmNlID0gX1Rw
Jj4KICAgIHN0cnVjdCBpdGVyYXRvciB7CgogICAgICB0eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRv
cl9jYXRlZ29yeTsKCiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0eXBlZGVm
IF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CgogICAgICB0eXBlZGVmIF9Qb2ludGVyIHBvaW50
ZXI7CgogICAgICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgfTsKCgoKCgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVy
YXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5
cGUgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVu
Y2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9y
Ojpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZl
cmVuY2UgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3Ry
dWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5
cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRl
ZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9U
cCo+IHsKICAgICAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJk
aWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsK
ICAgICAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JdGVyPgogICAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9J
dGVyJikKICAgIHsgcmV0dXJuIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJh
dG9yX2NhdGVnb3J5KCk7IH0KCn0KIyA3NCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2Vf
ZnVuY3MuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3JfYmFz
ZV9mdW5jcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2NvbmNlcHRfY2hlY2suaCIg
MSAzCiMgMzkgIi91c3IvaW5jbHVkZS9nKysvYml0cy9jb25jZXB0X2NoZWNrLmgiIDMKIyA2OSAi
L3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoKCgoK
bmFtZXNwYWNlIHN0ZAp7CnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogIGlubGlu
ZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5
cGUKICBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAoKICAgIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICsrX19maXJzdDsgKytfX247CiAgICB9CiAg
ICByZXR1cm4gX19uOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRv
cj4KICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRv
cj46OmRpZmZlcmVuY2VfdHlwZQogIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICByYW5kb21f
YWNjZXNzX2l0ZXJhdG9yX3RhZykKICB7CgogICAKICAgIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0
OwogIH0KIyAxMTEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5j
cy5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICBkaXN0
YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgewoK
ICAgIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29y
eShfX2ZpcnN0KSk7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg
X0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rp
c3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAogICAgd2hpbGUgKF9fbi0t
KSArK19faTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0
eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX0JpZGlyZWN0aW9u
YWxJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZykKICB7CgogICAKCiAgICBpZiAoX19uID4gMCkKICAgICAgd2hpbGUgKF9f
bi0tKSArK19faTsKICAgIGVsc2UKICAgICAgd2hpbGUgKF9fbisrKSAtLV9faTsKICB9Cgp0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4K
ICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rp
c3RhbmNlIF9fbiwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgewoK
ICAgCiAgICBfX2kgKz0gX19uOwogIH0KIyAxNjQgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxf
aXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9y
LCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBhZHZhbmNlKF9JbnB1dEl0ZXJh
dG9yJiBfX2ksIF9EaXN0YW5jZSBfX24pCiAgewoKICAgIF9fYWR2YW5jZShfX2ksIF9fbiwgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKICB9Cgp9CiMgNzUgIi91c3IvaW5jbHVkZS9nKysvYml0
cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVy
YXRvci5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAz
Cm5hbWVzcGFjZSBzdGQKewojIDg5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9y
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBjbGFzcyByZXZlcnNlX2l0
ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5
cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh
dG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9J
dGVyYXRvciBjdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfSXRlcmF0b3IgaXRl
cmF0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh
dG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5j
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9p
bnRlciBwb2ludGVyOwoKICAgIHB1YmxpYzoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcigpIHsg
fQoKCgoKICAgICAgZXhwbGljaXQKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBl
IF9feCkgOiBjdXJyZW50KF9feCkgeyB9CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0
IHJldmVyc2VfaXRlcmF0b3ImIF9feCkKICAgICAgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7IH0K
CgoKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgICByZXZlcnNlX2l0ZXJh
dG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICAgICAgOiBjdXJyZW50
KF9feC5iYXNlKCkpIHsgfQoKCgoKICAgICAgaXRlcmF0b3JfdHlwZQogICAgICBiYXNlKCkgY29u
c3QgeyByZXR1cm4gY3VycmVudDsgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0
b3IqKCkgY29uc3QKICAgICAgewogICAgICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAg
ICAgICAgcmV0dXJuICotLV9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHBvaW50ZXIKICAgICAg
b3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKCgoKCiAgICAg
IHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgLS1j
dXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNl
X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgcmV2ZXJzZV9p
dGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgIC0tY3VycmVudDsKICAgICAgICByZXR1cm4g
X190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0
b3ItLSgpCiAgICAgIHsKICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCiAgICAg
IHsKICAgICAgICByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgKytjdXJy
ZW50OwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0
ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAgICB7
IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgLSBfX24pOyB9CgoKCgoKCiAgICAgIHJl
dmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikKICAg
ICAgewogICAgICAgIGN1cnJlbnQgLT0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
fQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShkaWZmZXJlbmNl
X3R5cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQg
KyBfX24pOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0o
ZGlmZmVyZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJlbnQgKz0gX19uOwogICAg
ICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3Bl
cmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19u
KTsgfQogICAgfTsKIyAyNjkgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3IuaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVy
YXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAg
ICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJu
IF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0
b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
IT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAg
IGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShf
X3ggPT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194
LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQog
ICAgeyByZXR1cm4gX195IDwgX194OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSB0eXBlbmFtZSByZXZl
cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgb3BlcmF0b3ItKGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2Uo
KSAtIF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5s
aW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgogICAgb3BlcmF0b3IrKHR5cGVuYW1lIHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAg
ICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkKICAgIHsgcmV0dXJu
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0gX19uKTsgfQojIDMyNyAi
L3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1Ymxp
YyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgog
ICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CgogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCiAgICAgIGV4
cGxpY2l0CiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250
YWluZXIoJl9feCkgeyB9CiMgMzUzICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9y
LmgiIDMKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFt
ZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGNv
bnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
fQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVy
biAqdGhpczsgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisr
KCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvcgogICAgICBv
cGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgMzg0ICIvdXNyL2luY2x1
ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFp
bmVyPgogICAgaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBiYWNr
X2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAgIHsgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+KF9feCk7IH0KIyAzOTcgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxf
aXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBm
cm9udF9pbnNlcnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRv
cl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAg
IF9Db250YWluZXIqIGNvbnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250
YWluZXIgY29udGFpbmVyX3R5cGU7CgoKICAgICAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJh
dG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9CiMgNDIyICIvdXNyL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNl
IF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7
CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZyb250X2lu
c2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAg
ICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAq
dGhpczsgfQogICAgfTsKIyA0NTMgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3Iu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgZnJvbnRfaW5z
ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBmcm9udF9pbnNlcnRlcihfQ29udGFpbmVyJiBf
X3gpCiAgICB7IHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsg
fQojIDQ3MCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGluc2VydF9pdGVyYXRvcgogICAgOiBw
dWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9p
ZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwogICAg
ICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwoKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgoKCgogICAgICBpbnNlcnRfaXRl
cmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2kp
CiAgICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30KIyA1MTIgIi91c3IvaW5jbHVk
ZS9nKysvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAg
IG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192
YWx1ZSkKICAgICAgewogICAgICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3Zh
bHVlKTsKICAgICAgICArK2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAg
ICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoK
CiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlz
OyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1
cm4gKnRoaXM7IH0KICAgIH07CiMgNTQ0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJh
dG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyLCB0eXBlbmFtZSBfSXRlcmF0
b3I+CiAgICBpbmxpbmUgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBpbnNlcnRlcihf
Q29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCiAgICB7CiAgICAgIHJldHVybiBpbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yKF9faSkpOwogICAgfQp9Cgpu
YW1lc3BhY2UgX19nbnVfY3h4CnsKCgoKCgoKCiAgdXNpbmcgc3RkOjppdGVyYXRvcl90cmFpdHM7
CiAgdXNpbmcgc3RkOjppdGVyYXRvcjsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5
cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcgogICAgICA6IHB1
YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0
b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9p
bnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
dGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0l0ZXJhdG9y
IF9NX2N1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZl
cmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcmF0b3I+Ojpwb2ludGVyIHBvaW50ZXI7CgogICAgICBfX25vcm1hbF9pdGVyYXRvcigpIDog
X01fY3VycmVudChfSXRlcmF0b3IoKSkgeyB9CgogICAgICBleHBsaWNpdAogICAgICBfX25vcm1h
bF9pdGVyYXRvcihjb25zdCBfSXRlcmF0b3ImIF9faSkgOiBfTV9jdXJyZW50KF9faSkgeyB9CgoK
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICAgIGlubGluZSBfX25vcm1hbF9pdGVy
YXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRhaW5lcj4mIF9faSkKICAg
ICAgICA6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkgeyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAg
IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CgogICAgICBwb2ludGVy
CiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CgogICAgICBf
X25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgKytfTV9jdXJyZW50OyByZXR1
cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50
KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICAgICAgX19u
b3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKSB7IC0tX01fY3VycmVudDsgcmV0dXJu
ICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvci0tKGludCkg
eyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudC0tKTsgfQoKCiAgICAgIHJlZmVy
ZW5jZQogICAgICBvcGVyYXRvcltdKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAog
ICAgICB7IHJldHVybiBfTV9jdXJyZW50W19fbl07IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9y
JgogICAgICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogICAgICB7IF9N
X2N1cnJlbnQgKz0gX19uOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9y
CiAgICAgIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAg
eyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCArIF9fbik7IH0KCiAgICAgIF9f
bm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYg
X19uKQogICAgICB7IF9NX2N1cnJlbnQgLT0gX19uOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9f
bm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9f
bikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCAtIF9f
bik7IH0KCiAgICAgIGRpZmZlcmVuY2VfdHlwZQogICAgICBvcGVyYXRvci0oY29uc3QgX19ub3Jt
YWxfaXRlcmF0b3ImIF9faSkgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3VycmVudCAtIF9faS5f
TV9jdXJyZW50OyB9CgogICAgICBjb25zdCBfSXRlcmF0b3ImCiAgICAgIGJhc2UoKSBjb25zdCB7
IHJldHVybiBfTV9jdXJyZW50OyB9CiAgICB9OwojIDY0OSAiL3Vzci9pbmNsdWRlL2crKy9iaXRz
L3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5h
bWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJh
dG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9f
bGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0Nv
bnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5iYXNlKCk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgog
IGlubGluZSBib29sCiAgb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2Uo
KSA9PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlw
ZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9w
ZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4m
IF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwg
X0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAhPSBfX3Jocy5iYXNl
KCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVy
PgogIGlubGluZSBib29sCiAgb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJh
c2UoKSAhPSBfX3Jocy5iYXNlKCk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckws
IHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wK
ICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5l
cj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JS
LCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFz
ZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5l
cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJh
c2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0
eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAg
b3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+
JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwg
X0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhzLmJhc2Uo
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+
CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2Uo
KSA+IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBl
bmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3Bl
cmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYg
X19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBf
Q29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhzLmJhc2Uo
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+
CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjw9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFz
ZSgpIDw9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0
eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAg
b3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVy
PiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JS
LCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID49IF9fcmhzLmJh
c2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWlu
ZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMu
YmFzZSgpID49IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3Is
IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ciwgX0NvbnRhaW5lcj4KICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQogIHsgcmV0
dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSAr
IF9fbik7IH0KfQojIDc2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg
MwoKCm5hbWVzcGFjZSBzdGQKewojIDkxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9y
d2FyZEl0ZXIyPgogICAgaW5saW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9f
YSwgX0ZvcndhcmRJdGVyMiBfX2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlw
ZSBfVmFsdWVUeXBlMjsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVlVHlw
ZTEgX190bXAgPSAqX19hOwogICAgICAqX19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1wOwog
ICAgfQojIDExOCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoX1RwJiBfX2EsIF9U
cCYgX19iKQogICAgewoKICAgICAKCiAgICAgIF9UcCBfX3RtcCA9IF9fYTsKICAgICAgX19hID0g
X19iOwogICAgICBfX2IgPSBfX3RtcDsKICAgIH0KIyAxNDYgIi91c3IvaW5jbHVkZS9nKysvYml0
cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBj
b25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAgewoK
ICAgICAKCiAgICAgIGlmIChfX2IgPCBfX2EpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9
CiMgMTY2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYg
X19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19hIDwgX19iKSBy
ZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE4NiAiL3Vzci9pbmNsdWRlL2crKy9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29t
cGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0
IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYiwg
X19hKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMDQgIi91c3IvaW5jbHVkZS9n
KysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19h
LCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAgaWYgKF9fY29t
cChfX2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMjIxICIvdXNyL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAg
X19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAg
ewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3Qp
CiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRw
dXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0
YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogICAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgICArK19fcmVzdWx0
OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19m
aXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1v
dmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsK
ICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu
ZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNl
X3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9f
Y29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBf
X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2Zp
cnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9f
Y29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAq
IF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmly
c3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu
bGluZSBfVHAqCiAgICBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCog
X19sYXN0LAogICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7
IHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlu
bGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVl
X3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19j
b3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZXN1bHQuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1RyaXZpYWwoKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0
eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25p
MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAg
X1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5
cGU+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsK
ICAgICAgcmV0dXJuIF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJ
dGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFs
X2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9f
Y29weV9uaTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1h
bCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091
dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf
bm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0
dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAg
ICB9CiMgMzM5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu
ZSBfT3V0cHV0SXRlcgogICAgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBf
X05vcm1hbDsKICAgICAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rp
b25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgaW5saW5lIF9CaWRp
cmVjdGlvbmFsSXRlcjIKICAgIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
Zmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkK
ICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0Owog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Jp
ZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcgogICAgX19jb3B5
X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAg
ICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAg
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSBfX247CiAgICAgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1f
X24pCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3Vs
dDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwg
dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQm9vbFR5
cGU+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCiAgICB7CiAgICAgIHN0YXRp
YyBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2Zp
cnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChf
X2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
dCkpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3Qg
X19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgewog
ICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1Rw
KiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICBjb25zdCBwdHJkaWZmX3Qg
X051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0s
IF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0IC0g
X051bTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0
IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4K
ICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNv
bnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9f
Y29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgICAgICAg
IDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgfQogICAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBf
X2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1
bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czx0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IgX1RyaXZpYWw7CiAgICAgIHJl
dHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+CiAgICAg
ICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgIH0KCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgog
ICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBf
QkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C
STIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX0JJMihfX2NvcHlfYmFja3dh
cmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFzZSgpKSk7IH0KCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5
X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1
bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVu
YW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1h
bF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFs
IF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRl
cmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAg
ICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5l
IF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2Zp
cnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJl
dHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMv
c3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJ
Mj4KICAgIGlubGluZSBfQkkyCiAgICBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBf
X2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46Ol9Ob3JtYWwgX19Ob3Jt
YWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDUwOSAiL3Vzci9pbmNsdWRl
L2crKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoK
ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpfX2Zp
cnN0ID0gX192YWx1ZTsKICAgIH0KIyA1MzEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6
ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZpbGxfbihfT3V0cHV0SXRlciBf
X2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgogICAg
ICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBf
X3ZhbHVlOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKICBpbmxpbmUgdm9pZAogIGZp
bGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LCBjb25zdCB1
bnNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICAg
IG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUg
dm9pZAogIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFyKiBfX2xhc3QsIGNv
bnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAg
ICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xh
c3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChjaGFyKiBfX2ZpcnN0LCBj
aGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7CiAgICBjaGFyIF9fdG1wID0gX19jOwog
ICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19s
YXN0IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGlu
ZSB1bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9TaXpl
IF9fbiwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3Qs
IF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBzaWduZWQgY2hhcioKICAgIGZp
bGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAg
ICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJu
IF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5s
aW5lIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBjaGFy
JiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAg
ICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMgNjA2ICIvdXNyL2luY2x1ZGUvZysrL2Jp
dHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw
ZW5hbWUgX0lucHV0SXRlcjI+CiAgICBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4KICAg
IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoK
ICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAqX19maXJzdDEgPT0g
Kl9fZmlyc3QyKSB7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICArK19fZmlyc3QyOwogICAg
ICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEs
IF9fZmlyc3QyKTsKICAgIH0KIyA2NDAgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jh
c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ
dGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9J
bnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAg
IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAg
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAg
ICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3Qx
LCBfX2ZpcnN0Mik7CiAgICB9CiMgNjY4ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0
SXRlcjI+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsK
CiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsg
KytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoISgqX19maXJzdDEgPT0gKl9fZmly
c3QyKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMg
Njk5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9CaW5h
cnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEgX19maXJz
dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwK
ICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAg
ICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19m
aXJzdDIpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkK
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNzMyICIv
dXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBsZXhpY29n
cmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5w
dXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAg
Zm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAg
ICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8
ICpfX2ZpcnN0MikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmICgqX19maXJzdDIg
PCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJu
IF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0KIyA3Njcg
Ii91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+
CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZvciAo
IDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgICAg
IDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qx
LCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKF9fY29tcCgq
X19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAg
ICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAg
IH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25l
ZCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgdW5z
aWduZWQgY2hhciogX19sYXN0MikKICB7CiAgICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0
MSAtIF9fZmlyc3QxOwogICAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0
MjsKICAgIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1p
bihfX2xlbjEsIF9fbGVuMikpOwogICAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8
IDAgOiBfX2xlbjEgPCBfX2xlbjI7CiAgfQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dyYXBoaWNh
bF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBf
X2xhc3QyKQogIHsKCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNp
Z25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoKICB9
Cgp9CiMgNTUgIi91c3IvaW5jbHVkZS9nKysvbWVtb3J5IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv
ZysrL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDg0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3Rs
X2FsbG9jLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2Nhc3NlcnQiIDEgMwojIDQ3ICIvdXNy
L2luY2x1ZGUvZysrL2Nhc3NlcnQiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMK
IyA2NSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lk
IF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAq
X19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBf
X2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
bm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19l
cnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAq
X19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQojIDQ5ICIvdXNyL2luY2x1ZGUv
ZysrL2Nhc3NlcnQiIDIgMwojIDg1ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgi
IDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAi
L3Vzci9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
ZysrL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMv
ZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgog
IHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlw
ZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv
aWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1l
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQoj
IDg2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvaW5j
bHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2crKy9i
aXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIHN0cnVjdCBfUmVmY291
bnRfQmFzZQogIHsKCiAgICB0eXBlZGVmIHNpemVfdCBfUkNfdDsKCgogICAgdm9sYXRpbGUgX1JD
X3QgX01fcmVmX2NvdW50OwoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9yZWZfY291bnRfbG9j
azsKCiAgICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50KF9fbikKICAg
IHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0gezAsIDAsIDAsIFBUSFJFQURfTVVU
RVhfVElNRURfTlAsIHsgMCwgMCB9fTsKICAgICAgX01fcmVmX2NvdW50X2xvY2sgPSBfX3RtcDsK
CgoKCgogICAgfQoKICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAgewogICAgICBfX2d0aHJlYWRf
bXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICArK19NX3JlZl9jb3VudDsKICAg
ICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgfQoKICAg
IF9SQ190CiAgICBfTV9kZWNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9N
X3JlZl9jb3VudF9sb2NrKTsKICAgICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAtLV9NX3JlZl9j
b3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwog
ICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsKIyAxMDkgIi91c3IvaW5jbHVkZS9nKysvYml0
cy9zdGxfdGhyZWFkcy5oIiAzCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBzdHJ1Y3QgX1N3
YXBfbG9ja19zdHJ1Y3QKICAgIHsgc3RhdGljIF9fZ3RocmVhZF9tdXRleF90IF9TX3N3YXBfbG9j
azsgfTsKCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBfX2d0aHJlYWRfbXV0ZXhfdAogICAg
X1N3YXBfbG9ja19zdHJ1Y3Q8X19kdW1teT46Ol9TX3N3YXBfbG9jayA9IHswLCAwLCAwLCBQVEhS
RUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX07CgoKCiAgaW5saW5lIHVuc2lnbmVkIGxvbmcK
ICBfQXRvbWljX3N3YXAodW5zaWduZWQgbG9uZyAqIF9fcCwgdW5zaWduZWQgbG9uZyBfX3EpCiAg
ewogICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2Fw
X2xvY2spOwogICAgdW5zaWduZWQgbG9uZyBfX3Jlc3VsdCA9ICpfX3A7CiAgICAqX19wID0gX19x
OwogICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3
YXBfbG9jayk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQojIDE1MSAiL3Vzci9pbmNsdWRlL2cr
Ky9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICBzdHJ1Y3QgX1NUTF9tdXRleF9sb2NrCiAgewoKCgoK
CiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOwoKICAgIHZvaWQKICAgIF9NX2luaXRpYWxp
emUoKQogICAgewojIDE4NCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF90aHJlYWRzLmgiIDMK
ICAgIH0KCiAgICB2b2lkCiAgICBfTV9hY3F1aXJlX2xvY2soKQogICAgewoKCgogICAgICBfX2d0
aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7CiAgICB9CgogICAgdm9pZAogICAgX01fcmVsZWFz
ZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fbG9jayk7
CiAgICB9CiAgfTsKIyAyMjAgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAz
CiAgc3RydWN0IF9TVExfYXV0b19sb2NrCiAgewogICAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2Nr
OwoKICAgIF9TVExfYXV0b19sb2NrKF9TVExfbXV0ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2so
X19sb2NrKQogICAgeyBfTV9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9CgogICAgfl9TVExfYXV0
b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9CgogIHByaXZhdGU6CiAgICB2
b2lkIG9wZXJhdG9yPShjb25zdCBfU1RMX2F1dG9fbG9jayYpOwogICAgX1NUTF9hdXRvX2xvY2so
Y29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICB9OwoKfQojIDg3ICIvdXNyL2luY2x1ZGUvZysrL2Jp
dHMvc3RsX2FsbG9jLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgOTggIi91c3IvaW5jbHVkZS9n
KysvYml0cy9zdGxfYWxsb2MuaCIgMwogIGNsYXNzIF9fbmV3X2FsbG9jCiAgewogIHB1YmxpYzoK
ICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDo6
b3BlcmF0b3IgbmV3KF9fbik7IH0KCiAgICBzdGF0aWMgdm9pZAogICAgZGVhbGxvY2F0ZSh2b2lk
KiBfX3AsIHNpemVfdCkKICAgIHsgOjpvcGVyYXRvciBkZWxldGUoX19wKTsgfQogIH07CiMgMTIx
ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZSA8aW50IF9f
aW5zdD4KICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlCiAgICB7CiAgICBwcml2YXRl
OgogICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwogICAgICBzdGF0aWMg
dm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CiAgICAgIHN0YXRpYyB2b2lkICgq
IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGlj
IHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICB2b2lkKiBf
X3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3Vs
dCA9IF9TX29vbV9tYWxsb2MoX19uKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0K
CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgKQog
ICAgICB7IGZyZWUoX19wKTsgfQoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIHJlYWxsb2NhdGUo
dm9pZCogX19wLCBzaXplX3QgLCBzaXplX3QgX19uZXdfc3opCiAgICAgIHsKICAgICAgICB2b2lk
KiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICAgICAgaWYgKDAgPT0gX19y
ZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICAgICAg
cmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAgICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxs
b2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogICAgICB7CiAgICAgICAgdm9pZCAoKiBfX29s
ZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIF9fbWFsbG9jX2FsbG9j
X29vbV9oYW5kbGVyID0gX19mOwogICAgICAgIHJldHVybihfX29sZCk7CiAgICAgIH0KICAgIH07
CgoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQgKCogX19tYWxsb2NfYWxsb2NfdGVt
cGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoKICB0ZW1w
bGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf
X2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCogX19t
eV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7
KQogICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxv
Y19vb21faGFuZGxlcjsKICAgICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpCiAg
ICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxs
b2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAg
ICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQog
ICAgfQoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxv
Y190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBfX24p
CiAgICB7CiAgICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCog
X19yZXN1bHQ7CgogICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9j
X2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICAgIGlmICgwID09
IF9fbXlfbWFsbG9jX2hhbmRsZXIpCiAgICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2Mo
KTsKICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0
ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAg
IHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQoKCgoKCgogIHR5cGVkZWYgX19uZXdf
YWxsb2MgX19tZW1faW50ZXJmYWNlOwojIDIxOSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9h
bGxvYy5oIiAzCiAgdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CiAgY2xhc3MgX19z
aW1wbGVfYWxsb2MKICB7CiAgcHVibGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90
IF9fbikKICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRl
KF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZSgpCiAgICB7
IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9CgogICAgc3Rh
dGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgaWYgKDAgIT0g
X19uKSBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9CgogICAg
c3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRl
KF9fcCwgc2l6ZW9mIChfVHApKTsgfQogIH07CiMgMjUxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMv
c3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgogIGNsYXNzIF9fZGVidWdf
YWxsb2MKICB7CiAgcHJpdmF0ZToKICAgIGVudW0ge19TX2V4dHJhID0gOH07CgoKICBwdWJsaWM6
CgogICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7CiAgICAgIGNoYXIq
IF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEp
OwogICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICAgIHJldHVybiBfX3Jlc3VsdCAr
IChpbnQpIF9TX2V4dHJhOwogICAgfQoKICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCog
X19wLCBzaXplX3QgX19uKQogICAgewogICAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3Ag
LSAoaW50KSBfU19leHRyYTsKICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9f
cmVhbF9wID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3Ag
PT0gX19uIiwgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIsIDI3MCwgX19QUkVU
VFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwg
X19uICsgKGludCkgX1NfZXh0cmEpOwogICAgfQoKICAgIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRl
KHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opCiAgICB7CiAgICAg
IGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgICAoc3Rh
dGljX2Nhc3Q8dm9pZD4gKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3opID8gMCA6IChf
X2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiwgIi91c3IvaW5j
bHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIsIDI3NywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDAp
KSk7CiAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQogICAgICAgIF9BbGxvYzo6cmVhbGxv
Y2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50KSBfU19leHRyYSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N6ICsgKGludCkgX1NfZXh0cmEpOwogICAgICAq
KHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGlu
dCkgX1NfZXh0cmE7CiAgICB9CiAgfTsKIyAzMjQgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxf
YWxsb2MuaCIgMwp0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBjbGFzcyBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGUKICB7CiAgcHJpdmF0ZToKICAgIGVudW0ge19BTElHTiA9
IDh9OwogICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICBlbnVtIHtfTkZSRUVMSVNUUyA9
IF9NQVhfQllURVMgLyBfQUxJR059OwoKICAgIHVuaW9uIF9PYmoKICAgIHsKICAgICAgdW5pb24g
X09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFbMV07CiAg
ICB9OwoKICAgIHN0YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xpc3RbX05GUkVFTElTVFNd
OwoKCiAgICBzdGF0aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsKICAgIHN0YXRpYyBjaGFyKiBfU19l
bmRfZnJlZTsKICAgIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOwoKICAgIHN0YXRpYyBfU1RM
X211dGV4X2xvY2sgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jazsKCiAgICBzdGF0aWMgc2l6ZV90CiAg
ICBfU19yb3VuZF91cChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsg
KHNpemVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7IH0KCiAgICBzdGF0
aWMgc2l6ZV90CiAgICBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0
dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdClfQUxJR04tMSkvKHNpemVfdClfQUxJR04gLSAxKTsg
fQoKCgogICAgc3RhdGljIHZvaWQqCiAgICBfU19yZWZpbGwoc2l6ZV90IF9fbik7CgoKCiAgICBz
dGF0aWMgY2hhcioKICAgIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jq
cyk7CgoKCiAgICBjbGFzcyBfTG9jawogICAgewogICAgcHVibGljOgogICAgICBfTG9jaygpIHsg
aWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsg
fQogICAgICB+X0xvY2soKSB7IGlmIChfX3RocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2su
X01fcmVsZWFzZV9sb2NrKCk7IH0KICAgIH0gX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsK
ICAgIGZyaWVuZCBjbGFzcyBfTG9jazsKCiAgcHVibGljOgoKICAgIHN0YXRpYyB2b2lkKgogICAg
YWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCogX19yZXQgPSAwOwoKICAgICAg
aWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpCiAgICAgICAgX19yZXQgPSBfX21lbV9pbnRl
cmZhY2U6OmFsbG9jYXRlKF9fbik7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfT2Jq
KiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QKICAgICAgICAgICAgKyBf
U19mcmVlbGlzdF9pbmRleChfX24pOwoKCgogICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNl
OwogICAgICAgICAgX09iaiogX19yZXN0cmljdF9fIF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0
OwogICAgICAgICAgaWYgKF9fcmVzdWx0ID09IDApCiAgICAgICAgICAgIF9fcmV0ID0gX1NfcmVm
aWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01fZnJlZV9saXN0X2xpbms7
CiAgICAgICAgICAgICAgX19yZXQgPSBfX3Jlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfTsKCgogICAgc3RhdGljIHZvaWQKICAgIGRlYWxsb2Nh
dGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewogICAgICBpZiAoX19uID4gKHNpemVfdCkg
X01BWF9CWVRFUykKICAgICAgICBfX21lbV9pbnRlcmZhY2U6OmRlYWxsb2NhdGUoX19wLCBfX24p
OwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJl
ZV9saXN0CiAgICAgICAgICAgID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19u
KTsKICAgICAgICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCiAgICAgICAgICBfTG9jayBf
X2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19t
eV9mcmVlX2xpc3Q7CiAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7CiAgICAgICAgfQog
ICAgfQoKICAgIHN0YXRpYyB2b2lkKgogICAgcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBf
X29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsKICB9OwoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVh
ZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX2Rl
ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAgICAg
Y29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCiAgICB7
IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgog
ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0K
CgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhcioKICAg
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2Fs
bG9jKHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpCiAgICB7CiAgICAgIGNoYXIq
IF9fcmVzdWx0OwogICAgICBzaXplX3QgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7
CiAgICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7
CgogICAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpCiAgICAgIHsKICAgICAg
ICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3Rv
dGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgIH0KICAgICAgZWxzZSBp
ZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX25vYmpzID0g
KGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAgICAgICAgICBfX3RvdGFsX2J5dGVzID0gX19z
aXplICogX19ub2JqczsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAg
ICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybihfX3Jl
c3VsdCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9f
Ynl0ZXNfdG9fZ2V0ID0KICAgICAgICAgICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91
cChfU19oZWFwX3NpemUgPj4gNCk7CgogICAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Qg
PQogICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRl
c19sZWZ0KTsKCiAgICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVl
X2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAqX19teV9mcmVlX2xp
c3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgICAgfQogICAgICAgICAgX1Nfc3Rh
cnRfZnJlZSA9IChjaGFyKikgX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dl
dCk7CiAgICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9mcmVlKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9m
cmVlX2xpc3Q7CiAgICAgICAgICAgICAgX09iaiogX19wOwoKCgogICAgICAgICAgICAgIF9faSA9
IF9fc2l6ZTsKICAgICAgICAgICAgICBmb3IgKDsgX19pIDw9IChzaXplX3QpIF9NQVhfQllURVM7
IF9faSArPSAoc2l6ZV90KSBfQUxJR04pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19p
KTsKICAgICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAg
ICAgICBpZiAoMCAhPSBfX3ApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAg
ICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAgICAg
ICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2k7CiAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CgoKICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX1NfZW5kX2Zy
ZWUgPSAwOwogICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19tZW1faW50ZXJm
YWNlOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoKICAgICAgICAgICAgfQogICAgICAgICAg
X1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgX1NfZW5kX2ZyZWUgPSBf
U19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAgICAgICByZXR1cm4oX1NfY2h1bmtf
YWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICAgICAgfQogICAgfQoKCgoKCiAgdGVtcGxhdGU8
Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pCiAgICB7
CiAgICAgIGludCBfX25vYmpzID0gMjA7CiAgICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19h
bGxvYyhfX24sIF9fbm9ianMpOwogICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7
CiAgICAgIF9PYmoqIF9fcmVzdWx0OwogICAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwogICAgICBf
T2JqKiBfX25leHRfb2JqOwogICAgICBpbnQgX19pOwoKICAgICAgaWYgKDEgPT0gX19ub2Jqcykg
cmV0dXJuKF9fY2h1bmspOwogICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9T
X2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsK
ICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9f
bik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgewogICAgICAgIF9fY3VycmVudF9vYmog
PSBfX25leHRfb2JqOwogICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRf
b2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7CiAgICAgICAgICBf
X2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgIGJyZWFrOwog
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9s
aW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuKF9fcmVzdWx0
KTsKICAgIH0KCgogIHRlbXBsYXRlPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CiAgICB2b2lkKgog
ICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZv
aWQqIF9fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6KQogICAgewogICAgICB2b2lk
KiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fY29weV9zejsKCiAgICAgIGlmIChfX29sZF9zeiA+
IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7
CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAgICB9CiAgICAgIGlm
IChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19uZXdfc3opKSByZXR1cm4o
X19wKTsKICAgICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAgICAgIF9fY29weV9z
eiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19uZXdfc3o7CiAgICAgIG1lbWNw
eShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRf
c3opOwogICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTxib29sIF9fdGhy
ZWFkcywgaW50IF9faW5zdD4KICBfU1RMX211dGV4X2xvY2sKICBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrCiAgPSB7IHsw
LCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX0gfTsKCiAgdGVtcGxhdGU8
Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRfZnJlZSA9IDA7CgogIHRlbXBsYXRlPGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIGNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBf
X3RocmVhZHMsIGludCBfX2luc3Q+CiAgc2l6ZV90IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf
X3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0PgogIHR5cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf
X3RocmVhZHMsIF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCiAgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgdHlw
ZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4gX19hbGxvYzsKICB0eXBlZGVm
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwgMD4gX19zaW5nbGVfY2xpZW50X2FsbG9j
OwojIDYxMyAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CmNsYXNzIGFsbG9jYXRvcgp7CiAgdHlwZWRlZiBfX2FsbG9jIF9BbGxvYzsKcHVi
bGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm
ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAq
IGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0
IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBs
YXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9U
cDE+IG90aGVyOwogIH07CgogIGFsbG9jYXRvcigpIHRocm93KCkge30KICBhbGxvY2F0b3IoY29u
c3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0
b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSB7fQogIH5hbGxvY2F0b3IoKSB0aHJv
dygpIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAm
X194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0
IHsgcmV0dXJuICZfX3g7IH0KCgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0
IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0Fs
bG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAw
OwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAg
IHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVf
dHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBz
aXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBf
X3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19w
KSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7
CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3Qg
ZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0
IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBs
YXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9U
cDE+IG90aGVyOwogIH07Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9y
PF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U
Mj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFs
bG9jYXRvcjxfVDI+JikKewogIHJldHVybiBmYWxzZTsKfQojIDY5NSAiL3Vzci9pbmNsdWRlL2cr
Ky9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
c3RydWN0IF9fYWxsb2NhdG9yCnsKICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBl
ZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBl
OwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2lu
dGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0
X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxv
Yz4gb3RoZXI7CiAgfTsKCiAgX19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3Io
Y29uc3QgX19hbGxvY2F0b3ImIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2Mo
X19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2Fs
bG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAg
IDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxs
b2NhdG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29u
c3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVu
Y2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlw
ZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBz
dGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9m
KF9UcCkpKQogICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3As
IHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwg
X19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93
KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0
cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwp
OyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0
eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90
eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0
X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBf
VHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9j
PiBvdGhlcjsKICB9Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9f
YTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlp
bmdfYWxsb2M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7
CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2Fs
bG9jOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8aW50IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVl
Owp9Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBf
X21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBf
X2RlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVi
dWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4m
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsK
ICByZXR1cm4gZmFsc2U7Cn0KIyA4NDAgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2Mu
aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9j
X3RyYWl0cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIg
YWxsb2NhdG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9y
Pgpjb25zdCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2Vs
ZXNzOwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJh
aXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3Rh
bmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+IF9B
bGxvY190eXBlOwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf
VHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJv
b2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwg
X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYg
X19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2Nh
dG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBf
X2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PF9fdGhyZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl
c3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5
cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
LCBfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2Fs
bG9jPF9BbGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1
ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4g
X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0Fs
bG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X1RwMSwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAg
ICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBl
ZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+
IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190
ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFp
dHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Rociwg
X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7
CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf
X3RocixfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0
b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAg
ICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBj
bGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwg
X19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu
Y2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxv
YzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVi
dWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKCiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIGFsbG9jYXRvcjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2Nh
dG9yPHdjaGFyX3Q+OwoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8dHJ1ZSwgMD47Cgp9CiMgNTYgIi91c3IvaW5jbHVkZS9nKysvbWVtb3J5IiAyIDMK
IyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2NyAiL3Vz
ci9pbmNsdWRlL2crKy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoK
CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CiAgICBpbmxpbmUgdm9pZAogICAg
X0NvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKQogICAgeyBuZXcgKHN0YXRp
Y19jYXN0PHZvaWQqPihfX3ApKSBfVDEoX192YWx1ZSk7IH0KCgoKCgoKCiAgdGVtcGxhdGUgPGNs
YXNzIF9UMT4KICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3RydWN0KF9UMSogX19wKQogICAgeyBu
ZXcgKHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoKTsgfQojIDk4ICIvdXNyL2luY2x1ZGUv
ZysrL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsg
fQojIDExMiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9fZGVzdHJv
eV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpCiAg
ICB7IH0KCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9E
ZXN0cm95KF9UcCogX19wb2ludGVyKQogICAgeyBfX3BvaW50ZXItPn5fVHAoKTsgfQojIDEzNCAi
L3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9Gb3J3YXJk
SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90
eXBlCiAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVfdHlwZT46Omhhc190cml2aWFsX2Rlc3RydWN0b3IK
ICAgICAgICAgICAgICAgICAgICAgICBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKCiAgICAgIF9f
ZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsK
ICAgIH0KfQojIDU3ICIvdXNyL2luY2x1ZGUvZysrL21lbW9yeSIgMiAzCgojIDEgIi91c3IvaW5j
bHVkZS9nKysvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRl
L2crKy9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5s
aW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1
ZV90eXBlKQogICAgeyByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAg
ICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNl
X3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogICAgICB0
cnkgewogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX2N1
cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgICAgIHJldHVy
biBfX2N1cjsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rl
c3Ryb3koX19yZXN1bHQsIF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0K
IyAxMDYgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5s
aW5lIF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlw
ZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVl
VHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRf
Y29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKICAgIH0KCiAg
aW5saW5lIGNoYXIqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3QsIGNv
bnN0IGNoYXIqIF9fbGFzdCwgY2hhciogX19yZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jlc3Vs
dCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoX19s
YXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgd2NoYXJfdCoKICB1bmluaXRpYWxpemVkX2Nv
cHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0
LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAgcmV0
dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3Vu
aW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1
ZV90eXBlKQogICAgeyBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fdW5pbml0
aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90
eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICB0cnkg
ewogICAgICAgIGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICAgICAgX0Nv
bnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7
CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsKICAg
ICAgICB9CiAgICB9CiMgMTY0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX3VuaW5pdGlhbGl6
ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgog
ICAgaW5saW5lIHZvaWQKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1Zh
bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+
Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19m
aXJzdCwgX19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5l
IF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9UcCYgX194LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0
LCBfX24sIF9feCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw
ZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRp
YWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCiAg
ICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgIHRyeSB7CiAgICAg
ICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3Qo
JipfX2N1ciwgX194KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0Y2go
Li4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgICAg
ICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAyMTAgIi91c3IvaW5jbHVkZS9nKysvYml0cy9z
dGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0
eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAg
dW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29u
c3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAg
ICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9J
c19QT0QoKSk7CiAgICB9CiMgMjI3ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX3VuaW5pdGlh
bGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w
dXRJdGVyMiwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgog
ICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIg
X19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlk
ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAg
IHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0
MiwgX19taWQpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBf
RGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAg
fQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlw
ZW5hbWUgX0lucHV0SXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFs
aXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
KQogICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwog
ICAgICB0cnkgewogICAgICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19s
YXN0LCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAg
IF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAg
ICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJk
SXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9j
b3B5X2ZpbGwoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkK
ICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2Zp
cnN0MSwgX19sYXN0MSwgX19maXJzdDIpOwogICAgICB0cnkgewogICAgICAgIHVuaW5pdGlhbGl6
ZWRfZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQog
ICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOwogICAgICAgICAg
dGhyb3c7CiAgICAgICAgfQogICAgfQoKfQojIDU5ICIvdXNyL2luY2x1ZGUvZysrL21lbW9yeSIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEg
MwojIDY0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMwpu
YW1lc3BhY2Ugc3RkCnsKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNs
YXNzIF9UcD4KICBjbGFzcyByYXdfc3RvcmFnZV9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0
b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAg
IHByb3RlY3RlZDoKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfTV9pdGVyOwoKICAgIHB1YmxpYzoK
ICAgICAgZXhwbGljaXQKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRv
ciBfX3gpIDogX01faXRlcihfX3gpIHt9CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvciYKICAg
ICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX2VsZW1lbnQpCiAgICAgIHsKICAgICAg
ICBfQ29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50KTsKICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9U
cD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgKytfTV9pdGVyOwogICAgICAg
IHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0Zvcndh
cmRJdGVyYXRvciwgX1RwPgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIHJh
d19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4gX190bXAgPSAqdGhpczsK
ICAgICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CiAgICB9Owp9
CiMgNjAgIi91c3IvaW5jbHVkZS9nKysvbWVtb3J5IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoK
CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogIHBhaXI8X1RwKiwgcHRyZGlmZl90PgogIF9fZ2V0
X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQogIHsKICAgIGlmIChfX2xl
biA+IHB0cmRpZmZfdCgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICBfX2xlbiA9IDIx
NDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgIF9U
cCogX190bXAgPSAoX1RwKikgc3RkOjptYWxsb2MoKHN0ZDo6c2l6ZV90KV9fbGVuICogc2l6ZW9m
KF9UcCkpOwogICAgICBpZiAoX190bXAgIT0gMCkKICAgICAgICByZXR1cm4gcGFpcjxfVHAqLCBw
dHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAgICAgIF9fbGVuIC89IDI7CiAgICB9CgogICAgcmV0
dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PigoX1RwKikwLCAwKTsKICB9CiMgMTAyICIvdXNyL2lu
Y2x1ZGUvZysrL21lbW9yeSIgMwogIHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAgaW5saW5lIHBhaXI8
X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4pIHsK
ICAgIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7CiAgfQoj
IDExNCAiL3Vzci9pbmNsdWRlL2crKy9tZW1vcnkiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgog
IHZvaWQgcmV0dXJuX3RlbXBvcmFyeV9idWZmZXIoX1RwKiBfX3ApIHsKICAgIHN0ZDo6ZnJlZShf
X3ApOwogIH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBzdHJ1Y3QgYXV0b19wdHJfcmVmCnsK
ICAgX1RwMSogX01fcHRyOwogICBhdXRvX3B0cl9yZWYoX1RwMSogX19wKSA6IF9NX3B0cihfX3Ap
IHt9Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogIGNsYXNzIGF1dG9fcHRyCnsKcHJpdmF0
ZToKICBfVHAqIF9NX3B0cjsKCnB1YmxpYzoKICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7Cgog
IGV4cGxpY2l0IGF1dG9fcHRyKF9UcCogX19wID0gMCkgdGhyb3coKSA6IF9NX3B0cihfX3ApIHt9
CiAgYXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3coKSA6IF9NX3B0cihfX2EucmVsZWFzZSgp
KSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYXV0b19wdHIoYXV0b19wdHI8X1RwMT4mIF9f
YSkgdGhyb3coKQogICAgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkge30KCiAgYXV0b19wdHImIG9w
ZXJhdG9yPShhdXRvX3B0ciYgX19hKSB0aHJvdygpIHsKICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkp
OwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgYXV0b19w
dHImIG9wZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpIHsKICAgIHJlc2V0KF9f
YS5yZWxlYXNlKCkpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCgoKCgogIH5hdXRvX3B0cigpIHsg
ZGVsZXRlIF9NX3B0cjsgfQoKICBfVHAmIG9wZXJhdG9yKigpIGNvbnN0IHRocm93KCkgewogICAg
cmV0dXJuICpfTV9wdHI7CiAgfQogIF9UcCogb3BlcmF0b3ItPigpIGNvbnN0IHRocm93KCkgewog
ICAgcmV0dXJuIF9NX3B0cjsKICB9CiAgX1RwKiBnZXQoKSBjb25zdCB0aHJvdygpIHsKICAgIHJl
dHVybiBfTV9wdHI7CiAgfQogIF9UcCogcmVsZWFzZSgpIHRocm93KCkgewogICAgX1RwKiBfX3Rt
cCA9IF9NX3B0cjsKICAgIF9NX3B0ciA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQogIHZvaWQg
cmVzZXQoX1RwKiBfX3AgPSAwKSB0aHJvdygpIHsKICAgIGlmIChfX3AgIT0gX01fcHRyKSB7CiAg
ICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9IF9fcDsKICAgIH0KICB9CgpwdWJsaWM6
CiAgYXV0b19wdHIoYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93KCkKICAgIDogX01fcHRy
KF9fcmVmLl9NX3B0cikge30KCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0cl9yZWY8X1Rw
PiBfX3JlZikgdGhyb3coKSB7CiAgICBpZiAoX19yZWYuX01fcHRyICE9IHRoaXMtPmdldCgpKSB7
CiAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgIH0K
ICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVyYXRvciBh
dXRvX3B0cl9yZWY8X1RwMT4oKSB0aHJvdygpCiAgICB7IHJldHVybiBhdXRvX3B0cl9yZWY8X1Rw
Pih0aGlzLT5yZWxlYXNlKCkpOyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IG9wZXJhdG9yIGF1
dG9fcHRyPF9UcDE+KCkgdGhyb3coKQogICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+
cmVsZWFzZSgpKTsgfQp9OwoKfQojIDQ5ICIvdXNyL2luY2x1ZGUvZysrL3N0cmluZyIgMiAzCgoK
CiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2NCAiL3Vz
ci9pbmNsdWRlL2crKy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDEw
MSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFz
cyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYg
X0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCgoK
CnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVj
dCBiaW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsK
ICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCBy
ZXN1bHRfdHlwZTsKfTsKIyAxMjcgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfZnVuY3Rpb24u
aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf
VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv
bnN0IHsgcmV0dXJuIF9feCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9U
cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1
cm4gX194ICogX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7
IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw
LF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAt
X194OyB9Cn07CiMgMTczICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMK
dGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNv
bnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf
VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJv
b2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj
b25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g
X194IDwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJfZXF1
YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0
b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+
PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9feTsg
fQp9OwojIDIyMiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z
dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs
X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg
X195KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxib29sPgp7
CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAhX194OyB9
Cn07CiMgMjcxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxh
dGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0ZQogIDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUsIGJvb2w+IHsKcHJv
dGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IHVuYXJ5X25l
Z2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVy
YXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29u
c3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
UHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDEoY29uc3QgX1By
ZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3By
ZWQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIGJpbmFyeV9uZWdhdGUK
ICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJn
dW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0
ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+
IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IGJp
bmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJv
b2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90
eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNl
Y29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9f
eCwgX195KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5h
cnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAg
cmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQojIDM0OSAiL3Vzci9p
bmNsdWRlL2crKy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0
aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBf
T3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJh
dGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVl
OwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAg
Y29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX195KQogICAg
ICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRf
dHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3Vt
ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCgog
IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBf
T3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4g
b3AodmFsdWUsIF9feCk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xh
c3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3QgX09wZXJh
dGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRp
b246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9P
cGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5cGUoX194KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX09w
ZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5h
bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09w
ZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2
YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAg
ICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kp
CiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJl
c3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9h
cmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9
CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5h
bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1
cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwg
Y2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29uc3QgX09w
ZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVy
YXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJu
ZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMl90eXBlKF9feCkpOwp9CiMgNDM4ICIvdXNyL2luY2x1
ZGUvZysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNz
IF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3VsdCAoKl9NX3B0ciko
X0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkge30KICBleHBsaWNp
dCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6IF9NX3B0
cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25zdCB7IHJldHVybiBf
TV9wdHIoX194KTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0Pgpp
bmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9S
ZXN1bHQgKCpfX3gpKF9BcmcpKQp7CiAgcmV0dXJuIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248
X0FyZywgX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0Fy
ZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uIDoKICBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgog
ICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsKcHVibGljOgogICAgcG9pbnRlcl90
b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQgcG9pbnRlcl90b19iaW5hcnlfZnVu
Y3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkKICAgICAgOiBfTV9wdHIoX194KSB7
fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIgX195KSBjb25zdCB7CiAg
ICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
QXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFy
eV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PgpwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9B
cmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEs
X0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfSWRl
bnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewogIF9UcCYgb3BlcmF0b3Io
KShfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9CiAgY29uc3QgX1RwJiBvcGVyYXRvcigp
KGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qxc3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIs
IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlPiB7CiAgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5
cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsK
ICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3Qg
X1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+CnsKICB0eXBlbmFtZSBfUGFpcjo6
c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9f
eC5zZWNvbmQ7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0
b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9
Cn07CiMgNTI4ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxh
dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQg
KF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9f
cCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6
OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNv
bnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsK
cHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNv
bnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNv
bnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01f
ZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBt
ZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoK
ICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3Bm
KSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01f
ZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1
bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0
IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7
IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBt
ZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0
IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01f
ZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9m
dW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1
YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9Bcmcp
IGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3As
IF9BcmcgX194KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0
ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVt
X2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9S
ZXQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9N
X2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1f
ZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJs
aWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0Fy
ZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
ciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToK
ICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAq
LHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgp
KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9f
cC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u
c3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQog
IHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsg
fQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1
bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQg
KF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9f
cikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZiko
KTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZv
aWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4
cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBf
TV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChf
X3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwg
X1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVi
bGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01f
ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsg
KF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsK
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVu
MV90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1Rw
KixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAo
X1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3Io
KShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0K
cHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9B
cmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgog
IGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2Yo
X19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChf
X3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9y
ZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJn
LHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9U
cDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJp
dmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVu
KF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7
IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVu
X3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJu
IGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs
IGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9S
ZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2Yp
OyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1
bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQog
IHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRl
IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9S
ZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBt
ZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9B
cmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25z
dF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxf
QXJnPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9m
dW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9U
cCxfQXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0
dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCgoKfQojIDUz
ICIvdXNyL2luY2x1ZGUvZysrL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRz
L2Jhc2ljX3N0cmluZy5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2Jhc2ljX3N0
cmluZy5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvYXRv
bWljaXR5LmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRz
L2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsKCnN0YXRpYyBpbmxpbmUg
X0F0b21pY193b3JkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19leGNoYW5nZV9hbmRf
YWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQgKl9fbWVtLCBpbnQgX192YWwpCnsKICByZWdpc3Rl
ciBfQXRvbWljX3dvcmQgX19yZXN1bHQ7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyB4
YWRkbCAlMCwlMiIKICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChfX3Jlc3VsdCkKICAg
ICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fdmFsKSwgIm0iICgqX19tZW0pCiAgICAgICAg
ICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogIHJldHVybiBfX3Jlc3VsdDsKfQoKc3RhdGlj
IGlubGluZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19hdG9taWNfYWRkICh2
b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsKICBfX2FzbV9fIF9fdm9s
YXRpbGVfXyAoImxvY2s7IGFkZGwgJTAsJTEiCiAgICAgICAgICAgICAgICAgICAgICAgIDogOiAi
aXIiIChfX3ZhbCksICJtIiAoKl9fbWVtKSA6ICJtZW1vcnkiKTsKfQojIDQ2ICIvdXNyL2luY2x1
ZGUvZysrL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgODggIi91
c3IvaW5jbHVkZS9nKysvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFz
aWNfc3RyaW5nCiAgICB7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlIHZhbHVlX3R5
cGU7CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfX2du
dV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIsIGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7
CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVy
LCBiYXNpY19zdHJpbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2Vf
aXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5
cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBw
cml2YXRlOgojIDEyMyAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAg
ICAgIHN0cnVjdCBfUmVwCiAgICAgIHsKCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6
OnRlbXBsYXRlIHJlYmluZDxjaGFyPjo6b3RoZXIgX1Jhd19ieXRlc19hbGxvYzsKIyAxNDEgIi91
c3IvaW5jbHVkZS9nKysvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25z
dCBzaXplX3R5cGUgX1NfbWF4X3NpemU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190
ZXJtaW5hbDsKCiAgICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUg
X01fY2FwYWNpdHk7CiAgICAgICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAg
IGJvb2wKICAgICAgICBfTV9pc19sZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3Jl
ZmVyZW5jZXMgPCAwOyB9CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25z
dAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAg
ICAgICBfTV9zZXRfbGVha2VkKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAg
ICAgICB2b2lkCiAgICAgICAgX01fc2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5j
ZXMgPSAwOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4odGhpcyArIDEpOyB9Cgog
ICAgICAgIF9DaGFyVCYKICAgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3MpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiBfTV9yZWZkYXRhKCkgW19fc107IH0KCiAgICAgICAgX0NoYXJUKgogICAg
ICAgIF9NX2dyYWIoY29uc3QgX0FsbG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9j
MikKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9j
MSA9PSBfX2FsbG9jMikKICAgICAgICAgICAgICAgICAgPyBfTV9yZWZjb3B5KCkgOiBfTV9jbG9u
ZShfX2FsbG9jMSk7CiAgICAgICAgfQoKCiAgICAgICAgc3RhdGljIF9SZXAqCiAgICAgICAgX1Nf
Y3JlYXRlKHNpemVfdCwgY29uc3QgX0FsbG9jJik7CgogICAgICAgIHZvaWQKICAgICAgICBfTV9k
aXNwb3NlKGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2V4Y2hh
bmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAwKQogICAgICAgICAgICBfTV9kZXN0
cm95KF9fYSk7CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGVzdHJveShjb25z
dCBfQWxsb2MmKSB0aHJvdygpOwoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmY29weSgp
IHRocm93KCkKICAgICAgICB7CiAgICAgICAgICBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMs
IDEpOwogICAgICAgICAgcmV0dXJuIF9NX3JlZmRhdGEoKTsKICAgICAgICB9CgogICAgICAgIF9D
aGFyVCoKICAgICAgICBfTV9jbG9uZShjb25zdCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAw
KTsKICAgICAgfTsKCgogICAgICBzdHJ1Y3QgX0FsbG9jX2hpZGVyIDogX0FsbG9jCiAgICAgIHsK
ICAgICAgICBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX2RhdCwgY29uc3QgX0FsbG9jJiBfX2EpCiAg
ICAgICAgOiBfQWxsb2MoX19hKSwgX01fcChfX2RhdCkgeyB9CgogICAgICAgIF9DaGFyVCogX01f
cDsKICAgICAgfTsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUg
bnBvcyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpOwoKICAgIHByaXZhdGU6CgogICAgICBt
dXRhYmxlIF9BbGxvY19oaWRlciBfTV9kYXRhcGx1czsKCgoKICAgICAgc3RhdGljIHNpemVfdHlw
ZSBfU19lbXB0eV9yZXBfc3RvcmFnZVsoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBz
aXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCiAgICAgIF9DaGFyVCoK
ICAgICAgX01fZGF0YSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0K
CiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0YShfQ2hhclQqIF9fcCkKICAgICAgeyByZXR1cm4g
KF9NX2RhdGFwbHVzLl9NX3AgPSBfX3ApOyB9CgogICAgICBfUmVwKgogICAgICBfTV9yZXAoKSBj
b25zdAogICAgICB7IHJldHVybiAmKChyZWludGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgp
KSlbLTFdKTsgfQoKCgogICAgICBpdGVyYXRvcgogICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9pZW5k
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoK
ICAgICAgdm9pZAogICAgICBfTV9sZWFrKCkKICAgICAgewogICAgICAgIGlmICghX01fcmVwKCkt
Pl9NX2lzX2xlYWtlZCgpKQogICAgICAgICAgX01fbGVha19oYXJkKCk7CiAgICAgIH0KCiAgICAg
IGl0ZXJhdG9yCiAgICAgIF9NX2NoZWNrKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgewog
ICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29m
X3JhbmdlKCJiYXNpY19zdHJpbmc6Ol9NX2NoZWNrIik7CiAgICAgICAgcmV0dXJuIF9NX2liZWdp
bigpICsgX19wb3M7CiAgICAgIH0KCgogICAgICBpdGVyYXRvcgogICAgICBfTV9mb2xkKHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBjb25zdAogICAgICB7CiAgICAgICAgYm9vbCBf
X3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHNpemVfdHlw
ZSBfX25ld29mZiA9IF9fdGVzdG9mZiA/IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAg
ICAgICAgcmV0dXJuIChfTV9pYmVnaW4oKSArIF9fcG9zICsgX19uZXdvZmYpOwogICAgICB9CgoK
CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4KICAgICAgICBzdGF0aWMgdm9pZAogICAg
ICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3Ig
X19rMikKICAgICAgICB7CiAgICAgICAgICBmb3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsr
X19wKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sxKTsKICAgICAg
ICB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBp
dGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBf
X2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19j
b3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRv
ciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNl
KCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19w
LCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShf
X3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29w
eV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9f
azIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0K
CiAgICAgIHZvaWQKICAgICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f
bGVuMSwgc2l6ZV90eXBlIF9fbGVuMik7CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWtfaGFyZCgp
OwoKICAgICAgc3RhdGljIF9SZXAmCiAgICAgIF9TX2VtcHR5X3JlcCgpCiAgICAgIHsgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PF9SZXAqPigmX1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9CgogICAg
cHVibGljOgoKCgoKICAgICAgaW5saW5lCiAgICAgIGJhc2ljX3N0cmluZygpOwoKICAgICAgZXhw
bGljaXQKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKTsKCgogICAgICBiYXNp
Y19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CiAgICAgIGJhc2ljX3N0cmluZyhj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAg
ICAgICBzaXplX3R5cGUgX19uID0gbnBvcyk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXpl
X3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgICBiYXNpY19zdHJpbmcoY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sCiAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxs
b2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19z
LCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKHNpemVf
dHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAg
ICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nKF9J
bnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCwKICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB+YmFzaWNfc3RyaW5n
KCkKICAgICAgeyBfTV9yZXAoKS0+X01fZGlzcG9zZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9
CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcm
IF9fc3RyKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJp
bmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNz
aWduKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBf
X2MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbigxLCBfX2MpOyB9CgoKICAgICAgaXRlcmF0b3IKICAg
ICAgYmVnaW4oKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBpdGVy
YXRvcihfTV9kYXRhKCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdp
bigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAg
ICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpCiAgICAgIHsKICAgICAgICAgX01fbGVhaygpOwogICAg
ICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsKICAgICAgfQoK
ICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29u
c3RfaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgcmV2ZXJzZV9p
dGVyYXRvcgogICAgICByYmVnaW4oKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRo
aXMtPmVuZCgpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4o
KSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgp
KTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyByZXR1cm4g
cmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcgogICAgICByZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQog
ICAgICBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAg
c2l6ZV90eXBlCiAgICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5n
dGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9S
ZXA6Ol9TX21heF9zaXplOyB9CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19u
LCBfQ2hhclQgX19jKTsKCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pIHsg
dGhpcy0+cmVzaXplKF9fbiwgX0NoYXJUKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgY2Fw
YWNpdHkoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0KCiAgICAgIHZv
aWQKICAgICAgcmVzZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJnID0gMCk7CgogICAgICB2b2lkCiAg
ICAgIGNsZWFyKCkgeyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6ZSgpLCAwKTsgfQoKICAgICAgYm9v
bAogICAgICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CgoKICAg
ICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29u
c3QKICAgICAgeyByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsgfQoKICAgICAgcmVmZXJlbmNlCiAg
ICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fcG9zKQogICAgICB7CiAgICAgICAgX01fbGVhaygp
OwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19wb3NdOwogICAgICB9CgogICAgICBjb25zdF9y
ZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogICAgICAgIGlm
IChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh
c2ljX3N0cmluZzo6YXQiKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0K
CiAgICAgIHJlZmVyZW5jZQogICAgICBhdChzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAg
aWYgKF9fbiA+PSBzaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNf
c3RyaW5nOjphdCIpOwogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgp
W19fbl07CiAgICAgIH0KCgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29u
c3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19zKSB7
IHJldHVybiB0aGlzLT5hcHBlbmQoX19zKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBv
cGVyYXRvcis9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSks
IF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKTsKCiAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg
X19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19z
KQogICAgICB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
cykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBf
Q2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgICBhcHBlbmQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVu
ZCgpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVz
aF9iYWNrKF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2ll
bmQoKSwgMSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3Qg
YmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p
CiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgp
OwogICAgICAgIGlmIChfX3BvcyA+IF9fc3Ryc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29m
X3JhbmdlKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0
biA9IF9fbiA8IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25l
d3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3M7CiAgICAgICAgcmV0dXJu
IHRoaXMtPmFzc2lnbihfX3N0ci5fTV9kYXRhKCkgKyBfX3BvcywgX19uZXdzaXplKTsKICAgICAg
fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkK
ICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwog
ICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQq
PigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCko
X01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxh
Y2Vfc2FmZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICAgICAg
ZWxzZQogICAgICAgICAgewoKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19z
IC0gX01fZGF0YSgpOwogICAgICAgICAgICBpZiAoX19wb3MgPj0gX19uKQogICAgICAgICAgICAg
IHRyYWl0c190eXBlOjpjb3B5KF9NX2RhdGEoKSwgX19zLCBfX24pOwogICAgICAgICAgICBlbHNl
IGlmIChfX3BvcykKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCksIF9f
cywgX19uKTsKICAgICAgICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgICAg
ICAgX01fZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgICAgICAgfQogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFz
c2lnbihjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywg
dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBh
c3NpZ24oc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVw
bGFjZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRl
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhc3Np
Z24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAg
IHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwg
X19sYXN0KTsgfQoKICAgICAgdm9pZAogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3R5
cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fbiwg
X19jKTsgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9p
ZCBpbnNlcnQoaXRlcmF0b3IgX19wLCBfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0
b3IgX19lbmQpCiAgICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX2JlZywgX19lbmQp
OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19w
b3MxLCBfX3N0ciwgMCwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAg
ICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAg
ICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChf
X3BvczIgPiBfX3N0cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNf
c3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0
cnNpemUgLSBfX3BvczI7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVz
dG4gPyBfX24gOiBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgICAgcmV0dXJuIHRoaXMtPmluc2Vy
dChfX3BvczEsIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19uZXdzaXplKTsKICAgICAgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlw
ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAg
ICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAg
ICAgaWYgKF9fc2l6ZSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24pCiAgICAgICAgICBfX3Rocm93
X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBpZiAoX01fcmVw
KCktPl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEo
KSkKICAgICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6
ZSwgX19zKSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBf
X3BvcywgX01faWJlZ2luKCkgKyBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19zLCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKCgoKICAgICAgICAg
ICAgY29uc3Qgc2l6ZV90eXBlIF9fb2ZmID0gX19zIC0gX01fZGF0YSgpOwogICAgICAgICAgICBf
TV9tdXRhdGUoX19wb3MsIDAsIF9fbik7CiAgICAgICAgICAgIF9fcyA9IF9NX2RhdGEoKSArIF9f
b2ZmOwogICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9NX2RhdGEoKSArIF9fcG9zOwogICAgICAg
ICAgICBpZiAoX19zICsgX19uIDw9IF9fcCkKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29w
eShfX3AsIF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19zID49IF9fcCkKICAgICAg
ICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcyArIF9fbiwgX19uKTsKICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5
KF9fcCwgX19zLCBfX3AgLSBfX3MpOwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHko
X19wICsgKF9fcCAtIF9fcyksIF9fcCArIF9fbiwgX19uIC0gKF9fcCAtIF9fcykpOwogICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgfQogICAgICAgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBf
Q2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0
c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0
KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgewogICAg
ICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIF9fbiwgX19jKTsKICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBf
X3AsIF9DaGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3Bv
cyA9IF9fcCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3Bv
cyksIHNpemVfdHlwZSgxKSwgX19jKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgp
OwogICAgICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlw
ZSBfX24gPSBucG9zKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hl
Y2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAg
ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kg
PSBfX3Bvc2l0aW9uIC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0
aW9uLCBfX3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3Jl
cCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwog
ICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVy
YXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9N
X2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRh
KCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAg
IHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uLCBf
X3N0ci5fTV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg
ICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUg
X19uMik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9z
LCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90
eXBlIF9fbjIpCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+
c2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0
X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBjb25zdCBib29sIF9f
dGVzdG4xID0gX19uMSA8IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBf
X2ZvbGRuMSA9IF9fdGVzdG4xID8gX19uMSA6IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGlmIChf
X3NpemUgLSBfX2ZvbGRuMSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24yKQogICAgICAgICAgX190
aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICAgIGlmIChf
TV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01f
ZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsg
X19zaXplLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4o
KSArIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9pYmVnaW4oKSAr
IF9fcG9zICsgX19mb2xkbjEsIF9fcywgX19zICsgX19uMik7CgogICAgICAgIGVsc2UgcmV0dXJu
CiAgICAgICAgICAgICAgIF9NX3JlcGxhY2UoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2lu
KCkgKyBfX3BvcyArIF9fZm9sZG4xLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19z
ICsgX19uMiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8Y29uc3QgX0NoYXJUKj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOwogICAgICB9CgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
MSwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3Ms
IF9fbjEsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVf
dHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2No
ZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uMSksIF9fbjIsIF9fYyk7IH0KCiAgICAgIGJh
c2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9f
aTEsIF9faTIsIF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQog
ICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9f
aTEsIF9fcywgX19uKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJh
dG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVy
biB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp
KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0
ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxhdGU8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIHJlcGxh
Y2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXJhdG9yIF9fazEsIF9JbnB1dEl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gX01fcmVw
bGFjZShfX2kxLCBfX2kyLCBfX2sxLCBfX2syLAogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7IH0KCgoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9f
aTIsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJl
cGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCog
X19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2Uo
X19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy
ZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGl0ZXJhdG9yIF9fazEsIGl0ZXJh
dG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2lu
KCksIF9faTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNl
KCksIF9fazIgLSBfX2sxKTsKICAgICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl
cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3RfaXRlcmF0b3IgX19rMSwg
Y29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEg
LSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2sxLmJhc2UoKSwgX19rMiAtIF9fazEpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgogICAg
ICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVy
YXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMiwgaW5wdXRf
aXRlcmF0b3JfdGFnKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2Vfc2FmZShpdGVyYXRvciBfX2kx
LCBpdGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXJhdG9yIF9fazIpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVy
PgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVy
IF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKICAg
ICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7CiAg
ICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0No
YXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2Vu
ZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlw
ZSkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KHN0YXRpY19jYXN0PHNp
emVfdHlwZT4oX19iZWcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDx2YWx1ZV90eXBlPihfX2VuZCksIF9fYSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xh
c3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChf
SW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7
CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdy
YWwgX0ludGVncmFsOwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9f
ZW5kLCBfX2EsIF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3Mg
X0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgICBfU19jb25zdHJ1Y3QoX0lu
SXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAg
ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBf
RndkSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfRndk
SXRlciBfX2JlZywgX0Z3ZEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAg
ICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogICAgICBzdGF0aWMgX0NoYXJUKgog
ICAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxs
b2MmIF9fYSk7CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNvcHkoX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAg
dm9pZAogICAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
cyk7CgoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBjX3N0cigpIGNvbnN0CiAgICAgIHsKCiAg
ICAgICAgc2l6ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsKICAgICAgICB0cmFpdHNfdHlwZTo6
YXNzaWduKF9NX2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJu
IF9NX2RhdGEoKTsKICAgICAgfQoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29u
c3QgeyByZXR1cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRf
YWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlw
ZQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw
ZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3Ry
aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXpl
X3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6
bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBz
aXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXpl
KCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAg
ICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5n
dGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChfQ2hhclQgX19jLCBzaXpl
X3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2Zp
cnN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3Bv
cywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2Yo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7
CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywg
c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJz
dF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXpl
X3R5cGUKICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAw
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fYywgX19wb3MpOyB9CgogICAgICBz
aXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp
emVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFz
dF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5
cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3Ms
IHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9v
Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5n
dGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9f
Yywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZp
bmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9v
Zihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9z
LCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rf
b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9m
aXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0
c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0
X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNp
emVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
IHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRf
bGFzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAg
c2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsK
ICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRf
bGFzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAg
ICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBl
IF9fcG9zID0gbnBvcykgY29uc3Q7CgogICAgICBiYXNpY19zdHJpbmcKICAgICAgc3Vic3RyKHNp
emVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKSBjb25zdAogICAgICB7CiAg
ICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2Zf
cmFuZ2UoImJhc2ljX3N0cmluZzo6c3Vic3RyIik7CiAgICAgICAgcmV0dXJuIGJhc2ljX3N0cmlu
ZygqdGhpcywgX19wb3MsIF9fbik7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUg
X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIu
c2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3NpemUsIF9fb3NpemUpOwoK
ICAgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3N0ci5k
YXRhKCksIF9fbGVuKTsKICAgICAgICBpZiAoIV9fcikKICAgICAgICAgIF9fciA9IF9fc2l6ZSAt
IF9fb3NpemU7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNv
bXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcm
IF9fc3RyKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEs
IHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAg
IHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdDsKCiAgICAgIGludAogICAg
ICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCgoKICAgICAgaW50CiAgICAgIGNv
bXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3Mp
IGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIp
IGNvbnN0OwogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZygpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2Vt
cHR5X3JlcCgpLl9NX3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAg
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwog
ICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhj
b25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAg
ICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMp
OwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywgX0NoYXJUIF9fcmhzKQogICAgewog
ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJp
bmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUg
X19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHIoX19saHMpOwogICAgICBfX3N0
ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVy
biBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBf
X3Jocy5jb21wYXJlKF9fbGhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19s
aHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xo
cy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy
YXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhz
LAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLAog
ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBf
X3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9IDA7IH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBh
cmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAg
ICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y
aHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgX0No
YXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID4g
MDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1
cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X2xocywKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19s
aHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPihjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29t
cGFyZShfX2xocykgPCAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9
KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAg
ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3Jo
cykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAg
ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykK
ICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y
aHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg
ICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMp
ID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hh
clQqIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8PSAw
OyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JiBfX29zLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19zdHIpOwp9CiMgNTQgIi91c3IvaW5jbHVkZS9nKysvc3RyaW5nIiAyIDMKCgojIDEg
Ii91c3IvaW5jbHVkZS9nKysvYWxnb3JpdGhtIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2crKy9h
bGdvcml0aG0iIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDEg
MwojIDY0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9nKysvYml0cy9zdGxfaGVhcC5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2crKy9iaXRz
L3N0bF9oZWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAg
IHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwg
X1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRl
eCAtIDEpIC8gMjsKICAgICAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9f
Zmlyc3QgKyBfX3BhcmVudCkgPCBfX3ZhbHVlKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xl
SW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19w
YXJlbnQ7CiAgICAgICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0K
ICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHB1
c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgog
ICAgIAoKICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0g
X19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgX1ZhbHVl
VHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHAsCiAgICAgICAg
ICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQog
ICAgewogICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAg
ICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCAr
IF9fcGFyZW50KSwgX192YWx1ZSkpIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkg
PSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsK
ICAgICAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgfQogICAgICAq
KF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5l
IHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVu
Y2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKCiAgICAgIF9fcHVzaF9o
ZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0
YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSks
IF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX2FkanVz
dF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5k
ZXgsCiAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpCiAgICB7
CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5j
ZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vj
b25kQ2hpbGQgPCBfX2xlbikgewogICAgICAgIGlmICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxk
KSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKQogICAgICAgICAgX19zZWNvbmRD
aGlsZC0tOwogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9f
c2Vjb25kQ2hpbGQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAg
ICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAg
aWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJ
bmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJ
bmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmly
c3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg
dm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9E
aXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAo
X19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFs
dWUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAg
ICBpbmxpbmUgdm9pZAogICAgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1Zh
bHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0
IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNl
LAogICAgICAgICAgIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg
ICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2Ug
X19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFs
dWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBf
X2hvbGVJbmRleDsKICAgICAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5k
ZXggKyAyOwogICAgICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYg
KF9fY29tcCgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vjb25k
Q2hpbGQgLSAxKSkpKQogICAgICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19maXJz
dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9f
aG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAqIChf
X3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19s
ZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19z
ZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAx
OwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcElu
ZGV4LCBfX3ZhbHVlLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxp
bmUgdm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+
OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsK
ICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xh
c3QgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0Nv
bXBhcmUgX19jb21wKQogICAgewoKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7
CiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVl
VHlwZSgqKF9fbGFzdCAtIDEpKSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0
b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5
cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19s
YXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9f
bGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAy
KS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3Qs
IF9fcGFyZW50LCBfX2xlbiwgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAg
ICAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAg
IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBf
VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7
CgoKICAgICAKCgogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAgICAg
X0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5
cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAg
ICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwKICAgICAgICAgICAgICAg
ICAgICAgIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSwgX19jb21wKTsKICAgICAg
ICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0K
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9p
ZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewoKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9f
bGFzdCAtIF9fZmlyc3QgPiAxKQogICAgICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXApCiAgICB7CgogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0
ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKICAgIH0K
Cn0KIyA2NSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDIgMwojIDEgIi91c3Iv
aW5jbHVkZS9nKysvYml0cy9zdGxfdGVtcGJ1Zi5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2cr
Ky9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgNzQgIi91c3IvaW5jbHVk
ZS9nKysvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh
dG9yLCBjbGFzcyBfVHA+CiAgY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIKewoKIAoKICBwdHJkaWZm
X3QgX01fb3JpZ2luYWxfbGVuOwogIHB0cmRpZmZfdCBfTV9sZW47CiAgX1RwKiBfTV9idWZmZXI7
CgoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9IF9N
X2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3QpKDIx
NDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXpl
b2YoX1RwKTsKCiAgICB3aGlsZSAoX01fbGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1Rw
KikgbWFsbG9jKF9NX2xlbiAqIHNpemVvZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAg
ICAgICBicmVhazsKICAgICAgX01fbGVuIC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRp
YWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlh
bGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFs
aXplZF9maWxsX24oX01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgoKICBwdHJk
aWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQoKICBwdHJkaWZmX3QgcmVxdWVz
dGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47IH0KCiAgX1RwKiBiZWdp
bigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQoKICBfVHAqIGVuZCgpIHsgcmV0dXJuIF9NX2J1ZmZl
ciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmly
c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5
cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3IKICAgICAgICAg
ICAgX1RyaXZpYWw7CgogICAgdHJ5IHsKICAgICAgX01fbGVuID0gZGlzdGFuY2UoX19maXJzdCwg
X19sYXN0KTsKICAgICAgX01fYWxsb2NhdGVfYnVmZmVyKCk7CiAgICAgIGlmIChfTV9sZW4gPiAw
KQogICAgICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAg
IH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIGZyZWUoX01fYnVmZmVyKTsKICAgICAg
ICBfTV9idWZmZXIgPSAwOwogICAgICAgIF9NX2xlbiA9IDA7CiAgICAgICAgdGhyb3c7CiAgICAg
IH0KICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIF9EZXN0cm95KF9NX2J1ZmZlciwg
X01fYnVmZmVyICsgX01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsKICB9Cgpwcml2YXRlOgoK
ICBfVGVtcG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9CiAgdm9pZCBv
cGVyYXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQp9OwoKfQojIDY2ICIvdXNyL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMiAzCgoKCm5hbWVzcGFjZSBzdGQKewojIDg0ICIv
dXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICBpbmxpbmUgY29uc3QgX1RwJgogICAgX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0
IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYykKICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2EgPCBf
X2IpCiAgICAgICAgaWYgKF9fYiA8IF9fYykKICAgICAgICAgIHJldHVybiBfX2I7CiAgICAgICAg
ZWxzZSBpZiAoX19hIDwgX19jKQogICAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNlCiAg
ICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgICAgcmV0
dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19iIDwgX19jKQogICAgICAgIHJldHVybiBfX2M7CiAg
ICAgIGVsc2UKICAgICAgICByZXR1cm4gX19iOwogICAgfQojIDExOCAiL3Vzci9pbmNsdWRlL2cr
Ky9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19h
LCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
CiAgICAgCiAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKQogICAgICAgIGlmIChfX2NvbXAoX19i
LCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYjsKICAgICAgICBlbHNlIGlmIChfX2NvbXAoX19h
LCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1
cm4gX19hOwogICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICAgIHJldHVybiBf
X2E7CiAgICAgIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgICAgcmV0dXJuIF9fYzsK
ICAgICAgZWxzZQogICAgICAgIHJldHVybiBfX2I7CiAgICB9CiMgMTUwICIvdXNyL2luY2x1ZGUv
ZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5
cGVuYW1lIF9GdW5jdGlvbj4KICAgIF9GdW5jdGlvbgogICAgZm9yX2VhY2goX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikKICAgIHsKCiAgICAgCiAg
ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBfX2YoKl9f
Zmlyc3QpOwogICAgICByZXR1cm4gX19mOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5k
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9U
cCYgX192YWwsCiAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQogICAgICAgICsrX19m
aXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVy
CiAgICBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp
CiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0
KSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBf
UmFuZG9tQWNjZXNzSXRlcgogICAgZmluZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAg
IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50
CiAgICAgICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190cmlw
X2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9f
dmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19m
aXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAg
ICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJz
dDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAg
ICArK19fZmlyc3Q7CiAgICAgIH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAg
ICAgIGNhc2UgMzoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0
OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlmICgqX19maXJzdCA9
PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDE6
CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICAr
K19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gX19s
YXN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgZmlu
ZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICByYW5kb21fYWNjZXNz
X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9f
bGFzdCAtIF9fZmlyc3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAt
LV9fdHJpcF9jb3VudCkgewogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19m
aXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSBy
ZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9f
Zmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChf
X3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAg
IH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoKICAgICAg
ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0
OwogICAgICBjYXNlIDI6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2Zp
cnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmIChfX3ByZWQo
Kl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2Ug
MDoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMg
Mjg5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBm
aW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0
IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgcmV0dXJuIGZpbmQoX19maXJz
dCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMg
MzA5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRl
cgogICAgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1
cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShf
X2ZpcnN0KSk7CiAgICB9CiMgMzI5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAg
YWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkK
ICAgIHsKCiAgICAgCiAgICAgCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAg
cmV0dXJuIF9fbGFzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAg
IHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSAqX19u
ZXh0KQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsK
ICAgICAgfQogICAgICByZXR1cm4gX19sYXN0OwogICAgfQojIDM1OCAiL3Vzci9pbmNsdWRlL2cr
Ky9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5
cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2Zp
bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAg
CgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAg
ICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAh
PSBfX2xhc3QpIHsKICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkp
CiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAg
ICB9CiAgICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgMzg3ICIvdXNyL2luY2x1ZGUvZysrL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9UcD4KICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5j
ZV90eXBlCiAgICBjb3VudChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBj
b25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKICAgICAgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsK
ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgq
X19maXJzdCA9PSBfX3ZhbHVlKQogICAgICAgICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAg
ICB9CiMgNDExICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgY291bnRfaWYo
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQp
CiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAg
ICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDUwICIvdXNyL2luY2x1ZGUvZysr
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5
cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFyY2goX0Zvcndh
cmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9Gb3J3
YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAg
ICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9
PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9yd2FyZEl0ZXIy
IF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1wID09IF9fbGFz
dDIpCiAgICAgICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CgoK
CiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICAgICAgX19wMSA9IF9fZmlyc3QyOyAr
K19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICAgICAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICBfX2ZpcnN0MSA9IGZpbmQoX19m
aXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFz
dDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsKICAgICAg
ICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0
MSkKICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAoKl9fY3VycmVudCA9
PSAqX19wKSB7CiAgICAgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0
dXJuIF9fZmlyc3QxOwogICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAg
ICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAg
ICAgfQogICAgICByZXR1cm4gX19maXJzdDE7CiAgICB9CiMgNTIyICIvdXNyL2luY2x1ZGUvZysr
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5
cGVuYW1lIF9Gb3J3YXJkSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJ
dGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19s
YXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVkaWNhdGUpCiAgICB7CgogICAgIAog
ICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIg
PT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0ZvcndhcmRJdGVy
MiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9PSBfX2xh
c3QyKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRl
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgcmV0
dXJuIF9fZmlyc3QxOwogICAgICB9CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoK
ICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3Vy
cmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAg
ICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgICAgaWYgKF9fcHJlZGlj
YXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAr
K19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0
MTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgIHJldHVybiBfX2xh
c3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAgICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwog
ICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsKCiAgICAg
ICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAgICAgICBpZiAo
KytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICAgICAg
aWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX2xhc3QxOwog
ICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJz
dDE7CiAgICB9CiMgNTk2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1l
IF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25z
dCBfVHAmIF9fdmFsKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgogICAgICBpZiAoX19jb3Vu
dCA8PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICBfX2Zp
cnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgICAgICB3aGlsZSAoX19maXJz
dCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICAgICArK19faTsKICAgICAg
ICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwpIHsK
ICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0tX19uOwogICAgICAgICAgfQogICAgICAg
ICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKICAgICAg
ICB9CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDY0MyAiL3Vzci9pbmNs
dWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgdHlwZW5hbWUg
X0JpbmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3Vu
dCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3By
ZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9f
bGFzdCkgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQogICAgICAgIHdo
aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0gX19jb3Vu
dCAtIDE7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgICAgICsr
X19pOwogICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5h
cnlfcHJlZCgqX19pLCBfX3ZhbCkpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0t
X19uOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1
cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB3aGlsZSAoX19pICE9IF9f
bGFzdCkgewogICAgICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICB9CiAg
ICAgICAgICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJl
dHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2OTcgIi91c3IvaW5jbHVkZS9nKysvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUg
X0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjIKICAgIHN3YXBfcmFuZ2VzKF9Gb3J3YXJk
SXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoK
CiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0
MikKICAgICAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3QyKTsKICAgICAgcmV0dXJuIF9f
Zmlyc3QyOwogICAgfQojIDczMiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlw
ZW5hbWUgX1VuYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRyYW5zZm9ybShfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCkKICAgIHsKCiAgICAgCiAg
ICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jl
c3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0KTsKICAgICAgcmV0
dXJuIF9fcmVzdWx0OwogICAgfQojIDc2NSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRl
cjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlPcGVy
YXRpb24+CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9uIF9f
YmluYXJ5X29wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2Zp
cnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVzdWx0KQogICAg
ICAgICpfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsKICAgICAg
cmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDc5NiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9h
bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4K
ICAgIHZvaWQKICAgIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19u
ZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmly
c3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fb2xkX3Zh
bHVlKQogICAgICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4MjUgIi91c3Iv
aW5jbHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBy
ZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAg
IHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICpfX2Zp
cnN0ID0gX19uZXdfdmFsdWU7CiAgICB9CiMgODU2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRw
dXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVwbGFjZV9jb3B5KF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1
ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAg
ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAg
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVlIDog
Kl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA4ODggIi91c3IvaW5jbHVk
ZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlw
ZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25z
dCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpf
X3Jlc3VsdCA9IF9fcHJlZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAg
ICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgOTE4ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0dl
bmVyYXRvcj4KICAgIHZvaWQKICAgIGdlbmVyYXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LCBfR2VuZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKICAgICAKCgog
ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgKl9fZmly
c3QgPSBfX2dlbigpOwogICAgfQojIDk0MiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5
cGVuYW1lIF9HZW5lcmF0b3I+CiAgICBfT3V0cHV0SXRlcgogICAgZ2VuZXJhdGVfbihfT3V0cHV0
SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAgIAoK
CgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmly
c3QgPSBfX2dlbigpOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyA5NjkgIi91c3IvaW5j
bHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAg
ICByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAg
IHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkKICAgICAgICBpZiAoISgqX19maXJzdCA9PSBfX3ZhbHVlKSkgewogICAgICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMDMgIi91c3IvaW5jbHVkZS9nKysvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg
X091dHB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgcmVt
b3ZlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAg
IHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkKICAgICAgICBpZiAoIV9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAxMDM5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1Rw
PgogICAgX0ZvcndhcmRJdGVyCiAgICByZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAg
ICAKICAgICAKCiAgICAgCgoKICAgICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBf
X3ZhbHVlKTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBf
X2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogcmVtb3ZlX2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1ZSk7CiAgICB9CiMg
MTA3MyAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIK
ICAgIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAg
ICAgX19maXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOwogICAgICBfRm9y
d2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8g
X19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigr
K19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVy
CiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9f
cmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAg
ICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19m
aXJzdDsKICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJl
dHVybiArK19fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pcXVl
X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0
ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGls
ZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoISgqX19yZXN1bHQgPT0gKl9fZmly
c3QpKQogICAgICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsrX19y
ZXN1bHQ7CiAgICB9CiMgMTE0NSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAg
IGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQog
ICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CgogICAg
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICAgICAgcmV0dXJuIF9f
dW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0l0ZXJUeXBlKCkpOwogICAg
fQojIDExNzAgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5h
cnlQcmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w
cmVkLAogICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAK
CgoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBl
IF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hp
bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFs
dWUsICpfX2ZpcnN0KSkgewogICAgICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAgICAg
KisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICAgIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7
CiAgICB9CiMgMTE5OSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f
YmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAg
ewoKICAgICAKCgoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19f
Zmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19yZXN1bHQsICpf
X2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsrX19yZXN1bHQ7
CiAgICB9CiMgMTIzMiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUg
X0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2NvcHko
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Jp
bmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsK
CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICByZXR1
cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsCl9fcmVzdWx0LCBfX2JpbmFyeV9wcmVk
LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTI2MyAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9h
bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0
ZXIKICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkK
ICAgIHsKCiAgICAgICAgIAogICAgICAgICAKCgogICAgICAgICAgX19maXJzdCA9IGFkamFjZW50
X2ZpbmQoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2Zp
cnN0LCBfX2xhc3QsIF9fZmlyc3QpOwogICAgfQojIDEyOTAgIi91c3IvaW5jbHVkZS9nKysvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt
ZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgX0JpbmFyeVByZWRp
Y2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgX19maXJzdCA9
IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICAgICAgcmV0
dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJlZCk7
CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAg
IHZvaWQKICAgIF9fcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJzdCA9PSAtLV9fbGFzdCkKICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIGl0ZXJfc3dh
cChfX2ZpcnN0KyssIF9fbGFzdCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S
YW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19yZXZlcnNlKF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlIChf
X2ZpcnN0IDwgX19sYXN0KQogICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFz
dCk7CiAgICB9CiMgMTM0OSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAg
cmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bGFzdCkKICAgIHsKCiAgICAgICAgIAoKICAgICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xh
c3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDEzNzQgIi91c3IvaW5j
bHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0
aW9uYWxJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICByZXZl
cnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQp
CiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog
ICAgICAgIC0tX19sYXN0OwogICAgICAgICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CiAgICAgICAgKytf
X3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTM5OSAiL3Vz
ci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXVj
bGlkZWFuUmluZ0VsZW1lbnQ+CiAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQKICAgIF9fZ2NkKF9F
dWNsaWRlYW5SaW5nRWxlbWVudCBfX20sIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCiAgICB7
CiAgICAgIHdoaWxlIChfX24gIT0gMCkgewogICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBf
X3QgPSBfX20gJSBfX247CiAgICAgICAgX19tID0gX19uOwogICAgICAgIF9fbiA9IF9fdDsKICAg
ICAgfQogICAgICByZXR1cm4gX19tOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9G
b3J3YXJkSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAg
ICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAg
ICAgICByZXR1cm47CgogICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBfX21pZGRsZTsKICAg
ICAgZG8gewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAgIGlm
IChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAg
ICAgfSB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KTsKCiAgICAgIF9fZmlyc3QyID0gX19taWRk
bGU7CgogICAgICB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KSB7CiAgICAgICAgc3dhcCgqX19m
aXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAg
ICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgICAgIGVsc2UgaWYgKF9fZmlyc3QyID09
IF9fbGFzdCkKICAgICAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIH0KICAgIH0KCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBf
X3JvdGF0ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAg
IAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRs
ZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgX19yZXZlcnNlKF9fbWlkZGxlLCBf
X2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwoKICAgICAgd2hpbGUgKF9fZmly
c3QgIT0gX19taWRkbGUgJiYgX19taWRkbGUgIT0gX19sYXN0KQogICAgICAgIHN3YXAgKCpfX2Zp
cnN0KyssICotLV9fbGFzdCk7CgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkgewogICAg
ICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZygpKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX3JldmVyc2UoX19maXJzdCwgX19t
aWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICB9CiAgICB9CgoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX3Jv
dGF0ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKICAg
ICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAg
ICAgICByZXR1cm47CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBf
VmFsdWVUeXBlOwoKICAgICAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAg
IF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBfX2wg
PSBfX24gLSBfX2s7CgogICAgICBpZiAoX19rID09IF9fbCkgewogICAgICAgIHN3YXBfcmFuZ2Vz
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9Cgog
ICAgICBfRGlzdGFuY2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICAgICAgZm9yIChfRGlzdGFu
Y2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykgewogICAgICAgIF9WYWx1ZVR5cGUgX190bXAg
PSAqX19maXJzdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0OwoKICAg
ICAgICBpZiAoX19rIDwgX19sKSB7CiAgICAgICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBf
X2ogPCBfX2wvX19kOyBfX2orKykgewogICAgICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9f
bCkgewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCAtIF9fbCk7CiAgICAgICAgICAgICAgX19w
IC09IF9fbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsK
ICAgICAgICAgICAgX19wICs9IF9fazsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVs
c2UgewogICAgICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19rL19fZCAtIDE7
IF9faiArKykgewogICAgICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAgICAg
ICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICAgICAgICBfX3AgKz0gX19rOwogICAg
ICAgICAgICB9CgogICAgICAgICAgICAqX19wID0gKiAoX19wIC0gX19sKTsKICAgICAgICAgICAg
X19wIC09IF9fbDsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICpfX3AgPSBfX3RtcDsK
ICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNTYxICIvdXNyL2luY2x1ZGUvZysr
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAg
IGlubGluZSB2b2lkCiAgICByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX21pZGRsZSwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjppdGVyYXRvcl9jYXRl
Z29yeSBfSXRlclR5cGU7CiAgICAgIF9fcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3Qs
IF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxNTg5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX091dHB1
dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcm90YXRlX2NvcHkoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBy
ZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShfX21pZGRsZSwgX19sYXN0LCBfX3Jl
c3VsdCkpOwogICAgfQojIDE2MTIgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIF9EaXN0YW5jZQogICAg
X19yYW5kb21fbnVtYmVyKF9EaXN0YW5jZSBfX24pCiAgICB7CgogICAgICByZXR1cm4gbHJhbmQ0
OCgpICUgX19uOwoKCgogICAgfQojIDE2MzQgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxn
by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUg
dm9pZAogICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpIHJldHVybjsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0
ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaXRlcl9zd2FwKF9faSwgX19maXJz
dCArIF9fcmFuZG9tX251bWJlcigoX19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CiMgMTY2MCAi
L3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KICAgIHZv
aWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0
b3ImIF9fcmFuZCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSBy
ZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9f
aSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3Jh
bmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAg
IF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICBmb3J3YXJk
X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4g
X19maXJzdDsKCiAgICAgIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgIGlmICgrK19f
Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIF9Gb3J3YXJkSXRlciBfX25l
eHQgPSBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkKICAgICAgICBp
ZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgICAgICBzd2FwKCpfX2ZpcnN0LCAqX19uZXh0KTsK
ICAgICAgICAgICsrX19maXJzdDsKICAgICAgICB9CgogICAgICByZXR1cm4gX19maXJzdDsKICAg
IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1l
IF9QcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fcGFydGl0aW9uKF9CaWRp
cmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3aGlsZSAo
dHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICAgICAgcmV0dXJu
IF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAg
ICArK19fZmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIC0t
X19sYXN0OwogICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19s
YXN0KQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UgaWYgKCFfX3By
ZWQoKl9fbGFzdCkpCiAgICAgICAgICAgIC0tX19sYXN0OwogICAgICAgICAgZWxzZQogICAgICAg
ICAgICBicmVhazsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAr
K19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNzQ4ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1By
ZWRpY2F0ZT4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHBhcnRpdGlvbihfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUHJlZGljYXRl
IF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIF9fcGFydGl0aW9uKF9f
Zmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAg
IH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJl
ZGljYXRlLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9faW5wbGFj
ZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9E
aXN0YW5jZSBfX2xlbikKICAgIHsKICAgICAgaWYgKF9fbGVuID09IDEpCiAgICAgICAgcmV0dXJu
IF9fcHJlZCgqX19maXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIg
X19taWRkbGUgPSBfX2ZpcnN0OwogICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwog
ICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9f
Zmlyc3QsIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIpOwogICAgICBfRm9yd2FyZEl0ZXIgX19l
bmQgPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu
IC0gX19sZW4gLyAyKTsKICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiAg
ICAgIGFkdmFuY2UoX19iZWdpbiwgZGlzdGFuY2UoX19taWRkbGUsIF9fZW5kKSk7CiAgICAgIHJl
dHVybiBfX2JlZ2luOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
ciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlw
ZW5hbWUgX0Rpc3RhbmNlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3N0YWJsZV9wYXJ0aXRpb25f
YWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBf
X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkK
ICAgIHsKICAgICAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsKICAgICAgICBfUG9pbnRlciBfX3Jlc3VsdDIgPSBf
X2J1ZmZlcjsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQog
ICAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICAgKl9fcmVzdWx0MSA9
ICpfX2ZpcnN0OwogICAgICAgICAgICArK19fcmVzdWx0MTsKICAgICAgICAgIH0KICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7CiAgICAgICAgICAgICsr
X19yZXN1bHQyOwogICAgICAgICAgfQogICAgICAgIGNvcHkoX19idWZmZXIsIF9fcmVzdWx0Miwg
X19yZXN1bHQxKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQxOwogICAgICB9CiAgICAgIGVsc2Ug
ewogICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5j
ZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9f
c3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19sZW4gLyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICBfRm9yd2FyZEl0
ZXIgX19lbmQgPSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoIF9fbWlkZGxlLCBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsK
ICAgICAgICByb3RhdGUoX19iZWdpbiwgX19taWRkbGUsIF9fZW5kKTsKICAgICAgICBhZHZhbmNl
KF9fYmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICAgIHJldHVybiBfX2Jl
Z2luOwogICAgICB9CiAgICB9CiMgMTg0OCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNh
dGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHN0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNh
dGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UKICAgICAgewogICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUg
X1ZhbHVlVHlwZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y
d2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCiAgICAgICAgX1RlbXBv
cmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xh
c3QpOwogICAgICAgIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAgICAgICAgcmV0dXJuIF9fc3Rh
YmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX2J1Zi5y
ZXF1ZXN0ZWRfc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19idWYuYmVnaW4oKSwgX19idWYuc2l6ZSgpKTsKICAgICAgICBlbHNlCiAgICAgICAg
ICByZXR1cm4gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3By
ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
VHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX1JhbmRv
bUFjY2Vzc0l0ZXIKICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1RwIF9fcGl2b3QpCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUg
KCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAtLV9fbGFz
dDsKICAgICAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAgICAgICAgICAtLV9fbGFzdDsK
ICAgICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgICAgIHJldHVybiBfX2ZpcnN0
OwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICsrX19maXJzdDsK
ICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy
LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIK
ICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2
b3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3
aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAgICAgICsrX19maXJzdDsKICAg
ICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQog
ICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAg
ICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsK
ICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxOTI5ICIvdXNyL2luY2x1ZGUvZysr
L2JpdHMvc3RsX2FsZ28uaCIgMwogIGVudW0geyBfTV90aHJlc2hvbGQgPSAxNiB9OwoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2
b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwgX1RwIF9fdmFsKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xh
c3Q7CiAgICAgIC0tX19uZXh0OwogICAgICB3aGlsZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAg
ICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0t
X19uZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf
Q29tcGFyZT4KICAgIHZvaWQKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAg
d2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICAgICAqX19sYXN0ID0gKl9fbmV4
dDsKICAgICAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAgICAgLS1fX25leHQ7CiAgICAgIH0KICAg
ICAgKl9fbGFzdCA9IF9fdmFsOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf
X2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAgICB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9f
dmFsID0gKl9faTsKICAgICAgICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgICAgICAgY29w
eV9iYWNrd2FyZChfX2ZpcnN0LCBfX2ksIF9faSArIDEpOwogICAgICAgICAgKl9fZmlyc3QgPSBf
X3ZhbDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFy
X2luc2VydChfX2ksIF9fdmFsKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9f
aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg
ICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNj
ZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsK
ICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1
ZV90eXBlIF9fdmFsID0gKl9faTsKICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkp
IHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAg
ICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9f
dW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCwgX19jb21wKTsKICAgICAgfQogICAg
fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5l
IHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1
ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAh
PSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBf
VmFsdWVUeXBlKCpfX2kpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1
YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg
X19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIGZvciAoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAg
X191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2
b2lkCiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly
c3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
Zmlyc3QgKyBfTV90aHJlc2hvbGQpOwogICAgICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAgZWxzZQogICAg
ICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2
b2lkCiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVz
aG9sZCkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9NX3Ro
cmVzaG9sZCwgX19jb21wKTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2Zp
cnN0ICsgX01fdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZQog
ICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIF9TaXplCiAgICBfX2xn
KF9TaXplIF9fbikKICAgIHsKICAgICAgX1NpemUgX19rOwogICAgICBmb3IgKF9fayA9IDA7IF9f
biAhPSAxOyBfX24gPj49IDEpICsrX19rOwogICAgICByZXR1cm4gX19rOwogICAgfQoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZT4KICAg
IHZvaWQKICAgIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRo
X2xpbWl0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xh
c3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQg
PT0gMCkgewogICAgICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsK
ICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRp
dGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Zh
bHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19s
YXN0IC0gMSkpKSk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2Rl
cHRoX2xpbWl0KTsKICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgfQoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlw
ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVl
X3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhy
ZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICAgICAgcGFy
dGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgICAgcmV0
dXJuOwogICAgICAgIH0KICAgICAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3Qs
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVk
aWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19j
b21wKSksCiAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0
LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7
CiAgICAgIH0KICAgIH0KIyAyMTY2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQK
ICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAg
IGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJz
dCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMik7CiAgICAgICAgX19maW5hbF9p
bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICB9CiAgICB9CiMgMjE5NyAiL3Vz
ci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgc29y
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9D
b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAg
ICAgCgogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9s
b29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsIF9fY29tcCk7
CiAgICAgICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7
CiAgICAgIH0KICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0
ZXI+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19sYXN0
IC0gX19maXJzdCA8IDE1KSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh
c3QpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21p
ZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vf
c3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3Nv
cnQoX19taWRkbGUsIF9fbGFzdCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJz
dCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRs
ZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRk
bGUpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0
eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0
IC0gX19maXJzdCA8IDE1KSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh
c3QsIF9fY29tcCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgICAgIF9f
aW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgICAgX19p
bnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIF9fbWVy
Z2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19sYXN0IC0gX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIxLCB0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNl
PgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSkKICAgIHsKICAg
ICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogICAgICB3aGlsZSAo
X19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICAgICAgX19yZXN1bHQgPSBtZXJn
ZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgX19yZXN1bHQpOwogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsK
ICAgICAgfQoKICAgICAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmly
c3QpLCBfX3N0ZXBfc2l6ZSk7CiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBf
c2l6ZSwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAgIF9fcmVzdWx0
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIxLCB0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nl
c3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3Np
emUsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9E
aXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFz
dCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19m
aXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19m
aXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAg
ICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KICAgICAgX19zdGVwX3NpemUgPSBt
aW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CgogICAgICBtZXJn
ZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgIF9fZmlyc3QgKyBf
X3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgX19j
b21wKTsKICAgIH0KCiAgZW51bSB7IF9NX2NodW5rX3NpemUgPSA3IH07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAg
ICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
IF9fY2h1bmtfc2l6ZSkKICAgIHsKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19j
aHVua19zaXplKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsg
X19jaHVua19zaXplKTsKICAgICAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICAgICAgfQog
ICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgdm9pZAogICAgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKICAg
IHsKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICAg
ICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplLCBfX2Nv
bXApOwogICAgICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogICAgICB9CiAgICAgIF9faW5z
ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXI+CiAgICB2b2lkCiAg
ICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2lu
dGVyIF9fYnVmZmVyKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CgogICAgICBf
RGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfUG9pbnRlciBfX2J1ZmZl
cl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgICAgIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9
IF9NX2NodW5rX3NpemU7CiAgICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19s
YXN0LCBfX3N0ZXBfc2l6ZSk7CgogICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewog
ICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3Rl
cF9zaXplKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICAgIF9fbWVyZ2Vfc29ydF9s
b29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7CiAgICAg
ICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgog
ICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVu
Y2VfdHlwZSBfRGlzdGFuY2U7CgogICAgICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2Zp
cnN0OwogICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAg
ICAgIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9NX2NodW5rX3NpemU7CiAgICAgIF9fY2h1bmtf
aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKCiAg
ICAgIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICAgICAgX19tZXJnZV9zb3J0X2xv
b3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICAg
ICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwg
X19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19z
dGVwX3NpemUgKj0gMjsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZv
aWQKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9p
bnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIF9EaXN0
YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9fbGVuID4gX19i
dWZmZXJfc2l6ZSkgewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19t
aWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2Fk
YXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAg
fQogICAgICBlbHNlIHsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwg
X19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19t
aWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICB9CiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUo
X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCks
CiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19i
dWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwKICAgICAg
ICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRp
dmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9f
YnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7
CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogICAg
ICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFw
dGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRh
cHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICB9CiAgICAgIGVsc2UgewogICAg
ICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIs
IF9fY29tcCk7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xh
c3QsIF9fYnVmZmVyLCBfX2NvbXApOwogICAgICB9CiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19m
aXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAg
ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZm
ZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0K
IyAyNDMwICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAg
IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5
cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNz
SXRlciwgX1ZhbHVlVHlwZT4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVn
aW4oKSA9PSAwKQogICAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3Qp
OwogICAgICBlbHNlCiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xh
c3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1Zi5zaXplKCkpKTsKICAgIH0KIyAyNDY2
ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAg
ICBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
Pjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAg
X1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9WYWx1ZVR5cGU+IGJ1ZihfX2Zp
cnN0LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX2lucGxh
Y2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICBlbHNlCiAgICAg
ICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBf
RGlzdGFuY2VUeXBlKGJ1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb21wKTsKICAgIH0KIyAyNTAyICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgcGFy
dGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
UmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAK
CiAgICAgIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIGZvciAoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYg
KCpfX2kgPCAqX19maXJzdCkKICAgICAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUs
IF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICAgIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRs
ZSk7CiAgICB9CiMgMjU0MCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg
ICB2b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBt
YWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIGZvciAoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYg
KF9fY29tcCgqX19pLCAqX19maXJzdCkpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICAgIHNvcnRfaGVhcChf
X2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgIH0KIyAyNTc5ICIvdXNyL2luY2x1ZGUvZysr
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIHBhcnRpYWxf
c29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBl
IF9JbnB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAgICAKCiAgICAg
IGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFz
dDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRf
Zmlyc3Q7CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFz
dCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAgICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2Zp
cnN0OwogICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgICAgICsrX19maXJzdDsKICAg
ICAgfQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7
CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA8
ICpfX3Jlc3VsdF9maXJzdCkKICAgICAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3Qs
IF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUo
X19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRWYWx1ZVR5cGUoKl9fZmlyc3QpKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAg
IH0KICAgICAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwog
ICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQojIDI2MzMgIi91c3IvaW5jbHVk
ZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX1JhbmRv
bUFjY2Vzc0l0ZXIKICAgIHBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
cmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1
ZV90eXBlIF9JbnB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6
ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAgICAK
CgogICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVz
dWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9f
cmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9y
ZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9yZWFsX2xhc3Qg
PSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAgICArK19fZmly
c3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFs
X2xhc3QsIF9fY29tcCk7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAg
IGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgICAgICBfX2FkanVz
dF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAg
ICAgICAgICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0
KSwKICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSwKICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0K
ICAgICAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29t
cCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMgMjY4NiAiL3Vzci9p
bmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1
ZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykg
ewogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVk
X3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0
KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICooX19sYXN0IC0gMSkpKSk7CiAgICAgICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAg
X19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGFzdCA9IF9fY3V0Owog
ICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KIyAy
NzI4ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIG50
aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+
Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAoX19s
YXN0IC0gX19maXJzdCA+IDMpIHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAg
ICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3Qg
KyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBpZiAoX19jdXQgPD0gX19udGgpCiAgICAg
ICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sYXN0ID0gX19j
dXQ7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29t
cCk7CiAgICB9CiMgMjc2OCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJk
SXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5j
ZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlz
dGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3Rh
bmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxl
IChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlk
ZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAg
IGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwog
ICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7
CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICB9
CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI4MTYgIi91c3IvaW5jbHVkZS9nKysvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt
ZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBsb3dlcl9ib3Vu
ZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFs
dWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0
ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAg
X0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9E
aXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3
aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBf
X21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg
ICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBfX2ZpcnN0ID0g
X19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0g
X19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hh
bGY7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjg1NiAiL3Vzci9pbmNs
dWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46
OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAg
ICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJk
SXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYg
PSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNl
KF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAg
ICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19maXJzdCA9IF9f
bWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9f
aGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoj
IDI5MDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg
X0ZvcndhcmRJdGVyCiAgICB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJl
IF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv
cndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNl
VHlwZTsKCgogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNl
KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9y
d2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19o
YWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2
YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19taWRk
bGUpKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBf
X2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9
IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmly
c3Q7CiAgICB9CiMgMjk0OCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHBhaXI8X0Zv
cndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAgICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlw
ZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y
d2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgoKICAgICAKICAgICAK
ICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh
c3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlk
ZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAg
X19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAg
YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwp
IHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAg
ICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNl
IGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAg
IGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUs
IF9fdmFsKTsKICAgICAgICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICAgICAgX19y
aWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsKTsKICAgICAgICAg
IHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQp
OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3
YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7CiAgICB9CiMgMzAwMyAiL3Vzci9pbmNsdWRlL2cr
Ky9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0Zv
cndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5
cGU7CgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAg
X0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogICAgICB3aGlsZSAoX19s
ZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9
IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAo
X19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7
CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0g
MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQog
ICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2xlZnQg
PSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwsIF9fY29tcCk7CiAgICAgICAg
ICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3Vu
ZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgICAgIHJldHVybiBw
YWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAg
IH0KICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4o
X19maXJzdCwgX19maXJzdCk7CiAgICB9CiMgMzA1MiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9U
cD4KICAgIGJvb2wKICAgIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7
CgoKICAgICAKICAgICAKCiAgICAgCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91
bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYm
ICEoX192YWwgPCAqX19pKTsKICAgIH0KIyAzMDgzICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1Rw
LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIGNvbnN0
IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoK
CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9f
dmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhX19jb21wKF9fdmFs
LCAqX19pKTsKICAgIH0KIyAzMTE1ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg
dHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBf
X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAg
aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAg
IH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3Qy
LCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQojIDMx
NjYgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRl
ciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBtZXJn
ZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAg
CgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmly
c3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2Zp
cnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19m
aXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0
OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmly
c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19t
ZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQogICAgewog
ICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICAgICAgcmV0dXJuOwogICAg
ICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgKl9f
Zmlyc3QpCiAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAg
ICByZXR1cm47CiAgICAgIH0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0g
X19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxl
OwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0g
MDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgIF9fbGVuMTEgPSBfX2xlbjEg
LyAyOwogICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgIF9fc2Vj
b25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAg
ICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9
CiAgICAgIGVsc2UgewogICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFu
Y2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2Jv
dW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgICBfX2xlbjExID0g
ZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICB9CiAgICAgIHJvdGF0ZShfX2Zp
cnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAgYWR2YW5jZShfX25ld19taWRkbGUs
IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpKTsKICAgICAgX19tZXJnZV93aXRob3V0
X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIpOwogICAgICBfX21lcmdlX3dpdGhvdXRf
YnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMik7CiAgICB9
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBf
RGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV93aXRob3V0
X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBf
X2xlbjIgPT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0g
MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCAqX19maXJzdCkpCiAgICAgICAgICAg
ICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0K
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICBfRGlzdGFuY2Ug
X19sZW4xMSA9IDA7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgaWYgKF9fbGVu
MSA+IF9fbGVuMikgewogICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgIGFkdmFu
Y2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2Jv
dW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgICBfX2xl
bjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIH0KICAgICAgZWxz
ZSB7CiAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgYWR2YW5jZShfX3NlY29u
ZF9jdXQsIF9fbGVuMjIpOwogICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJz
dCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4xMSA9IGRp
c3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJz
dF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19uZXdfbWlkZGxlID0gX19maXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBk
aXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9i
dWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyLCBfX2NvbXApOwogICAgICBfX21lcmdlX3dp
dGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMiwg
X19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0
ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9E
aXN0YW5jZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fcm90YXRlX2FkYXB0aXZlKF9C
aWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlcjEgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9E
aXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIy
IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUp
CiAgICB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXJfZW5kOwogICAgICBpZiAo
X19sZW4xID4gX19sZW4yICYmIF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19i
dWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAgY29w
eV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKICAgICAgICByZXR1cm4gY29w
eShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2ZpcnN0KTsKICAgICAgfQogICAgICBlbHNlIGlm
IChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNvcHko
X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICBjb3B5KF9fbWlkZGxlLCBfX2xh
c3QsIF9fZmlyc3QpOwogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fYnVmZmVyLCBfX2J1
ZmZlcl9lbmQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgcm90YXRlKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICAgIGFkdmFuY2UoX19maXJzdCwgZGlzdGFu
Y2UoX19taWRkbGUsIF9fbGFzdCkpOwogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICB9CiAg
ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5h
bWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXIzPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMwogICAgX19tZXJnZV9iYWNrd2FyZChfQmlk
aXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVj
dGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyMyBfX3Jlc3VsdCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAg
ICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICAg
ICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQo
X19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgICAtLV9f
bGFzdDI7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgaWYgKCpfX2xhc3QyIDwgKl9fbGFz
dDEpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgICAgICBpZiAoX19m
aXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJz
dDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QxOwogICAgICAgIH0K
ICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAgICAg
ICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh
cmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QyOwog
ICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVj
dGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlw
ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMywgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIzCiAgICBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19m
aXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3Qy
LAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0LAogICAg
ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0
MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xh
c3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJl
dHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0t
X19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGlm
IChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAq
X19sYXN0MTsKICAgICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgICBy
ZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAg
ICAgICAtLV9fbGFzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKi0tX19y
ZXN1bHQgPSAqX19sYXN0MjsKICAgICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAg
ICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3Vs
dCk7CiAgICAgICAgICAtLV9fbGFzdDI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2Us
IHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19s
ZW4yLAogICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9f
YnVmZmVyX3NpemUpCiAgICB7CiAgICAgICAgICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xl
bjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQg
PSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgICAgIG1lcmdlKF9f
YnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAgICAg
ICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAg
ICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1
ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9f
YnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsK
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwog
ICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgICAgICAgIF9EaXN0YW5jZSBf
X2xlbjIyID0gMDsKICAgICAgICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgICAg
ICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShf
X2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgICAgICAgICAgIF9fc2Vjb25kX2N1dCA9IGxv
d2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAgICAg
ICAgIF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAg
ICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVu
MiAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsK
ICAgICAgICAgICAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21p
ZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBkaXN0YW5j
ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgICAgICAgICAgICAgIF9fcm90YXRlX2Fk
YXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIyLCBfX2J1ZmZl
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZmZXJfc2l6ZSk7CiAg
ICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21p
ZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1
ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdf
bWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJf
c2l6ZSk7CiAgICAgICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Qb2ludGVyLAogICAg
ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9hZGFwdGl2ZShf
QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFu
Y2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3Rh
bmNlIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKICAgICAgICAgIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZl
cl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJz
dCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICAgICAgbWVyZ2UoX19idWZmZXIsIF9fYnVm
ZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCwgX19jb21wKTsKICAgICAgICAgIH0K
ICAgICAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAg
IF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIp
OwogICAgICAgICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZl
ciwgX19idWZmZXJfZW5kLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICAgICAg
ICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0g
MDsKICAgICAgICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgICAgICAgICAgICBf
X2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1
dCwgX19sZW4xMSk7CiAgICAgICAgICAgICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5k
KF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgICAgICAgICAg
ICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICAgICAg
ICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gX19sZW4y
IC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwog
ICAgICAgICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlk
ZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAgICAgICAgICAgICBfX2xlbjExID0g
ZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICAgICAgICAgICAgICBfX3Jv
dGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwg
X19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyX3Np
emUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBf
X25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4y
MiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgICAgICAgICAgIF9fbWVyZ2Vf
YWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19s
ZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1
ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICAgICAgICAgIH0KICAgIH0KIyAzNTA4ICIv
dXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9C
aWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21p
ZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVy
Pjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAg
ICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAg
IF9EaXN0YW5jZVR5cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwogICAg
ICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAg
ICAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1
ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAg
IF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4x
LCBfX2xlbjIpOwogICAgICBlbHNlCiAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBf
X21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSk7CiAgICB9CiMgMzU1
OSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgaW5w
bGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRl
cj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQog
ICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBpZiAoX19maXJz
dCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuOwoKICAg
ICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAg
ICAgIF9EaXN0YW5jZVR5cGUgX19sZW4yID0gZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCk7Cgog
ICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9f
YnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICAg
ICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xl
bjEsIF9fbGVuMiwgX19jb21wKTsKICAgICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUo
X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAgIGlu
Y2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7Cgog
ICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmly
c3QxKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoKl9fZmlyc3QxIDwg
Kl9fZmlyc3QyKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAgICAgICAgICAr
K19fZmlyc3QxLCArK19fZmlyc3QyOwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ
dGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7Cgog
ICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIs
ICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZihfX2Nv
bXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBl
bHNlCiAgICAgICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICAgICAgcmV0dXJuIF9fZmly
c3QyID09IF9fbGFzdDI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0
eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRl
cgogICAgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
LAogICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAK
ICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0
MikgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0
MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAg
ICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAg
ICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg
ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAg
ICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3Qy
LCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRw
dXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAg
IHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAg
ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoK
ICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3Qx
ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmIChfX2NvbXAo
Kl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7
CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAo
Kl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7
CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICAr
K19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJl
dHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl
c3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg
X0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNl
dF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf
X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsK
CiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3Qx
ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3Qx
IDwgKl9fZmlyc3QyKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlIGlmICgqX19m
aXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2Ugewog
ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAg
ICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAg
cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg
dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5
cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9pbnRlcnNlY3Rpb24oX0lu
cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg
ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoK
ICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3Qx
ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpf
X2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBp
ZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgICsrX19maXJzdDI7CiAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICAr
K19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAg
ICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+
CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEs
IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAg
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAg
ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAg
ICAgIH0KICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICAr
K19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAg
ICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0
MSwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw
ZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAg
ICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAg
KytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2Ug
aWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwog
ICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7
CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0
SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9zeW1t
ZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAg
ICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAg
ICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq
X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAg
ICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAg
KytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3Qx
OwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmly
c3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5
cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091
dHB1dEl0ZXIKICAgIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgog
ICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf
X2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAg
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAg
ICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0
MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAg
ICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVs
c2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAg
fQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19s
YXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVz
dWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAg
aWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0KQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0Owog
ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1heF9lbGVtZW50
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYg
KF9fY29tcCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICBy
ZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4K
ICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9
IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgq
X19maXJzdCA8ICpfX3Jlc3VsdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAg
cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtaW5fZWxlbWVudChfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9D
b21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09
IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9f
Zmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmIChfX2Nv
bXAoKl9fZmlyc3QsICpfX3Jlc3VsdCkpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAg
ICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyPgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25h
bEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAg
ICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAg
ICBpZiAoX19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9f
bGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faSA8ICpfX2lp
KSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAg
d2hpbGUgKCEoKl9faSA8ICotLV9faikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3
YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAg
ICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihf
QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoK
ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAo
X19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsK
ICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2ksICpfX2lp
KSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAg
IHdoaWxlICghX19jb21wKCpfX2ksICotLV9faikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBp
dGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkg
ewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl
Y3Rpb25hbEl0ZXI+CiAgICBib29sCiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAg
ICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAg
IGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19s
YXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmICgqX19paSA8ICpfX2kp
IHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3
aGlsZSAoISgqLS1fX2ogPCAqX19pKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dh
cChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAg
ICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs
SXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBwcmV2X3Blcm11dGF0aW9uKF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgog
ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChf
X2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0Owog
ICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmIChfX2NvbXAoKl9faWksICpfX2kp
KSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAg
d2hpbGUgKCFfX2NvbXAoKi0tX19qLCAqX19pKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0
ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7
CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJz
dF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7
ICsrX19maXJzdDEpCiAgICAgICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7
IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgICAgIGlmICgqX19maXJzdDEgPT0g
Kl9faXRlcikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0
MTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0lucHV0SXRlcgogICAgZmlu
ZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIs
CiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAK
ICAgICAKICAgICAKCgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7
ICsrX19maXJzdDEpCiAgICAgICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7
IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgICAgIGlmIChfX2NvbXAoKl9fZmly
c3QxLCAqX19pdGVyKSkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4g
X19sYXN0MTsKICAgIH0KIyA0MjAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cjI+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJz
dDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBf
X2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBmb3J3YXJkX2l0
ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0
MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAg
ICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewog
ICAgICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2go
X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgICAgIGlmIChfX25l
d19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAgICAg
ICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmlu
YXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0
ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg
Zm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAg
ICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09IF9f
bGFzdDIpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3
YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAg
ICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgICAgICA9IHNlYXJjaChfX2ZpcnN0
MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsIF9fY29tcCk7CiAgICAgICAgICBpZiAoX19u
ZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAg
ICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgX0JpZGly
ZWN0aW9uYWxJdGVyMQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3Qx
LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxf
QmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVy
YXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAgICBfUmV2SXRlcjEgX19y
bGFzdDEoX19maXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogICAg
ICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIp
LCBfX3JsYXN0Mik7CgogICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJl
dHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
cmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlz
dGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAg
IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5h
bWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGlj
YXRlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25h
bEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19s
YXN0MiwKICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29t
cCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0Jp
ZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0
b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9fcmxh
c3QxKF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAgICAg
X1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwg
X19ybGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKCiAg
ICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAg
ICAgIGVsc2UgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1
bHQuYmFzZSgpOwogICAgICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0Miwg
X19sYXN0MikpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQogICAgfQoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAg
ICBpbmxpbmUgX0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0
MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2Zp
cnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoK
ICAgICAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xh
c3QyLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3Qx
KSwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0Mikp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9y
d2FyZEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxp
bmUgX0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zv
cndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0Miwg
X0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Nv
bXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICByZXR1cm4gX19maW5kX2VuZChf
X2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg
ICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgICAg
ICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKICAgICAgICAgICAgICAgICAgICAgICAg
X19jb21wKTsKICAgIH0KCn0KIyA3MCAiL3Vzci9pbmNsdWRlL2crKy9hbGdvcml0aG0iIDIgMwoj
IDU3ICIvdXNyL2luY2x1ZGUvZysrL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9i
aXRzL2Jhc2ljX3N0cmluZy50Y2MiIDEgMwojIDQ1ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvYmFz
aWNfc3RyaW5nLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBlbmFt
ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfbWF4X3Np
emUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoX0NoYXJUKSkgLSAxKSAvIDQ7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgY29uc3QgX0NoYXJUCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29u
c3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90
eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zOwoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfU19l
bXB0eV9yZXBfc3RvcmFnZVsKICAgIChzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNp
emVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBf
X2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQg
JiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3Jl
ZmNvcHkoKTsKCiAgICAgICAgX0NoYXJUIF9fYnVmWzEwMF07CiAgICAgICAgc2l6ZV90eXBlIF9f
aSA9IDA7CiAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9faSA8IHNpemVvZihfX2J1
ZikgLyBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19idWZbX19pKytd
ID0gKl9fYmVnOwogICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgfQogICAgICAgIF9SZXAq
IF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ksIF9fYSk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmNv
cHkoX19yLT5fTV9yZWZkYXRhKCksIF9fYnVmLCBfX2kpOwogICAgICAgIF9fci0+X01fbGVuZ3Ro
ID0gX19pOwogICAgICAgIHRyeQogICAgICAgICAgewoKCgogICAgICAgICAgICBmb3IgKDs7KQog
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19wID0gX19yLT5fTV9yZWZk
YXRhKCkgKyBfX3ItPl9NX2xlbmd0aDsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19sYXN0ID0g
X19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5OwogICAgICAgICAgICAgICAgZm9y
ICg7OykKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChfX2JlZyA9
PSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
X19yLT5fTV9sZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpCiAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7CiAgICAgICAgICAgICAg
ICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNpemVf
dHlwZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgX1Jl
cCogX19hbm90aGVyID0gX1JlcDo6X1NfY3JlYXRlKF9fbGVuICsgMSwgX19hKTsKICAgICAgICAg
ICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhlci0+X01fcmVmZGF0YSgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsKICAg
ICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICAgICAgX19yID0g
X19hbm90aGVyOwogICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2xlbjsKICAgICAg
ICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgewogICAg
ICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19l
bmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv
cl90YWcpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6
ZV90eXBlPihkaXN0YW5jZShfX2JlZywgX19lbmQpKTsKCgogICAgICAgIGlmIChfX2J1aWx0aW5f
ZXhwZWN0KF9fYmVnID09IF9Jbkl0ZXIoMCksIDApKQogICAgICAgICAgX190aHJvd19sb2dpY19l
cnJvcigiYXR0ZW1wdCB0byBjcmVhdGUgc3RyaW5nIHdpdGggbnVsbCBwb2ludGVyIik7CgogICAg
ICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1
cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgX1JlcCogX19yID0gX1Jl
cDo6X1NfY3JlYXRlKF9fZG5ldywgX19hKTsKICAgICAgICB0cnkKICAgICAgICAgIHsgX1NfY29w
eV9jaGFycyhfX3ItPl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQogICAgICAgIGNhdGNo
KC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19kbmV3
OwoKICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX2RuZXddID0gX1JlcDo6X1NfdGVybWluYWw7
CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0No
YXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfU19j
b25zdHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAg
ICB7CiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgcmV0dXJu
IF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICBfUmVwKiBfX3IgPSBfUmVwOjpf
U19jcmVhdGUoX19uLCBfX2EpOwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19u
KQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fci0+X01fcmVmZGF0YSgpLCBfX24s
IF9fYyk7CiAgICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX19y
LT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIF9fci0+
X01fbGVuZ3RoID0gX19uOwogICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX25dID0gX1JlcDo6X1Nf
dGVybWluYWw7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmlu
Zyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9y
ZXAoKS0+X01fZ3JhYihfQWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgICAg
ICAgICAgICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBf
QWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNpemVfdHlwZSgpLCBf
Q2hhclQoKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgOiBfTV9kYXRhcGx1
cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX0FsbG9jKCkpLCBfQWxsb2Mo
KSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw
ZSBfX3BvcywKICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9f
YSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiks
IF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5
cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0
KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hh
clQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVj
dChfX3MsIF9fcyA/IF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSA6IDAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhzaXpl
X3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBs
dXMoX1NfY29uc3RydWN0KF9fbiwgX19jLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlciBfX2JlZywgX0lucHV0
SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0
cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+Ojphc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsK
ICAgICAgaWYgKF9NX3JlcCgpICE9IF9fc3RyLl9NX3JlcCgpKQogICAgICAgIHsKCiAgICAgICAg
ICBhbGxvY2F0b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBf
Q2hhclQqIF9fdG1wID0gX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX19hLCBfX3N0ci5nZXRfYWxs
b2NhdG9yKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAg
IF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9S
ZXA6OgogICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkKICAgIHsKICAg
ICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVvZihfUmVwKSArIChfTV9jYXBhY2l0eSArIDEpICog
c2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SYXdfYnl0ZXNfYWxsb2MoX19hKS5kZWFsbG9jYXRlKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpLCBfX3NpemUpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZv
aWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9NX2xlYWtfaGFy
ZCgpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgX01f
bXV0YXRlKDAsIDAsIDApOwogICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgfQoK
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwg
c2l6ZV90eXBlIF9fbGVuMikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlz
LT5zaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXplID0gX19vbGRfc2l6ZSAr
IF9fbGVuMiAtIF9fbGVuMTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSAr
IF9fcG9zICsgX19sZW4xOwogICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xk
X3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKCiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVk
KCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgewoKICAgICAgICAgIGFsbG9j
YXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKCgogICAgICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fcGFnZXNpemUgPSA0MDk2OwogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9j
X2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgICAgIGNvbnN0IHNpemVf
dHlwZSBfX3BhZ2VfY2FwYWNpdHkgPSAoX19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXpl
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc2l6ZW9mKF9S
ZXApIC0gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfUmVwKiBfX3I7CiAgICAgICAg
ICBpZiAoX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkgJiYgX19uZXdfc2l6ZSA+IF9fcGFnZV9jYXBh
Y2l0eSkKCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplID4gMipj
YXBhY2l0eSgpID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3NpemUg
OiAyKmNhcGFjaXR5KCksIF9fYSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fciA9IF9S
ZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplLCBfX2EpOwogICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBpZiAoX19wb3MpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6
Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CiAgICAgICAgICAgICAg
aWYgKF9faG93X211Y2gpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9N
X3JlZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCgu
Li4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rpc3Bvc2UoZ2V0X2FsbG9j
YXRvcigpKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgICAgX01f
cmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX19yLT5fTV9yZWZkYXRh
KCkpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVu
MikKICAgICAgICB7CgogICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpICsgX19w
b3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICB9CiAgICAgIF9NX3JlcCgp
LT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3Np
emU7CiAgICAgIF9NX2RhdGEoKVtfX25ld19zaXplXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwoKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjpyZXNlcnZlKHNpemVfdHlwZSBfX3JlcykKICAgIHsKICAgICAgaWYgKF9fcmVzID4gdGhp
cy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgewogICAg
ICAgICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgICAgX190aHJvd19s
ZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOwoKICAgICAgICAgIGlmIChfX3Jl
cyA8IHRoaXMtPnNpemUoKSkKICAgICAgICAgICAgX19yZXMgPSB0aGlzLT5zaXplKCk7CiAgICAg
ICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hh
clQqIF9fdG1wID0gX01fcmVwKCktPl9NX2Nsb25lKF9fYSwgX19yZXMgLSB0aGlzLT5zaXplKCkp
OwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEo
X190bXApOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OnN3YXAoYmFzaWNfc3RyaW5nJiBfX3MpCiAgICB7CiAgICAg
IGlmIChfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgX01fcmVwKCktPl9NX3NldF9z
aGFyYWJsZSgpOwogICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAg
ICBfX3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAodGhpcy0+Z2V0X2Fs
bG9jYXRvcigpID09IF9fcy5nZXRfYWxsb2NhdG9yKCkpCiAgICAgICAgewogICAgICAgICAgX0No
YXJUKiBfX3RtcCA9IF9NX2RhdGEoKTsKICAgICAgICAgIF9NX2RhdGEoX19zLl9NX2RhdGEoKSk7
CiAgICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQoKICAgICAgZWxzZQogICAg
ICAgIHsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDEoX01faWJlZ2luKCksIF9NX2llbmQo
KSwgX19zLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAyKF9f
cy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICp0aGlzID0gX190bXAyOwogICAg
ICAgICAgX19zID0gX190bXAxOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19jcmVhdGUoc2l6ZV90
IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxvYyYgX19hbGxvYykKICAgIHsKICAgICAgdHlwZWRlZiBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CgoKICAg
ICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkKCgoKICAgICAgICBfX3Rocm93X2xlbmd0
aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfU19jcmVhdGUiKTsKCgoKCiAgICAgIHNpemVfdCBfX3Np
emUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiMg
NDIxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMwogICAgICBjb25z
dCBzaXplX3QgX19wYWdlc2l6ZSA9IDQwOTY7CiAgICAgIGNvbnN0IHNpemVfdCBfX3N1YnBhZ2Vz
aXplID0gMTI4OwogICAgICBjb25zdCBzaXplX3QgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICog
c2l6ZW9mICh2b2lkKik7CiAgICAgIGlmICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUp
ID4gX19wYWdlc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19leHRyYSA9CiAgICAg
ICAgICAgIChfX3BhZ2VzaXplIC0gKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgJSBf
X3BhZ2VzaXplKSkKICAgICAgICAgICAgJSBfX3BhZ2VzaXplOwogICAgICAgICAgX19jYXBhY2l0
eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfX3NpemUgPSAoX19jYXBh
Y2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiAgICAgICAgfQogICAg
ICBlbHNlIGlmIChfX3NpemUgPiBfX3N1YnBhZ2VzaXplKQogICAgICAgIHsKICAgICAgICAgIHNp
emVfdCBfX2V4dHJhID0KICAgICAgICAgICAgKF9fc3VicGFnZXNpemUgLSAoKF9fc2l6ZSArIF9f
bWFsbG9jX2hlYWRlcl9zaXplKSAlIF9fc3VicGFnZXNpemUpKQogICAgICAgICAgICAlIF9fc3Vi
cGFnZXNpemU7CiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXplb2YoX0NoYXJU
KTsKICAgICAgICAgIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSAr
IHNpemVvZihfUmVwKTsKICAgICAgICB9CgoKCiAgICAgIHZvaWQqIF9fcGxhY2UgPSBfUmF3X2J5
dGVzX2FsbG9jKF9fYWxsb2MpLmFsbG9jYXRlKF9fc2l6ZSk7CiAgICAgIF9SZXAgKl9fcCA9IG5l
dyAoX19wbGFjZSkgX1JlcDsKICAgICAgX19wLT5fTV9jYXBhY2l0eSA9IF9fY2FwYWNpdHk7CiAg
ICAgIF9fcC0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9fcC0+X01fbGVuZ3RoID0gMDsKICAg
ICAgcmV0dXJuIF9fcDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hhclQqCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Nsb25lKGNvbnN0IF9BbGxv
YyYgX19hbGxvYywgc2l6ZV90eXBlIF9fcmVzKQogICAgewoKICAgICAgY29uc3Qgc2l6ZV90eXBl
IF9fcmVxdWVzdGVkX2NhcCA9IF9NX2xlbmd0aCArIF9fcmVzOwoKICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBzaXplX3R5cGUgX19tYWxsb2NfaGVh
ZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19w
YWdlX2NhcGFjaXR5ID0KICAgICAgICAoX19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXpl
IC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgLyBzaXplb2YoX0NoYXJU
KTsKICAgICAgX1JlcCogX19yOwogICAgICBpZiAoX19yZXF1ZXN0ZWRfY2FwID4gX01fY2FwYWNp
dHkgJiYgX19yZXF1ZXN0ZWRfY2FwID4gX19wYWdlX2NhcGFjaXR5KQoKICAgICAgICBfX3IgPSBf
UmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwID4gMipfTV9jYXBhY2l0eSA/CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fcmVxdWVzdGVkX2NhcCA6IDIqX01fY2FwYWNpdHksIF9f
YWxsb2MpOwogICAgICBlbHNlCiAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVz
dGVkX2NhcCwgX19hbGxvYyk7CgogICAgICBpZiAoX01fbGVuZ3RoKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgp
LCBfTV9yZWZkYXRhKCksIF9NX2xlbmd0aCk7IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2FsbG9jKTsKICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgX19yLT5fTV9sZW5ndGgg
PSBfTV9sZW5ndGg7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNp
emUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYgKF9fbiA+IG1heF9z
aXplKCkpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzaXpl
Iik7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3Np
emUgPCBfX24pCiAgICAgICAgdGhpcy0+YXBwZW5kKF9fbiAtIF9fc2l6ZSwgX19jKTsKICAgICAg
ZWxzZSBpZiAoX19uIDwgX19zaXplKQogICAgICAgIHRoaXMtPmVyYXNlKF9fbik7CgogICAgfQoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVy
YXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBf
X2syLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKCiAgICAgICAgYmFzaWNfc3RyaW5nIF9f
cyhfX2sxLCBfX2syKTsKICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9faTEsIF9faTIs
IF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7CiAgICAgIH0KCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19p
MiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg
X19rMikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXpl
X3R5cGU+KGRpc3RhbmNlKF9fazEsIF9fazIpKTsKICAgICAgICBzaXplX3R5cGUgX19kb2xkID0g
X19pMiAtIF9faTE7CiAgICAgICAgc2l6ZV90eXBlIF9fZG1heCA9IHRoaXMtPm1heF9zaXplKCk7
CgogICAgICAgIGlmIChfX2RtYXggPD0gX19kbmV3KQogICAgICAgICAgX190aHJvd19sZW5ndGhf
ZXJyb3IoImJhc2ljX3N0cmluZzo6X01fcmVwbGFjZSIpOwogICAgICAgIHNpemVfdHlwZSBfX29m
ZiA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgICBfTV9tdXRhdGUoX19vZmYsIF9fZG9sZCwg
X19kbmV3KTsKCgogICAgICAgIGlmIChfX2RuZXcpCiAgICAgICAgICBfU19jb3B5X2NoYXJzKF9N
X2RhdGEoKSArIF9fb2ZmLCBfX2sxLCBfX2syKTsKCiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShzaXpl
X3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwK
ICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpCiAgICB7CiAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChfX3Bv
czIgPiBfX3N0cnNpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmlu
Zzo6cmVwbGFjZSIpOwogICAgICBjb25zdCBib29sIF9fdGVzdG4yID0gX19uMiA8IF9fc3Ryc2l6
ZSAtIF9fcG9zMjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4yID0gX190ZXN0bjIgPyBf
X24yIDogX19zdHJzaXplIC0gX19wb3MyOwogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3Bv
czEsIF9fbjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2RhdGEoKSArIF9f
cG9zMiwgX19mb2xkbjIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewoKCgogICAgICBz
aXplX3R5cGUgX19zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBf
X3NpemUgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkp
CiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3Nh
ZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2liZWdpbigpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBl
IF9fbGVuID0gbWluKF9fc3RyLnNpemUoKSAtIF9fcG9zLCBfX24pICsgdGhpcy0+c2l6ZSgpOwog
ICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUo
X19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgp
LCBfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19z
dHIuX01fZm9sZChfX3BvcywgX19uKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQog
ICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlm
IChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7
CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fcywg
X19zICsgX19uKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBl
IF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBh
Y2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICAgcmV0dXJuIHRoaXMt
PnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29u
c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3Np
emVfdHlwZSBfX2xlbiA9IF9UcmFpdHM6Omxlbmd0aChfX2xocyk7CiAgICAgIF9fc3RyaW5nX3R5
cGUgX19zdHI7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyBfX3Jocy5zaXplKCkpOwogICAg
ICBfX3N0ci5hcHBlbmQoX19saHMsIF9fbGhzICsgX19sZW4pOwogICAgICBfX3N0ci5hcHBlbmQo
X19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmlu
Z190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBf
X3NpemVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19zaXplX3R5cGUg
X19sZW4gPSBfX3Jocy5zaXplKCk7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyAxKTsKICAg
ICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVu
ZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs
IHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgewogICAgICBzaXplX3R5cGUgX19uMSA9
IF9faTIgLSBfX2kxOwogICAgICBzaXplX3R5cGUgX19vZmYxID0gX19pMSAtIF9NX2liZWdpbigp
OwogICAgICBpZiAobWF4X3NpemUoKSAtICh0aGlzLT5zaXplKCkgLSBfX24xKSA8PSBfX24yKQog
ICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAg
ICAgX01fbXV0YXRlIChfX29mZjEsIF9fbjEsIF9fbjIpOwoKICAgICAgaWYgKF9fbjIpCiAgICAg
ICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKCkgKyBfX29mZjEsIF9fbjIsIF9fYyk7CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
biwgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBpZiAoX19wb3MgPiB0aGlzLT5z
aXplKCkpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29weSIp
OwoKICAgICAgaWYgKF9fbiA+IHRoaXMtPnNpemUoKSAtIF9fcG9zKQogICAgICAgIF9fbiA9IHRo
aXMtPnNpemUoKSAtIF9fcG9zOwoKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9kYXRh
KCkgKyBfX3BvcywgX19uKTsKCiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw
ZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsK
ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90IF9feHBv
cyA9IF9fcG9zOwogICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAg
Zm9yICg7IF9feHBvcyArIF9fbiA8PSBfX3NpemU7ICsrX194cG9zKQogICAgICAgIGlmICh0cmFp
dHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3hwb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAg
ICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw
ZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoX0NoYXJU
IF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl
ID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19yZXQgPSBucG9zOwogICAgICBpZiAo
X19wb3MgPCBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEg
PSBfTV9kYXRhKCk7CiAgICAgICAgICBzaXplX3R5cGUgX19uID0gX19zaXplIC0gX19wb3M7CiAg
ICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fZGF0YSArIF9f
cG9zLCBfX24sIF9fYyk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICBfX3JldCA9IF9f
cCAtIF9fZGF0YTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90
eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5k
KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0
CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChf
X24gPD0gX19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fcG9zID0gc3RkOjptaW4oX19zaXpl
IC0gX19uLCBfX3Bvcyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEo
KTsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5
cGU6OmNvbXBhcmUoX19kYXRhICsgX19wb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAgICAgICAg
ICAgcmV0dXJuIF9fcG9zOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19wb3MtLSA+
IDApOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5h
bWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKF9DaGFyVCBf
X2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9
IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXpl
X3QgX194cG9zID0gX19zaXplIC0gMTsKICAgICAgICAgIGlmIChfX3hwb3MgPiBfX3BvcykKICAg
ICAgICAgICAgX194cG9zID0gX19wb3M7CgogICAgICAgICAgZm9yICgrK19feHBvczsgX194cG9z
LS0gPiAwOyApCiAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBv
c10sIF9fYykpCiAgICAgICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgICB9CiAgICAgIHJl
dHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIGZvciAoOyBfX24g
JiYgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpCiAgICAgICAgewogICAgICAgICAgY29u
c3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19f
cG9zXSk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAg
ICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFy
VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAg
IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgJiYgX19u
KQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBf
X3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
ZiAodHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3NpemVdKSkKICAgICAg
ICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChf
X3NpemUtLSAhPSAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVf
dHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5k
X2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZv
ciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRz
X3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hwb3NdKSkKICAgICAgICAgIHJldHVy
biBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihf
Q2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hw
b3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3Mp
CiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAg
ICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5
cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9s
YXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg
X19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog
ICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9z
KQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClb
X19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAg
ICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25z
dAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAo
X19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAg
ICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX19zaXplXSwgX19jKSkKICAgICAg
ICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChf
X3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFy
ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg
ICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBf
X3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFy
ZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IG1pbihfX3NpemUgLSBfX3BvcywgX19uKTsK
ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQg
X19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fc3RyLmRhdGEo
KSwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6
ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3Mx
LCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAg
c2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf
dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19z
dHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MxID4gX19zaXplIHx8IF9fcG9zMiA+IF9fb3NpemUp
CiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoK
ICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MxLCBfX24xKTsKICAg
ICAgc2l6ZV90eXBlIF9fcm9zaXplID0gbWluKF9fb3NpemUgLSBfX3BvczIsIF9fbjIpOwogICAg
ICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19yb3NpemUpOwogICAgICBpbnQgX19y
ID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuZGF0YSgpICsgX19wb3MyLCBfX2xlbik7CiAg
ICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX3Jvc2l6ZTsKICAgICAgcmV0
dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAg
ICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGludCBfX3Ig
PSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19zaXplKTsKICAgICAgaWYg
KCFfX3IpCiAgICAgICAgX19yID0gX19zaXplIC0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwog
ICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBz
aXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf
dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAg
ICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAg
ICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgc2l6
ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXplX3R5
cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNf
dHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlmICgh
X19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25z
dCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAg
ICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9f
c2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJl
Iik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
cyksIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3Bvcywg
X19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAg
ICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3Ms
IF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7
CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNz
IF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLAogICAgICAgICAg
ICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgX19idWZz
aXopCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90
eXBlOwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXpl
X3R5cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7CiAgICAgIF9UcmFp
dHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAgIF9fYnVmW19fYnl0
ZXNdID0gX0NoYXJUKCk7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19z
dHJpbmc8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+Jgog
ICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBiYXNpY19vc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry
ZWFtPGNoYXI+JiwgY29uc3Qgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19p
c3RyZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJiwg
Y2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0
bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CgogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBiYXNpY19zdHJpbmc8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19p
c3RyZWFtPHdjaGFyX3Q+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwg
d3N0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYK
ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYsIGNvbnN0IHdzdHJpbmcmKTsK
ICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAgICBnZXRsaW5l
KGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShiYXNpY19pc3Ry
ZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYpOwp9CiMgNTggIi91c3IvaW5jbHVkZS9nKysvc3RyaW5n
IiAyIDMKIyA1MCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIv
dXNyL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVk
ZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9leGNlcHRp
b25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0
LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24o
dm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190
aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsK
CgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xl
bmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFu
Z2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
ICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZv
aWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA1MSAiL3Vzci9p
bmNsdWRlL2crKy9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgY2xh
c3MgbG9jYWxlOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK
ICAgIGlzc3BhY2UoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJULCBjb25zdCBsb2NhbGUm
KTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250
cmwoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgaW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzbG93ZXIoX0NoYXJU
LCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l
IGJvb2wKICAgIGlzYWxwaGEoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZGlnaXQoX0NoYXJULCBjb25zdCBs
b2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAg
IGlzcHVuY3QoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVt
KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJU
LCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l
IF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKCgogIGNsYXNzIGN0
eXBlX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGU7CiAg
dGVtcGxhdGU8PiBjbGFzcyBjdHlwZTxjaGFyPjsKCiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTx3
Y2hhcl90PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnlu
YW1lOwoKCiAgY2xhc3MgY29kZWN2dF9iYXNlOwogIGNsYXNzIF9fZW5jX3RyYWl0czsKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0
ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0OwogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBj
aGFyLCBtYnN0YXRlX3Q+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hh
ciwgbWJzdGF0ZV90PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9F
eHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWU7CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0
ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4K
ICAgIGNsYXNzIG51bV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1w
dW5jdDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGU7CiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcwogICAgY29sbGF0ZV9ieW5hbWU7CgoKICBjbGFzcyB0
aW1lX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0g
aXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0OwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0
b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWU7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU
PiA+CiAgICBjbGFzcyB0aW1lX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRp
bWVfcHV0X2J5bmFtZTsKCgogIGNsYXNzIG1vbmV5X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4K
ICAgIGNsYXNzIG1vbmV5X2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5
X3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAg
IGNsYXNzIG1vbmV5cHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRs
ID0gZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTsKCgogIGNsYXNzIG1lc3NhZ2Vz
X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXM7CiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOwoKCiAg
Y2xhc3MgbG9jYWxlCiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRl
Z29yeTsKCgogICAgY2xhc3MgZmFjZXQ7CiAgICBjbGFzcyBpZDsKICAgIGNsYXNzIF9JbXBsOwoK
ICAgIGZyaWVuZCBjbGFzcyBmYWNldDsKICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsKCiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVz
ZV9mYWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAg
ICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoK
CgogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUgPSAwOwogICAgc3RhdGljIGNvbnN0IGNh
dGVnb3J5IGN0eXBlID0gMUwgPDwgMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBudW1lcmlj
ID0gMUwgPDwgMTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwgPDwgMjsK
ICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lID0gMUwgPDwgMzsKICAgIHN0YXRpYyBjb25z
dCBjYXRlZ29yeSBtb25ldGFyeSA9IDFMIDw8IDQ7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkg
bWVzc2FnZXMgPSAxTCA8PCA1OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9IChjb2xs
YXRlIHwgY3R5cGUgfCBtb25ldGFyeSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1lcmljIHwgdGltZSB8IG1lc3NhZ2VzKTsKCgogICAgbG9jYWxlKCkgdGhy
b3coKTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIGV4
cGxpY2l0CiAgICBsb2NhbGUoY29uc3QgY2hhciogX19zKTsKCiAgICBsb2NhbGUoY29uc3QgbG9j
YWxlJiBfX2Jhc2UsIGNvbnN0IGNoYXIqIF9fcywgY2F0ZWdvcnkgX19jYXQpOwoKICAgIGxvY2Fs
ZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19j
YXQpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlKGNvbnN0IGxv
Y2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpOwoKICAgIH5sb2NhbGUoKSB0aHJvdygpOwoKICAg
IGNvbnN0IGxvY2FsZSYKICAgIG9wZXJhdG9yPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93
KCk7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUKICAgICAgY29t
YmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0OwoKCiAgICBzdHJpbmcKICAgIG5hbWUo
KSBjb25zdDsKCiAgICBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGxvY2FsZSYgX19vdGhlcikg
Y29uc3QgdGhyb3cgKCk7CgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgbG9j
YWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKQogICAgeyByZXR1cm4gISh0aGlzLT5vcGVyYXRv
cj09KF9fb3RoZXIpKTsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAg
ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBj
b25zdDsKCgogICAgc3RhdGljIGxvY2FsZQogICAgZ2xvYmFsKGNvbnN0IGxvY2FsZSYpOwoKICAg
IHN0YXRpYyBjb25zdCBsb2NhbGUmCiAgICBjbGFzc2ljKCk7CgogIHByaXZhdGU6CgogICAgX0lt
cGwqIF9NX2ltcGw7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfY2xhc3NpYzsKCgogICAgc3RhdGlj
IF9JbXBsKiBfU19nbG9iYWw7CgogICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19udW1fY2F0ZWdv
cmllcyA9IDY7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShfSW1wbCopIHRocm93KCk7CgogICAg
c3RhdGljIGlubGluZSB2b2lkCiAgICBfU19pbml0aWFsaXplKCkKICAgIHsKICAgICAgaWYgKCFf
U19jbGFzc2ljKQogICAgICAgIGNsYXNzaWMoKTsKICAgIH0KCiAgICBzdGF0aWMgY2F0ZWdvcnkK
ICAgIF9TX25vcm1hbGl6ZV9jYXRlZ29yeShjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fY29h
bGVzY2UoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5
IF9fY2F0KTsKICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6X0ltcGwKICB7CiAgcHVibGljOgoKICAg
IGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpmYWNldDsKCiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAg
ICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj
ZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJv
dygpOwoKICBwcml2YXRlOgoKICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwogICAgZmFj
ZXQqKiBfTV9mYWNldHM7CiAgICBzaXplX3QgX01fZmFjZXRzX3NpemU7CiAgICBjb25zdCBjaGFy
KiBfTV9uYW1lc1tfU19udW1fY2F0ZWdvcmllc107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjpp
ZCogY29uc3QgX1NfaWRfY3R5cGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25z
dCBfU19pZF9udW1lcmljW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1Nf
aWRfY29sbGF0ZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX3Rp
bWVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tb25ldGFyeVtd
OwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21lc3NhZ2VzW107CiAg
ICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QqIGNvbnN0IF9TX2ZhY2V0X2NhdGVnb3Jp
ZXNbXTsKCiAgICBpbmxpbmUgdm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCkKICAg
IHsgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsgfQoKICAgIGlubGluZSB2b2lkCiAg
ICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgewogICAgICBpZiAoX19leGNoYW5n
ZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAtMSkgPT0gMSkKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgeyBkZWxldGUgdGhpczsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAg
ICAgICAgICB7IH0KICAgICAgICB9CiAgICB9CgogICAgX0ltcGwoY29uc3QgX0ltcGwmLCBzaXpl
X3QpOwogICAgX0ltcGwoY29uc3QgY2hhciosIHNpemVfdCk7CiAgICBfSW1wbChmYWNldCoqLCBz
aXplX3QsIGJvb2wpOwoKICAgfl9JbXBsKCkgdGhyb3coKTsKCiAgICBfSW1wbChjb25zdCBfSW1w
bCYpOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBfSW1wbCYpOwoKICAgIGlubGluZSBi
b29sCiAgICBfTV9jaGVja19zYW1lX25hbWUoKQogICAgewogICAgICBib29sIF9fcmV0ID0gdHJ1
ZTsKICAgICAgZm9yIChzaXplX3QgaSA9IDA7IF9fcmV0ICYmIGkgPCBfU19udW1fY2F0ZWdvcmll
cyAtIDE7ICsraSkKICAgICAgICBfX3JldCAmPSAoc3RyY21wKF9NX25hbWVzW2ldLCBfTV9uYW1l
c1tpICsgMV0pID09IDApOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogICAgdm9pZAogICAg
X01fcmVwbGFjZV9jYXRlZ29yaWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOwoKICAgIHZvaWQK
ICAgIF9NX3JlcGxhY2VfY2F0ZWdvcnkoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKiBj
b25zdCopOwoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwqLCBjb25z
dCBsb2NhbGU6OmlkKik7CgogICAgdm9pZAogICAgX01faW5zdGFsbF9mYWNldChjb25zdCBsb2Nh
bGU6OmlkKiwgZmFjZXQqKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGlu
bGluZSB2b2lkCiAgICAgIF9NX2luaXRfZmFjZXQoX0ZhY2V0KiBfX2ZhY2V0KQogICAgICB7IF9N
X2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZmFjZXQpOyB9CiAgfTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxlOjpsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVy
LCBfRmFjZXQqIF9fZikKICAgIHsKICAgICAgX01faW1wbCA9IG5ldyBfSW1wbCgqX19vdGhlci5f
TV9pbXBsLCAxKTsKICAgICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwg
X19mKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX1NfbnVtX2NhdGVnb3JpZXM7
ICsrX19pKQogICAgICAgIF9NX2ltcGwtPl9NX25hbWVzW19faV0gPSAiKiI7CiAgICB9CgoKICBj
bGFzcyBsb2NhbGU6OmZhY2V0CiAgewogIHByaXZhdGU6CiAgICBmcmllbmQgY2xhc3MgbG9jYWxl
OwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CgogICAgX0F0b21pY193b3JkIF9NX3Jl
ZmVyZW5jZXM7CgogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIF9fY19sb2NhbGUgX1NfY19sb2Nh
bGU7CgogICAgZXhwbGljaXQKICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0aHJvdygpOwoK
ICAgIHZpcnR1YWwKICAgIH5mYWNldCgpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19jcmVhdGVf
Y19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IDApOwoKICAgIHN0YXRpYyBfX2NfbG9jYWxl
CiAgICBfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICAgIHN0YXRpYyB2
b2lkCiAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7CgogIHByaXZh
dGU6CiAgICB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICB2b2lkCiAg
ICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICBmYWNldChjb25zdCBmYWNldCYp
OwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBmYWNldCYpOwogIH07CgoKCiAgY2xhc3Mg
bG9jYWxlOjppZAogIHsKICBwcml2YXRlOgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZy
aWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog
ICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7
CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhh
c19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdyAoKTsKCgoKCiAgICBtdXRhYmxlIHNpemVfdCBf
TV9pbmRleDsKCgogICAgc3RhdGljIF9BdG9taWNfd29yZCBfU19oaWdod2F0ZXI7CgogICAgdm9p
ZAogICAgb3BlcmF0b3I9KGNvbnN0IGlkJik7CgogICAgaWQoY29uc3QgaWQmKTsKCiAgcHVibGlj
OgoKCiAgICBpZCgpOwoKICAgIGlubGluZSBzaXplX3QKICAgIF9NX2lkKCkgY29uc3QKICAgIHsK
ICAgICAgaWYgKCFfTV9pbmRleCkKICAgICAgICBfTV9pbmRleCA9IDEgKyBfX2V4Y2hhbmdlX2Fu
ZF9hZGQoJl9TX2hpZ2h3YXRlciwgMSk7CiAgICAgIHJldHVybiBfTV9pbmRleCAtIDE7CiAgICB9
CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAg
dXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj
ZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsK
fQojIDQ5ICIvdXNyL2luY2x1ZGUvZysrL2lvcyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9i
aXRzL2lvc19iYXNlLmgiIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvaW9zX2Jhc2Uu
aCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgZW51bSBfSW9zX0ZtdGZsYWdzIHsgX01faW9z
X2ZtdGZsYWdzX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3Bl
cmF0b3ImKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBf
SW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19i
KSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnwoX0lvc19GbXRmbGFncyBf
X2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nh
c3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19G
bXRmbGFncwogIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2Ip
CiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNf
Y2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8PShf
SW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9f
YSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJj0oX0lvc19GbXRm
bGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7
IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9f
YSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlu
bGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J+KF9Jb3NfRm10ZmxhZ3MgX19hKQogIHsgcmV0
dXJuIF9Jb3NfRm10ZmxhZ3MofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lv
c19PcGVubW9kZSB7IF9NX2lvc19vcGVubW9kZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUg
X0lvc19PcGVubW9kZQogIG9wZXJhdG9yJihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9k
ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBz
dGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0
b3J8KF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9z
X09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7
IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl4oX0lvc19PcGVubW9kZSBfX2Es
IF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8
aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVu
bW9kZQogIG9wZXJhdG9yfD0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikK
ICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBv
cGVyYXRvciY9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1
cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3Je
PShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9
IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfihfSW9zX09w
ZW5tb2RlIF9fYSkKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9f
YSkpOyB9CgoKICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRlX2VuZCA9IDFMIDw8
IDE2IH07CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciYoX0lvc19Jb3N0YXRlIF9f
YSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8
aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0
YXRlCiAgb3BlcmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyBy
ZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGlu
dD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXihfSW9zX0lvc3Rh
dGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNf
Y2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9z
X0lvc3RhdGUKICBvcGVyYXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19i
KQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAg
b3BlcmF0b3ImPShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVy
biBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXj0o
X0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19h
IF4gX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRl
IF9fYSkKICB7IHJldHVybiBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0K
CiAgZW51bSBfSW9zX1NlZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxTCA8PCAxNiB9OwoK
CiAgY2xhc3MgaW9zX2Jhc2UKICB7CiAgcHVibGljOgoKCiAgICBjbGFzcyBmYWlsdXJlIDogcHVi
bGljIGV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGZh
aWx1cmUoY29uc3Qgc3RyaW5nJiBfX3N0cikgdGhyb3coKTsKCgoKICAgICAgdmlydHVhbAogICAg
ICB+ZmFpbHVyZSgpIHRocm93KCk7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIHdo
YXQoKSBjb25zdCB0aHJvdygpOwoKICAgIHByaXZhdGU6CiAgICAgIGVudW0geyBfTV9idWZzaXpl
ID0gMjU2IH07CiAgICAgIGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsKCiAgICB9OwoKCiAgICB0
eXBlZGVmIF9Jb3NfRm10ZmxhZ3MgZm10ZmxhZ3M7CgogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdz
IGJvb2xhbHBoYSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19ib29sYWxwaGEpOwogICAgc3Rh
dGljIGNvbnN0IGZtdGZsYWdzIGRlYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19kZWMpOwog
ICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZpeGVkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9T
X2ZpeGVkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBoZXggPSBmbXRmbGFncyhfX2lvc19m
bGFnczo6X1NfaGV4KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBpbnRlcm5hbCA9IGZtdGZs
YWdzKF9faW9zX2ZsYWdzOjpfU19pbnRlcm5hbCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg
bGVmdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19sZWZ0KTsKICAgIHN0YXRpYyBjb25zdCBm
bXRmbGFncyBvY3QgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfb2N0KTsKICAgIHN0YXRpYyBj
b25zdCBmbXRmbGFncyByaWdodCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19yaWdodCk7CiAg
ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2NpZW50aWZpYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz
OjpfU19zY2llbnRpZmljKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93YmFzZSA9IGZt
dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93YmFzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10Zmxh
Z3Mgc2hvd3BvaW50ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb2ludCk7CiAgICBz
dGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvcyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19z
aG93cG9zKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBza2lwd3MgPSBmbXRmbGFncyhfX2lv
c19mbGFnczo6X1Nfc2tpcHdzKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1bml0YnVmID0g
Zm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VuaXRidWYpOwogICAgc3RhdGljIGNvbnN0IGZtdGZs
YWdzIHVwcGVyY2FzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191cHBlcmNhc2UpOwogICAg
c3RhdGljIGNvbnN0IGZtdGZsYWdzIGFkanVzdGZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6
Ol9TX2FkanVzdGZpZWxkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBiYXNlZmllbGQgPSBm
bXRmbGFncyhfX2lvc19mbGFnczo6X1NfYmFzZWZpZWxkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRm
bGFncyBmbG9hdGZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Zsb2F0ZmllbGQpOwoK
CiAgICB0eXBlZGVmIF9Jb3NfSW9zdGF0ZSBpb3N0YXRlOwogICAgc3RhdGljIGNvbnN0IGlvc3Rh
dGUgYmFkYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfYmFkYml0KTsKICAgIHN0YXRpYyBj
b25zdCBpb3N0YXRlIGVvZmJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2VvZmJpdCk7CiAg
ICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBmYWlsYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1Nf
ZmFpbGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBnb29kYml0ID0gaW9zdGF0ZSgwKTsK
CgogICAgdHlwZWRlZiBfSW9zX09wZW5tb2RlIG9wZW5tb2RlOwogICAgc3RhdGljIGNvbnN0IG9w
ZW5tb2RlIGFwcCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hcHApOwogICAgc3RhdGljIGNv
bnN0IG9wZW5tb2RlIGF0ZSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hdGUpOwogICAgc3Rh
dGljIGNvbnN0IG9wZW5tb2RlIGJpbmFyeSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19iaW4p
OwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGluID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9T
X2luKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBvdXQgPSBvcGVubW9kZShfX2lvc19mbGFn
czo6X1Nfb3V0KTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSB0cnVuYyA9IG9wZW5tb2RlKF9f
aW9zX2ZsYWdzOjpfU190cnVuYyk7CgoKICAgIHR5cGVkZWYgX0lvc19TZWVrZGlyIHNlZWtkaXI7
CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBiZWcgPSBzZWVrZGlyKDApOwogICAgc3RhdGljIGNv
bnN0IHNlZWtkaXIgY3VyID0gc2Vla2RpcigxKTsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGVu
ZCA9IHNlZWtkaXIoMik7CiMgMjI2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvaW9zX2Jhc2UuaCIg
MwogICAgZW51bSBldmVudAogICAgewogICAgICBlcmFzZV9ldmVudCwKICAgICAgaW1idWVfZXZl
bnQsCiAgICAgIGNvcHlmbXRfZXZlbnQKICAgIH07CgogICAgdHlwZWRlZiB2b2lkICgqZXZlbnRf
Y2FsbGJhY2spIChldmVudCwgaW9zX2Jhc2UmLCBpbnQpOwoKICAgIHZvaWQKICAgIHJlZ2lzdGVy
X2NhbGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4KTsKCiAgcHJvdGVjdGVk
OgoKICAgIHN0cmVhbXNpemUgX01fcHJlY2lzaW9uOwogICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsK
ICAgIGZtdGZsYWdzIF9NX2ZsYWdzOwogICAgaW9zdGF0ZSBfTV9leGNlcHRpb247CiAgICBpb3N0
YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsKCgoKICAgIHN0cnVjdCBfQ2FsbGJhY2tfbGlzdAogICAg
ewoKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX25leHQ7CiAgICAgIGlvc19iYXNlOjpldmVudF9j
YWxsYmFjayBfTV9mbjsKICAgICAgaW50IF9NX2luZGV4OwogICAgICBfQXRvbWljX3dvcmQgX01f
cmVmY291bnQ7CgogICAgICBfQ2FsbGJhY2tfbGlzdChpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sg
X19mbiwgaW50IF9faW5kZXgsCiAgICAgICAgICAgICAgICAgICAgIF9DYWxsYmFja19saXN0KiBf
X2NiKQogICAgICA6IF9NX25leHQoX19jYiksIF9NX2ZuKF9fZm4pLCBfTV9pbmRleChfX2luZGV4
KSwgX01fcmVmY291bnQoMCkgeyB9CgogICAgICB2b2lkCiAgICAgIF9NX2FkZF9yZWZlcmVuY2Uo
KSB7IF9fYXRvbWljX2FkZCgmX01fcmVmY291bnQsIDEpOyB9CgoKICAgICAgaW50CiAgICAgIF9N
X3JlbW92ZV9yZWZlcmVuY2UoKSB7IHJldHVybiBfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmNv
dW50LCAtMSk7IH0KICAgIH07CgogICAgIF9DYWxsYmFja19saXN0KiBfTV9jYWxsYmFja3M7Cgog
ICAgdm9pZAogICAgX01fY2FsbF9jYWxsYmFja3MoZXZlbnQgX19ldikgdGhyb3coKTsKCiAgICB2
b2lkCiAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcyh2b2lkKTsKCgogICAgc3RydWN0IF9Xb3Jkcwog
ICAgewogICAgICB2b2lkKiBfTV9wd29yZDsKICAgICAgbG9uZyBfTV9pd29yZDsKICAgICAgX1dv
cmRzKCkgOiBfTV9wd29yZCgwKSwgX01faXdvcmQoMCkgeyB9CiAgICB9OwoKCiAgICBfV29yZHMg
X01fd29yZF96ZXJvOwoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX2xvY2FsX3dvcmRfc2l6ZSA9
IDg7CiAgICBfV29yZHMgX01fbG9jYWxfd29yZFtfU19sb2NhbF93b3JkX3NpemVdOwoKCiAgICBp
bnQgX01fd29yZF9zaXplOwogICAgX1dvcmRzKiBfTV93b3JkOwoKICAgIF9Xb3JkcyYKICAgIF9N
X2dyb3dfd29yZHMoaW50IF9faW5kZXgpOwoKCiAgICBsb2NhbGUgX01faW9zX2xvY2FsZTsKCiAg
ICB2b2lkCiAgICBfTV9pbml0KCk7CgogIHB1YmxpYzoKCgoKCgogICAgY2xhc3MgSW5pdAogICAg
ewogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7CiAgICBwdWJsaWM6CiAgICAgIEluaXQoKTsK
ICAgICAgfkluaXQoKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lvc19jcmVhdGUoYm9v
bCBfX3N5bmMpOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2Rlc3Ryb3koKTsKCiAg
ICBwcml2YXRlOgogICAgICBzdGF0aWMgaW50IF9TX2lvc19iYXNlX2luaXQ7CiAgICAgIHN0YXRp
YyBib29sIF9TX3N5bmNlZF93aXRoX3N0ZGlvOwogICAgfTsKCgogICAgaW5saW5lIGZtdGZsYWdz
CiAgICBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9NX2ZsYWdzOyB9CgogICAgaW5saW5lIGZtdGZs
YWdzCiAgICBmbGFncyhmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29s
ZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyA9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29s
ZDsKICAgIH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkK
ICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgfD0g
X19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwog
ICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsLCBmbXRmbGFncyBfX21hc2spCiAgICB7CiAgICAgIGZt
dGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzICY9IH5fX21hc2s7CiAgICAg
IF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19tYXNrKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAg
fQoKICAgIGlubGluZSB2b2lkCiAgICB1bnNldGYoZm10ZmxhZ3MgX19tYXNrKSB7IF9NX2ZsYWdz
ICY9IH5fX21hc2s7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKCkgY29u
c3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHBy
ZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9
IF9NX3ByZWNpc2lvbjsKICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOwogICAgICByZXR1cm4g
X19vbGQ7CiAgICB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gX01fd2lkdGg7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoc3RyZWFt
c2l6ZSBfX3dpZGUpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93aWR0aDsKICAg
ICAgX01fd2lkdGggPSBfX3dpZGU7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBzdGF0
aWMgYm9vbAogICAgc3luY193aXRoX3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7CgoKICAgIGxv
Y2FsZQogICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgaW5saW5lIGxvY2FsZQog
ICAgZ2V0bG9jKCkgY29uc3QgeyByZXR1cm4gX01faW9zX2xvY2FsZTsgfQoKCiAgICBzdGF0aWMg
aW50CiAgICB4YWxsb2MoKSB0aHJvdygpOwoKICAgIGlubGluZSBsb25nJgogICAgaXdvcmQoaW50
IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX3NpemUp
CiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZFtfX2l4XSA6IF9NX2dyb3dfd29yZHMo
X19peCk7CiAgICAgIHJldHVybiBfX3dvcmQuX01faXdvcmQ7CiAgICB9CgogICAgaW5saW5lIHZv
aWQqJgogICAgcHdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9f
aXggPCBfTV93b3JkX3NpemUpCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZFtfX2l4
XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAgIHJldHVybiBfX3dvcmQuX01fcHdvcmQ7CiAg
ICB9CgoKICAgIH5pb3NfYmFzZSgpOwoKICBwcm90ZWN0ZWQ6CiAgICBpb3NfYmFzZSgpOwoKCgog
IHByaXZhdGU6CiAgICBpb3NfYmFzZShjb25zdCBpb3NfYmFzZSYpOwoKICAgIGlvc19iYXNlJgog
ICAgb3BlcmF0b3I9KGNvbnN0IGlvc19iYXNlJik7CgogIH07CgoKICBpbmxpbmUgaW9zX2Jhc2Um
CiAgYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jh
c2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNl
JgogIG5vYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihp
b3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9z
X2Jhc2UmCiAgc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihp
b3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf
YmFzZSYKICBub3Nob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0
Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp
b3NfYmFzZSYKICBzaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0
Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg
aW9zX2Jhc2UmCiAgbm9zaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu
dW5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu
bGluZSBpb3NfYmFzZSYKICBzaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl
LnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu
ZSBpb3NfYmFzZSYKICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu
dW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxp
bmUgaW9zX2Jhc2UmCiAgc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNl
dGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlv
c19iYXNlJgogIG5vc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0
Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9z
X2Jhc2UmCiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYo
aW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlv
c19iYXNlJgogIG5vdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVu
c2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxp
bmUgaW9zX2Jhc2UmCiAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uu
c2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu
ZSBpb3NfYmFzZSYKICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNl
LnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBp
bmxpbmUgaW9zX2Jhc2UmCiAgaW50ZXJuYWwoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19i
YXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAg
IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbGVmdChpb3NfYmFzZSYg
X19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpsZWZ0LCBpb3NfYmFzZTo6YWRq
dXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBy
aWdodChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdo
dCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5s
aW5lIGlvc19iYXNlJgogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm
KGlvc19iYXNlOjpkZWMsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsK
ICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBoZXgoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBf
X2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVy
biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgb2N0KGlvc19iYXNlJiBfX2Jhc2Up
CiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7
CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBmaXhlZChpb3Nf
YmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9zX2Jh
c2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFz
ZSYKICBzY2llbnRpZmljKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z
X2Jhc2U6OnNjaWVudGlmaWMsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKfQojIDUwICIvdXNyL2luY2x1ZGUvZysrL2lvcyIgMiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2crKy9zdHJlYW1idWYiIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvZysrL3N0cmVhbWJ1ZiIg
MwoKCgoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNf
aW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpOwoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfc3RyZWFt
YnVmCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0
cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJh
aXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0
c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlw
ZT4gX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUs
IHRyYWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwoKICAgICAgZnJpZW5kIGNsYXNzIGJhc2lj
X2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lz
dHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19v
c3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgaXN0cmVh
bWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNz
IG9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CgogICAgICBmcmll
bmQgc3RyZWFtc2l6ZQogICAgICBfX2NvcHlfc3RyZWFtYnVmczw+KGJhc2ljX2lvczxjaGFyX3R5
cGUsIHRyYWl0c190eXBlPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJl
YW1idWZfdHlwZSogX19zYmluLF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpOwoKICAgIHByb3Rl
Y3RlZDoKCgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2J1ZjsKCgogICAgICBpbnRfdHlwZSBfTV9i
dWZfc2l6ZTsKCgogICAgICBpbnRfdHlwZSBfTV9idWZfc2l6ZV9vcHQ7CgoKCiAgICAgIGJvb2wg
X01fYnVmX3VuaWZpZWQ7CgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01faW5fYmVnOwogICAgICBj
aGFyX3R5cGUqIF9NX2luX2N1cjsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9lbmQ7CiAgICAgIGNo
YXJfdHlwZSogX01fb3V0X2JlZzsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfY3VyOwogICAgICBj
aGFyX3R5cGUqIF9NX291dF9lbmQ7CgoKICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9NX21vZGU7
CgoKICAgICAgbG9jYWxlIF9NX2J1Zl9sb2NhbGU7CgoKICAgICAgYm9vbCBfTV9idWZfbG9jYWxl
X2luaXQ7CgoKCgoKCiAgICAgIHN0YXRpYyBjb25zdCBpbnRfdHlwZSBfU19wYmFja19zaXplID0g
MTsKICAgICAgY2hhcl90eXBlIF9NX3BiYWNrW19TX3BiYWNrX3NpemVdOwogICAgICBjaGFyX3R5
cGUqIF9NX3BiYWNrX2N1cl9zYXZlOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2VuZF9zYXZl
OwogICAgICBib29sIF9NX3BiYWNrX2luaXQ7CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNr
X2NyZWF0ZSgpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7
CiAgICAgICAgICAgIGludF90eXBlIF9fZGlzdCA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAg
ICAgICAgICAgaW50X3R5cGUgX19sZW4gPSBtaW4oX1NfcGJhY2tfc2l6ZSwgX19kaXN0KTsKICAg
ICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJhY2ssIF9NX2luX2N1ciwgX19sZW4pOwog
ICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9NX2luX2N1cjsKICAgICAgICAgICAgX01f
cGJhY2tfZW5kX3NhdmUgPSBfTV9pbl9lbmQ7CiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fcGJh
Y2ssIF9NX3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfaW5p
dCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJh
Y2tfZGVzdHJveSgpCiAgICAgIHsKICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAg
IHsKCiAgICAgICAgICAgIGludF90eXBlIF9fb2ZmX2N1ciA9IF9NX2luX2N1ciAtIF9NX3BiYWNr
OwoKCiAgICAgICAgICAgIGludF90eXBlIF9fb2ZmX2VuZCA9IDA7CiAgICAgICAgICAgIGludF90
eXBlIF9fcGJhY2tfbGVuID0gX01faW5fZW5kIC0gX01fcGJhY2s7CiAgICAgICAgICAgIGludF90
eXBlIF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsKICAgICAgICAgICAg
aWYgKF9fcGJhY2tfbGVuID4gX19zYXZlX2xlbikKICAgICAgICAgICAgICBfX29mZl9lbmQgPSBf
X3BiYWNrX2xlbiAtIF9fc2F2ZV9sZW47CgogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX2J1Ziwg
X01fcGJhY2tfY3VyX3NhdmUgKyBfX29mZl9jdXIsCiAgICAgICAgICAgICAgICAgICAgICAgX01f
cGJhY2tfZW5kX3NhdmUgKyBfX29mZl9lbmQpOwogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2
ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfX251bGw7CiAgICAg
ICAgICAgIF9NX3BiYWNrX2luaXQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgfQoKCgogICAg
ICB2b2lkCiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAgICAg
IGJvb2wgX190ZXN0b3V0ID0gX01fb3V0X2N1cjsKICAgICAgICBfTV9pbl9jdXIgKz0gX19uOwog
ICAgICAgIGlmIChfX3Rlc3RvdXQgJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9vdXRf
Y3VyICs9IF9fbjsKICAgICAgfQojIDE5OCAiL3Vzci9pbmNsdWRlL2crKy9zdHJlYW1idWYiIDMK
ICAgICAgdm9pZAogICAgICBfTV9vdXRfY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAg
ICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2luX2N1cjsKCiAgICAgICAgX01fb3V0X2N1ciArPSBf
X247CiAgICAgICAgaWYgKF9fdGVzdGluICYmIF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01f
aW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAoX01fb3V0X2N1ciA+IF9NX291dF9lbmQpCiAgICAg
ICAgICB7CiAgICAgICAgICAgIF9NX291dF9lbmQgPSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAg
aWYgKF9fdGVzdGluKQogICAgICAgICAgICAgIF9NX2luX2VuZCArPSBfX247CiAgICAgICAgICB9
CiAgICAgIH0KCgoKCiAgICAgIG9mZl90eXBlCiAgICAgIF9NX291dF9idWZfc2l6ZSgpCiAgICAg
IHsKICAgICAgICBvZmZfdHlwZSBfX3JldCA9IDA7CiAgICAgICAgaWYgKF9NX291dF9jdXIpCiAg
ICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3V0X2JlZyA9PSBfTV9idWYpCiAgICAgICAg
ICAgICAgX19yZXQgPSBfTV9vdXRfYmVnICsgX01fYnVmX3NpemUgLSBfTV9vdXRfY3VyOwoKICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2VuZCAtIF9NX291dF9j
dXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogIHB1YmxpYzoK
ICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfc3RyZWFtYnVmKCkKICAgICAgewogICAgICAgIF9N
X2J1Zl91bmlmaWVkID0gZmFsc2U7CiAgICAgICAgX01fYnVmX3NpemUgPSAwOwogICAgICAgIF9N
X2J1Zl9zaXplX29wdCA9IDA7CiAgICAgICAgX01fbW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgw
KTsKICAgICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSBmYWxzZTsKICAgICAgfQoKCiAgICAgIGxv
Y2FsZQogICAgICBwdWJpbWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQogICAgICB7CiAgICAgICAg
bG9jYWxlIF9fdG1wKHRoaXMtPmdldGxvYygpKTsKICAgICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7
CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBsb2NhbGUKICAgICAgZ2V0bG9j
KCkgY29uc3QKICAgICAgewogICAgICAgIGlmIChfTV9idWZfbG9jYWxlX2luaXQpCiAgICAgICAg
ICByZXR1cm4gX01fYnVmX2xvY2FsZTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gbG9j
YWxlKCk7CiAgICAgIH0KCgogICAgICBfX3N0cmVhbWJ1Zl90eXBlKgogICAgICBwdWJzZXRidWYo
Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5zZXRi
dWYoX19zLCBfX24pOyB9CgogICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVrb2ZmKG9mZl90eXBl
IF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAg
eyByZXR1cm4gdGhpcy0+c2Vla29mZihfX29mZiwgX193YXksIF9fbW9kZSk7IH0KCiAgICAgIHBv
c190eXBlCiAgICAgIHB1YnNlZWtwb3MocG9zX3R5cGUgX19zcCwKICAgICAgICAgICAgICAgICBp
b3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkK
ICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla3BvcyhfX3NwLCBfX21vZGUpOyB9CgogICAgICBpbnQK
ICAgICAgcHVic3luYygpIHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsgfQoKCgogICAgICBzdHJlYW1z
aXplCiAgICAgIGluX2F2YWlsKCkKICAgICAgewogICAgICAgIHN0cmVhbXNpemUgX19yZXQ7CiAg
ICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICB7
CiAgICAgICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIGludF90eXBlIF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX3BiYWNr
X2N1cl9zYXZlOwogICAgICAgICAgICAgICAgaW50X3R5cGUgX19wYmFja19sZW4gPSBfTV9pbl9j
dXIgLSBfTV9wYmFjazsKICAgICAgICAgICAgICAgIF9fcmV0ID0gX19zYXZlX2xlbiAtIF9fcGJh
Y2tfbGVuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9f
cmV0ID0gdGhpcy0+ZWdwdHIoKSAtIHRoaXMtPmdwdHIoKTsKICAgICAgICAgIH0KICAgICAgICBl
bHNlCiAgICAgICAgICBfX3JldCA9IHRoaXMtPnNob3dtYW55YygpOwogICAgICAgIHJldHVybiBf
X3JldDsKICAgICAgfQoKICAgICAgaW50X3R5cGUKICAgICAgc25leHRjKCkKICAgICAgewogICAg
ICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIHJldHVybiAo
dGhpcy0+c2J1bXBjKCkgPT0gX19lb2YgPyBfX2VvZiA6IHRoaXMtPnNnZXRjKCkpOwogICAgICB9
CgogICAgICBpbnRfdHlwZQogICAgICBzYnVtcGMoKTsKCiAgICAgIGludF90eXBlCiAgICAgIHNn
ZXRjKCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9j
dXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlw
ZTo6dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsKICAgICAgICBlbHNlCiAgICAgICAgICBf
X3JldCA9IHRoaXMtPnVuZGVyZmxvdygpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoK
ICAgICAgc3RyZWFtc2l6ZQogICAgICBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
X24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzZ2V0bihfX3MsIF9fbik7IH0KCgogICAgICBpbnRf
dHlwZQogICAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYyk7CgogICAgICBpbnRfdHlwZQogICAg
ICBzdW5nZXRjKCk7CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGMoY2hhcl90eXBlIF9fYyk7
CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJl
YW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNwdXRuKF9fcywgX19uKTsgfQoKICAg
IHByb3RlY3RlZDoKICAgICAgYmFzaWNfc3RyZWFtYnVmKCkKICAgICAgOiBfTV9idWYoX19udWxs
KSwgX01fYnVmX3NpemUoMCksCiAgICAgIF9NX2J1Zl9zaXplX29wdChzdGF0aWNfY2FzdDxpbnRf
dHlwZT4oODE5MikpLCBfTV9idWZfdW5pZmllZChmYWxzZSksCiAgICAgIF9NX2luX2JlZygwKSwg
X01faW5fY3VyKDApLCBfTV9pbl9lbmQoMCksIF9NX291dF9iZWcoMCksIF9NX291dF9jdXIoMCks
CiAgICAgIF9NX291dF9lbmQoMCksIF9NX21vZGUoaW9zX2Jhc2U6Om9wZW5tb2RlKDApKSwgX01f
YnVmX2xvY2FsZShsb2NhbGUoKSksCiAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdChmYWxzZSksIF9N
X3BiYWNrX2N1cl9zYXZlKDApLCBfTV9wYmFja19lbmRfc2F2ZSgwKSwKICAgICAgX01fcGJhY2tf
aW5pdChmYWxzZSkKICAgICAgeyB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBlYmFjaygpIGNv
bnN0IHsgcmV0dXJuIF9NX2luX2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBncHRyKCkg
Y29uc3QgeyByZXR1cm4gX01faW5fY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVncHRy
KCkgY29uc3QgeyByZXR1cm4gX01faW5fZW5kOyB9CgogICAgICB2b2lkCiAgICAgIGdidW1wKGlu
dCBfX24pIHsgX01faW5fY3VyICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAgICBzZXRnKGNoYXJf
dHlwZSogX19nYmVnLCBjaGFyX3R5cGUqIF9fZ25leHQsIGNoYXJfdHlwZSogX19nZW5kKQogICAg
ICB7CiAgICAgICAgX01faW5fYmVnID0gX19nYmVnOwogICAgICAgIF9NX2luX2N1ciA9IF9fZ25l
eHQ7CiAgICAgICAgX01faW5fZW5kID0gX19nZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBp
b3NfYmFzZTo6aW4pICYmIF9fZ2JlZyAmJiBfX2duZXh0ICYmIF9fZ2VuZCkKICAgICAgICAgIF9N
X21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6OmluOwogICAgICB9CgoKICAgICAgY2hhcl90eXBl
KgogICAgICBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9iZWc7IH0KCiAgICAgIGNoYXJf
dHlwZSoKICAgICAgcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9jdXI7IH0KCiAgICAgIGNo
YXJfdHlwZSoKICAgICAgZXBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfZW5kOyB9CgogICAg
ICB2b2lkCiAgICAgIHBidW1wKGludCBfX24pIHsgX01fb3V0X2N1ciArPSBfX247IH0KCiAgICAg
IHZvaWQKICAgICAgc2V0cChjaGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBlKiBfX3BlbmQpCiAg
ICAgIHsKICAgICAgICBfTV9vdXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJlZzsKICAgICAgICBf
TV9vdXRfZW5kID0gX19wZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0
KSAmJiBfX3BiZWcgJiYgX19wZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3Nf
YmFzZTo6b3V0OwogICAgICB9CgoKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBpbWJ1ZShjb25z
dCBsb2NhbGUmIF9fbG9jKQogICAgICB7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1
ZTsKICAgICAgICBpZiAoX01fYnVmX2xvY2FsZSAhPSBfX2xvYykKICAgICAgICAgIF9NX2J1Zl9s
b2NhbGUgPSBfX2xvYzsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgYmFzaWNfc3RyZWFtYnVmPGNo
YXJfdHlwZSxfVHJhaXRzPioKICAgICAgc2V0YnVmKGNoYXJfdHlwZSosIHN0cmVhbXNpemUpCiAg
ICAgIHsgcmV0dXJuIHRoaXM7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla29m
ZihvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9w
ZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9z
X3R5cGUob2ZmX3R5cGUoLTEpKTsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVr
cG9zKHBvc190eXBlLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNl
OjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0x
KSk7IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHN5bmMoKSB7IHJldHVybiAwOyB9CgoKICAg
ICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0KCiAg
ICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVh
bXNpemUgX19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCkKICAg
ICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgogICAgICB2aXJ0dWFsIGludF90eXBl
CiAgICAgIHVmbG93KCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5
cGU6OmVvZigpOwogICAgICAgIGJvb2wgX190ZXN0ZW9mID0gdGhpcy0+dW5kZXJmbG93KCkgPT0g
X19yZXQ7CiAgICAgICAgYm9vbCBfX3Rlc3RwZW5kaW5nID0gX01faW5fY3VyICYmIF9NX2luX2N1
ciA8IF9NX2luX2VuZDsKICAgICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RwZW5kaW5nKQog
ICAgICAgICAgewogICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgq
X01faW5fY3VyKTsKICAgICAgICAgICAgKytfTV9pbl9jdXI7CiAgICAgICAgICAgIGlmIChfTV9i
dWZfdW5pZmllZCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgICAgICArK19N
X291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAg
ICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBwYmFja2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNfdHlw
ZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQoKCiAgICAgIHZp
cnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVh
bXNpemUgX19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5
cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2Yo
KTsgfQojIDQ4MCAiL3Vzci9pbmNsdWRlL2crKy9zdHJlYW1idWYiIDMKICAgIHByaXZhdGU6CiAg
ICAgIGJhc2ljX3N0cmVhbWJ1Zihjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJikgeyB9OwoKICAgICAg
X19zdHJlYW1idWZfdHlwZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUm
KSB7IHJldHVybiAqdGhpczsgfTsKCiAgICB9Owp9CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysr
L2JpdHMvc3RyZWFtYnVmLnRjYyIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdHJl
YW1idWYudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+OjpfU19wYmFja19zaXplOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6
aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNidW1w
YygpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9N
X2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICB7CiAgICAgICAgICBjaGFyX3R5cGUgX19jID0g
Kih0aGlzLT5ncHRyKCkpOwogICAgICAgICAgX01faW5fY3VyX21vdmUoMSk7CiAgICAgICAgICBf
X3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxz
ZQogICAgICAgIF9fcmV0ID0gdGhpcy0+dWZsb3coKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBl
bmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19j
KQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgYm9vbCBfX3Rlc3Rwb3MgPSBfTV9p
bl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyOwogICAgICBib29sIF9fdGVzdG5lID0gX01f
aW5fY3VyICYmICF0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlzLT5ncHRyKClbLTFdKTsKICAgICAg
aWYgKCFfX3Rlc3Rwb3MgfHwgX190ZXN0bmUpCiAgICAgICAgX19yZXQgPSBwYmFja2ZhaWwodHJh
aXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAg
ICAgX01faW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9f
aW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5
cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3VuZ2V0YygpCiAgICB7CiAgICAg
IGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2lu
X2N1cikKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAgICBf
X3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICB9CiAg
ICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnBiYWNrZmFpbCgpOwogICAgICByZXR1cm4g
X19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Omlu
dF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0Yyhj
aGFyX3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX291
dF9idWZfc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgICpfTV9vdXRfY3VyID0gX19jOwogICAg
ICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6
dG9faW50X3R5cGUoX19jKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRo
aXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgcmV0dXJu
IF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6
CiAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBz
dHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsK
ICAgICAgICAgIHNpemVfdCBfX2J1Zl9sZW4gPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAg
ICAgICBpZiAoX19idWZfbGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVf
dCBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9
IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6
Y29weShfX3MsIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVu
OwogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAgICAgICBfTV9pbl9jdXJfbW92
ZShfX2xlbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOwogICAg
ICAgICAgICAgIGlmIChfX2MgIT0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3MrKywgdHJhaXRzX3R5
cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICAgICAgKytfX3JldDsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUK
ICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzcHV0bihjb25zdCBj
aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19y
ZXQgPSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAgICAgICAgb2Zm
X3R5cGUgX19idWZfbGVuID0gX01fb3V0X2J1Zl9zaXplKCk7CiAgICAgICAgICBpZiAoX19idWZf
bGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIG9mZl90eXBlIF9fcmVtYWluaW5n
ID0gX19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19sZW4gPSBtaW4oX19idWZf
bGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fb3V0
X2N1ciwgX19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAgICAgICAg
ICAgICAgX19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX291dF9jdXJfbW92ZShfX2xlbik7
CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6
dG9faW50X3R5cGUoKl9fcykpOwogICAgICAgICAgICAgIGlmIChfX2MgIT0gdHJhaXRzX3R5cGU6
OmVvZigpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAg
ICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuIF9fcmV0OwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9z
PF9DaGFyVCwgX1RyYWl0cz4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3Ry
ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQogIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIHN0cmVhbXNpemUg
X19yZXQgPSAwOwogICAgICBzdHJlYW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwo
KTsKICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0OwogICAgICBib29sIF9fdGVzdHB1dCA9IF9fc2Jv
dXQtPl9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAg
ICB3aGlsZSAoX190ZXN0cHV0ICYmIF9fYnVmc2l6ZSAhPSAtMSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIF9feHRyY3QgPSBfX3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZz
aXplKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX3h0cmN0OwogICAgICAgICAgICAgIF9fc2Jp
bi0+X01faW5fY3VyX21vdmUoX194dHJjdCk7CiAgICAgICAgICAgICAgaWYgKF9feHRyY3QgPT0g
X19idWZzaXplKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoX19zYmlu
LT5zZ2V0YygpID09IF9UcmFpdHM6OmVvZigpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
IHsKICAgICAgICAgIF9faW9zLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAg
IGlmICgoX19pb3MuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmZhaWxiaXQpICE9IDApCiAgICAg
ICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPGNoYXI+OwogIGV4dGVybiB0ZW1w
bGF0ZQogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPGNoYXI+
JiwgYmFzaWNfc3RyZWFtYnVmPGNoYXI+KiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0
cmVhbWJ1ZjxjaGFyPiopOwoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVm
PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0
cmVhbWJ1ZnMoYmFzaWNfaW9zPHdjaGFyX3Q+JiwgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+KiwK
ICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiopOwp9CiMgNDk0
ICIvdXNyL2luY2x1ZGUvZysrL3N0cmVhbWJ1ZiIgMiAzCiMgNTEgIi91c3IvaW5jbHVkZS9nKysv
aW9zIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNfaW9zLmgiIDEgMwojIDM5
ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNfaW9zLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRl
L2crKy9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2cr
Ky9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgaXN0cmVhbWJ1
Zl9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgX0No
YXJUKiwgX0NoYXJUJj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVm
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0
ZToKCgoKCgoKCiAgICAgIG11dGFibGUgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7CiAgICAgIGlu
dF90eXBlIF9NX2M7CgogICAgcHVibGljOgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKCkgdGhy
b3coKQogICAgICA6IF9NX3NidWYoMCksIF9NX2MoLTIpIHsgfQoKICAgICAgaXN0cmVhbWJ1Zl9p
dGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19zLnJk
YnVmKCkpLCBfTV9jKC0yKSB7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVm
X3R5cGUqIF9fcykgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fYygtMikgeyB9CgoK
ICAgICAgY2hhcl90eXBlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRy
YWl0c190eXBlOjp0b19jaGFyX3R5cGUoX01fZ2V0KCkpOyB9CgogICAgICBpc3RyZWFtYnVmX2l0
ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIGlmIChfTV9zYnVmICYm
IF9NX3NidWYtPnNidW1wYygpID09IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgICAgIF9NX3Ni
dWYgPSAwOwogICAgICAgIGVsc2UKICAgICAgICAgIF9NX2MgPSAtMjsKICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgIH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IKICAgICAgb3BlcmF0b3Ir
KyhpbnQpCiAgICAgIHsKICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yIF9fb2xkID0gKnRoaXM7
CiAgICAgICAgaWYgKF9NX3NidWYgJiYgKF9fb2xkLl9NX2MgPSBfTV9zYnVmLT5zYnVtcGMoKSkg
PT0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAgICAgZWxz
ZQogICAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCgoK
ICAgICAgYm9vbAogICAgICBlcXVhbChjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yJiBfX2IpIGNv
bnN0CiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl
b2YoKTsKICAgICAgICBib29sIF9fdGhpc2VvZiA9IF9NX2dldCgpID09IF9fZW9mOwogICAgICAg
IGJvb2wgX19iZW9mID0gX19iLl9NX2dldCgpID09IF9fZW9mOwogICAgICAgIHJldHVybiAoX190
aGlzZW9mICYmIF9fYmVvZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7CiAgICAgIH0KCgog
ICAgcHJpdmF0ZToKICAgICAgaW50X3R5cGUKICAgICAgX01fZ2V0KCkgY29uc3QKICAgICAgewog
ICAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGlmIChf
TV9zYnVmKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoX01fYyAhPSBzdGF0aWNfY2FzdDxp
bnRfdHlwZT4oLTIpKQogICAgICAgICAgICAgIF9fcmV0ID0gX01fYzsKICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgIGlmICgoX19yZXQgPSBfTV9zYnVmLT5zZ2V0YygpKSA9PSB0cmFpdHNf
dHlwZTo6ZW9mKCkpCiAgICAgICAgICAgICAgICBfTV9zYnVmID0gMDsKICAgICAgICAgIH0KICAg
ICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNv
bnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAg
ICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAg
IHsgcmV0dXJuIF9fYS5lcXVhbChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGlz
dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBj
b25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0
dXJuICFfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBp
dGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAg
ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJl
YW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAgYm9vbCBfTV9mYWlsZWQ7CgogICAgcHVibGljOgog
ICAgICBpbmxpbmUKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykg
dGhyb3cgKCkKICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fZmFpbGVkKCFfTV9zYnVm
KSB7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhy
b3cgKCkKICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CgogICAg
ICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYyk7CgogICAg
ICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRv
cisrKGludCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1
Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRo
aXM7IH0KCiAgICAgIGJvb2wKICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJl
dHVybiBfTV9mYWlsZWQ7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9y
PShfQ2hhclQgX19jKQogICAgewogICAgICBpZiAoIV9NX2ZhaWxlZCAmJgogICAgICAgICAgX1Ry
YWl0czo6ZXFfaW50X3R5cGUoX01fc2J1Zi0+c3B1dGMoX19jKSwgX1RyYWl0czo6ZW9mKCkpKQog
ICAgICAgIF9NX2ZhaWxlZCA9IHRydWU7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KfQojIDQx
ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwojIDEgIi91c3IvaW5jbHVk
ZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvZysrL2Jp
dHMvbG9jYWxlX2ZhY2V0cy5oIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2N3Y3R5cGUiIDEg
MwojIDQ4ICIvdXNyL2luY2x1ZGUvZysrL2N3Y3R5cGUiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L3djdHlwZS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCiMgMSAiL3Vzci9s
aWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MzYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMiAzCiMgNjEgIi91c3IvaW5jbHVkZS93Y3R5cGUu
aCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHdjdHlwZV90OwojIDc5ICIvdXNyL2luY2x1
ZGUvd2N0eXBlLmgiIDMKZW51bQp7CiAgX19JU3d1cHBlciA9IDAsCiAgX19JU3dsb3dlciA9IDEs
CiAgX19JU3dhbHBoYSA9IDIsCiAgX19JU3dkaWdpdCA9IDMsCiAgX19JU3d4ZGlnaXQgPSA0LAog
IF9fSVN3c3BhY2UgPSA1LAogIF9fSVN3cHJpbnQgPSA2LAogIF9fSVN3Z3JhcGggPSA3LAogIF9f
SVN3YmxhbmsgPSA4LAogIF9fSVN3Y250cmwgPSA5LAogIF9fSVN3cHVuY3QgPSAxMCwKICBfX0lT
d2FsbnVtID0gMTEsCgogIF9JU3d1cHBlciA9ICgoX19JU3d1cHBlcikgPCA4ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3dXBwZXIpKSA8PCAyNCkgOiAoKF9fSVN3dXBwZXIpIDwgMTYgPyAoaW50KSAo
KDFVTCA8PCAoX19JU3d1cHBlcikpIDw8IDgpIDogKChfX0lTd3VwcGVyKSA8IDI0ID8gKGludCkg
KCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVy
KSkgPj4gMjQpKSkpLAogIF9JU3dsb3dlciA9ICgoX19JU3dsb3dlcikgPCA4ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3bG93ZXIpKSA8PCAyNCkgOiAoKF9fSVN3bG93ZXIpIDwgMTYgPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dsb3dlcikpIDw8IDgpIDogKChfX0lTd2xvd2VyKSA8IDI0ID8gKGludCkg
KCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2Vy
KSkgPj4gMjQpKSkpLAogIF9JU3dhbHBoYSA9ICgoX19JU3dhbHBoYSkgPCA4ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3YWxwaGEpKSA8PCAyNCkgOiAoKF9fSVN3YWxwaGEpIDwgMTYgPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dhbHBoYSkpIDw8IDgpIDogKChfX0lTd2FscGhhKSA8IDI0ID8gKGludCkg
KCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhh
KSkgPj4gMjQpKSkpLAogIF9JU3dkaWdpdCA9ICgoX19JU3dkaWdpdCkgPCA4ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3ZGlnaXQpKSA8PCAyNCkgOiAoKF9fSVN3ZGlnaXQpIDwgMTYgPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dkaWdpdCkpIDw8IDgpIDogKChfX0lTd2RpZ2l0KSA8IDI0ID8gKGludCkg
KCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0
KSkgPj4gMjQpKSkpLAogIF9JU3d4ZGlnaXQgPSAoKF9fSVN3eGRpZ2l0KSA8IDggPyAoaW50KSAo
KDFVTCA8PCAoX19JU3d4ZGlnaXQpKSA8PCAyNCkgOiAoKF9fSVN3eGRpZ2l0KSA8IDE2ID8gKGlu
dCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPDwgOCkgOiAoKF9fSVN3eGRpZ2l0KSA8IDI0ID8g
KGludCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19J
U3d4ZGlnaXQpKSA+PiAyNCkpKSksCiAgX0lTd3NwYWNlID0gKChfX0lTd3NwYWNlKSA8IDggPyAo
aW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpIDw8IDI0KSA6ICgoX19JU3dzcGFjZSkgPCAxNiA/
IChpbnQpICgoMVVMIDw8IChfX0lTd3NwYWNlKSkgPDwgOCkgOiAoKF9fSVN3c3BhY2UpIDwgMjQg
PyAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9f
SVN3c3BhY2UpKSA+PiAyNCkpKSksCiAgX0lTd3ByaW50ID0gKChfX0lTd3ByaW50KSA8IDggPyAo
aW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpIDw8IDI0KSA6ICgoX19JU3dwcmludCkgPCAxNiA/
IChpbnQpICgoMVVMIDw8IChfX0lTd3ByaW50KSkgPDwgOCkgOiAoKF9fSVN3cHJpbnQpIDwgMjQg
PyAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9f
SVN3cHJpbnQpKSA+PiAyNCkpKSksCiAgX0lTd2dyYXBoID0gKChfX0lTd2dyYXBoKSA8IDggPyAo
aW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpIDw8IDI0KSA6ICgoX19JU3dncmFwaCkgPCAxNiA/
IChpbnQpICgoMVVMIDw8IChfX0lTd2dyYXBoKSkgPDwgOCkgOiAoKF9fSVN3Z3JhcGgpIDwgMjQg
PyAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9f
SVN3Z3JhcGgpKSA+PiAyNCkpKSksCiAgX0lTd2JsYW5rID0gKChfX0lTd2JsYW5rKSA8IDggPyAo
aW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpIDw8IDI0KSA6ICgoX19JU3dibGFuaykgPCAxNiA/
IChpbnQpICgoMVVMIDw8IChfX0lTd2JsYW5rKSkgPDwgOCkgOiAoKF9fSVN3YmxhbmspIDwgMjQg
PyAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9f
SVN3YmxhbmspKSA+PiAyNCkpKSksCiAgX0lTd2NudHJsID0gKChfX0lTd2NudHJsKSA8IDggPyAo
aW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpIDw8IDI0KSA6ICgoX19JU3djbnRybCkgPCAxNiA/
IChpbnQpICgoMVVMIDw8IChfX0lTd2NudHJsKSkgPDwgOCkgOiAoKF9fSVN3Y250cmwpIDwgMjQg
PyAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9f
SVN3Y250cmwpKSA+PiAyNCkpKSksCiAgX0lTd3B1bmN0ID0gKChfX0lTd3B1bmN0KSA8IDggPyAo
aW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpIDw8IDI0KSA6ICgoX19JU3dwdW5jdCkgPCAxNiA/
IChpbnQpICgoMVVMIDw8IChfX0lTd3B1bmN0KSkgPDwgOCkgOiAoKF9fSVN3cHVuY3QpIDwgMjQg
PyAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9f
SVN3cHVuY3QpKSA+PiAyNCkpKSksCiAgX0lTd2FsbnVtID0gKChfX0lTd2FsbnVtKSA8IDggPyAo
aW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpIDw8IDI0KSA6ICgoX19JU3dhbG51bSkgPCAxNiA/
IChpbnQpICgoMVVMIDw8IChfX0lTd2FsbnVtKSkgPDwgOCkgOiAoKF9fSVN3YWxudW0pIDwgMjQg
PyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9f
SVN3YWxudW0pKSA+PiAyNCkpKSkKfTsKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgpleHRlcm4gaW50
IGlzd2FsbnVtICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBpc3dhbHBo
YSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXN3Y250cmwgKHdpbnRfdCBf
X3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dkaWdpdCAod2ludF90IF9fd2MpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IGlzd2dyYXBoICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IGlzd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBp
c3dwcmludCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dwdW5jdCAo
d2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dzcGFjZSAod2ludF90IF9f
d2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3d1cHBlciAod2ludF90IF9fd2MpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCBpc3d4ZGlnaXQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gaW50IGlzd2JsYW5rICh3aW50X3QgX193YykgdGhyb3cgKCk7CiMgMTc4ICIvdXNy
L2luY2x1ZGUvd2N0eXBlLmgiIDMKZXh0ZXJuIHdjdHlwZV90IHdjdHlwZSAoX19jb25zdCBjaGFy
ICpfX3Byb3BlcnR5KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3djdHlwZSAod2ludF90IF9f
d2MsIHdjdHlwZV90IF9fZGVzYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gdW5zaWduZWQgaW50ICpf
X2N0eXBlMzJfYjsKIyAyNDkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp0eXBlZGVmIF9fY29u
c3QgX19pbnQzMl90ICp3Y3RyYW5zX3Q7CgoKZXh0ZXJuIHdpbnRfdCB0b3dsb3dlciAod2ludF90
IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgdG93dXBwZXIgKHdpbnRfdCBfX3djKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBjb25zdCB3aW50X3QgKl9fY3R5cGUzMl90b2xvd2VyOwpleHRl
cm4gY29uc3Qgd2ludF90ICpfX2N0eXBlMzJfdG91cHBlcjsKIyAyNzUgIi91c3IvaW5jbHVkZS93
Y3R5cGUuaCIgMwp9CiMgMjg4ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKZXh0ZXJuICJDIiB7
CgoKCmV4dGVybiB3Y3RyYW5zX3Qgd2N0cmFucyAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5KSB0
aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHRvd2N0cmFucyAod2ludF90IF9fd2MsIHdjdHJhbnNf
dCBfX2Rlc2MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBfX2lzd2FsbnVtX2wgKHdpbnRf
dCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IF9f
aXN3YWxwaGFfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgX19pc3djbnRybF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2Fs
ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19pc3dkaWdpdF9sICh3aW50X3QgX193YywgX19s
b2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19pc3dncmFwaF9sICh3
aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IF9faXN3bG93ZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgX19pc3dwcmludF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xv
Y2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3cHVuY3RfbCAod2ludF90IF9fd2Ms
IF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3NwYWNl
X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgX19pc3d1cHBlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3eGRpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2Fs
ZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dibGFua19sICh3aW50
X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3R5cGVf
dCBfX3djdHlwZV9sIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2Nh
bGUpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19pc3djdHlwZV9sICh3aW50X3QgX193
Yywgd2N0eXBlX3QgX19kZXNjLCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIHdpbnRfdCBfX3Rvd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90
IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9fdG93dXBwZXJfbCAod2ludF90
IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gd2N0cmFuc190
IF9fd2N0cmFuc19sIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2Nh
bGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBfX3Rvd2N0cmFuc19sICh3aW50X3Qg
X193Yywgd2N0cmFuc190IF9fZGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xv
Y2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKfQojIDUzICIvdXNyL2luY2x1ZGUvZysrL2N3
Y3R5cGUiIDIgMwojIDc3ICIvdXNyL2luY2x1ZGUvZysrL2N3Y3R5cGUiIDMKbmFtZXNwYWNlIHN0
ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVzaW5nIDo6d2N0eXBlX3Q7CiAgdXNpbmcgOjp3Y3Ry
YW5zX3Q7CgogIHVzaW5nIDo6aXN3YWxudW07CiAgdXNpbmcgOjppc3dhbHBoYTsKICB1c2luZyA6
Omlzd2JsYW5rOwogIHVzaW5nIDo6aXN3Y250cmw7CiAgdXNpbmcgOjppc3dkaWdpdDsKICB1c2lu
ZyA6Omlzd2dyYXBoOwogIHVzaW5nIDo6aXN3bG93ZXI7CiAgdXNpbmcgOjppc3dwcmludDsKICB1
c2luZyA6Omlzd3ByaW50OwogIHVzaW5nIDo6aXN3cHVuY3Q7CiAgdXNpbmcgOjppc3dzcGFjZTsK
ICB1c2luZyA6Omlzd3VwcGVyOwogIHVzaW5nIDo6aXN3eGRpZ2l0OwogIHVzaW5nIDo6aXN3Y3R5
cGU7CiAgdXNpbmcgOjp0b3dsb3dlcjsKICB1c2luZyA6OnRvd3VwcGVyOwogIHVzaW5nIDo6dG93
Y3RyYW5zOwogIHVzaW5nIDo6d2N0cmFuczsKICB1c2luZyA6OndjdHlwZTsKfQojIDQ3ICIvdXNy
L2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv
ZysrL2lvcyIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLmgi
IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgNjAgIi91c3IvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVf
ZmFjZXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2N0
eXBlX2Jhc2UuaCIgMSAzCiMgNTAgIi91c3IvaW5jbHVkZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2Jp
dHMvY3R5cGVfYmFzZS5oIiAzCiAgc3RydWN0IGN0eXBlX2Jhc2UKICB7CgogICAgdHlwZWRlZiBj
b25zdCBpbnQqIF9fdG9fdHlwZTsKCgoKICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbWFzazsK
ICAgIHN0YXRpYyBjb25zdCBtYXNrIHVwcGVyID0gX0lTdXBwZXI7CiAgICBzdGF0aWMgY29uc3Qg
bWFzayBsb3dlciA9IF9JU2xvd2VyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSBfSVNh
bHBoYTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGRpZ2l0ID0gX0lTZGlnaXQ7CiAgICBzdGF0aWMg
Y29uc3QgbWFzayB4ZGlnaXQgPSBfSVN4ZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFj
ZSA9IF9JU3NwYWNlOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSBfSVNwcmludDsKICAg
IHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoID0gX0lTZ3JhcGg7CiAgICBzdGF0aWMgY29uc3QgbWFz
ayBjbnRybCA9IF9JU2NudHJsOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgPSBfSVNwdW5j
dDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtID0gX0lTYWxudW07CiAgfTsKIyA2MSAiL3Vz
ci9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9j
YWxlOjpmYWNldCwgcHVibGljIGN0eXBlX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNo
YXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsg
fQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8s
IGNvbnN0IGNoYXJfdHlwZSAqX19oaSwgbWFzayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBl
KgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo
YXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20s
IF9fbG8sIF9faGkpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90KG1h
c2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQoK
ICAgICAgY2hhcl90eXBlCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUq
CiAgICAgIHRvdXBwZXIoY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAgICAg
IGNoYXJfdHlwZQogICAgICB0b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAg
ICB0b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFy
X3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X3dpZGVuKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNoYXIq
IF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX190bykgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywgX19oaSwgX190byk7IH0KCiAgICAgIGNoYXIKICAg
ICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hhcl90
eXBlKgogICAgICBuYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq
IF9faGksCiAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciAqX190bykgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsg
fQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFjdF9i
YXNlKHNpemVfdCBfX3JlZnMgPSAwKTogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAg
dmlydHVhbAogICAgICB+X19jdHlwZV9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFs
IGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKCiAg
ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUq
IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNv
bnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lz
KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlw
ZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2
aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBl
KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwg
Y2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8s
IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5
cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBj
aGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAog
ICAgICAgICAgICAgICBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVh
bCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0ID0g
MDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3Qg
Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAg
Y2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0
cmFjdF9iYXNlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoKICAg
ICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXpl
X3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsg
fQoKICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmly
dHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUq
IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0
IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3Qg
Y2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5
cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190
b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlIF9fYykgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFy
X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIq
IF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAg
ICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xv
LCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBj
aGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgbG9jYWxlOjppZCBjdHlwZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNz
IGN0eXBlPGNoYXI+IDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxjaGFyPgogICAgewog
ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6
CgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2N0eXBlOwogICAgICBib29sIF9NX2RlbDsK
ICAgICAgX190b190eXBlIF9NX3RvdXBwZXI7CiAgICAgIF9fdG9fdHlwZSBfTV90b2xvd2VyOwog
ICAgICBjb25zdCBtYXNrKiBfTV90YWJsZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2Nh
bGU6OmlkIGlkOwogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAxICsgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEpOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUo
Y29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVm
cyA9IDApOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoX19jX2xvY2FsZSBfX2Nsb2MsIGNv
bnN0IG1hc2sqIF9fdGFibGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2UsCiAgICAgICAgICAgIHNp
emVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGlubGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBj
aGFyIF9fYykgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3Qg
Y2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAg
aW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9f
bG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAg
ICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hp
KSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGNvbnN0IG1hc2sqCiAgICAgIHRhYmxlKCkg
Y29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBfTV90YWJsZTsgfQoKICAgICAgc3RhdGljIGNv
bnN0IG1hc2sqCiAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbAog
ICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwg
Y2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg
ICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1h
c2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk
b19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f
c2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl
CiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90
eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93
ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAg
ICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xv
LCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNo
YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hh
ciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPD4KICAg
IGNvbnN0IGN0eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9j
YWxlJiBfX2xvYyk7CgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8d2NoYXJfdD4gOiBw
dWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPHdjaGFyX3Q+CiAgICB7CiAgICBwdWJsaWM6Cgog
ICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdjdHlwZV90IF9f
d21hc2tfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVf
Y3R5cGU7CgogICAgcHVibGljOgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBl
eHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAog
ICAgICBjdHlwZShfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHBy
b3RlY3RlZDoKICAgICAgX193bWFza190eXBlCiAgICAgIF9NX2NvbnZlcnRfdG9fd21hc2soY29u
c3QgbWFzayBfX20pIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAg
IHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90
eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBj
b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNv
bnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBf
X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hh
cl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190
b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlw
ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hh
cl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBj
aGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBj
aGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFy
cm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19k
ZXN0KSBjb25zdDsKCiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjdHlwZTx3Y2hhcl90
PiYKICAgIHVzZV9mYWNldDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoK
CgojIDEgIi91c3IvaW5jbHVkZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvY3R5cGVfaW5saW5l
LmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2N0eXBl
X2lubGluZS5oIiAzCiAgYm9vbAogIGN0eXBlPGNoYXI+OjoKICBpcyhtYXNrIF9fbSwgY2hhciBf
X2MpIGNvbnN0CiAgeyByZXR1cm4gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
X19jKV0gJiBfX207IH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgaXMoY29uc3Qg
Y2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCwgbWFzayogX192ZWMpIGNvbnN0CiAgewog
ICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQogICAgICAqX192ZWMrKyA9IF9NX3RhYmxlW3N0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdysrKV07CiAgICByZXR1cm4gX19oaWdoOwogIH0K
CiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qg
Y2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19s
b3cgPCBfX2hpZ2gKICAgICAgICAgICAmJiAhKF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KCpfX2xvdyldICYgX19tKSkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsK
ICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5fbm90KG1hc2sgX19tLCBj
b25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxl
IChfX2xvdyA8IF9faGlnaAogICAgICAgICAgICYmIChfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPigqX19sb3cpXSAmIF9fbSkgIT0gMCkKICAgICAgKytfX2xvdzsKICAgIHJldHVy
biBfX2xvdzsKICB9CiMgMzk4ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy5o
IiAyIDMKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFt
ZSA6IHB1YmxpYyBjdHlwZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlX2J5bmFtZShjb25z
dCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZp
cnR1YWwKICAgICAgfmN0eXBlX2J5bmFtZSgpIHsgfTsKICAgIH07CgoKICB0ZW1wbGF0ZTw+CiAg
ICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IHJl
ZnMpOwoKICB0ZW1wbGF0ZTw+CiAgICBjdHlwZV9ieW5hbWU8d2NoYXJfdD46OmN0eXBlX2J5bmFt
ZShjb25zdCBjaGFyKiwgc2l6ZV90IHJlZnMpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRz
L2NvZGVjdnQuaCIgMSAzCiMgNDUgIi91c3IvaW5jbHVkZS9nKysvYml0cy9jb2RlY3Z0LmgiIDMK
CgogIGNsYXNzIGNvZGVjdnRfYmFzZQogIHsKICBwdWJsaWM6CiAgICBlbnVtIHJlc3VsdAogICAg
ewogICAgICBvaywKICAgICAgcGFydGlhbCwKICAgICAgZXJyb3IsCiAgICAgIG5vY29udgogICAg
fTsKICB9OwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRl
cm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UK
ICAgIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjb2RlY3Z0X2Jhc2UKICAgIHsKICAg
IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0OwogICAg
ICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4
dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3RhdGVfdHlwZTsKCgogICAgICByZXN1
bHQKICAgICAgb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zy
b20sCiAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJu
X3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5f
dHlwZSogX190b19lbmQsCiAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QK
ICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5kb19vdXQoX19zdGF0ZSwgX19mcm9tLCBfX2Zy
b21fZW5kLCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdG8sIF9f
dG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICByZXN1bHQKICAgICAgdW5zaGlmdChz
dGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9f
ZW5kLAogICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb191bnNoaWZ0KF9fc3RhdGUsIF9fdG8sX190b19lbmQsX190b19uZXh0
KTsgfQoKICAgICAgcmVzdWx0CiAgICAgIGluKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4
dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5k
LCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICBpbnRlcm5fdHlwZSog
X190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9f
bmV4dCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5kb19pbihfX3N0YXRlLCBf
X2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGVu
Y29kaW5nKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19lbmNvZGluZygp
OyB9CgogICAgICBib29sCiAgICAgIGFsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX2Fsd2F5c19ub2NvbnYoKTsgfQoKICAgICAgaW50CiAgICAgIGxl
bmd0aChjb25zdCBzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t
LAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2xlbmd0aChfX3N0YXRlLCBfX2Zyb20sIF9fZW5k
LCBfX21heCk7IH0KCiAgICAgIGludAogICAgICBtYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQog
ICAgICB7IHJldHVybiB0aGlzLT5kb19tYXhfbGVuZ3RoKCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIGV4cGxpY2l0CiAgICAgIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMg
PSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfl9f
Y29kZWN2dF9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBk
b19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAg
ICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlw
ZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90
eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25z
dCA9IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUm
IF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBl
KiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZp
cnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVy
bl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5k
LCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlw
ZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSom
IF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2Rp
bmcoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdh
eXNfbm9jb252KCkgY29uc3QgdGhyb3coKSA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBk
b19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAg
ICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29u
c3QgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRo
cm93KCkgPSAwOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5h
bWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0CiAgICA6IHB1
YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+
CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJl
c3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBf
RXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoK
ICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0
KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRl
cm5ULF9FeHRlcm5ULF9TdGF0ZVQ+IChfX3JlZnMpIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAg
dmlydHVhbAogICAgICB+Y29kZWN2dCgpIHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAg
ZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAg
ICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5
cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5f
dHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9f
c3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBf
X3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBy
ZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0
IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3Rv
LCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19u
ZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3Qg
dGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29u
c3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0
ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0
IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
aW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVU
PgogICAgbG9jYWxlOjppZCBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD46Omlk
OwoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+
CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxjaGFyLCBjaGFyLCBtYnN0YXRl
X3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgaW50ZXJuX3R5cGU7CiAg
ICAgIHR5cGVkZWYgY2hhciBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3Rh
dGVfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmly
dHVhbAogICAgICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0
KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg
ICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBf
X2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSog
X190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUs
IGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2Vu
ZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQK
ICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJv
bSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVy
bl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRl
cm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3co
KTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhy
b3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBl
JiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVy
bl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAg
ICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogIH07CgoKCiAgdGVtcGxhdGU8Pgog
ICAgY2xhc3MgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAgICA6IHB1YmxpYyBf
X2NvZGVjdnRfYWJzdHJhY3RfYmFzZTx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAgICB7CiAg
ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3QgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVk
ZWYgY2hhciBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsK
CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVj
dnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg
ICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5
cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25z
dCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4
dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQs
CiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAgICAg
ICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAg
ICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFs
IHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLAogICAgICAgICAgICAgY29u
c3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsCiAg
ICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAg
aW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGlu
dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwKICAgICAgaW50IGRv
X2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgYm9vbCBkb19h
bHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgaW50IGRv
X2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAg
ICAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhy
b3coKTsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9F
eHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWUgOiBwdWJs
aWMgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7CiAgICBwdWJsaWM6
CiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3Qg
X19yZWZzID0gMCkKICAgICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4o
X19yZWZzKSB7IH0KICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dF9i
eW5hbWUoKSB7IH0KICAgIH07CgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKysvaTQ4Ni1zdXNlLWxp
bnV4L2JpdHMvY29kZWN2dF9zcGVjaWFsaXphdGlvbnMuaCIgMSAzCiMgNDYgIi91c3IvaW5jbHVk
ZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvY29kZWN2dF9zcGVjaWFsaXphdGlvbnMuaCIgMwog
IGNsYXNzIF9fZW5jX3RyYWl0cwogIHsKICBwdWJsaWM6CgoKCiAgICB0eXBlZGVmIGljb252X3Qg
X19kZXNjX3R5cGU7CgogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0IGludCBfU19tYXhf
c2l6ZSA9IDMyOwoKICAgIGNoYXIgX01faW50X2VuY1tfU19tYXhfc2l6ZV07CgogICAgY2hhciBf
TV9leHRfZW5jW19TX21heF9zaXplXTsKCgogICAgX19kZXNjX3R5cGUgX01faW5fZGVzYzsKCiAg
ICBfX2Rlc2NfdHlwZSBfTV9vdXRfZGVzYzsKCgogICAgaW50IF9NX2V4dF9ib207CgoKICAgIGlu
dCBfTV9pbnRfYm9tOwoKICBwdWJsaWM6CiAgICBleHBsaWNpdCBfX2VuY190cmFpdHMoKQogICAg
OiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVzYygwKSwgX01fZXh0X2JvbSgwKSwgX01faW50X2Jv
bSgwKQogICAgewogICAgICBtZW1zZXQoX01faW50X2VuYywgMCwgX1NfbWF4X3NpemUpOwogICAg
ICBtZW1zZXQoX01fZXh0X2VuYywgMCwgX1NfbWF4X3NpemUpOwogICAgfQoKICAgIGV4cGxpY2l0
IF9fZW5jX3RyYWl0cyhjb25zdCBjaGFyKiBfX2ludCwgY29uc3QgY2hhciogX19leHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IF9faWJvbSA9IDAsIGludCBfX2Vib20gPSAwKQogICAg
OiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVzYygwKSwgX01fZXh0X2JvbSgwKSwgX01faW50X2Jv
bSgwKQogICAgewogICAgICBzdHJuY3B5KF9NX2ludF9lbmMsIF9faW50LCBfU19tYXhfc2l6ZSk7
CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywgX19leHQsIF9TX21heF9zaXplKTsKICAgIH0KCgoK
CgoKICAgIF9fZW5jX3RyYWl0cyhjb25zdCBfX2VuY190cmFpdHMmIF9fb2JqKTogX01faW5fZGVz
YygwKSwgX01fb3V0X2Rlc2MoMCkKICAgIHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX29i
ai5fTV9pbnRfZW5jLCBfU19tYXhfc2l6ZSk7CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywgX19v
YmouX01fZXh0X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBfTV9leHRfYm9tID0gX19vYmouX01f
ZXh0X2JvbTsKICAgICAgX01faW50X2JvbSA9IF9fb2JqLl9NX2ludF9ib207CiAgICB9CgoKICAg
IF9fZW5jX3RyYWl0cyYKICAgIG9wZXJhdG9yPShjb25zdCBfX2VuY190cmFpdHMmIF9fb2JqKQog
ICAgewogICAgICBzdHJuY3B5KF9NX2ludF9lbmMsIF9fb2JqLl9NX2ludF9lbmMsIF9TX21heF9z
aXplKTsKICAgICAgc3RybmNweShfTV9leHRfZW5jLCBfX29iai5fTV9leHRfZW5jLCBfU19tYXhf
c2l6ZSk7CiAgICAgIF9NX2luX2Rlc2MgPSAwOwogICAgICBfTV9vdXRfZGVzYyA9IDA7CiAgICAg
IF9NX2V4dF9ib20gPSBfX29iai5fTV9leHRfYm9tOwogICAgICBfTV9pbnRfYm9tID0gX19vYmou
X01faW50X2JvbTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIH5fX2VuY190cmFpdHMo
KQogICAgewogICAgICBfX2Rlc2NfdHlwZSBfX2VyciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWNvbnZf
dD4oLTEpOwogICAgICBpZiAoX01faW5fZGVzYyAmJiBfTV9pbl9kZXNjICE9IF9fZXJyKQogICAg
ICAgIGljb252X2Nsb3NlKF9NX2luX2Rlc2MpOwogICAgICBpZiAoX01fb3V0X2Rlc2MgJiYgX01f
b3V0X2Rlc2MgIT0gX19lcnIpCiAgICAgICAgaWNvbnZfY2xvc2UoX01fb3V0X2Rlc2MpOwogICAg
fQoKICAgIHZvaWQKICAgIF9NX2luaXQoKQogICAgewogICAgICBjb25zdCBfX2Rlc2NfdHlwZSBf
X2VyciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWNvbnZfdD4oLTEpOwogICAgICBpZiAoIV9NX2luX2Rl
c2MpCiAgICAgICAgewogICAgICAgICAgX01faW5fZGVzYyA9IGljb252X29wZW4oX01faW50X2Vu
YywgX01fZXh0X2VuYyk7CiAgICAgICAgICBpZiAoX01faW5fZGVzYyA9PSBfX2VycikKICAgICAg
ICAgICAgX190aHJvd19ydW50aW1lX2Vycm9yKCJjcmVhdGluZyBpY29udiBpbnB1dCBkZXNjcmlw
dG9yIGZhaWxlZC4iKTsKICAgICAgICB9CiAgICAgIGlmICghX01fb3V0X2Rlc2MpCiAgICAgICAg
ewogICAgICAgICAgX01fb3V0X2Rlc2MgPSBpY29udl9vcGVuKF9NX2V4dF9lbmMsIF9NX2ludF9l
bmMpOwogICAgICAgICAgaWYgKF9NX291dF9kZXNjID09IF9fZXJyKQogICAgICAgICAgICBfX3Ro
cm93X3J1bnRpbWVfZXJyb3IoImNyZWF0aW5nIGljb252IG91dHB1dCBkZXNjcmlwdG9yIGZhaWxl
ZC4iKTsKICAgICAgICB9CiAgICB9CgogICAgYm9vbAogICAgX01fZ29vZCgpCiAgICB7CiAgICAg
IGNvbnN0IF9fZGVzY190eXBlIF9fZXJyID0gcmVpbnRlcnByZXRfY2FzdDxpY29udl90PigtMSk7
CiAgICAgIGJvb2wgX190ZXN0ID0gX01faW5fZGVzYyAmJiBfTV9pbl9kZXNjICE9IF9fZXJyOwog
ICAgICBfX3Rlc3QgJj0gX01fb3V0X2Rlc2MgJiYgX01fb3V0X2Rlc2MgIT0gX19lcnI7CiAgICAg
IHJldHVybiBfX3Rlc3Q7CiAgICB9CgogICAgY29uc3QgX19kZXNjX3R5cGUqCiAgICBfTV9nZXRf
aW5fZGVzY3JpcHRvcigpCiAgICB7IHJldHVybiAmX01faW5fZGVzYzsgfQoKICAgIGNvbnN0IF9f
ZGVzY190eXBlKgogICAgX01fZ2V0X291dF9kZXNjcmlwdG9yKCkKICAgIHsgcmV0dXJuICZfTV9v
dXRfZGVzYzsgfQoKICAgIGludAogICAgX01fZ2V0X2V4dGVybmFsX2JvbSgpCiAgICB7IHJldHVy
biBfTV9leHRfYm9tOyB9CgogICAgaW50CiAgICBfTV9nZXRfaW50ZXJuYWxfYm9tKCkKICAgIHsg
cmV0dXJuIF9NX2ludF9ib207IH0KCiAgICBjb25zdCBjaGFyKgogICAgX01fZ2V0X2ludGVybmFs
X2VuYygpCiAgICB7IHJldHVybiBfTV9pbnRfZW5jOyB9CgogICAgY29uc3QgY2hhcioKICAgIF9N
X2dldF9leHRlcm5hbF9lbmMoKQogICAgeyByZXR1cm4gX01fZXh0X2VuYzsgfQogIH07CgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNsYXNz
IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+CiAgICA6IHB1YmxpYyBf
X2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz4K
ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVz
dWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9F
eHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0cyBzdGF0ZV90eXBl
OwogICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0czo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAg
ICAgIHR5cGVkZWYgX19lbmNfdHJhaXRzIF9fZW5jX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2Fs
ZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAw
KQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGludGVybl90eXBlLCBleHRlcm5fdHlw
ZSwgc3RhdGVfdHlwZT4oX19yZWZzKQogICAgICB7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGNv
ZGVjdnQoX19lbmNfdHlwZSogX19lbmMsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29k
ZWN2dF9hYnN0cmFjdF9iYXNlPGludGVybl90eXBlLCBleHRlcm5fdHlwZSwgc3RhdGVfdHlwZT4o
X19yZWZzKQogICAgICB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNv
ZGVjdnQoKSB7IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBl
JiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3Qg
aW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQs
CiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAog
ICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVh
bCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlw
ZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90
eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2lu
KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg
ICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9f
ZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9f
dG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2
aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAg
ICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4
dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19l
bmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhf
bGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRl
cm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGxvY2FsZTo6aWQKICAgIGNvZGVjdnQ8X0ludGVy
blQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjppZDsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UPgogICAgaW5saW5lIHNpemVfdAogICAgX19pY29udl9hZGFwdG9yKHNpemVfdCgqX19mdW5j
KShpY29udl90LCBfVCwgc2l6ZV90KiwgY2hhcioqLCBzaXplX3QqKSwKICAgICAgICAgICAgICAg
ICAgICBpY29udl90IF9fY2QsIGNoYXIqKiBfX2luYnVmLCBzaXplX3QqIF9faW5ieXRlcywKICAg
ICAgICAgICAgICAgICAgICBjaGFyKiogX19vdXRidWYsIHNpemVfdCogX19vdXRieXRlcykKICAg
IHsgcmV0dXJuIF9fZnVuYyhfX2NkLCAoX1QpX19pbmJ1ZiwgX19pbmJ5dGVzLCBfX291dGJ1Ziwg
X19vdXRieXRlcyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9F
eHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9F
eHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBj
b25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBf
X2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgIGV4
dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgZXh0ZXJu
X3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGVycm9y
OwogICAgICBpZiAoX19zdGF0ZS5fTV9nb29kKCkpCiAgICAgICAgewogICAgICAgICAgdHlwZWRl
ZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgICAgIGNvbnN0IF9f
ZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0YXRlLl9NX2dldF9vdXRfZGVzY3JpcHRvcigpOwogICAg
ICAgICAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKTsKICAg
ICAgICAgIHNpemVfdCBfX2ZieXRlcyA9IF9fZm11bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zy
b20pOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGV4dGVybl90
eXBlKTsKICAgICAgICAgIHNpemVfdCBfX3RieXRlcyA9IF9fdG11bHRpcGxlICogKF9fdG9fZW5k
IC0gX190byk7CgoKCiAgICAgICAgICBjaGFyKiBfX2N0byA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KF9fdG8pOwogICAgICAgICAgY2hhciogX19jZnJvbTsKICAgICAgICAgIHNpemVfdCBfX2Nv
bnY7CgoKCgoKCiAgICAgICAgICBpbnQgX19pbnRfYm9tID0gX19zdGF0ZS5fTV9nZXRfaW50ZXJu
YWxfYm9tKCk7CiAgICAgICAgICBpZiAoX19pbnRfYm9tKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgc2l6ZV90IF9fc2l6ZSA9IF9fZnJvbV9lbmQgLSBfX2Zyb207CiAgICAgICAgICAgICAg
aW50ZXJuX3R5cGUqIF9fY2ZpeGVkID0gc3RhdGljX2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2J1aWx0
aW5fYWxsb2NhKHNpemVvZihpbnRlcm5fdHlwZSkgKiAoX19zaXplICsgMSkpKTsKICAgICAgICAg
ICAgICBfX2NmaXhlZFswXSA9IHN0YXRpY19jYXN0PGludGVybl90eXBlPihfX2ludF9ib20pOwog
ICAgICAgICAgICAgIGNoYXJfdHJhaXRzPGludGVybl90eXBlPjo6Y29weShfX2NmaXhlZCArIDEs
IF9fZnJvbSwgX19zaXplKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRv
cihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmX19mYnl0ZXMsICZfX2N0bywgJl9fdGJ5dGVzKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9f
Y2ZpeGVkID0gY29uc3RfY2FzdDxpbnRlcm5fdHlwZSo+KF9fZnJvbSk7CiAgICAgICAgICAgICAg
X19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAg
ICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLCAmX19m
Ynl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2N0bywgJl9f
dGJ5dGVzKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90KC0x
KSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgIF9fdG9fbmV4
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAg
X19yZXQgPSBvazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgaWYgKF9fZmJ5dGVzIDwgX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9f
ZnJvbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAg
ICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGV4dGVybl90eXBlKj4oX19jdG8p
OwogICAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRpYWw7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19yZXQgPSBlcnJvcjsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3Vs
dAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9f
dW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAg
ICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u
c3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChfX3N0YXRlLl9N
X2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190
eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9IF9f
c3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3Rt
dWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX190bGVuID0g
X190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3Rv
ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAgICBzaXplX3QgX19jb252
ID0gX19pY29udl9hZGFwdG9yKGljb252LCpfX2Rlc2MsIF9fbnVsbCwgX19udWxsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19jdG8sICZfX3RsZW4pOwoKICAg
ICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAg
ICAgICAgICAgICAgaWYgKF9fdGxlbiA9PSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8p
KQogICAgICAgICAgICAgICAgX19yZXQgPSBub2NvbnY7CiAgICAgICAgICAgICAgZWxzZSBpZiAo
X190bGVuID09IDApCiAgICAgICAgICAgICAgICBfX3JldCA9IG9rOwogICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgIF9fcmV0ID0gcGFydGlhbDsKICAgICAgICAgICAgfQogICAgICAg
ICAgZWxzZQogICAgICAgICAgICBfX3JldCA9IGVycm9yOwogICAgICAgIH0KICAgICAgcmV0dXJu
IF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4
dGVyblQ+CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4
dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29u
c3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zy
b21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgaW50ZXJu
X3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgIGludGVybl90eXBl
KiYgX190b19uZXh0KSBjb25zdAogICAgewogICAgICByZXN1bHQgX19yZXQgPSBlcnJvcjsKICAg
ICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3Rh
dGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2Nf
dHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5fZGVzY3JpcHRvcigpOwogICAgICAgICAg
Y29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9mKGV4dGVybl90eXBlKTsKICAgICAgICAg
IHNpemVfdCBfX2ZsZW4gPSBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKTsKICAg
ICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CiAg
ICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsK
CgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7
CiAgICAgICAgICBjaGFyKiBfX2Nmcm9tOwogICAgICAgICAgc2l6ZV90IF9fY29udjsKCgoKCgoK
ICAgICAgICAgIGludCBfX2V4dF9ib20gPSBfX3N0YXRlLl9NX2dldF9leHRlcm5hbF9ib20oKTsK
ICAgICAgICAgIGlmIChfX2V4dF9ib20pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXpl
X3QgX19zaXplID0gX19mcm9tX2VuZCAtIF9fZnJvbTsKICAgICAgICAgICAgICBleHRlcm5fdHlw
ZSogX19jZml4ZWQgPSBzdGF0aWNfY2FzdDxleHRlcm5fdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eo
c2l6ZW9mKGV4dGVybl90eXBlKSAqIChfX3NpemUgKyAxKSkpOwogICAgICAgICAgICAgIF9fY2Zp
eGVkWzBdID0gc3RhdGljX2Nhc3Q8ZXh0ZXJuX3R5cGU+KF9fZXh0X2JvbSk7CiAgICAgICAgICAg
ICAgY2hhcl90cmFpdHM8ZXh0ZXJuX3R5cGU+Ojpjb3B5KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBf
X3NpemUpOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihf
X2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAq
X19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fY2ZpeGVkID0gY29uc3Rf
Y2FzdDxleHRlcm5fdHlwZSo+KF9fZnJvbSk7CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBfX2NvbnYgPSBfX2lj
b252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmX19mbGVuLCAmX19jdG8sICZfX3RsZW4pOwogICAgICAgICAg
ICB9CgoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBleHRlcm5f
dHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgX19yZXQgPSBvazsKICAgICAg
ICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9f
ZmxlbiA8IHN0YXRpY19jYXN0PHNpemVfdD4oX19mcm9tX2VuZCAtIF9fZnJvbSkpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgICAgICBfX3RvX25l
eHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAg
ICAgICBfX3JldCA9IHBhcnRpYWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgX19yZXQgPSBlcnJvcjsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg
dHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5U
LCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKQogICAgewog
ICAgICBpbnQgX19yZXQgPSAwOwogICAgICBpZiAoc2l6ZW9mKF9FeHRlcm5UKSA8PSBzaXplb2Yo
X0ludGVyblQpKQogICAgICAgIF9fcmV0ID0gc2l6ZW9mKF9JbnRlcm5UKS9zaXplb2YoX0V4dGVy
blQpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRl
cm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGJvb2wKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9F
eHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJv
dygpCiAgICB7IHJldHVybiBmYWxzZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg
dHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5U
LCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3Qg
ZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19l
bmQsIHNpemVfdCBfX21heCkgY29uc3QKICAgIHsgcmV0dXJuIG1pbihfX21heCwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihfX2VuZCAtIF9fZnJvbSkpOyB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBf
RXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3co
KQogICAgeyByZXR1cm4gMTsgfQojIDMzNCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2NvZGVjdnQu
aCIgMiAzCiMgNDIzICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMK
CgoKICBjbGFzcyBfX251bV9iYXNlCiAgewogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0
IGNoYXIgX1NfYXRvbXNbXTsKCiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3plcm8sCiAgICAgIF9N
X2UgPSBfTV96ZXJvICsgMTAsCiAgICAgIF9NX0UgPSBfTV96ZXJvICsgMTEsCiAgICAgIF9NX3Np
emUgPSAyMSArIDEKICAgIH07CgoKCiAgICBzdGF0aWMgYm9vbAogICAgX1NfZm9ybWF0X2Zsb2F0
KGNvbnN0IGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2QsCiAgICAgICAg
ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMpOwoKCiAgICBzdGF0aWMgdm9pZAogICAgX1Nf
Zm9ybWF0X2ludChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9k
LCBjaGFyIF9fbW9kbCk7CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs
YXNzIG51bXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHBy
aXZhdGU6CiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUg
X01fdGhvdXNhbmRzX3NlcDsKICAgICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7CiAgICAgIGNv
bnN0IGNoYXJfdHlwZSogX01fdHJ1ZW5hbWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fZmFs
c2VuYW1lOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6ZV90
IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6
ZV9udW1wdW5jdCgpOyB9CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChfX2NfbG9jYWxl
IF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAg
IHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAg
ICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxf
cG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwog
ICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7
IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHRydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fdHJ1ZW5hbWUoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgZmFsc2Vu
YW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0KCiAgICBw
cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0KCk7CgogICAgICB2aXJ0dWFs
IGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4g
X01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhv
dXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAg
ICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJ1
ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAgdmlydHVh
bCBzdHJpbmdfdHlwZQogICAgICBkb19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBf
TV9mYWxzZW5hbWU7IH0KCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3Qo
X19jX2xvY2FsZSBfX2Nsb2MgPSBfU19jX2xvY2FsZSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG51bXB1bmN0PF9DaGFyVD46OmlkOwoKICB0ZW1w
bGF0ZTw+CiAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAg
IHZvaWQKICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2Nh
bGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPD4KICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVu
Y3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2lu
aXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGljIG51bXB1bmN0PF9D
aGFyVD4KICAgIHsKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbnVtcHVuY3Q7CgogICAg
cHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBudW1w
dW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBu
dW1wdW5jdDxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2Fs
ZShfTV9jX2xvY2FsZV9udW1wdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX251bXB1
bmN0KF9NX2NfbG9jYWxlX251bXB1bmN0KTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAg
dmlydHVhbAogICAgICB+bnVtcHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9j
YWxlKF9NX2NfbG9jYWxlX251bXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgbnVtX2dldCA6IHB1YmxpYyBsb2Nh
bGU6OmZhY2V0LCBwdWJsaWMgX19udW1fYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlw
ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoK
ICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fZ2V0
KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0
ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2Vy
ciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19p
biwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0
KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp
OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9f
aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdl
dChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp
OyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2lu
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQo
aXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBf
X3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90
eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4s
IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChp
dGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAg
IGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91
YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwg
X19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBl
IF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6
CiAgICAgIHZpcnR1YWwgfm51bV9nZXQoKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9l
eHRyYWN0X2Zsb2F0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp
b3N0YXRlJiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcmIF9feHRyYykgY29uc3Q7Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFjdF9pbnQoaXRlcl90eXBlLCBpdGVyX3R5cGUs
IGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAogICAgICAgICAgICAgICAgICAgICBzdHJp
bmcmIF9feHRyYywgaW50JiBfX2Jhc2UpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp
b3N0YXRlJiwgYm9vbCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
Z2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwg
bG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJf
dHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAg
ICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHVuc2lnbmVkIGludCYpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBp
b3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHVuc2lnbmVk
IGxvbmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRl
cl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAog
ICAgICAgICAgICAgbG9uZyBsb25nJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog
ICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Q7CgoK
ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBl
LCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGZsb2F0
JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBl
LCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAg
ICAgICAgZG91YmxlJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19n
ZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLAogICAgICAgICAgICAgbG9uZyBkb3VibGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRl
cl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICB2b2lkKiYpIGNvbnN0OwogICAgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxl
OjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgbnVtX3B1dCA6IHB1YmxpYyBsb2Nh
bGU6OmZhY2V0LCBwdWJsaWMgX19udW1fYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlw
ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsK
CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtX3B1
dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw
ZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19z
LCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5
cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAg
ICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hh
cl90eXBlIF9fZmlsbCwKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0
ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBl
IF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0
KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRl
cl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChf
X3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVy
X3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsg
fQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19m
LCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgbG9uZyBkb3VibGUgX192KSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAg
aXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5
cGUgX19maWxsLAogICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgIHByb3RlY3RlZDoK
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgICBpdGVyX3R5cGUKICAgICAg
ICBfTV9jb252ZXJ0X2Zsb2F0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBf
X2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kLCBfVmFsdWVUIF9fdikg
Y29uc3Q7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICAgIGl0ZXJfdHlw
ZQogICAgICAgIF9NX2NvbnZlcnRfaW50KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJf
dHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX21vZCwgY2hhciBfX21v
ZGwsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV93aWRlbl9m
bG9hdChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjaGFyKiBf
X2NzLAogICAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAgaXRlcl90
eXBlCiAgICAgIF9NX3dpZGVuX2ludChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5
cGUgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25z
dDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9pbnNlcnQoaXRlcl90eXBlLCBpb3NfYmFzZSYg
X19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X193cywgaW50IF9fbGVuKSBjb25zdDsKCiAgICAgIHZpcnR1YWwKICAgICAgfm51bV9wdXQoKSB7
IH07CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3Nf
YmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
aXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9f
ZmlsbCwgbG9uZyBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25n
KSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBl
LCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBj
aGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25nIGxvbmcpIGNvbnN0OwoKCiAgICAgIHZpcnR1
YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBl
IF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91
YmxlIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRl
cl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHZvaWQqIF9fdikgY29u
c3Q7CiAgICB9OwoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl
cj4KICAgIGxvY2FsZTo6aWQgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlIDogcHVibGljIGxvY2FsZTo6
ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK
ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICBwcm90
ZWN0ZWQ6CgoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9jb2xsYXRlOwoKICAgIHB1Ymxp
YzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2xs
YXRlKHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAg
ICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUgPSBfU19jX2xvY2FsZTsgfQoKCiAgICAgIGV4cGxpY2l0
CiAgICAgIGNvbGxhdGUoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAg
ICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUgPSBf
U19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOyB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25z
dCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAgIGNvbnN0
IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX2NvbXBhcmUoX19sbzEsIF9faGkxLCBfX2xvMiwgX19oaTIpOyB9CgogICAgICBz
dHJpbmdfdHlwZQogICAgICB0cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hh
clQqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RyYW5zZm9ybShfX2xvLCBf
X2hpKTsgfQoKICAgICAgbG9uZwogICAgICBoYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3Qg
X0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19oYXNoKF9fbG8sIF9f
aGkpOyB9CgoKICAgICAgaW50CiAgICAgIF9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwgY29uc3Qg
X0NoYXJUKikgY29uc3Q7CgogICAgICBzaXplX3QKICAgICAgX01fdHJhbnNmb3JtKF9DaGFyVCos
IGNvbnN0IF9DaGFyVCosIHNpemVfdCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAgICAgdmlydHVh
bAogICAgICB+Y29sbGF0ZSgpCiAgICAgIHsKICAgICAgICBpZiAoX01fY19sb2NhbGVfY29sbGF0
ZSAhPSBfU19jX2xvY2FsZSkKICAgICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2Nh
bGVfY29sbGF0ZSk7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2NvbXBhcmUo
Y29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAg
ICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19s
bywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgbG9uZwogICAgICBk
b19oYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY29sbGF0ZTxf
Q2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGludAogICAgY29sbGF0ZTxjaGFyPjo6X01f
Y29tcGFyZShjb25zdCBjaGFyKiwgY29uc3QgY2hhciopIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAg
ICBzaXplX3QKICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiwgY29uc3QgY2hh
ciosIHNpemVfdCkgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8d2No
YXJfdD46Ol9NX2NvbXBhcmUoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKSBjb25zdDsK
CiAgdGVtcGxhdGU8PgogICAgc2l6ZV90CiAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zv
cm0od2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBzaXplX3QpIGNvbnN0OwoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0
ZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAg
IGV4cGxpY2l0CiAgICAgIGNvbGxhdGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9f
cmVmcyA9IDApCiAgICAgIDogY29sbGF0ZTxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAg
IGlmIChfTV9jX2xvY2FsZV9jb2xsYXRlICE9IF9TX2NfbG9jYWxlKQogICAgICAgICAgX1NfZGVz
dHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xsYXRlKTsKICAgICAgICBfU19jcmVhdGVfY19s
b2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSwgX19zKTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoK
ICAgICAgdmlydHVhbAogICAgICB+Y29sbGF0ZV9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFz
cyB0aW1lX2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBkYXRlb3JkZXIgeyBub19vcmRlciwg
ZG15LCBtZHksIHltZCwgeWRtIH07CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgY2xhc3MgX190aW1lcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgX19jaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk
IGlkOwoKCiAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQqIF9TX3RpbWV6b25lc1sxNF07CgogICAg
cHJvdGVjdGVkOgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX3RpbWVwdW5jdDsKICAgICAg
Y29uc3QgY2hhciogX01fbmFtZV90aW1lcHVuY3Q7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0
ZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICBj
b25zdCBfQ2hhclQqIF9NX3RpbWVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVf
ZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAg
ICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfdGltZV9lcmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hh
clQqIF9NX2FtOwogICAgICBjb25zdCBfQ2hhclQqIF9NX3BtOwogICAgICBjb25zdCBfQ2hhclQq
IF9NX2FtX3BtX2Zvcm1hdDsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTE7CiAgICAgIGNv
bnN0IF9DaGFyVCogX01fZGF5MjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkzOwogICAgICBj
b25zdCBfQ2hhclQqIF9NX2RheTQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NTsKICAgICAg
Y29uc3QgX0NoYXJUKiBfTV9kYXk2OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTc7CgoKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2Ey
OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9k
YXlfYTQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E1OwogICAgICBjb25zdCBfQ2hhclQq
IF9NX2RheV9hNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTc7CgoKICAgICAgY29uc3Qg
X0NoYXJUKiBfTV9tb250aDAxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDI7CiAgICAg
IGNvbnN0IF9DaGFyVCogX01fbW9udGgwMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA0
OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f
bW9udGgwNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA3OwogICAgICBjb25zdCBfQ2hh
clQqIF9NX21vbnRoMDg7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwOTsKICAgICAgY29u
c3QgX0NoYXJUKiBfTV9tb250aDEwOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMTE7CiAg
ICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMjsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX21v
bnRoX2EwMTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDI7CiAgICAgIGNvbnN0IF9D
aGFyVCogX01fbW9udGhfYTAzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNDsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u
dGhfYTA2OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNzsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9tb250aF9hMDg7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA5OwogICAg
ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250
aF9hMTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTEyOwoKICAgIHB1YmxpYzoKICAg
ICAgZXhwbGljaXQKICAgICAgX190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDog
bG9jYWxlOjpmYWNldChfX3JlZnMpLCBfTV9uYW1lX3RpbWVwdW5jdCgiQyIpCiAgICAgIHsgX01f
aW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgX190aW1lcHVu
Y3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDAp
CiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpLCBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCiAg
ICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsgfQoKICAgICAgdm9pZAogICAg
ICBfTV9wdXQoX0NoYXJUKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgX0NoYXJUKiBfX2Zv
cm1hdCwKICAgICAgICAgICAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZvaWQKICAg
ICAgX01fZGF0ZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9fZGF0ZSkgY29uc3QKICAgICAgewoK
ICAgICAgICBfX2RhdGVbMF0gPSBfTV9kYXRlX2Zvcm1hdDsKICAgICAgICBfX2RhdGVbMV0gPSBf
TV9kYXRlX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fdGltZV9mb3Jt
YXRzKGNvbnN0IF9DaGFyVCoqIF9fdGltZSkgY29uc3QKICAgICAgewoKICAgICAgICBfX3RpbWVb
MF0gPSBfTV90aW1lX2Zvcm1hdDsKICAgICAgICBfX3RpbWVbMV0gPSBfTV90aW1lX2VyYV9mb3Jt
YXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fYW1wbShjb25zdCBfQ2hhclQqKiBfX2Ft
cG0pIGNvbnN0CiAgICAgIHsKICAgICAgICBfX2FtcG1bMF0gPSBfTV9hbTsKICAgICAgICBfX2Ft
cG1bMV0gPSBfTV9wbTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9kYXRlX3RpbWVfZm9y
bWF0cyhjb25zdCBfQ2hhclQqKiBfX2R0KSBjb25zdAogICAgICB7CgogICAgICAgIF9fZHRbMF0g
PSBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAgICAgIF9fZHRbMV0gPSBfTV9kYXRlX3RpbWVfZXJh
X2Zvcm1hdDsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9kYXlzKGNvbnN0IF9DaGFyVCoq
IF9fZGF5cykgY29uc3QKICAgICAgewogICAgICAgIF9fZGF5c1swXSA9IF9NX2RheTE7CiAgICAg
ICAgX19kYXlzWzFdID0gX01fZGF5MjsKICAgICAgICBfX2RheXNbMl0gPSBfTV9kYXkzOwogICAg
ICAgIF9fZGF5c1szXSA9IF9NX2RheTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01fZGF5NTsKICAg
ICAgICBfX2RheXNbNV0gPSBfTV9kYXk2OwogICAgICAgIF9fZGF5c1s2XSA9IF9NX2RheTc7CiAg
ICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fZGF5c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQq
KiBfX2RheXMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXlfYTE7CiAg
ICAgICAgX19kYXlzWzFdID0gX01fZGF5X2EyOwogICAgICAgIF9fZGF5c1syXSA9IF9NX2RheV9h
MzsKICAgICAgICBfX2RheXNbM10gPSBfTV9kYXlfYTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01f
ZGF5X2E1OwogICAgICAgIF9fZGF5c1s1XSA9IF9NX2RheV9hNjsKICAgICAgICBfX2RheXNbNl0g
PSBfTV9kYXlfYTc7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fbW9udGhzKGNvbnN0IF9D
aGFyVCoqIF9fbW9udGhzKSBjb25zdAogICAgICB7CiAgICAgICAgX19tb250aHNbMF0gPSBfTV9t
b250aDAxOwogICAgICAgIF9fbW9udGhzWzFdID0gX01fbW9udGgwMjsKICAgICAgICBfX21vbnRo
c1syXSA9IF9NX21vbnRoMDM7CiAgICAgICAgX19tb250aHNbM10gPSBfTV9tb250aDA0OwogICAg
ICAgIF9fbW9udGhzWzRdID0gX01fbW9udGgwNTsKICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21v
bnRoMDY7CiAgICAgICAgX19tb250aHNbNl0gPSBfTV9tb250aDA3OwogICAgICAgIF9fbW9udGhz
WzddID0gX01fbW9udGgwODsKICAgICAgICBfX21vbnRoc1s4XSA9IF9NX21vbnRoMDk7CiAgICAg
ICAgX19tb250aHNbOV0gPSBfTV9tb250aDEwOwogICAgICAgIF9fbW9udGhzWzEwXSA9IF9NX21v
bnRoMTE7CiAgICAgICAgX19tb250aHNbMTFdID0gX01fbW9udGgxMjsKICAgICAgfQoKICAgICAg
dm9pZAogICAgICBfTV9tb250aHNfYWJicmV2aWF0ZWQoY29uc3QgX0NoYXJUKiogX19tb250aHMp
IGNvbnN0CiAgICAgIHsKICAgICAgICBfX21vbnRoc1swXSA9IF9NX21vbnRoX2EwMTsKICAgICAg
ICBfX21vbnRoc1sxXSA9IF9NX21vbnRoX2EwMjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21v
bnRoX2EwMzsKICAgICAgICBfX21vbnRoc1szXSA9IF9NX21vbnRoX2EwNDsKICAgICAgICBfX21v
bnRoc1s0XSA9IF9NX21vbnRoX2EwNTsKICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoX2Ew
NjsKICAgICAgICBfX21vbnRoc1s2XSA9IF9NX21vbnRoX2EwNzsKICAgICAgICBfX21vbnRoc1s3
XSA9IF9NX21vbnRoX2EwODsKICAgICAgICBfX21vbnRoc1s4XSA9IF9NX21vbnRoX2EwOTsKICAg
ICAgICBfX21vbnRoc1s5XSA9IF9NX21vbnRoX2ExMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBf
TV9tb250aF9hMTE7CiAgICAgICAgX19tb250aHNbMTFdID0gX01fbW9udGhfYTEyOwogICAgICB9
CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5fX3RpbWVwdW5jdCgpOwoKCiAg
ICAgIHZvaWQKICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2Mg
PSBfU19jX2xvY2FsZSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBs
b2NhbGU6OmlkIF9fdGltZXB1bmN0PF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgX190
aW1lcHVuY3Q8Y2hhcj46On5fX3RpbWVwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBj
aGFyKgogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9TX3RpbWV6b25lc1sxNF07CgogIHRlbXBsYXRl
PD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5j
dChfX2NfbG9jYWxlIF9fY2xvYyk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1
bmN0PGNoYXI+OjpfTV9wdXQoY2hhciosIHNpemVfdCwgY29uc3QgY2hhciosIGNvbnN0IHRtKikg
Y29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6fl9fdGltZXB1
bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IHdjaGFyX3QqCiAgICBfX3RpbWVwdW5jdDx3
Y2hhcl90Pjo6X1NfdGltZXpvbmVzWzE0XTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190
aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19j
bG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9N
X3B1dCh3Y2hhcl90Kiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90KiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgdG0qKSBjb25zdDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBjb25zdCBfQ2hhclQqIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25l
c1sxNF07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg
ICBjbGFzcyB0aW1lX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNl
CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
aGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAg
ZXhwbGljaXQKICAgICAgdGltZV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxl
OjpmYWNldCAoX19yZWZzKSB7IH0KCiAgICAgIGRhdGVvcmRlcgogICAgICBkYXRlX29yZGVyKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGF0ZV9vcmRlcigpOyB9CgogICAgICBpdGVy
X3R5cGUKICAgICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt
KiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfdGltZShfX2JlZywgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF9kYXRl
KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fZ2V0X2RhdGUoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190
bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcs
IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX2dldF93ZWVrZGF5KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAg
ICBpdGVyX3R5cGUKICAgICAgZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0
X21vbnRobmFtZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRl
cl90eXBlCiAgICAgIGdldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0
bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3llYXIoX19iZWcsIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwK
ICAgICAgfnRpbWVfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGRhdGVvcmRlcgogICAgICBkb19k
YXRlX29yZGVyKCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRf
dGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0
OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9f
YmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
aXRlcl90eXBlCiAgICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg
ZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmLAogICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0q
IF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3llYXIo
aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCgog
ICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlw
ZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICAgIGludCBfX21pbiwg
aW50IF9fbWF4LCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBl
PF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VycikgY29uc3Q7CgoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFjdF9uYW1lKGl0ZXJf
dHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAg
ICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CgoKICAg
ICAgdm9pZAogICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRl
cl90eXBlJiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVf
Z2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWUgOiBwdWJsaWMgdGltZV9n
ZXQ8X0NoYXJULCBfSW5JdGVyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhw
bGljaXQKICAgICAgdGltZV9nZXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0g
MCkKICAgICAgOiB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+KF9fcmVmcykgeyB9CgogICAgcHJv
dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldF9ieW5hbWUoKSB7IH0KICAgIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFz
cyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk
ZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAg
ICBleHBsaWNpdAogICAgICB0aW1lX3B1dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2Nh
bGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlw
ZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSogX190bSwK
ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0
OwoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19p
bywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHRtKiBfX3RtLCBjaGFyIF9fZm9y
bWF0LCBjaGFyIF9fbW9kID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9f
cywgX19pbywgX19maWxsLCBfX3RtLCBfX2Zvcm1hdCwgX19tb2QpOyB9CgogICAgcHJvdGVjdGVk
OgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dCgpCiAgICAgIHsgfQoKICAgICAgdmlydHVh
bCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBj
aGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSogX190bSwKICAgICAgICAgICAgIGNoYXIgX19mb3Jt
YXQsIGNoYXIgX19tb2QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0
SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lIDogcHVibGljIHRpbWVfcHV0PF9DaGFyVCwgX091
dEl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAg
dGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIqICwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDog
dGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4oX19yZWZzKQogICAgICB7IH07CgogICAgcHJvdGVj
dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dF9ieW5hbWUoKSB7IH0KICAgIH07CgoK
ICBjbGFzcyBtb25leV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gcGFydCB7IG5vbmUsIHNw
YWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07CiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmll
bGRbNF07IH07CgogICAgc3RhdGljIGNvbnN0IHBhdHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOwoK
CgogICAgc3RhdGljIHBhdHRlcm4KICAgIF9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVj
ZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2Nh
bGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlw
ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+
IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwogICAg
ICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBjb25zdCBjaGFyKiBf
TV9ncm91cGluZzsKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJf
dHlwZSBfTV90aG91c2FuZHNfc2VwOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX2N1cnJfc3lt
Ym9sOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX3Bvc2l0aXZlX3NpZ247CiAgICAgIGNvbnN0
IGNoYXJfdHlwZSogX01fbmVnYXRpdmVfc2lnbjsKICAgICAgaW50IF9NX2ZyYWNfZGlnaXRzOwog
ICAgICBwYXR0ZXJuIF9NX3Bvc19mb3JtYXQ7CiAgICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsK
CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVm
cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25l
eXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBf
X2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7
IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAg
ICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxf
cG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwog
ICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7
IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fY3Vycl9zeW1ib2woKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAg
cG9zaXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc2l0aXZlX3Np
Z24oKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ2F0aXZlX3NpZ24oKTsgfQoKICAgICAgaW50CiAgICAg
IGZyYWNfZGlnaXRzKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZnJhY19kaWdpdHMo
KTsgfQoKICAgICAgcGF0dGVybgogICAgICBwb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fcG9zX2Zvcm1hdCgpOyB9CgogICAgICBwYXR0ZXJuCiAgICAgIG5lZ19mb3Jt
YXQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7IH0KCiAgICBw
cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3QoKTsKCiAgICAgIHZpcnR1
YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVy
biBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190
aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoK
ICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJl
dHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19j
dXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9sOyB9CgogICAg
ICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9wb3NpdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBl
CiAgICAgIGRvX25lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBfTV9uZWdhdGl2
ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19mcmFjX2RpZ2l0cygpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9NX2ZyYWNfZGlnaXRzOyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4K
ICAgICAgZG9fcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7
IH0KCiAgICAgIHZpcnR1YWwgcGF0dGVybgogICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QKICAg
ICAgeyByZXR1cm4gX01fbmVnX2Zvcm1hdDsgfQoKCiAgICAgICB2b2lkCiAgICAgICBfTV9pbml0
aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfU19jX2xvY2FsZSk7CiAgICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBsb2NhbGU6Omlk
IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46
OmludGw7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1
bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojp+bW9uZXlw
dW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+
OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0
ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9t
b25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVu
Y3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5
cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2
b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVu
Y3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1
bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUg
X19jbG9jKTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNs
YXNzIG1vbmV5cHVuY3RfYnluYW1lIDogcHVibGljIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4K
ICAgIHsKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0OwoKICAgIHB1Ymxp
YzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0
cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9
IF9JbnRsOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdF9ieW5hbWUoY29uc3QgY2hh
ciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBtb25leXB1bmN0PF9DaGFyVCwgX0lu
dGw+KF9fcmVmcykKICAgICAgewogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2Fs
ZV9tb25leXB1bmN0LCBfX3MpOwogICAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfTV9j
X2xvY2FsZV9tb25leXB1bmN0KTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh
bAogICAgICB+bW9uZXlwdW5jdF9ieW5hbWUoKQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUo
X01fY19sb2NhbGVfbW9uZXlwdW5jdCk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgYm9vbCBfSW50bD4KICAgIGNvbnN0IGJvb2wgbW9uZXlwdW5jdF9ieW5hbWU8X0NoYXJU
LCBfSW50bD46OmludGw7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4KICAgIGNsYXNzIG1vbmV5X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAg
ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg
X0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry
aW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIG1vbmV5X2dldChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykg
eyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBf
X2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fdW5pdHMpOyB9
CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2Vu
ZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX2dldChfX3MsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX2RpZ2l0cyk7IH0K
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5X2dldCgpIHsgfQoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlw
ZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9f
ZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6Omlk
IG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2Nh
bGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsK
CiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2Nh
bGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlw
ZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGNoYXJfdHlwZSBf
X2ZpbGwsIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90
eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICBjaGFyX3R5cGUgX19maWxsLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19m
aWxsLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1v
bmV5X3B1dCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJf
dHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwK
ICAgICAgICAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp
dGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFz
ZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBl
JiBfX2RpZ2l0cykgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRl
cj46OmlkOwoKCiAgc3RydWN0IG1lc3NhZ2VzX2Jhc2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRh
bG9nOwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2Vz
IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBw
dWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9f
Y19sb2NhbGUgX01fY19sb2NhbGVfbWVzc2FnZXM7CgoKICAgICAgY29uc3QgY2hhciogX01fbmFt
ZV9tZXNzYWdlczsKCgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAg
ICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxv
Y2FsZTo6ZmFjZXQoX19yZWZzKSwgX01fbmFtZV9tZXNzYWdlcygiQyIpCiAgICAgIHsgX01fY19s
b2NhbGVfbWVzc2FnZXMgPSBfU19jX2xvY2FsZTsgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1l
c3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX25hbWUsIHNpemVfdCBfX3Jl
ZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7CiAgICAgICAgX01f
bmFtZV9tZXNzYWdlcyA9IF9fbmFtZTsKICAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9T
X2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CiAgICAgIH0KCiAgICAgIGNhdGFsb2cKICAgICAgb3Bl
bihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKCiAgICAgIGNh
dGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUm
LCBjb25zdCBjaGFyKikgY29uc3Q7CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxv
ZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2MsIF9fc2V0LCBfX21zZ2lkLCBfX3Mp
OyB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19jbG9zZShfX2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFs
CiAgICAgIH5tZXNzYWdlcygpCiAgICAgICB7CiAgICAgICAgIGlmIChfTV9jX2xvY2FsZV9tZXNz
YWdlcyAhPSBfU19jX2xvY2FsZSkKICAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2Nf
bG9jYWxlX21lc3NhZ2VzKTsKICAgICAgIH0KCiAgICAgIHZpcnR1YWwgY2F0YWxvZwogICAgICBk
b19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQs
IGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQK
ICAgICAgZG9fY2xvc2UoY2F0YWxvZykgY29uc3Q7CgoKICAgICAgY2hhcioKICAgICAgX01fY29u
dmVydF90b19jaGFyKGNvbnN0IHN0cmluZ190eXBlJiBfX21zZykgY29uc3QKICAgICAgewoKICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDxfQ2hhclQqPihf
X21zZy5jX3N0cigpKSk7CiAgICAgIH0KCgogICAgICBzdHJpbmdfdHlwZQogICAgICBfTV9jb252
ZXJ0X2Zyb21fY2hhcihjaGFyKiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICBzaXplX3Qg
X19sZW4gPSBjaGFyX3RyYWl0czxjaGFyPjo6bGVuZ3RoKF9fbXNnKSAtIDE7CiMgMTcwNSAiL3Vz
ci9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwogICAgICAgIHJldHVybiBzdHJp
bmdfdHlwZSgpOwogICAgICB9CiAgICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgbG9jYWxlOjppZCBtZXNzYWdlczxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIHN0
cmluZwogICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qg
c3RyaW5nJikgY29uc3Q7CgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9i
aXRzL21lc3NhZ2VzX21lbWJlcnMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKysvaTQ4Ni1z
dXNlLWxpbnV4L2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2Fn
ZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9j
YWxlJiBfX2xvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19kaXIp
IGNvbnN0CiAgICB7CiAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CiAg
ICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCiAg
ICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19z
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2NhbGUmKSBjb25zdAogICAg
ewoKCiAgICAgIHRleHRkb21haW4oX19zLmNfc3RyKCkpOwogICAgICByZXR1cm4gMDsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJU
Pjo6c3RyaW5nX3R5cGUKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2dldChjYXRhbG9nLCBpbnQs
IGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSYgX19k
ZmF1bHQpIGNvbnN0CiAgICB7CgoKCgoKCiAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxv
Y2FsZShfX0xDX0FMTCwgX19udWxsKSk7CiAgICAgIHNldGxvY2FsZShfX0xDX0FMTCwgX01fbmFt
ZV9tZXNzYWdlcyk7CiAgICAgIGNoYXIqIF9fbXNnID0gZGNnZXR0ZXh0IChfX251bGwsIF9NX2Nv
bnZlcnRfdG9fY2hhcihfX2RmYXVsdCksIF9fTENfTUVTU0FHRVMpOwogICAgICBzZXRsb2NhbGUo
X19MQ19BTEwsIF9fb2xkKTsKICAgICAgZnJlZShfX29sZCk7CiAgICAgIHJldHVybiBfTV9jb252
ZXJ0X2Zyb21fY2hhcihfX21zZyk7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICB2b2lkCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAog
ICAgeyB9CiMgMTcxOSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAz
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZSA6
IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJp
bmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFy
KiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZz
KQogICAgICB7CiAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fczsKICAgICAgICBpZiAoX01f
Y19sb2NhbGVfbWVzc2FnZXMgIT0gX1NfY19sb2NhbGUpCiAgICAgICAgICBfU19kZXN0cm95X2Nf
bG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUo
X01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IHZpcnR1YWwKICAgICAgfm1lc3NhZ2VzX2J5bmFtZSgpCiAgICAgIHsgfQogICAgfTsKCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShf
Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0
eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJU
IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf
Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnByaW50LCBfX2MpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCBfX2Ms
IGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU
PiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpjbnRybCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25z
dCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf
X2xvYykuaXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgaW5saW5lIGJvb2wgaXNsb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUm
IF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMo
Y3R5cGVfYmFzZTo6bG93ZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgaW5saW5lIGJvb2wKICAgIGlzYWxwaGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xv
YykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBl
X2Jhc2U6OmFscGhhLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu
bGluZSBib29sCiAgICBpc2RpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg
ICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNl
OjpkaWdpdCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg
Ym9vbAogICAgaXNwdW5jdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy
ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHVu
Y3QsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK
ICAgIGlzeGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVy
biB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGlnaXQs
IF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAg
IGlzYWxudW0oX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVz
ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBfX2Mp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2dy
YXBoKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFj
ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpncmFwaCwgX19jKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVy
KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8
Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b3VwcGVyKF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQgX19jLCBjb25z
dCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf
X2xvYykudG9sb3dlcihfX2MpOyB9Cn0KIyA0MiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2Jhc2lj
X2lvcy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3MgOiBwdWJsaWMgaW9zX2Jhc2UK
ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRy
YWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAg
ICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVh
bWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRl
cj4gX19udW1wdXRfdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFy
VCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hh
clQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwoKCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX01fdGllOwogICAgICBtdXRhYmxl
IGNoYXJfdHlwZSBfTV9maWxsOwogICAgICBtdXRhYmxlIGJvb2wgX01fZmlsbF9pbml0OwogICAg
ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX01fc3RyZWFtYnVmOwoKCiAgICAg
IGNvbnN0IF9fY3R5cGVfdHlwZSogX01fZmN0eXBlOwoKICAgICAgY29uc3QgX19udW1wdXRfdHlw
ZSogX01fZm51bXB1dDsKCiAgICAgIGNvbnN0IF9fbnVtZ2V0X3R5cGUqIF9NX2ZudW1nZXQ7Cgog
ICAgcHVibGljOgogICAgICBvcGVyYXRvciB2b2lkKigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmZhaWwoKSA/IDAgOiBjb25zdF9jYXN0PGJhc2ljX2lvcyo+KHRoaXMpOyB9CgogICAgICBi
b29sCiAgICAgIG9wZXJhdG9yISgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZhaWwoKTsg
fQoKICAgICAgaW9zdGF0ZQogICAgICByZHN0YXRlKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f
c3RyZWFtYnVmX3N0YXRlOyB9CgogICAgICB2b2lkCiAgICAgIGNsZWFyKGlvc3RhdGUgX19zdGF0
ZSA9IGdvb2RiaXQpOwoKICAgICAgdm9pZAogICAgICBzZXRzdGF0ZShpb3N0YXRlIF9fc3RhdGUp
CiAgICAgIHsgdGhpcy0+Y2xlYXIodGhpcy0+cmRzdGF0ZSgpIHwgX19zdGF0ZSk7IH0KCiAgICAg
IGJvb2wKICAgICAgZ29vZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJkc3RhdGUoKSA9
PSAwOyB9CgogICAgICBib29sCiAgICAgIGVvZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlz
LT5yZHN0YXRlKCkgJiBlb2ZiaXQpICE9IDA7IH0KCiAgICAgIGJvb2wKICAgICAgZmFpbCgpIGNv
bnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiAoYmFkYml0IHwgZmFpbGJpdCkp
ICE9IDA7IH0KCiAgICAgIGJvb2wKICAgICAgYmFkKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRo
aXMtPnJkc3RhdGUoKSAmIGJhZGJpdCkgIT0gMDsgfQoKICAgICAgaW9zdGF0ZQogICAgICBleGNl
cHRpb25zKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZXhjZXB0aW9uOyB9CgogICAgICB2b2lk
CiAgICAgIGV4Y2VwdGlvbnMoaW9zdGF0ZSBfX2V4Y2VwdCkKICAgICAgewogICAgICAgIF9NX2V4
Y2VwdGlvbiA9IF9fZXhjZXB0OwogICAgICAgIHRoaXMtPmNsZWFyKF9NX3N0cmVhbWJ1Zl9zdGF0
ZSk7CiAgICAgIH0KCgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3MoYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpIDogaW9zX2Jhc2UoKQogICAgICB7IHRoaXMtPmlu
aXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lvcygpIHsgfQoKCiAgICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKCkgY29uc3QKICAgICAg
eyByZXR1cm4gX01fdGllOyB9CgogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4q
CiAgICAgIHRpZShiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fdGllc3RyKQogICAg
ICB7CiAgICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9IF9NX3Rp
ZTsKICAgICAgICBfTV90aWUgPSBfX3RpZXN0cjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAg
IH0KCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICByZGJ1Zigp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1ZjsgfQoKICAgICAgYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJhc2ljX2lvcyYKICAgICAgY29weWZtdChjb25zdCBi
YXNpY19pb3MmIF9fcmhzKTsKCiAgICAgIGNoYXJfdHlwZQogICAgICBmaWxsKCkgY29uc3QKICAg
ICAgewogICAgICAgIGlmICghX01fZmlsbF9pbml0KQogICAgICAgICAgewogICAgICAgICAgICBf
TV9maWxsID0gdGhpcy0+d2lkZW4oJyAnKTsKICAgICAgICAgICAgX01fZmlsbF9pbml0ID0gdHJ1
ZTsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX01fZmlsbDsKICAgICAgfQoKICAgICAgY2hh
cl90eXBlCiAgICAgIGZpbGwoY2hhcl90eXBlIF9fY2gpCiAgICAgIHsKICAgICAgICBjaGFyX3R5
cGUgX19vbGQgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgX01fZmlsbCA9IF9fY2g7CiAgICAgICAg
cmV0dXJuIF9fb2xkOwogICAgICB9CgoKICAgICAgbG9jYWxlCiAgICAgIGltYnVlKGNvbnN0IGxv
Y2FsZSYgX19sb2MpOwoKICAgICAgY2hhcgogICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hh
ciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2Mp
IGNvbnN0OwoKICAgIHByb3RlY3RlZDoKCiAgICAgIGJhc2ljX2lvcygpIDogaW9zX2Jhc2UoKQog
ICAgICB7IH0KCiAgICAgIHZvaWQKICAgICAgaW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPiogX19zYik7CgogICAgICBib29sCiAgICAgIF9NX2NoZWNrX2ZhY2V0KGNvbnN0IGxv
Y2FsZTo6ZmFjZXQqIF9fZikgY29uc3QKICAgICAgewogICAgICAgIGlmICghX19mKQogICAgICAg
ICAgX190aHJvd19iYWRfY2FzdCgpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAg
ICB2b2lkCiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhjb25zdCBsb2NhbGUmIF9fbG9jKTsKICAgIH07
Cn0KCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNfaW9zLnRjYyIgMSAzCiMgMzQg
Ii91c3IvaW5jbHVkZS9nKysvYml0cy9iYXNpY19pb3MudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAg
ICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y2xlYXIoaW9zdGF0ZSBfX3N0YXRlKQogICAg
ewogICAgICBpZiAodGhpcy0+cmRidWYoKSkKICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBf
X3N0YXRlOwogICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRl
IHwgYmFkYml0OwogICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRoaXMtPmV4Y2VwdGlvbnMo
KSkpCiAgICAgICAgX190aHJvd19pb3NfZmFpbHVyZSgiYmFzaWNfaW9zOjpjbGVhcihpb3N0YXRl
KSBjYXVzZWQgZXhjZXB0aW9uIik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Kgog
ICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OnJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+KiBfX3NiKQogICAgewogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPiogX19vbGQgPSBfTV9zdHJlYW1idWY7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7
CiAgICAgIHRoaXMtPmNsZWFyKCk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaW9zPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y29weWZtdChjb25z
dCBiYXNpY19pb3MmIF9fcmhzKQogICAgewoKCgoKICAgICAgX1dvcmRzKiBfX3dvcmRzID0gKF9f
cmhzLl9NX3dvcmRfc2l6ZSA8PSBfU19sb2NhbF93b3JkX3NpemUpID8KICAgICAgICBfTV9sb2Nh
bF93b3JkIDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX3NpemVdOwoKCiAgICAgIF9DYWxsYmFj
a19saXN0KiBfX2NiID0gX19yaHMuX01fY2FsbGJhY2tzOwogICAgICBpZiAoX19jYikKICAgICAg
ICBfX2NiLT5fTV9hZGRfcmVmZXJlbmNlKCk7CiAgICAgIF9NX2NhbGxfY2FsbGJhY2tzKGVyYXNl
X2V2ZW50KTsKICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29yZCkKICAgICAgICB7CiAg
ICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9NX3dvcmQgPSAwOwogICAgICAg
IH0KICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsKCiAgICAgIF9NX2NhbGxiYWNrcyA9IF9f
Y2I7CiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcmhzLl9NX3dvcmRfc2l6ZTsgKytf
X2kpCiAgICAgICAgX193b3Jkc1tfX2ldID0gX19yaHMuX01fd29yZFtfX2ldOwogICAgICBpZiAo
X01fd29yZCAhPSBfTV9sb2NhbF93b3JkKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBbXSBf
TV93b3JkOwogICAgICAgICAgX01fd29yZCA9IDA7CiAgICAgICAgfQogICAgICBfTV93b3JkID0g
X193b3JkczsKICAgICAgX01fd29yZF9zaXplID0gX19yaHMuX01fd29yZF9zaXplOwoKICAgICAg
dGhpcy0+ZmxhZ3MoX19yaHMuZmxhZ3MoKSk7CiAgICAgIHRoaXMtPndpZHRoKF9fcmhzLndpZHRo
KCkpOwogICAgICB0aGlzLT5wcmVjaXNpb24oX19yaHMucHJlY2lzaW9uKCkpOwogICAgICB0aGlz
LT50aWUoX19yaHMudGllKCkpOwogICAgICB0aGlzLT5maWxsKF9fcmhzLmZpbGwoKSk7CgogICAg
ICB0aGlzLT5leGNlcHRpb25zKF9fcmhzLmV4Y2VwdGlvbnMoKSk7CgogICAgICBfTV9jYWxsX2Nh
bGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjaGFyCiAgICBiYXNp
Y19pb3M8X0NoYXJULCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1
bHQpIGNvbnN0CiAgICB7CiAgICAgIGNoYXIgX19yZXQgPSBfX2RmYXVsdDsKICAgICAgaWYgKF9N
X2NoZWNrX2ZhY2V0KF9NX2ZjdHlwZSkpCiAgICAgICAgX19yZXQgPSBfTV9mY3R5cGUtPm5hcnJv
dyhfX2MsIF9fZGZhdWx0KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBfQ2hhclQKICAgIGJhc2ljX2lv
czxfQ2hhclQsIF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9fYykgY29uc3QKICAgIHsKICAgICAgY2hh
cl90eXBlIF9fcmV0ID0gY2hhcl90eXBlKCk7CiAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m
Y3R5cGUpKQogICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT53aWRlbihfX2MpOwogICAgICByZXR1
cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBsb2NhbGUKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjppbWJ1ZShj
b25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBsb2NhbGUgX19vbGQodGhpcy0+Z2V0bG9j
KCkpOwogICAgICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOwogICAgICBfTV9jYWNoZV9mYWNldHMo
X19sb2MpOwogICAgICBpZiAodGhpcy0+cmRidWYoKSAhPSAwKQogICAgICAgIHRoaXMtPnJkYnVm
KCktPnB1YmltYnVlKF9fbG9jKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19p
b3M8X0NoYXJULCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
PiogX19zYikKICAgIHsKCiAgICAgIGlvc19iYXNlOjpfTV9pbml0KCk7CiAgICAgIF9NX2NhY2hl
X2ZhY2V0cyhfTV9pb3NfbG9jYWxlKTsKICAgICAgX01fdGllID0gMDsKIyAxNTkgIi91c3IvaW5j
bHVkZS9nKysvYml0cy9iYXNpY19pb3MudGNjIiAzCiAgICAgIF9NX2ZpbGwgPSAwOwogICAgICBf
TV9maWxsX2luaXQgPSBmYWxzZTsKCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAg
IF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBn
b29kYml0IDogYmFkYml0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6X01f
Y2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGlmIChoYXNfZmFj
ZXQ8X19jdHlwZV90eXBlPihfX2xvYykpCiAgICAgICAgX01fZmN0eXBlID0gJnVzZV9mYWNldDxf
X2N0eXBlX3R5cGU+KF9fbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9NX2ZjdHlwZSA9IDA7Cgog
ICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVt
cHV0ID0gJnVzZV9mYWNldDxfX251bXB1dF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAg
ICBfTV9mbnVtcHV0ID0gMDsKICAgICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihfX2xv
YykpCiAgICAgICAgX01fZm51bWdldCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2Mp
OwogICAgICBlbHNlCiAgICAgICAgX01fZm51bWdldCA9IDA7CiAgICB9CgoKCgogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3M8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJh
c2ljX2lvczx3Y2hhcl90PjsKfQojIDIwOCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2Jhc2ljX2lv
cy5oIiAyIDMKIyA1MiAiL3Vzci9pbmNsdWRlL2crKy9pb3MiIDIgMwojIDQ2ICIvdXNyL2luY2x1
ZGUvZysrL29zdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW0gOiB2aXJ0
dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9U
cmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6
OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90
eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAg
dHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBl
OwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBl
OwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29z
dHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVm
X2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBl
X3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90
eXBlKiBfX3NiKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAg
ICAgfmJhc2ljX29zdHJlYW0oKSB7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVu
ZCBjbGFzcyBzZW50cnk7CgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8
KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikpOwoKICAgICAgX19vc3Ry
ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBl
JikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgq
X19wZikgKGlvc19iYXNlJikpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cjw8KGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVu
c2lnbmVkIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8
KGJvb2wgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0
IF9fbikKICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZs
YWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNl
OjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9w
ZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX19uKSkpOwogICAgICAg
IGVsc2UKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+
KF9fbikpOwogICAgICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1
bnNpZ25lZCBzaG9ydCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcjw8KGludCBfX24pCiAgICAgIHsKICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3Mg
X19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAo
X19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAg
IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihf
X24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3Rh
dGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJh
dG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCgogICAgICBfX29zdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVh
bV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAg
IF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19v
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0
aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0
cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fZik7CgogICAgICBfX29z
dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX3ApOwoKICAgICAgX19v
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoK
ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHB1dChjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9f
b3N0cmVhbV90eXBlJgogICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6
ZSBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIGZsdXNoKCk7CgoKICAgICAgcG9z
X3R5cGUKICAgICAgdGVsbHAoKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChw
b3NfdHlwZSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3Aob2ZmX3R5cGUsIGlv
c19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjpzZW50cnkKICAgIHsKCiAgICAgIGJvb2wgX01fb2s7CiAgICAgIGJhc2ljX29zdHJlYW08X0No
YXJULF9UcmFpdHM+JiBfTV9vczsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHNl
bnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7CgogICAgICB+c2VudHJ5
KCkKICAgICAgewoKICAgICAgICBpZiAoX01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVm
ICYmICF1bmNhdWdodF9leGNlcHRpb24oKSkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGlmIChf
TV9vcy5yZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAg
ICAgICBfTV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgIH0KICAgICAg
fQoKICAgICAgb3BlcmF0b3IgYm9vbCgpCiAgICAgIHsgcmV0dXJuIF9NX29rOyB9CiAgICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQs
IGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykpOyB9CgoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0
cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBj
aGFyIF9fYyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxj
aGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz
PiYgX19vdXQsIHNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNf
Y2FzdDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNf
b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFy
LCBfVHJhaXRzPiYgX19vdXQsIHVuc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0
IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29u
c3QgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8
PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3Mp
OwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0
LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hh
ciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4g
KF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgogIHRlbXBs
YXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ICYKICAg
IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5k
bChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBmbHVz
aChfX29zLnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJl
dHVybiBfX29zLnB1dChfQ2hhclQoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
Zmx1c2goYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4g
X19vcy5mbHVzaCgpOyB9Cgp9CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvb3N0cmVh
bS50Y2MiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvb3N0cmVhbS50Y2MiIDMKCiMg
MSAiL3Vzci9pbmNsdWRlL2crKy9sb2NhbGUiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvZysrL2xv
Y2FsZSIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIg
MSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwoKIyAx
ICIvdXNyL2luY2x1ZGUvZysrL2NlcnJubyIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9nKysvY2Vy
cm5vIiAzCgojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRl
L2Vycm5vLmgiIDMKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8u
aCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvbGludXgvZXJybm8uaCIgMSAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FzbS9lcnJuby5oIiAx
IDMKIyA1ICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMiAzCiMgMjYgIi91c3IvaW5jbHVk
ZS9iaXRzL2Vycm5vLmgiIDIgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCmV4
dGVybiBpbnQgZXJybm87CgoKZXh0ZXJuIGludCAqX19lcnJub19sb2NhdGlvbiAodm9pZCkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDM3ICIvdXNyL2luY2x1ZGUvZXJy
bm8uaCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVybiBjaGFyICpwcm9n
cmFtX2ludm9jYXRpb25fbmFtZSwgKnByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOwoKCgp9
CiMgNjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgNDkg
Ii91c3IvaW5jbHVkZS9nKysvY2Vycm5vIiAyIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2crKy9iaXRz
L2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9nKysvY21hdGgiIDEg
MwojIDQ4ICIvdXNyL2luY2x1ZGUvZysrL2NtYXRoIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL21h
dGguaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuICJDIiB7CgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9t
YXRoLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL25hbi5oIiAxIDMKIyAzOCAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgi
IDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDMKdHlwZWRlZiBsb25nIGRv
dWJsZSBmbG9hdF90OwoKdHlwZWRlZiBsb25nIGRvdWJsZSBkb3VibGVfdDsKIyA0MSAiL3Vzci9p
bmNsdWRlL21hdGguaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21h
dGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgYWNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBkb3VibGUgX19hY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUg
YXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luIChkb3VibGUg
X194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19hdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3Vi
bGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3Vi
bGUgY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcyAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19zaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJs
ZSB0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuIChkb3VibGUg
X194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zIChkb3VibGUgX194LCBkb3VibGUg
Kl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvcyAo
ZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbmggKGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGFjb3No
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3VibGUgX194
KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJs
ZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGRvdWJsZSBleHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19l
eHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3BvdzEwIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGRvdWJsZSBmcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25l
bnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4
cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xkZXhwIChkb3VibGUgX194LCBpbnQg
X19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRl
cm4gZG91YmxlIGxvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xv
ZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG1vZGYgKGRvdWJsZSBf
X3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX21vZGYgKGRvdWJs
ZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBleHBtMSAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBkb3VibGUgX19sb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs
ZSBsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZ2IgKGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBleHAyIChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVy
biBkb3VibGUgbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cy
IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cgKGRvdWJsZSBf
X3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93IChkb3VibGUgX194
LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
CmV4dGVybiBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9faHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX2NicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNlaWwg
KGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mYWJzIChkb3VibGUgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBm
bG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbG9vciAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUg
X195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBf
X3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGUg
KGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
CgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZHJlbSAo
ZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19kcmVtIChk
b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzaWduaWZp
Y2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaWduaWZpY2FuZCAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3VibGUg
X194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4
dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29u
c3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4
dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJsZSBfX3Zh
bHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQg
aXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2owIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGoxIChkb3VibGUpIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgam4g
KGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2puIChpbnQsIGRvdWJsZSkg
dGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91YmxlKSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91Ymxl
IHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195biAoaW50LCBkb3Vi
bGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyZmMg
KGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUpIHRocm93ICgp
OwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2xnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0Z2FtbWEgKGRvdWJs
ZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gZG91YmxlIGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKGRv
dWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYV9y
IChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUg
cmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yaW50IChkb3VibGUg
X194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91YmxlIF9feCwgZG91
YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91
YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUg
cmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVy
biBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBpbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYiAoZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibG4gKGRvdWJsZSBfX3gs
IGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYmxuIChkb3VibGUg
X194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIG5lYXJieWludCAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19uZWFyYnlpbnQgKGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgcmVtcXVvIChkb3VibGUg
X194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3Jl
bXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGludCBfX2xyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQg
bGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJp
bnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kIChkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChkb3VibGUgX194KSB0
aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsK
CgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0IChkb3VibGUg
X192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4
dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91Ymxl
IF9feikgdGhyb3cgKCk7CiMgNjQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDgyICIvdXNy
L2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEg
MwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgYWNv
c2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NmIChmbG9hdCBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19hc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFu
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHRocm93
ICgpOwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19jb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
dGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zZiAoZmxvYXQg
X194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQg
X19zaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmhm
IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaW5oZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBhY29z
aGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NoZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBh
dGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW5oZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXhwZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZs
b2F0IGV4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwMTBmIChm
bG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHBvdzEwZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRl
cm4gZmxvYXQgZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX2ZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgp
OwoKCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19sZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2dmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19sb2dmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxMGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzEwZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX21vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIp
IHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0
IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2diZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
ZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cDJmIChm
bG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cyZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBmbG9hdCBwb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX3Bvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxv
YXQgc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NxcnRmIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0
IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBf
X3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBfX3gpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jZWlsZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mYWJzZiAo
ZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu
IGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3Jm
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBm
bG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbW9kZiAoZmxvYXQgX194LCBmbG9h
dCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5p
dGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBkcmVt
ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19kcmVtZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc2lnbmlmaWNh
bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY29weXNpZ25mIChmbG9hdCBfX3gs
IGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g
ZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQgbmFuZiAoX19jb25zdCBjaGFy
ICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZs
b2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmYg
KGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl
eHRlcm4gZmxvYXQgajBmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2owZiAoZmxv
YXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX2oxZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgam5mIChpbnQsIGZsb2F0
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsKZXh0
ZXJuIGZsb2F0IHkwZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195MGYgKGZsb2F0
KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX195MWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50LCBmbG9hdCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAo
ZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGxnYW1tYWYg
KGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQpIHRocm93ICgp
OwoKCgpleHRlcm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X190Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZ2FtbWFmIChmbG9h
dCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19yaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbmV4
dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBf
X3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBmbG9hdCBu
ZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dHRvd2FyZGYgKGZsb2F0IF9f
eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX3JlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2ls
b2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYmxuZiAoZmxv
YXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmxuZiAo
ZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgbmVhcmJ5
aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbmVhcmJ5aW50ZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHJvdW5kZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fcm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRl
cm4gZmxvYXQgdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBmbG9hdCByZW1xdW9mIChmbG9hdCBf
X3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JlbXF1
b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGxvbmcgaW50IGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50
IF9fbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJp
bnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRmIChmbG9hdCBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRmIChmbG9hdCBfX3gpIHRocm93
ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGZsb2F0IGZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2ZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGZsb2F0IGZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2ZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0
IGZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Zt
aW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNs
YXNzaWZ5ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAo
KQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0IGZtYWYg
KGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19mbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAoKTsKIyA4MyAi
L3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgOTkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9i
aXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRvdWJs
ZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNv
c2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2wg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lubCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4g
dm9pZCBfX3NpbmNvc2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9u
ZyBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3No
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zaGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2luaGwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmhsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5obCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2hsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmhsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHAxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3cxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpf
X2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsIChsb25nIGRv
dWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2xkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCmV4dGVybiBsb25nIGRvdWJsZSBtb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbW9kZmwgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRv
dWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3Vi
bGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19sb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19s
b2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBl
eHAybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhw
MmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzJs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cybCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvd2wg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp
OwoKCmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
CmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlwb3RsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2Jy
dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NicnRs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2Vp
bGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NlaWxs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmYWJzbCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxvb3JsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbG9vcmwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2Ztb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IF9faXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxvbmcgZG91Ymxl
IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVy
biBpbnQgaXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVl
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3B5c2lnbmwg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFu
bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25n
IGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
ajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwg
bG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9u
ZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAobG9uZyBkb3VibGUpIHRocm93ICgp
OwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3Vi
bGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
eW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUg
ZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZsIChs
b25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAobG9uZyBkb3Vi
bGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3VibGUpIHRo
cm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoK
CmV4dGVybiBsb25nIGRvdWJsZSB0Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX3RnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25n
IGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2ln
bmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0ZXJsIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
ZXh0ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19uZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91
YmxlIHJlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsIChsb25n
IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX3NjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9feCwg
aW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg
aW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibG5sIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBu
ZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19uZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBk
b3VibGUgcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19yb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRv
dWJsZSB0cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91
YmxlIHJlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVv
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtcXVvbCAobG9uZyBkb3VibGUgX194
LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9u
ZyBpbnQgbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQg
X19scmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50
IGxscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50
IF9fbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50
IGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xy
b3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxs
cm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBf
X2xscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3Vi
bGUgZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1heGwgKGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBk
b3VibGUgZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChsb25nIGRvdWJsZSBf
X3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl
cm4gaW50IF9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1hbCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195LCBsb25nIGRvdWJsZSBfX3opIHRocm93ICgpOwojIDEwMCAiL3Vzci9pbmNsdWRlL21hdGgu
aCIgMiAzCiMgMTEzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiBpbnQgc2lnbmdhbTsK
IyAxNTQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZW51bQogIHsKICAgIEZQX05BTiwKCiAgICBG
UF9JTkZJTklURSwKCiAgICBGUF9aRVJPLAoKICAgIEZQX1NVQk5PUk1BTCwKCiAgICBGUF9OT1JN
QUwKCiAgfTsKIyAyNDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKdHlwZWRlZiBlbnVtCnsKICBf
SUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAogIF9JU09DXwp9IF9M
SUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJfVkVSU0lP
TjsKIyAyNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKc3RydWN0IF9fZXhjZXB0aW9uCgoKCiAg
ewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFyZzE7CiAgICBkb3Vi
bGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50IG1hdGhlcnIgKHN0
cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93ICgpOwojIDM1MCAiL3Vzci9pbmNsdWRlL21h
dGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMSAzCiMgMTI3ICIv
dXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgaW50Cl9fc2lnbmJpdGYg
KGZsb2F0IF9feCkgdGhyb3cgKCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBmbG9hdCBfX2Y7
IGludCBfX2k7IH0gX191ID0geyBfX2Y6IF9feCB9OwogIHJldHVybiBfX3UuX19pIDwgMDsKfQpf
X2lubGluZSBpbnQKX19zaWduYml0IChkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNp
b25fXyB1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0gX191ID0geyBfX2Q6IF9feCB9
OwogIHJldHVybiBfX3UuX19pWzFdIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWduYml0bCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGxvbmcgZG91
YmxlIF9fbDsgaW50IF9faVszXTsgfSBfX3UgPSB7IF9fbDogX194IH07CiAgcmV0dXJuIChfX3Uu
X19pWzJdICYgMHg4MDAwKSAhPSAwOwp9CiMgMjkxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s
aW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3VibGUpIHRocm93ICgpOyBfX2lubGlu
ZSBkb3VibGUgX19zZ24gKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9feCA9PSAwLjAg
PyAwLjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7IH0gX19pbmxpbmUgZmxvYXQgX19zZ25m
IChmbG9hdCkgdGhyb3cgKCk7IF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQgX194KSB0aHJv
dyAoKSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjAp
OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBf
X2lubGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyBy
ZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfQojIDQy
NSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBhdGFu
MiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJs
ZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkg
OiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lu
bGluZSBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAi
PXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBf
X3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg
X19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gp
LCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUgbG9uZyBk
b3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZw
YXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7
IHJldHVybiBfX3ZhbHVlOyB9CgoKX19pbmxpbmUgZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20g
X192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQi
ICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4Iiwg
ImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gs
IGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2Fz
bSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5c
dCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgi
LCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZm1vZGwgKGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3Rz
dwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f
eCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfQojIDQ0MCAiL3Vz
ci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBzcXJ0IChkb3Vi
bGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xh
dGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9f
cmVzdWx0OyB9IF9faW5saW5lIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVn
aXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIg
KF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25n
IGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jl
c3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KX19pbmxpbmUgbG9uZyBkb3Vi
bGUgX19zcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3Vs
dCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KCgpfX2lubGluZSBkb3VibGUgZmFi
cyAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnMgKF9feCk7IH0K
X19pbmxpbmUgZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWls
dGluX2ZhYnNmIChfX3gpOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIGZhYnNsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQpfX2lubGlu
ZSBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJu
IF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQojIDQ2NiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlu
bGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJl
Z2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFu
IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1
bHQ7IH0gX19pbmxpbmUgZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3Rl
ciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9
dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0g
X19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyBy
ZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsg
ZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4g
X19yZXN1bHQ7IH0KCl9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlKSB0
aHJvdyAoKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24xbCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKSB7IF9fZXh0ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBfX3hsZDsgdW5zaWdu
ZWQgaW50IF9feGlbM107IH0gX19uID0geyBfX3hsZDogX194IH07IF9fbi5fX3hpWzJdID0gKF9f
bi5fX3hpWzJdICYgMHg4MDAwKSB8IDB4M2ZmZjsgX19uLl9feGlbMV0gPSAweDgwMDAwMDAwOyBf
X24uX194aVswXSA9IDA7IHJldHVybiBfX24uX194bGQ7IH0KIyA0OTIgIi91c3IvaW5jbHVkZS9i
aXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRo
cm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25l
ZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsg
X19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAo
X19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6
ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3Zh
bHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAo
X19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBmbG9vcmYgKGZsb2F0IF9f
eCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVu
c2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3
dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3Rt
cCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUw
IiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIg
KF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDog
Im0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGZsb29y
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs
dWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1t
IiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3Zv
bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAo
ImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxl
ICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1MDMgIi91
c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgY2VpbCAoZG91
YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0
aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGlu
dCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsg
X19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZs
ZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6
ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUw
IiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGNlaWxm
IChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192
b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9y
dCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3
KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUg
KCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGlu
dCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRj
dyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRv
dWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRp
bGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cg
JTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBf
X2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192
b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBf
X3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0K
IyA1MjEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUK
bGRleHAgKGRvdWJsZSBfX3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25nIGRv
dWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1
ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7
Cn0KIyA1MzkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3Vi
bGUgbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192
YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUw
NDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVf
XyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAi
MCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgbG9n
MXBmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg
aWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwp
IF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZs
ZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f
eCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9n
MXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192
YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUw
NDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVf
XyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAi
MCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1NTMgIi91c3IvaW5jbHVk
ZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gp
IHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0
dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsgMS4w
KSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBfX2lubGluZSBmbG9hdCBhc2luaGYgKGZsb2F0
IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gp
OyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkg
KyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGFz
aW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f
eSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAo
X195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0KCgoKCl9f
aW5saW5lIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gbG9nbCAo
X194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9IF9faW5s
aW5lIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJldHVybiBsb2dsIChfX3gg
KyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0gX19pbmxpbmUg
bG9uZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIGxv
Z2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfQoK
Cl9faW5saW5lIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBs
b25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShf
X3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBfX2lubGluZSBmbG9h
dCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kg
PSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEu
MCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFuaGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBf
X2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCAr
IF9feSkpICogX19zZ24xbCAoX194KTsgfQoKCgoKX19pbmxpbmUgZG91YmxlIGh5cG90IChkb3Vi
bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3gg
KyBfX3kgKiBfX3kpOyB9IF9faW5saW5lIGZsb2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBf
X3kpIHRocm93ICgpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0g
X19pbmxpbmUgbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSkgdGhyb3cgKCkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsgX195ICogX195KTsg
fQoKX19pbmxpbmUgZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIg
bG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBf
X3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVl
KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGxvZ2JmIChm
bG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0
ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIg
OiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Zh
bHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmsp
LCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgNTgzICIv
dXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZmxvYXQKbGRleHBmIChm
bG9hdCBfX3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh
bHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIg
KF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KCl9faW5s
aW5lIGxvbmcgZG91YmxlCmxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX195KSB0aHJvdyAo
KQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgi
ZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkg
X195KSk7IHJldHVybiBfX3ZhbHVlOwp9CiMgNjA3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s
aW5lLmgiIDMKX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpCnsK
ICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbCAlMCIg
OiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19scmludHJl
czsKfQpfX2lubGluZSBsb25nIGludApscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIGxv
bmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsICUwIiA6ICI9
bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xyaW50cmVzOwp9
Cl9faW5saW5lIGxvbmcgaW50CmxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAg
bG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAiIDog
Ij1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbHJpbnRyZXM7
Cn0KIyA2MzAgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBsb25n
IGxvbmcgaW50CmxscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCkKewogIGxvbmcgbG9uZyBpbnQg
X19sbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChf
X2xscmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9Cl9f
aW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgbG9u
ZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGxsICUw
IiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19sbHJp
bnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRp
bGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0
Iik7IHJldHVybiBfX2xscmludHJlczsKfQoKCgoKCgoKX19pbmxpbmUgZG91YmxlIGRyZW0gKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7
IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0x
XG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVl
KSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJl
dHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGRyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xv
YmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVheFxu
XHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVy
ZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19p
bmxpbmUgbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9i
YmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5c
dCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJl
ZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfQojIDY2
NSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGludApfX2Zpbml0
ZSAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIHJldHVybiAoX19leHRlbnNpb25fXwogICAgICAg
ICAgKCgoKCh1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0pIHtfX2Q6IF9feH0pLl9f
aVsxXQogICAgICAgICAgICAgfCAweDgwMGZmZmZmdSkgKyAxKSA+PiAzMSkpOwp9CiMgMzUxICIv
dXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA0MTEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKfQoj
IDUyICIvdXNyL2luY2x1ZGUvZysrL2NtYXRoIiAyIDMKIyA3OSAiL3Vzci9pbmNsdWRlL2crKy9j
bWF0aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9f
Y21hdGhfcG93ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgaW5saW5lIF9UcAogICAgX19jbWF0aF9hYnMoX1RwIF9feCkKICAgIHsKICAgICAgcmV0dXJu
IF9feCA8IF9UcCgpID8gLV9feCA6IF9feDsKICAgIH0KCiAgaW5saW5lIGRvdWJsZQogIGFicyhk
b3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzKF9feCk7IH0KCiAgaW5saW5lIGZs
b2F0CiAgYWJzKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsgfQoK
ICBpbmxpbmUgbG9uZyBkb3VibGUKICBhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9f
YnVpbHRpbl9mYWJzbChfX3gpOyB9CgoKICBpbmxpbmUgZmxvYXQKICBhY29zKGZsb2F0IF9feCkg
eyByZXR1cm4gOjphY29zZihfX3gpOyB9CgoKCgoKICB1c2luZyA6OmFjb3M7CgoKICBpbmxpbmUg
bG9uZyBkb3VibGUKICBhY29zKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphY29zbChfX3gp
OyB9CgoKCgoKICB1c2luZyA6OmFzaW47CgoKICBpbmxpbmUgZmxvYXQKICBhc2luKGZsb2F0IF9f
eCkgeyByZXR1cm4gOjphc2luZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg
YXNpbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXNpbmwoX194KTsgfQoKCgoKCiAgdXNp
bmcgOjphdGFuOwoKCiAgaW5saW5lIGZsb2F0CiAgYXRhbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6
YXRhbmYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4obG9uZyBkb3Vi
bGUgX194KSB7IHJldHVybiA6OmF0YW5sKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YXRhbjI7CgoK
ICBpbmxpbmUgZmxvYXQKICBhdGFuMihmbG9hdCBfX3ksIGZsb2F0IF9feCkgeyByZXR1cm4gOjph
dGFuMmYoX195LCBfX3gpOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4yKGxv
bmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmF0YW4ybChfX3ksIF9f
eCk7IH0KCgoKCgoKICB1c2luZyA6OmNlaWw7CgoKICBpbmxpbmUgZmxvYXQKICBjZWlsKGZsb2F0
IF9feCkgeyByZXR1cm4gOjpjZWlsZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91Ymxl
CiAgY2VpbChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y2VpbGwoX194KTsgfQoKCgoKCiAg
dXNpbmcgOjpjb3M7CgogIGlubGluZSBmbG9hdAogIGNvcyhmbG9hdCBfX3gpCiAgeyByZXR1cm4g
X19idWlsdGluX2Nvc2YoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb3MobG9uZyBk
b3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NsKF9feCk7IH0KCiAgdXNpbmcgOjpj
b3NoOwoKCiAgaW5saW5lIGZsb2F0CiAgY29zaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Y29zaGYo
X194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvc2gobG9uZyBkb3VibGUgX194
KSB7IHJldHVybiA6OmNvc2hsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6ZXhwOwoKCiAgaW5saW5l
IGZsb2F0CiAgZXhwKGZsb2F0IF9feCkgeyByZXR1cm4gOjpleHBmKF9feCk7IH0KCgoKCgoKICBp
bmxpbmUgbG9uZyBkb3VibGUKICBleHAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmV4cGwo
X194KTsgfQoKCgoKCiAgdXNpbmcgOjpmYWJzOwoKICBpbmxpbmUgZmxvYXQKICBmYWJzKGZsb2F0
IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsgfQoKICBpbmxpbmUgbG9uZyBk
b3VibGUKICBmYWJzKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2wo
X194KTsgfQoKICB1c2luZyA6OmZsb29yOwoKCiAgaW5saW5lIGZsb2F0CiAgZmxvb3IoZmxvYXQg
X194KSB7IHJldHVybiA6OmZsb29yZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91Ymxl
CiAgZmxvb3IobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmZsb29ybChfX3gpOyB9CgoKCgoK
ICB1c2luZyA6OmZtb2Q7CgoKICBpbmxpbmUgZmxvYXQKICBmbW9kKGZsb2F0IF9feCwgZmxvYXQg
X195KSB7IHJldHVybiA6OmZtb2RmKF9feCwgX195KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBk
b3VibGUKICBmbW9kKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJldHVybiA6
OmZtb2RsKF9feCwgX195KTsgfQoKCgoKCgogIHVzaW5nIDo6ZnJleHA7CgoKICBpbmxpbmUgZmxv
YXQKICBmcmV4cChmbG9hdCBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHBmKF9feCwg
X19leHApOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZnJleHAobG9uZyBkb3VibGUg
X194LCBpbnQqIF9fZXhwKSB7IHJldHVybiA6OmZyZXhwbChfX3gsIF9fZXhwKTsgfQoKCgoKCgog
IHVzaW5nIDo6bGRleHA7CgoKICBpbmxpbmUgZmxvYXQKICBsZGV4cChmbG9hdCBfX3gsIGludCBf
X2V4cCkgeyByZXR1cm4gOjpsZGV4cGYoX194LCBfX2V4cCk7IH0KCgoKCgoKCiAgaW5saW5lIGxv
bmcgZG91YmxlCiAgbGRleHAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHApIHsgcmV0dXJuIDo6
bGRleHBsKF9feCwgX19leHApOyB9CgoKCgoKCiAgdXNpbmcgOjpsb2c7CgoKICBpbmxpbmUgZmxv
YXQKICBsb2coZmxvYXQgX194KSB7IHJldHVybiA6OmxvZ2YoX194KTsgfQoKCgoKCgogIGlubGlu
ZSBsb25nIGRvdWJsZQogIGxvZyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nbChfX3gp
OyB9CgoKCgoKICB1c2luZyA6OmxvZzEwOwoKCiAgaW5saW5lIGZsb2F0CiAgbG9nMTAoZmxvYXQg
X194KSB7IHJldHVybiA6OmxvZzEwZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91Ymxl
CiAgbG9nMTAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmxvZzEwbChfX3gpOyB9CgoKCgoK
ICB1c2luZyA6Om1vZGY7CgoKICBpbmxpbmUgZmxvYXQKICBtb2RmKGZsb2F0IF9feCwgZmxvYXQq
IF9faXB0cikgeyByZXR1cm4gOjptb2RmZihfX3gsIF9faXB0cik7IH0KIyAzODIgIi91c3IvaW5j
bHVkZS9nKysvY21hdGgiIDMKICBpbmxpbmUgbG9uZyBkb3VibGUKICBtb2RmKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUqIF9faXB0cikgeyByZXR1cm4gOjptb2RmbChfX3gsIF9faXB0cik7
IH0KIyAzOTUgIi91c3IvaW5jbHVkZS9nKysvY21hdGgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICBpbmxpbmUgX1RwCiAgICBfX3Bvd19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikKICAg
IHsKICAgICAgcmV0dXJuIF9fbiA8IDAKICAgICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9f
eCwgLV9fbikKICAgICAgICA6IF9fY21hdGhfcG93ZXIoX194LCBfX24pOwogICAgfQoKICB1c2lu
ZyA6OnBvdzsKCgogIGlubGluZSBmbG9hdAogIHBvdyhmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyBy
ZXR1cm4gOjpwb3dmKF9feCwgX195KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBw
b3cobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6cG93bChfX3gs
IF9feSk7IH0KCgoKCgoKICBpbmxpbmUgZG91YmxlCiAgcG93KGRvdWJsZSBfX3gsIGludCBfX2kp
CiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19pKTsgfQoKICBpbmxpbmUgZmxvYXQKICBw
b3coZmxvYXQgX194LCBpbnQgX19uKQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7
IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgcG93KGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikK
ICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX24pOyB9CgogIHVzaW5nIDo6c2luOwoKICBp
bmxpbmUgZmxvYXQKICBzaW4oZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5mKF9f
eCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc2luKGxvbmcgZG91YmxlIF9feCkKICB7IHJl
dHVybiBfX2J1aWx0aW5fc2lubChfX3gpOyB9CgogIHVzaW5nIDo6c2luaDsKCgogIGlubGluZSBm
bG9hdAogIHNpbmgoZmxvYXQgX194KSB7IHJldHVybiA6OnNpbmhmKF9feCk7IH0KCgoKCgoKICBp
bmxpbmUgbG9uZyBkb3VibGUKICBzaW5oKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpzaW5o
bChfX3gpOyB9CgoKCgoKICB1c2luZyA6OnNxcnQ7CgogIGlubGluZSBmbG9hdAogIHNxcnQoZmxv
YXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0ZihfX3gpOyB9CgogIGlubGluZSBsb25n
IGRvdWJsZQogIHNxcnQobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0
bChfX3gpOyB9CgogIHVzaW5nIDo6dGFuOwoKCiAgaW5saW5lIGZsb2F0CiAgdGFuKGZsb2F0IF9f
eCkgeyByZXR1cm4gOjp0YW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0
YW4obG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcg
Ojp0YW5oOwoKCiAgaW5saW5lIGZsb2F0CiAgdGFuaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFu
aGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHRhbmgobG9uZyBkb3VibGUg
X194KSB7IHJldHVybiA6OnRhbmhsKF9feCk7IH0KCgoKCn0KCgoKCgoKbmFtZXNwYWNlIF9fZ251
X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfZnBj
bGFzc2lmeShfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQp
ID8gX19mcGNsYXNzaWZ5ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkg
PyBfX2ZwY2xhc3NpZnkgKF9fZikgOiBfX2ZwY2xhc3NpZnlsIChfX2YpKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2Zpbml0ZShfVHAgX19mKSB7
IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19maW5pdGVmIChfX2Yp
IDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZmluaXRlIChfX2YpIDogX19m
aW5pdGVsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9f
Y2FwdHVyZV9pc2luZihfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAo
ZmxvYXQpID8gX19pc2luZmYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUp
ID8gX19pc2luZiAoX19mKSA6IF9faXNpbmZsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25hbihfVHAgX19mKSB7IHJldHVybiAoc2l6
ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19pc25hbmYgKF9fZikgOiBzaXplb2YgKF9f
ZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc25hbiAoX19mKSA6IF9faXNuYW5sIChfX2YpKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25vcm1h
bChfVHAgX19mKSB7IHJldHVybiAoKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9f
ZnBjbGFzc2lmeWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19m
cGNsYXNzaWZ5IChfX2YpIDogX19mcGNsYXNzaWZ5bCAoX19mKSkgPT0gRlBfTk9STUFMKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9zaWduYml0KF9U
cCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX3NpZ25i
aXRmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fc2lnbmJpdCAo
X19mKSA6IF9fc2lnbmJpdGwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg
IGludAogICAgX19jYXB0dXJlX2lzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJl
dHVybiBfX2J1aWx0aW5faXNncmVhdGVyIChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzZ3JlYXRlcmVxdWFsKF9UcCBfX2Yx
LCBfVHAgX19mMikKICAgICB7IHJldHVybiBfX2J1aWx0aW5faXNncmVhdGVyZXF1YWwgKF9fZjEs
IF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1
cmVfaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gX19idWlsdGluX2lzbGVzcyAo
X19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9f
Y2FwdHVyZV9pc2xlc3NlcXVhbChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gX19i
dWlsdGluX2lzbGVzc2VxdWFsIChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBf
X2YyKQogICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2xlc3NncmVhdGVyIChfX2YxLCBfX2YyKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzdW5v
cmRlcmVkKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVybiBfX2J1aWx0aW5faXN1bm9y
ZGVyZWQgKF9fZjEsIF9fZjIpOyB9Cn0KIyA1ODcgIi91c3IvaW5jbHVkZS9nKysvY21hdGgiIDMK
bmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAg
ICBmcGNsYXNzaWZ5KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9mcGNsYXNzaWZ5KF9fZik7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2Zpbml0ZShfVHAgX19m
KSB7IHJldHVybiBfX2NhcHR1cmVfaXNmaW5pdGUoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBpbnQKICAgIGlzaW5mKF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2lu
ZihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNuYW4oX1Rw
IF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbmFuKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW50CiAgICBpc25vcm1hbChfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVf
aXNub3JtYWwoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIHNp
Z25iaXQoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX3NpZ25iaXQoX19mKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9f
ZjIpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2dyZWF0ZXIoX19mMSwgX19mMik7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXJlcXVhbChfVHAgX19mMSwgX1Rw
IF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXNncmVhdGVyZXF1YWwoX19mMSwgX19mMik7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2xlc3MoX1RwIF9fZjEs
IF9UcCBfX2YyKSB7IHJldHVybiBfX2NhcHR1cmVfaXNsZXNzKF9fZjEsIF9fZjIpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzZXF1YWwoX1RwIF9fZjEsIF9U
cCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9fZjEsIF9fZjIpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzZ3JlYXRlcihfVHAg
X19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXNsZXNzZ3JlYXRlcihfX2Yx
LCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzdW5vcmRl
cmVkKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVyZV9pc3Vub3JkZXJl
ZChfX2YxLCBfX2YyKTsgfQp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OmZw
Y2xhc3NpZnk7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2Zpbml0ZTsKICB1c2luZyBfX2dudV9jeHg6
OmlzaW5mOwogIHVzaW5nIF9fZ251X2N4eDo6aXNuYW47CiAgdXNpbmcgX19nbnVfY3h4Ojppc25v
cm1hbDsKICB1c2luZyBfX2dudV9jeHg6OnNpZ25iaXQ7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2dy
ZWF0ZXI7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2dyZWF0ZXJlcXVhbDsKICB1c2luZyBfX2dudV9j
eHg6OmlzbGVzczsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzc2VxdWFsOwogIHVzaW5nIF9fZ251
X2N4eDo6aXNsZXNzZ3JlYXRlcjsKICB1c2luZyBfX2dudV9jeHg6OmlzdW5vcmRlcmVkOwp9CgoK
CgojIDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9jbWF0aC50Y2MiIDEgMwojIDM1ICIvdXNyL2lu
Y2x1ZGUvZysrL2JpdHMvY21hdGgudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIF9UcAogICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1bnNpZ25lZCBp
bnQgX19uKQogICAgewogICAgICBfVHAgX195ID0gX19uICUgMiA/IF9feCA6IDE7CgogICAgICB3
aGlsZSAoX19uID4+PSAxKQogICAgICAgIHsKICAgICAgICAgIF9feCA9IF9feCAqIF9feDsKICAg
ICAgICAgIGlmIChfX24gJSAyKQogICAgICAgICAgICBfX3kgPSBfX3kgKiBfX3g7CiAgICAgICAg
fQoKICAgICAgcmV0dXJuIF9feTsKICAgIH0KfQojIDY2MiAiL3Vzci9pbmNsdWRlL2crKy9jbWF0
aCIgMiAzCiMgNDIgIi91c3IvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAz
CgojIDEgIi91c3IvaW5jbHVkZS9nKysvbGltaXRzIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2cr
Ky9saW1pdHMiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9pNDg2LXN1c2UtbGludXgvYml0cy9j
cHVfbGltaXRzLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvZysrL2xpbWl0cyIgMiAzCiMgODg3
ICIvdXNyL2luY2x1ZGUvZysrL2xpbWl0cyIgMwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIGZsb2F0
X3JvdW5kX3N0eWxlCiAgewogICAgcm91bmRfaW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgcm91bmRf
dG93YXJkX3plcm8gPSAwLAogICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICByb3VuZF90b3dh
cmRfaW5maW5pdHkgPSAyLAogICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICB9OwoK
ICBlbnVtIGZsb2F0X2Rlbm9ybV9zdHlsZQogIHsKICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0g
LTEsCiAgICBkZW5vcm1fYWJzZW50ID0gMCwKICAgIGRlbm9ybV9wcmVzZW50ID0gMQogIH07CgoK
CgogIHN0cnVjdCBfX251bWVyaWNfbGltaXRzX2Jhc2UKICB7CiAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zcGVjaWFsaXplZCA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g
MDsKICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0g
ZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgc3RhdGlj
IGNvbnN0IGludCByYWRpeCA9IDA7CgogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg
PSAwOwogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudDEwID0gMDsKCiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsK
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxv
YXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaWVjNTU5ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFs
c2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf
YmVmb3JlID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf
c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHMgOiBwdWJsaWMgX19udW1lcmljX2xpbWl0c19iYXNl
CiAgICB7CiAgICAgIHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHJvdW5kX2Vycm9y
KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBf
VHAgaW5maW5pdHkoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAg
ICAgc3RhdGljIF9UcCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9U
cD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21pbigpIHRo
cm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0
ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJvb2wgbWluKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGJvb2wgbWF4KCkg
dGhyb3coKQogICAgICB7IHJldHVybiB0cnVlOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0cyA9IDE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBib29sIGVw
c2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29s
IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
YWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUg
aGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k
ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHF1aWV0X05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5n
X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wg
ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFs
c2U7CgoKCgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWUKICAgICAgICAgICAg
ICAgfHwgdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJv
dW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJp
Y19saW1pdHM8Y2hhcj4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6
ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAoY2hhcikoLTEyNyAtIDEpOyB9CiAgICAgIHN0YXRpYyBjaGFyIG1heCgpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gKGNoYXIpMTI3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9
IDc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA3OwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl
Z2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIHJvdW5k
X2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KCiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k
ZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt
X2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgc2lnbmFsaW5nX05h
TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIGRl
bm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy
bzsKICAgIH07CiMgMTA3MSAiL3Vzci9pbmNsdWRlL2crKy9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+
CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBzaWduZWQg
Y2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtMTI3IC0gMSk7IH0KICAgICAgc3Rh
dGljIHNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzMTAgPSAyOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsK
ICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IDA7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4
cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0
aWMgc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFO
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0K
ICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVk
IGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2ln
bmVkIGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy
b3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTEyOCAiL3Vzci9pbmNsdWRlL2crKy9saW1pdHMi
IDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4K
ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAg
ICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9
CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4g
KDEyNyAqIDIgKyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA4OwogICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBlcHNpbG9u
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFy
IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4
cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGlu
Z19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNf
ZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y
bV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmZpbml0eSgpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAg
ICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQg
Y2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBkZW5vcm1fbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3pl
cm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx3
Y2hhcl90PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy
dWU7CgogICAgICBzdGF0aWMgd2NoYXJfdCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICh3
Y2hhcl90KSgtMjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBtYXgoKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuICh3Y2hhcl90KTIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0
aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEw
ID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg
IHN0YXRpYyB3Y2hhcl90IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAg
ICAgc3RhdGljIHdjaGFyX3Qgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IGlu
ZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAgc3RhdGlj
IHdjaGFyX3QgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0K
ICAgICAgc3RhdGljIHdjaGFyX3Qgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IGRlbm9ybV9taW4oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz
c19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv
dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEyNDEgIi91c3IvaW5jbHVk
ZS9nKysvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNo
b3J0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7
CgogICAgICBzdGF0aWMgc2hvcnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTMyNzY3
IC0gMSk7IH0KICAgICAgc3RhdGljIHNob3J0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MzI3Njc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTU7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWdu
ZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9
IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBz
dGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0K
ICAgICAgc3RhdGljIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hv
cnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgZGVub3JtX21pbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNz
X2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91
bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTI5OCAiL3Vzci9pbmNsdWRl
L2crKy9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5z
aWduZWQgc2hvcnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVk
ID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gKDMyNzY3ICogMiArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0cyA9IDE2OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5z
aWduZWQgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz
dGF0aWMgdW5zaWduZWQgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9
IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxv
YXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsg
fQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRp
YyB1bnNpZ25lZCBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz
c19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv
dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4K
ICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBpbnQgbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAoaW50KSgtMjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMg
aW50IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGludCkyMTQ3NDgzNjQ3TDsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy
OwogICAgICBzdGF0aWMgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0K
ICAgICAgc3RhdGljIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k
ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGludCBpbmZpbml0
eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBz
dGF0aWMgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBkZW5vcm1f
bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxv
ID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAg
fTsKIyAxNDEwICIvdXNyL2luY2x1ZGUvZysrL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0
cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg
bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaW50IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKHVuc2lnbmVkKSgyMTQ3NDgzNjQ3
TCAqIDJVICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZXBzaWxvbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHJv
dW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x
dWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O
YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu
b3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s
b3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGluZmluaXR5KCkgdGhyb3co
KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2ln
bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGRlbm9ybV9taW4oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0
cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs
b2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoK
CgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nPgogICAgewog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0
aWMgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtMjE0NzQ4MzY0N0wgLSAxKTsg
fQogICAgICBzdGF0aWMgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIxNDc0ODM2
NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw
b25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRp
YyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25n
PigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIHNpZ25hbGluZ19O
YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAg
IHN0YXRpYyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy
YXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJv
dW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNTIyICIvdXNyL2luY2x1ZGUvZysrL2xpbWl0cyIg
MwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nPgog
ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg
ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0K
ICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAo
MjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9
IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu
dGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9u
ZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNp
Z25lZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu
dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9z
dHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmZp
bml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4o
MCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMg
dW5zaWduZWQgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBk
ZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90
b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNf
bGltaXRzPGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh
bGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuICgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMIC0gMSk7IH0KICAgICAgc3RhdGljIGxv
bmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDkyMjMzNzIwMzY4NTQ3NzU4MDdM
TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2MzsKICAgICAgc3RhdGljIGNv
bnN0IGludCBkaWdpdHMxMCA9IDE4OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p
dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz
ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg
ICAgIHN0YXRpYyBsb25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBxdWlldF9O
YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0K
ICAgICAgc3RhdGljIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcg
ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25n
PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh
cmRfemVybzsKICAgIH07CiMgMTYzNCAiL3Vzci9pbmNsdWRlL2crKy9saW1pdHMiIDMKICB0ZW1w
bGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZyBsb25nPgogICAg
ewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBz
dGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg
fQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gKDkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAqIDJVTEwgKyAxKTsgfQoKICAgICAgc3RhdGlj
IGNvbnN0IGludCBkaWdpdHMgPSA2NDsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9
IDE5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg
IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhy
b3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmlu
aXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fi
c2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7Cgog
ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRp
YyB1bnNpZ25lZCBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9u
ZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1
OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZv
cmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0
eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0
cnVjdCBudW1lcmljX2xpbWl0czxmbG9hdD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGZsb2F0IG1pbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMS4xNzU0OTQzNWUtMzhGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBtYXgo
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMuNDAyODIzNDdlKzM4RjsgfQoKICAgICAgc3RhdGlj
IGNvbnN0IGludCBkaWdpdHMgPSAyNDsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9
IDY7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg
IHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjE5MjA5Mjkw
ZS0wN0Y7IH0KICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAxLjBGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0x
MjU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzc7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTI4OwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudDEwID0gMzg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p
dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz
ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg
ICAgIHN0YXRpYyBmbG9hdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsg
fQogICAgICBzdGF0aWMgZmxvYXQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw
LjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBkZW5vcm1fbWluKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAwLjBGOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm
b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z
dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNzY1ICIvdXNyL2luY2x1ZGUvZysr
L2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+
CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAg
ICAgIHN0YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAyLjIyNTA3Mzg1
ODUwNzIwMTRlLTMwODsgfQogICAgICBzdGF0aWMgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gNTM7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxNTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFj
dCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGlj
IGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAyLjIyMDQ0NjA0OTI1MDMx
MzFlLTE2OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDEuMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAt
MTAyMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zMDc7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTAyNDsKICAgICAgc3RhdGljIGNvbnN0
IGludCBtYXhfZXhwb25lbnQxMCA9IDMwODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p
bmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9CiAgICAg
ICAgICAgICAgZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y
bV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgZG91YmxlIGluZmluaXR5KCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91YmxlIHNpZ25hbGluZ19O
YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91YmxlIGRl
bm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jv
dW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsK
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
cm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPQogICAgICAgICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJv
OwogICAgfTsKIyAxODQ0ICIvdXNyL2luY2x1ZGUvZysrL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4K
ICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT4KICAgIHsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgZG91
YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMy4zNjIxMDMxNDMxMTIwOTM1MDYyNmUt
NDkzMkw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMS4xODk3MzE0OTUzNTcyMzE3NjUwMmUrNDkzMkw7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzID0gNjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19l
eGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3Rh
dGljIGxvbmcgZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMDg0MjAy
MTcyNDg1NTA0NDM0MDFlLTE5TDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcm91bmRfZXJy
b3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50ID0gLTE2MzgxOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudDEwID0gLTQ5MzE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTYz
ODQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSA0OTMyOwoKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3NpZ25hbGluZ19OYU4gPQogICAgICAgICAgICAgICAgZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9CiAgICAgICAgICAgICAgICBkZW5vcm1f
YWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPQogICAgICAg
ICAgICAgICAgZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgaW5maW5pdHkoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHF1aWV0
X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBk
b3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAg
ICBzdGF0aWMgbG9uZyBkb3VibGUgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MC4wTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPQogICAgICAg
IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxOTI0ICIvdXNyL2luY2x1ZGUvZysrL2xpbWl0
cyIgMwp9CiMgNDQgIi91c3IvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAz
CgojIDEgIi91c3IvaW5jbHVkZS9nKysvdHlwZWluZm8iIDEgMwojIDQwICIvdXNyL2luY2x1ZGUv
ZysrL3R5cGVpbmZvIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2UgX19jeHhhYml2MQp7CiAg
Y2xhc3MgX19jbGFzc190eXBlX2luZm87Cn0KIyA1NSAiL3Vzci9pbmNsdWRlL2crKy90eXBlaW5m
byIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKICBjbGFzcyB0eXBlX2luZm8KICB7CiAgcHVibGljOgoK
CgoKICAgIHZpcnR1YWwgfnR5cGVfaW5mbygpOwoKICBwcml2YXRlOgoKICAgIHR5cGVfaW5mbyYg
b3BlcmF0b3I9KGNvbnN0IHR5cGVfaW5mbyYpOwogICAgdHlwZV9pbmZvKGNvbnN0IHR5cGVfaW5m
byYpOwoKICBwcm90ZWN0ZWQ6CiAgICBjb25zdCBjaGFyICpfX25hbWU7CgogIHByb3RlY3RlZDoK
ICAgIGV4cGxpY2l0IHR5cGVfaW5mbyhjb25zdCBjaGFyICpfX24pOiBfX25hbWUoX19uKSB7IH0K
CiAgcHVibGljOgoKCgogICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0CiAgICB7IHJldHVybiBf
X25hbWU7IH0KIyA5OCAiL3Vzci9pbmNsdWRlL2crKy90eXBlaW5mbyIgMwogICAgYm9vbCBiZWZv
cmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA8IF9f
YXJnLl9fbmFtZTsgfQogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcp
IGNvbnN0CiAgICB7IHJldHVybiBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9CgogICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiAhb3Bl
cmF0b3I9PShfX2FyZyk7IH0KCgogIHB1YmxpYzoKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19wb2lu
dGVyX3AoKSBjb25zdDsKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19mdW5jdGlvbl9wKCkgY29uc3Q7
CgoKCgoKCgogICAgdmlydHVhbCBib29sIF9fZG9fY2F0Y2goY29uc3QgdHlwZV9pbmZvICpfX3Ro
cl90eXBlLCB2b2lkICoqX190aHJfb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgX19vdXRlcikgY29uc3Q7CgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX3VwY2FzdChjb25z
dCBfX2N4eGFiaXYxOjpfX2NsYXNzX3R5cGVfaW5mbyAqX190YXJnZXQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqKl9fb2JqX3B0cikgY29uc3Q7CiAgfTsKCgoKICBjbGFzcyBi
YWRfY2FzdCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2Nhc3QoKSB0
aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfY2FzdCgpIHRocm93KCk7CiAgfTsKCgogIGNs
YXNzIGJhZF90eXBlaWQgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF90
eXBlaWQgKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX3R5cGVpZCgpIHRocm93KCk7
CiAgfTsKfQoKfQojIDQ2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2Mi
IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9j
YWxlCiAgICBsb2NhbGU6OmNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdAogICAg
ewogICAgICBfSW1wbCogX190bXAgPSBuZXcgX0ltcGwoKl9NX2ltcGwsIDEpOwogICAgICBfX3Rt
cC0+X01fcmVwbGFjZV9mYWNldChfX290aGVyLl9NX2ltcGwsICZfRmFjZXQ6OmlkKTsKICAgICAg
cmV0dXJuIGxvY2FsZShfX3RtcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYm9vbAogICAgbG9jYWxlOjpv
cGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
czEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19zMikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBzdGQ6OmNvbGxh
dGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsKICAgICAgY29uc3QgX19jb2xsYXRlX3R5cGUmIF9f
Y29sbGF0ZSA9IHVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOwogICAgICByZXR1cm4g
KF9fY29sbGF0ZS5jb21wYXJlKF9fczEuZGF0YSgpLCBfX3MxLmRhdGEoKSArIF9fczEubGVuZ3Ro
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zMi5kYXRhKCksIF9fczIuZGF0
YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zh
Y2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2Mp
CiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2lkKCk7CiAgICAgIGxvY2Fs
ZTo6ZmFjZXQqKiBfX2ZhY2V0cyA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsKICAgICAgaWYg
KCEoX19pIDwgX19sb2MuX01faW1wbC0+X01fZmFjZXRzX3NpemUgJiYgX19mYWNldHNbX19pXSkp
CiAgICAgICAgX190aHJvd19iYWRfY2FzdCgpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgX0ZhY2V0Jj4oKl9fZmFjZXRzW19faV0pOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
RmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3co
KQogICAgewogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOwogICAgICBsb2Nh
bGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIHJl
dHVybiAoX19pIDwgX19sb2MuX01faW1wbC0+X01fZmFjZXRzX3NpemUgJiYgX19mYWNldHNbX19p
XSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
PgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJh
Y3RfZmxvYXQoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3h0
cmMpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7
CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0No
YXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9m
YWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBf
X3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVz
ID0gX19jdHlwZS53aWRlbignLScpOwogICAgICBpbnQgX19wb3MgPSAwOwogICAgICBjaGFyX3R5
cGUgX19jID0gKl9fYmVnOwogICAgICBpZiAoKF9fYyA9PSBfX3BsdXMgfHwgX19jID09IF9fbWlu
dXMpICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfX2N0
eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICArK19fcG9zOwogICAgICAgICAgX19j
ID0gKigrK19fYmVnKTsKICAgICAgICB9CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9femVybyA9
IF9fY3R5cGUud2lkZW4oX1NfYXRvbXNbX01femVyb10pOwogICAgICBib29sIF9fZm91bmRfemVy
byA9IGZhbHNlOwogICAgICB3aGlsZSAoX19jID09IF9femVybyAmJiBfX2JlZyAhPSBfX2VuZCkK
ICAgICAgICB7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgX19mb3VuZF96
ZXJvID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIGlmIChfX2ZvdW5kX3plcm8pCiAgICAgICAgewog
ICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwogICAgICAgICAgKytfX3BvczsK
ICAgICAgICB9CgoKICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX01fRSAtIF9NX3plcm8gKyAx
OwogICAgICBjaGFyX3R5cGUgX193YXRvbXNbX19sZW5dOwogICAgICBfX2N0eXBlLndpZGVuKF9T
X2F0b21zLCBfU19hdG9tcyArIF9fbGVuLCBfX3dhdG9tcyk7CiAgICAgIGJvb2wgX19mb3VuZF9k
ZWMgPSBmYWxzZTsKICAgICAgYm9vbCBfX2ZvdW5kX3NjaSA9IGZhbHNlOwogICAgICBjb25zdCBj
aGFyX3R5cGUgX19kZWMgPSBfX25wLmRlY2ltYWxfcG9pbnQoKTsKCiAgICAgIHN0cmluZyBfX2Zv
dW5kX2dyb3VwaW5nOwogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBp
bmcoKTsKICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5nID0gX19ncm91cGluZy5zaXplKCk7CiAg
ICAgIGludCBfX3NlcF9wb3MgPSAwOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX25w
LnRob3VzYW5kc19zZXAoKTsKCiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7
CgogICAgICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAg
ICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193YXRv
bXMsIDEwLCBfX2MpOwoKCiAgICAgICAgICBpZiAoX19wICYmIF9fYykKICAgICAgICAgICAgewoK
ICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tf
X3AgLSBfX3dhdG9tc107CiAgICAgICAgICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAg
X19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19jID09
IF9fc2VwICYmIF9fY2hlY2tfZ3JvdXBpbmcgJiYgIV9fZm91bmRfZGVjKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICBpZiAoX19zZXBfcG9zKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bv
cyk7CiAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgIF9f
YyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp
dDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0KICAgICAgICAgIGVsc2UgaWYgKF9fYyA9PSBfX2RlYyAmJiAhX19mb3VuZF9kZWMpCiAgICAg
ICAgICAgIHsKCgoKICAgICAgICAgICAgICBpZiAoX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAg
ICAgICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2Vw
X3Bvcyk7CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gJy4n
OwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgX19mb3VuZF9k
ZWMgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmICgoX19jID09IF9fd2F0
b21zW19NX2VdIHx8IF9fYyA9PSBfX3dhdG9tc1tfTV9FXSkKICAgICAgICAgICAgICAgICAgICYm
ICFfX2ZvdW5kX3NjaSAmJiBfX3BvcykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICArK19f
cG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7
CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKCgogICAgICAgICAgICAgIGlmIChfX2Mg
PT0gX19wbHVzIHx8IF9fYyA9PSBfX21pbnVzKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJy
b3coX19jLCBjaGFyKCkpOwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fZm91bmRfc2NpID0gdHJ1ZTsKICAgICAgICAg
ICAgfQogICAgICAgICAgZWxzZQoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKCgogICAg
ICBpZiAoX19jaGVja19ncm91cGluZyAmJiBfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAg
ICB7CgogICAgICAgICAgaWYgKCFfX2ZvdW5kX2RlYykKICAgICAgICAgICAgX19mb3VuZF9ncm91
cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3Zl
cmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAg
X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBj
aGFyKCk7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFz
ZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy
VCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9pbnQoX0luSXRlciBfX2JlZywgX0luSXRlciBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHN0cmluZyYgX194dHJjLCBpbnQmIF9fYmFzZSkgY29uc3QKICAgIHsKICAgICAg
Y29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0No
YXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBj
b25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4g
PihfX2xvYyk7CgoKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5m
bGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlv
c19iYXNlOjpvY3QpCiAgICAgICAgX19iYXNlID0gODsKICAgICAgZWxzZSBpZiAoX19iYXNlZmll
bGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAgICBfX2Jhc2UgPSAxNjsKICAgICAgZWxzZQogICAg
ICAgIF9fYmFzZSA9IDEwOwoKCiAgICAgIGludCBfX3BvcyA9IDA7CiAgICAgIGNoYXJfdHlwZSBf
X2MgPSAqX19iZWc7CiAgICAgIGlmICgoX19jID09IF9fY3R5cGUud2lkZW4oJysnKSB8fCBfX2Mg
PT0gX19jdHlwZS53aWRlbignLScpKQogICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAg
ICAgewogICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAg
ICAgICAgICsrX19wb3M7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgIH0KCgog
ICAgICBjb25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9tc1tfTV96
ZXJvXSk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3ggPSBfX2N0eXBlLndpZGVuKCd4Jyk7CiAg
ICAgIGNvbnN0IGNoYXJfdHlwZSBfX1ggPSBfX2N0eXBlLndpZGVuKCdYJyk7CiAgICAgIGlmIChf
X2Jhc2UgPT0gMTApCiAgICAgICAgewogICAgICAgICAgYm9vbCBfX2ZvdW5kX3plcm8gPSBmYWxz
ZTsKICAgICAgICAgIHdoaWxlIChfX2MgPT0gX196ZXJvICYmIF9fYmVnICE9IF9fZW5kKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBf
X2ZvdW5kX3plcm8gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19mb3VuZF96
ZXJvKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3pl
cm9dOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgaWYgKF9fYmFzZWZpZWxk
ID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmICgoX19jID09IF9f
eCB8fCBfX2MgPT0gX19YKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFy
KCkpOwogICAgICAgICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAgICAg
IF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgICBfX2Jhc2UgPSAxNjsKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICBfX2Jhc2UgPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICBlbHNlIGlmIChfX2Jhc2UgPT0gMTYpCiAgICAgICAgewogICAgICAgICAgaWYgKF9f
YyA9PSBfX3plcm8gJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICAgICAgKytfX3BvczsKICAg
ICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGlmICgoX19jID09IF9f
eCB8fCBfX2MgPT0gX19YKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAg
ICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVn
KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCgoKICAgICAgc2l6
ZV90IF9fbGVuOwogICAgICBpZiAoX19iYXNlID09IDE2KQogICAgICAgIF9fbGVuID0gX01fc2l6
ZTsKICAgICAgZWxzZQogICAgICAgIF9fbGVuID0gX19iYXNlOwoKCiAgICAgIGNoYXJfdHlwZSBf
X3dhdG9tc1tfTV9zaXplXTsKICAgICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1NfYXRvbXMg
KyBfX2xlbiwgX193YXRvbXMpOwogICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGluZzsKICAgICAg
Y29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGJvb2wgX19j
aGVja19ncm91cGluZyA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBpbnQgX19zZXBfcG9zID0g
MDsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19ucC50aG91c2FuZHNfc2VwKCk7CiAg
ICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIGNo
YXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlw
ZSogX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9tcywgX19sZW4sIF9fYyk7CgoKICAg
ICAgICAgIGlmIChfX3AgJiYgX19jKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9feHRy
YyArPSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107CiAgICAgICAgICAgICAgKytfX3BvczsKICAg
ICAgICAgICAgICArK19fc2VwX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwog
ICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19zZXAgJiYgX19jaGVja19n
cm91cGluZykKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgaWYgKF9fc2VwX3BvcykKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0
aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAw
OwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19l
cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCgogICAgICAgICAgICBicmVh
azsKICAgICAgICB9CgoKCiAgICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3Jv
dXBpbmcuc2l6ZSgpKQogICAgICAgIHsKCiAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0
YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICBpZiAoIV9fdmVyaWZ5X2dyb3Vw
aW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRfZ3JvdXBpbmcpKQogICAgICAgICAgICBfX2VyciB8PSBp
b3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgX194dHJjICs9IGNoYXIoKTsKICAg
ICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7
CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl
cj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz
ZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikg
Y29uc3QKICAgIHsKCiAgICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxw
aGEpKQogICAgICAgIHsKCgogICAgICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgICAgIGludCBf
X2Jhc2U7CiAgICAgICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19p
bywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdWw7
CiAgICAgICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9T
X2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFp
bGJpdCkgJiYgX191bCA8PSAxKQogICAgICAgICAgICBfX3YgPSBfX3VsOwogICAgICAgICAgZWxz
ZQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAg
ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4g
X19zdHJpbmdfdHlwZTsKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAg
ICAgICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0
PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlIF9fdHJ1ZSA9
IF9fbnAudHJ1ZW5hbWUoKTsKICAgICAgICAgIGNvbnN0IF9fc3RyaW5nX3R5cGUgX19mYWxzZSA9
IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdHJ1ZXMgPSBf
X3RydWUuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19mYWxzZXMgPSBfX2Zh
bHNlLmNfc3RyKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190cnVlbiA9IF9fdHJ1ZS5zaXpl
KCkgLSAxOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZmFsc2VuID0gX19mYWxzZS5zaXplKCkg
LSAxOwoKICAgICAgICAgIGZvciAoc2l6ZV90IF9fbiA9IDA7IF9fYmVnICE9IF9fZW5kOyArK19f
bikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWcrKzsK
ICAgICAgICAgICAgICBib29sIF9fdGVzdGYgPSBfX24gPD0gX19mYWxzZW4gPyBfX2MgPT0gX19m
YWxzZXNbX19uXSA6IGZhbHNlOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0dCA9IF9fbiA8PSBf
X3RydWVuID8gX19jID09IF9fdHJ1ZXNbX19uXSA6IGZhbHNlOwogICAgICAgICAgICAgIGlmICgh
KF9fdGVzdGYgfHwgX190ZXN0dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3RmICYmIF9fbiA9PSBf
X2ZhbHNlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192ID0gMDsKICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxz
ZSBpZiAoX190ZXN0dCAmJiBfX24gPT0gX190cnVlbikKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgX192ID0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAg
ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgICB9CiAgICAgIHJldHVybiBf
X2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
cj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQo
aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192KSBjb25zdAogICAgewogICAg
ICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJh
Y3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAg
X19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBf
X2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBf
SW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWdu
ZWQgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50
IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAg
X19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwg
X19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAg
ICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+OjptYXgoKSkKICAgICAg
ICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX191bCk7CiAgICAgIGVsc2UKICAg
ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J
dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBf
X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdAogICAgewogICAgICBz
dHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3Rf
aW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgdW5z
aWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191
bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19i
YXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX191bCA8PSBudW1lcmljX2xpbWl0czx1bnNpZ25l
ZCBpbnQ+OjptYXgoKSkKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9f
dWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAg
IHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg
IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nJiBfX3Yp
IGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAg
IF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJj
LCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2Vy
ciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAg
IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp
dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0
cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcs
IF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9f
dihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAg
IHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg
IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcm
IF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsK
ICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf
X3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3Ys
IF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl
cgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19i
ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194
dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9m
bG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRf
dG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1
cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19n
ZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7
CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKICAgICAgX19i
ZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7
CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xv
Y2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9J
bkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRv
dWJsZSYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBfX3h0cmMu
cmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIo
KSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIK
ICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVn
LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QKICAgIHsKCiAgICAgIHR5cGVkZWYgaW9z
X2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOwogICAgICBmbXRmbGFncyBfX2ZtdCA9IF9faW8uZmxh
Z3MoKTsKICAgICAgZm10ZmxhZ3MgX19mbXRtYXNrID0gfihpb3NfYmFzZTo6c2hvd3BvcyB8IGlv
c19iYXNlOjpiYXNlZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvc19iYXNl
Ojp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOwogICAgICBfX2lvLmZsYWdzKF9fZm10
ICYgX19mbXRtYXNrIHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKCiAg
ICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0
cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwoKCiAg
ICAgIF9faW8uZmxhZ3MoX19mbXQpOwoKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBf
X2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBf
X2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKICAgICAgICBf
X3YgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CiMgNjA0
ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6
CiAgICAgIF9NX2NvbnZlcnRfZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0No
YXJUIF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUIF9f
dikgY29uc3QKICAgICAgewoKCiAgICAgICAgY29uc3QgaW50IF9fbWF4X2RpZ2l0cyA9IG51bWVy
aWNfbGltaXRzPF9WYWx1ZVQ+OjpkaWdpdHMxMCArIDE7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3By
ZWMgPSBfX2lvLnByZWNpc2lvbigpOwoKICAgICAgICBpZiAoX19wcmVjID4gc3RhdGljX2Nhc3Q8
c3RyZWFtc2l6ZT4oX19tYXhfZGlnaXRzKSkKICAgICAgICAgIF9fcHJlYyA9IHN0YXRpY19jYXN0
PHN0cmVhbXNpemU+KF9fbWF4X2RpZ2l0cyk7CgoKICAgICAgICBjaGFyIF9fZmJ1ZlsxNl07CgoK
ICAgICAgICBpbnQgX19sZW47CgoKCiAgICAgICAgaW50IF9fY3Nfc2l6ZSA9IF9fbWF4X2RpZ2l0
cyAqIDM7CiAgICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5f
YWxsb2NhKF9fY3Nfc2l6ZSkpOwoKICAgICAgICBjb25zdCBib29sIF9fZnAgPSBfU19mb3JtYXRf
ZmxvYXQoX19pbywgX19mYnVmLCBfX21vZCwgX19wcmVjKTsKICAgICAgICBpZiAoX19mcCkKICAg
ICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1Ziwg
X192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlLCBfX3By
ZWMpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2Nz
LCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LCBfU19jX2xvY2FsZSk7CgoKICAgICAgICBpZiAoX19s
ZW4gPj0gX19jc19zaXplKQogICAgICAgICAgewogICAgICAgICAgICBfX2NzX3NpemUgPSBfX2xl
biArIDE7CiAgICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2Fs
bG9jYShfX2NzX3NpemUpKTsKICAgICAgICAgICAgaWYgKF9fZnApCiAgICAgICAgICAgICAgX19s
ZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlLCBfX3ByZWMpOwog
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9f
Y3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9TX2NfbG9jYWxlKTsKICAgICAgICAgIH0KIyA2NjcgIi91c3IvaW5jbHVkZS9n
KysvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogICAgICAgIHJldHVybiBfTV93aWRlbl9mbG9h
dChfX3MsIF9faW8sIF9fZmlsbCwgX19jcywgX19sZW4pOwogICAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VmFsdWVUPgogICAgICBfT3V0SXRlcgogICAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoK
ICAgICAgX01fY29udmVydF9pbnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJU
IF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAgICAgICAgY2hhciBfX21vZGwsIF9W
YWx1ZVQgX192KSBjb25zdAogICAgICB7CgoKCiAgICAgICAgY2hhciBfX2ZidWZbMTZdOwogICAg
ICAgIF9TX2Zvcm1hdF9pbnQoX19pbywgX19mYnVmLCBfX21vZCwgX19tb2RsKTsKCgogICAgICAg
IGludCBfX2NzX3NpemUgPSA2NDsKICAgICAgICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hh
cio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgICAgaW50IF9fbGVuID0gX19j
b252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwoKICAgICAgICBpZiAoX19sZW4g
Pj0gX19jc19zaXplKQogICAgICAgICAgewogICAgICAgICAgICBfX2NzX3NpemUgPSBfX2xlbiAr
IDE7CiAgICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9j
YShfX2NzX3NpemUpKTsKICAgICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3Ms
IF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfU19jX2xvY2FsZSk7CiAgICAgICAgICB9CgoKCgoKCiAgICAgICAgcmV0dXJuIF9NX3dp
ZGVuX2ludChfX3MsIF9faW8sIF9fZmlsbCwgX19jcywgX19sZW4pOwogICAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg
bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV93aWRlbl9mbG9hdChfT3V0SXRlciBf
X3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAgICAg
ICAgICAgICAgaW50IF9fbGVuKSBjb25zdAogICAgewoKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xv
YyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1
c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX0NoYXJUKiBfX3dzID0gc3Rh
dGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19s
ZW4pKTsKCgogICAgICBfQ2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWls
dGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9fbGVuICogMikpOwogICAgICBfX2N0eXBl
LndpZGVuKF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CgoKICAgICAgY29uc3QgX0NoYXJUKiBf
X3A7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVu
Y3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgaWYgKF9fcCA9IGNoYXJfdHJhaXRzPF9DaGFyVD46
OmZpbmQoX193cywgX19sZW4sIF9fY3R5cGUud2lkZW4oJy4nKSkpCiAgICAgICAgX193c1tfX3Ag
LSBfX3dzXSA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOwoKCgoKICAgICAgY29uc3Qgc3RyaW5nIF9f
Z3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Jh
c2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChf
X2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hhclQqIF9fcDI7CiAgICAg
ICAgICBpbnQgX19kZWNsZW4gPSBfX3AgPyBfX3AgLSBfX3dzIDogX19sZW47CiAgICAgICAgICBf
X3AyID0gX19hZGRfZ3JvdXBpbmcoX193czIsIF9fbnAudGhvdXNhbmRzX3NlcCgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dzLCBfX3dzICsgX19kZWNsZW4p
OwogICAgICAgICAgaW50IF9fbmV3bGVuID0gX19wMiAtIF9fd3MyOwoKCiAgICAgICAgICBpZiAo
X19wKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90cmFpdHM8X0NoYXJUPjo6Y29w
eShfX3AyLCBfX3AsIF9fbGVuIC0gX19kZWNsZW4pOwogICAgICAgICAgICAgIF9fbmV3bGVuICs9
IF9fbGVuIC0gX19kZWNsZW47CiAgICAgICAgICAgIH0KCgogICAgICAgICAgX193cyA9IF9fd3My
OwogICAgICAgICAgX19sZW4gPSBfX25ld2xlbjsKICAgICAgICB9CgogICAgICByZXR1cm4gX01f
aW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX3dzLCBfX2xlbik7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVt
X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV93aWRlbl9pbnQoX091dEl0ZXIgX19zLCBp
b3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAg
ICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CgoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19p
by5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNl
dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2Fz
dDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbikpOwoK
CiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxs
b2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICogX19sZW4gKiAyKSk7CiAgICAgIF9fY3R5cGUud2lkZW4o
X19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsKCgogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+
JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0
IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBjb25zdCBpb3NfYmFz
ZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZp
ZWxkOwogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKCgogICAgICAgICAg
c3RyZWFtc2l6ZSBfX29mZiA9IDA7CiAgICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jh
c2U6OnNob3diYXNlKQogICAgICAgICAgICBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9j
dCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfX29mZiA9IDE7CiAgICAgICAgICAg
ICAgICAqX193czIgPSAqX193czsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYg
KF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpCiAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgX19vZmYgPSAyOwogICAgICAgICAgICAgICAgKl9fd3MyID0gKl9fd3M7CiAgICAgICAg
ICAgICAgICAqKF9fd3MyICsgMSkgPSAqKF9fd3MgKyAxKTsKICAgICAgICAgICAgICB9CiAgICAg
ICAgICBfQ2hhclQqIF9fcDsKICAgICAgICAgIF9fcCA9IF9fYWRkX2dyb3VwaW5nKF9fd3MyICsg
X19vZmYsIF9fbnAudGhvdXNhbmRzX3NlcCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19ncm91cGluZy5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19n
cm91cGluZy5jX3N0cigpICsgX19ncm91cGluZy5zaXplKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3dzICsgX19vZmYsIF9fd3MgKyBfX2xlbik7CiAgICAgICAgICBfX2xlbiA9
IF9fcCAtIF9fd3MyOwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAgIHJl
dHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fd3MsIF9fbGVuKTsKICAgIH0KCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0
ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgX01faW5zZXJ0KF9PdXRJdGVy
IF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNvbnN0IF9DaGFyVCogX193cywK
ICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CgogICAgICBzdHJlYW1zaXplIF9f
dyA9IF9faW8ud2lkdGgoKTsKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFy
VCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX3cpKTsKICAgICAgaWYg
KF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKICAgICAgICB7CiAgICAgICAg
ICBfX3BhZChfX2lvLCBfX2ZpbGwsIF9fd3MyLCBfX3dzLCBfX3csIF9fbGVuLCB0cnVlKTsKICAg
ICAgICAgIF9fbGVuID0gc3RhdGljX2Nhc3Q8aW50PihfX3cpOwoKICAgICAgICAgIF9fd3MgPSBf
X3dzMjsKICAgICAgICB9CiAgICAgIF9faW8ud2lkdGgoMCk7CgoKCiAgICAgIGZvciAoaW50IF9f
aiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fd3NbX19q
XTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0
ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBl
IF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBf
X2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9v
bGFscGhhKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9f
djsKICAgICAgICAgIF9fcyA9IF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScs
IGNoYXJfdHlwZSgpLCBfX3V2KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAg
ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CiAgICAgICAg
ICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICAgICAgY29uc3QgbnVtcHVuY3Q8
X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAg
ICAgICAgX19zdHJpbmdfdHlwZSBfX25hbWU7CiAgICAgICAgICBpZiAoX192KQogICAgICAgICAg
ICBfX25hbWUgPSBfX25wLnRydWVuYW1lKCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9f
bmFtZSA9IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgICAgICBfX3MgPSBfTV9pbnNlcnQoX19zLCBf
X2lvLCBfX2ZpbGwsIF9fbmFtZS5jX3N0cigpLCBfX25hbWUuc2l6ZSgpKTsKICAgICAgICB9CiAg
ICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6
CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2Zp
bGwsIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lv
LCBfX2ZpbGwsICdkJywgY2hhcl90eXBlKCksIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFy
VCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywg
Y2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAg
IHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScsIGNoYXJfdHlw
ZSgpLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ
dGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9f
cHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcg
bG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9fYiwgX19m
aWxsLCAnZCcsICdsJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46
OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19m
aWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVy
biBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCAnbCcsIF9fdik7IH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRl
cgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9f
cywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAg
ICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBjaGFyX3R5cGUo
KSwgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAg
ICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfZmxvYXQo
X19zLCBfX2lvLCBfX2ZpbGwsICdMJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBf
T3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFy
X3R5cGUgX19maWxsLAogICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgIHsKICAg
ICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7CiAgICAgIGlvc19i
YXNlOjpmbXRmbGFncyBfX2ZtdCA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFz
ZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBw
ZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZsYWdzICYg
X19mbXQgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwogICAgICB0cnkK
ICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmls
bCwgJ3UnLCBjaGFyX3R5cGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4oX192KSk7CiAgICAgICAgICBfX2lvLmZsYWdzKF9f
ZmxhZ3MpOwogICAgICAgIH0KICAgICAgY2F0Y2ggKC4uLikKICAgICAgICB7CiAgICAgICAgICBf
X2lvLmZsYWdzKF9fZmxhZ3MpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICByZXR1
cm4gX19zOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgX0luSXRlcgogICAgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9f
Z2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJs
ZSYgX191bml0cykgY29uc3QKICAgIHsKICAgICAgc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9f
YmVnID0gdGhpcy0+ZG9fZ2V0KF9fYmVnLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX19z
dHIpOwoKICAgICAgY29uc3QgaW50IF9fbiA9IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6
ZGlnaXRzMTA7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGlu
X2FsbG9jYShfX24pKTsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsK
ICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hh
clQ+ID4oX19sb2MpOwogICAgICBjb25zdCBfQ2hhclQqIF9fd2NzID0gX19zdHIuY19zdHIoKTsK
ICAgICAgX19jdHlwZS5uYXJyb3coX193Y3MsIF9fd2NzICsgX19zdHIuc2l6ZSgpICsgMSwgY2hh
cigpLCBfX2NzKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX19jcywgX191bml0cywgX19lcnIsIF9T
X2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0No
YXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l
bmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX3VuaXRzKSBjb25zdAogICAgewoKICAgICAgdHlw
ZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgdHJ1ZT4gX19tb25leV90cnVlOwogICAgICB0eXBlZGVm
IG1vbmV5cHVuY3Q8X0NoYXJULCBmYWxzZT4gX19tb25leV9mYWxzZTsKICAgICAgdHlwZWRlZiBt
b25leV9iYXNlOjpwYXJ0IHBhcnQ7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6
OnNpemVfdHlwZSBzaXplX3R5cGU7CgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdl
dGxvYygpOwogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0ID0gdXNlX2ZhY2V0PF9fbW9u
ZXlfdHJ1ZT4oX19sb2MpOwogICAgICBjb25zdCBfX21vbmV5X2ZhbHNlJiBfX21wZiA9IHVzZV9m
YWNldDxfX21vbmV5X2ZhbHNlPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9f
Y3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCiAgICAgIGNvbnN0IG1v
bmV5X2Jhc2U6OnBhdHRlcm4gX19wID0gX19pbnRsID8gX19tcHQubmVnX2Zvcm1hdCgpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVnX2Zvcm1h
dCgpOwoKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19wb3Nfc2lnbiA9X19pbnRsID8gX19tcHQu
cG9zaXRpdmVfc2lnbigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6IF9fbXBmLnBvc2l0aXZlX3NpZ24oKTsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19uZWdf
c2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLm5lZ2F0aXZlX3NpZ24oKTsKICAgICAgY29u
c3QgY2hhcl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZGVjaW1hbF9wb2ludCgpOwogICAg
ICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3Nl
cCgpOwoKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX2ludGwgPyBfX21wdC5ncm91
cGluZygpIDogX19tcGYuZ3JvdXBpbmcoKTsKCgogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247Cgog
ICAgICBzdHJpbmcgX19ncm91cGluZ190bXA7CgogICAgICBpbnQgX19zZXBfcG9zID0gMDsKCiAg
ICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwoKICAgICAgYm9vbCBfX3Rlc3RkZWNmb3VuZCA9
IGZhbHNlOwoKCiAgICAgIHN0cmluZ190eXBlIF9fdGVtcF91bml0czsKCiAgICAgIGNoYXJfdHlw
ZSBfX2MgPSAqX19iZWc7CiAgICAgIGNoYXJfdHlwZSBfX2VvZiA9IHN0YXRpY19jYXN0PGNoYXJf
dHlwZT4oY2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6ZW9mKCkpOwogICAgICBmb3IgKGludCBfX2kg
PSAwOyBfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCA0ICYmIF9fdGVzdHZhbGlkOyArK19faSkKICAg
ICAgICB7CiAgICAgICAgICBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmll
bGRbX19pXSk7CiAgICAgICAgICBzd2l0Y2ggKF9fd2hpY2gpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoKICAgICAgICAgICAgICAgICAg
aWYgKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZQogICAgICAgICAgICAgICAgICAg
ICAgfHwgX19pIDwgMiB8fCBfX3NpZ24uc2l6ZSgpID4gMQogICAgICAgICAgICAgICAgICAgICAg
fHwgKChzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRbM10pICE9IG1vbmV5X2Jhc2U6Om5vbmUp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgX19pID09IDIpKQogICAgICAgICAgICAgICAg
ICAgIHsKCgoKCgogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1i
b2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuY3Vycl9zeW1ib2woKTsK
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc3ltYm9sLnNpemUoKTsK
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2ogPSAwOwogICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgX19qIDwgX19sZW4gJiYgX19zeW1ib2xbX19qXSA9PSBfX2MpCiAgICAgICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICsrX19qOwogICAgICAgICAgICAgICAgICAgICAgICB9CgoK
ICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2ogIT0gX19sZW4gJiYgKF9faW8uZmxhZ3MoKSAm
IGlvc19iYXNlOjpzaG93YmFzZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZhbGlk
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCiAgICAgICAgICAgICAgICAg
IGlmIChfX3Bvc19zaWduLnNpemUoKSAmJiBfX25lZ19zaWduLnNpemUoKSkKICAgICAgICAgICAg
ICAgICAgewoKICAgICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fcG9zX3NpZ25bMF0pCiAg
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9f
cG9zX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19jID09IF9f
bmVnX3NpZ25bMF0pCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIF9fc2lnbiA9IF9fbmVnX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICoo
KytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX3Bvc19zaWduLnNpemUoKSAmJiBf
X2MgPT0gX19wb3Nfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICBfX3NpZ24gPSBfX3Bvc19zaWduOwogICAgICAgICAgICAgICAgICAgICAgX19jID0g
KigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKF9fbmVnX3NpZ24uc2l6ZSgpICYmIF9fYyA9PSBfX25lZ19zaWduWzBdKQogICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fbmVnX3NpZ247CiAg
ICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jh
c2U6OnZhbHVlOgoKCiAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9f
YykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoX19jID09IF9fZCAmJiAhX190ZXN0
ZGVjZm91bmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX19jID09IF9fc2VwKSkK
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9f
ZCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Z3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3Rlc3RkZWNmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKF9fYyA9PSBfX3NlcCkKICAgICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fZ3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9
IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX190ZW1wX3VuaXRzICs9IF9fYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAr
K19fc2VwX3BvczsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKICAgICAg
ICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKCiAgICAgICAgICAgICAgICAgIGlmIChf
X2kgIT0gMykKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19j
KSkKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICBpZiAoX19zaWdu
LnNpemUoKSA+IDEpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaWdu
LnNpemUoKTsKICAgICAgICAgIHNpemVfdHlwZSBfX2kgPSAxOwogICAgICAgICAgZm9yICg7IF9f
YyAhPSBfX2VvZiAmJiBfX2kgPCBfX2xlbjsgKytfX2kpCiAgICAgICAgICAgIHdoaWxlIChfX2Jl
ZyAhPSBfX2VuZCAmJiBfX2MgIT0gX19zaWduW19faV0pCiAgICAgICAgICAgICAgX19jID0gKigr
K19fYmVnKTsKCiAgICAgICAgICBpZiAoX19pICE9IF9fbGVuKQogICAgICAgICAgICBfX3Rlc3R2
YWxpZCA9IGZhbHNlOwogICAgICAgIH0KCgogICAgICB3aGlsZSAoX190ZW1wX3VuaXRzWzBdID09
IF9fY3R5cGUud2lkZW4oJzAnKSkKICAgICAgICBfX3RlbXBfdW5pdHMuZXJhc2UoX190ZW1wX3Vu
aXRzLmJlZ2luKCkpOwoKICAgICAgaWYgKF9fc2lnbi5zaXplKCkgJiYgX19zaWduID09IF9fbmVn
X3NpZ24pCiAgICAgICAgX190ZW1wX3VuaXRzLmluc2VydChfX3RlbXBfdW5pdHMuYmVnaW4oKSwg
X19jdHlwZS53aWRlbignLScpKTsKCgogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkgJiYgX19n
cm91cGluZ190bXAuc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgIGlmICghX192ZXJpZnlfZ3Jv
dXBpbmcoX19ncm91cGluZywgX19ncm91cGluZ190bXApKQogICAgICAgICAgICBfX3Rlc3R2YWxp
ZCA9IGZhbHNlOwogICAgICAgIH0KCgogICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CgoKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCB8fCAhX190
ZW1wX3VuaXRzLnNpemUoKSkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAg
ICAgZWxzZQoKICAgICAgICBfX3RlbXBfdW5pdHMuc3dhcChfX3VuaXRzKTsKCiAgICAgIHJldHVy
biBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
SXRlcj4KICAgIF9PdXRJdGVyCiAgICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAg
ZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90
eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAogICAgewog
ICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlw
ZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgoK
ICAgICAgaW50IF9fY3Nfc2l6ZSA9IDY0OwogICAgICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8
Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgIGludCBfX2xlbiA9IF9f
Y29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCAiJS4wMUxmIiwgX191bml0cywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CgogICAgICBpZiAoX19s
ZW4gPj0gX19jc19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsg
MTsKICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShf
X2NzX3NpemUpKTsKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2Nz
X3NpemUsICIlLjAxTGYiLCBfX3VuaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9TX2NfbG9jYWxlKTsKICAgICAgICB9CgoKCgoKCgogICAgICBfQ2hhclQqIF9fd3MgPSBz
dGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX19j
c19zaXplKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsK
ICAgICAgc3RyaW5nX3R5cGUgX19kaWdpdHMoX193cyk7CiAgICAgIHJldHVybiB0aGlzLT5kb19w
dXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX19kaWdpdHMpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG1v
bmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9v
bCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGNv
bnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBtb25l
eV9iYXNlOjpwYXJ0IHBhcnQ7CgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxv
YygpOwogICAgICBjb25zdCBzaXplX3R5cGUgX193aWR0aCA9IHN0YXRpY19jYXN0PHNpemVfdHlw
ZT4oX19pby53aWR0aCgpKTsKCgogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJULCB0cnVl
PiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIGZhbHNlPiBf
X21vbmV5X2ZhbHNlOwogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0ID0gdXNlX2ZhY2V0
PF9fbW9uZXlfdHJ1ZT4oX19sb2MpOwogICAgICBjb25zdCBfX21vbmV5X2ZhbHNlJiBfX21wZiA9
IHVzZV9mYWNldDxfX21vbmV5X2ZhbHNlPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFy
VD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCgoKICAgICAg
Y29uc3QgY2hhcl90eXBlKiBfX2JlZyA9IF9fZGlnaXRzLmRhdGEoKTsKICAgICAgY29uc3QgY2hh
cl90eXBlKiBfX2VuZCA9IF9fYmVnICsgX19kaWdpdHMuc2l6ZSgpOwogICAgICBtb25leV9iYXNl
OjpwYXR0ZXJuIF9fcDsKICAgICAgc3RyaW5nX3R5cGUgX19zaWduOwogICAgICBpZiAoKl9fYmVn
ICE9IF9fY3R5cGUud2lkZW4oJy0nKSkKICAgICAgICB7CiAgICAgICAgICBfX3AgPSBfX2ludGwg
PyBfX21wdC5wb3NfZm9ybWF0KCkgOiBfX21wZi5wb3NfZm9ybWF0KCk7CiAgICAgICAgICBfX3Np
Z24gPV9faW50bCA/IF9fbXB0LnBvc2l0aXZlX3NpZ24oKSA6IF9fbXBmLnBvc2l0aXZlX3NpZ24o
KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX3AgPSBfX2ludGwg
PyBfX21wdC5uZWdfZm9ybWF0KCkgOiBfX21wZi5uZWdfZm9ybWF0KCk7CiAgICAgICAgICBfX3Np
Z24gPV9faW50bCA/IF9fbXB0Lm5lZ2F0aXZlX3NpZ24oKSA6IF9fbXBmLm5lZ2F0aXZlX3NpZ24o
KTsKICAgICAgICAgICsrX19iZWc7CiAgICAgICAgfQoKCiAgICAgIF9fZW5kID0gX19jdHlwZS5z
Y2FuX25vdChjdHlwZV9iYXNlOjpkaWdpdCwgX19iZWcsIF9fZW5kKTsKICAgICAgaWYgKF9fYmVn
ICE9IF9fZW5kKQogICAgICAgIHsKCgoKICAgICAgICAgIHN0cmluZ190eXBlIF9fcmVzOwogICAg
ICAgICAgc3RyaW5nX3R5cGUgX192YWx1ZTsKICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9f
c3ltYm9sID0gX19pbnRsID8gX19tcHQuY3Vycl9zeW1ib2woKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5bWJvbCgpOwoKCiAgICAg
ICAgICBjb25zdCBpbnQgX19mcmFjID0gX19pbnRsID8gX19tcHQuZnJhY19kaWdpdHMoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmZyYWNfZGlnaXRzKCk7CiAg
ICAgICAgICBpZiAoX19mcmFjID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0
IGNoYXJfdHlwZSBfX2QgPSBfX2ludGwgPyBfX21wdC5kZWNpbWFsX3BvaW50KCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZGVjaW1hbF9wb2ludCgp
OwogICAgICAgICAgICAgIGlmIChfX2VuZCAtIF9fYmVnID49IF9fZnJhYykKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fZW5kIC0gX19m
cmFjLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVn
aW4oKSwgX19kKTsKICAgICAgICAgICAgICAgICAgX19lbmQgLT0gX19mcmFjOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAg
ICAgICAgIF9fdmFsdWUgPSBzdHJpbmdfdHlwZShfX2JlZywgX19lbmQpOwogICAgICAgICAgICAg
ICAgICBpbnQgX19wYWRkZWMgPSBfX2ZyYWMgLSAoX19lbmQgLSBfX2JlZyk7CiAgICAgICAgICAg
ICAgICAgIGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKCcwJyk7CiAgICAgICAgICAg
ICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwgX19wYWRkZWMsIF9femVybyk7
CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwgX19kKTsK
ICAgICAgICAgICAgICAgICAgX19iZWcgPSBfX2VuZDsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgfQoKCgogICAgICAgICAgaWYgKF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX2ludGwgPyBfX21wdC5ncm91
cGluZygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBf
X21wZi5ncm91cGluZygpOwogICAgICAgICAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0g
X19pbnRsID8gX19tcHQudGhvdXNhbmRzX3NlcCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLnRob3VzYW5kc19zZXAoKTsKICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogX19nYmVnID0gX19ncm91cGluZy5jX3N0cigpOwogICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBfX2dlbmQgPSBfX2diZWcgKyBfX2dyb3VwaW5nLnNpemUo
KTsKICAgICAgICAgICAgICAgICAgY29uc3QgaW50IF9fbiA9IChfX2VuZCAtIF9fYmVnKSAqIDI7
CiAgICAgICAgICAgICAgICAgIF9DaGFyVCogX193czIgPQogICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX24p
KTsKICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzX2VuZCA9IF9fYWRkX2dyb3VwaW5nKF9f
d3MyLCBfX3NlcCwgX19nYmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19nZW5kLCBfX2JlZywgX19lbmQpOwogICAgICAgICAgICAgICAgICBf
X3ZhbHVlLmluc2VydCgwLCBfX3dzMiwgX193c19lbmQgLSBfX3dzMik7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoMCwg
c3RyaW5nX3R5cGUoX19iZWcsIF9fZW5kKSk7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgaW9z
X2Jhc2U6OmZtdGZsYWdzIF9fZiA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVs
ZDsKICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fdmFsdWUuc2l6ZSgpICsgX19zaWduLnNp
emUoKTsKICAgICAgICAgIF9fbGVuICs9IChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jh
c2UpID8gX19zeW1ib2wuc2l6ZSgpIDogMDsKICAgICAgICAgIGJvb2wgX190ZXN0aXBhZCA9IF9f
ZiA9PSBpb3NfYmFzZTo6aW50ZXJuYWwgJiYgX19sZW4gPCBfX3dpZHRoOwoKCiAgICAgICAgICBm
b3IgKGludCBfX2kgPSAwOyBfX2kgPCA0OyArK19faSkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtfX2ldKTsKICAg
ICAgICAgICAgICBzd2l0Y2ggKF9fd2hpY2gpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoKICAgICAgICAgICAgICAgICAgaWYgKF9faW8u
ZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkKICAgICAgICAgICAgICAgICAgICBfX3JlcyAr
PSBfX3N5bWJvbDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNl
IG1vbmV5X2Jhc2U6OnNpZ246CgoKCiAgICAgICAgICAgICAgICAgIGlmIChfX3NpZ24uc2l6ZSgp
KQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fc2lnblswXTsKICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnZhbHVlOgogICAgICAg
ICAgICAgICAgICBfX3JlcyArPSBfX3ZhbHVlOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3BhY2U6CgoKCiAgICAgICAgICAgICAgICAg
IGlmIChfX3Rlc3RpcGFkKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBl
KF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgIF9fcmVzICs9IF9fY3R5cGUud2lkZW4oX19maWxsKTsKICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6Om5vbmU6CiAgICAg
ICAgICAgICAgICAgIGlmIChfX3Rlc3RpcGFkKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9
IHN0cmluZ190eXBlKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCgogICAgICAgICAgaWYgKF9f
c2lnbi5zaXplKCkgPiAxKQogICAgICAgICAgICBfX3JlcyArPSBzdHJpbmdfdHlwZShfX3NpZ24u
YmVnaW4oKSArIDEsIF9fc2lnbi5lbmQoKSk7CgoKICAgICAgICAgIF9fbGVuID0gX19yZXMuc2l6
ZSgpOwogICAgICAgICAgaWYgKF9fd2lkdGggPiBfX2xlbikKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGlmIChfX2YgPT0gaW9zX2Jhc2U6OmxlZnQpCgogICAgICAgICAgICAgICAgX19yZXMu
YXBwZW5kKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAgICBlbHNlCgogICAg
ICAgICAgICAgICAgX19yZXMuaW5zZXJ0KDAsIHN0cmluZ190eXBlKF9fd2lkdGggLSBfX2xlbiwg
X19maWxsKSk7CiAgICAgICAgICAgICAgX19sZW4gPSBfX3dpZHRoOwogICAgICAgICAgICB9CgoK
ICAgICAgICAgIGZvciAoc2l6ZV90eXBlIF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytf
X3MpCiAgICAgICAgICAgICpfX3MgPSBfX3Jlc1tfX2pdOwogICAgICAgIH0KICAgICAgX19pby53
aWR0aCgwKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIHRpbWVfYmFzZTo6ZGF0ZW9yZGVyCiAgICB0
aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpkb19kYXRlX29yZGVyKCkgY29uc3QKICAgIHsgcmV0
dXJuIHRpbWVfYmFzZTo6bm9fb3JkZXI7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6
CiAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfQ2hhclQqIF9fZm9ybWF0KSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lv
LmdldGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2Zh
Y2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFy
VD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgc2l6
ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8X0NoYXJUPjo6bGVuZ3RoKF9fZm9ybWF0KTsKCiAgICAg
IGZvciAoc2l6ZV90IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IF9fbGVuICYmICFf
X2VycjsgKytfX2kpCiAgICAgICAgewogICAgICAgICAgY2hhciBfX2MgPSBfX2Zvcm1hdFtfX2ld
OwogICAgICAgICAgaWYgKF9fYyA9PSAnJScpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAg
X19jID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgICAgICAgIGNoYXIgX19tb2QgPSAwOwogICAg
ICAgICAgICAgIGludCBfX21lbSA9IDA7CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwg
X19jID09ICdPJykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19tb2QgPSBf
X2M7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fZm9ybWF0WysrX19pXTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBzd2l0Y2ggKF9fYykKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogX19jczsKICAgICAgICAgICAgICAgICAgX0NoYXJUIF9f
d2NzWzEwXTsKICAgICAgICAgICAgICAgIGNhc2UgJ2EnOgoKICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhcl90eXBlKiBfX2RheXMxWzddOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RheXNf
YWJicmV2aWF0ZWQoX19kYXlzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShf
X2JlZywgX19lbmQsIF9fdG0tPnRtX3dkYXksIF9fZGF5czEsIDcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgY2FzZSAnQSc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f
ZGF5czJbN107CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF5cyhfX2RheXMyKTsKICAgICAg
ICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fd2RheSwg
X19kYXlzMiwgNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdoJzoKICAgICAgICAg
ICAgICAgIGNhc2UgJ2InOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX21v
bnRoczFbMTJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChf
X21vbnRoczEpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5k
LCBfX3RtLT50bV9tb24sIF9fbW9udGhzMSwgMTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
Y2FzZSAnQic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzMlsx
Ml07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzKF9fbW9udGhzMik7CiAgICAgICAg
ICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21vbiwgX19t
b250aHMyLCAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdjJzoKCiAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kdFsyXTsKICAgICAgICAgICAgICAgICAgX190
cC5fTV9kYXRlX3RpbWVfZm9ybWF0cyhfX2R0KTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFj
dF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2R0WzBdKTsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdkJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4
dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWRheSwgMSwgMzEsIDIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdEJzoKCiAgICAgICAgICAgICAgICAgIF9f
Y3MgPSAiJW0vJWQvJXkiOwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9f
Y3MgKyA5LCBfX3djcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChf
X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIGNhc2UgJ0gnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcs
IF9fZW5kLCBfX3RtLT50bV9ob3VyLCAwLCAyMywgMiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgIGNhc2UgJ0knOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19i
ZWcsIF9fZW5kLCBfX3RtLT50bV9ob3VyLCAxLCAxMiwgMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgIGNhc2UgJ20nOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0o
X19iZWcsIF9fZW5kLCBfX21lbSwgMSwgMTIsIDIsIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgaWYgKCFfX2VycikKICAg
ICAgICAgICAgICAgICAgICBfX3RtLT50bV9tb24gPSBfX21lbSAtIDE7CiAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnTSc6CgogICAgICAgICAgICAgICAgICBf
TV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21pbiwgMCwgNTksIDIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAgICAgICAg
aWYgKF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkgPT0gJ1xuJykKICAgICAgICAgICAgICAgICAg
ICArK19fYmVnOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19l
cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgY2FzZSAnUic6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVIOiVNIjsKICAg
ICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgNiwgX193Y3MpOwogICAg
ICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBf
X2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2Nz
KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdTJzoKCiAg
ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fc2Vj
LCAwLCA1OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19l
cnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgog
ICAgICAgICAgICAgICAgICBpZiAoX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXHQnKQog
ICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1QnOgoKICAgICAgICAgICAgICAgICAgX19jcyA9
ICIlSDolTTolUyI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyAr
IDksIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVn
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgY2FzZSAneCc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF0ZXNb
Ml07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF0ZV9mb3JtYXRzKF9fZGF0ZXMpOwogICAg
ICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBf
X2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGF0
ZXNbMF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1gn
OgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RpbWVzWzJdOwogICAgICAg
ICAgICAgICAgICBfX3RwLl9NX3RpbWVfZm9ybWF0cyhfX3RpbWVzKTsKICAgICAgICAgICAgICAg
ICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RpbWVzWzBdKTsKICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd5JzoKCiAgICAgICAg
ICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1feWVhciwgMCwg
OTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsK
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdZJzoKCiAgICAg
ICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX19tZW0sIDAsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWNfbGltaXRzPGludD46Om1heCgpLCA0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAg
ICAgICAgICAgICAgIGlmICghX19lcnIpCiAgICAgICAgICAgICAgICAgICAgX190bS0+dG1feWVh
ciA9IF9fbWVtIC0gMTkwMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICBjYXNlICdaJzoKCiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6
OnVwcGVyLCAqX19iZWcpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX3RtcDsKICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2Jl
ZywgX19lbmQsIF9fdG1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
dGltZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25lcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxNCwgX19lcnIpOwoKCiAgICAgICAgICAgICAgICAgICAgICBjaGFyX3R5
cGUgX19jID0gKl9fYmVnOwogICAgICAgICAgICAgICAgICAgICAgaWYgKCFfX2VyciAmJiBfX3Rt
cCA9PSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKF9fYyA9PSBfX2N0eXBlLndpZGVu
KCctJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX19jID09IF9fY3R5cGUud2lk
ZW4oJysnKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG1wLCAwLCAyMywgMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAs
IDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0
eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKCiAgICAgICAgICAgICAgICAgICAgICBf
X2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAgICAgICAg
ICAgICAgICAgaWYgKF9fYyA9PSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApKQogICAgICAgICAg
ICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIHZvaWQKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9u
dW0oaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAg
ICAgICAgICAgICAgICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4sCiAgICAg
ICAgICAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlLAogICAgICAgICAgICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdAogICAgewogICAgICBzaXplX3Qg
X19pID0gMDsKICAgICAgc3RyaW5nIF9fZGlnaXRzOwogICAgICBib29sIF9fdGVzdHZhbGlkID0g
dHJ1ZTsKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgd2hpbGUgKF9fYmVnICE9
IF9fZW5kICYmIF9faSA8IF9fbGVuCiAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jh
c2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsKICAgICAgICAgIF9fZGlnaXRzICs9IF9fY3R5cGUu
bmFycm93KF9fYywgMCk7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgKytf
X2k7CiAgICAgICAgfQogICAgICBpZiAoX19pID09IF9fbGVuKQogICAgICAgIHsKICAgICAgICAg
IGludCBfX3ZhbHVlID0gYXRvaShfX2RpZ2l0cy5jX3N0cigpKTsKICAgICAgICAgIGlmIChfX21p
biA8PSBfX3ZhbHVlICYmIF9fdmFsdWUgPD0gX19tYXgpCiAgICAgICAgICAgIF9fbWVtYmVyID0g
X192YWx1ZTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsK
ICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICBp
ZiAoIV9fdGVzdHZhbGlkKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg
fQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIHZv
aWQKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9uYW1lKGl0
ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiogX19uYW1lcywgc2l6ZV90IF9faW5kZXhsZW4sCiAg
ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdAogICAgewog
ICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXJfdHlwZT4gX190cmFpdHNfdHlwZTsKICAgICAg
aW50KiBfX21hdGNoZXMgPSBzdGF0aWNfY2FzdDxpbnQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVv
ZihpbnQpICogX19pbmRleGxlbikpOwogICAgICBzaXplX3QgX19ubWF0Y2hlcyA9IDA7CiAgICAg
IHNpemVfdCBfX3BvcyA9IDA7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwogICAgICBj
b25zdCBjaGFyX3R5cGUqIF9fbmFtZTsKCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7Cgog
ICAgICBmb3IgKHNpemVfdCBfX2kxID0gMDsgX19pMSA8IF9faW5kZXhsZW47ICsrX19pMSkKICAg
ICAgICBpZiAoX19jID09IF9fbmFtZXNbX19pMV1bMF0pCiAgICAgICAgICBfX21hdGNoZXNbX19u
bWF0Y2hlcysrXSA9IF9faTE7CgogICAgICB3aGlsZShfX25tYXRjaGVzID4gMSkKICAgICAgICB7
CgogICAgICAgICAgc2l6ZV90IF9fbWlubGVuID0gMTA7CiAgICAgICAgICBmb3IgKHNpemVfdCBf
X2kyID0gMDsgX19pMiA8IF9fbm1hdGNoZXM7ICsrX19pMikKICAgICAgICAgICAgX19taW5sZW4g
PSBtaW4oX19taW5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJhaXRzX3R5cGU6
Omxlbmd0aChfX25hbWVzW19fbWF0Y2hlc1tfX2kyXV0pKTsKCiAgICAgICAgICBpZiAoX19wb3Mg
PCBfX21pbmxlbiAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICsrX19wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBfX2kzID0gMDsgX19pMyA8IF9fbm1hdGNoZXM7ICsrX19pMykKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbX19p
M11dOwogICAgICAgICAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSAhPSBfX2MpCiAgICAgICAg
ICAgICAgICAgICAgX19tYXRjaGVzW19faTNdID0gX19tYXRjaGVzWy0tX19ubWF0Y2hlc107CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgfQoKICAgICAgaWYgKF9fbm1hdGNoZXMgPT0gMSkKICAgICAgICB7Cgog
ICAgICAgICAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbMF1dOwogICAgICAgICAgY29uc3Qg
c2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAgICB3
aGlsZSAoX19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX25hbWVbX19wb3NdID09
ICpfX2JlZykKICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKCiAgICAgICAgICBpZiAoX19s
ZW4gPT0gX19wb3MpCiAgICAgICAgICAgIF9fbWVtYmVyID0gX19tYXRjaGVzWzBdOwogICAgICAg
ICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAg
ZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgIGlmICghX190ZXN0dmFsaWQp
CiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0
PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAgX0NoYXJUIF9fd2NzWzNd
OwogICAgICBjb25zdCBjaGFyKiBfX2NzID0gIiVYIjsKICAgICAgbG9jYWxlIF9fbG9jID0gX19p
by5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNl
dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3Mg
KyAzLCBfX3djcyk7CiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9f
aW8sIF9fZXJyLCBfX3RtLCBfX3djcyk7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAg
ICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIK
ICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBl
IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAgX0No
YXJUIF9fd2NzWzNdOwogICAgICBjb25zdCBjaGFyKiBfX2NzID0gIiV4IjsKICAgICAgbG9jYWxl
IF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlw
ZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX2N0eXBlLndpZGVu
KF9fY3MsIF9fY3MgKyAzLCBfX3djcyk7CiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2Jl
ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLCBfX3djcyk7CiAgICAgIGlmIChfX2JlZyA9PSBf
X2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19i
ZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X3dl
ZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog
ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29u
c3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyX3R5cGU+IF9fdHJhaXRzX3R5
cGU7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0
PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9f
bG9jKTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2RheXNbN107CiAgICAgIF9fdHAuX01fZGF5
c19hYmJyZXZpYXRlZChfX2RheXMpOwogICAgICBpbnQgX190bXB3ZGF5OwogICAgICBfTV9leHRy
YWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcHdkYXksIF9fZGF5cywgNywgX19lcnIpOwoKCgoK
CgoKICAgICAgaWYgKCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19wb3MgPSBf
X3RyYWl0c190eXBlOjpsZW5ndGgoX19kYXlzW19fdG1wd2RheV0pOwogICAgICAgICAgX190cC5f
TV9kYXlzKF9fZGF5cyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbmFtZSA9IF9fZGF5
c1tfX3RtcHdkYXldOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAg
ICAgICAgICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5
cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYm
IF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9fbmFtZVtfX3Bvc10gPT0g
Kl9fYmVnKQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKICAgICAgICAgICAgICBp
ZiAoX19sZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp
bGJpdDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgX190
bS0+dG1fd2RheSA9IF9fdG1wd2RheTsKICAgICAgICB9CiAgICAgIGlmIChfX2JlZyA9PSBfX2Vu
ZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7
CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg
ICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF9tb250
aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsCiAgICAgICAgICAgICAgICAg
ICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBj
b25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXJfdHlwZT4gX190cmFpdHNf
dHlwZTsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVu
Y3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4o
X19sb2MpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzWzEyXTsKICAgICAgX190cC5f
TV9tb250aHNfYWJicmV2aWF0ZWQoX19tb250aHMpOwogICAgICBpbnQgX190bXBtb247CiAgICAg
IF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1wbW9uLCBfX21vbnRocywgMTIsIF9f
ZXJyKTsKCgoKCgoKCiAgICAgIGlmICghX19lcnIpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90
IF9fcG9zID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbW9udGhzW19fdG1wbW9uXSk7CiAgICAg
ICAgICBfX3RwLl9NX21vbnRocyhfX21vbnRocyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq
IF9fbmFtZSA9IF9fbW9udGhzW19fdG1wbW9uXTsKICAgICAgICAgIGlmIChfX25hbWVbX19wb3Nd
ID09ICpfX2JlZykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBjb25zdCBzaXplX3QgX19s
ZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgICAgICB3aGlsZSAo
X19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAmJiBf
X25hbWVbX19wb3NdID09ICpfX2JlZykKICAgICAgICAgICAgICAgICsrX19iZWcsICsrX19wb3M7
CiAgICAgICAgICAgICAgaWYgKF9fbGVuICE9IF9fcG9zKQogICAgICAgICAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICghX19lcnIp
CiAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fdG1wbW9uOwogICAgICAgIH0KCiAgICAgIGlm
IChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAg
ICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46Ogog
ICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
JiBfX2lvLAogICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190
bSkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAg
Y29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o
X19sb2MpOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgc2l6ZV90IF9faSA9
IDA7CiAgICAgIHN0cmluZyBfX2RpZ2l0czsKICAgICAgd2hpbGUgKF9faSA8IDQgJiYgX19iZWcg
IT0gX19lbmQgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKSkKICAgICAgICB7
CiAgICAgICAgICBfX2RpZ2l0cyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIDApOwogICAgICAgICAg
X19jID0gKigrK19fYmVnKTsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgaWYgKF9f
aSA9PSAyIHx8IF9faSA9PSA0KQogICAgICAgIHsKICAgICAgICAgIGxvbmcgX19sOwogICAgICAg
ICAgX19jb252ZXJ0X3RvX3YoX19kaWdpdHMuY19zdHIoKSwgX19sLCBfX2VyciwgX1NfY19sb2Nh
bGUpOwogICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgJiYgX19sIDw9
IDIxNDc0ODM2NDcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2wgPSBfX2kgPT0gMiA/
IF9fbCA6IF9fbCAtIDE5MDA7CiAgICAgICAgICAgICAgX190bS0+dG1feWVhciA9IHN0YXRpY19j
YXN0PGludD4oX19sKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAg
ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091
dEl0ZXIKICAgIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIHB1dChpdGVyX3R5cGUg
X19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlLCBjb25zdCB0bSogX190bSwKICAgICAgICBj
b25zdCBfQ2hhclQqIF9fYmVnLCBjb25zdCBfQ2hhclQqIF9fZW5kKSBjb25zdAogICAgewogICAg
ICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0
JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIHdoaWxl
IChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fY3R5cGUu
bmFycm93KCpfX2JlZywgMCk7CiAgICAgICAgICArK19fYmVnOwogICAgICAgICAgaWYgKF9fYyA9
PSAnJScpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyIF9fZm9ybWF0OwogICAgICAg
ICAgICAgIGNoYXIgX19tb2QgPSAwOwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IDE7CiAg
ICAgICAgICAgICAgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAg
ICArK19fYmVnOwogICAgICAgICAgICAgIGlmIChfX2MgPT0gJ0UnIHx8IF9fYyA9PSAnTycpCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbW9kID0gX19jOwogICAgICAgICAg
ICAgICAgICBfX2Zvcm1hdCA9IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCk7CiAgICAgICAgICAg
ICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgX19mb3JtYXQgPSBfX2M7CiAgICAgICAgICAgICAgX19zID0gdGhpcy0+ZG9f
cHV0KF9fcywgX19pbywgY2hhcl90eXBlKCksIF9fdG0sIF9fZm9ybWF0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX21vZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgewogICAgICAgICAgICAgICpfX3MgPSBfX2M7CiAgICAgICAgICAgICAgKytf
X3M7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgog
ICAgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3Ms
IGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgICAgIGNo
YXIgX19mb3JtYXQsIGNoYXIgX19tb2QpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9
IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2Vf
ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBj
b25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCgog
ICAgICBjb25zdCBzaXplX3QgX19tYXhsZW4gPSA2NDsKICAgICAgY2hhcl90eXBlKiBfX3JlcyA9
CiAgICAgICAgc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yo
Y2hhcl90eXBlKSAqIF9fbWF4bGVuKSk7CgoKCgoKCiAgICAgIGNoYXJfdHlwZSBfX2ZtdFs0XTsK
ICAgICAgX19mbXRbMF0gPSBfX2N0eXBlLndpZGVuKCclJyk7CiAgICAgIGlmICghX19tb2QpCiAg
ICAgICAgewogICAgICAgICAgX19mbXRbMV0gPSBfX2Zvcm1hdDsKICAgICAgICAgIF9fZm10WzJd
ID0gY2hhcl90eXBlKCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg
X19mbXRbMV0gPSBfX21vZDsKICAgICAgICAgIF9fZm10WzJdID0gX19mb3JtYXQ7CiAgICAgICAg
ICBfX2ZtdFszXSA9IGNoYXJfdHlwZSgpOwogICAgICAgIH0KCiAgICAgIF9fdHAuX01fcHV0KF9f
cmVzLCBfX21heGxlbiwgX19mbXQsIF9fdG0pOwoKCiAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJf
dHJhaXRzPGNoYXJfdHlwZT46Omxlbmd0aChfX3Jlcyk7CiAgICAgIGZvciAoc2l6ZV90IF9faSA9
IDA7IF9faSA8IF9fbGVuOyArK19faSwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fcmVzW19faV07
CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgaW50CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwgY29u
c3QgX0NoYXJUKikgY29uc3QKICAgIHsgcmV0dXJuIDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIHNpemVfdAogICAgY29sbGF0ZTxfQ2hhclQ+OjpfTV90cmFuc2Zvcm0oX0No
YXJUKiwgY29uc3QgX0NoYXJUKiwgc2l6ZV90KSBjb25zdAogICAgeyByZXR1cm4gMDsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIGNvbGxhdGU8X0NoYXJUPjo6CiAg
ICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0IF9DaGFyVCogX19oaTEsCiAg
ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNv
bnN0CiAgICB7CiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fb25lKF9fbG8xLCBfX2hpMSk7CiAg
ICAgIGNvbnN0IHN0cmluZ190eXBlIF9fdHdvKF9fbG8yLCBfX2hpMik7CiAgICAgIHJldHVybiBf
TV9jb21wYXJlKF9fb25lLmNfc3RyKCksIF9fdHdvLmNfc3RyKCkpOwogICAgfQoKIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIGNvbGxhdGU8X0NoYXJUPjo6c3RyaW5nX3R5
cGUKICAgIGNvbGxhdGU8X0NoYXJUPjo6CiAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBf
X2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2xlbiA9
IChfX2hpIC0gX19sbykgKiAyOwoKICAgICAgX0NoYXJUKiBfX2MgPQogICAgICAgIHN0YXRpY19j
YXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2xlbikpOwog
ICAgICBzaXplX3QgX19yZXMgPSBfTV90cmFuc2Zvcm0oX19jLCBfX2xvLCBfX2xlbik7CgogICAg
ICBpZiAoX19yZXMgPj0gX19sZW4pCiAgICAgICAgewogICAgICAgICAgX19jID0KICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAq
IChfX3JlcyArIDEpKSk7CiAgICAgICAgICBfTV90cmFuc2Zvcm0oX19jLCBfX2xvLCBfX3JlcyAr
IDEpOwogICAgICAgIH0KICAgICAgcmV0dXJuIHN0cmluZ190eXBlKF9fYyk7CiAgICB9CgogdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9uZwogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAg
IGRvX2hhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAg
ICB7CiAgICAgIHVuc2lnbmVkIGxvbmcgX192YWwgPSAwOwogICAgICBmb3IgKDsgX19sbyA8IF9f
aGk7ICsrX19sbykKICAgICAgICBfX3ZhbCA9ICpfX2xvICsgKChfX3ZhbCA8PCA3KSB8CiAgICAg
ICAgICAgICAgICAgICAgICAgKF9fdmFsID4+IChudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25n
Pjo6ZGlnaXRzIC0gNykpKTsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KF9fdmFsKTsK
ICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgogICAgdm9pZAogICAgX19jb252ZXJ0
X3RvX3YoY29uc3QgY2hhciogX19pbiwgX1R2JiBfX291dCwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLAogICAgICAgICAgICAgICAgICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19i
YXNlID0gMTApOwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgogICAgaW50CiAgICBfX2Nv
bnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCBjb25zdCBpbnQgX19zaXplLCBjb25zdCBjaGFyKiBf
X2ZtdCwKICAgICAgICAgICAgICAgICAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGlu
dCBfX3ByZWMgPSAtMSkKICAgIHsKICAgICAgaW50IF9fcmV0OwogICAgICBjaGFyKiBfX29sZCA9
IHN0cmR1cChzZXRsb2NhbGUoX19MQ19BTEwsIF9fbnVsbCkpOwogICAgICBzZXRsb2NhbGUoX19M
Q19BTEwsICJDIik7CiAgICAgIGlmIChfX3ByZWMgPj0gMCkKICAgICAgICBfX3JldCA9IHNucHJp
bnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CiAgICAgIGVsc2UKICAgICAg
ICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3YpOwogICAgICBzZXRs
b2NhbGUoX19MQ19BTEwsIF9fb2xkKTsKICAgICAgZnJlZShfX29sZCk7CiAgICAgIHJldHVybiBf
X3JldDsKICAgIH0KIyAxOTk5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy50
Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2
b2lkCiAgICBfX3BhZChpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgX0NoYXJUKiBfX25l
d3MsIGNvbnN0IF9DaGFyVCogX19vbGRzLAogICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX25l
d2xlbiwgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbiwKICAgICAgICAgIGNvbnN0IGJvb2wgX19u
dW0pCiAgICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf
VHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpp
bnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIGludF90eXBlIF9fcGxlbiA9IHN0YXRpY19jYXN0PHNp
emVfdD4oX19uZXdsZW4gLSBfX29sZGxlbik7CiAgICAgIGNoYXJfdHlwZSogX19wYWRzID0gc3Rh
dGljX2Nhc3Q8Y2hhcl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoY2hhcl90eXBlKSAq
IF9fcGxlbikpOwogICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fcGFkcywgX19wbGVuLCBfX2Zp
bGwpOwoKICAgICAgY2hhcl90eXBlKiBfX2JlZzsKICAgICAgY2hhcl90eXBlKiBfX2VuZDsKICAg
ICAgc2l6ZV90IF9fbW9kID0gMDsKICAgICAgc2l6ZV90IF9fYmVnbGVuOwogICAgICBpb3NfYmFz
ZTo6Zm10ZmxhZ3MgX19hZGp1c3QgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0Zmll
bGQ7CgogICAgICBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmxlZnQpCiAgICAgICAgewoKICAg
ICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOwogICAgICAgICAg
X19iZWdsZW4gPSBfX29sZGxlbjsKICAgICAgICAgIF9fZW5kID0gX19wYWRzOwogICAgICAgIH0K
ICAgICAgZWxzZSBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmludGVybmFsICYmIF9fbnVtKQog
ICAgICAgIHsKCgoKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAg
ICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy
VD4gPihfX2xvYyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUgX19taW51cyA9IF9fY3R5cGUu
d2lkZW4oJy0nKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBlLndp
ZGVuKCcrJyk7CiAgICAgICAgICBib29sIF9fdGVzdHNpZ24gPSBfX29sZHNbMF0gPT0gX19taW51
cyB8fCBfX29sZHNbMF0gPT0gX19wbHVzOwogICAgICAgICAgYm9vbCBfX3Rlc3RoZXggPSBfX2N0
eXBlLndpZGVuKCcwJykgPT0gX19vbGRzWzBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYm
IChfX2N0eXBlLndpZGVuKCd4JykgPT0gX19vbGRzWzFdCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBfX2N0eXBlLndpZGVuKCdYJykgPT0gX19vbGRzWzFdKTsKICAgICAgICAgIGlm
IChfX3Rlc3RoZXgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX25ld3NbMF0gPSBfX29s
ZHNbMF07CiAgICAgICAgICAgICAgX19uZXdzWzFdID0gX19vbGRzWzFdOwogICAgICAgICAgICAg
IF9fbW9kICs9IDI7CiAgICAgICAgICAgICAgX19uZXdzICs9IDI7CiAgICAgICAgICAgICAgX19i
ZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAg
ICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190ZXN0c2lnbikKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIF9fbmV3c1swXSA9IF9fb2xkc1swXSA9PSBfX3BsdXMgPyBfX3BsdXMgOiBfX21p
bnVzOwogICAgICAgICAgICAgICsrX19tb2Q7CiAgICAgICAgICAgICAgKytfX25ld3M7CiAgICAg
ICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47
CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyArIF9f
bW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgogICAgICAg
ICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwog
ICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgIF9fYmVn
ID0gX19wYWRzOwogICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICBfX2VuZCA9
IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsKICAgICAgICB9CiAgICAgIHRyYWl0c190
eXBlOjpjb3B5KF9fbmV3cywgX19iZWcsIF9fYmVnbGVuKTsKICAgICAgdHJhaXRzX3R5cGU6OmNv
cHkoX19uZXdzICsgX19iZWdsZW4sIF9fZW5kLCBfX25ld2xlbiAtIF9fYmVnbGVuIC0gX19tb2Qp
OwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBfX3Bh
ZChpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgX0NoYXJUKiBfX25ld3MsIGNvbnN0IF9D
aGFyVCogX19vbGRzLAogICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwgY29uc3Qg
c3RyZWFtc2l6ZSBfX29sZGxlbiwKICAgICAgICAgIGNvbnN0IGJvb2wgX19udW0pCiAgICB7CiAg
ICAgIHJldHVybiBfX3BhZDxfQ2hhclQsIGNoYXJfdHJhaXRzPF9DaGFyVD4gPihfX2lvLCBfX2Zp
bGwsIF9fbmV3cywgX19vbGRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19uZXdsZW4sIF9fb2xkbGVuLCBfX251bSk7CiAgICB9CiMgMjA5OCAiL3Vz
ci9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgYm9vbAogICAgX192ZXJpZnlfZ3JvdXBpbmcoY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVD4mIF9fZ3JvdXBpbmcsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJp
bmc8X0NoYXJUPiYgX19ncm91cGluZ190bXApCiAgICB7CiAgICAgIGludCBfX2kgPSAwOwogICAg
ICBpbnQgX19qID0gMDsKICAgICAgY29uc3QgaW50IF9fbGVuID0gX19ncm91cGluZy5zaXplKCk7
CiAgICAgIGNvbnN0IGludCBfX24gPSBfX2dyb3VwaW5nX3RtcC5zaXplKCk7CiAgICAgIGJvb2wg
X190ZXN0ID0gdHJ1ZTsKCgoKCiAgICAgIHdoaWxlIChfX3Rlc3QgJiYgX19pIDwgX19uIC0gMSkK
ICAgICAgICBmb3IgKF9faiA9IDA7IF9fdGVzdCAmJiBfX2ogPCBfX2xlbiAmJiBfX2kgPCBfX24g
LSAxOyArK19faiwrK19faSkKICAgICAgICAgIF9fdGVzdCAmPSBfX2dyb3VwaW5nW19fal0gPT0g
X19ncm91cGluZ190bXBbX19uIC0gX19pIC0gMV07CgoKICAgICAgX19qID09IF9fbGVuID8gX19q
ID0gMCA6IF9fajsKICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdbX19qXSA+PSBfX2dyb3VwaW5n
X3RtcFtfX24gLSBfX2kgLSAxXTsKICAgICAgcmV0dXJuIF9fdGVzdDsKICAgIH0KCgoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfQ2hhclQqCiAgICBfX2FkZF9ncm91cGluZyhf
Q2hhclQqIF9fcywgX0NoYXJUIF9fc2VwLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
X19nYmVnLCBjb25zdCBjaGFyKiBfX2dlbmQsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hh
clQqIF9fZmlyc3QsIGNvbnN0IF9DaGFyVCogX19sYXN0KQogICAgewogICAgICBpZiAoX19sYXN0
IC0gX19maXJzdCA+ICpfX2diZWcpCiAgICAgICAgewogICAgICAgICAgX19zID0gX19hZGRfZ3Jv
dXBpbmcoX19zLCBfX3NlcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX2diZWcg
KyAxID09IF9fZ2VuZCA/IF9fZ2JlZyA6IF9fZ2JlZyArIDEpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19nZW5kLCBfX2ZpcnN0LCBfX2xhc3QgLSAqX19nYmVnKTsKICAgICAgICAg
IF9fZmlyc3QgPSBfX2xhc3QgLSAqX19nYmVnOwogICAgICAgICAgKl9fcysrID0gX19zZXA7CiAg
ICAgICAgfQogICAgICBkbwogICAgICAgICpfX3MrKyA9ICpfX2ZpcnN0Kys7CiAgICAgIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbGFzdCk7CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKCgogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxh
dGUgY2xhc3MgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
bW9uZXlwdW5jdF9ieW5hbWU8Y2hhciwgZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBt
b25leXB1bmN0X2J5bmFtZTxjaGFyLCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9u
ZXlfZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8Y2hhcj47CiAg
ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OwogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OwogIGV4dGVybiB0ZW1w
bGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCBmYWxzZT47CiAgZXh0ZXJuIHRl
bXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPHdjaGFyX3QsIHRydWU+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBtb25leV9nZXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz
IG1vbmV5X3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Q8Y2hh
cj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTxjaGFyPjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgbnVtX2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
bnVtX3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Q8d2NoYXJfdD47
CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTx3Y2hhcl90PjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgbnVtX2dldDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xh
c3MgbnVtX3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX190aW1lcHVuY3Q8
Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0PGNoYXI+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIHRpbWVfZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldF9ieW5h
bWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PHdjaGFyX3Q+Owog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxh
dGUgY2xhc3MgdGltZV9wdXRfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz
cyB0aW1lX2dldDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXRfYnlu
YW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlczxjaGFyPjsKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXNfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1w
bGF0ZSBjbGFzcyBtZXNzYWdlczx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVz
c2FnZXNfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjdHlwZV9ieW5h
bWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGN0eXBlX2J5bmFtZTx3Y2hhcl90PjsK
ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5hbWU8Y2hhciwgY2hhciwgbWJzdGF0
ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5hbWU8d2NoYXJfdCwgY2hh
ciwgbWJzdGF0ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZTxjaGFyPjsKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIGNvbGxhdGU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxh
dGVfYnluYW1lPHdjaGFyX3Q+OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvZGVjdnQ8
Y2hhciwgY2hhciwgbWJzdGF0ZV90PiYKICAgIHVzZV9mYWNldDxjb2RlY3Z0PGNoYXIsIGNoYXIs
IG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25z
dCBjb2xsYXRlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGNvbGxhdGU8Y2hhcj4gPihjb25zdCBsb2Nh
bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1wdW5jdDxjaGFyPiYKICAgIHVz
ZV9mYWNldDxudW1wdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGNvbnN0IG51bV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bnVtX3B1dDxjaGFyPiA+
KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9nZXQ8Y2hh
cj4mCiAgICB1c2VfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl
cm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT4mCiAgICB1c2VfZmFj
ZXQ8bW9uZXlwdW5jdDxjaGFyLCB0cnVlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVt
cGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+JgogICAgdXNlX2ZhY2V0PG1v
bmV5cHVuY3Q8Y2hhciwgZmFsc2U+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgY29uc3QgbW9uZXlfcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG1vbmV5X3B1dDxjaGFy
PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X2dl
dDxjaGFyPiYKICAgIHVzZV9mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsK
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBfX3RpbWVwdW5jdDxjaGFyPiYKICAgIHVzZV9m
YWNldDxfX3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGNvbnN0IHRpbWVfcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0PHRpbWVfcHV0PGNoYXI+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9nZXQ8
Y2hhcj4mCiAgICB1c2VfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtZXNzYWdlczxjaGFyPiYKICAgIHVzZV9mYWNldDxt
ZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNv
bnN0IGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiYKICAgIHVzZV9mYWNldDxjb2Rl
Y3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4gPihsb2NhbGUgY29uc3QmKTsKCiAgZXh0ZXJu
IHRlbXBsYXRlCiAgICBjb25zdCBjb2xsYXRlPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PGNvbGxh
dGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25z
dCBudW1wdW5jdDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1wdW5jdDx3Y2hhcl90PiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9wdXQ8d2NoYXJf
dD4mCiAgICB1c2VfZmFjZXQ8bnVtX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9nZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8
bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5j
dDx3Y2hhcl90LCB0cnVlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVu
Y3Q8d2NoYXJfdCwgZmFsc2U+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgY29uc3QgbW9uZXlfcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG1vbmV5X3B1dDx3Y2hh
cl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5
X2dldDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxtb25leV9nZXQ8d2NoYXJfdD4gPihjb25zdCBs
b2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBfX3RpbWVwdW5jdDx3Y2hhcl90
PiYKICAgIHVzZV9mYWNldDxfX3RpbWVwdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoK
ICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfcHV0PHdjaGFyX3Q+JgogICAgdXNlX2Zh
Y2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgY29uc3QgdGltZV9nZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8dGltZV9nZXQ8d2No
YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtZXNz
YWdlczx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxtZXNzYWdlczx3Y2hhcl90PiA+KGNvbnN0IGxv
Y2FsZSYpOwoKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y3R5cGU8
Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo
YXNfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvbGxhdGU8Y2hhcj4g
Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj
ZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1fZ2V0PGNoYXI+ID4oY29u
c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1v
bmV5cHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi
b29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4
dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X2dldDxjaGFyPiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxf
X3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGJvb2wKICAgIGhhc19mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX2dldDxjaGFyPiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxt
ZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9v
bAogICAgaGFzX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVy
biB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwg
bWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK
ICAgIGhhc19mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVy
biB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0PHdjaGFyX3Q+ID4oY29u
c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51
bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi
b29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leXB1bmN0PHdjaGFyX3Q+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh
Y2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2Nh
bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8X190aW1lcHVu
Y3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29s
CiAgICBoYXNfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8d2NoYXJfdD4gPihj
b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8
bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKfQojIDQ3ICIvdXNyL2luY2x1ZGUv
ZysrL2xvY2FsZSIgMiAzCiMgMzggIi91c3IvaW5jbHVkZS9nKysvYml0cy9vc3RyZWFtLnRjYyIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6CiAg
ICBzZW50cnkoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MpCiAgICA6IF9NX29r
KF9fb3MuZ29vZCgpKSwgX01fb3MoX19vcykKICAgIHsKCiAgICAgIGlmIChfTV9vayAmJiBfX29z
LnRpZSgpKQogICAgICAgIF9fb3MudGllKCktPmZsdXNoKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVy
YXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikpCiAgICB7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg
ICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpCiAgICB7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9w
ZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoX19z
dHJlYW1idWZfdHlwZSogX19zYmluKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsK
ICAgICAgaWYgKF9fY2VyYiAmJiBfX3NiaW4pCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIV9fY29weV9zdHJlYW1idWZzKCp0aGlzLCBfX3Ni
aW4sIHRoaXMtPnJkYnVmKCkpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3NiaW4pCiAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRv
cjw8KGJvb2wgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChf
TV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkp
CiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgX19uKQogICAgewogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5m
aWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+Zmxh
Z3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2Zh
Y2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBib29s
IF9fYiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBpZiAoKF9fZm10ICYgaW9zX2Jhc2U6Om9j
dCkgfHwgKF9fZm10ICYgaW9zX2Jhc2U6OmhleCkpCiAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nPihfX24pOwogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0
KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1w
dXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAg
ICAgaWYgKF9fYikKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3Bl
cmF0b3I8PCh1bnNpZ25lZCBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAg
ICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBf
X24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBsb25n
IF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFy
X3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwogICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFn
cyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgICAg
ICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgaWYgKChf
X2ZtdCAmIGlvc19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19iYXNlOjpoZXgpKQogICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBf
X2w7CiAgICAgICAgICAgICAgICAgICAgICBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
IGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQo
KnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1
dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZhaWxlZCgpOwogICAgICAgICAgICAgICAg
ICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVy
YXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAg
ICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwo
KSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGRvdWJs
ZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1w
dXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBkb3VibGUgX19uKQogICAgewogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m
bnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlz
LCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVy
YXRvcjw8KGNvbnN0IHZvaWQqIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAg
ICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24p
LmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cHV0KGNoYXJfdHlwZSBfX2MpCiAgICB7
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK
ICAgICAgICAgIGludF90eXBlIF9fcHV0ID0gcmRidWYoKS0+c3B1dGMoX19jKTsKICAgICAgICAg
IGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19wdXQsIHRyYWl0c190eXBlOjplb2YoKSkp
CiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0K
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OndyaXRlKGNvbnN0IF9DaGFyVCogX19zLCBz
dHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgc3RyZWFtc2l6ZSBfX3B1dCA9IHRoaXMtPnJk
YnVmKCktPnNwdXRuKF9fcywgX19uKTsKICAgICAgICAgIGlmICggX19wdXQgIT0gX19uKQogICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpmbHVzaCgpCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0aGlz
LT5yZGJ1ZigpICYmIHRoaXMtPnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIHR5cGVuYW1lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUK
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6dGVsbHAoKQogICAgewogICAgICBw
b3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAg
ICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIs
IGlvc19iYXNlOjpvdXQpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlZWtwKHBv
c190eXBlIF9fcG9zKQogICAgewogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoK
ICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla3BvcyhfX3Bv
cywgaW9zX2Jhc2U6Om91dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZf
dHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7
CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla3Aob2Zm
X3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZCkKICAgIHsKICAgICAgaWYgKCF0aGlz
LT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJk
YnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYg
KF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHR5cGVk
ZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0
eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBf
X3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hh
clQpICogKF9fdyArIDEpKSk7CiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOwogICAgICAg
ICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xl
bikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQoX19vdXQsIF9fb3V0
LmZpbGwoKSwgX19wYWRzLCAmX19jLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAg
ICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0Lndy
aXRlKF9fcGFkcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0
cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBf
VHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJl
YW08Y2hhciwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVh
bV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193
ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cgKyAxKSk7CiAgICAgICAgICAgICAgX19wYWRz
WzBdID0gX19jOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAg
ICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
X19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLCAmX19jLCBfX3csIF9fbGVuLCBmYWxz
ZSk7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0
LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwg
Y29uc3QgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw
ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf
X3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGlj
X2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwog
ICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihf
VHJhaXRzOjpsZW5ndGgoX19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZChfX291dCwgX19vdXQuZmlsbCgp
LCBfX3BhZHMsIF9fcywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX3Mg
PSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9f
b3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
IF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKCgogICAgICB0eXBlZGVmIGNoYXJf
dHJhaXRzPGNoYXI+IF9fdHJhaXRzX3R5cGU7CgogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw
ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogICAgICAg
IHsKICAgICAgICAgIHNpemVfdCBfX2NsZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19zKTsK
ICAgICAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9h
bGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX19jbGVuICsgMSkpKTsKICAgICAgICAgIGZvciAoc2l6
ZV90IF9faSA9IDA7IF9faSA8IF9fY2xlbjsgKytfX2kpCiAgICAgICAgICAgIF9fd3NbX19pXSA9
IF9fb3V0LndpZGVuKF9fc1tfX2ldKTsKICAgICAgICAgIF9DaGFyVCogX19zdHIgPSBfX3dzOwoK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xl
biA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fY2xlbik7CiAgICAgICAgICAgICAgc3RyZWFt
c2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0g
c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9f
dykpOwoKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIF9fcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywgX193cywg
X193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX3N0ciA9IF9fcGFkczsKICAg
ICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgw
KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf
b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAg
ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwog
ICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAg
IGlmIChfX2NlcmIgJiYgX19zKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAg
ICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9f
dykpOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1z
aXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7CgogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xl
bikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQoX19vdXQsIF9fb3V0
LmZpbGwoKSwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAg
ICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAg
ICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwKICAgICAgICAgICAgICAgY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5
cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAg
ICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5k
YXRhKCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAg
ICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eo
c2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0
aWNfY2FzdDxzdHJlYW1zaXplPihfX3N0ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYgKF9fdyA+
IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19wYWQoX19vdXQsIF9fb3V0LmZp
bGwoKSwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICBfX3Mg
PSBfX3BhZHM7CiAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIHN0cmVhbXNpemUgX19yZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbGVuKTsK
ICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgaWYgKF9fcmVzICE9IF9fbGVuKQog
ICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQog
ICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNp
Y19vc3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRsKG9zdHJlYW0m
KTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kcyhvc3RyZWFtJik7CiAgZXh0ZXJuIHRl
bXBsYXRlIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVh
bSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0m
IG9wZXJhdG9yPDwob3N0cmVhbSYsIHVuc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBv
c3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBzaWduZWQgY2hhcik7CiAgZXh0ZXJuIHRlbXBs
YXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsKICBleHRlcm4g
dGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgdW5zaWduZWQgY2hh
ciopOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25z
dCBzaWduZWQgY2hhciopOwoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTx3
Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZGwod29zdHJlYW0mKTsKICBl
eHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZHMod29zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxh
dGUgd29zdHJlYW0mIGZsdXNoKHdvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFt
JiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3Ry
ZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3Ry
ZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVybiB0ZW1w
bGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsKfQojIDI3
NiAiL3Vzci9pbmNsdWRlL2crKy9vc3RyZWFtIiAyIDMKIyA0NiAiL3Vzci9pbmNsdWRlL2crKy9p
b3N0cmVhbSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9pc3RyZWFtIiAxIDMKIyA0MyAiL3Vz
ci9pbmNsdWRlL2crKy9pc3RyZWFtIiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaXN0cmVh
bSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBw
dWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0
czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsK
CgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFt
YnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4gX19pb3Nf
dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3Ry
ZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFp
dHM+IF9faXN0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJULCBfX2lz
dHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+
IF9fY3R5cGVfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBzdHJlYW1zaXplIF9NX2djb3Vu
dDsKCiAgICBwdWJsaWM6CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pc3RyZWFtKF9fc3Ry
ZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbml0KF9fc2IpOwogICAg
ICAgIF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwKICAg
ICAgfmJhc2ljX2lzdHJlYW0oKQogICAgICB7IF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7IH0K
CgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoKCiAgICAg
IF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYp
KF9faXN0cmVhbV90eXBlJikpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y
Pj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSk7CgoKICAg
ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKTsKCiAgICAgIF9f
aXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pOwoKICAgICAgX19pc3Ry
ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbik7CgogICAgICBf
X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihpbnQmIF9fbik7CgogICAgICBfX2lzdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbik7CgogICAgICBfX2lz
dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nJiBfX24pOwoKICAgICAgX19pc3RyZWFt
X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKTsKCgogICAgICBfX2lz
dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbik7CgogICAgICBfX2lz
dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmIF9fbik7CgoK
ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fZik7CgogICAg
ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fZik7CgogICAgICBf
X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19mKTsKCiAgICAg
IF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX3ApOwoKICAgICAgX19p
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoK
ICAgICAgaW5saW5lIHN0cmVhbXNpemUKICAgICAgZ2NvdW50KHZvaWQpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX2djb3VudDsgfQoKICAgICAgaW50X3R5cGUKICAgICAgZ2V0KHZvaWQpOwoKICAg
ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUmIF9fYyk7CgogICAgICBfX2lz
dHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hh
cl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQo
Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5nZXQo
X19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg
ICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAg
ICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3Ni
KQogICAgICB7IHJldHVybiB0aGlzLT5nZXQoX19zYiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFt
c2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlw
ZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsg
cmV0dXJuIHRoaXMtPmdldGxpbmUoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAg
ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiA9IDEsIGludF90
eXBlIF9fZGVsaW0gPSB0cmFpdHNfdHlwZTo6ZW9mKCkpOwoKICAgICAgaW50X3R5cGUKICAgICAg
cGVlayh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICByZWFkKGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHJlYWRzb21lKGNo
YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg
ICAgcHV0YmFjayhjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICB1
bmdldCh2b2lkKTsKCiAgICAgIGludAogICAgICBzeW5jKHZvaWQpOwoKICAgICAgcG9zX3R5cGUK
ICAgICAgdGVsbGcodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cocG9z
X3R5cGUpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKG9mZl90eXBlLCBpb3Nf
YmFzZTo6c2Vla2Rpcik7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNl
bnRyeQogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1i
dWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19p
c3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5
cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50
X3R5cGUgX19pbnRfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIGJvb2wgX19ub3NraXB3cyA9IGZhbHNlKTsKCiAg
ICAgIG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiBfTV9vazsgfQoKICAgIHByaXZhdGU6CiAgICAg
IGJvb2wgX01fb2s7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0
b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKTsK
CiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0
cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVu
c2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9U
cmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFy
VCogX19zKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hh
cixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBf
X2luLCB1bnNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJl
dF9jYXN0PGNoYXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNo
YXIsX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+
PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW0KICAgIDog
cHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiwKICAgICAgcHVibGljIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl
ZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5
cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKICAg
ICAgZXhwbGljaXQKICAgICAgYmFzaWNfaW9zdHJlYW0oYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz4qIF9fc2IpCiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiksIF9fb3N0cmVhbV90
eXBlKF9fc2IpCiAgICAgIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zdHJlYW0o
KSB7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMpOwp9CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysr
L2JpdHMvaXN0cmVhbS50Y2MiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvaXN0cmVh
bS50Y2MiIDMKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2Vu
dHJ5OjoKICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJv
b2wgX19ub3NraXB3cykKICAgIHsKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIHsKICAg
ICAgICAgIGlmIChfX2luLnRpZSgpKQogICAgICAgICAgICBfX2luLnRpZSgpLT5mbHVzaCgpOwog
ICAgICAgICAgaWYgKCFfX25vc2tpcHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tp
cHdzKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2Yg
PSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19z
YiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNn
ZXRjKCk7CgogICAgICAgICAgICAgIGlmIChfX2luLl9NX2NoZWNrX2ZhY2V0KF9faW4uX01fZmN0
eXBlKSkKICAgICAgICAgICAgICAgIHdoaWxlIChfX2MgIT0gX19lb2YKICAgICAgICAgICAgICAg
ICAgICAgICAmJiBfX2luLl9NX2ZjdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAg
ICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwoKCgogICAgICAgICAgICAgIGlm
IChfX2MgPT0gX19lb2YpCiAgICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpl
b2ZiaXQpOwoKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIGlmIChfX2luLmdvb2QoKSkK
ICAgICAgICBfTV9vayA9IHRydWU7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfTV9v
ayA9IGZhbHNlOwogICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAg
ICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3Bm
KShfX2lzdHJlYW1fdHlwZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9f
aW9zX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkK
ICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK
ICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
LCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNl
Ojppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf
ZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMs
IDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vy
cik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihzaG9ydCYgX19u
KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k
Yml0KTsKICAgICAgICAgICAgICBsb25nIF9fbDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf
ZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMs
IDAsICp0aGlzLCBfX2VyciwgX19sKTsKCgogICAgICAgICAgICAgIGlmICghKF9fZXJyICYgaW9z
X2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgICAgICYmIChudW1lcmljX2xpbWl0czxzaG9y
dD46Om1pbigpIDw9IF9fbAogICAgICAgICAgICAgICAgICAgICAgJiYgX19sIDw9IG51bWVyaWNf
bGltaXRzPHNob3J0Pjo6bWF4KCkpKQogICAgICAgICAgICAgICAgX19uID0gX19sOwogICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKQogICAgewogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAg
ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9m
bnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl
cmF0b3I+PihpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2Up
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0
ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICAg
ICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51
bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbCk7CgoKICAgICAgICAgICAgICBp
ZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgICAgICAgICAmJiAobnVt
ZXJpY19saW1pdHM8aW50Pjo6bWluKCkgPD0gX19sCiAgICAgICAgICAgICAgICAgICAgICAmJiBf
X2wgPD0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQogICAgICAgICAgICAgICAgX19uID0g
X19sOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNl
OjpmYWlsYml0OwoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbikKICAg
IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQog
ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAg
ICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0
aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19i
YXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hl
Y2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRo
aXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShf
X2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25l
ZCBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9z
X2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt
Z2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9f
ZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg
ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbikKICAgIHsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAg
ICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy
ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBp
ZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0
LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y
Pj4oZmxvYXQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwog
ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShp
b3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu
dW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywg
X19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX24pCiAgICB7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAg
ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAg
IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9z
X2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9j
aGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq
dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHZvaWQq
JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6
Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkK
ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBf
X24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpCiAg
ICB7CiAgICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgICBpZiAoX19jZXJi
KQogICAgICAgICB7CiAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
IHN0cmVhbXNpemUgX194dHJjdCA9IDA7CiAgICAgICAgICAgICAgIGlmIChfX3Nib3V0KQogICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Jp
biA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgICAgICBfX3h0cmN0ID0gX19jb3B5X3N0
cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICBpZiAoIV9fc2JvdXQgfHwgIV9feHRyY3QpCiAgICAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICAgfQogICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICAgdGhyb3c7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
dHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldCh2b2lkKQogICAgewogICAgICBj
b25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgaW50X3R5cGUg
X19jID0gX19lb2Y7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7Cgog
ICAgICAgICAgICAgIGlmIChfX2MgIT0gX19lb2YpCiAgICAgICAgICAgICAgICBfTV9nY291bnQg
PSAxOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYzsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIGdldChjaGFyX3R5cGUmIF9fYykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRf
dHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBf
X2J1ZnZhbCA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAgICAgICAgICAgICBpZiAoX19i
dWZ2YWwgIT0gX19lb2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9NX2dj
b3VudCA9IDE7CiAgICAgICAgICAgICAgICAgIF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5
cGUoX19idWZ2YWwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFp
bGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSogX19z
LCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3Vu
dCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29u
c3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7
CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7
CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAg
ICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAg
d2hpbGUgKF9NX2djb3VudCArIDEgPCBfX24gJiYgX19jICE9IF9fZW9mICYmIF9fYyAhPSBfX2lk
ZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRz
X3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5z
bmV4dGMoKTsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKICAgICAgaWYg
KCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYg
X19zYiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg
X19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAg
ICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAg
ICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAg
ICAgICBpbnRfdHlwZSBfX2MgPSBfX3RoaXNfc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdo
aWxlIChfX2MgIT0gX19lb2YgJiYgX19jICE9IF9faWRlbGltCiAgICAgICAgICAgICAgICAgICAg
ICYmIChfX3NiLnNwdXRjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSkgIT0gX19lb2Yp
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAg
ICAgICAgICAgICAgX19jID0gX190aGlzX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBl
IF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFp
dHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5
cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZf
dHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0g
X19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCArIDEgPCBfX24g
JiYgX19jICE9IF9fZW9mICYmIF9fYyAhPSBfX2lkZWxpbSkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwog
ICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgICAg
KytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBf
X2VvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwog
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYg
KF9fYyA9PSBfX2lkZWxpbSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Owog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgaWdub3JlKHN0cmVhbXNpemUgX19uLCBpbnRfdHlwZSBfX2RlbGltKQogICAg
ewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog
ICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAg
ICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIF9f
biA9IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7CiAgICAgICAg
ICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAmJiBfX2MgIT1fX2VvZiAmJiBfX2MgIT0gX19k
ZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25l
eHRjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19k
ZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19zYi0+c2J1bXBjKCk7
CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlw
ZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBlZWsodm9pZCkKICAg
IHsKICAgICAgaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291
bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2MgPSB0aGlzLT5yZGJ1
ZigpLT5zZ2V0YygpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJl
YW1zaXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1ZigpLT5z
Z2V0bihfX3MsIF9fbik7CiAgICAgICAgICAgICAgaWYgKF9NX2djb3VudCAhPSBfX24pCiAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZh
aWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikK
ICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1
ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2Yo
KTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYoKS0+aW5fYXZh
aWwoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gIT0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4o
X19lb2YpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX251bSA9IG1pbihf
X251bSwgX19uKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fbnVtKQogICAgICAgICAgICAgICAg
ICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCktPnNnZXRuKF9fcywgX19udW0pOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfTV9nY291bnQ7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBw
dXRiYWNrKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRy
dWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m
KCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7
CiAgICAgICAgICAgICAgaWYgKCFfX3NiIHx8IF9fc2ItPnNwdXRiYWNrYyhfX2MpID09IF9fZW9m
KQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxz
ZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgdW5nZXQodm9pZCkKICAgIHsKICAgICAgX01fZ2NvdW50
ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25z
dCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0
cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9f
c2IgfHwgX19lb2YgPT0gX19zYi0+c3VuZ2V0YygpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbnQKICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzeW5jKHZvaWQpCiAgICB7CiAgICAgIGludCBfX3Jl
dCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni
ID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19yZXQgPT0gX19z
Yi0+cHVic3luYygpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19yZXQgPSAwOwogICAg
ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3Nf
dHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHRlbGxnKHZvaWQp
CiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBfTV9nY291
bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgX19y
ZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNl
Ojppbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKHBvc190eXBlIF9f
cG9zKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
LCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5w
dWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICAgICAgaWYgKF9fZXJy
ID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNl
ZWtnKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikKICAgIHsKICAgICAg
X01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwg
X19kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlvc19iYXNlOjppbik7CgoKICAgICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5
cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpmYWlsYml0KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4s
IF9DaGFyVCYgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNl
bnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg
ICAgICAgIHRyeQogICAgICAgICAgICB7IF9faW4uZ2V0KF9fYyk7IH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX2luLnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19pbi5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luLnNldHN0YXRlKGlv
c19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX2luLCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19p
c3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBf
Q2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBl
OwogICAgICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0
cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBzdHJl
YW1zaXplIF9fbnVtID0gX19pbi53aWR0aCgpOwogICAgICAgICAgICAgIGlmIChfX251bSA9PSAw
KQogICAgICAgICAgICAgICAgX19udW0gPSBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4
KCk7CgogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNl
dDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgICAgIGNvbnN0IGludF90
eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlw
ZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3Ni
LT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX251bSAtIDEK
ICAgICAgICAgICAgICAgICAgICAgJiYgX19jICE9IF9fZW9mICYmICFfX2N0eXBlLmlzKGN0eXBl
X2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAq
X19zKysgPSBfX2M7CiAgICAgICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAg
ICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19i
YXNlOjplb2ZiaXQpOwoKCgogICAgICAgICAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKCiAgICAg
ICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9faW4uc2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNl
dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+
JiBfX2luKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6
X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgY29u
c3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19pbi5n
ZXRsb2MoKSk7CiAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsK
ICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgX19pbnRf
dHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgd2hpbGUgKF9fYyAhPSBfX2VvZiAmJiBf
X2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgIF9fYyA9IF9fc2ItPnNu
ZXh0YygpOwogICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9z
X2Jhc2U6OmVvZmJpdCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19j
dHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBl
OjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0g
MDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZh
bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBfX3N0ci5lcmFzZSgp
OwogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX2luLndpZHRoKCk7CiAgICAgICAgICBfX3Np
emVfdHlwZSBfX247CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXpl
X3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIGNvbnN0IF9fY3R5cGVf
dHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwog
ICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAg
ICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9faW50
X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQg
PCBfX24KICAgICAgICAgICAgICAgICAmJiBfX2MgIT0gX19lb2YgJiYgIV9fY3R5cGUuaXMoY3R5
cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciAr
PSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVk
OwogICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICB9CiAgICAg
ICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl
Ojplb2ZiaXQpOwogICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICB9CgoKICAgICAgaWYg
KCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNldHN0YXRlIChpb3NfYmFzZTo6ZmFpbGJpdCk7
CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg
X19pbiwKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19zdHIsIF9DaGFyVCBfX2RlbGltKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90
eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4g
X19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXpl
X3R5cGUgX19zaXplX3R5cGU7CgogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7CiAg
ICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBmYWxzZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5
cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg
ewogICAgICAgICAgX19zdHIuZXJhc2UoKTsKICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbiA9IF9f
c3RyLm1heF9zaXplKCk7CgogICAgICAgICAgX19pbnRfdHlwZSBfX2lkZWxpbSA9IF9UcmFpdHM6
OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9
IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7
CiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAg
ICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKCiAgICAgICAgICB3aGlsZSAoX19l
eHRyYWN0ZWQgPD0gX19uICYmIF9fYyAhPSBfX2VvZiAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsK
ICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNi
dW1wYygpOwogICAgICAgICAgICAgIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAg
ICAgICAgICB9CiAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgICAgICBfX2luLnNl
dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3Rl
ZCAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp
dCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNs
YXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFy
VCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf
X2luLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19z
dHIpCiAgICB7IHJldHVybiBnZXRsaW5lKF9faW4sIF9fc3RyLCBfX2luLndpZGVuKCdcbicpKTsg
fQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaXN0cmVhbTxjaGFyPjsKICBleHRl
cm4gdGVtcGxhdGUgaXN0cmVhbSYgd3MoaXN0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJl
YW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNoYXIqKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVh
bSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0
ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBzaWduZWQgY2hhciYpOwogIGV4dGVybiB0
ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCB1bnNpZ25lZCBjaGFyKik7CiAg
ZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHNpZ25lZCBjaGFy
Kik7CgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+OwogIGV4
dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd3Mod2lzdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUg
d2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCB3Y2hhcl90Jik7CiAgZXh0ZXJuIHRlbXBs
YXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgd2NoYXJfdCopOwp9CiMgMjg4ICIv
dXNyL2luY2x1ZGUvZysrL2lzdHJlYW0iIDIgMwojIDQ3ICIvdXNyL2luY2x1ZGUvZysrL2lvc3Ry
ZWFtIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIGV4dGVybiBpc3RyZWFtIGNpbjsKICBleHRlcm4g
b3N0cmVhbSBjb3V0OwogIGV4dGVybiBvc3RyZWFtIGNlcnI7CiAgZXh0ZXJuIG9zdHJlYW0gY2xv
ZzsKCiAgZXh0ZXJuIHdpc3RyZWFtIHdjaW47CiAgZXh0ZXJuIHdvc3RyZWFtIHdjb3V0OwogIGV4
dGVybiB3b3N0cmVhbSB3Y2VycjsKICBleHRlcm4gd29zdHJlYW0gd2Nsb2c7CgoKCiAgc3RhdGlj
IGlvc19iYXNlOjpJbml0IF9faW9pbml0Owp9CiMgMjAgIk1hcC5jcHAiIDIKIyAxICIvdXNyL2lu
Y2x1ZGUvZysrL2ZzdHJlYW0iIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvZysrL2ZzdHJlYW0iIDMK
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9pNDg2LXN1c2UtbGludXgvYml0cy9iYXNpY19maWxl
LmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2Jhc2lj
X2ZpbGUuaCIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGNsYXNzIF9fYmFzaWNfZmlsZTsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIF9fYmFz
aWNfZmlsZTxjaGFyPgogICAgewoKICAgICAgX19jX2ZpbGUqIF9NX2NmaWxlOwoKICAgICAgYm9v
bCBfTV9jZmlsZV9jcmVhdGVkOwoKICAgIHB1YmxpYzoKICAgICAgX19iYXNpY19maWxlKF9fY19s
b2NrKiBfX2xvY2sgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgX01fb3Blbl9tb2RlKGlvc19iYXNl
OjpvcGVubW9kZSBfX21vZGUsIGludCYgX19wX21vZGUsIGludCYgX19yd19tb2RlLAogICAgICAg
ICAgICAgICAgICAgY2hhciogX19jX21vZGUpOwoKICAgICAgX19iYXNpY19maWxlKgogICAgICBv
cGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgaW50IF9f
cHJvdCA9IDA2NjQpOwoKICAgICAgX19iYXNpY19maWxlKgogICAgICBzeXNfb3BlbihfX2NfZmls
ZSogX19maWxlLCBpb3NfYmFzZTo6b3Blbm1vZGUpOwoKICAgICAgX19iYXNpY19maWxlKgogICAg
ICBzeXNfb3BlbihpbnQgX19mZCwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgYm9vbCBfX2Rl
bCk7CgogICAgICBpbnQKICAgICAgc3lzX2dldGMoKTsKCiAgICAgIGludAogICAgICBzeXNfdW5n
ZXRjKGludCk7CgogICAgICBfX2Jhc2ljX2ZpbGUqCiAgICAgIGNsb3NlKCk7CgogICAgICBib29s
CiAgICAgIGlzX29wZW4oKSBjb25zdDsKCiAgICAgIGludAogICAgICBmZCgpOwoKICAgICAgfl9f
YmFzaWNfZmlsZSgpOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICB4c3B1dG4oY29uc3QgY2hhciog
X19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHhzZ2V0bihjaGFy
KiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbW9mZgogICAgICBzZWVrb2ZmKHN0
cmVhbW9mZiBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAgaW9z
X2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOwoK
ICAgICAgc3RyZWFtb2ZmCiAgICAgIHNlZWtwb3Moc3RyZWFtb2ZmIF9fcG9zLAogICAgICAgICAg
ICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6
b3V0KTsKCiAgICAgIGludAogICAgICBzeW5jKCk7CiAgICB9Owp9CiMgNDkgIi91c3IvaW5jbHVk
ZS9nKysvZnN0cmVhbSIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZiA6IHB1Ymxp
YyBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7
CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4g
X19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwg
dHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIF9fYmFzaWNfZmlsZTxj
aGFyPiBfX2ZpbGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6c3Rh
dGVfdHlwZSBfX3N0YXRlX3R5cGU7CiAgICAgIHR5cGVkZWYgY29kZWN2dDxjaGFyX3R5cGUsIGNo
YXIsIF9fc3RhdGVfdHlwZT4gX19jb2RlY3Z0X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X19jb2RlY3Z0X3R5cGU6OnJlc3VsdCBfX3Jlc190eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPGNo
YXJfdHlwZT4gX19jdHlwZV90eXBlOwoKICAgICAgZnJpZW5kIGNsYXNzIGlvc19iYXNlOwoKICAg
IHByb3RlY3RlZDoKCgogICAgICBfX2NfbG9jayBfTV9sb2NrOwoKCiAgICAgIF9fZmlsZV90eXBl
IF9NX2ZpbGU7CgoKICAgICAgX19zdGF0ZV90eXBlIF9NX3N0YXRlX2N1cjsKICAgICAgX19zdGF0
ZV90eXBlIF9NX3N0YXRlX2JlZzsKCgogICAgICBib29sIF9NX2J1Zl9hbGxvY2F0ZWQ7CgoKICAg
ICAgYm9vbCBfTV9sYXN0X292ZXJmbG93ZWQ7CgoKCiAgICAgIGNoYXJfdHlwZSogX01fZmlsZXBv
czsKCiAgICBwdWJsaWM6CgogICAgICBiYXNpY19maWxlYnVmKCk7CgogICAgICB2aXJ0dWFsCiAg
ICAgIH5iYXNpY19maWxlYnVmKCkKICAgICAgewogICAgICAgIHRoaXMtPmNsb3NlKCk7CiAgICAg
ICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgIH0KCgogICAgICBib29sCiAgICAg
IGlzX29wZW4oKSBjb25zdCB7IHJldHVybiBfTV9maWxlLmlzX29wZW4oKTsgfQoKICAgICAgX19m
aWxlYnVmX3R5cGUqCiAgICAgIG9wZW4oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1v
ZGUgX19tb2RlKTsKCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICBjbG9zZSgpOwoKICAgIHBy
b3RlY3RlZDoKICAgICAgdm9pZAogICAgICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKTsK
CiAgICAgIHZvaWQKICAgICAgX01fZGVzdHJveV9pbnRlcm5hbF9idWZmZXIoKTsKCgogICAgICB2
aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc2hvd21hbnljKCk7CiMgMTQwICIvdXNyL2luY2x1ZGUv
ZysrL2ZzdHJlYW0iIDMKICAgICAgaW50X3R5cGUKICAgICAgX01fdW5kZXJmbG93X2NvbW1vbihi
b29sIF9fYnVtcCk7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVuZGVyZmxvdygpIHsg
cmV0dXJuIF9NX3VuZGVyZmxvd19jb21tb24oZmFsc2UpOyB9CgogICAgICB2aXJ0dWFsIGludF90
eXBlCiAgICAgIHVmbG93KCkgeyByZXR1cm4gX01fdW5kZXJmbG93X2NvbW1vbih0cnVlKTsgfQoK
ICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBwYmFja2ZhaWwoaW50X3R5cGUgX19jID0gX1Ry
YWl0czo6ZW9mKCkpOwojIDE2MCAiL3Vzci9pbmNsdWRlL2crKy9mc3RyZWFtIiAzCiAgICAgIHZp
cnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgX19jID0gX1RyYWl0czo6ZW9m
KCkpOwojIDE3MCAiL3Vzci9pbmNsdWRlL2crKy9mc3RyZWFtIiAzCiAgICAgIGludF90eXBlCiAg
ICAgIF9NX3JlYWxseV9vdmVyZmxvdyhpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7CgoK
CiAgICAgIHZvaWQKICAgICAgX01fY29udmVydF90b19leHRlcm5hbChjaGFyX3R5cGUqLCBzdHJl
YW1zaXplLCBzdHJlYW1zaXplJiwgc3RyZWFtc2l6ZSYpOwoKICAgICAgdmlydHVhbCBfX3N0cmVh
bWJ1Zl90eXBlKgogICAgICBzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsK
CiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9z
X2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9f
bW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOwoKICAgICAgdmlydHVhbCBwb3Nf
dHlwZQogICAgICBzZWVrcG9zKHBvc190eXBlIF9fcG9zLAogICAgICAgICAgICAgIGlvc19iYXNl
OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCiAgICAg
IHZpcnR1YWwgaW50CiAgICAgIHN5bmMoKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RwdXQg
PSBfTV9vdXRfY3VyICYmIF9NX291dF9iZWcgPCBfTV9vdXRfZW5kOwoKCgogICAgICAgIGlmIChf
X3Rlc3RwdXQpCiAgICAgICAgICB7CgogICAgICAgICAgICBvZmZfdHlwZSBfX29mZiA9IF9NX291
dF9jdXIgLSBfTV9vdXRfZW5kOwogICAgICAgICAgICBfTV9yZWFsbHlfb3ZlcmZsb3coKTsKICAg
ICAgICAgICAgaWYgKF9fb2ZmKQogICAgICAgICAgICAgIF9NX2ZpbGUuc2Vla29mZihfX29mZiwg
aW9zX2Jhc2U6OmN1cik7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX01fZmls
ZS5zeW5jKCk7CiAgICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgICAgcmV0
dXJuIDA7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBpbWJ1ZShjb25zdCBsb2Nh
bGUmIF9fbG9jKTsKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3Jl
dCA9IDA7CgogICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgewogICAgICAgICAg
ICB3aGlsZSAoX19yZXQgPCBfX24gJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICpfX3MgPSAqX01faW5fY3VyOwogICAgICAgICAgICAgICAg
KytfX3JldDsKICAgICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgICAgKytfTV9pbl9j
dXI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBfTV9wYmFja19kZXN0cm95KCk7CiAgICAg
ICAgICB9CiAgICAgICAgaWYgKF9fcmV0IDwgX19uKQogICAgICAgICAgX19yZXQgKz0gX19zdHJl
YW1idWZfdHlwZTo6eHNnZXRuKF9fcywgX19uIC0gX19yZXQpOwogICAgICAgIHJldHVybiBfX3Jl
dDsKICAgICAgfQoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzcHV0bihjb25zdCBj
aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsKICAgICAgICBfTV9wYmFja19k
ZXN0cm95KCk7CiAgICAgICAgcmV0dXJuIF9fc3RyZWFtYnVmX3R5cGU6OnhzcHV0bihfX3MsIF9f
bik7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fb3V0cHV0X3Vuc2hpZnQoKTsKIyAyNTEg
Ii91c3IvaW5jbHVkZS9nKysvZnN0cmVhbSIgMwogICAgICB2b2lkCiAgICAgIF9NX3NldF9pbmRl
dGVybWluYXRlKHZvaWQpCiAgICAgIHsKICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjpp
bikKICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1Zik7CiAgICAgICAg
aWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgdGhpcy0+c2V0cChfTV9idWYs
IF9NX2J1Zik7CiAgICAgICAgX01fZmlsZXBvcyA9IF9NX2J1ZjsKICAgICAgfQoKICAgICAgdm9p
ZAogICAgICBfTV9zZXRfZGV0ZXJtaW5hdGUob2ZmX3R5cGUgX19vZmYpCiAgICAgIHsKICAgICAg
ICBib29sIF9fdGVzdGluID0gX01fbW9kZSAmIGlvc19iYXNlOjppbjsKICAgICAgICBib29sIF9f
dGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICAgIGlmIChfX3Rlc3RpbikK
ICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1ZiArIF9fb2ZmKTsKICAg
ICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgdGhpcy0+c2V0cChfTV9idWYsIF9NX2J1ZiAr
IF9fb2ZmKTsKICAgICAgICBfTV9maWxlcG9zID0gX01fYnVmICsgX19vZmY7CiAgICAgIH0KCiAg
ICAgIGJvb2wKICAgICAgX01faXNfaW5kZXRlcm1pbmF0ZSh2b2lkKQogICAgICB7CiAgICAgICAg
Ym9vbCBfX3JldCA9IGZhbHNlOwoKICAgICAgICBpZiAoX01fYnVmKQogICAgICAgICAgewogICAg
ICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjppbikKICAgICAgICAgICAgICBfX3JldCA9
IF9NX2luX2JlZyA9PSBfTV9pbl9jdXIgJiYgX01faW5fY3VyID09IF9NX2luX2VuZDsKICAgICAg
ICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgICAgIF9fcmV0ID0g
X01fb3V0X2JlZyA9PSBfTV9vdXRfY3VyICYmIF9NX291dF9jdXIgPT0gX01fb3V0X2VuZDsKICAg
ICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KICAgIH07CgoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2lj
X2lmc3RyZWFtIDogcHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPgogICAgewog
ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm
IF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6
OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpw
b3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2Zm
X3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwg
dHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08
Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAg
ICAgX19maWxlYnVmX3R5cGUgX01fZmlsZWJ1ZjsKCiAgICBwdWJsaWM6CgoKICAgICAgYmFzaWNf
aWZzdHJlYW0oKQogICAgICA6IF9faXN0cmVhbV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQog
ICAgICB7IHRoaXMtPmluaXQoJl9NX2ZpbGVidWYpOyB9CiMgMzI4ICIvdXNyL2luY2x1ZGUvZysr
L2ZzdHJlYW0iIDMKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaWZzdHJlYW0oY29uc3QgY2hh
ciogX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluKQogICAgICA6
IF9faXN0cmVhbV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQogICAgICB7CiAgICAgICAgdGhp
cy0+aW5pdCgmX01fZmlsZWJ1Zik7CiAgICAgICAgdGhpcy0+b3BlbihfX3MsIF9fbW9kZSk7CiAg
ICAgIH0KCiAgICAgIH5iYXNpY19pZnN0cmVhbSgpCiAgICAgIHsgfQoKCgoKCgogICAgICBfX2Zp
bGVidWZfdHlwZSoKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0
PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9CgogICAgICBib29sCiAgICAgIGlzX29w
ZW4oKSB7IHJldHVybiBfTV9maWxlYnVmLmlzX29wZW4oKTsgfQoKICAgICAgdm9pZAogICAgICBv
cGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNl
OjppbikKICAgICAgewogICAgICAgIGlmICghX01fZmlsZWJ1Zi5vcGVuKF9fcywgX19tb2RlIHwg
aW9zX2Jhc2U6OmluKSkKICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0
KTsKICAgICAgfQoKCiAgICAgIHZvaWQKICAgICAgY2xvc2UoKQogICAgICB7CiAgICAgICAgaWYg
KCFfTV9maWxlYnVmLmNsb3NlKCkpCiAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
ZmFpbGJpdCk7CiAgICAgIH0KICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW0gOiBwdWJsaWMgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk
ZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAg
IHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZf
dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+
IF9fb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIF9fZmlsZWJ1Zl90eXBlIF9NX2Zp
bGVidWY7CgogICAgcHVibGljOgoKCiAgICAgIGJhc2ljX29mc3RyZWFtKCkKICAgICAgOiBfX29z
dHJlYW1fdHlwZShfX251bGwpLCBfTV9maWxlYnVmKCkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9m
aWxlYnVmKTsgfQojIDQwNSAiL3Vzci9pbmNsdWRlL2crKy9mc3RyZWFtIiAzCiAgICAgIGV4cGxp
Y2l0CiAgICAgIGJhc2ljX29mc3RyZWFtKGNvbnN0IGNoYXIqIF9fcywKICAgICAgICAgICAgICAg
ICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpvdXR8aW9zX2Jhc2U6
OnRydW5jKQogICAgICA6IF9fb3N0cmVhbV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQogICAg
ICB7CiAgICAgICAgdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7CiAgICAgICAgdGhpcy0+b3Blbihf
X3MsIF9fbW9kZSk7CiAgICAgIH0KCiAgICAgIH5iYXNpY19vZnN0cmVhbSgpCiAgICAgIHsgfQoK
CgoKCgogICAgICBfX2ZpbGVidWZfdHlwZSoKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJl
dHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9CgoKCgoKICAg
ICAgYm9vbAogICAgICBpc19vcGVuKCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0K
IyA0NDEgIi91c3IvaW5jbHVkZS9nKysvZnN0cmVhbSIgMwogICAgICB2b2lkCiAgICAgIG9wZW4o
Y29uc3QgY2hhciogX19zLAogICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBp
b3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OnRydW5jKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9m
aWxlYnVmLm9wZW4oX19zLCBfX21vZGUgfCBpb3NfYmFzZTo6b3V0KSkKICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQoKCiAgICAgIHZvaWQKICAgICAg
Y2xvc2UoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxlYnVmLmNsb3NlKCkpCiAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIH0KICAgIH07CgoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3Mg
YmFzaWNfZnN0cmVhbSA6IHB1YmxpYyBiYXNpY19pb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5
cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNf
dHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5
cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBl
OjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcl90
eXBlLCB0cmFpdHNfdHlwZT4gX19maWxlYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9z
PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
aW9zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pb3N0cmVhbV90eXBlOwoKICAgIHBy
aXZhdGU6CiAgICAgIF9fZmlsZWJ1Zl90eXBlIF9NX2ZpbGVidWY7CgogICAgcHVibGljOgoKCiAg
ICAgIGJhc2ljX2ZzdHJlYW0oKQogICAgICA6IF9faW9zdHJlYW1fdHlwZShfX251bGwpLCBfTV9m
aWxlYnVmKCkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsgfQojIDQ5NyAiL3Vzci9p
bmNsdWRlL2crKy9mc3RyZWFtIiAzCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2ZzdHJlYW0o
Y29uc3QgY2hhciogX19zLAogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBf
X21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICA6IF9faW9zdHJlYW1f
dHlwZShfX251bGwpLCBfTV9maWxlYnVmKCkKICAgICAgewogICAgICAgIHRoaXMtPmluaXQoJl9N
X2ZpbGVidWYpOwogICAgICAgIHRoaXMtPm9wZW4oX19zLCBfX21vZGUpOwogICAgICB9CgogICAg
ICB+YmFzaWNfZnN0cmVhbSgpCiAgICAgIHsgfQoKCgoKCgogICAgICBfX2ZpbGVidWZfdHlwZSoK
ICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90
eXBlKj4oJl9NX2ZpbGVidWYpOyB9CgoKCgoKICAgICAgYm9vbAogICAgICBpc19vcGVuKCkgeyBy
ZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0KIyA1MzMgIi91c3IvaW5jbHVkZS9nKysvZnN0
cmVhbSIgMwogICAgICB2b2lkCiAgICAgIG9wZW4oY29uc3QgY2hhciogX19zLAogICAgICAgICAg
IGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0
KQogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxlYnVmLm9wZW4oX19zLCBfX21vZGUpKQogICAg
ICAgICAgc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CgoKICAgICAgdm9pZAog
ICAgICBjbG9zZSgpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGVidWYuY2xvc2UoKSkKICAg
ICAgICAgIHNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQogICAgfTsKfQoKCgoK
CiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2ZzdHJlYW0udGNjIiAxIDMKIyAzOSAiL3Vzci9p
bmNsdWRlL2crKy9iaXRzL2ZzdHJlYW0udGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19m
aWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgX01fYWxsb2NhdGVfaW50ZXJuYWxfYnVmZmVy
KCkKICAgIHsKICAgICAgaWYgKCFfTV9idWYgJiYgX01fYnVmX3NpemVfb3B0KQogICAgICAgIHsK
ICAgICAgICAgIF9NX2J1Zl9zaXplID0gX01fYnVmX3NpemVfb3B0OwoKCiAgICAgICAgICBfTV9i
dWYgPSBuZXcgY2hhcl90eXBlW19NX2J1Zl9zaXplXTsKICAgICAgICAgIF9NX2J1Zl9hbGxvY2F0
ZWQgPSB0cnVlOwogICAgICAgIH0KICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpCiAgICB7CiAgICAgIGlmIChf
TV9idWZfYWxsb2NhdGVkKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBbXSBfTV9idWY7CiAg
ICAgICAgICBfTV9idWYgPSBfX251bGw7CiAgICAgICAgICBfTV9idWZfYWxsb2NhdGVkID0gZmFs
c2U7CiAgICAgICAgICB0aGlzLT5zZXRnKF9fbnVsbCwgX19udWxsLCBfX251bGwpOwogICAgICAg
ICAgdGhpcy0+c2V0cChfX251bGwsIF9fbnVsbCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19maWxlYnVmPF9D
aGFyVCwgX1RyYWl0cz46OgogICAgYmFzaWNfZmlsZWJ1ZigpIDogX19zdHJlYW1idWZfdHlwZSgp
LCBfTV9maWxlKCZfTV9sb2NrKSwKICAgIF9NX3N0YXRlX2N1cihfX3N0YXRlX3R5cGUoKSksIF9N
X3N0YXRlX2JlZyhfX3N0YXRlX3R5cGUoKSksCiAgICBfTV9idWZfYWxsb2NhdGVkKGZhbHNlKSwg
X01fbGFzdF9vdmVyZmxvd2VkKGZhbHNlKQogICAgeyBfTV9idWZfdW5pZmllZCA9IHRydWU7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5h
bWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX2ZpbGVidWZfdHlwZSoKICAgIGJh
c2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywg
aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkKICAgIHsKICAgICAgX19maWxlYnVmX3R5cGUgKl9f
cmV0ID0gX19udWxsOwogICAgICBpZiAoIXRoaXMtPmlzX29wZW4oKSkKICAgICAgICB7CiAgICAg
ICAgICBfTV9maWxlLm9wZW4oX19zLCBfX21vZGUpOwogICAgICAgICAgaWYgKHRoaXMtPmlzX29w
ZW4oKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1
ZmZlcigpOwogICAgICAgICAgICAgIF9NX21vZGUgPSBfX21vZGU7CgoKICAgICAgICAgICAgICBf
TV9zZXRfaW5kZXRlcm1pbmF0ZSgpOwogICAgICAgICAgICAgIGlmICgoX19tb2RlICYgaW9zX2Jh
c2U6OmF0ZSkKICAgICAgICAgICAgICAgICAgJiYgdGhpcy0+c2Vla29mZigwLCBpb3NfYmFzZTo6
ZW5kLCBfX21vZGUpIDwgMCkKICAgICAgICAgICAgICAgIHRoaXMtPmNsb3NlKCk7CiAgICAgICAg
ICAgICAgX19yZXQgPSB0aGlzOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g
X19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6X19maWxlYnVm
X3R5cGUqCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgY2xvc2UoKQog
ICAgewogICAgICBfX2ZpbGVidWZfdHlwZSAqX19yZXQgPSBfX251bGw7CiAgICAgIGlmICh0aGlz
LT5pc19vcGVuKCkpCiAgICAgICAgewogICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0
cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICBib29sIF9fdGVzdHB1dCA9IF9NX291dF9jdXIg
JiYgX01fb3V0X2JlZyA8IF9NX291dF9lbmQ7CiAgICAgICAgICBpZiAoX190ZXN0cHV0ICYmIF9N
X3JlYWxseV9vdmVyZmxvdyhfX2VvZikgPT0gX19lb2YpCiAgICAgICAgICAgIHJldHVybiBfX3Jl
dDsKCgogICAgICAgICAgX01fbW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsKICAgICAgICAg
IF9NX2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVyKCk7CiAgICAgICAgICBfTV9wYmFja19kZXN0cm95
KCk7CiMgMTMyICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvZnN0cmVhbS50Y2MiIDMKICAgICAgICAg
IGlmIChfTV9maWxlLmNsb3NlKCkpCiAgICAgICAgICAgIF9fcmV0ID0gdGhpczsKICAgICAgICB9
CgogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgcmV0dXJuIF9fcmV0Owog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBz
dHJlYW1zaXplCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2hvd21h
bnljKCkKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IC0xOwogICAgICBib29sIF9fdGVz
dGluID0gX01fbW9kZSAmIGlvc19iYXNlOjppbjsKCiAgICAgIGlmIChfX3Rlc3RpbiAmJiB0aGlz
LT5pc19vcGVuKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9NX2luX2N1ciA8IF9NX2luX2Vu
ZCkKICAgICAgICAgICAgX19yZXQgPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICBl
bHNlCiAgICAgICAgICAgIF9fcmV0ID0gMDsKICAgICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZs
b3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8
X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBfTV91bmRlcmZsb3dfY29tbW9uKGJvb2wgX19idW1wKQogICAgewogICAgICBp
bnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgYm9vbCBfX3Rlc3RpbiA9
IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAm
IGlvc19iYXNlOjpvdXQ7CgogICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgewoKCgogICAgICAg
ICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9wYmFj
a19kZXN0cm95KCk7CiAgICAgICAgICAgICAgaWYgKF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAg
ICAgICAgICAgICAgIHJldHVybiB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7
CiAgICAgICAgICAgIH0KCgoKICAgICAgICAgIGJvb2wgX190ZXN0Z2V0ID0gX01faW5fY3VyICYm
IF9NX2luX2JlZyA8IF9NX2luX2N1cjsKICAgICAgICAgIGJvb2wgX190ZXN0aW5pdCA9IF9NX2lz
X2luZGV0ZXJtaW5hdGUoKTsKICAgICAgICAgIGlmIChfX3Rlc3RnZXQpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgICAgICAgX01fcmVhbGx5X292
ZXJmbG93KCk7CiAgICAgICAgICAgICAgZWxzZSBpZiAoX01faW5fY3VyICE9IF9NX2ZpbGVwb3Mp
CiAgICAgICAgICAgICAgICBfTV9maWxlLnNlZWtvZmYoX01faW5fY3VyIC0gX01fZmlsZXBvcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6
aW4pOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9fdGVzdGluaXQgfHwgX190ZXN0Z2V0
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gdGhpcy0+
Z2V0bG9jKCk7CiAgICAgICAgICAgICAgY29uc3QgX19jb2RlY3Z0X3R5cGUmIF9fY3Z0ID0gdXNl
X2ZhY2V0PF9fY29kZWN2dF90eXBlPihfX2xvYyk7CgogICAgICAgICAgICAgIHN0cmVhbXNpemUg
X19lbGVuID0gMDsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9faWxlbiA9IDA7CiAgICAgICAg
ICAgICAgaWYgKF9fY3Z0LmFsd2F5c19ub2NvbnYoKSkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgX19lbGVuID0gX01fZmlsZS54c2dldG4ocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oX01faW5fYmVnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X01fYnVmX3NpemUpOwogICAgICAgICAgICAgICAgICBfX2lsZW4gPSBfX2VsZW47CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBjaGFyKiBfX2J1ZiA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2Nh
KF9NX2J1Zl9zaXplKSk7CiAgICAgICAgICAgICAgICAgIF9fZWxlbiA9IF9NX2ZpbGUueHNnZXRu
KF9fYnVmLCBfTV9idWZfc2l6ZSk7CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2Vl
bmQ7CiAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZSogX19pZW5kOwogICAgICAgICAgICAgICAg
ICBfX3Jlc190eXBlIF9fciA9IF9fY3Z0LmluKF9NX3N0YXRlX2N1ciwgX19idWYsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWYgKyBfX2VsZW4sIF9fZWVu
ZCwgX01faW5fYmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9NX2luX2JlZyArIF9NX2J1Zl9zaXplLCBfX2llbmQpOwogICAgICAgICAgICAgICAgICBpZiAo
X19yID09IGNvZGVjdnRfYmFzZTo6b2spCiAgICAgICAgICAgICAgICAgICAgX19pbGVuID0gX19p
ZW5kIC0gX01faW5fYmVnOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgewoKICAgICAgICAgICAgICAgICAgICAgIF9faWxlbiA9IDA7CiAgICAgICAgICAgICAgICAg
ICAgICBfTV9maWxlLnNlZWtvZmYoLV9fZWxlbiwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6Omlu
KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
IGlmICgwIDwgX19pbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfTV9z
ZXRfZGV0ZXJtaW5hdGUoX19pbGVuKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdG91dCkK
ICAgICAgICAgICAgICAgICAgICBfTV9vdXRfY3VyID0gX01faW5fY3VyOwogICAgICAgICAgICAg
ICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAg
ICAgICAgICAgICAgaWYgKF9fYnVtcCkKICAgICAgICAgICAgICAgICAgICBfTV9pbl9jdXJfbW92
ZSgxKTsKICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX01fYnVmX3NpemUgPT0gMSkKICAgICAg
ICAgICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgICAgICAgICBfTV9maWxlLnN5c191bmdl
dGMoKl9NX2luX2N1cik7CiAgICAgICAgICAgICAgICAgICAgICBfTV9zZXRfaW5kZXRlcm1pbmF0
ZSgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgIHJldHVy
biBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlw
ZQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBiYWNrZmFpbChpbnRf
dHlwZSBfX2kpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigp
OwogICAgICBib29sIF9fdGVzdGluID0gX01fbW9kZSAmIGlvc19iYXNlOjppbjsKCiAgICAgIGlm
IChfX3Rlc3RpbikKICAgICAgICB7CiAgICAgICAgICBib29sIF9fdGVzdHBiID0gX01faW5fYmVn
IDwgX01faW5fY3VyOwogICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRyYWl0c190eXBlOjp0b19j
aGFyX3R5cGUoX19pKTsKICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gdHJhaXRzX3R5cGU6OmVx
X2ludF90eXBlKF9faSwgX19yZXQpOwoKICAgICAgICAgIGlmIChfX3Rlc3RwYikKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpv
dXQ7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RlcSA9IHRyYWl0c190eXBlOjplcShfX2MsIHRo
aXMtPmdwdHIoKVstMV0pOwoKCgogICAgICAgICAgICAgIGlmICghX190ZXN0ZW9mICYmIF9fdGVz
dGVxKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAtLV9NX2luX2N1cjsKICAg
ICAgICAgICAgICAgICAgaWYgKF9fdGVzdG91dCkKICAgICAgICAgICAgICAgICAgICAtLV9NX291
dF9jdXI7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gX19pOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgLS1fTV9pbl9jdXI7CiAgICAgICAgICAgICAgICAgIGlmIChfX3Rlc3RvdXQp
CiAgICAgICAgICAgICAgICAgICAgLS1fTV9vdXRfY3VyOwogICAgICAgICAgICAgICAgICBfX3Jl
dCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9faSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgZWxzZSBpZiAoIV9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgLS1fTV9pbl9jdXI7CiAgICAgICAgICAgICAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAg
ICAgICAgICAgICAgICAgLS1fTV9vdXRfY3VyOwogICAgICAgICAgICAgICAgICBfTV9wYmFja19j
cmVhdGUoKTsKICAgICAgICAgICAgICAgICAgKl9NX2luX2N1ciA9IF9fYzsKICAgICAgICAgICAg
ICAgICAgX19yZXQgPSBfX2k7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2Vla29mZigtMSwg
aW9zX2Jhc2U6OmN1cik7CiAgICAgICAgICAgICAgdGhpcy0+dW5kZXJmbG93KCk7CiAgICAgICAg
ICAgICAgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
IGlmICghdHJhaXRzX3R5cGU6OmVxKF9fYywgKl9NX2luX2N1cikpCiAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgX01fcGJhY2tfY3JlYXRlKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAqX01faW5fY3VyID0gX19jOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgX19yZXQgPSBfX2k7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2kpOwog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsK
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
cz46OmludF90eXBlCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Zl
cmZsb3coaW50X3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190
eXBlOjplb2YoKTsKICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYmIF9NX291dF9j
dXIgPCBfTV9idWYgKyBfTV9idWZfc2l6ZTsKICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9tb2Rl
ICYgaW9zX2Jhc2U6Om91dDsKCiAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAgICAgewogICAgICAg
ICAgaWYgKF9fdGVzdHB1dCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICpfTV9vdXRfY3Vy
ID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgIF9NX291dF9j
dXJfbW92ZSgxKTsKICAgICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9f
Yyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19yZXQgPSB0aGlz
LT5fTV9yZWFsbHlfb3ZlcmZsb3coX19jKTsKICAgICAgICB9CgogICAgICBfTV9sYXN0X292ZXJm
bG93ZWQgPSBmYWxzZTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19maWxlYnVm
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgX01fY29udmVydF90b19leHRlcm5hbChfQ2hhclQqIF9f
aWJ1Ziwgc3RyZWFtc2l6ZSBfX2lsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVh
bXNpemUmIF9fZWxlbiwgc3RyZWFtc2l6ZSYgX19wbGVuKQogICAgewogICAgICBjb25zdCBsb2Nh
bGUgX19sb2MgPSB0aGlzLT5nZXRsb2MoKTsKICAgICAgY29uc3QgX19jb2RlY3Z0X3R5cGUmIF9f
Y3Z0ID0gdXNlX2ZhY2V0PF9fY29kZWN2dF90eXBlPihfX2xvYyk7CgogICAgICBpZiAoX19jdnQu
YWx3YXlzX25vY29udigpICYmIF9faWxlbikKICAgICAgICB7CiAgICAgICAgICBfX2VsZW4gKz0g
X01fZmlsZS54c3B1dG4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19pYnVmKSwgX19pbGVuKTsK
ICAgICAgICAgIF9fcGxlbiArPSBfX2lsZW47CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg
ewoKICAgICAgICAgIGludCBfX2V4dF9tdWx0aXBsaWVyID0gX19jdnQuZW5jb2RpbmcoKTsKICAg
ICAgICAgIGlmIChfX2V4dF9tdWx0aXBsaWVyID09IC0xIHx8IF9fZXh0X211bHRpcGxpZXIgPT0g
MCkKICAgICAgICAgICAgX19leHRfbXVsdGlwbGllciA9IHNpemVvZihjaGFyX3R5cGUpOwogICAg
ICAgICAgc3RyZWFtc2l6ZSBfX2JsZW4gPSBfX2lsZW4gKiBfX2V4dF9tdWx0aXBsaWVyOwogICAg
ICAgICAgY2hhciogX19idWYgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShf
X2JsZW4pKTsKICAgICAgICAgIGNoYXIqIF9fYmVuZDsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlw
ZSogX19pZW5kOwogICAgICAgICAgX19yZXNfdHlwZSBfX3IgPSBfX2N2dC5vdXQoX01fc3RhdGVf
Y3VyLCBfX2lidWYsIF9faWJ1ZiArIF9faWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9faWVuZCwgX19idWYsIF9fYnVmICsgX19ibGVuLCBfX2JlbmQpOwoKICAgICAg
ICAgIGlmIChfX3IgIT0gY29kZWN2dF9iYXNlOjplcnJvcikKICAgICAgICAgICAgX19ibGVuID0g
X19iZW5kIC0gX19idWY7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2JsZW4gPSAwOwoK
ICAgICAgICAgIGlmIChfX2JsZW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2VsZW4g
Kz0gX01fZmlsZS54c3B1dG4oX19idWYsIF9fYmxlbik7CiAgICAgICAgICAgICAgX19wbGVuICs9
IF9fYmxlbjsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19yID09IGNvZGVjdnRfYmFz
ZTo6cGFydGlhbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X19pcmVzdW1lID0gX19pZW5kOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19ybGVuID0gX01f
b3V0X2VuZCAtIF9faWVuZDsKICAgICAgICAgICAgICBfX3IgPSBfX2N2dC5vdXQoX01fc3RhdGVf
Y3VyLCBfX2lyZXN1bWUsIF9faXJlc3VtZSArIF9fcmxlbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19pZW5kLCBfX2J1ZiwgX19idWYgKyBfX2JsZW4sIF9fYmVuZCk7CiAgICAgICAg
ICAgICAgaWYgKF9fciAhPSBjb2RlY3Z0X2Jhc2U6OmVycm9yKQogICAgICAgICAgICAgICAgX19y
bGVuID0gX19iZW5kIC0gX19idWY7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
X19ybGVuID0gMDsKICAgICAgICAgICAgICBpZiAoX19ybGVuKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICBfX2VsZW4gKz0gX01fZmlsZS54c3B1dG4oX19idWYsIF9fcmxlbik7
CiAgICAgICAgICAgICAgICAgIF9fcGxlbiArPSBfX3JsZW47CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJh
aXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBf
TV9yZWFsbHlfb3ZlcmZsb3coaW50X3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3Jl
dCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3Vy
ICYmIF9NX291dF9iZWcgPCBfTV9vdXRfZW5kOwogICAgICBib29sIF9fdGVzdHVuYnVmZmVyZWQg
PSBfTV9maWxlLmlzX29wZW4oKSAmJiAhX01fYnVmX3NpemU7CgogICAgICBpZiAoX190ZXN0cHV0
IHx8IF9fdGVzdHVuYnVmZmVyZWQpCiAgICAgICAgewoKICAgICAgICAgIHN0cmVhbXNpemUgX19l
bGVuID0gMDsKICAgICAgICAgIHN0cmVhbXNpemUgX19wbGVuID0gMDsKCgoKCiAgICAgICAgICBp
ZiAoX01fZmlsZXBvcyAmJiBfTV9maWxlcG9zICE9IF9NX291dF9iZWcpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBvZmZfdHlwZSBfX29mZiA9IF9NX291dF9iZWcgLSBfTV9maWxlcG9zOwog
ICAgICAgICAgICAgIF9NX2ZpbGUuc2Vla29mZihfX29mZiwgaW9zX2Jhc2U6OmN1cik7CiAgICAg
ICAgICAgIH0KCgoKICAgICAgICAgIGlmICghX190ZXN0dW5idWZmZXJlZCkKICAgICAgICAgICAg
X01fY29udmVydF90b19leHRlcm5hbChfTV9vdXRfYmVnLCBfTV9vdXRfZW5kIC0gX01fb3V0X2Jl
ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2VsZW4sIF9fcGxlbik7CgoK
CiAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBl
Ojplb2YoKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19wZW5kaW5n
ID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgIF9NX2NvbnZl
cnRfdG9fZXh0ZXJuYWwoJl9fcGVuZGluZywgMSwgX19lbGVuLCBfX3BsZW4pOwoKCiAgICAgICAg
ICAgICAgaWYgKF9fZWxlbiA9PSBfX3BsZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0g
dHJhaXRzX3R5cGU6Om5vdF9lb2YoX19jKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fQogICAgICAgICAgZWxzZSBpZiAoIV9NX2ZpbGUuc3luYygpKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUoKTsKICAgICAgICAgICAgICBfX3JldCA9IHRy
YWl0c190eXBlOjpub3RfZW9mKF9fYyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9N
X2xhc3Rfb3ZlcmZsb3dlZCA9IHRydWU7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFz
aWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX3N0cmVhbWJ1Zl90eXBlKgogICAgYmFzaWNf
ZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3Ry
ZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIGlmICghdGhpcy0+aXNfb3BlbigpICYmIF9fcyA9PSAw
ICYmIF9fbiA9PSAwKQogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7CiAgICAgIGVsc2UgaWYg
KF9fcyAmJiBfX24pCiAgICAgICAgewoKCgoKCiAgICAgICAgICBfTV9kZXN0cm95X2ludGVybmFs
X2J1ZmZlcigpOwoKCiAgICAgICAgICBfTV9idWYgPSBfX3M7CiAgICAgICAgICBfTV9idWZfc2l6
ZV9vcHQgPSBfTV9idWZfc2l6ZSA9IF9fbjsKICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRl
KCk7CiAgICAgICAgfQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgcmV0
dXJuIHRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5
cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrb2ZmKG9mZl90
eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9f
bW9kZSkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZShvZmZfdHlwZSgtMSkp
OwogICAgICBib29sIF9fdGVzdGluID0gKGlvc19iYXNlOjppbiAmIF9NX21vZGUgJiBfX21vZGUp
ICE9IDA7CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gKGlvc19iYXNlOjpvdXQgJiBfTV9tb2RlICYg
X19tb2RlKSAhPSAwOwoKCiAgICAgIGludCBfX3dpZHRoID0gdXNlX2ZhY2V0PF9fY29kZWN2dF90
eXBlPihfTV9idWZfbG9jYWxlKS5lbmNvZGluZygpOwogICAgICBpZiAoX193aWR0aCA8IDApCiAg
ICAgICAgX193aWR0aCA9IDA7CiAgICAgIGJvb2wgX190ZXN0ZmFpbCA9IF9fb2ZmICE9IDAgJiYg
X193aWR0aCA8PSAwOwoKICAgICAgaWYgKHRoaXMtPmlzX29wZW4oKSAmJiAhX190ZXN0ZmFpbCAm
JiAoX190ZXN0aW4gfHwgX190ZXN0b3V0KSkKICAgICAgICB7CgogICAgICAgICAgX01fcGJhY2tf
ZGVzdHJveSgpOwoKICAgICAgICAgIGlmIChfX3dheSAhPSBpb3NfYmFzZTo6Y3VyIHx8IF9fb2Zm
ICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX2NvbXB1dGVkX29m
ZiA9IF9fd2lkdGggKiBfX29mZjsKCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RnZXQgPSBfTV9p
bl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fZW5kOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0
cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0X2VuZDsKCgogICAgICAgICAg
ICAgIGlmIChfX3Rlc3RwdXQgfHwgX01fbGFzdF9vdmVyZmxvd2VkKQogICAgICAgICAgICAgICAg
ewoKICAgICAgICAgICAgICAgICAgdGhpcy0+c3luYygpOwoKICAgICAgICAgICAgICAgICAgX01f
b3V0cHV0X3Vuc2hpZnQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgZWxzZSBp
ZiAoX190ZXN0Z2V0ICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIpCiAgICAgICAgICAgICAgICBf
X2NvbXB1dGVkX29mZiArPSBfTV9pbl9jdXIgLSBfTV9maWxlcG9zOwoKICAgICAgICAgICAgICBf
X3JldCA9IF9NX2ZpbGUuc2Vla29mZihfX2NvbXB1dGVkX29mZiwgX193YXksIF9fbW9kZSk7CiAg
ICAgICAgICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUoKTsKICAgICAgICAgICAgfQoKCiAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3JldCA9IF9NX2ZpbGUuc2Vl
a29mZihfX29mZiwgaW9zX2Jhc2U6OmN1ciwgX19tb2RlKTsKICAgICAgICAgICAgICBfX3JldCAr
PSBtYXgoX01fb3V0X2N1ciwgX01faW5fY3VyKSAtIF9NX2ZpbGVwb3M7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4g
X19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUK
ICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrcG9zKHBvc190eXBl
IF9fcG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQogICAgewoKCiAgICAgIHJldHVybiB0
aGlzLT5zZWVrb2ZmKG9mZl90eXBlKF9fcG9zKSwgaW9zX2Jhc2U6OmJlZywgX19tb2RlKTsKCiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZv
aWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBfTV9vdXRwdXRfdW5z
aGlmdCgpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgdm9pZAogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGlt
YnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGJvb2wgX190ZXN0YmVnID0gZ3B0
cigpID09IGViYWNrKCkgJiYgcHB0cigpID09IHBiYXNlKCk7CgogICAgICBpZiAoX190ZXN0YmVn
ICYmIF9NX2J1Zl9sb2NhbGUgIT0gX19sb2MpCiAgICAgICAgewogICAgICAgICAgX01fYnVmX2xv
Y2FsZSA9IF9fbG9jOwogICAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1ZTsKICAgICAg
ICB9CgoKCgoKICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICB9CgoKCgogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19maWxlYnVmPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0
ZSBjbGFzcyBiYXNpY19maWxlYnVmPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBi
YXNpY19pZnN0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaWZzdHJl
YW08d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX29mc3RyZWFtPGNoYXI+
OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vZnN0cmVhbTx3Y2hhcl90PjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfZnN0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgYmFzaWNfZnN0cmVhbTx3Y2hhcl90PjsKfQojIDU1NiAiL3Vzci9pbmNsdWRlL2crKy9m
c3RyZWFtIiAyIDMKIyAyMSAiTWFwLmNwcCIgMgoKCgojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGli
L0NvcmUvU3lzdGVtL2Vycm9yLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3Jl
L1N5c3RlbS9lcnJvci5oIiAzCmNsYXNzIENMX0Vycm9yCnsKcHVibGljOgoKCiAgICAgICAgQ0xf
RXJyb3IoY29uc3QgY2hhciAqbWVzc2FnZSkgeyB0aGlzLT5tZXNzYWdlID0gbWVzc2FnZTsgfQoK
CiAgICAgICAgQ0xfRXJyb3IoY29uc3Qgc3RkOjpzdHJpbmcgJm1lc3NhZ2UpIHsgdGhpcy0+bWVz
c2FnZSA9IG1lc3NhZ2U7IH0KCgogICAgICAgIHN0ZDo6c3RyaW5nIG1lc3NhZ2U7Cn07Cgp2b2lk
IGNsX3Rocm93X2Vycm9yKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwp2b2lkIGNsX3Rocm93X2Vycm9y
KGNvbnN0IHN0ZDo6c3RyaW5nICZtZXNzYWdlKTsKIyAyNSAiTWFwLmNwcCIgMgojIDEgIi91c3Iv
aW5jbHVkZS9DbGFuTGliL0NvcmUvU3lzdGVtL2NsX2Fzc2VydC5oIiAxIDMKIyAyMiAiL3Vzci9p
bmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0vY2xfYXNzZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZysrL2xpc3QiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvZysrL2xpc3QiIDMKCiMgMSAiL3Vz
ci9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUv
ZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKysvZXhjZXB0aW9u
X2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZv
aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhy
b3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoK
ICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
aW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5n
dGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3Jhbmdl
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lk
CiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNjcgIi91c3IvaW5j
bHVkZS9nKysvbGlzdCIgMiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfbGlz
dC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9saXN0LmgiIDMKbmFtZXNw
YWNlIHN0ZAp7CgogIHN0cnVjdCBfTGlzdF9ub2RlX2Jhc2UKICB7CiAgICBfTGlzdF9ub2RlX2Jh
c2UqIF9NX25leHQ7CiAgICBfTGlzdF9ub2RlX2Jhc2UqIF9NX3ByZXY7CiAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9MaXN0X25vZGUgOiBwdWJsaWMgX0xpc3Rfbm9k
ZV9iYXNlCiAgICB7CiAgICAgIF9UcCBfTV9kYXRhOwogICAgfTsKCiAgc3RydWN0IF9MaXN0X2l0
ZXJhdG9yX2Jhc2UKICB7CiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVm
IHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgIF9MaXN0X25vZGVfYmFzZSogX01fbm9k
ZTsKCiAgICBfTGlzdF9pdGVyYXRvcl9iYXNlKF9MaXN0X25vZGVfYmFzZSogX194KQogICAgOiBf
TV9ub2RlKF9feCkKICAgIHsgfQoKICAgIF9MaXN0X2l0ZXJhdG9yX2Jhc2UoKQogICAgeyB9Cgog
ICAgdm9pZAogICAgX01faW5jcigpCiAgICB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9uZXh0OyB9
CgogICAgdm9pZAogICAgX01fZGVjcigpCiAgICB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9wcmV2
OyB9CgogICAgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBf
X3gpIGNvbnN0CiAgICB7IHJldHVybiBfTV9ub2RlID09IF9feC5fTV9ub2RlOyB9CgogICAgYm9v
bAogICAgb3BlcmF0b3IhPShjb25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gpIGNvbnN0CiAg
ICB7IHJldHVybiBfTV9ub2RlICE9IF9feC5fTV9ub2RlOyB9CiAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwLCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgogICAgc3RydWN0IF9MaXN0
X2l0ZXJhdG9yIDogcHVibGljIF9MaXN0X2l0ZXJhdG9yX2Jhc2UKICAgIHsKICAgICAgdHlwZWRl
ZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1RwJixfVHAqPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBf
TGlzdF9pdGVyYXRvcjxfVHAsY29uc3QgX1RwJixjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsK
ICAgICAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1JlZixfUHRyPiBfU2VsZjsKCiAgICAg
IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogICAg
ICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9MaXN0X25vZGU8X1RwPiBf
Tm9kZTsKCiAgICAgIF9MaXN0X2l0ZXJhdG9yKF9Ob2RlKiBfX3gpCiAgICAgIDogX0xpc3RfaXRl
cmF0b3JfYmFzZShfX3gpCiAgICAgIHsgfQoKICAgICAgX0xpc3RfaXRlcmF0b3IoKQogICAgICB7
IH0KCiAgICAgIF9MaXN0X2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBfX3gpCiAgICAgIDogX0xp
c3RfaXRlcmF0b3JfYmFzZShfX3guX01fbm9kZSkKICAgICAgeyB9CgogICAgICByZWZlcmVuY2UK
ICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgeyByZXR1cm4gKChfTm9kZSopIF9NX25vZGUp
LT5fTV9kYXRhOyB9CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAogICAg
ICB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICAgICAgX1NlbGYmCiAgICAgIG9wZXJhdG9y
KysoKQogICAgICB7CiAgICAgICAgdGhpcy0+X01faW5jcigpOwogICAgICAgIHJldHVybiAqdGhp
czsKICAgICAgfQoKICAgICAgX1NlbGYKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAg
ICAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgICAgIHRoaXMtPl9NX2luY3IoKTsKICAgICAg
ICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIF9TZWxmJgogICAgICBvcGVyYXRvci0tKCkK
ICAgICAgewogICAgICAgIHRoaXMtPl9NX2RlY3IoKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgIH0KCiAgICAgIF9TZWxmCiAgICAgIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAgICAgICAg
X1NlbGYgX190bXAgPSAqdGhpczsKICAgICAgICB0aGlzLT5fTV9kZWNyKCk7CiAgICAgICAgcmV0
dXJuIF9fdG1wOwogICAgICB9CiAgICB9OwojIDE4NSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0
bF9saXN0LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvY2F0b3Is
IGJvb2wgX0lzU3RhdGljPgogICAgY2xhc3MgX0xpc3RfYWxsb2NfYmFzZQogICAgewogICAgcHVi
bGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9y
Pjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIGFs
bG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAogICAgICB7IHJldHVybiBf
Tm9kZV9hbGxvY2F0b3I7IH0KCiAgICAgIF9MaXN0X2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSkKICAgICAgOiBfTm9kZV9hbGxvY2F0b3IoX19hKQogICAgICB7IH0KCiAgICBw
cm90ZWN0ZWQ6CiAgICAgIF9MaXN0X25vZGU8X1RwPioKICAgICAgX01fZ2V0X25vZGUoKQogICAg
ICB7IHJldHVybiBfTm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0KCiAgICAgIHZvaWQKICAg
ICAgX01fcHV0X25vZGUoX0xpc3Rfbm9kZTxfVHA+KiBfX3ApCiAgICAgIHsgX05vZGVfYWxsb2Nh
dG9yLmRlYWxsb2NhdGUoX19wLCAxKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdHlwZW5hbWUg
X0FsbG9jX3RyYWl0czxfTGlzdF9ub2RlPF9UcD4sIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlw
ZQogICAgICAgICAgICAgICBfTm9kZV9hbGxvY2F0b3I7CgogICAgICBfTGlzdF9ub2RlPF9UcD4q
IF9NX25vZGU7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Fs
bG9jYXRvcj4KICAgIGNsYXNzIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVl
PgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8
X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgICAgICBhbGxvY2F0b3Jf
dHlwZTsKCiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAog
ICAgICB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogICAgICBfTGlzdF9hbGxvY19iYXNl
KGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgICAgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X0xpc3Rfbm9kZTxfVHA+LCBfQWxsb2NhdG9y
Pjo6X0FsbG9jX3R5cGUKICAgICAgICAgICAgICBfQWxsb2NfdHlwZTsKCiAgICAgIF9MaXN0X25v
ZGU8X1RwPioKICAgICAgX01fZ2V0X25vZGUoKQogICAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6
YWxsb2NhdGUoMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcHV0X25vZGUoX0xpc3Rfbm9kZTxf
VHA+KiBfX3ApCiAgICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCAxKTsgfQoKICAg
IHByb3RlY3RlZDoKICAgICAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9ub2RlOwogICAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBfTGlzdF9iYXNl
CiAgICAgIDogcHVibGljIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3Rh
bmNlbGVzcz4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfTGlzdF9hbGxvY19iYXNl
PF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0
czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgICAgICBfQmFzZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7
CgogICAgICBfTGlzdF9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICAgIDogX0Jh
c2UoX19hKQogICAgICB7CiAgICAgICAgX01fbm9kZSA9IF9NX2dldF9ub2RlKCk7CiAgICAgICAg
X01fbm9kZS0+X01fbmV4dCA9IF9NX25vZGU7CiAgICAgICAgX01fbm9kZS0+X01fcHJldiA9IF9N
X25vZGU7CiAgICAgIH0KCiAgICAgIH5fTGlzdF9iYXNlKCkKICAgICAgewogICAgICAgIGNsZWFy
KCk7CiAgICAgICAgX01fcHV0X25vZGUoX01fbm9kZSk7CiAgICAgIH0KCiAgICAgIHZvaWQgY2xl
YXIoKTsKICAgIH07CiMgMjg5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2xpc3QuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4g
PgogICAgY2xhc3MgbGlzdCA6IHByb3RlY3RlZCBfTGlzdF9iYXNlPF9UcCwgX0FsbG9jPgogICAg
ewoKICAgICAKCiAgICAgIHR5cGVkZWYgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHR5cGVkZWYgdm9pZCogX1ZvaWRfcG9pbnRlcjsKCiAgICBwdWJs
aWM6CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdmFsdWVfdHlw
ZSogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVy
OwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25z
dCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX0xpc3Rfbm9kZTxf
VHA+IF9Ob2RlOwogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYg
cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6
OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAgICAgdHlwZWRlZiBfTGlzdF9pdGVy
YXRvcjxfVHAsX1RwJixfVHAqPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfTGlzdF9pdGVyYXRv
cjxfVHAsY29uc3QgX1RwJixjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKCiAgICAgIHR5cGVk
ZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJh
dG9yOwoKICAgIHByb3RlY3RlZDoKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX25vZGU7CiAgICAgIHVz
aW5nIF9CYXNlOjpfTV9wdXRfbm9kZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2dldF9ub2RlOwoK
ICAgIHByb3RlY3RlZDoKICAgICAgX05vZGUqCiAgICAgIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IF9U
cCYgX194KQogICAgICB7CiAgICAgICAgX05vZGUqIF9fcCA9IF9NX2dldF9ub2RlKCk7CiAgICAg
ICAgdHJ5IHsKICAgICAgICAgIF9Db25zdHJ1Y3QoJl9fcC0+X01fZGF0YSwgX194KTsKICAgICAg
ICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9NX3B1dF9ub2RlKF9f
cCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcDsKICAgICAg
fQoKICAgICAgX05vZGUqCiAgICAgIF9NX2NyZWF0ZV9ub2RlKCkKICAgICAgewogICAgICAgIF9O
b2RlKiBfX3AgPSBfTV9nZXRfbm9kZSgpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBfQ29uc3Ry
dWN0KCZfX3AtPl9NX2RhdGEpOwogICAgICAgIH0KICAgICAgICBjYXRjaCguLi4pCiAgICAgICAg
ewogICAgICAgICAgX01fcHV0X25vZGUoX19wKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0K
ICAgICAgICByZXR1cm4gX19wOwogICAgICB9CgogICAgcHVibGljOgogICAgICBhbGxvY2F0b3Jf
dHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QKICAgICAgeyByZXR1cm4gX0Jhc2U6Omdl
dF9hbGxvY2F0b3IoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbGlzdChjb25zdCBhbGxvY2F0
b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQmFzZShfX2EpCiAgICAg
IHsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxfTm9kZSo+KF9NX25vZGUtPl9NX25leHQpOyB9CgogICAgICBjb25zdF9pdGVyYXRvcgog
ICAgICBiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9Ob2RlKj4oX01f
bm9kZS0+X01fbmV4dCk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpCiAgICAgIHsgcmV0
dXJuIF9NX25vZGU7IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIF9NX25vZGU7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJl
Z2luKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCiAgICAgIGNv
bnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4g
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IK
ICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0K
CiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgICAgIGJvb2wKICAg
ICAgZW1wdHkoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9ub2RlLT5fTV9uZXh0ID09IF9NX25v
ZGU7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkgY29uc3QKICAgICAgeyByZXR1cm4g
ZGlzdGFuY2UoYmVnaW4oKSwgZW5kKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3Np
emUoKSBjb25zdAogICAgICB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CgogICAgICByZWZlcmVu
Y2UKICAgICAgZnJvbnQoKQogICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQoKICAgICAgY29uc3Rf
cmVmZXJlbmNlCiAgICAgIGZyb250KCkgY29uc3QKICAgICAgeyByZXR1cm4gKmJlZ2luKCk7IH0K
CiAgICAgIHJlZmVyZW5jZQogICAgICBiYWNrKCkKICAgICAgeyByZXR1cm4gKigtLWVuZCgpKTsg
fQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGJhY2soKSBjb25zdAogICAgICB7IHJldHVy
biAqKC0tZW5kKCkpOyB9CgogICAgICB2b2lkCiAgICAgIHN3YXAobGlzdDxfVHAsIF9BbGxvYz4m
IF9feCkKICAgICAgeyBzdGQ6OnN3YXAoX01fbm9kZSwgX194Ll9NX25vZGUpOyB9CgogICAgICBp
dGVyYXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gp
CiAgICAgIHsKICAgICAgICBfTm9kZSogX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gpOwogICAg
ICAgIF9fdG1wLT5fTV9uZXh0ID0gX19wb3NpdGlvbi5fTV9ub2RlOwogICAgICAgIF9fdG1wLT5f
TV9wcmV2ID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICAgIF9fcG9zaXRpb24u
X01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fdG1wOwogICAgICAgIF9fcG9zaXRpb24uX01f
bm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAg
ICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAgICAgIHsgcmV0
dXJuIGluc2VydChfX3Bvc2l0aW9uLCBfVHAoKSk7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW50ZWdlcj4KICAgICAgICB2b2lkCiAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJh
dG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwgX190cnVlX3R5cGUpCiAgICAg
ICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3gpOyB9
CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkCiAg
ICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSk7CgogICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkCiAgICAgICAgaW5zZXJ0KGl0
ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh
c3QpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5w
dXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgICAgICBfTV9pbnNlcnRfZGlz
cGF0Y2goX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgICAgIH0KCiAg
ICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25z
dCBfVHAmIF9feCkKICAgICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOyB9Cgog
ICAgICB2b2lkCiAgICAgIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUg
X19uLCBjb25zdCBfVHAmIF9feCk7CgogICAgICB2b2lkCiAgICAgIHB1c2hfZnJvbnQoY29uc3Qg
X1RwJiBfX3gpCiAgICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9feCk7IH0KCiAgICAgIHZvaWQKICAg
ICAgcHVzaF9mcm9udCgpCiAgICAgIHsgaW5zZXJ0KGJlZ2luKCkpOyB9CgogICAgICB2b2lkCiAg
ICAgIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkKICAgICAgeyBpbnNlcnQoZW5kKCksIF9feCk7
IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKCkKICAgICAgeyBpbnNlcnQoZW5kKCkpOyB9
CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQogICAgICB7
CiAgICAgICAgX0xpc3Rfbm9kZV9iYXNlKiBfX25leHRfbm9kZSA9IF9fcG9zaXRpb24uX01fbm9k
ZS0+X01fbmV4dDsKICAgICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fcHJldl9ub2RlID0gX19wb3Np
dGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICAgIF9Ob2RlKiBfX24gPSBzdGF0aWNfY2FzdDxf
Tm9kZSo+KF9fcG9zaXRpb24uX01fbm9kZSk7CiAgICAgICAgX19wcmV2X25vZGUtPl9NX25leHQg
PSBfX25leHRfbm9kZTsKICAgICAgICBfX25leHRfbm9kZS0+X01fcHJldiA9IF9fcHJldl9ub2Rl
OwogICAgICAgIF9EZXN0cm95KCZfX24tPl9NX2RhdGEpOwogICAgICAgIF9NX3B1dF9ub2RlKF9f
bik7CiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHN0YXRpY19jYXN0PF9Ob2RlKj4oX19uZXh0X25v
ZGUpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJz
dCwgaXRlcmF0b3IgX19sYXN0KTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIoKQogICAgICB7IF9C
YXNlOjpjbGVhcigpOyB9CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdf
c2l6ZSwgY29uc3QgX1RwJiBfX3gpOwoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBl
IF9fbmV3X3NpemUpCiAgICAgIHsgdGhpcy0+cmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQoK
ICAgICAgdm9pZAogICAgICBwb3BfZnJvbnQoKQogICAgICB7IGVyYXNlKGJlZ2luKCkpOyB9Cgog
ICAgICB2b2lkCiAgICAgIHBvcF9iYWNrKCkKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fdG1w
ID0gZW5kKCk7CiAgICAgICAgZXJhc2UoLS1fX3RtcCk7CiAgICAgIH0KCiAgICAgIGxpc3Qoc2l6
ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICAgIGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CYXNlKF9fYSkKICAgICAg
eyBpbnNlcnQoYmVnaW4oKSwgX19uLCBfX3ZhbHVlKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAg
bGlzdChzaXplX3R5cGUgX19uKQogICAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpCiAgICAg
IHsgaW5zZXJ0KGJlZ2luKCksIF9fbiwgX1RwKCkpOyB9CgoKCiAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICBsaXN0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19h
ID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQmFzZShfX2EpCiAgICAgIHsgaW5zZXJ0KGJl
Z2luKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIGxpc3QoY29uc3QgbGlzdDxfVHAsIF9B
bGxvYz4mIF9feCkKICAgICAgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKQogICAgICB7IGlu
c2VydChiZWdpbigpLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsgfQoKICAgICAgfmxpc3QoKQog
ICAgICB7IH0KCiAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+JgogICAgICBvcGVyYXRvcj0oY29uc3Qg
bGlzdDxfVHAsIF9BbGxvYz4mIF9feCk7CgogICAgcHVibGljOgoKCgoKCiAgICAgIHZvaWQKICAg
ICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpCiAgICAgIHsgX01fZmls
bF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fZmlsbF9hc3NpZ24o
c2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7CiAgICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9J
bnRlZ3JhbDsKICAgICAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9J
bnRlZ3JhbCgpKTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdlcj4K
ICAgICAgICB2b2lkCiAgICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0lu
dGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVf
dHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXJhdG9yPgogICAgICAgIHZvaWQKICAgICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2ZhbHNlX3R5cGUpOwoKICAgIHByb3RlY3RlZDoKICAgICAgdm9pZAogICAg
ICBfTV90cmFuc2ZlcihpdGVyYXRvciBfX3Bvc2l0aW9uLCBpdGVyYXRvciBfX2ZpcnN0LCBpdGVy
YXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAgICBpZiAoX19wb3NpdGlvbiAhPSBfX2xhc3QpIHsK
CiAgICAgICAgICBfX2xhc3QuX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fcG9zaXRpb24u
X01fbm9kZTsKICAgICAgICAgIF9fZmlyc3QuX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9f
bGFzdC5fTV9ub2RlOwogICAgICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2LT5fTV9u
ZXh0ID0gX19maXJzdC5fTV9ub2RlOwoKCiAgICAgICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fdG1w
ID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICAgICAgX19wb3NpdGlvbi5fTV9u
b2RlLT5fTV9wcmV2ID0gX19sYXN0Ll9NX25vZGUtPl9NX3ByZXY7CiAgICAgICAgICBfX2xhc3Qu
X01fbm9kZS0+X01fcHJldiA9IF9fZmlyc3QuX01fbm9kZS0+X01fcHJldjsKICAgICAgICAgIF9f
Zmlyc3QuX01fbm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAgICAgIH0KICAgICAgfQoKICAgIHB1
YmxpYzoKICAgICAgdm9pZAogICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYg
X194KQogICAgICB7CiAgICAgICAgaWYgKCFfX3guZW1wdHkoKSkKICAgICAgICAgIHRoaXMtPl9N
X3RyYW5zZmVyKF9fcG9zaXRpb24sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogICAgICB9Cgog
ICAgICB2b2lkCiAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0
b3IgX19pKQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19qID0gX19pOwogICAgICAgICsrX19q
OwogICAgICAgIGlmIChfX3Bvc2l0aW9uID09IF9faSB8fCBfX3Bvc2l0aW9uID09IF9faikgcmV0
dXJuOwogICAgICAgIHRoaXMtPl9NX3RyYW5zZmVyKF9fcG9zaXRpb24sIF9faSwgX19qKTsKICAg
ICAgfQoKICAgICAgdm9pZAogICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYs
IGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewogICAgICAgIGlmIChf
X2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICAgIHRoaXMtPl9NX3RyYW5zZmVyKF9fcG9zaXRpb24s
IF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgcmVtb3ZlKGNvbnN0
IF9UcCYgX192YWx1ZSk7CgogICAgICB2b2lkCiAgICAgIHVuaXF1ZSgpOwoKICAgICAgdm9pZAog
ICAgICBtZXJnZShsaXN0JiBfX3gpOwoKICAgICAgdm9pZAogICAgICByZXZlcnNlKCk7CgogICAg
ICB2b2lkCiAgICAgIHNvcnQoKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+
CiAgICAgICAgdm9pZAogICAgICAgIHJlbW92ZV9pZihfUHJlZGljYXRlKTsKCiAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICAgICAgdm9pZAogICAgICAgIHVuaXF1
ZShfQmluYXJ5UHJlZGljYXRlKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TdHJpY3RXZWFr
T3JkZXJpbmc+CiAgICAgICAgdm9pZAogICAgICAgIG1lcmdlKGxpc3QmLCBfU3RyaWN0V2Vha09y
ZGVyaW5nKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAg
ICAgICAgdm9pZAogICAgICAgIHNvcnQoX1N0cmljdFdlYWtPcmRlcmluZyk7CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvcj09KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAs
X0FsbG9jPiYgX195KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGxpc3Q8X1RwLF9BbGxv
Yz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogICAgICBjb25zdF9pdGVyYXRvciBf
X2VuZDEgPSBfX3guZW5kKCk7CiAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fZW5kMiA9IF9feS5lbmQo
KTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yIF9faTEgPSBfX3guYmVnaW4oKTsKICAgICAgY29uc3Rf
aXRlcmF0b3IgX19pMiA9IF9feS5iZWdpbigpOwogICAgICB3aGlsZSAoX19pMSAhPSBfX2VuZDEg
JiYgX19pMiAhPSBfX2VuZDIgJiYgKl9faTEgPT0gKl9faTIpIHsKICAgICAgICArK19faTE7CiAg
ICAgICAgKytfX2kyOwogICAgICB9CiAgICAgIHJldHVybiBfX2kxID09IF9fZW5kMSAmJiBfX2ky
ID09IF9fZW5kMjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4m
IF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgewogICAgICByZXR1cm4gbGV4
aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvciE9KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxf
VHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy
YXRvcj4oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+
JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBs
aXN0PF9UcCxfQWxsb2M+JiBfX3gsIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsg
cmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGxpc3Q8X1RwLF9B
bGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShf
X3ggPCBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgog
ICAgaW5saW5lIHZvaWQKICAgIHN3YXAobGlzdDxfVHAsIF9BbGxvYz4mIF9feCwgbGlzdDxfVHAs
IF9BbGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAoX195KTsgfQoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBfTGlzdF9iYXNlPF9UcCxfQWxsb2M+
OjoKICAgIGNsZWFyKCkKICAgIHsKICAgICAgX0xpc3Rfbm9kZTxfVHA+KiBfX2N1ciA9IHN0YXRp
Y19jYXN0PF9MaXN0X25vZGU8X1RwPio+KF9NX25vZGUtPl9NX25leHQpOwogICAgICB3aGlsZSAo
X19jdXIgIT0gX01fbm9kZSkgewogICAgICAgIF9MaXN0X25vZGU8X1RwPiogX190bXAgPSBfX2N1
cjsKICAgICAgICBfX2N1ciA9IHN0YXRpY19jYXN0PF9MaXN0X25vZGU8X1RwPio+KF9fY3VyLT5f
TV9uZXh0KTsKICAgICAgICBfRGVzdHJveSgmX190bXAtPl9NX2RhdGEpOwogICAgICAgIF9NX3B1
dF9ub2RlKF9fdG1wKTsKICAgICAgfQogICAgICBfTV9ub2RlLT5fTV9uZXh0ID0gX01fbm9kZTsK
ICAgICAgX01fbm9kZS0+X01fcHJldiA9IF9NX25vZGU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0
ZXI+CiAgICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgICBfTV9pbnNlcnRfZGlzcGF0
Y2goaXRlcmF0b3IgX19wb3NpdGlvbiwgX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNl
X3R5cGUpCiAgICAgIHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly
c3QpCiAgICAgICAgICBpbnNlcnQoX19wb3NpdGlvbiwgKl9fZmlyc3QpOwoKICAgICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAs
IF9BbGxvYz46OgogICAgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90
eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIGZvciAoIDsgX19uID4gMDsgLS1f
X24pCiAgICAgICAgaW5zZXJ0KF9fcG9zaXRpb24sIF9feCk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgbGlzdDxfVHAsX0FsbG9j
Pjo6aXRlcmF0b3IgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgZXJhc2UoaXRlcmF0b3IgX19maXJz
dCwgaXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp
CiAgICAgICAgZXJhc2UoX19maXJzdCsrKTsKICAgICAgcmV0dXJuIF9fbGFzdDsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGxpc3Q8X1Rw
LCBfQWxsb2M+OjoKICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBf
X3gpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGJlZ2luKCk7CiAgICAgIHNpemVfdHlwZSBf
X2xlbiA9IDA7CiAgICAgIGZvciAoIDsgX19pICE9IGVuZCgpICYmIF9fbGVuIDwgX19uZXdfc2l6
ZTsgKytfX2ksICsrX19sZW4pCiAgICAgICAgOwogICAgICBpZiAoX19sZW4gPT0gX19uZXdfc2l6
ZSkKICAgICAgICBlcmFzZShfX2ksIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChl
bmQoKSwgX19uZXdfc2l6ZSAtIF9fbGVuLCBfX3gpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGxpc3Q8X1RwLCBfQWxsb2M+JiBsaXN0PF9UcCwg
X0FsbG9jPjo6CiAgICBvcGVyYXRvcj0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKICAg
IHsKICAgICAgaWYgKHRoaXMgIT0gJl9feCkgewogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0g
YmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICAgICAgY29uc3Rf
aXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsKICAgICAgICBjb25zdF9pdGVyYXRvciBf
X2xhc3QyID0gX194LmVuZCgpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgICAqX19maXJzdDErKyA9ICpfX2ZpcnN0Misr
OwogICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgICAgZXJhc2UoX19maXJz
dDEsIF9fbGFzdDEpOwogICAgICAgIGVsc2UKICAgICAgICAgIGluc2VydChfX2xhc3QxLCBfX2Zp
cnN0MiwgX19sYXN0Mik7CiAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9B
bGxvYz46OgogICAgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3Zh
bCkgewogICAgICBpdGVyYXRvciBfX2kgPSBiZWdpbigpOwogICAgICBmb3IgKCA7IF9faSAhPSBl
bmQoKSAmJiBfX24gPiAwOyArK19faSwgLS1fX24pCiAgICAgICAgKl9faSA9IF9fdmFsOwogICAg
ICBpZiAoX19uID4gMCkKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbiwgX192YWwpOwogICAgICBl
bHNlCiAgICAgICAgZXJhc2UoX19pLCBlbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXI+
CiAgICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgICBfTV9hc3NpZ25fZGlzcGF0Y2go
X0lucHV0SXRlciBfX2ZpcnN0MiwgX0lucHV0SXRlciBfX2xhc3QyLCBfX2ZhbHNlX3R5cGUpCiAg
ICAgIHsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgICAgICAgaXRlcmF0
b3IgX19sYXN0MSA9IGVuZCgpOwogICAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgICAg
Kl9fZmlyc3QxID0gKl9fZmlyc3QyOwogICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQog
ICAgICAgICAgZXJhc2UoX19maXJzdDEsIF9fbGFzdDEpOwogICAgICAgIGVsc2UKICAgICAgICAg
IGluc2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+
OjoKICAgIHJlbW92ZShjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9f
Zmlyc3QgPSBiZWdpbigpOwogICAgICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICAgICAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJz
dDsKICAgICAgICArK19fbmV4dDsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkgZXJh
c2UoX19maXJzdCk7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAs
IF9BbGxvYz46OgogICAgdW5pcXVlKCkKICAgIHsKICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJl
Z2luKCk7CiAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogICAgICBpZiAoX19maXJzdCA9
PSBfX2xhc3QpIHJldHVybjsKICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAg
d2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSAqX19u
ZXh0KQogICAgICAgICAgZXJhc2UoX19uZXh0KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2Zp
cnN0ID0gX19uZXh0OwogICAgICAgIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgIH0KICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGxpc3Q8X1Rw
LCBfQWxsb2M+OjoKICAgIG1lcmdlKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gpCiAgICB7CiAgICAg
IGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICAgICAgaXRlcmF0b3IgX19sYXN0MSA9IGVu
ZCgpOwogICAgICBpdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogICAgICBpdGVyYXRv
ciBfX2xhc3QyID0gX194LmVuZCgpOwogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEp
IHsKICAgICAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3QyOwogICAgICAgICAgX01fdHJh
bnNmZXIoX19maXJzdDEsIF9fZmlyc3QyLCArK19fbmV4dCk7CiAgICAgICAgICBfX2ZpcnN0MiA9
IF9fbmV4dDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgKytfX2ZpcnN0MTsKICAg
ICAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIpIF9NX3RyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3Qy
LCBfX2xhc3QyKTsKICAgIH0KCiAgaW5saW5lIHZvaWQKICBfX0xpc3RfYmFzZV9yZXZlcnNlKF9M
aXN0X25vZGVfYmFzZSogX19wKQogIHsKICAgIF9MaXN0X25vZGVfYmFzZSogX190bXAgPSBfX3A7
CiAgICBkbyB7CiAgICAgIHN0ZDo6c3dhcChfX3RtcC0+X01fbmV4dCwgX190bXAtPl9NX3ByZXYp
OwogICAgICBfX3RtcCA9IF9fdG1wLT5fTV9wcmV2OwogICAgfSB3aGlsZSAoX190bXAgIT0gX19w
KTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogIGlubGlu
ZSB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICByZXZlcnNlKCkKICB7IF9fTGlzdF9iYXNlX3Jl
dmVyc2UodGhpcy0+X01fbm9kZSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgIHNvcnQoKQogICAgewoK
ICAgICAgaWYgKF9NX25vZGUtPl9NX25leHQgIT0gX01fbm9kZSAmJiBfTV9ub2RlLT5fTV9uZXh0
LT5fTV9uZXh0ICE9IF9NX25vZGUpIHsKICAgICAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5
OwogICAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9fY291bnRlcls2NF07CiAgICAgICAgaW50IF9f
ZmlsbCA9IDA7CiAgICAgICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgICAgICBfX2NhcnJ5LnNw
bGljZShfX2NhcnJ5LmJlZ2luKCksICp0aGlzLCBiZWdpbigpKTsKICAgICAgICAgIGludCBfX2kg
PSAwOwogICAgICAgICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0
eSgpKSB7CiAgICAgICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnkpOwogICAgICAg
ICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faSsrXSk7CiAgICAgICAgICB9CiAgICAgICAg
ICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0pOwogICAgICAgICAgaWYgKF9faSA9PSBfX2Zp
bGwpICsrX19maWxsOwogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwg
X19maWxsOyArK19faSkKICAgICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltf
X2ktMV0pOwogICAgICAgIHN3YXAoX19jb3VudGVyW19fZmlsbC0xXSk7CiAgICAgIH0KICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICAg
IHJlbW92ZV9pZihfUHJlZGljYXRlIF9fcHJlZCkKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9f
Zmlyc3QgPSBiZWdpbigpOwogICAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogICAgICAg
IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgaXRlcmF0b3IgX19uZXh0ID0g
X19maXJzdDsKICAgICAgICAgICsrX19uZXh0OwogICAgICAgICAgaWYgKF9fcHJlZCgqX19maXJz
dCkpIGVyYXNlKF9fZmlyc3QpOwogICAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgICB9
CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgICAgdm9pZCBsaXN0PF9UcCwg
X0FsbG9jPjo6CiAgICAgIHVuaXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAg
ICAgIHsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRv
ciBfX2xhc3QgPSBlbmQoKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsK
ICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgIHdoaWxlICgrK19fbmV4
dCAhPSBfX2xhc3QpIHsKICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19u
ZXh0KSkKICAgICAgICAgICAgZXJhc2UoX19uZXh0KTsKICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgICAgIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgICAg
fQogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAgICAgIHZvaWQgbGlzdDxf
VHAsIF9BbGxvYz46OgogICAgICBtZXJnZShsaXN0PF9UcCwgX0FsbG9jPiYgX194LCBfU3RyaWN0
V2Vha09yZGVyaW5nIF9fY29tcCkKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0g
YmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICAgICAgaXRlcmF0
b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QyID0gX194
LmVuZCgpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9
IF9fbGFzdDIpCiAgICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewog
ICAgICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0MjsKICAgICAgICAgICAgX01fdHJh
bnNmZXIoX19maXJzdDEsIF9fZmlyc3QyLCArK19fbmV4dCk7CiAgICAgICAgICAgIF9fZmlyc3Qy
ID0gX19uZXh0OwogICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICArK19fZmly
c3QxOwogICAgICAgIGlmIChfX2ZpcnN0MiAhPSBfX2xhc3QyKSBfTV90cmFuc2ZlcihfX2xhc3Qx
LCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmlu
Zz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgc29ydChfU3RyaWN0V2Vha09yZGVy
aW5nIF9fY29tcCkKICAgIHsKCiAgICAgIGlmIChfTV9ub2RlLT5fTV9uZXh0ICE9IF9NX25vZGUg
JiYgX01fbm9kZS0+X01fbmV4dC0+X01fbmV4dCAhPSBfTV9ub2RlKSB7CiAgICAgICAgbGlzdDxf
VHAsIF9BbGxvYz4gX19jYXJyeTsKICAgICAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NvdW50ZXJb
NjRdOwogICAgICAgIGludCBfX2ZpbGwgPSAwOwogICAgICAgIHdoaWxlICghZW1wdHkoKSkgewog
ICAgICAgICAgX19jYXJyeS5zcGxpY2UoX19jYXJyeS5iZWdpbigpLCAqdGhpcywgYmVnaW4oKSk7
CiAgICAgICAgICBpbnQgX19pID0gMDsKICAgICAgICAgIHdoaWxlKF9faSA8IF9fZmlsbCAmJiAh
X19jb3VudGVyW19faV0uZW1wdHkoKSkgewogICAgICAgICAgICBfX2NvdW50ZXJbX19pXS5tZXJn
ZShfX2NhcnJ5LCBfX2NvbXApOwogICAgICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19f
aSsrXSk7CiAgICAgICAgICB9CiAgICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0p
OwogICAgICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpICsrX19maWxsOwogICAgICAgIH0KCiAgICAg
ICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19maWxsOyArK19faSkKICAgICAgICAgIF9fY291
bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltfX2ktMV0sIF9fY29tcCk7CiAgICAgICAgc3dhcChf
X2NvdW50ZXJbX19maWxsLTFdKTsKICAgICAgfQogICAgfQoKfQojIDcyICIvdXNyL2luY2x1ZGUv
ZysrL2xpc3QiIDIgMwojIDIzICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9jbF9h
c3NlcnQuaCIgMiAzCgoKZW51bSBFcnJvckNoYW5uZWxzCnsKICAgICAgICBpbmZvX2Rpc3BsYXkg
PSAxLAogICAgICAgIGluZm9fc291bmQgPSAyLAogICAgICAgIGluZm9faW5wdXQgPSA0LAogICAg
ICAgIGluZm9fbmV0d29yayA9IDgsCiAgICAgICAgaW5mb19ndWkgPSAxNgp9OwojIDU2ICIvdXNy
L2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9jbF9hc3NlcnQuaCIgMwpjbGFzcyBDTF9Bc3Nl
cnRMaXN0ZW5lcjsKCgoKCmNsYXNzIENMX0Fzc2VydAp7CiAgICAgICAgc3RhdGljIHN0ZDo6bGlz
dDxDTF9Bc3NlcnRMaXN0ZW5lcio+IGxpc3RlbmVyczsKcHVibGljOgoKCgoKCiAgICAgICAgc3Rh
dGljIHZvaWQgZW5hYmxlX2NoYW5uZWxzKGludCBjaGFubmVsX21hc2spOwojIDgxICIvdXNyL2lu
Y2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9jbF9hc3NlcnQuaCIgMwogICAgICAgIHN0YXRpYyB2
b2lkIGRpZShib29sIGEsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpm
dW5jLCBjb25zdCBjaGFyICphc3NlcnRfc3RyKTsKIyA5MCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIv
Q29yZS9TeXN0ZW0vY2xfYXNzZXJ0LmgiIDMKICAgICAgICBzdGF0aWMgdm9pZCBpbmZvKGludCBj
aGFubmVsLCBjb25zdCBjaGFyICp0ZXh0LCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7CgoK
CiAgICAgICAgc3RhdGljIHZvaWQgYWRkX2xpc3RlbmVyKENMX0Fzc2VydExpc3RlbmVyICpsaXN0
ZW5lcik7CgoKCiAgICAgICAgc3RhdGljIHZvaWQgcmVtb3ZlX2xpc3RlbmVyKENMX0Fzc2VydExp
c3RlbmVyICpsaXN0ZW5lcik7Cn07CgoKY2xhc3MgQ0xfQXNzZXJ0TGlzdGVuZXIKewpwdWJsaWM6
CgoKICAgICAgICB2aXJ0dWFsIH5DTF9Bc3NlcnRMaXN0ZW5lcigpIHs7fQoKCgoKCgoKICAgICAg
ICB2aXJ0dWFsIHZvaWQgYXNzZXJ0X29jY3VycmVkKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5l
KT0wOwp9OwojIDI2ICJNYXAuY3BwIiAyCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvRGlzcGxh
eS9EaXNwbGF5L3N1cmZhY2UuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL0Rpc3Bs
YXkvRGlzcGxheS9zdXJmYWNlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1Jl
c291cmNlcy9yZXNvdXJjZS5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9S
ZXNvdXJjZXMvcmVzb3VyY2UuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL3NpZ25hbHMu
aCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9DbGFuTGliL3NpZ25hbHMuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9DbGFuTGliL1NpZ25hbHMvc2xvdC5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL0Ns
YW5MaWIvU2lnbmFscy9zbG90LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxz
L3Nsb3RfZ2VuZXJpYy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9z
bG90X2dlbmVyaWMuaCIgMwpjbGFzcyBDTF9TbG90X0dlbmVyaWMKewoKcHVibGljOgoKICAgICAg
ICBDTF9TbG90X0dlbmVyaWMoKSA6IHNsb3RfcmVmX2NvdW50KDApLCBzaWduYWxfcmVmX2NvdW50
KDApIHsgcmV0dXJuOyB9CgoKICAgICAgICB2aXJ0dWFsIH5DTF9TbG90X0dlbmVyaWMoKSB7IHJl
dHVybjsgfQoKCnB1YmxpYzoKCiAgICAgICAgaW50IGdldF9zbG90X3JlZigpIGNvbnN0IHsgcmV0
dXJuIHNsb3RfcmVmX2NvdW50OyB9CgoKICAgICAgICBpbnQgZ2V0X3NpZ25hbF9yZWYoKSBjb25z
dCB7IHJldHVybiBzaWduYWxfcmVmX2NvdW50OyB9CgoKcHVibGljOgoKICAgICAgICB2b2lkIGFk
ZF9zbG90X3JlZigpIHsgc2xvdF9yZWZfY291bnQrKzsgfQoKCiAgICAgICAgdm9pZCByZWxlYXNl
X3Nsb3RfcmVmKCkgeyBzbG90X3JlZl9jb3VudC0tOyBjaGVja19kZWxldGUoKTsgfQoKCiAgICAg
ICAgdm9pZCBhZGRfc2lnbmFsX3JlZigpIHsgc2lnbmFsX3JlZl9jb3VudCsrOyB9CgoKICAgICAg
ICB2b2lkIHJlbGVhc2Vfc2lnbmFsX3JlZigpIHsgc2lnbmFsX3JlZl9jb3VudC0tOyBjaGVja19k
ZWxldGUoKTsgfQoKCnByaXZhdGU6CiAgICAgICAgdm9pZCBjaGVja19kZWxldGUoKQogICAgICAg
IHsKICAgICAgICAgICAgICAgIGlmIChzbG90X3JlZl9jb3VudCA9PSAwICYmIHNpZ25hbF9yZWZf
Y291bnQgPT0gMCkgZGVsZXRlIHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpbnQgc2xvdF9yZWZf
Y291bnQ7CgogICAgICAgIGludCBzaWduYWxfcmVmX2NvdW50Owp9OwojIDIzICIvdXNyL2luY2x1
ZGUvQ2xhbkxpYi9TaWduYWxzL3Nsb3QuaCIgMiAzCgoKCgoKCgpjbGFzcyBDTF9TbG90CnsKCnB1
YmxpYzoKCiAgICAgICAgQ0xfU2xvdCgpCiAgICAgICAgOiBpbXBsKF9fbnVsbCkKICAgICAgICB7
CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdChjb25zdCBDTF9TbG90ICZjb3B5KQogICAgICAg
IDogaW1wbChjb3B5LmltcGwpCiAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGltcGwgIT0g
X19udWxsKSBpbXBsLT5hZGRfc2xvdF9yZWYoKTsKICAgICAgICB9CgoKICAgICAgICB+Q0xfU2xv
dCgpCiAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGltcGwgIT0gX19udWxsKSBpbXBsLT5y
ZWxlYXNlX3Nsb3RfcmVmKCk7CiAgICAgICAgfQoKCgogICAgICAgIHZvaWQgb3BlcmF0b3IgPShj
b25zdCBDTF9TbG90ICZjb3B5KQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChpbXBsKSBp
bXBsLT5yZWxlYXNlX3Nsb3RfcmVmKCk7CiAgICAgICAgICAgICAgICBpbXBsID0gY29weS5pbXBs
OwogICAgICAgICAgICAgICAgaWYgKGltcGwpIGltcGwtPmFkZF9zbG90X3JlZigpOwogICAgICAg
IH0KCgpwdWJsaWM6CgogICAgICAgIENMX1Nsb3QoQ0xfU2xvdF9HZW5lcmljICppbXBsKQogICAg
ICAgIDogaW1wbChpbXBsKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChpbXBsICE9IF9f
bnVsbCkgaW1wbC0+YWRkX3Nsb3RfcmVmKCk7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdF9H
ZW5lcmljICppbXBsOwp9OwojIDMxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9zaWduYWxzLmgiIDIg
MwojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NpZ25hbHMvc2lnbmFsX3YwLmgiIDEgMwojIDI2
ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxzL3NpZ25hbF92MC5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL0NsYW5MaWIvU2lnbmFscy9zbG90X3YwLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUv
Q2xhbkxpYi9TaWduYWxzL3Nsb3RfdjAuaCIgMwpjbGFzcyBDTF9TbG90X3YwIDogcHVibGljIENM
X1Nsb3RfR2VuZXJpYwp7CnB1YmxpYzoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoY2xhc3Mg
Q0xfU2xvdFBhcmVudF92MCAmc3VwZXIpPTA7Cn07CgoKY2xhc3MgQ0xfU2xvdFBhcmVudF92MAp7
CnB1YmxpYzoKICAgICAgICB0eXBlZGVmIENMX1Nsb3RfdjAgKlNsb3Q7CiAgICAgICAgdHlwZWRl
ZiBzdGQ6Omxpc3Q8U2xvdD46Oml0ZXJhdG9yIFNsb3RJdGVyYXRvcjsKCgpwdWJsaWM6CgoKICAg
ICAgICBDTF9TbG90UGFyZW50X3YwKGNvbnN0IFNsb3RJdGVyYXRvciAmcG9zLCBjb25zdCBTbG90
SXRlcmF0b3IgJmVuZCkKICAgICAgICA6IHBvcyhwb3MpLCBlbmQoZW5kKQogICAgICAgIHsKICAg
ICAgICB9CgoKcHVibGljOgoKICAgICAgICB2b2lkIG9wZXJhdG9yKCkgKCkKICAgICAgICB7CiAg
ICAgICAgICAgICAgICBpZiAocG9zID09IGVuZCkgcmV0dXJuOwoKICAgICAgICAgICAgICAgIFNs
b3RJdGVyYXRvciBuZXh0ID0gcG9zOwogICAgICAgICAgICAgICAgbmV4dCsrOwoKICAgICAgICAg
ICAgICAgIENMX1Nsb3RQYXJlbnRfdjAgc3VwZXIobmV4dCwgZW5kKTsKICAgICAgICAgICAgICAg
ICgqcG9zKS0+Y2FsbChzdXBlcik7CiAgICAgICAgfQoKCnByaXZhdGU6CiAgICAgICAgU2xvdEl0
ZXJhdG9yIHBvcywgZW5kOwp9OwoKCmNsYXNzIENMX0Z1bmN0aW9uU2xvdF92MCA6IHB1YmxpYyBD
TF9TbG90X3YwCnsKcHVibGljOgogICAgICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrKSgpOwog
ICAgICAgIHR5cGVkZWYgdm9pZCAoKlZpcnR1YWxDYWxsYmFjaykoQ0xfU2xvdFBhcmVudF92MCAm
KTsKCgogICAgICAgIENMX0Z1bmN0aW9uU2xvdF92MChDYWxsYmFjayBjYWxsYmFjaywgVmlydHVh
bENhbGxiYWNrIHZpcnR1YWxfY2FsbGJhY2spCiAgICAgICAgOiBjYWxsYmFjayhjYWxsYmFjayks
IHZpcnR1YWxfY2FsbGJhY2sodmlydHVhbF9jYWxsYmFjaykgeyByZXR1cm47IH0KCgogICAgICAg
IHZpcnR1YWwgdm9pZCBjYWxsKENMX1Nsb3RQYXJlbnRfdjAgJnN1cGVyKQogICAgICAgIHsKICAg
ICAgICAgICAgICAgIGlmIChjYWxsYmFjaykgeyBzdXBlcigpOyBjYWxsYmFjaygpOyB9CiAgICAg
ICAgICAgICAgICBlbHNlIHZpcnR1YWxfY2FsbGJhY2soc3VwZXIpOwogICAgICAgIH0KCnByaXZh
dGU6CiAgICAgICAgQ2FsbGJhY2sgY2FsbGJhY2s7CiAgICAgICAgVmlydHVhbENhbGxiYWNrIHZp
cnR1YWxfY2FsbGJhY2s7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2FsbGJhY2tDbGFzcz4KCmNsYXNz
IENMX01ldGhvZFNsb3RfdjAgOiBwdWJsaWMgQ0xfU2xvdF92MAp7CnB1YmxpYzoKICAgICAgICB0
eXBlZGVmIHZvaWQgKENhbGxiYWNrQ2xhc3M6OipDYWxsYmFjaykoKTsKICAgICAgICB0eXBlZGVm
IHZvaWQgKENhbGxiYWNrQ2xhc3M6OipWaXJ0dWFsQ2FsbGJhY2spKENMX1Nsb3RQYXJlbnRfdjAg
Jik7CgoKICAgICAgICBDTF9NZXRob2RTbG90X3YwKENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzLCBD
YWxsYmFjayBjYWxsYmFjaywgVmlydHVhbENhbGxiYWNrIHZpcnR1YWxfY2FsbGJhY2spCiAgICAg
ICAgOiBjYl9jbGFzcyhjYl9jbGFzcyksIGNhbGxiYWNrKGNhbGxiYWNrKSwgdmlydHVhbF9jYWxs
YmFjayh2aXJ0dWFsX2NhbGxiYWNrKSB7IHJldHVybjsgfQoKCiAgICAgICAgdmlydHVhbCB2b2lk
IGNhbGwoQ0xfU2xvdFBhcmVudF92MCAmc3VwZXIpCiAgICAgICAgewogICAgICAgICAgICAgICAg
aWYgKGNhbGxiYWNrKSB7IHN1cGVyKCk7IChjYl9jbGFzcy0+KmNhbGxiYWNrKSgpOyB9CiAgICAg
ICAgICAgICAgICBlbHNlIChjYl9jbGFzcy0+KnZpcnR1YWxfY2FsbGJhY2spKHN1cGVyKTsKICAg
ICAgICB9Cgpwcml2YXRlOgogICAgICAgIENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzOwogICAgICAg
IENhbGxiYWNrIGNhbGxiYWNrOwogICAgICAgIFZpcnR1YWxDYWxsYmFjayB2aXJ0dWFsX2NhbGxi
YWNrOwp9OwoKdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3MsIGNsYXNzIFVzZXJEYXRhPgoK
Y2xhc3MgQ0xfVXNlckRhdGFNZXRob2RTbG90X3YwIDogcHVibGljIENMX1Nsb3RfdjAKewpwdWJs
aWM6CiAgICAgICAgdHlwZWRlZiB2b2lkIChDYWxsYmFja0NsYXNzOjoqQ2FsbGJhY2spKFVzZXJE
YXRhKTsKICAgICAgICB0eXBlZGVmIHZvaWQgKENhbGxiYWNrQ2xhc3M6OipWaXJ0dWFsQ2FsbGJh
Y2spKENMX1Nsb3RQYXJlbnRfdjAgJiwgVXNlckRhdGEpOwoKCiAgICAgICAgQ0xfVXNlckRhdGFN
ZXRob2RTbG90X3YwKENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzLCBDYWxsYmFjayBjYWxsYmFjaywg
VmlydHVhbENhbGxiYWNrIHZpcnR1YWxfY2FsbGJhY2ssIFVzZXJEYXRhIHVzZXJfZGF0YSkKICAg
ICAgICA6IGNiX2NsYXNzKGNiX2NsYXNzKSwgY2FsbGJhY2soY2FsbGJhY2spLCB2aXJ0dWFsX2Nh
bGxiYWNrKHZpcnR1YWxfY2FsbGJhY2spLCB1c2VyX2RhdGEodXNlcl9kYXRhKSB7IHJldHVybjsg
fQoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoQ0xfU2xvdFBhcmVudF92MCAmc3VwZXIpCiAg
ICAgICAgewogICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7IHN1cGVyKCk7IChjYl9jbGFz
cy0+KmNhbGxiYWNrKSh1c2VyX2RhdGEpOyB9CiAgICAgICAgICAgICAgICBlbHNlIChjYl9jbGFz
cy0+KnZpcnR1YWxfY2FsbGJhY2spKHN1cGVyLCB1c2VyX2RhdGEpOwogICAgICAgIH0KCnByaXZh
dGU6CiAgICAgICAgQ2FsbGJhY2tDbGFzcyAqY2JfY2xhc3M7CiAgICAgICAgQ2FsbGJhY2sgY2Fs
bGJhY2s7CiAgICAgICAgVmlydHVhbENhbGxiYWNrIHZpcnR1YWxfY2FsbGJhY2s7CiAgICAgICAg
VXNlckRhdGEgdXNlcl9kYXRhOwp9OwojIDI3ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxz
L3NpZ25hbF92MC5oIiAyIDMKCgoKY2xhc3MgQ0xfU2lnbmFsX3YwCnsKcHVibGljOgogICAgICAg
IHR5cGVkZWYgQ0xfU2xvdF92MCAqU2xvdDsKICAgICAgICB0eXBlZGVmIHN0ZDo6bGlzdDxTbG90
Pjo6aXRlcmF0b3IgU2xvdEl0ZXJhdG9yOwoKCnB1YmxpYzoKCiAgICAgICAgQ0xfU2lnbmFsX3Yw
KCkKICAgICAgICB7CiAgICAgICAgfQoKCiAgICAgICAgfkNMX1NpZ25hbF92MCgpCiAgICAgICAg
ewogICAgICAgICAgICAgICAgZm9yIChTbG90SXRlcmF0b3Igc2xvdF9pdCA9IHNsb3RzLmJlZ2lu
KCk7IHNsb3RfaXQgIT0gc2xvdHMuZW5kKCk7IHNsb3RfaXQrKykKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgU2xvdCBzbG90ID0gKnNsb3RfaXQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHNsb3QtPnJlbGVhc2Vfc2lnbmFsX3JlZigpOwogICAgICAgICAgICAgICAg
fQogICAgICAgIH0KCgpwdWJsaWM6CgogICAgICAgIHZvaWQgb3BlcmF0b3IoKSAoKQogICAgICAg
IHsKICAgICAgICAgICAgICAgIGNhbGwoKTsKICAgICAgICB9CgoKICAgICAgICB2b2lkIGNhbGwo
KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0ZDo6bGlzdDxTbG90SXRlcmF0b3I+IHJlbW92
ZV9zbG90czsKCgogICAgICAgICAgICAgICAgQ0xfU2xvdFBhcmVudF92MCBzdXBlcihzbG90cy5i
ZWdpbigpLCBzbG90cy5lbmQoKSk7CiAgICAgICAgICAgICAgICBzdXBlcigpOwoKCiAgICAgICAg
ICAgICAgICBmb3IgKFNsb3RJdGVyYXRvciBzbG90X2l0ID0gc2xvdHMuYmVnaW4oKTsgc2xvdF9p
dCAhPSBzbG90cy5lbmQoKTsgc2xvdF9pdCsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICBTbG90IHNsb3QgPSAqc2xvdF9pdDsKCgoKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHNsb3QtPmdldF9zbG90X3JlZigpID09IDApCiAgICAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfc2xvdHMucHVzaF9i
YWNrKHNsb3RfaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAg
ICAgIHN0ZDo6bGlzdDxTbG90SXRlcmF0b3I+OjppdGVyYXRvciByZW1vdmVfaXQ7CiAgICAgICAg
ICAgICAgICBmb3IgKHJlbW92ZV9pdCA9IHJlbW92ZV9zbG90cy5iZWdpbigpOyByZW1vdmVfaXQg
IT0gcmVtb3ZlX3Nsb3RzLmVuZCgpOyByZW1vdmVfaXQrKykKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgU2xvdCBzbG90ID0gKipyZW1vdmVfaXQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHNsb3QtPnJlbGVhc2Vfc2lnbmFsX3JlZigpOwogICAgICAgICAgICAgICAg
ICAgICAgICBzbG90cy5lcmFzZSgqcmVtb3ZlX2l0KTsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICB9CgoKICAgICAgICBDTF9TbG90IGNvbm5lY3QoU2xvdCBzbG90KQogICAgICAgIHsKICAgICAg
ICAgICAgICAgIHNsb3QtPmFkZF9zaWduYWxfcmVmKCk7CiAgICAgICAgICAgICAgICBzbG90cy5w
dXNoX2Zyb250KHNsb3QpOwogICAgICAgICAgICAgICAgcmV0dXJuIENMX1Nsb3Qoc2xvdCk7CiAg
ICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdCBjb25uZWN0KHZvaWQgKCpjYWxsYmFjaykoKSkKICAg
ICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdChuZXcgQ0xfRnVuY3Rpb25TbG90
X3YwKGNhbGxiYWNrLCAwKSk7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdCBjb25uZWN0X3Zp
cnR1YWwodm9pZCAoKnZpcnR1YWxfY2FsbGJhY2spKENMX1Nsb3RQYXJlbnRfdjAgJikpCiAgICAg
ICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3QobmV3IENMX0Z1bmN0aW9uU2xvdF92
MCgwLCB2aXJ0dWFsX2NhbGxiYWNrKSk7CiAgICAgICAgfQoKCiAgICAgICAgdGVtcGxhdGUgPGNs
YXNzIENhbGxiYWNrQ2xhc3M+CiAgICAgICAgQ0xfU2xvdCBjb25uZWN0KENhbGxiYWNrQ2xhc3Mg
KmNiX2NsYXNzLCB2b2lkIChDYWxsYmFja0NsYXNzOjoqY2FsbGJhY2spKCkpCiAgICAgICAgewog
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3QobmV3IENMX01ldGhvZFNsb3RfdjA8Q2FsbGJh
Y2tDbGFzcz4oY2JfY2xhc3MsIGNhbGxiYWNrLCAwKSk7CiAgICAgICAgfQoKCiAgICAgICAgdGVt
cGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3M+CiAgICAgICAgQ0xfU2xvdCBjb25uZWN0X3ZpcnR1
YWwoQ2FsbGJhY2tDbGFzcyAqY2JfY2xhc3MsIHZvaWQgKENhbGxiYWNrQ2xhc3M6Oip2aXJ0dWFs
X2NhbGxiYWNrKShDTF9TbG90UGFyZW50X3YwICYpKQogICAgICAgIHsKICAgICAgICAgICAgICAg
IHJldHVybiBjb25uZWN0KG5ldyBDTF9NZXRob2RTbG90X3YwPENhbGxiYWNrQ2xhc3M+KGNiX2Ns
YXNzLCAwLCB2aXJ0dWFsX2NhbGxiYWNrKSk7CiAgICAgICAgfQoKCiAgICAgICAgdGVtcGxhdGUg
PGNsYXNzIENhbGxiYWNrQ2xhc3MsIGNsYXNzIFVzZXJEYXRhPgogICAgICAgIENMX1Nsb3QgY29u
bmVjdCgKICAgICAgICAgICAgICAgIENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzLAogICAgICAgICAg
ICAgICAgdm9pZCAoQ2FsbGJhY2tDbGFzczo6KmNhbGxiYWNrKShVc2VyRGF0YSksCiAgICAgICAg
ICAgICAgICBVc2VyRGF0YSB1c2VyX2RhdGEpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0
dXJuIGNvbm5lY3QobmV3IENMX1VzZXJEYXRhTWV0aG9kU2xvdF92MDxDYWxsYmFja0NsYXNzLCBV
c2VyRGF0YT4oY2JfY2xhc3MsIGNhbGxiYWNrLCAwLCB1c2VyX2RhdGEpKTsKICAgICAgICB9CgoK
ICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ2FsbGJhY2tDbGFzcywgY2xhc3MgVXNlckRhdGE+CiAg
ICAgICAgQ0xfU2xvdCBjb25uZWN0X3ZpcnR1YWwoCiAgICAgICAgICAgICAgICBDYWxsYmFja0Ns
YXNzICpjYl9jbGFzcywKICAgICAgICAgICAgICAgIHZvaWQgKENhbGxiYWNrQ2xhc3M6Oip2aXJ0
dWFsX2NhbGxiYWNrKShDTF9TbG90UGFyZW50X3YwICYsIFVzZXJEYXRhKSwKICAgICAgICAgICAg
ICAgIFVzZXJEYXRhIHVzZXJfZGF0YSkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4g
Y29ubmVjdChuZXcgQ0xfVXNlckRhdGFNZXRob2RTbG90X3YwPENhbGxiYWNrQ2xhc3MsIFVzZXJE
YXRhPihjYl9jbGFzcywgMCwgdmlydHVhbF9jYWxsYmFjaywgdXNlcl9kYXRhKSk7CiAgICAgICAg
fQoKCiAgICAgICAgdm9pZCBkaXNjb25uZWN0KENMX1Nsb3QgJmRpc2Nvbm5lY3Rfc2xvdCkKICAg
ICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKFNsb3RJdGVyYXRvciBzbG90X2l0ID0gc2xvdHMu
YmVnaW4oKTsgc2xvdF9pdCAhPSBzbG90cy5lbmQoKTspCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9ICpzbG90X2l0OwogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoZGlzY29ubmVjdF9zbG90LmltcGwgPT0gc2xvdCkKICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPnJlbGVhc2Vf
c2lnbmFsX3JlZigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RfaXQgPSBz
bG90cy5lcmFzZShzbG90X2l0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdF9p
dCsrOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgpwcml2YXRlOgogICAgICAgIHN0ZDo6
bGlzdDxTbG90PiBzbG90czsKfTsKIyAzMiAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvc2lnbmFscy5o
IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxzL3NpZ25hbF92MS5oIiAxIDMK
IyAyNiAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9zaWduYWxfdjEuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9DbGFuTGliL1NpZ25hbHMvc2xvdF92MS5oIiAxIDMKIyAyNCAiL3Vzci9pbmNs
dWRlL0NsYW5MaWIvU2lnbmFscy9zbG90X3YxLmgiIDMKdGVtcGxhdGUgPGNsYXNzIFBBUkFNMT4K
CmNsYXNzIENMX1Nsb3RfdjEgOiBwdWJsaWMgQ0xfU2xvdF9HZW5lcmljCnsKcHVibGljOgoKICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2FsbChQQVJBTTEgcGFyYW0xKT0wOwp9OwoKdGVtcGxhdGUgPGNs
YXNzIFBBUkFNMT4KCmNsYXNzIENMX0Z1bmN0aW9uU2xvdF92MSA6IHB1YmxpYyBDTF9TbG90X3Yx
PFBBUkFNMT4KewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB2b2lkICgqQ2FsbGJhY2spKFBBUkFN
MSk7CgoKICAgICAgICBDTF9GdW5jdGlvblNsb3RfdjEoQ2FsbGJhY2sgY2FsbGJhY2spIDogY2Fs
bGJhY2soY2FsbGJhY2spIHsgcmV0dXJuOyB9CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChQ
QVJBTTEgcGFyYW0xKSB7IGNhbGxiYWNrKHBhcmFtMSk7IH0KCnByaXZhdGU6CiAgICAgICAgQ2Fs
bGJhY2sgY2FsbGJhY2s7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2FsbGJhY2tDbGFzcywgY2xhc3Mg
UEFSQU0xPgoKY2xhc3MgQ0xfTWV0aG9kU2xvdF92MSA6IHB1YmxpYyBDTF9TbG90X3YxPFBBUkFN
MT4KewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB2b2lkIChDYWxsYmFja0NsYXNzOjoqQ2FsbGJh
Y2spKFBBUkFNMSk7CgoKICAgICAgICBDTF9NZXRob2RTbG90X3YxKENhbGxiYWNrQ2xhc3MgKmNi
X2NsYXNzLCBDYWxsYmFjayBjYWxsYmFjaykKICAgICAgICA6IGNiX2NsYXNzKGNiX2NsYXNzKSwg
Y2FsbGJhY2soY2FsbGJhY2spIHsgcmV0dXJuOyB9CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgY2Fs
bChQQVJBTTEgcGFyYW0xKSB7IChjYl9jbGFzcy0+KmNhbGxiYWNrKShwYXJhbTEpOyB9Cgpwcml2
YXRlOgogICAgICAgIENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzOwogICAgICAgIENhbGxiYWNrIGNh
bGxiYWNrOwp9OwoKdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3MsIGNsYXNzIFBBUkFNMSwg
Y2xhc3MgVXNlckRhdGE+CgpjbGFzcyBDTF9Vc2VyRGF0YU1ldGhvZFNsb3RfdjEgOiBwdWJsaWMg
Q0xfU2xvdF92MTxQQVJBTTE+CnsKcHVibGljOgogICAgICAgIHR5cGVkZWYgdm9pZCAoQ2FsbGJh
Y2tDbGFzczo6KkNhbGxiYWNrKShQQVJBTTEsIFVzZXJEYXRhKTsKCgogICAgICAgIENMX1VzZXJE
YXRhTWV0aG9kU2xvdF92MShDYWxsYmFja0NsYXNzICpjYl9jbGFzcywgQ2FsbGJhY2sgY2FsbGJh
Y2ssIFVzZXJEYXRhIHVzZXJfZGF0YSkKICAgICAgICA6IGNiX2NsYXNzKGNiX2NsYXNzKSwgY2Fs
bGJhY2soY2FsbGJhY2spLCB1c2VyX2RhdGEodXNlcl9kYXRhKSB7IHJldHVybjsgfQoKCiAgICAg
ICAgdmlydHVhbCB2b2lkIGNhbGwoUEFSQU0xIHBhcmFtMSkgeyAoY2JfY2xhc3MtPipjYWxsYmFj
aykocGFyYW0xLCB1c2VyX2RhdGEpOyB9Cgpwcml2YXRlOgogICAgICAgIENhbGxiYWNrQ2xhc3Mg
KmNiX2NsYXNzOwogICAgICAgIENhbGxiYWNrIGNhbGxiYWNrOwogICAgICAgIFVzZXJEYXRhIHVz
ZXJfZGF0YTsKfTsKIyAyNyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9zaWduYWxfdjEu
aCIgMiAzCgoKdGVtcGxhdGUgPGNsYXNzIFBBUkFNMT4KCmNsYXNzIENMX1NpZ25hbF92MQp7CnB1
YmxpYzoKICAgICAgICB0eXBlZGVmIENMX1Nsb3RfdjE8UEFSQU0xPiAqU2xvdDsKICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIHN0ZDo6bGlzdDxTbG90Pjo6aXRlcmF0b3IgU2xvdEl0ZXJhdG9yOwoK
CnB1YmxpYzoKCiAgICAgICAgQ0xfU2lnbmFsX3YxKCkKICAgICAgICB7CiAgICAgICAgfQoKCiAg
ICAgICAgfkNMX1NpZ25hbF92MSgpCiAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChTbG90
SXRlcmF0b3Igc2xvdF9pdCA9IHNsb3RzLmJlZ2luKCk7IHNsb3RfaXQgIT0gc2xvdHMuZW5kKCk7
IHNsb3RfaXQrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgU2xv
dCBzbG90ID0gKnNsb3RfaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPnJlbGVhc2Vf
c2lnbmFsX3JlZigpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgpwdWJsaWM6CgogICAg
ICAgIHZvaWQgb3BlcmF0b3IoKSAoUEFSQU0xIHBhcmFtMSkKICAgICAgICB7CiAgICAgICAgICAg
ICAgICBjYWxsKHBhcmFtMSk7CiAgICAgICAgfQoKCiAgICAgICAgdm9pZCBjYWxsKFBBUkFNMSBw
YXJhbTEpCiAgICAgICAgewogICAgICAgICAgICAgICAgc3RkOjpsaXN0PFNsb3RJdGVyYXRvcj4g
cmVtb3ZlX3Nsb3RzOwoKCiAgICAgICAgICAgICAgICBmb3IgKFNsb3RJdGVyYXRvciBzbG90X2l0
ID0gc2xvdHMuYmVnaW4oKTsgc2xvdF9pdCAhPSBzbG90cy5lbmQoKTsgc2xvdF9pdCsrKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBTbG90IHNsb3QgPSAqc2xvdF9p
dDsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmdldF9zbG90X3JlZigpID09
IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZW1vdmVfc2xvdHMucHVzaF9iYWNrKHNsb3RfaXQpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICBzbG90LT5jYWxsKHBhcmFtMSk7CiAgICAgICAgICAgICAgICB9CgoK
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6bGlzdDxTbG90SXRlcmF0b3I+OjppdGVyYXRv
ciByZW1vdmVfaXQ7CiAgICAgICAgICAgICAgICBmb3IgKHJlbW92ZV9pdCA9IHJlbW92ZV9zbG90
cy5iZWdpbigpOyByZW1vdmVfaXQgIT0gcmVtb3ZlX3Nsb3RzLmVuZCgpOyByZW1vdmVfaXQrKykK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgU2xvdCBzbG90ID0gKipy
ZW1vdmVfaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPnJlbGVhc2Vfc2lnbmFsX3Jl
ZigpOwogICAgICAgICAgICAgICAgICAgICAgICBzbG90cy5lcmFzZSgqcmVtb3ZlX2l0KTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9CgoKICAgICAgICBDTF9TbG90IGNvbm5lY3QoU2xvdCBz
bG90KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHNsb3QtPmFkZF9zaWduYWxfcmVmKCk7CiAg
ICAgICAgICAgICAgICBzbG90cy5wdXNoX2JhY2soc2xvdCk7CiAgICAgICAgICAgICAgICByZXR1
cm4gQ0xfU2xvdChzbG90KTsKICAgICAgICB9CgoKICAgICAgICBDTF9TbG90IGNvbm5lY3Qodm9p
ZCAoKmNhbGxiYWNrKShQQVJBTTEpKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBj
b25uZWN0KG5ldyBDTF9GdW5jdGlvblNsb3RfdjE8UEFSQU0xPihjYWxsYmFjaykpOwogICAgICAg
IH0KCgogICAgICAgIHRlbXBsYXRlIDxjbGFzcyBDYWxsYmFja0NsYXNzPgogICAgICAgIENMX1Ns
b3QgY29ubmVjdCgKICAgICAgICAgICAgICAgIENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzLAogICAg
ICAgICAgICAgICAgdm9pZCAoQ2FsbGJhY2tDbGFzczo6KmNhbGxiYWNrKShQQVJBTTEpKQogICAg
ICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb25uZWN0KG5ldyBDTF9NZXRob2RTbG90X3Yx
PENhbGxiYWNrQ2xhc3MsIFBBUkFNMT4oY2JfY2xhc3MsIGNhbGxiYWNrKSk7CiAgICAgICAgfQoK
CiAgICAgICAgdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3MsIGNsYXNzIFVzZXJEYXRhPgog
ICAgICAgIENMX1Nsb3QgY29ubmVjdCgKICAgICAgICAgICAgICAgIENhbGxiYWNrQ2xhc3MgKmNi
X2NsYXNzLAogICAgICAgICAgICAgICAgdm9pZCAoQ2FsbGJhY2tDbGFzczo6KmNhbGxiYWNrKShQ
QVJBTTEsIFVzZXJEYXRhKSwKICAgICAgICAgICAgICAgIFVzZXJEYXRhIHVzZXJfZGF0YSkKICAg
ICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdChuZXcgQ0xfVXNlckRhdGFNZXRo
b2RTbG90X3YxPENhbGxiYWNrQ2xhc3MsIFBBUkFNMSwgVXNlckRhdGE+KGNiX2NsYXNzLCBjYWxs
YmFjaywgdXNlcl9kYXRhKSk7CiAgICAgICAgfQoKCiAgICAgICAgdm9pZCBkaXNjb25uZWN0KENM
X1Nsb3QgJmRpc2Nvbm5lY3Rfc2xvdCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKFNs
b3RJdGVyYXRvciBzbG90X2l0ID0gc2xvdHMuYmVnaW4oKTsgc2xvdF9pdCAhPSBzbG90cy5lbmQo
KTspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9
ICpzbG90X2l0OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzY29ubmVjdF9zbG90Lmlt
cGwgPT0gc2xvdCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNsb3QtPnJlbGVhc2Vfc2lnbmFsX3JlZigpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNsb3RfaXQgPSBzbG90cy5lcmFzZShzbG90X2l0KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2xvdF9pdCsrOwogICAgICAgICAgICAgICAgfQogICAgICAg
IH0KCgpwcml2YXRlOgogICAgICAgIHN0ZDo6bGlzdDxTbG90PiBzbG90czsKfTsKIyAzMyAiL3Vz
ci9pbmNsdWRlL0NsYW5MaWIvc2lnbmFscy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxp
Yi9TaWduYWxzL3NpZ25hbF92Mi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU2ln
bmFscy9zaWduYWxfdjIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NpZ25hbHMvc2xv
dF92Mi5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9zbG90X3YyLmgi
IDMKdGVtcGxhdGUgPGNsYXNzIFBBUkFNMSwgY2xhc3MgUEFSQU0yPgoKY2xhc3MgQ0xfU2xvdF92
MiA6IHB1YmxpYyBDTF9TbG90X0dlbmVyaWMKewpwdWJsaWM6CgogICAgICAgIHZpcnR1YWwgdm9p
ZCBjYWxsKFBBUkFNMSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIpPTA7Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgUEFSQU0xLCBjbGFzcyBQQVJBTTI+CgpjbGFzcyBDTF9GdW5jdGlvblNsb3RfdjIgOiBwdWJs
aWMgQ0xfU2xvdF92MjxQQVJBTTEsIFBBUkFNMj4KewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB2
b2lkICgqQ2FsbGJhY2spKFBBUkFNMSwgUEFSQU0yKTsKCgogICAgICAgIENMX0Z1bmN0aW9uU2xv
dF92MihDYWxsYmFjayBjYWxsYmFjaykgOiBjYWxsYmFjayhjYWxsYmFjaykgeyByZXR1cm47IH0K
CgogICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFBBUkFNMSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIp
IHsgY2FsbGJhY2socGFyYW0xLCBwYXJhbTIpOyB9Cgpwcml2YXRlOgogICAgICAgIENhbGxiYWNr
IGNhbGxiYWNrOwp9OwoKdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3MsIGNsYXNzIFBBUkFN
MSwgY2xhc3MgUEFSQU0yPgoKY2xhc3MgQ0xfTWV0aG9kU2xvdF92MiA6IHB1YmxpYyBDTF9TbG90
X3YyPFBBUkFNMSwgUEFSQU0yPgp7CnB1YmxpYzoKICAgICAgICB0eXBlZGVmIHZvaWQgKENhbGxi
YWNrQ2xhc3M6OipDYWxsYmFjaykoUEFSQU0xLCBQQVJBTTIpOwoKCiAgICAgICAgQ0xfTWV0aG9k
U2xvdF92MihDYWxsYmFja0NsYXNzICpjYl9jbGFzcywgQ2FsbGJhY2sgY2FsbGJhY2spCiAgICAg
ICAgOiBjYl9jbGFzcyhjYl9jbGFzcyksIGNhbGxiYWNrKGNhbGxiYWNrKSB7IHJldHVybjsgfQoK
CiAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoUEFSQU0xIHBhcmFtMSwgUEFSQU0yIHBhcmFtMikg
eyAoY2JfY2xhc3MtPipjYWxsYmFjaykocGFyYW0xLCBwYXJhbTIpOyB9Cgpwcml2YXRlOgogICAg
ICAgIENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzOwogICAgICAgIENhbGxiYWNrIGNhbGxiYWNrOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3MsIGNsYXNzIFBBUkFNMSwgY2xhc3MgUEFS
QU0yLCBjbGFzcyBVc2VyRGF0YT4KCmNsYXNzIENMX1VzZXJEYXRhTWV0aG9kU2xvdF92MiA6IHB1
YmxpYyBDTF9TbG90X3YyPFBBUkFNMSwgUEFSQU0yPgp7CnB1YmxpYzoKICAgICAgICB0eXBlZGVm
IHZvaWQgKENhbGxiYWNrQ2xhc3M6OipDYWxsYmFjaykoUEFSQU0xLCBQQVJBTTIsIFVzZXJEYXRh
KTsKCgogICAgICAgIENMX1VzZXJEYXRhTWV0aG9kU2xvdF92MihDYWxsYmFja0NsYXNzICpjYl9j
bGFzcywgQ2FsbGJhY2sgY2FsbGJhY2ssIFVzZXJEYXRhIHVzZXJfZGF0YSkKICAgICAgICA6IGNi
X2NsYXNzKGNiX2NsYXNzKSwgY2FsbGJhY2soY2FsbGJhY2spLCB1c2VyX2RhdGEodXNlcl9kYXRh
KSB7IHJldHVybjsgfQoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoUEFSQU0xIHBhcmFtMSwg
UEFSQU0yIHBhcmFtMikgeyAoY2JfY2xhc3MtPipjYWxsYmFjaykocGFyYW0xLCBwYXJhbTIsIHVz
ZXJfZGF0YSk7IH0KCnByaXZhdGU6CiAgICAgICAgQ2FsbGJhY2tDbGFzcyAqY2JfY2xhc3M7CiAg
ICAgICAgQ2FsbGJhY2sgY2FsbGJhY2s7CiAgICAgICAgVXNlckRhdGEgdXNlcl9kYXRhOwp9Owoj
IDI3ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxzL3NpZ25hbF92Mi5oIiAyIDMKCgp0ZW1w
bGF0ZSA8Y2xhc3MgUEFSQU0xLCBjbGFzcyBQQVJBTTI+CgpjbGFzcyBDTF9TaWduYWxfdjIKewpw
dWJsaWM6CiAgICAgICAgdHlwZWRlZiBDTF9TbG90X3YyPFBBUkFNMSwgUEFSQU0yPiAqU2xvdDsK
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6bGlzdDxTbG90Pjo6aXRlcmF0b3IgU2xvdEl0
ZXJhdG9yOwoKCnB1YmxpYzoKCiAgICAgICAgQ0xfU2lnbmFsX3YyKCkKICAgICAgICB7CiAgICAg
ICAgfQoKCiAgICAgICAgfkNMX1NpZ25hbF92MigpCiAgICAgICAgewogICAgICAgICAgICAgICAg
Zm9yIChTbG90SXRlcmF0b3Igc2xvdF9pdCA9IHNsb3RzLmJlZ2luKCk7IHNsb3RfaXQgIT0gc2xv
dHMuZW5kKCk7IHNsb3RfaXQrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgU2xvdCBzbG90ID0gKnNsb3RfaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Qt
PnJlbGVhc2Vfc2lnbmFsX3JlZigpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgpwdWJs
aWM6CgogICAgICAgIHZvaWQgb3BlcmF0b3IoKSAoUEFSQU0xIHBhcmFtMSwgUEFSQU0yIHBhcmFt
MikKICAgICAgICB7CiAgICAgICAgICAgICAgICBjYWxsKHBhcmFtMSwgcGFyYW0yKTsKICAgICAg
ICB9CgoKICAgICAgICB2b2lkIGNhbGwoUEFSQU0xIHBhcmFtMSwgUEFSQU0yIHBhcmFtMikKICAg
ICAgICB7CiAgICAgICAgICAgICAgICBzdGQ6Omxpc3Q8U2xvdEl0ZXJhdG9yPiByZW1vdmVfc2xv
dHM7CgoKICAgICAgICAgICAgICAgIGZvciAoU2xvdEl0ZXJhdG9yIHNsb3RfaXQgPSBzbG90cy5i
ZWdpbigpOyBzbG90X2l0ICE9IHNsb3RzLmVuZCgpOyBzbG90X2l0KyspCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9ICpzbG90X2l0OwoKCgogICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+Z2V0X3Nsb3RfcmVmKCkgPT0gMCkKICAgICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92
ZV9zbG90cy5wdXNoX2JhY2soc2xvdF9pdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgIHNsb3QtPmNhbGwocGFyYW0xLCBwYXJhbTIpOwogICAgICAgICAgICAgICAgfQoKCiAg
ICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Omxpc3Q8U2xvdEl0ZXJhdG9yPjo6aXRlcmF0b3Ig
cmVtb3ZlX2l0OwogICAgICAgICAgICAgICAgZm9yIChyZW1vdmVfaXQgPSByZW1vdmVfc2xvdHMu
YmVnaW4oKTsgcmVtb3ZlX2l0ICE9IHJlbW92ZV9zbG90cy5lbmQoKTsgcmVtb3ZlX2l0KyspCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9ICoqcmVt
b3ZlX2l0OwogICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgc2xvdHMuZXJhc2UoKnJlbW92ZV9pdCk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdCBjb25uZWN0KFNsb3Qgc2xv
dCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBzbG90LT5hZGRfc2lnbmFsX3JlZigpOwogICAg
ICAgICAgICAgICAgc2xvdHMucHVzaF9iYWNrKHNsb3QpOwogICAgICAgICAgICAgICAgcmV0dXJu
IENMX1Nsb3Qoc2xvdCk7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdCBjb25uZWN0KHZvaWQg
KCpjYWxsYmFjaykoUEFSQU0xLCBQQVJBTTIpKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJl
dHVybiBjb25uZWN0KG5ldyBDTF9GdW5jdGlvblNsb3RfdjI8UEFSQU0xLCBQQVJBTTI+KGNhbGxi
YWNrKSk7CiAgICAgICAgfQoKCiAgICAgICAgdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3M+
CiAgICAgICAgQ0xfU2xvdCBjb25uZWN0KAogICAgICAgICAgICAgICAgQ2FsbGJhY2tDbGFzcyAq
Y2JfY2xhc3MsCiAgICAgICAgICAgICAgICB2b2lkIChDYWxsYmFja0NsYXNzOjoqY2FsbGJhY2sp
KFBBUkFNMSwgUEFSQU0yKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVj
dChuZXcgQ0xfTWV0aG9kU2xvdF92MjxDYWxsYmFja0NsYXNzLCBQQVJBTTEsIFBBUkFNMj4oY2Jf
Y2xhc3MsIGNhbGxiYWNrKSk7CiAgICAgICAgfQoKCiAgICAgICAgdGVtcGxhdGUgPGNsYXNzIENh
bGxiYWNrQ2xhc3MsIGNsYXNzIFVzZXJEYXRhPgogICAgICAgIENMX1Nsb3QgY29ubmVjdCgKICAg
ICAgICAgICAgICAgIENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzLAogICAgICAgICAgICAgICAgdm9p
ZCAoQ2FsbGJhY2tDbGFzczo6KmNhbGxiYWNrKShQQVJBTTEsIFBBUkFNMiwgVXNlckRhdGEpLAog
ICAgICAgICAgICAgICAgVXNlckRhdGEgdXNlcl9kYXRhKQogICAgICAgIHsKICAgICAgICAgICAg
ICAgIHJldHVybiBjb25uZWN0KG5ldyBDTF9Vc2VyRGF0YU1ldGhvZFNsb3RfdjI8Q2FsbGJhY2tD
bGFzcywgUEFSQU0xLCBQQVJBTTIsIFVzZXJEYXRhPihjYl9jbGFzcywgY2FsbGJhY2ssIHVzZXJf
ZGF0YSkpOwogICAgICAgIH0KCgogICAgICAgIHZvaWQgZGlzY29ubmVjdChDTF9TbG90ICZkaXNj
b25uZWN0X3Nsb3QpCiAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChTbG90SXRlcmF0b3Ig
c2xvdF9pdCA9IHNsb3RzLmJlZ2luKCk7IHNsb3RfaXQgIT0gc2xvdHMuZW5kKCk7KQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBTbG90IHNsb3QgPSAqc2xvdF9pdDsK
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc2Nvbm5lY3Rfc2xvdC5pbXBsID09IHNsb3Qp
CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzbG90X2l0ID0gc2xvdHMuZXJhc2Uoc2xvdF9pdCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNsb3RfaXQrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgoKcHJpdmF0
ZToKICAgICAgICBzdGQ6Omxpc3Q8U2xvdD4gc2xvdHM7Cn07CiMgMzQgIi91c3IvaW5jbHVkZS9D
bGFuTGliL3NpZ25hbHMuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9z
aWduYWxfdjMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NpZ25hbHMvc2lnbmFs
X3YzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxzL3Nsb3RfdjMuaCIgMSAz
CiMgMjQgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NpZ25hbHMvc2xvdF92My5oIiAzCnRlbXBsYXRl
IDxjbGFzcyBQQVJBTTEsIGNsYXNzIFBBUkFNMiwgY2xhc3MgUEFSQU0zPgoKY2xhc3MgQ0xfU2xv
dF92MyA6IHB1YmxpYyBDTF9TbG90X0dlbmVyaWMKewpwdWJsaWM6CgogICAgICAgIHZpcnR1YWwg
dm9pZCBjYWxsKFBBUkFNMSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIsIFBBUkFNMyBwYXJhbTMpPTA7
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUEFSQU0xLCBjbGFzcyBQQVJBTTIsIGNsYXNzIFBBUkFNMz4K
CmNsYXNzIENMX0Z1bmN0aW9uU2xvdF92MyA6IHB1YmxpYyBDTF9TbG90X3YzPFBBUkFNMSwgUEFS
QU0yLCBQQVJBTTM+CnsKcHVibGljOgogICAgICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrKShQ
QVJBTTEsIFBBUkFNMiwgUEFSQU0zKTsKCgogICAgICAgIENMX0Z1bmN0aW9uU2xvdF92MyhDYWxs
YmFjayBjYWxsYmFjaykgOiBjYWxsYmFjayhjYWxsYmFjaykgeyByZXR1cm47IH0KCgogICAgICAg
IHZpcnR1YWwgdm9pZCBjYWxsKFBBUkFNMSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIsIFBBUkFNMyBw
YXJhbTMpIHsgY2FsbGJhY2socGFyYW0xLCBwYXJhbTIsIHBhcmFtMyk7IH0KCnByaXZhdGU6CiAg
ICAgICAgQ2FsbGJhY2sgY2FsbGJhY2s7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2FsbGJhY2tDbGFz
cywgY2xhc3MgUEFSQU0xLCBjbGFzcyBQQVJBTTIsIGNsYXNzIFBBUkFNMz4KCmNsYXNzIENMX01l
dGhvZFNsb3RfdjMgOiBwdWJsaWMgQ0xfU2xvdF92MzxQQVJBTTEsIFBBUkFNMiwgUEFSQU0zPgp7
CnB1YmxpYzoKICAgICAgICB0eXBlZGVmIHZvaWQgKENhbGxiYWNrQ2xhc3M6OipDYWxsYmFjayko
UEFSQU0xLCBQQVJBTTIsIFBBUkFNMyk7CgoKICAgICAgICBDTF9NZXRob2RTbG90X3YzKENhbGxi
YWNrQ2xhc3MgKmNiX2NsYXNzLCBDYWxsYmFjayBjYWxsYmFjaykKICAgICAgICA6IGNiX2NsYXNz
KGNiX2NsYXNzKSwgY2FsbGJhY2soY2FsbGJhY2spIHsgcmV0dXJuOyB9CgoKICAgICAgICB2aXJ0
dWFsIHZvaWQgY2FsbChQQVJBTTEgcGFyYW0xLCBQQVJBTTIgcGFyYW0yLCBQQVJBTTMgcGFyYW0z
KSB7IChjYl9jbGFzcy0+KmNhbGxiYWNrKShwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKTsgfQoKcHJp
dmF0ZToKICAgICAgICBDYWxsYmFja0NsYXNzICpjYl9jbGFzczsKICAgICAgICBDYWxsYmFjayBj
YWxsYmFjazsKfTsKCnRlbXBsYXRlIDxjbGFzcyBDYWxsYmFja0NsYXNzLCBjbGFzcyBQQVJBTTEs
IGNsYXNzIFBBUkFNMiwgY2xhc3MgUEFSQU0zLCBjbGFzcyBVc2VyRGF0YT4KCmNsYXNzIENMX1Vz
ZXJEYXRhTWV0aG9kU2xvdF92MyA6IHB1YmxpYyBDTF9TbG90X3YzPFBBUkFNMSwgUEFSQU0yLCBQ
QVJBTTM+CnsKcHVibGljOgogICAgICAgIHR5cGVkZWYgdm9pZCAoQ2FsbGJhY2tDbGFzczo6KkNh
bGxiYWNrKShQQVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBVc2VyRGF0YSk7CgoKICAgICAgICBDTF9V
c2VyRGF0YU1ldGhvZFNsb3RfdjMoQ2FsbGJhY2tDbGFzcyAqY2JfY2xhc3MsIENhbGxiYWNrIGNh
bGxiYWNrLCBVc2VyRGF0YSB1c2VyX2RhdGEpCiAgICAgICAgOiBjYl9jbGFzcyhjYl9jbGFzcyks
IGNhbGxiYWNrKGNhbGxiYWNrKSwgdXNlcl9kYXRhKHVzZXJfZGF0YSkgeyByZXR1cm47IH0KCgog
ICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFBBUkFNMSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIsIFBB
UkFNMyBwYXJhbTMpIHsgKGNiX2NsYXNzLT4qY2FsbGJhY2spKHBhcmFtMSwgcGFyYW0yLCBwYXJh
bTMsIHVzZXJfZGF0YSk7IH0KCnByaXZhdGU6CiAgICAgICAgQ2FsbGJhY2tDbGFzcyAqY2JfY2xh
c3M7CiAgICAgICAgQ2FsbGJhY2sgY2FsbGJhY2s7CiAgICAgICAgVXNlckRhdGEgdXNlcl9kYXRh
Owp9OwojIDI3ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxzL3NpZ25hbF92My5oIiAyIDMK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgUEFSQU0xLCBjbGFzcyBQQVJBTTIsIGNsYXNzIFBBUkFNMz4KCmNs
YXNzIENMX1NpZ25hbF92Mwp7CnB1YmxpYzoKICAgICAgICB0eXBlZGVmIENMX1Nsb3RfdjM8UEFS
QU0xLCBQQVJBTTIsIFBBUkFNMz4gKlNsb3Q7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6
Omxpc3Q8U2xvdD46Oml0ZXJhdG9yIFNsb3RJdGVyYXRvcjsKCgpwdWJsaWM6CgogICAgICAgIENM
X1NpZ25hbF92MygpCiAgICAgICAgewogICAgICAgIH0KCgogICAgICAgIH5DTF9TaWduYWxfdjMo
KQogICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAoU2xvdEl0ZXJhdG9yIHNsb3RfaXQgPSBz
bG90cy5iZWdpbigpOyBzbG90X2l0ICE9IHNsb3RzLmVuZCgpOyBzbG90X2l0KyspCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9ICpzbG90X2l0Owog
ICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYoKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICB9CgoKcHVibGljOgoKICAgICAgICB2b2lkIG9wZXJhdG9yKCkg
KFBBUkFNMSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIsIFBBUkFNMyBwYXJhbTMpCiAgICAgICAgewog
ICAgICAgICAgICAgICAgY2FsbChwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKTsKICAgICAgICB9CgoK
ICAgICAgICB2b2lkIGNhbGwoUEFSQU0xIHBhcmFtMSwgUEFSQU0yIHBhcmFtMiwgUEFSQU0zIHBh
cmFtMykKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGQ6Omxpc3Q8U2xvdEl0ZXJhdG9yPiBy
ZW1vdmVfc2xvdHM7CgoKICAgICAgICAgICAgICAgIGZvciAoU2xvdEl0ZXJhdG9yIHNsb3RfaXQg
PSBzbG90cy5iZWdpbigpOyBzbG90X2l0ICE9IHNsb3RzLmVuZCgpOyBzbG90X2l0KyspCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9ICpzbG90X2l0
OwoKCgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+Z2V0X3Nsb3RfcmVmKCkgPT0g
MCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlbW92ZV9zbG90cy5wdXNoX2JhY2soc2xvdF9pdCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgIHNsb3QtPmNhbGwocGFyYW0xLCBwYXJhbTIsIHBhcmFtMyk7CiAgICAg
ICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6bGlzdDxTbG90SXRl
cmF0b3I+OjppdGVyYXRvciByZW1vdmVfaXQ7CiAgICAgICAgICAgICAgICBmb3IgKHJlbW92ZV9p
dCA9IHJlbW92ZV9zbG90cy5iZWdpbigpOyByZW1vdmVfaXQgIT0gcmVtb3ZlX3Nsb3RzLmVuZCgp
OyByZW1vdmVfaXQrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
U2xvdCBzbG90ID0gKipyZW1vdmVfaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPnJl
bGVhc2Vfc2lnbmFsX3JlZigpOwogICAgICAgICAgICAgICAgICAgICAgICBzbG90cy5lcmFzZSgq
cmVtb3ZlX2l0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgoKICAgICAgICBDTF9TbG90
IGNvbm5lY3QoU2xvdCBzbG90KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHNsb3QtPmFkZF9z
aWduYWxfcmVmKCk7CiAgICAgICAgICAgICAgICBzbG90cy5wdXNoX2JhY2soc2xvdCk7CiAgICAg
ICAgICAgICAgICByZXR1cm4gQ0xfU2xvdChzbG90KTsKICAgICAgICB9CgoKICAgICAgICBDTF9T
bG90IGNvbm5lY3Qodm9pZCAoKmNhbGxiYWNrKShQQVJBTTEsIFBBUkFNMiwgUEFSQU0zKSkKICAg
ICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdChuZXcgQ0xfRnVuY3Rpb25TbG90
X3YzPFBBUkFNMSxQQVJBTTIsUEFSQU0zPihjYWxsYmFjaykpOwogICAgICAgIH0KCgogICAgICAg
IHRlbXBsYXRlIDxjbGFzcyBDYWxsYmFja0NsYXNzPgogICAgICAgIENMX1Nsb3QgY29ubmVjdCgK
ICAgICAgICAgICAgICAgIENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzLAogICAgICAgICAgICAgICAg
dm9pZCAoQ2FsbGJhY2tDbGFzczo6KmNhbGxiYWNrKShQQVJBTTEsIFBBUkFNMiwgUEFSQU0zKSkK
ICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdChuZXcgQ0xfTWV0aG9kU2xv
dF92MzxDYWxsYmFja0NsYXNzLCBQQVJBTTEsIFBBUkFNMiwgUEFSQU0zPihjYl9jbGFzcywgY2Fs
bGJhY2spKTsKICAgICAgICB9CgoKICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ2FsbGJhY2tDbGFz
cywgY2xhc3MgVXNlckRhdGE+CiAgICAgICAgQ0xfU2xvdCBjb25uZWN0KAogICAgICAgICAgICAg
ICAgQ2FsbGJhY2tDbGFzcyAqY2JfY2xhc3MsCiAgICAgICAgICAgICAgICB2b2lkIChDYWxsYmFj
a0NsYXNzOjoqY2FsbGJhY2spKFBBUkFNMSwgUEFSQU0yLCBQQVJBTTMsIFVzZXJEYXRhKSwKICAg
ICAgICAgICAgICAgIFVzZXJEYXRhIHVzZXJfZGF0YSkKICAgICAgICB7CiAgICAgICAgICAgICAg
ICByZXR1cm4gY29ubmVjdChuZXcgQ0xfVXNlckRhdGFNZXRob2RTbG90X3YzPENhbGxiYWNrQ2xh
c3MsIFBBUkFNMSwgUEFSQU0yLCBQQVJBTTMsIFVzZXJEYXRhPihjYl9jbGFzcywgY2FsbGJhY2ss
IHVzZXJfZGF0YSkpOwogICAgICAgIH0KCgogICAgICAgIHZvaWQgZGlzY29ubmVjdChDTF9TbG90
ICZkaXNjb25uZWN0X3Nsb3QpCiAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChTbG90SXRl
cmF0b3Igc2xvdF9pdCA9IHNsb3RzLmJlZ2luKCk7IHNsb3RfaXQgIT0gc2xvdHMuZW5kKCk7KQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBTbG90IHNsb3QgPSAqc2xv
dF9pdDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc2Nvbm5lY3Rfc2xvdC5pbXBsID09
IHNsb3QpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzbG90X2l0ID0gc2xvdHMuZXJhc2Uoc2xvdF9pdCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNsb3RfaXQrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgoK
cHJpdmF0ZToKICAgICAgICBzdGQ6Omxpc3Q8U2xvdD4gc2xvdHM7Cn07CiMgMzUgIi91c3IvaW5j
bHVkZS9DbGFuTGliL3NpZ25hbHMuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU2ln
bmFscy9zaWduYWxfdjQuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NpZ25hbHMv
c2lnbmFsX3Y0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxzL3Nsb3RfdjQu
aCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NpZ25hbHMvc2xvdF92NC5oIiAzCnRl
bXBsYXRlIDxjbGFzcyBQQVJBTTEsIGNsYXNzIFBBUkFNMiwgY2xhc3MgUEFSQU0zLCBjbGFzcyBQ
QVJBTTQ+CgpjbGFzcyBDTF9TbG90X3Y0IDogcHVibGljIENMX1Nsb3RfR2VuZXJpYwp7CnB1Ymxp
YzoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoUEFSQU0xIHBhcmFtMSwgUEFSQU0yIHBhcmFt
MiwgUEFSQU0zIHBhcmFtMywgUEFSQU00IHBhcmFtNCk9MDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBQ
QVJBTTEsIGNsYXNzIFBBUkFNMiwgY2xhc3MgUEFSQU0zLCBjbGFzcyBQQVJBTTQ+CgpjbGFzcyBD
TF9GdW5jdGlvblNsb3RfdjQgOiBwdWJsaWMgQ0xfU2xvdF92NDxQQVJBTTEsIFBBUkFNMiwgUEFS
QU0zLCBQQVJBTTQ+CnsKcHVibGljOgogICAgICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrKShQ
QVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQpOwoKCiAgICAgICAgQ0xfRnVuY3Rpb25TbG90
X3Y0KENhbGxiYWNrIGNhbGxiYWNrKSA6IGNhbGxiYWNrKGNhbGxiYWNrKSB7IHJldHVybjsgfQoK
CiAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoUEFSQU0xIHBhcmFtMSwgUEFSQU0yIHBhcmFtMiwg
UEFSQU0zIHBhcmFtMywgUEFSQU00IHBhcmFtNCkgeyBjYWxsYmFjayhwYXJhbTEsIHBhcmFtMiwg
cGFyYW0zLCBwYXJhbTQpOyB9Cgpwcml2YXRlOgogICAgICAgIENhbGxiYWNrIGNhbGxiYWNrOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3MsIGNsYXNzIFBBUkFNMSwgY2xhc3MgUEFS
QU0yLCBjbGFzcyBQQVJBTTMsIGNsYXNzIFBBUkFNND4KCmNsYXNzIENMX01ldGhvZFNsb3RfdjQg
OiBwdWJsaWMgQ0xfU2xvdF92NDxQQVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQ+CnsKcHVi
bGljOgogICAgICAgIHR5cGVkZWYgdm9pZCAoQ2FsbGJhY2tDbGFzczo6KkNhbGxiYWNrKShQQVJB
TTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQpOwoKCiAgICAgICAgQ0xfTWV0aG9kU2xvdF92NChD
YWxsYmFja0NsYXNzICpjYl9jbGFzcywgQ2FsbGJhY2sgY2FsbGJhY2spCiAgICAgICAgOiBjYl9j
bGFzcyhjYl9jbGFzcyksIGNhbGxiYWNrKGNhbGxiYWNrKSB7IHJldHVybjsgfQoKCiAgICAgICAg
dmlydHVhbCB2b2lkIGNhbGwoUEFSQU0xIHBhcmFtMSwgUEFSQU0yIHBhcmFtMiwgUEFSQU0zIHBh
cmFtMywgUEFSQU00IHBhcmFtNCkgeyAoY2JfY2xhc3MtPipjYWxsYmFjaykocGFyYW0xLCBwYXJh
bTIsIHBhcmFtMywgcGFyYW00KTsgfQoKcHJpdmF0ZToKICAgICAgICBDYWxsYmFja0NsYXNzICpj
Yl9jbGFzczsKICAgICAgICBDYWxsYmFjayBjYWxsYmFjazsKfTsKCnRlbXBsYXRlIDxjbGFzcyBD
YWxsYmFja0NsYXNzLCBjbGFzcyBQQVJBTTEsIGNsYXNzIFBBUkFNMiwgY2xhc3MgUEFSQU0zLCBj
bGFzcyBQQVJBTTQsIGNsYXNzIFVzZXJEYXRhPgoKY2xhc3MgQ0xfVXNlckRhdGFNZXRob2RTbG90
X3Y0IDogcHVibGljIENMX1Nsb3RfdjQ8UEFSQU0xLCBQQVJBTTIsIFBBUkFNMywgUEFSQU00Pgp7
CnB1YmxpYzoKICAgICAgICB0eXBlZGVmIHZvaWQgKENhbGxiYWNrQ2xhc3M6OipDYWxsYmFjayko
UEFSQU0xLCBQQVJBTTIsIFBBUkFNMywgUEFSQU00LCBVc2VyRGF0YSk7CgoKICAgICAgICBDTF9V
c2VyRGF0YU1ldGhvZFNsb3RfdjQoQ2FsbGJhY2tDbGFzcyAqY2JfY2xhc3MsIENhbGxiYWNrIGNh
bGxiYWNrLCBVc2VyRGF0YSB1c2VyX2RhdGEpCiAgICAgICAgOiBjYl9jbGFzcyhjYl9jbGFzcyks
IGNhbGxiYWNrKGNhbGxiYWNrKSwgdXNlcl9kYXRhKHVzZXJfZGF0YSkgeyByZXR1cm47IH0KCgog
ICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFBBUkFNMSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIsIFBB
UkFNMyBwYXJhbTMsIFBBUkFNNCBwYXJhbTQpIHsgKGNiX2NsYXNzLT4qY2FsbGJhY2spKHBhcmFt
MSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgdXNlcl9kYXRhKTsgfQoKcHJpdmF0ZToKICAgICAg
ICBDYWxsYmFja0NsYXNzICpjYl9jbGFzczsKICAgICAgICBDYWxsYmFjayBjYWxsYmFjazsKICAg
ICAgICBVc2VyRGF0YSB1c2VyX2RhdGE7Cn07CiMgMjcgIi91c3IvaW5jbHVkZS9DbGFuTGliL1Np
Z25hbHMvc2lnbmFsX3Y0LmgiIDIgMwoKCnRlbXBsYXRlIDxjbGFzcyBQQVJBTTEsIGNsYXNzIFBB
UkFNMiwgY2xhc3MgUEFSQU0zLCBjbGFzcyBQQVJBTTQ+CgpjbGFzcyBDTF9TaWduYWxfdjQKewpw
dWJsaWM6CiAgICAgICAgdHlwZWRlZiBDTF9TbG90X3Y0PFBBUkFNMSwgUEFSQU0yLCBQQVJBTTMs
IFBBUkFNND4gKlNsb3Q7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Omxpc3Q8U2xvdD46
Oml0ZXJhdG9yIFNsb3RJdGVyYXRvcjsKCgpwdWJsaWM6CgogICAgICAgIENMX1NpZ25hbF92NCgp
CiAgICAgICAgewogICAgICAgIH0KCgogICAgICAgIH5DTF9TaWduYWxfdjQoKQogICAgICAgIHsK
ICAgICAgICAgICAgICAgIGZvciAoU2xvdEl0ZXJhdG9yIHNsb3RfaXQgPSBzbG90cy5iZWdpbigp
OyBzbG90X2l0ICE9IHNsb3RzLmVuZCgpOyBzbG90X2l0KyspCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9ICpzbG90X2l0OwogICAgICAgICAgICAg
ICAgICAgICAgICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYoKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICB9CgoKcHVibGljOgoKICAgICAgICB2b2lkIG9wZXJhdG9yKCkgKFBBUkFNMSBwYXJh
bTEsIFBBUkFNMiBwYXJhbTIsIFBBUkFNMyBwYXJhbTMsIFBBUkFNNCBwYXJhbTQpCiAgICAgICAg
ewogICAgICAgICAgICAgICAgY2FsbChwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQpOwog
ICAgICAgIH0KCgogICAgICAgIHZvaWQgY2FsbChQQVJBTTEgcGFyYW0xLCBQQVJBTTIgcGFyYW0y
LCBQQVJBTTMgcGFyYW0zLCBQQVJBTTQgcGFyYW00KQogICAgICAgIHsKICAgICAgICAgICAgICAg
IHN0ZDo6bGlzdDxTbG90SXRlcmF0b3I+IHJlbW92ZV9zbG90czsKCgogICAgICAgICAgICAgICAg
Zm9yIChTbG90SXRlcmF0b3Igc2xvdF9pdCA9IHNsb3RzLmJlZ2luKCk7IHNsb3RfaXQgIT0gc2xv
dHMuZW5kKCk7IHNsb3RfaXQrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgU2xvdCBzbG90ID0gKnNsb3RfaXQ7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzbG90LT5nZXRfc2xvdF9yZWYoKSA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlX3Nsb3RzLnB1c2hfYmFjayhzbG90
X2l0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+Y2FsbChwYXJh
bTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQpOwogICAgICAgICAgICAgICAgfQoKCiAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBzdGQ6Omxpc3Q8U2xvdEl0ZXJhdG9yPjo6aXRlcmF0b3IgcmVtb3Zl
X2l0OwogICAgICAgICAgICAgICAgZm9yIChyZW1vdmVfaXQgPSByZW1vdmVfc2xvdHMuYmVnaW4o
KTsgcmVtb3ZlX2l0ICE9IHJlbW92ZV9zbG90cy5lbmQoKTsgcmVtb3ZlX2l0KyspCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9ICoqcmVtb3ZlX2l0
OwogICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgc2xvdHMuZXJhc2UoKnJlbW92ZV9pdCk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdCBjb25uZWN0KFNsb3Qgc2xvdCkKICAg
ICAgICB7CiAgICAgICAgICAgICAgICBzbG90LT5hZGRfc2lnbmFsX3JlZigpOwogICAgICAgICAg
ICAgICAgc2xvdHMucHVzaF9iYWNrKHNsb3QpOwogICAgICAgICAgICAgICAgcmV0dXJuIENMX1Ns
b3Qoc2xvdCk7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdCBjb25uZWN0KHZvaWQgKCpjYWxs
YmFjaykoUEFSQU0xLCBQQVJBTTIsIFBBUkFNMywgUEFSQU00KSkKICAgICAgICB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gY29ubmVjdChuZXcgQ0xfRnVuY3Rpb25TbG90X3Y0PFBBUkFNMSxQQVJB
TTIsUEFSQU0zLFBBUkFNND4oY2FsbGJhY2spKTsKICAgICAgICB9CgoKICAgICAgICB0ZW1wbGF0
ZSA8Y2xhc3MgQ2FsbGJhY2tDbGFzcz4KICAgICAgICBDTF9TbG90IGNvbm5lY3QoCiAgICAgICAg
ICAgICAgICBDYWxsYmFja0NsYXNzICpjYl9jbGFzcywKICAgICAgICAgICAgICAgIHZvaWQgKENh
bGxiYWNrQ2xhc3M6OipjYWxsYmFjaykoUEFSQU0xLCBQQVJBTTIsIFBBUkFNMywgUEFSQU00KSkK
ICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdChuZXcgQ0xfTWV0aG9kU2xv
dF92NDxDYWxsYmFja0NsYXNzLCBQQVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQ+KGNiX2Ns
YXNzLCBjYWxsYmFjaykpOwogICAgICAgIH0KCgogICAgICAgIHRlbXBsYXRlIDxjbGFzcyBDYWxs
YmFja0NsYXNzLCBjbGFzcyBVc2VyRGF0YT4KICAgICAgICBDTF9TbG90IGNvbm5lY3QoCiAgICAg
ICAgICAgICAgICBDYWxsYmFja0NsYXNzICpjYl9jbGFzcywKICAgICAgICAgICAgICAgIHZvaWQg
KENhbGxiYWNrQ2xhc3M6OipjYWxsYmFjaykoUEFSQU0xLCBQQVJBTTIsIFBBUkFNMywgUEFSQU00
LCBVc2VyRGF0YSksCiAgICAgICAgICAgICAgICBVc2VyRGF0YSB1c2VyX2RhdGEpCiAgICAgICAg
ewogICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3QobmV3IENMX1VzZXJEYXRhTWV0aG9kU2xv
dF92NDxDYWxsYmFja0NsYXNzLCBQQVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQsIFVzZXJE
YXRhPihjYl9jbGFzcywgY2FsbGJhY2ssIHVzZXJfZGF0YSkpOwogICAgICAgIH0KCgogICAgICAg
IHZvaWQgZGlzY29ubmVjdChDTF9TbG90ICZkaXNjb25uZWN0X3Nsb3QpCiAgICAgICAgewogICAg
ICAgICAgICAgICAgZm9yIChTbG90SXRlcmF0b3Igc2xvdF9pdCA9IHNsb3RzLmJlZ2luKCk7IHNs
b3RfaXQgIT0gc2xvdHMuZW5kKCk7KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICBTbG90IHNsb3QgPSAqc2xvdF9pdDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGRpc2Nvbm5lY3Rfc2xvdC5pbXBsID09IHNsb3QpCiAgICAgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90X2l0ID0gc2xvdHMuZXJhc2Uo
c2xvdF9pdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RfaXQrKzsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICB9CgoKcHJpdmF0ZToKICAgICAgICBzdGQ6Omxpc3Q8U2xvdD4g
c2xvdHM7Cn07CiMgMzYgIi91c3IvaW5jbHVkZS9DbGFuTGliL3NpZ25hbHMuaCIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9zaWduYWxfdjUuaCIgMSAzCiMgMjYgIi91c3Iv
aW5jbHVkZS9DbGFuTGliL1NpZ25hbHMvc2lnbmFsX3Y1LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
Q2xhbkxpYi9TaWduYWxzL3Nsb3RfdjUuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9DbGFuTGli
L1NpZ25hbHMvc2xvdF92NS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBQQVJBTTEsIGNsYXNzIFBBUkFN
MiwgY2xhc3MgUEFSQU0zLCBjbGFzcyBQQVJBTTQsIGNsYXNzIFBBUkFNNT4KCmNsYXNzIENMX1Ns
b3RfdjUgOiBwdWJsaWMgQ0xfU2xvdF9HZW5lcmljCnsKcHVibGljOgoKICAgICAgICB2aXJ0dWFs
IHZvaWQgY2FsbChQQVJBTTEgcGFyYW0xLCBQQVJBTTIgcGFyYW0yLCBQQVJBTTMgcGFyYW0zLCBQ
QVJBTTQgcGFyYW00LCBQQVJBTTUgcGFyYW01KT0wOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFBBUkFN
MSwgY2xhc3MgUEFSQU0yLCBjbGFzcyBQQVJBTTMsIGNsYXNzIFBBUkFNNCwgY2xhc3MgUEFSQU01
PgoKY2xhc3MgQ0xfRnVuY3Rpb25TbG90X3Y1IDogcHVibGljIENMX1Nsb3RfdjU8UEFSQU0xLCBQ
QVJBTTIsIFBBUkFNMywgUEFSQU00LCBQQVJBTTU+CnsKcHVibGljOgogICAgICAgIHR5cGVkZWYg
dm9pZCAoKkNhbGxiYWNrKShQQVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQsIFBBUkFNNSk7
CgoKICAgICAgICBDTF9GdW5jdGlvblNsb3RfdjUoQ2FsbGJhY2sgY2FsbGJhY2spIDogY2FsbGJh
Y2soY2FsbGJhY2spIHsgcmV0dXJuOyB9CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChQQVJB
TTEgcGFyYW0xLCBQQVJBTTIgcGFyYW0yLCBQQVJBTTMgcGFyYW0zLCBQQVJBTTQgcGFyYW00LCBQ
QVJBTTUgcGFyYW01KSB7IGNhbGxiYWNrKHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwg
cGFyYW01KTsgfQoKcHJpdmF0ZToKICAgICAgICBDYWxsYmFjayBjYWxsYmFjazsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBDYWxsYmFja0NsYXNzLCBjbGFzcyBQQVJBTTEsIGNsYXNzIFBBUkFNMiwgY2xh
c3MgUEFSQU0zLCBjbGFzcyBQQVJBTTQsIGNsYXNzIFBBUkFNNT4KCmNsYXNzIENMX01ldGhvZFNs
b3RfdjUgOiBwdWJsaWMgQ0xfU2xvdF92NTxQQVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQs
IFBBUkFNNT4KewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB2b2lkIChDYWxsYmFja0NsYXNzOjoq
Q2FsbGJhY2spKFBBUkFNMSwgUEFSQU0yLCBQQVJBTTMsIFBBUkFNNCwgUEFSQU01KTsKCgogICAg
ICAgIENMX01ldGhvZFNsb3RfdjUoQ2FsbGJhY2tDbGFzcyAqY2JfY2xhc3MsIENhbGxiYWNrIGNh
bGxiYWNrKQogICAgICAgIDogY2JfY2xhc3MoY2JfY2xhc3MpLCBjYWxsYmFjayhjYWxsYmFjaykg
eyByZXR1cm47IH0KCgogICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFBBUkFNMSBwYXJhbTEsIFBB
UkFNMiBwYXJhbTIsIFBBUkFNMyBwYXJhbTMsIFBBUkFNNCBwYXJhbTQsIFBBUkFNNSBwYXJhbTUp
IHsgKGNiX2NsYXNzLT4qY2FsbGJhY2spKHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwg
cGFyYW01KTsgfQoKcHJpdmF0ZToKICAgICAgICBDYWxsYmFja0NsYXNzICpjYl9jbGFzczsKICAg
ICAgICBDYWxsYmFjayBjYWxsYmFjazsKfTsKCnRlbXBsYXRlIDxjbGFzcyBDYWxsYmFja0NsYXNz
LCBjbGFzcyBQQVJBTTEsIGNsYXNzIFBBUkFNMiwgY2xhc3MgUEFSQU0zLCBjbGFzcyBQQVJBTTQs
IGNsYXNzIFBBUkFNNSwgY2xhc3MgVXNlckRhdGE+CgpjbGFzcyBDTF9Vc2VyRGF0YU1ldGhvZFNs
b3RfdjUgOiBwdWJsaWMgQ0xfU2xvdF92NTxQQVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQs
IFBBUkFNNT4KewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB2b2lkIChDYWxsYmFja0NsYXNzOjoq
Q2FsbGJhY2spKFBBUkFNMSwgUEFSQU0yLCBQQVJBTTMsIFBBUkFNNCwgUEFSQU01LCBVc2VyRGF0
YSk7CgoKICAgICAgICBDTF9Vc2VyRGF0YU1ldGhvZFNsb3RfdjUoQ2FsbGJhY2tDbGFzcyAqY2Jf
Y2xhc3MsIENhbGxiYWNrIGNhbGxiYWNrLCBVc2VyRGF0YSB1c2VyX2RhdGEpCiAgICAgICAgOiBj
Yl9jbGFzcyhjYl9jbGFzcyksIGNhbGxiYWNrKGNhbGxiYWNrKSwgdXNlcl9kYXRhKHVzZXJfZGF0
YSkgeyByZXR1cm47IH0KCgogICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFBBUkFNMSBwYXJhbTEs
IFBBUkFNMiBwYXJhbTIsIFBBUkFNMyBwYXJhbTMsIFBBUkFNNCBwYXJhbTQsIFBBUkFNNSBwYXJh
bTUpIHsgKGNiX2NsYXNzLT4qY2FsbGJhY2spKHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFt
NCwgcGFyYW01LCB1c2VyX2RhdGEpOyB9Cgpwcml2YXRlOgogICAgICAgIENhbGxiYWNrQ2xhc3Mg
KmNiX2NsYXNzOwogICAgICAgIENhbGxiYWNrIGNhbGxiYWNrOwogICAgICAgIFVzZXJEYXRhIHVz
ZXJfZGF0YTsKfTsKIyAyNyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9zaWduYWxfdjUu
aCIgMiAzCgoKdGVtcGxhdGUgPGNsYXNzIFBBUkFNMSwgY2xhc3MgUEFSQU0yLCBjbGFzcyBQQVJB
TTMsIGNsYXNzIFBBUkFNNCwgY2xhc3MgUEFSQU01PgoKY2xhc3MgQ0xfU2lnbmFsX3Y1CnsKcHVi
bGljOgogICAgICAgIHR5cGVkZWYgQ0xfU2xvdF92NTxQQVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBQ
QVJBTTQsIFBBUkFNNT4gKlNsb3Q7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Omxpc3Q8
U2xvdD46Oml0ZXJhdG9yIFNsb3RJdGVyYXRvcjsKCgpwdWJsaWM6CgogICAgICAgIENMX1NpZ25h
bF92NSgpCiAgICAgICAgewogICAgICAgIH0KCgogICAgICAgIH5DTF9TaWduYWxfdjUoKQogICAg
ICAgIHsKICAgICAgICAgICAgICAgIGZvciAoU2xvdEl0ZXJhdG9yIHNsb3RfaXQgPSBzbG90cy5i
ZWdpbigpOyBzbG90X2l0ICE9IHNsb3RzLmVuZCgpOyBzbG90X2l0KyspCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9ICpzbG90X2l0OwogICAgICAg
ICAgICAgICAgICAgICAgICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYoKTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICB9CgoKcHVibGljOgoKICAgICAgICB2b2lkIG9wZXJhdG9yKCkgKFBBUkFN
MSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIsIFBBUkFNMyBwYXJhbTMsIFBBUkFNNCBwYXJhbTQsIFBB
UkFNNSBwYXJhbTUpCiAgICAgICAgewogICAgICAgICAgICAgICAgY2FsbChwYXJhbTEsIHBhcmFt
MiwgcGFyYW0zLCBwYXJhbTQsIHBhcmFtNSk7CiAgICAgICAgfQoKCiAgICAgICAgdm9pZCBjYWxs
KFBBUkFNMSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIsIFBBUkFNMyBwYXJhbTMsIFBBUkFNNCBwYXJh
bTQsIFBBUkFNNSBwYXJhbTUpCiAgICAgICAgewogICAgICAgICAgICAgICAgc3RkOjpsaXN0PFNs
b3RJdGVyYXRvcj4gcmVtb3ZlX3Nsb3RzOwoKCiAgICAgICAgICAgICAgICBmb3IgKFNsb3RJdGVy
YXRvciBzbG90X2l0ID0gc2xvdHMuYmVnaW4oKTsgc2xvdF9pdCAhPSBzbG90cy5lbmQoKTsgc2xv
dF9pdCsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBTbG90IHNs
b3QgPSAqc2xvdF9pdDsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmdldF9z
bG90X3JlZigpID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZW1vdmVfc2xvdHMucHVzaF9iYWNrKHNsb3RfaXQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5jYWxsKHBhcmFtMSwgcGFyYW0yLCBw
YXJhbTMsIHBhcmFtNCwgcGFyYW01KTsKICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAg
ICAgdHlwZW5hbWUgc3RkOjpsaXN0PFNsb3RJdGVyYXRvcj46Oml0ZXJhdG9yIHJlbW92ZV9pdDsK
ICAgICAgICAgICAgICAgIGZvciAocmVtb3ZlX2l0ID0gcmVtb3ZlX3Nsb3RzLmJlZ2luKCk7IHJl
bW92ZV9pdCAhPSByZW1vdmVfc2xvdHMuZW5kKCk7IHJlbW92ZV9pdCsrKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICBTbG90IHNsb3QgPSAqKnJlbW92ZV9pdDsKICAg
ICAgICAgICAgICAgICAgICAgICAgc2xvdC0+cmVsZWFzZV9zaWduYWxfcmVmKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHNsb3RzLmVyYXNlKCpyZW1vdmVfaXQpOwogICAgICAgICAgICAgICAg
fQogICAgICAgIH0KCgogICAgICAgIENMX1Nsb3QgY29ubmVjdChTbG90IHNsb3QpCiAgICAgICAg
ewogICAgICAgICAgICAgICAgc2xvdC0+YWRkX3NpZ25hbF9yZWYoKTsKICAgICAgICAgICAgICAg
IHNsb3RzLnB1c2hfYmFjayhzbG90KTsKICAgICAgICAgICAgICAgIHJldHVybiBDTF9TbG90KHNs
b3QpOwogICAgICAgIH0KCgogICAgICAgIENMX1Nsb3QgY29ubmVjdCh2b2lkICgqY2FsbGJhY2sp
KFBBUkFNMSwgUEFSQU0yLCBQQVJBTTMsIFBBUkFNNCwgUEFSQU01KSkKICAgICAgICB7CiAgICAg
ICAgICAgICAgICByZXR1cm4gY29ubmVjdChuZXcgQ0xfRnVuY3Rpb25TbG90X3Y1PFBBUkFNMSxQ
QVJBTTIsUEFSQU0zLFBBUkFNNCxQQVJBTTU+KGNhbGxiYWNrKSk7CiAgICAgICAgfQoKCiAgICAg
ICAgdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3M+CiAgICAgICAgQ0xfU2xvdCBjb25uZWN0
KAogICAgICAgICAgICAgICAgQ2FsbGJhY2tDbGFzcyAqY2JfY2xhc3MsCiAgICAgICAgICAgICAg
ICB2b2lkIChDYWxsYmFja0NsYXNzOjoqY2FsbGJhY2spKFBBUkFNMSwgUEFSQU0yLCBQQVJBTTMs
IFBBUkFNNCwgUEFSQU01KSkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVj
dChuZXcgQ0xfTWV0aG9kU2xvdF92NTxDYWxsYmFja0NsYXNzLCBQQVJBTTEsIFBBUkFNMiwgUEFS
QU0zLCBQQVJBTTQsIFBBUkFNNT4oY2JfY2xhc3MsIGNhbGxiYWNrKSk7CiAgICAgICAgfQoKCiAg
ICAgICAgdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3MsIGNsYXNzIFVzZXJEYXRhPgogICAg
ICAgIENMX1Nsb3QgY29ubmVjdCgKICAgICAgICAgICAgICAgIENhbGxiYWNrQ2xhc3MgKmNiX2Ns
YXNzLAogICAgICAgICAgICAgICAgdm9pZCAoQ2FsbGJhY2tDbGFzczo6KmNhbGxiYWNrKShQQVJB
TTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQsIFBBUkFNNSwgVXNlckRhdGEpLAogICAgICAgICAg
ICAgICAgVXNlckRhdGEgdXNlcl9kYXRhKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy
biBjb25uZWN0KG5ldyBDTF9Vc2VyRGF0YU1ldGhvZFNsb3RfdjU8Q2FsbGJhY2tDbGFzcywgUEFS
QU0xLCBQQVJBTTIsIFBBUkFNMywgUEFSQU00LCBQQVJBTTUsIFVzZXJEYXRhPihjYl9jbGFzcywg
Y2FsbGJhY2ssIHVzZXJfZGF0YSkpOwogICAgICAgIH0KCgogICAgICAgIHZvaWQgZGlzY29ubmVj
dChDTF9TbG90ICZkaXNjb25uZWN0X3Nsb3QpCiAgICAgICAgewogICAgICAgICAgICAgICAgZm9y
IChTbG90SXRlcmF0b3Igc2xvdF9pdCA9IHNsb3RzLmJlZ2luKCk7IHNsb3RfaXQgIT0gc2xvdHMu
ZW5kKCk7KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBTbG90IHNs
b3QgPSAqc2xvdF9pdDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc2Nvbm5lY3Rfc2xv
dC5pbXBsID09IHNsb3QpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzbG90X2l0ID0gc2xvdHMuZXJhc2Uoc2xvdF9pdCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RfaXQrKzsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICB9CgoKcHJpdmF0ZToKICAgICAgICBzdGQ6Omxpc3Q8U2xvdD4gc2xvdHM7Cn07CiMgMzcg
Ii91c3IvaW5jbHVkZS9DbGFuTGliL3NpZ25hbHMuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0Ns
YW5MaWIvU2lnbmFscy9zbG90YnVmZmVyX3YwLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvQ2xh
bkxpYi9TaWduYWxzL3Nsb3RidWZmZXJfdjAuaCIgMwpjbGFzcyBDTF9TbG90QnVmZmVyX3YwCnsK
CnB1YmxpYzoKCiAgICAgICAgQ0xfU2xvdEJ1ZmZlcl92MCgpIDogY291bnQoMCkKICAgICAgICB7
CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdEJ1ZmZlcl92MChDTF9TaWduYWxfdjAgJnNpZ25h
bCkgOiBjb3VudCgwKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGNvbm5lY3Qoc2lnbmFsKTsK
ICAgICAgICB9CgoKcHVibGljOgoKICAgICAgICBvcGVyYXRvciBib29sKCkKICAgICAgICB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gY291bnQgPiAwOwogICAgICAgIH0KCgogICAgICAgIGludCBz
aXplKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7CiAgICAgICAgfQoK
CnB1YmxpYzoKCiAgICAgICAgdm9pZCBjb25uZWN0KENMX1NpZ25hbF92MCAmc2lnbmFsKQogICAg
ICAgIHsKICAgICAgICAgICAgICAgIHNsb3QgPSBzaWduYWwuY29ubmVjdCh0aGlzLCAmQ0xfU2xv
dEJ1ZmZlcl92MDo6Y2FsbGJhY2spOwogICAgICAgIH0KCgogICAgICAgIHZvaWQgZGlzY29ubmVj
dChDTF9TaWduYWxfdjAgJnNpZ25hbCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBzaWduYWwu
ZGlzY29ubmVjdChzbG90KTsKICAgICAgICB9CgoKcHJpdmF0ZToKICAgICAgICB2b2lkIGNhbGxi
YWNrKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgIH0KCiAgICAg
ICAgQ0xfU2xvdCBzbG90OwogICAgICAgIGludCBjb3VudDsKfTsKIyAzOCAiL3Vzci9pbmNsdWRl
L0NsYW5MaWIvc2lnbmFscy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxz
L3Nsb3RidWZmZXJfdjEuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NpZ25hbHMv
c2xvdGJ1ZmZlcl92MS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy92ZWN0b3IiIDEgMwojIDY1
ICIvdXNyL2luY2x1ZGUvZysrL3ZlY3RvciIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMv
ZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2Vw
dC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAz
NSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0
ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190
aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsK
CiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xv
Z2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRl
cmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWls
dXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA2NyAiL3Vzci9pbmNsdWRlL2crKy92ZWN0b3IiIDIg
MwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyA2NSAi
L3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF92ZWN0b3IuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9n
KysvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2Z1
bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2V4Y2VwdGlvbl9kZWZpbmVzLmgi
IDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1l
c3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZv
aWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0
KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9f
dGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9t
YWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJn
dW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3df
aW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDY2ICIvdXNyL2luY2x1ZGUvZysrL2Jp
dHMvc3RsX3ZlY3Rvci5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKIyA3OCAiL3Vzci9pbmNsdWRl
L2crKy9iaXRzL3N0bF92ZWN0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNlIHsKcHVibGlj
OgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxv
Y2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0
X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9WZWN0
b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2Fs
bG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3RvcmFn
ZSgwKQogIHt9Cgpwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9hbGxvY2F0b3I7
CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2VuZF9vZl9zdG9y
YWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRh
X2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19w
LCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRl
KF9fcCwgX19uKTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9y
PgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVlPiB7CnB1Ymxp
YzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxs
b2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdl
dF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9WZWN0
b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0YXJ0KDApLCBf
TV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3RlZDoKICBfVHAq
IF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7Cgog
IHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfQWxsb2Nf
dHlwZSBfQWxsb2NfdHlwZTsKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJl
dHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZShf
VHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCBf
X24pO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9WZWN0
b3JfYmFzZQogIDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2lu
c3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+Ojpf
U19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNl
OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9iYXNlKGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0b3JfYmFzZShzaXplX3Qg
X19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewogICAgX01fc3Rh
cnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID0gX01fc3RhcnQ7CiAgICBfTV9l
bmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9WZWN0b3JfYmFzZSgpIHsg
X01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7IH0K
fTsKIyAxNjUgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfdmVjdG9yLmgiIDMKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgpjbGFzcyB2ZWN0b3Ig
OiBwcm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPgp7CgogCgpwcml2YXRlOgogIHR5
cGVkZWYgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKICB0eXBlZGVmIHZlY3Rvcjxf
VHAsIF9BbGxvYz4gdmVjdG9yX3R5cGU7CnB1YmxpYzoKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl
OwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5
cGUqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9y
PHBvaW50ZXIsIHZlY3Rvcl90eXBlPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9fZ251X2N4eDo6X19u
b3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgdmVjdG9yX3R5cGU+CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7
CiAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90
eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVk
ZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6
YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9j
YXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCiAgdHlwZWRl
ZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
OwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsK
CnByb3RlY3RlZDoKICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9N
X2RlYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX3N0YXJ0OwogIHVzaW5nIF9CYXNlOjpfTV9m
aW5pc2g7CiAgdXNpbmcgX0Jhc2U6Ol9NX2VuZF9vZl9zdG9yYWdlOwoKcHJvdGVjdGVkOgogIHZv
aWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCk7CiAg
dm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pOwoKcHVibGljOgoKCgoKICBp
dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9zdGFydCk7IH0KCgoKCgogIGNv
bnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yIChf
TV9zdGFydCk7IH0KCgoKCgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9m
aW5pc2gpOyB9CgoKCgoKICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBjb25z
dF9pdGVyYXRvciAoX01fZmluaXNoKTsgfQoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4o
KQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCgoKCgogIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsg
cmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cihiZWdpbigpKTsgfQoKCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6
ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KCgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0
CiAgICB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCgoKCgogIHNpemVf
dHlwZSBjYXBhY2l0eSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0
b3IoX01fZW5kX29mX3N0b3JhZ2UpIC0gYmVnaW4oKSk7IH0KCgoKCiAgYm9vbCBlbXB0eSgpIGNv
bnN0CiAgICB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9CiMgMjg5ICIvdXNyL2luY2x1ZGUv
ZysrL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBl
IF9fbikgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQojIDMwMCAiL3Vzci9pbmNsdWRlL2cr
Ky9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVf
dHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KCiAgdm9pZCBfTV9y
YW5nZV9jaGVjayhzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICBpZiAoX19uID49IHRoaXMtPnNp
emUoKSkKICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoInZlY3RvciIpOwogIH0KIyAzMTYgIi91
c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfdmVjdG9yLmgiIDMKICByZWZlcmVuY2UgYXQoc2l6ZV90
eXBlIF9fbikKICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsg
fQojIDMyOCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIGNvbnN0X3Jl
ZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKSBjb25zdAogICAgeyBfTV9yYW5nZV9jaGVjayhfX24p
OyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CgoKICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2Nh
dG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkge30KCiAg
dmVjdG9yKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSwKICAgICAgICAgY29uc3Qg
YWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fbiwg
X19hKQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19u
LCBfX3ZhbHVlKTsgfQoKICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgIDogX0Jh
c2UoX19uLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVk
X2ZpbGxfbihfTV9zdGFydCwgX19uLCBfVHAoKSk7IH0KCiAgdmVjdG9yKGNvbnN0IHZlY3Rvcjxf
VHAsIF9BbGxvYz4mIF9feCkKICAgIDogX0Jhc2UoX194LnNpemUoKSwgX194LmdldF9hbGxvY2F0
b3IoKSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpLCBf
X3guZW5kKCksIF9NX3N0YXJ0KTsgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo
KSkKICAgICAgICA6IF9CYXNlKF9fYSkKICAgICAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBf
TV9pbml0aWFsaXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAg
dGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW50
ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKQogICAgICAgIHsKICAgICAg
X01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9N
X3N0YXJ0ICsgX19uOwogICAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9z
dGFydCwgX19uLCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgICB2b2lkCiAgICAgICAgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICAgICAgewogICAg
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojpp
dGVyYXRvcl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OwogICAgICAgICAgX01fcmFuZ2VfaW5pdGlh
bGl6ZShfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CiAgICAgICAgfQoKICB+dmVj
dG9yKCkKICB7IF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAs
IF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwojIDM5
MyAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQgcmVzZXJ2ZShz
aXplX3R5cGUgX19uKSB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBz
aXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9NX2Fs
bG9jYXRlX2FuZF9jb3B5KF9fbiwgX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9EZXN0cm95
KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9l
bmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAg
X01fZmluaXNoID0gX190bXAgKyBfX29sZF9zaXplOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9
IF9NX3N0YXJ0ICsgX19uOwogICAgfQogIH0KIyA0MjEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9z
dGxfdmVjdG9yLmgiIDMKICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9f
dmFsKSB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9CiAgdm9pZCBfTV9maWxsX2Fzc2ln
bihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19p
bnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01fYXNz
aWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICB0ZW1w
bGF0ZTxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQKICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0lu
dGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICAgeyBfTV9maWxsX2Fz
c2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBf
SW5wdXRJdGVyPgogICAgdm9pZAogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5
IF9JdGVyQ2F0ZWdvcnk7CiAgICAgIF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfSXRl
ckNhdGVnb3J5KCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg
ICB2b2lkCiAgICBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAg
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkCiAgICBfTV9hc3NpZ25f
YXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCgoKCgogIHJlZmVyZW5jZSBm
cm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CgoKCgoKICBjb25zdF9yZWZlcmVuY2UgZnJvbnQo
KSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQoKCgoKCiAgcmVmZXJlbmNlIGJhY2soKSB7IHJl
dHVybiAqKGVuZCgpIC0gMSk7IH0KCgoKCgogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3Qg
eyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiMgNDg4ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3Rs
X3ZlY3Rvci5oIiAzCiAgdm9pZAogIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkKICB7CiAgICBp
ZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIF9Db25zdHJ1Y3QoX01f
ZmluaXNoLCBfX3gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01f
aW5zZXJ0X2F1eChlbmQoKSwgX194KTsKICB9CiMgNTE5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMv
c3RsX3ZlY3Rvci5oIiAzCiAgdm9pZAogIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQog
IHsKICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgIHN0ZDo6c3dhcChf
TV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgc3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdl
LCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogIH0KIyA1MzggIi91c3IvaW5jbHVkZS9nKysvYml0
cy9zdGxfdmVjdG9yLmgiIDMKICBpdGVyYXRvcgogIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u
LCBjb25zdCBfVHAmIF9feCkKICB7CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJl
Z2luKCk7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRp
b24gPT0gZW5kKCkpIHsKICAgICAgX0NvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAgICsr
X01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9f
cG9zaXRpb24pLCBfX3gpOwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQojIDU2MiAiL3Vz
ci9pbmNsdWRlL2crKy9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIGl0ZXJhdG9yCiAgaW5zZXJ0KGl0
ZXJhdG9yIF9fcG9zaXRpb24pCiAgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBi
ZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0
aW9uID09IGVuZCgpKSB7CiAgICAgIF9Db25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytfTV9m
aW5pc2g7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IoX19wb3Np
dGlvbikpOwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQoKCiAgdGVtcGxhdGU8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVn
cmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBfX2ZpcnN0LCBf
X2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgog
ICAgdm9pZAogICAgICAgIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVn
ZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0
KF9fcG9zLCBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbiksIHN0YXRpY19jYXN0PF9UcD4oX192
YWwpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQKICAgICAg
ICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVn
b3J5IF9JdGVyQ2F0ZWdvcnk7CiAgICAgIF9NX3JhbmdlX2luc2VydChfX3BvcywgX19maXJzdCwg
X19sYXN0LCBfSXRlckNhdGVnb3J5KCkpOwogICAgfQojIDYxMiAiL3Vzci9pbmNsdWRlL2crKy9i
aXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQgaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90
eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24s
IF9feCk7IH0KCiAgdm9pZCBfTV9maWxsX2luc2VydCAoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlw
ZSBfX24sIGNvbnN0IF9UcCYgX194KTsKIyA2MjYgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxf
dmVjdG9yLmgiIDMKICB2b2lkIHBvcF9iYWNrKCkgewogICAgLS1fTV9maW5pc2g7CiAgICBfRGVz
dHJveShfTV9maW5pc2gpOwogIH0KIyA2NDUgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfdmVj
dG9yLmgiIDMKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBpZiAo
X19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgp
LCBfX3Bvc2l0aW9uKTsKICAgIC0tX01fZmluaXNoOwogICAgX0Rlc3Ryb3koX01fZmluaXNoKTsK
ICAgIHJldHVybiBfX3Bvc2l0aW9uOwogIH0KIyA2NjggIi91c3IvaW5jbHVkZS9nKysvYml0cy9z
dGxfdmVjdG9yLmgiIDMKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRv
ciBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9faShjb3B5KF9fbGFzdCwgZW5kKCksIF9fZmlyc3Qp
KTsKICAgIF9EZXN0cm95KF9faSwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0g
KF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQojIDY4NSAiL3Vzci9p
bmNsdWRlL2crKy9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBf
X25ld19zaXplLCBjb25zdCBfVHAmIF9feCkgewogICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkp
CiAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX25ld19zaXplLCBlbmQoKSk7CiAgICBlbHNlCiAgICAg
IGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICB9CiMgNzAxICIvdXNy
L2luY2x1ZGUvZysrL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCByZXNpemUoc2l6ZV90eXBl
IF9fbmV3X3NpemUpIHsgcmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQoKCgoKCgoKICB2b2lk
IGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KCnByb3RlY3RlZDoKCiAgdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgcG9pbnRlciBfTV9hbGxvY2F0ZV9hbmRfY29w
eShzaXplX3R5cGUgX19uLCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp
CiAgewogICAgcG9pbnRlciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgewog
ICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9N
X2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbik7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxp
emUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewogICAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwog
IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2Vf
aW5pdGlhbGl6ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICB7
CiAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgIF9NX3N0
YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQg
KyBfX247CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0
LCBfTV9zdGFydCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p
ZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAg
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp
Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVy
YXRvcj09KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwg
X0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAg
ICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0
IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195
KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5k
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5k
KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3
YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsK
ICBfX3guc3dhcChfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25z
dCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj4o
Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+
JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9j
PiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kg
PCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
Cm9wZXJhdG9yPj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8
X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZlY3RvcjxfVHAsX0FsbG9jPiYKdmVjdG9yPF9UcCxf
QWxsb2M+OjpvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYg
KCZfX3ggIT0gdGhpcykgewogICAgY29uc3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7
CiAgICBpZiAoX194bGVuID4gY2FwYWNpdHkoKSkgewogICAgICBwb2ludGVyIF9fdG1wID0gX01f
YWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICAgICAg
X0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3Rh
cnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1w
OwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX194bGVuOwogICAgfQogICAg
ZWxzZSBpZiAoc2l6ZSgpID49IF9feGxlbikgewogICAgICBpdGVyYXRvciBfX2koY29weShfX3gu
YmVnaW4oKSwgX194LmVuZCgpLCBiZWdpbigpKSk7CiAgICAgIF9EZXN0cm95KF9faSwgZW5kKCkp
OwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5iZWdpbigpICsg
c2l6ZSgpLCBfTV9zdGFydCk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4oKSAr
IHNpemUoKSwgX194LmVuZCgpLCBfTV9maW5pc2gpOwogICAgfQogICAgX01fZmluaXNoID0gX01f
c3RhcnQgKyBfX3hsZW47CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWdu
KHNpemVfdCBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQp7CiAgaWYgKF9fbiA+IGNhcGFj
aXR5KCkpIHsKICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3ZhbCwgZ2V0X2Fs
bG9jYXRvcigpKTsKICAgIF9fdG1wLnN3YXAoKnRoaXMpOwogIH0KICBlbHNlIGlmIChfX24gPiBz
aXplKCkpIHsKICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgIF9NX2ZpbmlzaCA9
IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gc2l6ZSgpLCBfX3ZhbCk7CiAg
fQogIGVsc2UKICAgIGVyYXNlKGZpbGxfbihiZWdpbigpLCBfX24sIF9fdmFsKSwgZW5kKCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGl0ZXJhdG9yIF9fY3VyKGJlZ2lu
KCkpOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19j
dXIsICsrX19maXJzdCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCkKICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgZWxzZQogICAgaW5zZXJ0KGVuZCgpLCBf
X2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01f
YXNzaWduX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewog
IHNpemVfdHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CgogIGlmIChfX2xl
biA+IGNhcGFjaXR5KCkpIHsKICAgIHBvaW50ZXIgX190bXAoX01fYWxsb2NhdGVfYW5kX2NvcHko
X19sZW4sIF9fZmlyc3QsIF9fbGFzdCkpOwogICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2Zpbmlz
aCk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0
YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2Zp
bmlzaCA9IF9NX3N0YXJ0ICsgX19sZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikg
ewogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFy
dCkpOwogICAgX0Rlc3Ryb3koX19uZXdfZmluaXNoLCBlbmQoKSk7CiAgICBfTV9maW5pc2ggPSBf
X25ld19maW5pc2guYmFzZSgpOwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9
IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgY29weShfX2ZpcnN0LCBf
X21pZCwgX01fc3RhcnQpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fbWlk
LCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBf
X3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29m
X3N0b3JhZ2UpIHsKICAgIF9Db25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsK
ICAgICsrX01fZmluaXNoOwogICAgX1RwIF9feF9jb3B5ID0gX194OwogICAgY29weV9iYWNrd2Fy
ZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAyKSwgaXRlcmF0b3IoX01fZmluaXNo
LSAxKSk7CiAgICAqX19wb3NpdGlvbiA9IF9feF9jb3B5OwogIH0KICBlbHNlIHsKICAgIGNvbnN0
IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVu
ID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOwogICAgaXRlcmF0b3IgX19u
ZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChf
X25ld19zdGFydCk7CiAgICB0cnkgewogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVk
X2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3RhcnQpOwogICAgICBfQ29uc3RydWN0KF9fbmV3
X2ZpbmlzaC5iYXNlKCksIF9feCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19m
aW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7
CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBfRGVzdHJveShfX25ld19zdGFy
dCxfX25ld19maW5pc2gpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgp
LF9fbGVuKTsKICAgICAgICB0aHJvdzsKICAgICAgfQogICAgX0Rlc3Ryb3koYmVnaW4oKSwgZW5k
KCkpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydCk7CiAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgIF9NX2ZpbmlzaCA9
IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0
LmJhc2UoKSArIF9fbGVuOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
Pgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3Np
dGlvbikKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgIF9Db25z
dHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAg
Y29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAyKSwKICAgICAg
ICAgICAgICAgICAgaXRlcmF0b3IoX01fZmluaXNoIC0gMSkpOwogICAgKl9fcG9zaXRpb24gPSBf
VHAoKTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUo
KTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBfX29s
ZF9zaXplIDogMTsKICAgIHBvaW50ZXIgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7
CiAgICBwb2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgdHJ5IHsKICAgICAg
X19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwgX19w
b3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0
YXJ0KTsKICAgICAgX0NvbnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICArK19fbmV3X2Zpbmlz
aDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0
ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgX0Rl
c3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKF9f
bmV3X3N0YXJ0LF9fbGVuKTsKICAgICAgICB0aHJvdzsKICAgICAgfQogICAgX0Rlc3Ryb3koYmVn
aW4oKSwgZW5kKCkpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3Jh
Z2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgX01fZmluaXNo
ID0gX19uZXdfZmluaXNoOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9f
bGVuOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3Rv
cjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVf
dHlwZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX3gpCnsKICBpZiAoX19uICE9IDApIHsKICAgIGlmIChzaXplX3R5cGUoX01fZW5kX29m
X3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikgewogICAgICBfVHAgX194X2NvcHkgPSBfX3g7
CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9u
OwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2goX01fZmluaXNoKTsKICAgICAgaWYgKF9fZWxl
bXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmluaXNoIC0g
X19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbjsKICAg
ICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRf
ZmluaXNoKTsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBfX24sIF9feF9j
b3B5KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihf
TV9maW5pc2gsIF9fbiAtIF9fZWxlbXNfYWZ0ZXIsIF9feF9jb3B5KTsKICAgICAgICBfTV9maW5p
c2ggKz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19w
b3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBf
X2VsZW1zX2FmdGVyOwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfX3hf
Y29weSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5cGUgX19v
bGRfc2l6ZSA9IHNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6
ZSArIG1heChfX29sZF9zaXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9h
bGxvY2F0ZShfX2xlbikpOwogICAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQp
OwogICAgICB0cnkgewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShi
ZWdpbigpLCBfX3Bvc2l0aW9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0g
dW5pbml0aWFsaXplZF9maWxsX24oX19uZXdfZmluaXNoLCBfX24sIF9feCk7CiAgICAgICAgX19u
ZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBlbmQo
KSwgX19uZXdfZmluaXNoKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAg
ICAgICAgX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsKICAgICAgICAgIF9NX2Rl
YWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLF9fbGVuKTsKICAgICAgICAgIHRocm93OwogICAg
ICAgIH0KICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxs
b2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9z
dGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNo
LmJhc2UoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBf
X2xlbjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9N
X3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBmb3IgKCA7IF9fZmlyc3Qg
IT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJz
dCk7CiAgICArK19fcG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxs
b2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsK
ICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShf
X2ZpcnN0LCBfX2xhc3QpOwogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9N
X2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0g
ZW5kKCkgLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2goX01fZmluaXNo
KTsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRpYWxpemVk
X2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01f
ZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xkX2Zp
bmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwg
X19wb3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRv
ciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgX19lbGVtc19hZnRlcik7
CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAg
ICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0aWFs
aXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBf
TV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBf
X3Bvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlw
ZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29s
ZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0
KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19z
dGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9j
b3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9
IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3X2ZpbmlzaCk7CiAgICAg
ICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9u
LCBpdGVyYXRvcihfTV9maW5pc2gpLCBfX25ld19maW5pc2gpOwogICAgICB9CiAgICAgIGNhdGNo
KC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5p
c2gpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksIF9fbGVuKTsK
ICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2Zp
bmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0g
X01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgX01f
ZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBf
X25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCn0KIyA3MiAiL3Vzci9pbmNs
dWRlL2crKy92ZWN0b3IiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYnZlY3Rv
ci5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9idmVjdG9yLmgiIDMKbmFt
ZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9CaXRfdHlwZTsKICBlbnVtIHsg
X01fd29yZF9iaXQgPSBpbnQoOCAqIHNpemVvZihfQml0X3R5cGUpKSB9OwoKc3RydWN0IF9CaXRf
cmVmZXJlbmNlIHsKCiAgX0JpdF90eXBlICogX01fcDsKICBfQml0X3R5cGUgX01fbWFzazsKICBf
Qml0X3JlZmVyZW5jZShfQml0X3R5cGUgKiBfX3gsIF9CaXRfdHlwZSBfX3kpCiAgICA6IF9NX3Ao
X194KSwgX01fbWFzayhfX3kpIHt9CgpwdWJsaWM6CiAgX0JpdF9yZWZlcmVuY2UoKSA6IF9NX3Ao
MCksIF9NX21hc2soMCkge30KICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISEoKl9N
X3AgJiBfTV9tYXNrKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oYm9vbCBfX3gpCiAg
ewogICAgaWYgKF9feCkgKl9NX3AgfD0gX01fbWFzazsKICAgIGVsc2UgKl9NX3AgJj0gfl9NX21h
c2s7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oY29u
c3QgX0JpdF9yZWZlcmVuY2UmIF9feCkKICAgIHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gpOyB9
CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7
IHJldHVybiBib29sKCp0aGlzKSA9PSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPChjb25z
dCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gIWJvb2woKnRoaXMpICYm
IGJvb2woX194KTsgfQogIHZvaWQgZmxpcCgpIHsgKl9NX3AgXj0gX01fbWFzazsgfQp9OwoKaW5s
aW5lIHZvaWQgc3dhcChfQml0X3JlZmVyZW5jZSBfX3gsIF9CaXRfcmVmZXJlbmNlIF9feSkKewog
IGJvb2wgX190bXAgPSBfX3g7CiAgX194ID0gX195OwogIF9feSA9IF9fdG1wOwp9CgpzdHJ1Y3Qg
X0JpdF9pdGVyYXRvcl9iYXNlIDogcHVibGljIGl0ZXJhdG9yPHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnLCBib29sPgp7CiAgX0JpdF90eXBlICogX01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zm
c2V0OwoKICBfQml0X2l0ZXJhdG9yX2Jhc2UoX0JpdF90eXBlICogX194LCB1bnNpZ25lZCBpbnQg
X195KQogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CgogIHZvaWQgX01fYnVtcF91
cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfTV93b3JkX2JpdCAtIDEpIHsKICAgICAgX01f
b2Zmc2V0ID0gMDsKICAgICAgKytfTV9wOwogICAgfQogIH0KICB2b2lkIF9NX2J1bXBfZG93bigp
IHsKICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7CiAgICAgIF9NX29mZnNldCA9IF9NX3dvcmRf
Yml0IC0gMTsKICAgICAgLS1fTV9wOwogICAgfQogIH0KCiAgdm9pZCBfTV9pbmNyKHB0cmRpZmZf
dCBfX2kpIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7CiAgICBf
TV9wICs9IF9fbiAvIF9NX3dvcmRfYml0OwogICAgX19uID0gX19uICUgX01fd29yZF9iaXQ7CiAg
ICBpZiAoX19uIDwgMCkgewogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX24gKyBf
TV93b3JkX2JpdDsKICAgICAgLS1fTV9wOwogICAgfSBlbHNlCiAgICAgIF9NX29mZnNldCA9ICh1
bnNpZ25lZCBpbnQpIF9fbjsKICB9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0X2l0ZXJh
dG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPT0gX19pLl9NX3AgJiYgX01f
b2Zmc2V0ID09IF9faS5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRf
aXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA8IF9faS5fTV9wIHx8
IChfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA8IF9faS5fTV9vZmZzZXQpOwogIH0KICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAg
IHJldHVybiAhKCp0aGlzID09IF9faSk7CiAgfQogIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9CaXRf
aXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX19pIDwgKnRoaXM7CiAgfQog
IGJvb2wgb3BlcmF0b3I8PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3Qgewog
ICAgcmV0dXJuICEoX19pIDwgKnRoaXMpOwogIH0KICBib29sIG9wZXJhdG9yPj0oY29uc3QgX0Jp
dF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzIDwgX19pKTsK
ICB9Cn07CgppbmxpbmUgcHRyZGlmZl90Cm9wZXJhdG9yLShjb25zdCBfQml0X2l0ZXJhdG9yX2Jh
c2UmIF9feCwgY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3kpIHsKICByZXR1cm4gX01fd29y
ZF9iaXQgKiAoX194Ll9NX3AgLSBfX3kuX01fcCkgKyBfX3guX01fb2Zmc2V0IC0gX195Ll9NX29m
ZnNldDsKfQoKCnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3JfYmFz
ZQp7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBfQml0X3Jl
ZmVyZW5jZSogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7CgogIF9C
aXRfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfaXRlcmF0
b3IoX0JpdF90eXBlICogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfQml0X2l0ZXJhdG9y
X2Jhc2UoX194LCBfX3kpIHt9CgogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVy
biByZWZlcmVuY2UoX01fcCwgMVVMIDw8IF9NX29mZnNldCk7IH0KICBpdGVyYXRvciYgb3BlcmF0
b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0
b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9i
dW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvci0tKCkg
ewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9w
ZXJhdG9yLS0oaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF9k
b3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZl
cmVuY2VfdHlwZSBfX2kpIHsKICAgIF9NX2luY3IoX19pKTsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgKnRoaXMg
Kz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZl
cmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBy
ZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90
eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBf
X3RtcCAtPSBfX2k7CiAgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUg
X19pKSB7IHJldHVybiAqKCp0aGlzICsgX19pKTsgfQp9OwoKaW5saW5lIF9CaXRfaXRlcmF0b3IK
b3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkgeyByZXR1
cm4gX194ICsgX19uOyB9CgoKc3RydWN0IF9CaXRfY29uc3RfaXRlcmF0b3IgOiBwdWJsaWMgX0Jp
dF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIGJvb2wgcmVmZXJlbmNlOwogIHR5cGVkZWYgYm9v
bCBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBib29sKiBwb2ludGVyOwogIHR5cGVk
ZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgX0JpdF9jb25zdF9pdGVy
YXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRv
cihfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3Jf
YmFzZShfX3gsIF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9CaXRfaXRlcmF0
b3ImIF9feCkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zmc2V0
KSB7fQoKICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgcmV0dXJuIF9C
aXRfcmVmZXJlbmNlKF9NX3AsIDFVTCA8PCBfTV9vZmZzZXQpOwogIH0KICBjb25zdF9pdGVyYXRv
ciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9f
dG1wID0gKnRoaXM7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNv
bnN0X2l0ZXJhdG9yJiBvcGVyYXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1
cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBjb25z
dF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4g
X190bXA7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBf
X2kpIHsKICAgIF9NX2luY3IoX19pKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRl
cmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgKnRoaXMgKz0gLV9f
aTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZl
cmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7
CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0o
ZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAq
dGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVy
YXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIHJldHVybiAqKCp0aGlzICsgX19pKTsK
ICB9Cn07CgppbmxpbmUgX0JpdF9jb25zdF9pdGVyYXRvcgpvcGVyYXRvcisocHRyZGlmZl90IF9f
biwgY29uc3QgX0JpdF9jb25zdF9pdGVyYXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247IH0K
CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX19pc19zdGF0aWM+CmNsYXNz
IF9CdmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2Nf
dHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2Nh
dG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
IF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2Nh
dG9yX3R5cGUmIF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0b3IoX19hKSwgX01fc3RhcnQoKSwg
X01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgX0JpdF90
eXBlICogX01fYml0X2FsbG9jKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRhX2FsbG9j
YXRvci5hbGxvY2F0ZSgoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdCk7IH0KICB2
b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fcCkKICAgICAgX01fZGF0
YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfQoK
ICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9CaXRfdHlwZSwgX0FsbG9jYXRvcj46OmFsbG9jYXRv
cl90eXBlCiAgICAgICAgICBfTV9kYXRhX2FsbG9jYXRvcjsKICBfQml0X2l0ZXJhdG9yIF9NX3N0
YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIF9CaXRfdHlwZSAqIF9NX2VuZF9vZl9z
dG9yYWdlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfQnZlY3Rvcl9h
bGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUg
X0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAg
IGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7
IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3Qg
YWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29m
X3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFp
dHM8X0JpdF90eXBlLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190
eXBlOwoKICBfQml0X3R5cGUgKiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJu
IF9BbGxvY190eXBlOjphbGxvY2F0ZSgoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2Jp
dCk7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fcCkKICAg
ICAgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9Cgog
IF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgX0Jp
dF90eXBlICogX01fZW5kX29mX3N0b3JhZ2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpj
bGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxv
Yz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxs
b2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0Fs
bG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVm
IHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX0J2ZWN0
b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICB+X0J2
ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2NhdGUoKTsgfQp9OwoKfQoKCgpuYW1lc3Bh
Y2Ugc3RkCnsKCnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxsb2M+CiAgY2xhc3MgdmVjdG9yPGJvb2ws
IF9BbGxvYz4gOiBwdWJsaWMgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+CiAgewogIHB1YmxpYzoKICAg
IHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwog
ICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiBfQml0X3Jl
ZmVyZW5jZSByZWZlcmVuY2U7CiAgICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJlbmNlOwogICAg
dHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICAgIHR5cGVkZWYgY29uc3QgYm9vbCog
Y29uc3RfcG9pbnRlcjsKCiAgICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0
eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogICAgdHlwZWRlZiBy
ZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwog
ICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoK
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjphbGxvY2F0b3JfdHlw
ZSBhbGxvY2F0b3JfdHlwZTsKICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25z
dCB7CiAgICAgIHJldHVybiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46OmdldF9hbGxvY2F0b3IoKTsK
ICAgIH0KCiAgcHJvdGVjdGVkOgogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9i
aXRfYWxsb2M7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2RlYWxsb2NhdGU7
CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX3N0YXJ0OwogICAgdXNpbmcgX0J2
ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9maW5pc2g7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9B
bGxvYz46Ol9NX2VuZF9vZl9zdG9yYWdlOwoKICBwcm90ZWN0ZWQ6CiAgICB2b2lkIF9NX2luaXRp
YWxpemUoc2l6ZV90eXBlIF9fbikgewogICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxs
b2MoX19uKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX01fd29yZF9i
aXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwog
ICAgICBfTV9maW5pc2ggPSBfTV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgfQog
ICAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194KSB7CiAg
ICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICAgIGNv
cHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfTV9maW5pc2ggKyAxKTsKICAgICAg
ICAqX19wb3NpdGlvbiA9IF9feDsKICAgICAgICArK19NX2ZpbmlzaDsKICAgICAgfQogICAgICBl
bHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICA/IDIgKiBzaXplKCkgOiBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9NX3dvcmRfYml0
KTsKICAgICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAg
IGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAw
KSk7CiAgICAgICAgKl9faSsrID0gX194OwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3Np
dGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2Vu
ZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2Jp
dDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0KICAgIH0KCiAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVf
cmFuZ2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBfTV9z
dGFydCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2ZpbmlzaCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9N
X2VuZF9vZl9zdG9yYWdlID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0KQogICAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgICB9CgogICAgdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0Zv
cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5
cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX01faW5pdGlhbGl6ZShf
X24pOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogICAgfQoKICAgIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0
ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW5w
dXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCkgewogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAgICAg
KytfX3BvczsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh
dG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZykgewogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBzaXplX3R5cGUgX19u
ID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoY2FwYWNpdHkoKSAtIHNp
emUoKSA+PSBfX24pIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCks
IF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICAgIGNvcHkoX19maXJz
dCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNl
X3R5cGUoX19uKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBzaXplX3R5cGUg
X19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICAgICAgX0JpdF90eXBlICog
X19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHko
YmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgICBfX2kgPSBj
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19w
b3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAg
ICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9NX3dvcmRfYml0IC0gMSkvX01f
d29yZF9iaXQ7CiAgICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAg
fQogICAgICB9CiAgICB9CgogIHB1YmxpYzoKICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4g
X01fc3RhcnQ7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01f
c3RhcnQ7IH0KICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQogICAgY29u
c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogICAgcmV2ZXJz
ZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQog
ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7CiAgICAgIHJldHVybiBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAgIH0KICAgIHJldmVyc2VfaXRlcmF0b3Ig
cmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICAgIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IoYmVnaW4oKSk7CiAgICB9CgogICAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJl
dHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogICAgc2l6ZV90eXBlIG1heF9zaXpl
KCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAgc2l6ZV90eXBlIGNhcGFjaXR5
KCkgY29uc3QgewogICAgICByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9v
Zl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwogICAgfQogICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KCiAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXpl
X3R5cGUgX19uKQogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19u
KSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0
CiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQoKICAg
IHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgICBpZiAoX19u
ID49IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgidmVjdG9yPGJv
b2w+Iik7CiAgICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsgX01f
cmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogICAgY29uc3RfcmVmZXJl
bmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsg
cmV0dXJuICgqdGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0
b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9B
bGxvYz4oX19hKSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBib29sIF9fdmFsdWUsCiAg
ICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkp
CiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAgX01faW5pdGlh
bGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBf
X3ZhbHVlID8gfjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9f
bikKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsK
ICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2Vu
ZF9vZl9zdG9yYWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29uc3QgdmVjdG9yJiBfX3gpIDog
X0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9yKCkpIHsKICAgICAgX01faW5p
dGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBf
TV9zdGFydCk7CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lk
IF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1
ZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChfTV9zdGFydC5f
TV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgIH0KCiAgICB0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2go
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9pbml0aWFsaXpl
X3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAg
ICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdmVjdG9yKF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgIGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CdmVj
dG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2lu
dGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbml0
aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICAg
IH52ZWN0b3IoKSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShjb25zdCB2ZWN0b3ImIF9feCkg
ewogICAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAgICAgIGlmIChfX3guc2l6
ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9p
bml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9f
eC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9IGJlZ2luKCkgKyBkaWZmZXJlbmNl
X3R5cGUoX194LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoKCgoKICAgIHZv
aWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9fbiA+
IHNpemUoKSkgewogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us
IF9feCA/IH4wIDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBzaXplKCksIF9feCk7
CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbiwgZW5kKCkp
OwogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4w
IDogMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihzaXplX3QgX19uLCBib29sIF9f
eCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxf
SW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fzc2lnbl9kaXNw
YXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24s
IF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6
ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3Qs
IF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
IGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CiAg
ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIs
ICsrX19maXJzdCkKICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICAgIGVsc2UKICAgICAg
ICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVy
YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19sZW4gPCBzaXplKCkpCiAgICAgICAg
ZXJhc2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7CiAgICAgIGVsc2Ug
ewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFu
Y2UoX19taWQsIHNpemUoKSk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgYmVnaW4oKSk7
CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsKICAgICAgfQogICAgfQoKICAg
IHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIGlmIChjYXBhY2l0eSgpIDwgX19u
KSB7CiAgICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbik7CiAgICAgICAg
X01fZmluaXNoID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAg
ICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsK
ICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfTV93b3JkX2JpdCAtIDEp
L19NX3dvcmRfYml0OwogICAgICB9CiAgICB9CgogICAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1
cm4gKmJlZ2luKCk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJu
ICpiZWdpbigpOyB9CiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsg
fQogICAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0gMSk7
IH0KICAgIHZvaWQgcHVzaF9iYWNrKGJvb2wgX194KSB7CiAgICAgIGlmIChfTV9maW5pc2guX01f
cCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgICAqX01fZmluaXNoKysgPSBfX3g7CiAgICAg
IGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogICAgfQogICAgdm9pZCBz
d2FwKHZlY3Rvcjxib29sLCBfQWxsb2M+JiBfX3gpIHsKICAgICAgc3RkOjpzd2FwKF9NX3N0YXJ0
LCBfX3guX01fc3RhcnQpOwogICAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNo
KTsKICAgICAgc3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3Jh
Z2UpOwogICAgfQogICAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wg
X194ID0gYm9vbCgpKSB7CiAgICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0g
YmVnaW4oKTsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlICYm
IF9fcG9zaXRpb24gPT0gZW5kKCkpCiAgICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAgICBl
bHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOwogICAgICByZXR1cm4g
YmVnaW4oKSArIF9fbjsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAg
IHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9J
bnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKSB7CiAg
ICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7CiAgICB9CgogICAgdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0
b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2Zp
cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2ZhbHNlX3R5cGUpIHsKICAgICAgX01faW5zZXJ0X3JhbmdlKF9fcG9zLCBfX2ZpcnN0LCBfX2xh
c3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKICAgIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24s
CiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRv
cj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2l0
aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB2b2lkIF9NX2Zp
bGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJvb2wgX194KSB7
CiAgICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOwogICAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUo
KSA+PSBfX24pIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVuZCgpLCBfTV9m
aW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBf
X3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7CiAgICAgICAgX01fZmluaXNo
ICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHNp
emVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAgICAgX0JpdF90
eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBj
b3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIGZpbGxf
bihfX2ksIF9fbiwgX194KTsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVu
ZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgp
OwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9iaXQg
LSAxKS9fTV93b3JkX2JpdDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAg
ICAgIH0KICAgIH0KCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5
cGUgX19uLCBib29sIF9feCkgewogICAgICBfTV9maWxsX2luc2VydChfX3Bvc2l0aW9uLCBfX24s
IF9feCk7CiAgICB9CgogICAgdm9pZCBwb3BfYmFjaygpIHsgLS1fTV9maW5pc2g7IH0KICAgIGl0
ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgICAgaWYgKF9fcG9zaXRpb24g
KyAxICE9IGVuZCgpKQogICAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0
aW9uKTsKICAgICAgICAtLV9NX2ZpbmlzaDsKICAgICAgcmV0dXJuIF9fcG9zaXRpb247CiAgICB9
CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsK
ICAgICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KTsKICAgICAgcmV0
dXJuIF9fZmlyc3Q7CiAgICB9CiAgICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwg
Ym9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCiAgICAg
ICAgZXJhc2UoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25ld19zaXplKSwgZW5kKCkpOwog
ICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgpLCBfX3gp
OwogICAgfQogICAgdm9pZCBmbGlwKCkgewogICAgICBmb3IgKF9CaXRfdHlwZSAqIF9fcCA9IF9N
X3N0YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZTsgKytfX3ApCiAgICAgICAgKl9f
cCA9IH4qX19wOwogICAgfQoKICAgIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgp
KTsgfQogIH07CgoKdHlwZWRlZiB2ZWN0b3I8Ym9vbCwgX19hbGxvYz4gYml0X3ZlY3RvcjsKCn0K
IyA3MyAiL3Vzci9pbmNsdWRlL2crKy92ZWN0b3IiIDIgMwojIDIzICIvdXNyL2luY2x1ZGUvQ2xh
bkxpYi9TaWduYWxzL3Nsb3RidWZmZXJfdjEuaCIgMiAzCgp0ZW1wbGF0ZSA8Y2xhc3MgUEFSQU0x
PgoKY2xhc3MgQ0xfU2xvdEJ1ZmZlcl92MQp7CnB1YmxpYzoKICAgICAgICBzdHJ1Y3QgUGFyYW1z
CiAgICAgICAgewogICAgICAgICAgICAgICAgUEFSQU0xIHAxOwogICAgICAgIH07CgoKcHVibGlj
OgoKICAgICAgICBDTF9TbG90QnVmZmVyX3YxKCkKICAgICAgICB7CiAgICAgICAgfQoKCiAgICAg
ICAgQ0xfU2xvdEJ1ZmZlcl92MShDTF9TaWduYWxfdjE8UEFSQU0xPiAmc2lnbmFsKQogICAgICAg
IHsKICAgICAgICAgICAgICAgIGNvbm5lY3Qoc2lnbmFsKTsKICAgICAgICB9CgoKcHVibGljOgoK
ICAgICAgICBvcGVyYXRvciBib29sKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4g
IXBhcmFtcy5lbXB0eSgpOwogICAgICAgIH0KCgogICAgICAgIGludCBzaXplKCkKICAgICAgICB7
CiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zLnNpemUoKTsKICAgICAgICB9CgoKICAgICAg
ICBQYXJhbXMgJm9wZXJhdG9yW10oaW50IGluZGV4KQogICAgICAgIHsKICAgICAgICAgICAgICAg
IHJldHVybiBwYXJhbXNbaW5kZXhdOwogICAgICAgIH0KCgpwdWJsaWM6CgogICAgICAgIHZvaWQg
Y29ubmVjdChDTF9TaWduYWxfdjE8UEFSQU0xPiAmc2lnbmFsKQogICAgICAgIHsKICAgICAgICAg
ICAgICAgIHNsb3QgPSBzaWduYWwuY29ubmVjdCh0aGlzLCAmQ0xfU2xvdEJ1ZmZlcl92MTo6Y2Fs
bGJhY2spOwogICAgICAgIH0KCgogICAgICAgIHZvaWQgZGlzY29ubmVjdChDTF9TaWduYWxfdjE8
UEFSQU0xPiAmc2lnbmFsKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHNpZ25hbC5kaXNjb25u
ZWN0KHNsb3QpOwogICAgICAgIH0KCgpwcml2YXRlOgogICAgICAgIHZvaWQgY2FsbGJhY2soUEFS
QU0xIHAxKQogICAgICAgIHsKICAgICAgICAgICAgICAgIFBhcmFtcyBwOwogICAgICAgICAgICAg
ICAgcC5wMSA9IHAxOwoKICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoX2JhY2socCk7CiAgICAg
ICAgfQoKICAgICAgICBzdGQ6OnZlY3RvcjxQYXJhbXM+IHBhcmFtczsKICAgICAgICBDTF9TbG90
IHNsb3Q7Cn07CiMgMzkgIi91c3IvaW5jbHVkZS9DbGFuTGliL3NpZ25hbHMuaCIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9zbG90X2NvbnRhaW5lci5oIiAxIDMKIyAyNiAi
L3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9zbG90X2NvbnRhaW5lci5oIiAzCmNsYXNzIENM
X1Nsb3RDb250YWluZXIKewpwdWJsaWM6CgoKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBTaWdDbGFz
cywgY2xhc3MgQ2xhc3M+CiAgICAgICAgdm9pZCBjb25uZWN0KFNpZ0NsYXNzICZzaWcsIENsYXNz
ICpzZWxmLCB2b2lkKENsYXNzOjoqZnVuYykoKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBz
bG90cy5wdXNoX2JhY2soc2lnLmNvbm5lY3Qoc2VsZiwgZnVuYykpOwogICAgICAgIH0KCgoKICAg
ICAgICB0ZW1wbGF0ZTxjbGFzcyBTaWdDbGFzcywgY2xhc3MgQ2xhc3MsIGNsYXNzIFVzZXJEYXRh
PgogICAgICAgIHZvaWQgY29ubmVjdChTaWdDbGFzcyAmc2lnLCBDbGFzcyAqc2VsZiwgdm9pZChD
bGFzczo6KmZ1bmMpKFVzZXJEYXRhKSwgVXNlckRhdGEgdXNlcl9kYXRhKQogICAgICAgIHsKICAg
ICAgICAgICAgICAgIHNsb3RzLnB1c2hfYmFjayhzaWcuY29ubmVjdChzZWxmLCBmdW5jLCB1c2Vy
X2RhdGEpKTsKICAgICAgICB9CgoKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBTaWdDbGFzcywgY2xh
c3MgQ2xhc3MsIGNsYXNzIFBhcmFtMT4KICAgICAgICB2b2lkIGNvbm5lY3QoU2lnQ2xhc3MgJnNp
ZywgQ2xhc3MgKnNlbGYsIHZvaWQoQ2xhc3M6OipmdW5jKShQYXJhbTEpKQogICAgICAgIHsKICAg
ICAgICAgICAgICAgIHNsb3RzLnB1c2hfYmFjayhzaWcuY29ubmVjdChzZWxmLCBmdW5jKSk7CiAg
ICAgICAgfQoKCgogICAgICAgIHRlbXBsYXRlPGNsYXNzIFNpZ0NsYXNzLCBjbGFzcyBDbGFzcywg
Y2xhc3MgUGFyYW0xLCBjbGFzcyBVc2VyRGF0YT4KICAgICAgICB2b2lkIGNvbm5lY3QoU2lnQ2xh
c3MgJnNpZywgQ2xhc3MgKnNlbGYsIHZvaWQoQ2xhc3M6OipmdW5jKShQYXJhbTEsIFVzZXJEYXRh
KSwgVXNlckRhdGEgdXNlcl9kYXRhKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHNsb3RzLnB1
c2hfYmFjayhzaWcuY29ubmVjdChzZWxmLCBmdW5jLCB1c2VyX2RhdGEpKTsKICAgICAgICB9CgoK
ICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBTaWdDbGFzcywgY2xhc3MgQ2xhc3MsIGNsYXNzIFBhcmFt
MSwgY2xhc3MgUGFyYW0yPgogICAgICAgIHZvaWQgY29ubmVjdChTaWdDbGFzcyAmc2lnLCBDbGFz
cyAqc2VsZiwgdm9pZChDbGFzczo6KmZ1bmMpKFBhcmFtMSwgUGFyYW0yKSkKICAgICAgICB7CiAg
ICAgICAgICAgICAgICBzbG90cy5wdXNoX2JhY2soc2lnLmNvbm5lY3Qoc2VsZiwgZnVuYykpOwog
ICAgICAgIH0KCgoKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBTaWdDbGFzcywgY2xhc3MgQ2xhc3Ms
IGNsYXNzIFBhcmFtMSwgY2xhc3MgUGFyYW0yLCBjbGFzcyBVc2VyRGF0YT4KICAgICAgICB2b2lk
IGNvbm5lY3QoU2lnQ2xhc3MgJnNpZywgQ2xhc3MgKnNlbGYsIHZvaWQoQ2xhc3M6OipmdW5jKShQ
YXJhbTEsIFBhcmFtMiwgVXNlckRhdGEpLCBVc2VyRGF0YSB1c2VyX2RhdGEpCiAgICAgICAgewog
ICAgICAgICAgICAgICAgc2xvdHMucHVzaF9iYWNrKHNpZy5jb25uZWN0KHNlbGYsIGZ1bmMsIHVz
ZXJfZGF0YSkpOwogICAgICAgIH0KCgogICAgICAgIHRlbXBsYXRlPGNsYXNzIFNpZ0NsYXNzLCBj
bGFzcyBDbGFzcywgY2xhc3MgUGFyYW0xLCBjbGFzcyBQYXJhbTIsIGNsYXNzIFBhcmFtMz4KICAg
ICAgICB2b2lkIGNvbm5lY3QoU2lnQ2xhc3MgJnNpZywgQ2xhc3MgKnNlbGYsIHZvaWQoQ2xhc3M6
OipmdW5jKShQYXJhbTEsIFBhcmFtMiwgUGFyYW0zKSkKICAgICAgICB7CiAgICAgICAgICAgICAg
ICBzbG90cy5wdXNoX2JhY2soc2lnLmNvbm5lY3Qoc2VsZiwgZnVuYykpOwogICAgICAgIH0KCgoK
ICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBTaWdDbGFzcywgY2xhc3MgQ2xhc3MsIGNsYXNzIFBhcmFt
MSwgY2xhc3MgUGFyYW0yLCBjbGFzcyBQYXJhbTMsIGNsYXNzIFVzZXJEYXRhPgogICAgICAgIHZv
aWQgY29ubmVjdChTaWdDbGFzcyAmc2lnLCBDbGFzcyAqc2VsZiwgdm9pZChDbGFzczo6KmZ1bmMp
KFBhcmFtMSwgUGFyYW0yLCBQYXJhbTMsIFVzZXJEYXRhKSwgVXNlckRhdGEgdXNlcl9kYXRhKQog
ICAgICAgIHsKICAgICAgICAgICAgICAgIHNsb3RzLnB1c2hfYmFjayhzaWcuY29ubmVjdChzZWxm
LCBmdW5jLCB1c2VyX2RhdGEpKTsKICAgICAgICB9CgoKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBT
aWdDbGFzcywgY2xhc3MgQ2xhc3MsIGNsYXNzIFBhcmFtMSwgY2xhc3MgUGFyYW0yLCBjbGFzcyBQ
YXJhbTMsIGNsYXNzIFBhcmFtND4KICAgICAgICB2b2lkIGNvbm5lY3QoU2lnQ2xhc3MgJnNpZywg
Q2xhc3MgKnNlbGYsIHZvaWQoQ2xhc3M6OipmdW5jKShQYXJhbTEsIFBhcmFtMiwgUGFyYW0zLCBQ
YXJhbTQpKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHNsb3RzLnB1c2hfYmFjayhzaWcuY29u
bmVjdChzZWxmLCBmdW5jKSk7CiAgICAgICAgfQoKCgogICAgICAgIHRlbXBsYXRlPGNsYXNzIFNp
Z0NsYXNzLCBjbGFzcyBDbGFzcywgY2xhc3MgUGFyYW0xLCBjbGFzcyBQYXJhbTIsIGNsYXNzIFBh
cmFtMywgY2xhc3MgUGFyYW00LCBjbGFzcyBVc2VyRGF0YT4KICAgICAgICB2b2lkIGNvbm5lY3Qo
U2lnQ2xhc3MgJnNpZywgQ2xhc3MgKnNlbGYsIHZvaWQoQ2xhc3M6OipmdW5jKShQYXJhbTEsIFBh
cmFtMiwgUGFyYW0zLCBQYXJhbTQsIFVzZXJEYXRhIHVzZXJfZGF0YSksIFVzZXJEYXRhIHVzZXJf
ZGF0YSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBzbG90cy5wdXNoX2JhY2soc2lnLmNvbm5l
Y3Qoc2VsZiwgZnVuYywgdXNlcl9kYXRhKSk7CiAgICAgICAgfQoKCiAgICAgICAgdGVtcGxhdGU8
Y2xhc3MgU2lnQ2xhc3MsIGNsYXNzIENsYXNzLCBjbGFzcyBQYXJhbTEsIGNsYXNzIFBhcmFtMiwg
Y2xhc3MgUGFyYW0zLCBjbGFzcyBQYXJhbTQsIGNsYXNzIFBhcmFtNT4KICAgICAgICB2b2lkIGNv
bm5lY3QoU2lnQ2xhc3MgJnNpZywgQ2xhc3MgKnNlbGYsIHZvaWQoQ2xhc3M6OipmdW5jKShQYXJh
bTEsIFBhcmFtMiwgUGFyYW0zLCBQYXJhbTQsIFBhcmFtNSkpCiAgICAgICAgewogICAgICAgICAg
ICAgICAgc2xvdHMucHVzaF9iYWNrKHNpZy5jb25uZWN0KHNlbGYsIGZ1bmMpKTsKICAgICAgICB9
CgoKCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgU2lnQ2xhc3MsIGNsYXNzIENsYXNzLCBjbGFzcyBQ
YXJhbTEsIGNsYXNzIFBhcmFtMiwgY2xhc3MgUGFyYW0zLCBjbGFzcyBQYXJhbTQsIGNsYXNzIFBh
cmFtNSwgY2xhc3MgVXNlckRhdGE+CiAgICAgICAgdm9pZCBjb25uZWN0KFNpZ0NsYXNzICZzaWcs
IENsYXNzICpzZWxmLCB2b2lkKENsYXNzOjoqZnVuYykoUGFyYW0xLCBQYXJhbTIsIFBhcmFtMywg
UGFyYW00LCBQYXJhbTUsIFVzZXJEYXRhIHVzZXJfZGF0YSksIFVzZXJEYXRhIHVzZXJfZGF0YSkK
ICAgICAgICB7CiAgICAgICAgICAgICAgICBzbG90cy5wdXNoX2JhY2soc2lnLmNvbm5lY3Qoc2Vs
ZiwgZnVuYywgdXNlcl9kYXRhKSk7CiAgICAgICAgfQoKcHJpdmF0ZToKICAgICAgICBzdGQ6Omxp
c3Q8Q0xfU2xvdD4gc2xvdHM7Cn07CiMgNDAgIi91c3IvaW5jbHVkZS9DbGFuTGliL3NpZ25hbHMu
aCIgMiAzCiMgMjMgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvUmVzb3VyY2VzL3Jlc291cmNl
LmgiIDIgMwoKCmNsYXNzIENMX1Jlc291cmNlT3B0aW9uczsKY2xhc3MgQ0xfUmVzb3VyY2VNYW5h
Z2VyOwpjbGFzcyBDTF9SZXNvdXJjZURhdGE7CmNsYXNzIENMX0lucHV0U291cmNlOwpjbGFzcyBD
TF9PdXRwdXRTb3VyY2U7CmNsYXNzIENMX0lucHV0U291cmNlUHJvdmlkZXI7CmNsYXNzIENMX091
dHB1dFNvdXJjZVByb3ZpZGVyOwpjbGFzcyBDTF9SZXNvdXJjZV9HZW5lcmljOwoKCmNsYXNzIENM
X1Jlc291cmNlCnsKCnB1YmxpYzoKCiAgICAgICAgQ0xfUmVzb3VyY2UoCiAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyAmdHlwZSwKICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lLAogICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmxvY2F0aW9uLAog
ICAgICAgICAgICAgICAgY29uc3QgQ0xfUmVzb3VyY2VPcHRpb25zICZvcHRpb25zLAogICAgICAg
ICAgICAgICAgY29uc3QgQ0xfUmVzb3VyY2VNYW5hZ2VyICZtYW5hZ2VyKTsKCgogICAgICAgIENM
X1Jlc291cmNlKGNvbnN0IENMX1Jlc291cmNlICZjb3B5KTsKCgogICAgICAgIENMX1Jlc291cmNl
KCk7CgoKICAgICAgICB2aXJ0dWFsIH5DTF9SZXNvdXJjZSgpOwoKCnB1YmxpYzoKCiAgICAgICAg
Y29uc3Qgc3RkOjpzdHJpbmcgJmdldF90eXBlKCkgY29uc3Q7CgoKICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyAmZ2V0X25hbWUoKSBjb25zdDsKCgoKICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAm
Z2V0X2xvY2F0aW9uKCkgY29uc3Q7CgoKCiAgICAgICAgc3RkOjpzdHJpbmcgZ2V0X2Z1bGxfbG9j
YXRpb24oKSBjb25zdDsKCgogICAgICAgIENMX1Jlc291cmNlT3B0aW9ucyAmZ2V0X29wdGlvbnMo
KTsKCgogICAgICAgIENMX1Jlc291cmNlTWFuYWdlciBnZXRfbWFuYWdlcigpOwoKCiAgICAgICAg
Q0xfUmVzb3VyY2VEYXRhICpnZXRfZGF0YShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CgoKICAg
ICAgICBpbnQgZ2V0X3JlZmVyZW5jZV9jb3VudCgpIGNvbnN0OwoKCnB1YmxpYzoKCiAgICAgICAg
Q0xfU2lnbmFsX3YwICZzaWdfbG9hZF9maWxlKCk7CgoKICAgICAgICBDTF9TaWduYWxfdjE8Q0xf
SW5wdXRTb3VyY2VQcm92aWRlciAqPiAmc2lnX2xvYWRfZGF0YWZpbGUoKTsKCgogICAgICAgIENM
X1NpZ25hbF92MTxDTF9PdXRwdXRTb3VyY2VQcm92aWRlciAqPiAmc2lnX3NhdmVfZGF0YWZpbGUo
KTsKCgogICAgICAgIENMX1NpZ25hbF92MCAmc2lnX3VubG9hZCgpOwoKCnB1YmxpYzoKCiAgICAg
ICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBDTF9SZXNvdXJjZSAmY29weSk7CgoKcHVibGljOgoK
CiAgICAgICAgdm9pZCBhdHRhY2hfZGF0YShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgQ0xfUmVz
b3VyY2VEYXRhICpkYXRhKTsKCgogICAgICAgIHZvaWQgZGV0YWNoX2RhdGEoQ0xfUmVzb3VyY2VE
YXRhICpkYXRhKTsKCgogICAgICAgIHZvaWQgdW5sb2FkKCk7CgoKCiAgICAgICAgdm9pZCBsb2Fk
KCk7CgoKICAgICAgICB2b2lkIGxvYWRfZmlsZSgpOwoKCiAgICAgICAgdm9pZCBsb2FkX2RhdGFm
aWxlKENMX0lucHV0U291cmNlUHJvdmlkZXIgKmlucHV0X3Byb3ZpZGVyKTsKCgogICAgICAgIHZv
aWQgc2F2ZV9kYXRhZmlsZShDTF9PdXRwdXRTb3VyY2VQcm92aWRlciAqb3V0cHV0X3Byb3ZpZGVy
KTsKCgpwdWJsaWM6CgogICAgICAgIENMX1Jlc291cmNlKGNsYXNzIENMX1Jlc291cmNlX0dlbmVy
aWMgKmltcGwpOwoKCiAgICAgICAgQ0xfUmVzb3VyY2VfR2VuZXJpYyAqaW1wbDsKfTsKIyAyMyAi
L3Vzci9pbmNsdWRlL0NsYW5MaWIvRGlzcGxheS9EaXNwbGF5L3N1cmZhY2UuaCIgMiAzCgpjbGFz
cyBDTF9EaXNwbGF5Q2FyZDsKY2xhc3MgQ0xfU3VyZmFjZVByb3ZpZGVyOwpjbGFzcyBDTF9UYXJn
ZXQ7CmNsYXNzIENMX1Jlc291cmNlTWFuYWdlcjsKY2xhc3MgQ0xfU3VyZmFjZV9HZW5lcmljOwoj
IDcxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9EaXNwbGF5L0Rpc3BsYXkvc3VyZmFjZS5oIiAzCmNs
YXNzIENMX1N1cmZhY2UKewoKcHVibGljOgoKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSAqbG9h
ZCgKICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZyZXNvdXJjZV9pZCwKICAgICAg
ICAgICAgICAgIENMX1Jlc291cmNlTWFuYWdlciAqbWFuYWdlcik7CgoKCgoKICAgICAgICBzdGF0
aWMgQ0xfU3VyZmFjZSAqY3JlYXRlKAogICAgICAgICAgICAgICAgQ0xfU3VyZmFjZVByb3ZpZGVy
ICpwcm92aWRlciwKICAgICAgICAgICAgICAgIGJvb2wgZGVsZXRlX3Byb3ZpZGVyPWZhbHNlKTsK
CgoKCgoKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSAqY3JlYXRlX2R5bmFtaWMoCiAgICAgICAg
ICAgICAgICBDTF9TdXJmYWNlUHJvdmlkZXIgKnByb3ZpZGVyLAogICAgICAgICAgICAgICAgYm9v
bCBkZWxldGVfcHJvdmlkZXI9ZmFsc2UpOwoKCnB1YmxpYzoKCgogICAgICAgIENMX1N1cmZhY2Uo
KTsKCgoKCgoKCiAgICAgICAgQ0xfU3VyZmFjZSgKICAgICAgICAgICAgICAgIENMX1N1cmZhY2VQ
cm92aWRlciAqcHJvdmlkZXIsCiAgICAgICAgICAgICAgICBib29sIGRlbGV0ZV9wcm92aWRlciA9
IGZhbHNlLAogICAgICAgICAgICAgICAgYm9vbCBkeW5hbWljID0gZmFsc2UpOwoKCiAgICAgICAg
Q0xfU3VyZmFjZSgKICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZyZXNvdXJjZV9p
ZCwKICAgICAgICAgICAgICAgIENMX1Jlc291cmNlTWFuYWdlciAqbWFuYWdlcik7CgoKICAgICAg
ICBDTF9TdXJmYWNlKGNvbnN0IHN0ZDo6c3RyaW5nICZmaWxlbmFtZSwgYm9vbCBkeW5hbWljID0g
ZmFsc2UpOwoKCiAgICAgICAgQ0xfU3VyZmFjZShjb25zdCBDTF9TdXJmYWNlICZzdXJmYWNlKTsK
CgogICAgICAgIHZpcnR1YWwgfkNMX1N1cmZhY2UoKTsKCgpwdWJsaWM6CgoKICAgICAgICBvcGVy
YXRvciBib29sICgpIGNvbnN0OwoKCiAgICAgICAgY29uc3QgQ0xfU3VyZmFjZSYgb3BlcmF0b3I9
KGNvbnN0IENMX1N1cmZhY2UmIHN1cmYpOwoKCiAgICAgICAgdm9pZCByZWxvYWQoKTsKCgoKICAg
ICAgICBDTF9TdXJmYWNlUHJvdmlkZXIgKmdldF9wcm92aWRlcigpIGNvbnN0OwoKCgoKCgogICAg
ICAgIHZvaWQgcHV0X3NjcmVlbigKICAgICAgICAgICAgICAgIGludCB4LAogICAgICAgICAgICAg
ICAgaW50IHksCiAgICAgICAgICAgICAgICBpbnQgc3ByX25vPTAsCiAgICAgICAgICAgICAgICBD
TF9EaXNwbGF5Q2FyZCAqY2FyZD1fX251bGwpOwojIDE2MiAiL3Vzci9pbmNsdWRlL0NsYW5MaWIv
RGlzcGxheS9EaXNwbGF5L3N1cmZhY2UuaCIgMwogICAgICAgIHZvaWQgcHV0X3NjcmVlbigKICAg
ICAgICAgICAgICAgIGludCB4LAogICAgICAgICAgICAgICAgaW50IHksCiAgICAgICAgICAgICAg
ICBmbG9hdCBzY2FsZV94LAogICAgICAgICAgICAgICAgZmxvYXQgc2NhbGVfeSwKICAgICAgICAg
ICAgICAgIGludCBzcHJfbm89MCwKICAgICAgICAgICAgICAgIENMX0Rpc3BsYXlDYXJkICpjYXJk
PV9fbnVsbCk7CiMgMTc3ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9EaXNwbGF5L0Rpc3BsYXkvc3Vy
ZmFjZS5oIiAzCiAgICAgICAgdm9pZCBwdXRfc2NyZWVuKAogICAgICAgICAgICAgICAgaW50IHgs
CiAgICAgICAgICAgICAgICBpbnQgeSwKICAgICAgICAgICAgICAgIGludCBzaXplX3gsCiAgICAg
ICAgICAgICAgICBpbnQgc2l6ZV95LAogICAgICAgICAgICAgICAgaW50IHNwcl9ubz0wLAogICAg
ICAgICAgICAgICAgQ0xfRGlzcGxheUNhcmQgKmNhcmQ9X19udWxsKTsKCgoKCgoKICAgICAgICB2
b2lkIHB1dF90YXJnZXQoCiAgICAgICAgICAgICAgICBpbnQgeCwKICAgICAgICAgICAgICAgIGlu
dCB5LAogICAgICAgICAgICAgICAgaW50IHNwcl9ubywKICAgICAgICAgICAgICAgIENMX1Rhcmdl
dCAqdGFyZ2V0KTsKCgogICAgICAgIHVuc2lnbmVkIGludCBnZXRfd2lkdGgoKSBjb25zdDsKCgog
ICAgICAgIHVuc2lnbmVkIGludCBnZXRfaGVpZ2h0KCkgY29uc3Q7CgoKICAgICAgICB1bnNpZ25l
ZCBpbnQgZ2V0X251bV9mcmFtZXMoKSBjb25zdDsKCgoKICAgICAgICBib29sIGlzX3ZpZGVvKENM
X0Rpc3BsYXlDYXJkICpjYXJkID0gX19udWxsKSBjb25zdDsKCgogICAgICAgIGJvb2wgaXNfbG9h
ZGVkKENMX0Rpc3BsYXlDYXJkICpjYXJkID0gX19udWxsKSBjb25zdDsKCgogICAgICAgIGJvb2wg
Y29udmVydF92aWRlbyhDTF9EaXNwbGF5Q2FyZCAqY2FyZCA9IF9fbnVsbCk7CgoKICAgICAgICBi
b29sIGNvbnZlcnRfc3lzdGVtKENMX0Rpc3BsYXlDYXJkICpjYXJkID0gX19udWxsKTsKCgogICAg
ICAgIHZvaWQgZmx1c2goQ0xfRGlzcGxheUNhcmQgKmNhcmQgPSBfX251bGwpOwoKCnB1YmxpYzoK
CiAgICAgICAgQ0xfU3VyZmFjZShjbGFzcyBDTF9TdXJmYWNlX0dlbmVyaWMgKmltcGwpOwoKCiAg
ICAgICAgQ0xfU3VyZmFjZV9HZW5lcmljICppbXBsOwoKCiAgICAgICAgQ0xfUmVzb3VyY2UgcmVz
b3VyY2U7Cn07CiMgMjcgIk1hcC5jcHAiIDIKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9EaXNw
bGF5L0ZvbnQvZm9udC5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvRGlzcGxheS9G
b250L2ZvbnQuaCIgMwpjbGFzcyBDTF9UYXJnZXQ7CmNsYXNzIENMX1Jlc291cmNlTWFuYWdlcjsK
Y2xhc3MgQ0xfRm9udF9EZXNjcmlwdGlvbjsKY2xhc3MgQ0xfRm9udF9HZW5lcmljOwpjbGFzcyBD
TF9Gb250X0dlbmVyaWM7CiMgNDUgIi91c3IvaW5jbHVkZS9DbGFuTGliL0Rpc3BsYXkvRm9udC9m
b250LmgiIDMKY2xhc3MgQ0xfRm9udAp7CnB1YmxpYzoKCgoKICAgICAgICBlbnVtIGFsaWdubWVu
dHMKICAgICAgICB7CgogICAgICAgICAgICAgICAgQUxJR05fTEVGVCwKCgogICAgICAgICAgICAg
ICAgQUxJR05fQ0VOVEVSLAoKCiAgICAgICAgICAgICAgICBBTElHTl9SSUdIVAogICAgICAgIH07
CgoKcHVibGljOgoKCiAgICAgICAgc3RhdGljIENMX0ZvbnQgKmNyZWF0ZShDTF9Gb250X0Rlc2Ny
aXB0aW9uICpmb250X2Rlc2MpOwoKCgoKCiAgICAgICAgc3RhdGljIENMX0ZvbnQgKmxvYWQoCiAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmcmVzb3VyY2VfaWQsCiAgICAgICAgICAg
ICAgICBDTF9SZXNvdXJjZU1hbmFnZXIgKnJlc291cmNlX21hbmFnZXIpOwoKCnB1YmxpYzoKCiAg
ICAgICAgQ0xfRm9udChDTF9Gb250X0Rlc2NyaXB0aW9uICpwcm92aWRlcik7CgoKICAgICAgICBD
TF9Gb250KGNvbnN0IHN0ZDo6c3RyaW5nICZyZXNvdXJjZV9pZCwgQ0xfUmVzb3VyY2VNYW5hZ2Vy
ICptYW5hZ2VyKTsKCgogICAgICAgIENMX0ZvbnQoY29uc3QgQ0xfRm9udCAmZm9udCk7CgoKICAg
ICAgICB2aXJ0dWFsIH5DTF9Gb250KCk7CgoKcHVibGljOgoKICAgICAgICBDTF9Gb250ICZvcGVy
YXRvciA9KGNvbnN0IENMX0ZvbnQgJmNvcHkpOwoKCgogICAgICAgIGludCBnZXRfaGVpZ2h0KCk7
CgoKCgogICAgICAgIGludCBnZXRfdGV4dF93aWR0aChjb25zdCBzdGQ6OnN0cmluZyAmdGV4dCk7
CgoKCgogICAgICAgIGludCBnZXRfY2hhcl93aWR0aChjb25zdCBjaGFyIGNoYXJhY3Rlcik7CgoK
CgoKCiAgICAgICAgdm9pZCBwcmludF9sZWZ0KGludCB4LCBpbnQgeSwgY29uc3Qgc3RkOjpzdHJp
bmcgJnRleHQsIGludCBuX2hlaWdodD0xKTsKCgoKCgoKCiAgICAgICAgdm9pZCBwcmludF9sZWZ0
KGludCB4LCBpbnQgeSwgZmxvYXQgc2NhbGVfeCwgZmxvYXQgc2NhbGVfeSwgY29uc3Qgc3RkOjpz
dHJpbmcgJnRleHQpOwoKCgoKCgogICAgICAgIHZvaWQgcHJpbnRfY2VudGVyKGludCB4LCBpbnQg
eSwgY29uc3Qgc3RkOjpzdHJpbmcgJnRleHQsIGludCBuX2hlaWdodD0xKTsKCgoKCgoKICAgICAg
ICB2b2lkIHByaW50X3JpZ2h0KGludCB4LCBpbnQgeSwgY29uc3Qgc3RkOjpzdHJpbmcgJnRleHQs
IGludCBuX2hlaWdodD0xKTsKIyAxNDggIi91c3IvaW5jbHVkZS9DbGFuTGliL0Rpc3BsYXkvRm9u
dC9mb250LmgiIDMKICAgICAgICB2b2lkIHB1dF90YXJnZXQoaW50IHgsIGludCB5LCBjb25zdCBz
dGQ6OnN0cmluZyAmdGV4dCwgQ0xfVGFyZ2V0ICp0YXJnZXQsIGludCBhbGlnbm1lbnQgPSBBTElH
Tl9MRUZUKTsKCgoKCgogICAgICAgIGludCBjaGFuZ2Vfc2l6ZShpbnQgc2l6ZSk7CgoKCgoKCgog
ICAgICAgIHVuc2lnbmVkIGludCBjaGFuZ2VfY29sb3VyKHVuc2lnbmVkIGNoYXIgciwgdW5zaWdu
ZWQgY2hhciBnLCB1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGNoYXIgYSk7CgoKcHVibGljOgoK
ICAgICAgICBDTF9Gb250KGNsYXNzIENMX0ZvbnRfR2VuZXJpYyAqaW1wbCk7CgoKICAgICAgICBD
TF9Gb250X0dlbmVyaWMgKmltcGw7CgoKICAgICAgICBDTF9SZXNvdXJjZSByZXNvdXJjZTsKfTsK
IyAyOCAiTWFwLmNwcCIgMgoKIyAxICJDbGFuQm9tYmVyLmgiIDEKIyAyNCAiQ2xhbkJvbWJlci5o
IgojIDEgIlJlc291cmNlcy5oIiAxCiMgMjIgIlJlc291cmNlcy5oIgpjbGFzcyBDTF9Gb250Owpj
bGFzcyBDTF9TdXJmYWNlOwpjbGFzcyBDTF9Tb3VuZEJ1ZmZlcjsKY2xhc3MgQ0xfU291bmRCdWZm
ZXJfU2Vzc2lvbjsKY2xhc3MgQ0xfUmVzb3VyY2VNYW5hZ2VyOwoKCgoKCmNsYXNzIFJlc291cmNl
cwp7CnB1YmxpYzoKICAgICAgICBSZXNvdXJjZXMoKTsKICAgICAgICB+UmVzb3VyY2VzKCk7Cgog
ICAgICAgIHN0YXRpYyB2b2lkIGluaXQoKTsKICAgICAgICBzdGF0aWMgdm9pZCBsb2FkX2FsbCgp
OwoKICAgICAgICBzdGF0aWMgQ0xfRm9udCogRm9udF9iaWcoKTsKICAgICAgICBzdGF0aWMgQ0xf
Rm9udCogRm9udF9zbWFsbCgpOwoKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSogVGl0bGVzY3Jl
ZW4oKTsKCiAgICAgICAgc3RhdGljIENMX1N1cmZhY2UqIEludHJvX2ZsX2xvZ28oKTsKICAgICAg
ICBzdGF0aWMgQ0xfU291bmRCdWZmZXIqIEludHJvX3R5cGV3cml0ZXIoKTsKICAgICAgICBzdGF0
aWMgQ0xfU291bmRCdWZmZXIqIEludHJvX3dpbmxldmVsKCk7CgogICAgICAgIHN0YXRpYyBDTF9T
dXJmYWNlKiBQbGF5ZXJzZXR1cF90ZWFtcygpOwogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlKiBQ
bGF5ZXJzZXR1cF9jb250cm9scygpOwogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlKiBQbGF5ZXJz
ZXR1cF90ZWFtbGFtcHMoKTsKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSogUGxheWVyc2V0dXBf
YmFja2dyb3VuZCgpOwoKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSogTWFwc2VsZWN0b3JfYmFj
a2dyb3VuZCgpOwogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlKiBNYXBzZWxlY3Rvcl9ub3RfYXZh
aWxhYmxlKCk7CgogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlKiBHYW1lc3RhdHVzX3Rvb2xzKCk7
CiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVyKiBHYW1lc3RhdHVzX2tsYXRzY2goKTsKICAg
ICAgICBzdGF0aWMgQ0xfU3VyZmFjZSogR2FtZXN0YXR1c19iYWNrZ3JvdW5kKCk7CgogICAgICAg
IHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciogQ3JlZGl0c19mb3J3YXJkKCk7CiAgICAgICAgc3RhdGlj
IENMX1NvdW5kQnVmZmVyKiBDcmVkaXRzX3Jld2luZCgpOwogICAgICAgIHN0YXRpYyBDTF9Tb3Vu
ZEJ1ZmZlciogQ3JlZGl0c19zdG9wKCk7CgoKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSogQ3Jl
ZGl0c19ob3JzdF9ldmlsKCk7CgogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlKiBCb21iZXJzKGlu
dCBucik7CgogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlKiBFeHRyYXNfZXh0cmFzKCk7CiAgICAg
ICAgc3RhdGljIENMX1NvdW5kQnVmZmVyKiBFeHRyYXNfd293KCk7CiAgICAgICAgc3RhdGljIENM
X1NvdW5kQnVmZmVyKiBFeHRyYXNfam9pbnQoKTsKICAgICAgICBzdGF0aWMgQ0xfU291bmRCdWZm
ZXIqIEV4dHJhc19ob3JueSgpOwogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciogRXh0cmFz
X3NjaG5pZWYoKTsKCiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVyKiBNZW51X3dob29zaCgp
OwogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciogTWVudV9icmVhaygpOwogICAgICAgIHN0
YXRpYyBDTF9Tb3VuZEJ1ZmZlciogTWVudV9jbGVhcigpOwogICAgICAgIHN0YXRpYyBDTF9Tb3Vu
ZEJ1ZmZlciogTWVudV9iYWNrKCk7CgogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlKiBPYnNlcnZl
cl9vYnNlcnZlcigpOwogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciogT2JzZXJ2ZXJfaHVy
cnlfdXAoKTsKICAgICAgICBzdGF0aWMgQ0xfU291bmRCdWZmZXIqIE9ic2VydmVyX3RpbWVfb3Zl
cigpOwogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciogT2JzZXJ2ZXJfY3J1bmNoKCk7Cgog
ICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciogR2FtZV9kaWUoKTsKICAgICAgICBzdGF0aWMg
Q0xfU291bmRCdWZmZXIqIEdhbWVfZXhwbG9kZSgpOwogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1
ZmZlciogR2FtZV9wdXRib21iKCk7CiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVyKiBHYW1l
X2RlZXBmYWxsKCk7CiAgICAgICAgc3RhdGljIENMX1N1cmZhY2UqIEdhbWVfbWFwdGlsZXMoKTsK
ICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSogR2FtZV9tYXB0aWxlX2FkZG9ucygpOwogICAgICAg
IHN0YXRpYyBDTF9TdXJmYWNlKiBHYW1lX2JvbWJzKCk7CiAgICAgICAgc3RhdGljIENMX1N1cmZh
Y2UqIEdhbWVfZXhwbG9zaW9uKCk7CiAgICAgICAgc3RhdGljIENMX1N1cmZhY2UqIEdhbWVfY2Jf
bG9nb19zbWFsbCgpOwoKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSogTWFwRWRpdG9yX2JhY2tn
cm91bmQoKTsKCiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVyKiBDb3Jwc2VfZXhwbG9kZSgp
OwogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlKiBDb3Jwc2VfcGFydCgpOwoKICAgICAgICBzdGF0
aWMgQ0xfU291bmRCdWZmZXIqIFNwbGFzaChpbnQgbnIpOwoKICAgICAgICBzdGF0aWMgQ0xfUmVz
b3VyY2VNYW5hZ2VyICpyZXM7Cgpwcm90ZWN0ZWQ6CiAgICAgICAgc3RhdGljIENMX0ZvbnQgKmZu
dF9iaWc7CiAgICAgICAgc3RhdGljIENMX0ZvbnQgKmZudF9zbWFsbDsKCiAgICAgICAgc3RhdGlj
IENMX1N1cmZhY2UgKnN1cl90aXRsZXNjcmVlbjsKCiAgICAgICAgc3RhdGljIENMX1N1cmZhY2Ug
KnN1cl9mbF9sb2dvOwogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciAqc2Z4X3R5cGV3cml0
ZXI7CiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVyICpzZnhfd2lubGV2ZWw7CgogICAgICAg
IHN0YXRpYyBDTF9TdXJmYWNlICpzdXJfcHNfdGVhbXM7CiAgICAgICAgc3RhdGljIENMX1N1cmZh
Y2UgKnN1cl9wc19jb250cm9sczsKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSAqc3VyX3BzX3Rl
YW1sYW1wczsKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSAqc3VyX3BzX2JhY2tncm91bmQ7Cgog
ICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlICpzdXJfbHNfYmFja2dyb3VuZDsKICAgICAgICBzdGF0
aWMgQ0xfU3VyZmFjZSAqc3VyX2xzX25vdF9hdmFpbGFibGU7CgogICAgICAgIHN0YXRpYyBDTF9T
dXJmYWNlICpzdXJfZ3NfdG9vbHM7CiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVyICpzZnhf
a2xhdHNjaDsKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSAqc3VyX2dzX2JhY2tncm91bmQ7Cgog
ICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciAqc2Z4X2ZvcndhcmQ7CiAgICAgICAgc3RhdGlj
IENMX1NvdW5kQnVmZmVyICpzZnhfcmV3aW5kOwogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZl
ciAqc2Z4X3N0b3A7CgogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlICpzdXJfaG9yc3Q7CiAgICAg
ICAgc3RhdGljIENMX1N1cmZhY2UgKnN1cl9ob3JzdF9ldmlsOwoKICAgICAgICBzdGF0aWMgQ0xf
U3VyZmFjZSAqc3VyX2JvbWJlcnNbOF07CgogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlICpzdXJf
ZXh0cmFzOwogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciAqc2Z4X3dvdzsKICAgICAgICBz
dGF0aWMgQ0xfU291bmRCdWZmZXIgKnNmeF9qb2ludDsKICAgICAgICBzdGF0aWMgQ0xfU291bmRC
dWZmZXIgKnNmeF9ob3JueTsKICAgICAgICBzdGF0aWMgQ0xfU291bmRCdWZmZXIgKnNmeF9zY2hu
aWVmOwoKICAgICAgICBzdGF0aWMgQ0xfU291bmRCdWZmZXIgKnNmeF93aG9vc2g7CiAgICAgICAg
c3RhdGljIENMX1NvdW5kQnVmZmVyICpzZnhfYnJlYWs7CiAgICAgICAgc3RhdGljIENMX1NvdW5k
QnVmZmVyICpzZnhfY2xlYXI7CiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVyICpzZnhfbWVu
dV9iYWNrOwoKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSAqc3VyX29ic2VydmVyOwogICAgICAg
IHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciAqc2Z4X2h1cnJ5X3VwOwogICAgICAgIHN0YXRpYyBDTF9T
b3VuZEJ1ZmZlciAqc2Z4X3RpbWVfb3ZlcjsKICAgICAgICBzdGF0aWMgQ0xfU291bmRCdWZmZXIg
KnNmeF9jcnVuY2g7CgogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciAqc2Z4X2RpZTsKICAg
ICAgICBzdGF0aWMgQ0xfU291bmRCdWZmZXIgKnNmeF9leHBsb2RlOwogICAgICAgIHN0YXRpYyBD
TF9Tb3VuZEJ1ZmZlciAqc2Z4X3B1dGJvbWI7CiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVy
ICpzZnhfZGVlcGZhbGw7CiAgICAgICAgc3RhdGljIENMX1N1cmZhY2UgKnN1cl9tYXB0aWxlczsK
ICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSAqc3VyX21hcHRpbGVfYWRkb25zOwogICAgICAgIHN0
YXRpYyBDTF9TdXJmYWNlICpzdXJfYm9tYnM7CiAgICAgICAgc3RhdGljIENMX1N1cmZhY2UgKnN1
cl9leHBsb3Npb247CiAgICAgICAgc3RhdGljIENMX1N1cmZhY2UgKnN1cl9jYl9sb2dvX3NtYWxs
OwoKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSAqc3VyX21lX2JhY2tncm91bmQ7CgogICAgICAg
IHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciAqc2Z4X2NvcnBzZV9leHBsb2RlOwogICAgICAgIHN0YXRp
YyBDTF9TdXJmYWNlICpzdXJfY29ycHNlX3BhcnQ7CgogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1
ZmZlciAqc2Z4X3NwbGFzaFsyXTsKfTsKIyAyNSAiQ2xhbkJvbWJlci5oIiAyCgpjbGFzcyBNZW51
OwpjbGFzcyBEZWJ1ZzsKY2xhc3MgT2JzZXJ2ZXI7CmNsYXNzIE1hcDsKY2xhc3MgQm9tYjsKY2xh
c3MgQm9tYmVyOwpjbGFzcyBHYW1lT2JqZWN0OwoKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9D
b3JlL1N5c3RlbS9zZXR1cGNvcmUuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9DbGFuTGliL0Nv
cmUvU3lzdGVtL3NldHVwY29yZS5oIiAzCmNsYXNzIENMX1NldHVwQ29yZQp7CnB1YmxpYzoKCgoK
CgoKCiAgICAgICAgc3RhdGljIHZvaWQgaW5pdChib29sIHJlZ2lzdGVyX3Jlc291cmNlc19vbmx5
ID0gZmFsc2UpOwoKCgoKICAgICAgICBzdGF0aWMgdm9pZCBkZWluaXQoKTsKCgoKCgoKCn07CiMg
MzUgIkNsYW5Cb21iZXIuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL0Rpc3BsYXkvc2V0
dXBkaXNwbGF5LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9EaXNwbGF5L3NldHVw
ZGlzcGxheS5oIiAzCmNsYXNzIENMX1NldHVwRGlzcGxheQp7CnB1YmxpYzoKCgogICAgICAgIHN0
YXRpYyB2b2lkIGluaXQoYm9vbCByZWdpc3Rlcl9yZXNvdXJjZXNfb25seSA9IGZhbHNlKTsKCgog
ICAgICAgIHN0YXRpYyB2b2lkIGRlaW5pdCgpOwp9OwojIDM2ICJDbGFuQm9tYmVyLmgiIDIKIyAx
ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Tb3VuZC9zZXR1cHNvdW5kLmgiIDEgMwojIDIzICIvdXNy
L2luY2x1ZGUvQ2xhbkxpYi9Tb3VuZC9zZXR1cHNvdW5kLmgiIDMKY2xhc3MgQ0xfU2V0dXBTb3Vu
ZAp7CnB1YmxpYzoKCgogICAgICAgIHN0YXRpYyB2b2lkIGluaXQoYm9vbCByZWdpc3Rlcl9yZXNv
dXJjZXNfb25seSA9IGZhbHNlKTsKCgogICAgICAgIHN0YXRpYyB2b2lkIGRlaW5pdCgpOwp9OwoK
CmNsYXNzIENMX1NldHVwQ0RBdWRpbwp7CnB1YmxpYzoKCgogICAgICAgIHN0YXRpYyB2b2lkIGlu
aXQoYm9vbCByZWdpc3Rlcl9yZXNvdXJjZXNfb25seSA9IGZhbHNlKTsKCgogICAgICAgIHN0YXRp
YyB2b2lkIGRlaW5pdCgpOwp9OwojIDM3ICJDbGFuQm9tYmVyLmgiIDIKIyAxICIvdXNyL2luY2x1
ZGUvQ2xhbkxpYi9BcHBsaWNhdGlvbi9jbGFuYXBwLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUv
Q2xhbkxpYi9BcHBsaWNhdGlvbi9jbGFuYXBwLmgiIDMKY2xhc3MgQ0xfQ2xhbkFwcGxpY2F0aW9u
CnsKcHVibGljOgoKCiAgICAgICAgQ0xfQ2xhbkFwcGxpY2F0aW9uKCk7CgoKICAgICAgICB2aXJ0
dWFsIH5DTF9DbGFuQXBwbGljYXRpb24oKTsKIyA0MyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQXBw
bGljYXRpb24vY2xhbmFwcC5oIiAzCiAgICAgICAgdmlydHVhbCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpPTA7CgoKCgogICAgICAgIHZpcnR1YWwgY2hhciogZ2V0X3RpdGxlKCk9MDsK
CgoKCiAgICAgICAgc3RhdGljIENMX0NsYW5BcHBsaWNhdGlvbiAqYXBwOwp9OwojIDM4ICJDbGFu
Qm9tYmVyLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9jbGFuc3Ry
aW5nLmgiIDEgMwojIDU5ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9jbGFuc3Ry
aW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1Jlc291cmNlcy9yZXNvdXJj
ZXR5cGVfc3RyaW5nLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1Jlc291
cmNlcy9yZXNvdXJjZXR5cGVfc3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9D
b3JlL1Jlc291cmNlcy9yZXNvdXJjZWRhdGEuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9DbGFu
TGliL0NvcmUvUmVzb3VyY2VzL3Jlc291cmNlZGF0YS5oIiAzCmNsYXNzIENMX1Jlc291cmNlRGF0
YV9HZW5lcmljOwoKCmNsYXNzIENMX1Jlc291cmNlRGF0YQp7CgpwdWJsaWM6CgogICAgICAgIENM
X1Jlc291cmNlRGF0YShDTF9SZXNvdXJjZSAmcmVzb3VyY2UpOwoKCiAgICAgICAgdmlydHVhbCB+
Q0xfUmVzb3VyY2VEYXRhKCk7CgoKcHVibGljOgoKICAgICAgICBDTF9SZXNvdXJjZSBnZXRfcmVz
b3VyY2UoKTsKCgpwcml2YXRlOgoKICAgICAgICBDTF9SZXNvdXJjZURhdGFfR2VuZXJpYyAqaW1w
bDsKfTsKIyAyMyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9SZXNvdXJjZXMvcmVzb3VyY2V0
eXBlX3N0cmluZy5oIiAyIDMKCgoKY2xhc3MgQ0xfUmVzb3VyY2VEYXRhX1N0cmluZyA6IHB1Ymxp
YyBDTF9SZXNvdXJjZURhdGEKewoKcHVibGljOgoKICAgICAgICBDTF9SZXNvdXJjZURhdGFfU3Ry
aW5nKGNsYXNzIENMX1Jlc291cmNlICZyZXNvdXJjZSk7CgoKcHVibGljOgoKICAgICAgICBzdGQ6
OnN0cmluZyB2YWx1ZTsKfTsKIyA2MCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0v
Y2xhbnN0cmluZy5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9SZXNvdXJj
ZXMvcmVzb3VyY2VfbWFuYWdlci5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29y
ZS9SZXNvdXJjZXMvcmVzb3VyY2VfbWFuYWdlci5oIiAzCmNsYXNzIENMX1Jlc291cmNlOwpjbGFz
cyBDTF9JbnB1dFNvdXJjZVByb3ZpZGVyOwpjbGFzcyBDTF9SZXNvdXJjZU1hbmFnZXJfRmlsZTsK
CmNsYXNzIENMX1Jlc291cmNlTWFuYWdlcgojIDUxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3Jl
L1Jlc291cmNlcy9yZXNvdXJjZV9tYW5hZ2VyLmgiIDMKewoKcHVibGljOgoKCgoKICAgICAgICBD
TF9SZXNvdXJjZU1hbmFnZXIoCiAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmY29u
ZmlnX2ZpbGUsCiAgICAgICAgICAgICAgICBDTF9JbnB1dFNvdXJjZVByb3ZpZGVyICpwcm92aWRl
ciA9IF9fbnVsbCwKICAgICAgICAgICAgICAgIGJvb2wgcmVhZF9kaXJlY3RseV9mcm9tX3NvdXJj
ZT1mYWxzZSwKICAgICAgICAgICAgICAgIGJvb2wgZGVsZXRlX2lucHV0c291cmNlX3Byb3ZpZGVy
PWZhbHNlKTsKCgoKCiAgICAgICAgQ0xfUmVzb3VyY2VNYW5hZ2VyKAogICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjpzdHJpbmcgJmNvbmZpZ19maWxlLAogICAgICAgICAgICAgICAgY29uc3QgYm9v
bCBpc19kYXRhZmlsZSApOwoKCgoKCiAgICAgICAgQ0xfUmVzb3VyY2VNYW5hZ2VyKAogICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmNvbmZpZ19maWxlLAogICAgICAgICAgICAgICAg
Y29uc3QgYm9vbCBpc19kYXRhZmlsZSwKICAgICAgICAgICAgICAgIENMX1Jlc291cmNlTWFuYWdl
ciAmYWRkaXRpb25hbF9yZXNvdXJjZXMpOwoKCiAgICAgICAgQ0xfUmVzb3VyY2VNYW5hZ2VyKGNv
bnN0IENMX1Jlc291cmNlTWFuYWdlciAmY29weSk7CgoKICAgICAgICBDTF9SZXNvdXJjZU1hbmFn
ZXIoKTsKCgogICAgICAgIH5DTF9SZXNvdXJjZU1hbmFnZXIoKTsKCgpwdWJsaWM6CgogICAgICAg
IENMX1Jlc291cmNlICZnZXRfcmVzb3VyY2UoY29uc3Qgc3RkOjpzdHJpbmcgJnJlc19pZCk7CgoK
CgogICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4gKmdldF9hbGxfcmVzb3VyY2VzKCk7CgoK
CgogICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4gKmdldF9yZXNvdXJjZXNfb2ZfdHlwZShj
b25zdCBzdGQ6OnN0cmluZyAmdHlwZV9pZCk7CgoKCgogICAgICAgIENMX0lucHV0U291cmNlUHJv
dmlkZXIgKmdldF9yZXNvdXJjZV9wcm92aWRlcigpIGNvbnN0OwoKCiAgICAgICAgYm9vbCBpc19m
cm9tX3NvdXJjZSgpOwoKCnB1YmxpYzoKCiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBD
TF9SZXNvdXJjZU1hbmFnZXIgJmNvcHkpOwoKCiAgICAgICAgdm9pZCBhZGRfcmVzb3VyY2VzKGNv
bnN0IENMX1Jlc291cmNlTWFuYWdlciAmYWRkaXRpb25hbF9yZXNvdXJjZXMpOwoKCiAgICAgICAg
dm9pZCByZW1vdmVfcmVzb3VyY2VzKGNvbnN0IENMX1Jlc291cmNlTWFuYWdlciAmYWRkaXRpb25h
bF9yZXNvdXJjZXMpOwoKCiAgICAgICAgdm9pZCBsb2FkX2FsbCgpOwoKCiAgICAgICAgdm9pZCB1
bmxvYWRfYWxsKCk7CgoKICAgICAgICB2b2lkIGxvYWRfc2VjdGlvbihjb25zdCBzdGQ6OnN0cmlu
ZyAmc2VjdGlvbl9uYW1lKTsKCgogICAgICAgIHZvaWQgdW5sb2FkX3NlY3Rpb24oY29uc3Qgc3Rk
OjpzdHJpbmcgJnNlY3Rpb25fbmFtZSk7CgoKcHVibGljOgoKICAgICAgICBDTF9SZXNvdXJjZU1h
bmFnZXIoY2xhc3MgQ0xfUmVzb3VyY2VNYW5hZ2VyX0ZpbGUgKmltcGwpOwoKCiAgICAgICAgQ0xf
UmVzb3VyY2VNYW5hZ2VyX0ZpbGUgKmltcGw7Cn07CiMgNjIgIi91c3IvaW5jbHVkZS9DbGFuTGli
L0NvcmUvU3lzdGVtL2NsYW5zdHJpbmcuaCIgMiAzCgoKCgoKCmNsYXNzIENMX1N0cmluZwp7CnB1
YmxpYzoKCgogICAgICAgIENMX1N0cmluZyhjb25zdCBzdGQ6OnN0cmluZyAmcmVzX2lkLCBDTF9S
ZXNvdXJjZU1hbmFnZXIgKnJlc291cmNlcykKICAgICAgICB7CiAgICAgICAgICAgICAgICBDTF9S
ZXNvdXJjZSByZXMgPSByZXNvdXJjZXMtPmdldF9yZXNvdXJjZShyZXNfaWQpOwogICAgICAgICAg
ICAgICAgcmVzLmxvYWQoKTsKICAgICAgICAgICAgICAgIENMX1Jlc291cmNlRGF0YV9TdHJpbmcg
KmRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAoQ0xfUmVzb3VyY2VEYXRhX1N0cmluZyAq
KSByZXMuZ2V0X2RhdGEoInN0cmluZyIpOwogICAgICAgICAgICAgICAgc3RyID0gZGF0YS0+dmFs
dWU7CiAgICAgICAgICAgICAgICByZXMudW5sb2FkKCk7CiAgICAgICAgfQoKCiAgICAgICAgQ0xf
U3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZyZXNfaWQsIENMX1Jlc291cmNlTWFuYWdlciAqcmVz
b3VyY2VzLCBjb25zdCBzdGQ6OnN0cmluZyAmZGVmX3ZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgICAgIHRyeQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBDTF9S
ZXNvdXJjZSByZXMgPSByZXNvdXJjZXMtPmdldF9yZXNvdXJjZShyZXNfaWQpOwogICAgICAgICAg
ICAgICAgICAgICAgICByZXMubG9hZCgpOwogICAgICAgICAgICAgICAgICAgICAgICBDTF9SZXNv
dXJjZURhdGFfU3RyaW5nICpkYXRhID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Q0xfUmVzb3VyY2VEYXRhX1N0cmluZyAqKSByZXMuZ2V0X2RhdGEoInN0cmluZyIpOwogICAgICAg
ICAgICAgICAgICAgICAgICBzdHIgPSBkYXRhLT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzLnVubG9hZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2F0Y2gg
KENMX0Vycm9yIGVycikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
c3RyID0gZGVmX3ZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICAgIENM
X1N0cmluZygpCiAgICAgICAgewogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyhjb25zdCBz
dGQ6OnN0cmluZyAmX3N0cikKICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zdHIgPSBh
cHBlbmRfc3RyaW5nKF9fbnVsbCwgX3N0ci5jX3N0cigpKTsKICAgICAgICB9CgoKICAgICAgICBD
TF9TdHJpbmcoY29uc3QgaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cj1p
bnRfdG9fc3RyaW5nKF9fbnVsbCwgdmFsdWUpOwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmlu
Zyhjb25zdCBmbG9hdCBmbG9hdF92YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHI9
ZmxvYXRfdG9fc3RyaW5nKF9fbnVsbCwgZmxvYXRfdmFsdWUpOwogICAgICAgIH0KCgogICAgICAg
IENMX1N0cmluZyhjb25zdCBjaGFyICp0ZXh0KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0
cj10ZXh0OwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyhjb25zdCBDTF9TdHJpbmcgJmNs
b25lKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cj1jbG9uZS5zdHI7CiAgICAgICAgfQoK
CiAgICAgICAgQ0xfU3RyaW5nKGNvbnN0IENMX1N0cmluZyAmdGV4dDEsIGNvbnN0IENMX1N0cmlu
ZyAmdGV4dDIpCiAgICAgICAgewogICAgICAgICAgICAgICAgc3RyPXRleHQxLnN0cjsKICAgICAg
ICAgICAgICAgIHN0cis9dGV4dDIuc3RyOwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyhj
b25zdCBjaGFyICp0ZXh0MSwgY29uc3QgY2hhciAqdGV4dDIpCiAgICAgICAgewogICAgICAgICAg
ICAgICAgc3RyPXRleHQxOwogICAgICAgICAgICAgICAgc3RyKz10ZXh0MjsKICAgICAgICB9CgoK
ICAgICAgICBDTF9TdHJpbmcoY29uc3QgY2hhciAqdGV4dCwgaW50IGxlbmd0aCkKICAgICAgICB7
CiAgICAgICAgICAgICAgICBzdHIuYXBwZW5kKHRleHQsIGxlbmd0aCk7CiAgICAgICAgfQoKCgog
ICAgICAgIENMX1N0cmluZyBvcGVyYXRvcisgKGNvbnN0IENMX1N0cmluZyAmb3RoZXJfc3RyaW5n
KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBDTF9TdHJpbmcoc3RyLCBvdGhlcl9z
dHJpbmcuc3RyKTsKICAgICAgICB9CgoKICAgICAgICBDTF9TdHJpbmcgb3BlcmF0b3IrIChjb25z
dCBjaGFyICpvdGhlcl90ZXh0KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBDTF9T
dHJpbmcoc3RyLCBvdGhlcl90ZXh0KTsKICAgICAgICB9CgoKICAgICAgICBDTF9TdHJpbmcgb3Bl
cmF0b3IrIChjb25zdCBpbnQgbnVtYmVyKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy
biBDTF9TdHJpbmcoaW50X3RvX3N0cmluZyhzdHIuY19zdHIoKSwgbnVtYmVyKSk7CiAgICAgICAg
fQoKCiAgICAgICAgQ0xfU3RyaW5nIG9wZXJhdG9yKyAoY29uc3QgZmxvYXQgbnVtYmVyKQogICAg
ICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBDTF9TdHJpbmcoZmxvYXRfdG9fc3RyaW5nKHN0
ci5jX3N0cigpLCBudW1iZXIpKTsKICAgICAgICB9CgoKICAgICAgICBDTF9TdHJpbmcgJm9wZXJh
dG9yKz0gKGNvbnN0IENMX1N0cmluZyAmb3RoZXJfc3RyaW5nKQogICAgICAgIHsKICAgICAgICAg
ICAgICAgIHN0ciArPSBvdGhlcl9zdHJpbmcuc3RyOwogICAgICAgICAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyAmb3BlcmF0b3IrPSAoY29uc3QgY2hh
ciAqb3RoZXJfdGV4dCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHIgKz0gb3RoZXJfdGV4
dDsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgoKICAgICAgICBDTF9T
dHJpbmcgJm9wZXJhdG9yKz0gKGNvbnN0IGludCBudW1iZXIpCiAgICAgICAgewogICAgICAgICAg
ICAgICAgc3RyID0gaW50X3RvX3N0cmluZyhzdHIuY19zdHIoKSwgbnVtYmVyKTsKICAgICAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgoKICAgICAgICBDTF9TdHJpbmcgJm9wZXJh
dG9yKz0gKGNvbnN0IGZsb2F0IG51bWJlcikKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHIg
PSBmbG9hdF90b19zdHJpbmcoc3RyLmNfc3RyKCksIG51bWJlcik7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU3RyaW5nICZvcGVyYXRvcis9IChk
b3VibGUgZmxvYXRfbnVtYmVyKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBvcGVy
YXRvcis9ICgoZmxvYXQpIGZsb2F0X251bWJlcik7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU3Ry
aW5nICZvcGVyYXRvcj0gKGNvbnN0IENMX1N0cmluZyAmb3RoZXJfc3RyaW5nKQogICAgICAgIHsK
ICAgICAgICAgICAgICAgIHN0cj1vdGhlcl9zdHJpbmcuc3RyOwogICAgICAgICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyAmb3BlcmF0b3I9IChjb25z
dCBjaGFyICpvdGhlcl90ZXh0KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0ciA9IG90aGVy
X3RleHQ7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCiAgICAgICAg
Q0xfU3RyaW5nICZvcGVyYXRvcj0gKGNvbnN0IGludCBudW1iZXIpCiAgICAgICAgewogICAgICAg
ICAgICAgICAgc3RyPWludF90b19zdHJpbmcoX19udWxsLCBudW1iZXIpOwogICAgICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyAmb3BlcmF0b3I9
IChjb25zdCBmbG9hdCBmbG9hdF9udW1iZXIpCiAgICAgICAgewogICAgICAgICAgICAgICAgc3Ry
PWZsb2F0X3RvX3N0cmluZyhfX251bGwsIGZsb2F0X251bWJlcik7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU3RyaW5nICZvcGVyYXRvcj0gKGRv
dWJsZSBmbG9hdF9udW1iZXIpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dG9yPSAoKGZsb2F0KSBmbG9hdF9udW1iZXIpOwogICAgICAgIH0KCgogICAgICAgIGJvb2wgb3Bl
cmF0b3I9PSAoY29uc3QgQ0xfU3RyaW5nICZvdGhlcl9zdHJpbmcpCiAgICAgICAgewogICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ciA9PSBvdGhlcl9zdHJpbmcuc3RyOwogICAgICAgIH0KCgogICAg
ICAgIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgY2hhciAqb3RoZXJfc3RyaW5nKQogICAgICAgIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBzdHIgPT0gb3RoZXJfc3RyaW5nOwogICAgICAgIH0KCgog
ICAgICAgIGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgQ0xfU3RyaW5nICZvdGhlcl9zdHJpbmcpCiAg
ICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyX3N0cmluZyk7
CiAgICAgICAgfQoKCiAgICAgICAgYm9vbCBvcGVyYXRvciE9IChjb25zdCBjaGFyICpvdGhlcl90
ZXh0KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShvdGhlcl90
ZXh0KTsKICAgICAgICB9CgoKICAgICAgICBvcGVyYXRvciBjb25zdCBjaGFyKiAoKQogICAgICAg
IHsKICAgICAgICAgICAgICAgIHJldHVybiBzdHIuY19zdHIoKTsKICAgICAgICB9CgoKICAgICAg
ICBvcGVyYXRvciBzdGQ6OnN0cmluZyAoKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy
biBzdHI7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU3RyaW5nICZvcGVyYXRvcjw8IChjb25zdCBD
TF9TdHJpbmcgJm90aGVyX3N0cmluZykKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHIgKz0g
b3RoZXJfc3RyaW5nLnN0cjsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9
CgoKICAgICAgICBDTF9TdHJpbmcgJm9wZXJhdG9yPDwgKGNvbnN0IGNoYXIgKm90aGVyX3N0cmlu
ZykKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHIgKz0gb3RoZXJfc3RyaW5nOwogICAgICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyAmb3Bl
cmF0b3I8PCAoY29uc3QgdW5zaWduZWQgY2hhciAqb3RoZXJfc3RyaW5nKQogICAgICAgIHsKICAg
ICAgICAgICAgICAgIHN0ciArPSAoY29uc3QgY2hhciAqKSBvdGhlcl9zdHJpbmc7CiAgICAgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU3RyaW5nICZvcGVy
YXRvcjw8IChjb25zdCB1bnNpZ25lZCBzaG9ydCBudW1iZXIpCiAgICAgICAgewogICAgICAgICAg
ICAgICAgc3RyPWludF90b19zdHJpbmcoc3RyLmNfc3RyKCksIG51bWJlcik7CiAgICAgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU3RyaW5nICZvcGVyYXRv
cjw8IChjb25zdCBzaG9ydCBudW1iZXIpCiAgICAgICAgewogICAgICAgICAgICAgICAgc3RyPWlu
dF90b19zdHJpbmcoc3RyLmNfc3RyKCksIG51bWJlcik7CiAgICAgICAgICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU3RyaW5nICZvcGVyYXRvcjw8IChjb25zdCB1
bnNpZ25lZCBpbnQgbnVtYmVyKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cj1pbnRfdG9f
c3RyaW5nKHN0ci5jX3N0cigpLCBudW1iZXIpOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyAmb3BlcmF0b3I8PCAoY29uc3QgaW50IG51
bWJlcikKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHI9aW50X3RvX3N0cmluZyhzdHIuY19z
dHIoKSwgbnVtYmVyKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgoK
ICAgICAgICBDTF9TdHJpbmcgJm9wZXJhdG9yPDwgKGNvbnN0IGZsb2F0IGZsb2F0X251bWJlcikK
ICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHI9ZmxvYXRfdG9fc3RyaW5nKHN0ci5jX3N0cigp
LCBmbG9hdF9udW1iZXIpOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0K
CgogICAgICAgIENMX1N0cmluZyAmb3BlcmF0b3I8PCAoZG91YmxlIGZsb2F0X251bWJlcikKICAg
ICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0b3I8PCAoKGZsb2F0KSBmbG9hdF9u
dW1iZXIpOwogICAgICAgIH0KCgoKICAgICAgICBjaGFyICpnZXRfc3RyaW5nKCkKICAgICAgICB7
CiAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXIgKikgc3RyLmNfc3RyKCk7CiAgICAgICAgfQoK
CiAgICAgICAgaW50IGdldF9sZW5ndGgoKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy
biAoaW50KXN0ci5sZW5ndGgoKTsKICAgICAgICB9CgoKICAgICAgICBpbnQgZ2V0X2FzX2ludCgp
CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGF0b2koc3RyLmNfc3RyKCkpOwogICAg
ICAgIH0KCgogICAgICAgIGZsb2F0IGdldF9hc19mbG9hdCgpCiAgICAgICAgewogICAgICAgICAg
ICAgICAgcmV0dXJuIChmbG9hdClhdG9mKHN0ci5jX3N0cigpKTsKICAgICAgICB9CgoKICAgICAg
ICBDTF9TdHJpbmcgZ2V0X3dvcmQoaW50IHdvcmRfbm8pCiAgICAgICAgewogICAgICAgICAgICAg
ICAgaW50IGxlbj1nZXRfbGVuZ3RoKCk7CiAgICAgICAgICAgICAgICBpbnQgY3VyX3dvcmQ9LTE7
CiAgICAgICAgICAgICAgICBpbnQgd29yZF9zdGFydD0wOwoKICAgICAgICAgICAgICAgIGludCBj
dXJfc3RhdGU9MDsKICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxsZW47IGkrKykKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cl9zdGF0ZSA9PSAw
KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0cltpXSE9MzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cltpXT09MzQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRfc3RhcnQgPSBpKzE7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9zdGF0ZSA9IDI7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdvcmRfc3RhcnQgPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJfc3RhdGUgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3dvcmQr
KzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyX3N0YXRlID09IDEpCiAg
ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RyW2ldPT0zMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyX3dvcmQgPT0gd29yZF9ubykg
cmV0dXJuIG1pZCh3b3JkX3N0YXJ0LCBpLXdvcmRfc3RhcnQpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3VyX3N0YXRlID0gMDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoY3VyX3N0YXRlID09IDIpCiAgICAgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyW2ldPT0zNCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoY3VyX3dvcmQgPT0gd29yZF9ubykgcmV0dXJuIG1pZCh3b3JkX3N0YXJ0LCBp
LXdvcmRfc3RhcnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
X3N0YXRlID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoY3Vy
X3dvcmQgPT0gd29yZF9ubykgcmV0dXJuIG1pZCh3b3JkX3N0YXJ0KTsKCiAgICAgICAgICAgICAg
ICByZXR1cm4gQ0xfU3RyaW5nKCIiKTsKICAgICAgICB9CgoKICAgICAgICBDTF9TdHJpbmcgbWlk
KGludCBzdGFydCwgaW50IGxlbj0tMSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAobGVu
PT0tMSkgbGVuPWdldF9sZW5ndGgoKS1zdGFydDsKICAgICAgICAgICAgICAgIHJldHVybiBDTF9T
dHJpbmcoc3RkOjpzdHJpbmcoc3RyLCBzdGFydCwgbGVuKSk7CiAgICAgICAgfQoKCiAgICAgICAg
Q0xfU3RyaW5nIGxlZnQoaW50IGxlbikKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgc3Ry
bGVuZ3RoID0gZ2V0X2xlbmd0aCgpOwogICAgICAgICAgICAgICAgaWYgKHN0cmxlbmd0aCA8IGxl
bikgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgcmV0dXJuIENMX1N0cmluZyhzdGQ6OnN0
cmluZyhzdHIsIDAsIGxlbikpOwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyByaWdodChp
bnQgbGVuKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludCBzdHJsZW5ndGggPSBnZXRfbGVu
Z3RoKCk7CiAgICAgICAgICAgICAgICBpZiAoc3RybGVuZ3RoIDwgbGVuKSByZXR1cm4gKnRoaXM7
CiAgICAgICAgICAgICAgICByZXR1cm4gQ0xfU3RyaW5nKHN0ZDo6c3RyaW5nKHN0ciwgc3RybGVu
Z3RoLWxlbiwgbGVuKSk7CiAgICAgICAgfQoKCiAgICAgICAgaW50IGZpbmQoaW50IGNoYXJhY3Rl
ciwgaW50IHN0YXJ0X3Bvcz0wKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KnB0ciA9IHN0ci5jX3N0cigpOwogICAgICAgICAgICAgICAgY2hhciAqcG9zID0gKGNoYXIqKXN0
cmNocihwdHIrc3RhcnRfcG9zLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgaWYgKHBvcyA9
PSBfX251bGwpIHJldHVybiAtMTsKICAgICAgICAgICAgICAgIHJldHVybiBpbnQocG9zLXB0cik7
CiAgICAgICAgfQoKCiAgICAgICAgaW50IGZpbmRfbGFzdChjaGFyIGNoYXJhY3RlcikgY29uc3QK
ICAgICAgICB7CiAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0ZW1wID0gc3RyLmNfc3RyKCk7
CiAgICAgICAgICAgICAgICBpbnQgc3RhcnRfcG9zID0gKGludClzdHIubGVuZ3RoKCk7CiAgICAg
ICAgICAgICAgICBmb3IoaW50IGkgPSBzdGFydF9wb3M7IGk7IGktLSkKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYoKih0ZW1wK2kpID09IGNoYXJhY3RlcikKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9
CgoKICAgICAgICBib29sIGNhc2VfY29tcGFyZShjb25zdCBjaGFyICpvdGhlcikKICAgICAgICB7
CiAgICAgICAgICAgICAgICBpZiAob3RoZXI9PV9fbnVsbCkgcmV0dXJuIGZhbHNlOwojIDQ3NyAi
L3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0vY2xhbnN0cmluZy5oIiAzCiAgICAgICAg
ICAgICAgICBpZiAoc3RyY2FzZWNtcChzdHIuY19zdHIoKSwgb3RoZXIpPT0wKSByZXR1cm4gdHJ1
ZTsKCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKCgogICAgICAgIHZv
aWQgdG9fbG93ZXIoKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludCBsZW4gPSAoaW50KXN0
ci5sZW5ndGgoKTsKICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxsZW47IGkrKykKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyW2ldID0gdG9sb3dlcihz
dHJbaV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICAgIHZvaWQgdG9fdXBw
ZXIoKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludCBsZW4gPSAoaW50KXN0ci5sZW5ndGgo
KTsKICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxsZW47IGkrKykKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyW2ldID0gdG91cHBlcihzdHJbaV0pOwog
ICAgICAgICAgICAgICAgfQogICAgICAgIH0KCnByaXZhdGU6CiAgICAgICAgc3RkOjpzdHJpbmcg
c3RyOwoKICAgICAgICBzdGQ6OnN0cmluZyBpbnRfdG9fc3RyaW5nKGNvbnN0IGNoYXIgKnByZWZp
eCwgY29uc3QgaW50IG51bWJlcikKICAgICAgICB7CiAgICAgICAgICAgICAgICBjaGFyIGJ1Zlsy
MF07CiAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIiVkIiwgbnVtYmVyKTsKCiAgICAgICAg
ICAgICAgICBpbnQgbGVuPTA7CiAgICAgICAgICAgICAgICBpZiAocHJlZml4ICE9IF9fbnVsbCkg
bGVuID0gKGludClzdHJsZW4ocHJlZml4KTsKCiAgICAgICAgICAgICAgICBjaGFyICp0ZXh0ID0g
bmV3IGNoYXJbbGVuICsgc3RybGVuKGJ1ZikgKyAxXTsKICAgICAgICAgICAgICAgIGlmIChwcmVm
aXggIT0gX19udWxsKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBz
dHJjcHkodGV4dCwgcHJlZml4KTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2F0KHRleHQs
IGJ1Zik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSh0ZXh0LCBidWYpOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlcyh0ZXh0KTsKICAgICAg
ICAgICAgICAgIGRlbGV0ZVtdIHRleHQ7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVzOwogICAg
ICAgIH0KCiAgICAgICAgc3RkOjpzdHJpbmcgZmxvYXRfdG9fc3RyaW5nKGNvbnN0IGNoYXIgKnBy
ZWZpeCwgY29uc3QgZmxvYXQgX2Zsb2F0X251bWJlcikKICAgICAgICB7CiAgICAgICAgICAgICAg
ICBjaGFyIGJ1ZlsyNV07CiAgICAgICAgICAgICAgICBidWZbMF0gPSAwOwoKICAgICAgICAgICAg
ICAgIGludCBkZWNpbWFsLCBzaWduOwogICAgICAgICAgICAgICAgaW50IHByZWNpc2lvbiA9IDQ7
CiAgICAgICAgICAgICAgICBjaGFyIHRlbXA7CgogICAgICAgICAgICAgICAgZmxvYXQgZmxvYXRf
bnVtYmVyID0gX2Zsb2F0X251bWJlcjsKCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfZmxv
YXRfYnVmZmVyID0gZmN2dCgKICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRfbnVtYmVyLAog
ICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICZkZWNpbWFsLAogICAgICAgICAgICAgICAgICAgICAgICAmc2lnbik7CgogICAgICAgICAgICAg
ICAgY2hhciAqZmxvYXRfYnVmZmVyID0gbmV3IGNoYXJbc3RybGVuKF9mbG9hdF9idWZmZXIpKzFd
OwogICAgICAgICAgICAgICAgc3RyY3B5KGZsb2F0X2J1ZmZlciwgX2Zsb2F0X2J1ZmZlcik7Cgog
ICAgICAgICAgICAgICAgaWYgKHNpZ24pIHN0cmNweShidWYsICItIik7CiAgICAgICAgICAgICAg
ICBpZiAoZGVjaW1hbCA8PSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICBzdHJjYXQoYnVmLCAiMC4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2F0KGJ1
ZiwgZmxvYXRfYnVmZmVyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wPWZsb2F0X2J1ZmZlcltk
ZWNpbWFsXTsKICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRfYnVmZmVyW2RlY2ltYWxdID0g
MDsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2F0KGJ1ZiwgZmxvYXRfYnVmZmVyKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXRfYnVmZmVyW2RlY2ltYWxdID0gdGVtcDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cmNhdChidWYsICIuIik7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cmNhdChidWYsICZmbG9hdF9idWZmZXJbZGVjaW1hbF0pOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIGludCBsZW49MDsKICAgICAgICAgICAgICAgIGlmIChwcmVmaXgg
IT0gX19udWxsKSBsZW4gPSAoaW50KXN0cmxlbihwcmVmaXgpOwoKICAgICAgICAgICAgICAgIGNo
YXIgKnRleHQgPSBuZXcgY2hhcltsZW4gKyBzdHJsZW4oYnVmKSArIDFdOwogICAgICAgICAgICAg
ICAgaWYgKHByZWZpeCAhPSBfX251bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cmNweSh0ZXh0LCBwcmVmaXgpOwogICAgICAgICAgICAgICAgICAgICAgICBz
dHJjYXQodGV4dCwgYnVmKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2Ug
c3RyY3B5KHRleHQsIGJ1Zik7CgogICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVzKHRleHQp
OwogICAgICAgICAgICAgICAgZGVsZXRlW10gdGV4dDsKICAgICAgICAgICAgICAgIHJldHVybiBy
ZXM7CiAgICAgICAgfQoKICAgICAgICBzdGQ6OnN0cmluZyBhcHBlbmRfc3RyaW5nKGNvbnN0IGNo
YXIgKnByZWZpeCwgY29uc3QgY2hhciAqcG9zdGZpeCkKICAgICAgICB7CiAgICAgICAgICAgICAg
ICBpbnQgbGVuPTA7CiAgICAgICAgICAgICAgICBpZiAocHJlZml4ICE9IF9fbnVsbCkgbGVuID0g
KGludClzdHJsZW4ocHJlZml4KTsKICAgICAgICAgICAgICAgIGlmIChwb3N0Zml4ICE9IF9fbnVs
bCkgbGVuICs9IChpbnQpc3RybGVuKHBvc3RmaXgpOwogICAgICAgICAgICAgICAgY2hhciAqdGV4
dCA9IG5ldyBjaGFyW2xlbiArIDFdOwogICAgICAgICAgICAgICAgaWYgKHByZWZpeCAhPSBfX251
bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSh0ZXh0
LCBwcmVmaXgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zdGZpeCAhPSBfX251bGwp
IHN0cmNhdCh0ZXh0LCBwb3N0Zml4KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHBvc3RmaXggIT0gX19udWxsKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICBzdHJjcHkodGV4dCwgcG9zdGZpeCk7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVzKHRleHQpOwogICAgICAgICAgICAgICAgZGVs
ZXRlW10gdGV4dDsKICAgICAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgfQp9OwojIDM5
ICJDbGFuQm9tYmVyLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9taWttb2QuaCIgMSAz
CiMgMjcgIi91c3IvaW5jbHVkZS9DbGFuTGliL21pa21vZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L0NsYW5MaWIvTWlrTW9kL3NldHVwbWlrbW9kLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvQ2xh
bkxpYi9NaWtNb2Qvc2V0dXBtaWttb2QuaCIgMwpjbGFzcyBDTF9TZXR1cE1pa01vZAp7CnB1Ymxp
YzoKCgogICAgICAgIHN0YXRpYyB2b2lkIGluaXQoYm9vbCByZWdpc3Rlcl9yZXNvdXJjZXNfb25s
eSA9IGZhbHNlKTsKCgogICAgICAgIHN0YXRpYyB2b2lkIGRlaW5pdCgpOwp9OwojIDI4ICIvdXNy
L2luY2x1ZGUvQ2xhbkxpYi9taWttb2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIv
TWlrTW9kL3N0cmVhbWVkX21pa21vZF9zYW1wbGUuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9D
bGFuTGliL01pa01vZC9zdHJlYW1lZF9taWttb2Rfc2FtcGxlLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvQ2xhbkxpYi9jb3JlLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9jb3JlLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9rZWVwX2FsaXZlLmgiIDEg
MwojIDI2ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9rZWVwX2FsaXZlLmgiIDMK
Y2xhc3MgQ0xfS2VlcEFsaXZlCnsKcHVibGljOgoKCiAgICAgICAgQ0xfS2VlcEFsaXZlKCk7CgoK
ICAgICAgICB2aXJ0dWFsIH5DTF9LZWVwQWxpdmUoKTsKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQg
a2VlcF9hbGl2ZSgpPTA7Cn07CiMgNDAgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAz
CiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0vc3lzdGVtLmgiIDEgMwojIDIy
ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9zeXN0ZW0uaCIgMwpjbGFzcyBDTF9F
dmVudExpc3RlbmVyOwpjbGFzcyBDTF9TaWduYWxfdjA7CgoKY2xhc3MgQ0xfU3lzdGVtCnsKcHVi
bGljOgoKCiAgICAgICAgc3RhdGljIHZvaWQga2VlcF9hbGl2ZSgpOwoKCgogICAgICAgIHN0YXRp
YyB2b2lkIGtlZXBfYWxpdmUoaW50IG1pbGxpcyk7CgoKCiAgICAgICAgc3RhdGljIGJvb2wga2Vl
cF9hbGl2ZShDTF9FdmVudExpc3RlbmVyICZldmVudHMsIGludCB0aW1lb3V0ID0gLTEpOwoKCiAg
ICAgICAgc3RhdGljIHZvaWQgc2xlZXAoaW50IG1pbGxpcyk7CgoKICAgICAgICBzdGF0aWMgdW5z
aWduZWQgaW50IGdldF90aW1lKCk7CgoKCiAgICAgICAgc3RhdGljIHZvaWQgc3VzcGVuZF90aW1l
KCk7CgoKCiAgICAgICAgc3RhdGljIHZvaWQgcmVzdW1lX3RpbWUoKTsKCgogICAgICAgIHN0YXRp
YyBib29sIGRldGVjdF9tbXgoKTsKCgogICAgICAgIHN0YXRpYyBib29sIGRldGVjdF8zZG5vdygp
OwoKCiAgICAgICAgc3RhdGljIGJvb2wgZGV0ZWN0X2V4dF8zZG5vdygpOwoKCgogICAgICAgIHN0
YXRpYyBDTF9TaWduYWxfdjAgJnNpZ19xdWl0KCk7Cn07CiMgNDEgIi91c3IvaW5jbHVkZS9DbGFu
TGliL2NvcmUuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS90
aHJlYWQuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvU3lzdGVtL3RocmVh
ZC5oIiAzCmNsYXNzIENMX1RocmVhZF9HZW5lcmljOwoKCgpjbGFzcyBDTF9SdW5uYWJsZQp7CnB1
YmxpYzoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBydW4oKT0wOwp9OwoKCmVudW0gRVRocmVhZFBy
aW9yaXR5CnsKICAgICAgICBjbF9wcmlvcml0eV9hYm92ZV9ub3JtYWwsCiAgICAgICAgY2xfcHJp
b3JpdHlfYmVsb3dfbm9ybWFsLAogICAgICAgIGNsX3ByaW9yaXR5X2hpZ2hlc3QsCiAgICAgICAg
Y2xfcHJpb3JpdHlfaWRsZSwKICAgICAgICBjbF9wcmlvcml0eV9sb3dlc3QsCiAgICAgICAgY2xf
cHJpb3JpdHlfbm9ybWFsLAogICAgICAgIGNsX3ByaW9yaXR5X3RpbWVfY3JpdGljYWwKfTsKCgpj
bGFzcyBDTF9UaHJlYWQKewoKcHVibGljOgoKCgogICAgICAgIHN0YXRpYyBDTF9UaHJlYWQgKmNy
ZWF0ZShDTF9SdW5uYWJsZSAqcnVubmFibGUsIGJvb2wgZGVsZXRlX3J1bm5hYmxlID0gZmFsc2Up
OwoKCgoKCiAgICAgICAgc3RhdGljIENMX1RocmVhZCAqY3JlYXRlKGludCAoKmZ1bmMpKHZvaWQq
KSwgdm9pZCogdmFsdWUpOwoKCiAgICAgICAgQ0xfVGhyZWFkKENMX1J1bm5hYmxlICpydW5uYWJs
ZSwgYm9vbCBkZWxldGVfcnVubmFibGUgPSBmYWxzZSk7CgoKICAgICAgICBDTF9UaHJlYWQoaW50
ICgqZnVuYykodm9pZCopLCB2b2lkICp2YWx1ZSk7CgoKICAgICAgICBDTF9UaHJlYWQoY29uc3Qg
Q0xfVGhyZWFkICZjb3B5KTsKCgogICAgICAgIENMX1RocmVhZCgpOwoKCiAgICAgICAgfkNMX1Ro
cmVhZCgpOwoKCnB1YmxpYzoKCiAgICAgICAgQ0xfVGhyZWFkICZvcGVyYXRvciA9KGNvbnN0IENM
X1RocmVhZCAmY29weSk7CgoKICAgICAgICB2b2lkIHN0YXJ0KCk7CgoKICAgICAgICB2b2lkIHRl
cm1pbmF0ZSgpOwoKCiAgICAgICAgdm9pZCB3YWl0KCk7CgoKICAgICAgICB2b2lkIHNldF9wcmlv
cml0eShFVGhyZWFkUHJpb3JpdHkgcHJpb3JpdHkpOwoKCnByaXZhdGU6CiAgICAgICAgQ0xfVGhy
ZWFkX0dlbmVyaWMgKmltcGw7Cn07CiMgNDQgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0vdGhyZWFkZnVuY192MC5o
IiAxIDMKCgoKCgoKdGVtcGxhdGU8Y2xhc3MgQ2xhc3M+CmNsYXNzIENMX1RocmVhZEZ1bmNfUnVu
bmFibGVfdjAgOiBwdWJsaWMgQ0xfUnVubmFibGUKewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB2
b2lkIChDbGFzczo6Kk1lbWJlckZ1bmMpKCk7CgogICAgICAgIENMX1RocmVhZEZ1bmNfUnVubmFi
bGVfdjAoQ2xhc3MgKnNlbGYsIE1lbWJlckZ1bmMgZnVuYykKICAgICAgICA6IHNlbGYoc2VsZiks
IGZ1bmMoZnVuYykKICAgICAgICB7CiAgICAgICAgfQoKcHJpdmF0ZToKICAgICAgICB2aXJ0dWFs
IHZvaWQgcnVuKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICAoKnNlbGYuKmZ1bmMpKCk7CiAg
ICAgICAgfQoKICAgICAgICBDbGFzcyAqc2VsZjsKICAgICAgICBNZW1iZXJGdW5jIGZ1bmM7Cn07
CiMgNDUgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L0NsYW5MaWIvQ29yZS9TeXN0ZW0vdGhyZWFkZnVuY192MS5oIiAxIDMKCgoKCgoKdGVtcGxhdGU8
Y2xhc3MgQ2xhc3MsIGNsYXNzIFBhcmFtPgpjbGFzcyBDTF9UaHJlYWRGdW5jX1J1bm5hYmxlX3Yx
IDogcHVibGljIENMX1J1bm5hYmxlCnsKcHVibGljOgogICAgICAgIHR5cGVkZWYgdm9pZCAoQ2xh
c3M6OipNZW1iZXJGdW5jKShQYXJhbSAmcGFyYW0pOwoKICAgICAgICBDTF9UaHJlYWRGdW5jX1J1
bm5hYmxlX3YxKENsYXNzICpzZWxmLCBNZW1iZXJGdW5jIGZ1bmMsIGNvbnN0IFBhcmFtICZwYXJh
bSkKICAgICAgICA6IHNlbGYoc2VsZiksIGZ1bmMoZnVuYyksIHBhcmFtKHBhcmFtKQogICAgICAg
IHsKICAgICAgICB9Cgpwcml2YXRlOgogICAgICAgIHZpcnR1YWwgdm9pZCBydW4oKQogICAgICAg
IHsKICAgICAgICAgICAgICAgICgqc2VsZi4qZnVuYykocGFyYW0pOwogICAgICAgIH0KCiAgICAg
ICAgQ2xhc3MgKnNlbGY7CiAgICAgICAgTWVtYmVyRnVuYyBmdW5jOwogICAgICAgIFBhcmFtIHBh
cmFtOwp9OwojIDQ2ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9jb3JlLmgiIDIgMwojIDEgIi91c3Iv
aW5jbHVkZS9DbGFuTGliL0NvcmUvU3lzdGVtL3RocmVhZGZ1bmNfdjIuaCIgMSAzCgoKCgoKCnRl
bXBsYXRlPGNsYXNzIENsYXNzLCBjbGFzcyBQYXJhbTEsIGNsYXNzIFBhcmFtMj4KY2xhc3MgQ0xf
VGhyZWFkRnVuY19SdW5uYWJsZV92MiA6IHB1YmxpYyBDTF9SdW5uYWJsZQp7CnB1YmxpYzoKICAg
ICAgICB0eXBlZGVmIHZvaWQgKENsYXNzOjoqTWVtYmVyRnVuYykoUGFyYW0xICZwYXJhbTEsIFBh
cmFtMiAmcGFyYW0yKTsKCiAgICAgICAgQ0xfVGhyZWFkRnVuY19SdW5uYWJsZV92MihDbGFzcyAq
c2VsZiwgTWVtYmVyRnVuYyBmdW5jLCBjb25zdCBQYXJhbTEgJnBhcmFtMSwgY29uc3QgUGFyYW0y
ICZwYXJhbTIpCiAgICAgICAgOiBzZWxmKHNlbGYpLCBmdW5jKGZ1bmMpLCBwYXJhbTEocGFyYW0x
KSwgcGFyYW0yKHBhcmFtMikKICAgICAgICB7CiAgICAgICAgfQoKcHJpdmF0ZToKICAgICAgICB2
aXJ0dWFsIHZvaWQgcnVuKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICAoKnNlbGYuKmZ1bmMp
KHBhcmFtMSwgcGFyYW0yKTsKICAgICAgICB9CgogICAgICAgIENsYXNzICpzZWxmOwogICAgICAg
IE1lbWJlckZ1bmMgZnVuYzsKICAgICAgICBQYXJhbTEgcGFyYW0xOwogICAgICAgIFBhcmFtMiBw
YXJhbTI7Cn07CiMgNDcgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0vbXV0ZXguaCIgMSAzCiMgMjIgIi91c3IvaW5j
bHVkZS9DbGFuTGliL0NvcmUvU3lzdGVtL211dGV4LmgiIDMKY2xhc3MgQ0xfTXV0ZXhfR2VuZXJp
YzsKCgoKY2xhc3MgQ0xfTXV0ZXgKewpwdWJsaWM6CgoKICAgICAgICBzdGF0aWMgQ0xfTXV0ZXgg
KmNyZWF0ZSgpOwoKCiAgICAgICAgQ0xfTXV0ZXgoKTsKCgogICAgICAgIH5DTF9NdXRleCgpOwoK
CgogICAgICAgIHZvaWQgZW50ZXIoKTsKCgogICAgICAgIHZvaWQgbGVhdmUoKTsKIyA2MyAiL3Vz
ci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0vbXV0ZXguaCIgMwogICAgICAgIHZvaWQgd2Fp
dCgpOwojIDc1ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9tdXRleC5oIiAzCiAg
ICAgICAgdm9pZCBub3RpZnkoKTsKCgoKCgoKICAgICAgICB2b2lkIG5vdGlmeV9hbGwoKTsKCnBy
aXZhdGU6CgogICAgICAgIENMX011dGV4KGNvbnN0IENMX011dGV4ICZjb3B5KTsKCgogICAgICAg
IHZvaWQgb3BlcmF0b3IgPShjb25zdCBDTF9NdXRleCAmY29weSk7CgogICAgICAgIENMX011dGV4
X0dlbmVyaWMgKmltcGw7Cn07CgoKCgoKCmNsYXNzIENMX011dGV4U2VjdGlvbgp7CgpwdWJsaWM6
CgogICAgICAgIENMX011dGV4U2VjdGlvbihDTF9NdXRleCAqbXV0ZXgsIGJvb2wgbG9ja19hdF9j
b25zdHJ1Y3QgPSB0cnVlKQogICAgICAgIDogbXV0ZXgobXV0ZXgpLCBsb2NrX2NvdW50KDApCiAg
ICAgICAgewogICAgICAgICAgICAgICAgaWYgKGxvY2tfYXRfY29uc3RydWN0KSBlbnRlcigpOwog
ICAgICAgIH0KCgogICAgICAgIHZpcnR1YWwgfkNMX011dGV4U2VjdGlvbigpCiAgICAgICAgewog
ICAgICAgICAgICAgICAgd2hpbGUgKGxvY2tfY291bnQgPiAwKSBsZWF2ZSgpOwogICAgICAgIH0K
CgpwdWJsaWM6CiAgICAgICAgdm9pZCBlbnRlcigpCiAgICAgICAgewogICAgICAgICAgICAgICAg
bXV0ZXgtPmVudGVyKCk7CiAgICAgICAgICAgICAgICBsb2NrX2NvdW50Kys7CiAgICAgICAgfQoK
ICAgICAgICB2b2lkIGxlYXZlKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAobG9ja19j
b3VudCA9PSAwKSByZXR1cm47CiAgICAgICAgICAgICAgICBtdXRleC0+bGVhdmUoKTsKICAgICAg
ICAgICAgICAgIGxvY2tfY291bnQtLTsKICAgICAgICB9CgoKcHJpdmF0ZToKICAgICAgICBDTF9N
dXRleCAqbXV0ZXg7CgogICAgICAgIGludCBsb2NrX2NvdW50Owp9OwojIDQ4ICIvdXNyL2luY2x1
ZGUvQ2xhbkxpYi9jb3JlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5
c3RlbS90aW1lci5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0v
dGltZXIuaCIgMwpjbGFzcyBDTF9UaW1lciA6IHB1YmxpYyBDTF9LZWVwQWxpdmUKewoKcHVibGlj
OgoKCgogICAgICAgIENMX1RpbWVyKHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwgPSAxMDAwKTsKCgpw
dWJsaWM6CgoKICAgICAgICB1bnNpZ25lZCBsb25nIGdldF9pbnRlcnZhbCgpOwoKCiAgICAgICAg
Ym9vbCBpc19lbmFibGVkKCk7CgoKcHVibGljOgoKCiAgICAgICAgdm9pZCBzZXRfaW50ZXJ2YWwo
dW5zaWduZWQgbG9uZyBpbnRlcnZhbCk7CgoKICAgICAgICB2b2lkIGVuYWJsZSgpOwoKCiAgICAg
ICAgdm9pZCBkaXNhYmxlKCk7CgoKcHVibGljOgoKICAgICAgICBDTF9TaWduYWxfdjAgJnNpZ190
aW1lcigpOwoKCnByaXZhdGU6CiAgICAgICAgdmlydHVhbCB2b2lkIGtlZXBfYWxpdmUoKTsKCiAg
ICAgICAgdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsKICAgICAgICB1bnNpZ25lZCBsb25nIGxhc3Rf
dGltZTsKICAgICAgICBib29sIGVuYWJsZWQ7CgogICAgICAgIENMX1NpZ25hbF92MCBzaWduYWxf
dGltZXI7Cn07CiMgNTAgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0vZXZlbnRfbGlzdGVuZXIuaCIgMSAzCiMgMjIg
Ii91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvU3lzdGVtL2V2ZW50X2xpc3RlbmVyLmgiIDMKY2xh
c3MgQ0xfRXZlbnRUcmlnZ2VyOwpjbGFzcyBDTF9FdmVudExpc3RlbmVyX0dlbmVyaWM7CgoKCgoK
Y2xhc3MgQ0xfRXZlbnRMaXN0ZW5lcgp7CgpwdWJsaWM6CgogICAgICAgIENMX0V2ZW50TGlzdGVu
ZXIoKTsKCgogICAgICAgIENMX0V2ZW50TGlzdGVuZXIoQ0xfRXZlbnRUcmlnZ2VyICp0cmlnZ2Vy
KTsKCgogICAgICAgIHZpcnR1YWwgfkNMX0V2ZW50TGlzdGVuZXIoKTsKCgpwdWJsaWM6CgoKcHVi
bGljOgoKICAgICAgICB2b2lkIGFkZF90cmlnZ2VyKENMX0V2ZW50VHJpZ2dlciAqdHJpZ2dlcik7
CgoKICAgICAgICB2b2lkIHJlbW92ZV90cmlnZ2VyKENMX0V2ZW50VHJpZ2dlciAqdHJpZ2dlcik7
CgoKICAgICAgICB2b2lkIGNsZWFyKCk7CgoKICAgICAgICB2b2lkIHJlc2V0X2FsbCgpOwoKCgoK
CiAgICAgICAgYm9vbCB3YWl0KGludCB0aW1lb3V0ID0gLTEpOwoKCnByaXZhdGU6CiAgICAgICAg
Q0xfRXZlbnRMaXN0ZW5lcl9HZW5lcmljICppbXBsOwp9OwojIDUxICIvdXNyL2luY2x1ZGUvQ2xh
bkxpYi9jb3JlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvU3lzdGVtL2V2
ZW50X3RyaWdnZXIuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvU3lzdGVt
L2V2ZW50X3RyaWdnZXIuaCIgMwpjbGFzcyBDTF9FdmVudExpc3RlbmVyOwpjbGFzcyBDTF9FdmVu
dFRyaWdnZXJfR2VuZXJpYzsKCgoKCgoKY2xhc3MgQ0xfRXZlbnRUcmlnZ2VyCnsKCnB1YmxpYzoK
CiAgICAgICAgQ0xfRXZlbnRUcmlnZ2VyKCk7CgoKICAgICAgICBDTF9FdmVudFRyaWdnZXIoY29u
c3QgQ0xfRXZlbnRUcmlnZ2VyICZjb3B5KTsKCgogICAgICAgIHZpcnR1YWwgfkNMX0V2ZW50VHJp
Z2dlcigpOwoKCnB1YmxpYzoKCiAgICAgICAgYm9vbCBnZXRfZmxhZygpIGNvbnN0OwoKCnB1Ymxp
YzoKCiAgICAgICAgQ0xfRXZlbnRUcmlnZ2VyICZvcGVyYXRvciA9KGNvbnN0IENMX0V2ZW50VHJp
Z2dlciAmY29weSk7CgoKICAgICAgICB2b2lkIHJlc2V0KCkgY29uc3Q7CgoKICAgICAgICB2b2lk
IHNldF9mbGFnKCk7CgoKCgoKICAgICAgICBib29sIHdhaXQoaW50IHRpbWVvdXQgPSAtMSk7CgoK
cHVibGljOgogICAgICAgIENMX0V2ZW50VHJpZ2dlcl9HZW5lcmljICppbXBsOwp9OwojIDUyICIv
dXNyL2luY2x1ZGUvQ2xhbkxpYi9jb3JlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGli
L0NvcmUvU3lzdGVtL2NvbnNvbGVfd2luZG93LmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvQ2xh
bkxpYi9Db3JlL1N5c3RlbS9jb25zb2xlX3dpbmRvdy5oIiAzCmNsYXNzIENMX0NvbnNvbGVXaW5k
b3dfR2VuZXJpYzsKCgoKY2xhc3MgQ0xfQ29uc29sZVdpbmRvdwp7CgpwdWJsaWM6CgogICAgICAg
IENMX0NvbnNvbGVXaW5kb3coCiAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdGl0
bGUsCiAgICAgICAgICAgICAgICBpbnQgd2lkdGggPSA4MCwKICAgICAgICAgICAgICAgIGludCBo
ZWlnaHQgPSAyNSk7CgoKICAgICAgICB+Q0xfQ29uc29sZVdpbmRvdygpOwoKCnB1YmxpYzoKCiAg
ICAgICAgdm9pZCByZWRpcmVjdF9zdGRpbygpOwoKCiAgICAgICAgdm9pZCByZWRpcmVjdF9zdGRp
byhjb25zdCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUpOwoKCiAgICAgICAgdm9pZCB3YWl0X2Zvcl9r
ZXkoKTsKCgoKICAgICAgICB2b2lkIGRpc3BsYXlfY2xvc2VfbWVzc2FnZSgpOwoKCnByaXZhdGU6
CiAgICAgICAgQ0xfQ29uc29sZVdpbmRvd19HZW5lcmljICppbXBsOwp9OwojIDUzICIvdXNyL2lu
Y2x1ZGUvQ2xhbkxpYi9jb3JlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3Jl
L0lPRGF0YS9jbF9lbmRpYW4uaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUv
SU9EYXRhL2NsX2VuZGlhbi5oIiAzCmNsYXNzIENMX0VuZGlhbgp7CnB1YmxpYzoKCgoKCgogICAg
ICAgIHN0YXRpYyB2b2lkIHN3YXAodm9pZCAqZGF0YSwgaW50IHR5cGVfc2l6ZSwgaW50IHRvdGFs
X3RpbWVzPTEpOwoKCgoKICAgICAgICBzdGF0aWMgYm9vbCBpc19zeXN0ZW1fYmlnKCk7CgoKCiAg
ICAgICAgc3RhdGljIGJvb2wgaXNfc3lzdGVtXzY0Yml0KCk7Cn07CiMgNTUgIi91c3IvaW5jbHVk
ZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9JT0Rh
dGEvaW5wdXRzb3VyY2UuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvSU9E
YXRhL2lucHV0c291cmNlLmgiIDMKY2xhc3MgQ0xfSW5wdXRTb3VyY2UKewoKcHVibGljOgoKICAg
ICAgICBlbnVtIFNlZWtFbnVtCiAgICAgICAgewogICAgICAgICAgICAgICAgc2Vla19zZXQsCiAg
ICAgICAgICAgICAgICBzZWVrX2N1ciwKICAgICAgICAgICAgICAgIHNlZWtfZW5kCiAgICAgICAg
fTsKCgpwdWJsaWM6CgogICAgICAgIENMX0lucHV0U291cmNlKCkgeyBzZXRfc3lzdGVtX21vZGUo
KTsgfQoKCiAgICAgICAgdmlydHVhbCB+Q0xfSW5wdXRTb3VyY2UoKSB7IHJldHVybjsgfQoKCnB1
YmxpYzoKCgogICAgICAgIHZpcnR1YWwgaW50IHRlbGwoKSBjb25zdCA9IDA7CgoKCiAgICAgICAg
dmlydHVhbCBpbnQgc2l6ZSgpIGNvbnN0ID0gMDsKCgogICAgICAgIHZpcnR1YWwgYm9vbCBpc19s
aXR0bGVfZW5kaWFuKCkgeyByZXR1cm4gbGl0dGxlX2VuZGlhbl9tb2RlOyB9CgoKcHVibGljOgoK
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0X3N5c3RlbV9tb2RlKCk7CgoKICAgICAgICB2aXJ0dWFs
IHZvaWQgc2V0X2JpZ19lbmRpYW5fbW9kZSgpOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIHNldF9s
aXR0bGVfZW5kaWFuX21vZGUoKTsKCgoKICAgICAgICB2aXJ0dWFsIGludCByZWFkX2ludDMyKCk7
CgoKCiAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgcmVhZF91aW50MzIoKTsKCgoKICAgICAg
ICB2aXJ0dWFsIHNob3J0IHJlYWRfc2hvcnQxNigpOwoKCgogICAgICAgIHZpcnR1YWwgdW5zaWdu
ZWQgc2hvcnQgcmVhZF91c2hvcnQxNigpOwoKCgogICAgICAgIHZpcnR1YWwgY2hhciByZWFkX2No
YXI4KCk7CgoKCiAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRfdWNoYXI4KCk7CgoK
CiAgICAgICAgdmlydHVhbCBmbG9hdCByZWFkX2Zsb2F0MzIoKTsKCgoKICAgICAgICB2aXJ0dWFs
IGJvb2wgcmVhZF9ib29sOCgpOwoKCgoKCiAgICAgICAgdmlydHVhbCBpbnQgcmVhZCh2b2lkICpk
YXRhLCBpbnQgc2l6ZSkgPSAwOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIG9wZW4oKSA9IDA7CgoK
ICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7CgoKCiAgICAgICAgdmlydHVhbCBDTF9J
bnB1dFNvdXJjZSAqY2xvbmUoKSBjb25zdCA9IDA7CgoKCgoKICAgICAgICB2aXJ0dWFsIHN0ZDo6
c3RyaW5nIHJlYWRfc3RyaW5nKCk7CgoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBzZWVrKGludCBw
b3MsIFNlZWtFbnVtIHNlZWtfdHlwZSkgPSAwOwoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBwdXNo
X3Bvc2l0aW9uKCkgPSAwOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIHBvcF9wb3NpdGlvbigpID0g
MDsKCgpwcm90ZWN0ZWQ6CiAgICAgICAgYm9vbCBsaXR0bGVfZW5kaWFuX21vZGU7Cn07CiMgNTYg
Ii91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5M
aWIvQ29yZS9JT0RhdGEvaW5wdXRzb3VyY2VfZmlsZS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRl
L0NsYW5MaWIvQ29yZS9JT0RhdGEvaW5wdXRzb3VyY2VfZmlsZS5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2crKy9zdGFjayIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9nKysvc3RhY2siIDMKCgoKCgoj
IDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfZGVxdWUuaCIgMSAzCiMgNzIgIi91c3IvaW5j
bHVkZS9nKysvYml0cy9zdGxfZGVxdWUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA4NSAiL3Vzci9p
bmNsdWRlL2crKy9iaXRzL3N0bF9kZXF1ZS5oIiAzCmlubGluZSBzaXplX3QKX19kZXF1ZV9idWZf
c2l6ZShzaXplX3QgX19zaXplKQp7IHJldHVybiBfX3NpemUgPCA1MTIgPyBzaXplX3QoNTEyIC8g
X19zaXplKSA6IHNpemVfdCgxKTsgfQojIDEwMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9k
ZXF1ZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0
cnVjdCBfRGVxdWVfaXRlcmF0b3IKewogIHR5cGVkZWYgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1Rw
JiwgX1RwKj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBf
VHAmLCBjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKICBzdGF0aWMgc2l6ZV90IF9TX2J1ZmZl
cl9zaXplKCkgeyByZXR1cm4gX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSk7IH0KCiAgdHlw
ZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl
ZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogIHR5cGVkZWYgX1Jl
ZiByZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlm
Zl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCoqIF9NYXBfcG9pbnRlcjsKICB0eXBl
ZGVmIF9EZXF1ZV9pdGVyYXRvciBfU2VsZjsKCiAgX1RwKiBfTV9jdXI7CiAgX1RwKiBfTV9maXJz
dDsKICBfVHAqIF9NX2xhc3Q7CiAgX01hcF9wb2ludGVyIF9NX25vZGU7CgogIF9EZXF1ZV9pdGVy
YXRvcihfVHAqIF9feCwgX01hcF9wb2ludGVyIF9feSkKICAgIDogX01fY3VyKF9feCksIF9NX2Zp
cnN0KCpfX3kpLAogICAgICBfTV9sYXN0KCpfX3kgKyBfU19idWZmZXJfc2l6ZSgpKSwgX01fbm9k
ZShfX3kpIHt9CiAgX0RlcXVlX2l0ZXJhdG9yKCkgOiBfTV9jdXIoMCksIF9NX2ZpcnN0KDApLCBf
TV9sYXN0KDApLCBfTV9ub2RlKDApIHt9CiAgX0RlcXVlX2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9y
JiBfX3gpCiAgICA6IF9NX2N1cihfX3guX01fY3VyKSwgX01fZmlyc3QoX194Ll9NX2ZpcnN0KSwK
ICAgICAgX01fbGFzdChfX3guX01fbGFzdCksIF9NX25vZGUoX194Ll9NX25vZGUpIHt9CgogIHJl
ZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqX01fY3VyOyB9CiAgcG9pbnRlciBv
cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VyOyB9CgogIGRpZmZlcmVuY2VfdHlwZSBv
cGVyYXRvci0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QgewogICAgcmV0dXJuIGRpZmZlcmVuY2Vf
dHlwZShfU19idWZmZXJfc2l6ZSgpKSAqIChfTV9ub2RlIC0gX194Ll9NX25vZGUgLSAxKSArCiAg
ICAgIChfTV9jdXIgLSBfTV9maXJzdCkgKyAoX194Ll9NX2xhc3QgLSBfX3guX01fY3VyKTsKICB9
CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgKytfTV9jdXI7CiAgICBpZiAoX01fY3VyID09
IF9NX2xhc3QpIHsKICAgICAgX01fc2V0X25vZGUoX01fbm9kZSArIDEpOwogICAgICBfTV9jdXIg
PSBfTV9maXJzdDsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3Ir
KyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArKyp0aGlzOwogICAgcmV0dXJu
IF9fdG1wOwogIH0KCiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICBpZiAoX01fY3VyID09IF9N
X2ZpcnN0KSB7CiAgICAgIF9NX3NldF9ub2RlKF9NX25vZGUgLSAxKTsKICAgICAgX01fY3VyID0g
X01fbGFzdDsKICAgIH0KICAgIC0tX01fY3VyOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2Vs
ZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tKnRoaXM7
CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBfU2VsZiYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5
cGUgX19uKQogIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX29mZnNldCA9IF9fbiArIChfTV9jdXIg
LSBfTV9maXJzdCk7CiAgICBpZiAoX19vZmZzZXQgPj0gMCAmJiBfX29mZnNldCA8IGRpZmZlcmVu
Y2VfdHlwZShfU19idWZmZXJfc2l6ZSgpKSkKICAgICAgX01fY3VyICs9IF9fbjsKICAgIGVsc2Ug
ewogICAgICBkaWZmZXJlbmNlX3R5cGUgX19ub2RlX29mZnNldCA9CiAgICAgICAgX19vZmZzZXQg
PiAwID8gX19vZmZzZXQgLyBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUoKSkKICAgICAg
ICAgICAgICAgICAgIDogLWRpZmZlcmVuY2VfdHlwZSgoLV9fb2Zmc2V0IC0gMSkgLyBfU19idWZm
ZXJfc2l6ZSgpKSAtIDE7CiAgICAgIF9NX3NldF9ub2RlKF9NX25vZGUgKyBfX25vZGVfb2Zmc2V0
KTsKICAgICAgX01fY3VyID0gX01fZmlyc3QgKwogICAgICAgIChfX29mZnNldCAtIF9fbm9kZV9v
ZmZzZXQgKiBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUoKSkpOwogICAgfQogICAgcmV0
dXJuICp0aGlzOwogIH0KCiAgX1NlbGYgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNv
bnN0CiAgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBfX247
CiAgfQoKICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7IHJldHVybiAq
dGhpcyArPSAtX19uOyB9CgogIF9TZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBj
b25zdCB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9fbjsK
ICB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsg
cmV0dXJuICooKnRoaXMgKyBfX24pOyB9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfU2VsZiYg
X194KSBjb25zdCB7IHJldHVybiBfTV9jdXIgPT0gX194Ll9NX2N1cjsgfQogIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBfU2VsZiYgX194KSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IF9feCk7IH0K
ICBib29sIG9wZXJhdG9yPChjb25zdCBfU2VsZiYgX194KSBjb25zdCB7CiAgICByZXR1cm4gKF9N
X25vZGUgPT0gX194Ll9NX25vZGUpID8KICAgICAgKF9NX2N1ciA8IF9feC5fTV9jdXIpIDogKF9N
X25vZGUgPCBfX3guX01fbm9kZSk7CiAgfQogIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9TZWxmJiBf
X3gpIGNvbnN0IHsgcmV0dXJuIF9feCA8ICp0aGlzOyB9CiAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0
IF9TZWxmJiBfX3gpIGNvbnN0IHsgcmV0dXJuICEoX194IDwgKnRoaXMpOyB9CiAgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IF9TZWxmJiBfX3gpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPCBfX3gpOyB9
CgoKCgoKCgogIHZvaWQgX01fc2V0X25vZGUoX01hcF9wb2ludGVyIF9fbmV3X25vZGUpIHsKICAg
IF9NX25vZGUgPSBfX25ld19ub2RlOwogICAgX01fZmlyc3QgPSAqX19uZXdfbm9kZTsKICAgIF9N
X2xhc3QgPSBfTV9maXJzdCArIGRpZmZlcmVuY2VfdHlwZShfU19idWZmZXJfc2l6ZSgpKTsKICB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBfUHRyPgppbmxpbmUg
X0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4Kb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24s
IGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3gpCnsKICByZXR1cm4g
X194ICsgX19uOwp9CiMgMjM5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2RlcXVlLmgiIDMK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jLCBib29sIF9faXNfc3RhdGljPgpjbGFz
cyBfRGVxdWVfYWxsb2NfYmFzZQp7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190
cmFpdHM8X1RwLF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9j
YXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRv
cjsgfQoKICBfRGVxdWVfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAg
OiBfTV9ub2RlX2FsbG9jYXRvcihfX2EpLCBfTV9tYXBfYWxsb2NhdG9yKF9fYSksCiAgICAgIF9N
X21hcCgwKSwgX01fbWFwX3NpemUoMCkKICB7fQoKcHJvdGVjdGVkOgogIHR5cGVkZWYgdHlwZW5h
bWUgX0FsbG9jX3RyYWl0czxfVHAqLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAg
X01hcF9hbGxvY2F0b3JfdHlwZTsKCiAgYWxsb2NhdG9yX3R5cGUgX01fbm9kZV9hbGxvY2F0b3I7
CiAgX01hcF9hbGxvY2F0b3JfdHlwZSBfTV9tYXBfYWxsb2NhdG9yOwoKICBfVHAqIF9NX2FsbG9j
YXRlX25vZGUoKSB7CiAgICByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoX19kZXF1
ZV9idWZfc2l6ZShzaXplb2YoX1RwKSkpOwogIH0KICB2b2lkIF9NX2RlYWxsb2NhdGVfbm9kZShf
VHAqIF9fcCkgewogICAgX01fbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIF9fZGVxdWVf
YnVmX3NpemUoc2l6ZW9mKF9UcCkpKTsKICB9CiAgX1RwKiogX01fYWxsb2NhdGVfbWFwKHNpemVf
dCBfX24pCiAgICB7IHJldHVybiBfTV9tYXBfYWxsb2NhdG9yLmFsbG9jYXRlKF9fbik7IH0KICB2
b2lkIF9NX2RlYWxsb2NhdGVfbWFwKF9UcCoqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX01fbWFw
X2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgX19uKTsgfQoKICBfVHAqKiBfTV9tYXA7CiAgc2l6
ZV90IF9NX21hcF9zaXplOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
Y2xhc3MgX0RlcXVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsIHRydWU+CnsKcHVibGljOgogIHR5
cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUg
YWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsg
cmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX0RlcXVlX2FsbG9jX2Jhc2UoY29uc3QgYWxs
b2NhdG9yX3R5cGUmKSA6IF9NX21hcCgwKSwgX01fbWFwX3NpemUoMCkge30KCnByb3RlY3RlZDoK
ICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfQWxsb2NfdHlw
ZSBfTm9kZV9hbGxvY190eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAq
LCBfQWxsb2M+OjpfQWxsb2NfdHlwZSBfTWFwX2FsbG9jX3R5cGU7CgogIF9UcCogX01fYWxsb2Nh
dGVfbm9kZSgpIHsKICAgIHJldHVybiBfTm9kZV9hbGxvY190eXBlOjphbGxvY2F0ZShfX2RlcXVl
X2J1Zl9zaXplKHNpemVvZihfVHApKSk7CiAgfQogIHZvaWQgX01fZGVhbGxvY2F0ZV9ub2RlKF9U
cCogX19wKSB7CiAgICBfTm9kZV9hbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgX19kZXF1ZV9i
dWZfc2l6ZShzaXplb2YoX1RwKSkpOwogIH0KICBfVHAqKiBfTV9hbGxvY2F0ZV9tYXAoc2l6ZV90
IF9fbikKICAgIHsgcmV0dXJuIF9NYXBfYWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZv
aWQgX01fZGVhbGxvY2F0ZV9tYXAoX1RwKiogX19wLCBzaXplX3QgX19uKQogICAgeyBfTWFwX2Fs
bG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCBfX24pOyB9CgogIF9UcCoqIF9NX21hcDsKICBzaXpl
X3QgX01fbWFwX3NpemU7Cn07CiMgMzEzICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2RlcXVl
LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBfRGVxdWVfYmFz
ZQogIDogcHVibGljIF9EZXF1ZV9hbGxvY19iYXNlPF9UcCxfQWxsb2MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxl
c3M+CnsKcHVibGljOgogIHR5cGVkZWYgX0RlcXVlX2FsbG9jX2Jhc2U8X1RwLF9BbGxvYywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1Nf
aW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6
YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8
X1RwLF9UcCYsX1RwKj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLGNv
bnN0IF9UcCYsY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CgogIF9EZXF1ZV9iYXNlKGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EsIHNpemVfdCBfX251bV9lbGVtZW50cykKICAgIDogX0Jhc2Uo
X19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCkKICAgIHsgX01faW5pdGlhbGl6ZV9tYXAoX19u
dW1fZWxlbWVudHMpOyB9CiAgX0RlcXVlX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkK
ICAgIDogX0Jhc2UoX19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCkge30KICB+X0RlcXVlX2Jh
c2UoKTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luaXRpYWxpemVfbWFwKHNpemVfdCk7CiAgdm9p
ZCBfTV9jcmVhdGVfbm9kZXMoX1RwKiogX19uc3RhcnQsIF9UcCoqIF9fbmZpbmlzaCk7CiAgdm9p
ZCBfTV9kZXN0cm95X25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBfVHAqKiBfX25maW5pc2gpOwogIGVu
dW0geyBfU19pbml0aWFsX21hcF9zaXplID0gOCB9OwoKcHJvdGVjdGVkOgogIGl0ZXJhdG9yIF9N
X3N0YXJ0OwogIGl0ZXJhdG9yIF9NX2ZpbmlzaDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+Cl9EZXF1ZV9iYXNlPF9UcCxfQWxsb2M+Ojp+X0RlcXVlX2Jhc2UoKQp7CiAg
aWYgKF9NX21hcCkgewogICAgX01fZGVzdHJveV9ub2RlcyhfTV9zdGFydC5fTV9ub2RlLCBfTV9m
aW5pc2guX01fbm9kZSArIDEpOwogICAgX01fZGVhbGxvY2F0ZV9tYXAoX01fbWFwLCBfTV9tYXBf
c2l6ZSk7CiAgfQp9CiMgMzYzICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2RlcXVlLmgiIDMK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCl9EZXF1ZV9iYXNlPF9UcCxf
QWxsb2M+OjpfTV9pbml0aWFsaXplX21hcChzaXplX3QgX19udW1fZWxlbWVudHMpCnsKICBzaXpl
X3QgX19udW1fbm9kZXMgPQogICAgX19udW1fZWxlbWVudHMgLyBfX2RlcXVlX2J1Zl9zaXplKHNp
emVvZihfVHApKSArIDE7CgogIF9NX21hcF9zaXplID0gbWF4KChzaXplX3QpIF9TX2luaXRpYWxf
bWFwX3NpemUsIF9fbnVtX25vZGVzICsgMik7CiAgX01fbWFwID0gX01fYWxsb2NhdGVfbWFwKF9N
X21hcF9zaXplKTsKCiAgX1RwKiogX19uc3RhcnQgPSBfTV9tYXAgKyAoX01fbWFwX3NpemUgLSBf
X251bV9ub2RlcykgLyAyOwogIF9UcCoqIF9fbmZpbmlzaCA9IF9fbnN0YXJ0ICsgX19udW1fbm9k
ZXM7CgogIHRyeQogICAgeyBfTV9jcmVhdGVfbm9kZXMoX19uc3RhcnQsIF9fbmZpbmlzaCk7IH0K
ICBjYXRjaCguLi4pCiAgICB7CiAgICAgIF9NX2RlYWxsb2NhdGVfbWFwKF9NX21hcCwgX01fbWFw
X3NpemUpOwogICAgICBfTV9tYXAgPSAwOwogICAgICBfTV9tYXBfc2l6ZSA9IDA7CiAgICAgIHRo
cm93OwogICAgfQoKICBfTV9zdGFydC5fTV9zZXRfbm9kZShfX25zdGFydCk7CiAgX01fZmluaXNo
Ll9NX3NldF9ub2RlKF9fbmZpbmlzaCAtIDEpOwogIF9NX3N0YXJ0Ll9NX2N1ciA9IF9NX3N0YXJ0
Ll9NX2ZpcnN0OwogIF9NX2ZpbmlzaC5fTV9jdXIgPSBfTV9maW5pc2guX01fZmlyc3QgKwogICAg
ICAgICAgICAgICBfX251bV9lbGVtZW50cyAlIF9fZGVxdWVfYnVmX3NpemUoc2l6ZW9mKF9UcCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgX0RlcXVlX2Jhc2U8
X1RwLF9BbGxvYz46Ol9NX2NyZWF0ZV9ub2RlcyhfVHAqKiBfX25zdGFydCwgX1RwKiogX19uZmlu
aXNoKQp7CiAgX1RwKiogX19jdXI7CiAgdHJ5IHsKICAgIGZvciAoX19jdXIgPSBfX25zdGFydDsg
X19jdXIgPCBfX25maW5pc2g7ICsrX19jdXIpCiAgICAgICpfX2N1ciA9IF9NX2FsbG9jYXRlX25v
ZGUoKTsKICB9CiAgY2F0Y2goLi4uKQogICAgewogICAgICBfTV9kZXN0cm95X25vZGVzKF9fbnN0
YXJ0LCBfX2N1cik7CiAgICAgIHRocm93OwogICAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+CnZvaWQKX0RlcXVlX2Jhc2U8X1RwLF9BbGxvYz46Ol9NX2Rlc3Ryb3lfbm9k
ZXMoX1RwKiogX19uc3RhcnQsIF9UcCoqIF9fbmZpbmlzaCkKewogIGZvciAoX1RwKiogX19uID0g
X19uc3RhcnQ7IF9fbiA8IF9fbmZpbmlzaDsgKytfX24pCiAgICBfTV9kZWFsbG9jYXRlX25vZGUo
Kl9fbik7Cn0KIyA0OTcgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfZGVxdWUuaCIgMwp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CmNsYXNzIGRl
cXVlIDogcHJvdGVjdGVkIF9EZXF1ZV9iYXNlPF9UcCwgX0FsbG9jPgp7CgogCgogIHR5cGVkZWYg
X0RlcXVlX2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOwoKcHVibGljOgogIHR5cGVkZWYgX1RwIHZh
bHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qg
dmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5j
ZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVm
IHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoK
ICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsK
ICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6Omdl
dF9hbGxvY2F0b3IoKTsgfQoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBpdGVy
YXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVy
YXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZl
cnNlX2l0ZXJhdG9yOwoKcHJvdGVjdGVkOgogIHR5cGVkZWYgcG9pbnRlciogX01hcF9wb2ludGVy
OwogIHN0YXRpYyBzaXplX3QgX1NfYnVmZmVyX3NpemUoKSB7IHJldHVybiBfX2RlcXVlX2J1Zl9z
aXplKHNpemVvZihfVHApKTsgfQoKCiAgdXNpbmcgX0Jhc2U6Ol9NX2luaXRpYWxpemVfbWFwOwog
IHVzaW5nIF9CYXNlOjpfTV9jcmVhdGVfbm9kZXM7CiAgdXNpbmcgX0Jhc2U6Ol9NX2Rlc3Ryb3lf
bm9kZXM7CiAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRlX25vZGU7CiAgdXNpbmcgX0Jhc2U6Ol9N
X2RlYWxsb2NhdGVfbm9kZTsKICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGVfbWFwOwogIHVzaW5n
IF9CYXNlOjpfTV9kZWFsbG9jYXRlX21hcDsKCgoKCgoKCiAgdXNpbmcgX0Jhc2U6Ol9NX21hcDsK
ICB1c2luZyBfQmFzZTo6X01fbWFwX3NpemU7CiAgdXNpbmcgX0Jhc2U6Ol9NX3N0YXJ0OwogIHVz
aW5nIF9CYXNlOjpfTV9maW5pc2g7CgpwdWJsaWM6CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy
biBfTV9zdGFydDsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQogIGNv
bnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0KICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0KCiAgcmV2ZXJzZV9pdGVy
YXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKF9NX2ZpbmlzaCk7IH0KICBy
ZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKF9NX3N0YXJ0
KTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJu
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoX01fZmluaXNoKTsgfQogIGNvbnN0X3JldmVyc2VfaXRl
cmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKF9N
X3N0YXJ0KTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQogICAgeyBy
ZXR1cm4gX01fc3RhcnRbZGlmZmVyZW5jZV90eXBlKF9fbildOyB9CiAgY29uc3RfcmVmZXJlbmNl
IG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsgcmV0dXJuIF9NX3N0YXJ0W2Rp
ZmZlcmVuY2VfdHlwZShfX24pXTsgfQoKICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBf
X24pIGNvbnN0IHsKICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICBfX3Rocm93X3Jh
bmdlX2Vycm9yKCJkZXF1ZSIpOwogIH0KCiAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAg
ICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KICBjb25zdF9y
ZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsgX01fcmFuZ2VfY2hlY2soX19u
KTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAq
X01fc3RhcnQ7IH0KICByZWZlcmVuY2UgYmFjaygpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gX01f
ZmluaXNoOwogICAgLS1fX3RtcDsKICAgIHJldHVybiAqX190bXA7CiAgfQogIGNvbnN0X3JlZmVy
ZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpfTV9zdGFydDsgfQogIGNvbnN0X3JlZmVyZW5j
ZSBiYWNrKCkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSBfTV9maW5pc2g7CiAg
ICAtLV9fdG1wOwogICAgcmV0dXJuICpfX3RtcDsKICB9CgogIHNpemVfdHlwZSBzaXplKCkgY29u
c3QgeyByZXR1cm4gX01fZmluaXNoIC0gX01fc3RhcnQ7IH0KICBzaXplX3R5cGUgbWF4X3NpemUo
KSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIF9NX2ZpbmlzaCA9PSBfTV9zdGFydDsgfQoKcHVibGljOgogIGV4cGxpY2l0IGRlcXVl
KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFz
ZShfX2EsIDApIHt9CiAgZGVxdWUoY29uc3QgZGVxdWUmIF9feCkgOiBfQmFzZShfX3guZ2V0X2Fs
bG9jYXRvcigpLCBfX3guc2l6ZSgpKQogICAgeyB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2lu
KCksIF9feC5lbmQoKSwgX01fc3RhcnQpOyB9CiAgZGVxdWUoc2l6ZV90eXBlIF9fbiwgY29uc3Qg
dmFsdWVfdHlwZSYgX192YWx1ZSwKICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0g
YWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EsIF9fbikKICAgIHsgX01fZmlsbF9pbml0aWFs
aXplKF9fdmFsdWUpOyB9CgogIGV4cGxpY2l0CiAgZGVxdWUoc2l6ZV90eXBlIF9fbikKICA6IF9C
YXNlKGFsbG9jYXRvcl90eXBlKCksIF9fbikKICB7IF9NX2ZpbGxfaW5pdGlhbGl6ZSh2YWx1ZV90
eXBlKCkpOyB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIGRlcXVlKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgIGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShf
X2EpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0
b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9f
Zmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfSW50
ZWdlcj4KICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBf
SW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICBfTV9pbml0aWFsaXplX21hcChf
X24pOwogICAgICBfTV9maWxsX2luaXRpYWxpemUoX194KTsKICAgIH0KCiAgdGVtcGxhdGU8Y2xh
c3MgX0lucHV0SXRlcj4KICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6aXRlcmF0b3Jf
Y2F0ZWdvcnkgX0l0ZXJDYXRlZ29yeTsKICAgICAgX01fcmFuZ2VfaW5pdGlhbGl6ZShfX2ZpcnN0
LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CiAgICB9CgogIH5kZXF1ZSgpCiAgeyBfRGVzdHJv
eShfTV9zdGFydCwgX01fZmluaXNoKTsgfQoKICBkZXF1ZSYgb3BlcmF0b3I9IChjb25zdCBkZXF1
ZSYgX194KSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBzaXplKCk7CiAgICBpZiAoJl9f
eCAhPSB0aGlzKSB7CiAgICAgIGlmIChfX2xlbiA+PSBfX3guc2l6ZSgpKQogICAgICAgIGVyYXNl
KGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpLCBfTV9maW5pc2gpOwogICAg
ICBlbHNlIHsKICAgICAgICBjb25zdF9pdGVyYXRvciBfX21pZCA9IF9feC5iZWdpbigpICsgZGlm
ZmVyZW5jZV90eXBlKF9fbGVuKTsKICAgICAgICBjb3B5KF9feC5iZWdpbigpLCBfX21pZCwgX01f
c3RhcnQpOwogICAgICAgIGluc2VydChfTV9maW5pc2gsIF9fbWlkLCBfX3guZW5kKCkpOwogICAg
ICB9CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB2b2lkIHN3YXAoZGVxdWUmIF9feCkg
ewogICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2FwKF9N
X2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICBzdGQ6OnN3YXAoX01fbWFwLCBfX3guX01fbWFw
KTsKICAgIHN0ZDo6c3dhcChfTV9tYXBfc2l6ZSwgX194Ll9NX21hcF9zaXplKTsKICB9CgpwdWJs
aWM6CgoKCgoKICB2b2lkIF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYg
X192YWwpIHsKICAgIGlmIChfX24gPiBzaXplKCkpIHsKICAgICAgZmlsbChiZWdpbigpLCBlbmQo
KSwgX192YWwpOwogICAgICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX192YWwpOwogICAg
fQogICAgZWxzZSB7CiAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX24sIGVuZCgpKTsKICAgICAgZmls
bChiZWdpbigpLCBlbmQoKSwgX192YWwpOwogICAgfQogIH0KCiAgdm9pZAogIGFzc2lnbihzaXpl
X3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKQogIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3Zh
bCk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICBhc3Np
Z24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVn
cmFsIF9JbnRlZ3JhbDsKICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwg
X0ludGVncmFsKCkpOwogICAgfQoKcHJpdmF0ZToKCiAgdGVtcGxhdGU8Y2xhc3MgX0ludGVnZXI+
CiAgICB2b2lkCiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBf
X3ZhbCwgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfYXNzaWduKHN0YXRpY19jYXN0PHNpemVf
dHlwZT4oX19uKSwgc3RhdGljX2Nhc3Q8X1RwPihfX3ZhbCkpOyB9CgogIHRlbXBsYXRlPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46
Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyQ2F0ZWdvcnk7CiAgICAgIF9NX2Fzc2lnbl9hdXgoX19m
aXJzdCwgX19sYXN0LCBfSXRlckNhdGVnb3J5KCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl
cmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBf
TV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICBz
aXplX3R5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgaWYgKF9fbGVu
ID4gc2l6ZSgpKSB7CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAg
ICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdp
bigpKTsKICAgICAgaW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsKICAgIH0KICAgIGVsc2UK
ICAgICAgZXJhc2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7CiAgfQoK
cHVibGljOgoKICB2b2lkCiAgcHVzaF9iYWNrKGNvbnN0IHZhbHVlX3R5cGUmIF9fdCkKICB7CiAg
ICBpZiAoX01fZmluaXNoLl9NX2N1ciAhPSBfTV9maW5pc2guX01fbGFzdCAtIDEpIHsKICAgICAg
X0NvbnN0cnVjdChfTV9maW5pc2guX01fY3VyLCBfX3QpOwogICAgICArK19NX2ZpbmlzaC5fTV9j
dXI7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX3B1c2hfYmFja19hdXgoX190KTsKICB9CgogIHZv
aWQKICBwdXNoX2JhY2soKQogIHsKICAgIGlmIChfTV9maW5pc2guX01fY3VyICE9IF9NX2Zpbmlz
aC5fTV9sYXN0IC0gMSkgewogICAgICBfQ29uc3RydWN0KF9NX2ZpbmlzaC5fTV9jdXIpOwogICAg
ICArK19NX2ZpbmlzaC5fTV9jdXI7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX3B1c2hfYmFja19h
dXgoKTsKICB9CgogIHZvaWQKICBwdXNoX2Zyb250KGNvbnN0IHZhbHVlX3R5cGUmIF9fdCkKICB7
CiAgICBpZiAoX01fc3RhcnQuX01fY3VyICE9IF9NX3N0YXJ0Ll9NX2ZpcnN0KSB7CiAgICAgIF9D
b25zdHJ1Y3QoX01fc3RhcnQuX01fY3VyIC0gMSwgX190KTsKICAgICAgLS1fTV9zdGFydC5fTV9j
dXI7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX3B1c2hfZnJvbnRfYXV4KF9fdCk7CiAgfQoKICB2
b2lkCiAgcHVzaF9mcm9udCgpCiAgewogICAgaWYgKF9NX3N0YXJ0Ll9NX2N1ciAhPSBfTV9zdGFy
dC5fTV9maXJzdCkgewogICAgICBfQ29uc3RydWN0KF9NX3N0YXJ0Ll9NX2N1ciAtIDEpOwogICAg
ICAtLV9NX3N0YXJ0Ll9NX2N1cjsKICAgIH0KICAgIGVsc2UKICAgICAgX01fcHVzaF9mcm9udF9h
dXgoKTsKICB9CgoKICB2b2lkCiAgcG9wX2JhY2soKQogIHsKICAgIGlmIChfTV9maW5pc2guX01f
Y3VyICE9IF9NX2ZpbmlzaC5fTV9maXJzdCkgewogICAgICAtLV9NX2ZpbmlzaC5fTV9jdXI7CiAg
ICAgIF9EZXN0cm95KF9NX2ZpbmlzaC5fTV9jdXIpOwogICAgfQogICAgZWxzZQogICAgICBfTV9w
b3BfYmFja19hdXgoKTsKICB9CgogIHZvaWQKICBwb3BfZnJvbnQoKQogIHsKICAgIGlmIChfTV9z
dGFydC5fTV9jdXIgIT0gX01fc3RhcnQuX01fbGFzdCAtIDEpIHsKICAgICAgX0Rlc3Ryb3koX01f
c3RhcnQuX01fY3VyKTsKICAgICAgKytfTV9zdGFydC5fTV9jdXI7CiAgICB9CiAgICBlbHNlCiAg
ICAgIF9NX3BvcF9mcm9udF9hdXgoKTsKICB9CgpwdWJsaWM6CgogIGl0ZXJhdG9yCiAgaW5zZXJ0
KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgewogICAgaWYgKHBv
c2l0aW9uLl9NX2N1ciA9PSBfTV9zdGFydC5fTV9jdXIpIHsKICAgICAgcHVzaF9mcm9udChfX3gp
OwogICAgICByZXR1cm4gX01fc3RhcnQ7CiAgICB9CiAgICBlbHNlIGlmIChwb3NpdGlvbi5fTV9j
dXIgPT0gX01fZmluaXNoLl9NX2N1cikgewogICAgICBwdXNoX2JhY2soX194KTsKICAgICAgaXRl
cmF0b3IgX190bXAgPSBfTV9maW5pc2g7CiAgICAgIC0tX190bXA7CiAgICAgIHJldHVybiBfX3Rt
cDsKICAgIH0KICAgIGVsc2UgewogICAgICByZXR1cm4gX01faW5zZXJ0X2F1eChwb3NpdGlvbiwg
X194KTsKICAgIH0KICB9CgogIGl0ZXJhdG9yCiAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24p
CiAgeyByZXR1cm4gaW5zZXJ0KF9fcG9zaXRpb24sIHZhbHVlX3R5cGUoKSk7IH0KCiAgdm9pZAog
IGluc2VydChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYg
X194KQogIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsgfQoKICB2b2lkCiAgX01f
ZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5
cGUmIF9feCk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQKICAg
IGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9J
bnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5zZXJ0X2Rpc3Bh
dGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgdGVtcGxh
dGU8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkCiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0
b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LCBfX3RydWVfdHlwZSkKICAgIHsg
X01fZmlsbF9pbnNlcnQoX19wb3MsIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19uKSwgc3RhdGlj
X2Nhc3Q8dmFsdWVfdHlwZT4oX194KSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgICB2b2lkCiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRv
cl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OwogICAgICBpbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9f
bGFzdCwgX0l0ZXJDYXRlZ29yeSgpKTsKICAgIH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9f
bmV3X3NpemUsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgY29uc3Qgc2l6ZV90eXBlIF9f
bGVuID0gc2l6ZSgpOwogICAgaWYgKF9fbmV3X3NpemUgPCBfX2xlbikKICAgICAgZXJhc2UoX01f
c3RhcnQgKyBfX25ld19zaXplLCBfTV9maW5pc2gpOwogICAgZWxzZQogICAgICBpbnNlcnQoX01f
ZmluaXNoLCBfX25ld19zaXplIC0gX19sZW4sIF9feCk7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXpl
X3R5cGUgbmV3X3NpemUpIHsgcmVzaXplKG5ld19zaXplLCB2YWx1ZV90eXBlKCkpOyB9CgpwdWJs
aWM6CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3MpIHsKICAgIGl0ZXJhdG9yIF9fbmV4
dCA9IF9fcG9zOwogICAgKytfX25leHQ7CiAgICBzaXplX3R5cGUgX19pbmRleCA9IF9fcG9zIC0g
X01fc3RhcnQ7CiAgICBpZiAoX19pbmRleCA8IChzaXplKCkgPj4gMSkpIHsKICAgICAgY29weV9i
YWNrd2FyZChfTV9zdGFydCwgX19wb3MsIF9fbmV4dCk7CiAgICAgIHBvcF9mcm9udCgpOwogICAg
fQogICAgZWxzZSB7CiAgICAgIGNvcHkoX19uZXh0LCBfTV9maW5pc2gsIF9fcG9zKTsKICAgICAg
cG9wX2JhY2soKTsKICAgIH0KICAgIHJldHVybiBfTV9zdGFydCArIF9faW5kZXg7CiAgfQoKICBp
dGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwogIHZvaWQg
Y2xlYXIoKTsKCnByb3RlY3RlZDoKCiAgdm9pZCBfTV9maWxsX2luaXRpYWxpemUoY29uc3QgdmFs
dWVfdHlwZSYgX192YWx1ZSk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2
b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp
OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2lu
aXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKcHJvdGVj
dGVkOgoKICB2b2lkIF9NX3B1c2hfYmFja19hdXgoY29uc3QgdmFsdWVfdHlwZSYpOwogIHZvaWQg
X01fcHVzaF9iYWNrX2F1eCgpOwogIHZvaWQgX01fcHVzaF9mcm9udF9hdXgoY29uc3QgdmFsdWVf
dHlwZSYpOwogIHZvaWQgX01fcHVzaF9mcm9udF9hdXgoKTsKICB2b2lkIF9NX3BvcF9iYWNrX2F1
eCgpOwogIHZvaWQgX01fcG9wX2Zyb250X2F1eCgpOwoKcHJvdGVjdGVkOgoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBp
bnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4K
ICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJh
dG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIGZvcndh
cmRfaXRlcmF0b3JfdGFnKTsKCiAgaXRlcmF0b3IgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bv
cywgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKICBpdGVyYXRvciBfTV9pbnNlcnRfYXV4KGl0ZXJh
dG9yIF9fcG9zKTsKICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlw
ZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3BvcywKICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbik7CgogIGl0ZXJhdG9yIF9N
X3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQoc2l6ZV90eXBlIF9fbikgewogICAgc2l6ZV90eXBl
IF9fdmFjYW5jaWVzID0gX01fc3RhcnQuX01fY3VyIC0gX01fc3RhcnQuX01fZmlyc3Q7CiAgICBp
ZiAoX19uID4gX192YWNhbmNpZXMpCiAgICAgIF9NX25ld19lbGVtZW50c19hdF9mcm9udChfX24g
LSBfX3ZhY2FuY2llcyk7CiAgICByZXR1cm4gX01fc3RhcnQgLSBkaWZmZXJlbmNlX3R5cGUoX19u
KTsKICB9CgogIGl0ZXJhdG9yIF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfYmFjayhzaXplX3R5cGUg
X19uKSB7CiAgICBzaXplX3R5cGUgX192YWNhbmNpZXMgPSAoX01fZmluaXNoLl9NX2xhc3QgLSBf
TV9maW5pc2guX01fY3VyKSAtIDE7CiAgICBpZiAoX19uID4gX192YWNhbmNpZXMpCiAgICAgIF9N
X25ld19lbGVtZW50c19hdF9iYWNrKF9fbiAtIF9fdmFjYW5jaWVzKTsKICAgIHJldHVybiBfTV9m
aW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICB9CgogIHZvaWQgX01fbmV3X2VsZW1lbnRz
X2F0X2Zyb250KHNpemVfdHlwZSBfX25ld19lbGVtZW50cyk7CiAgdm9pZCBfTV9uZXdfZWxlbWVu
dHNfYXRfYmFjayhzaXplX3R5cGUgX19uZXdfZWxlbWVudHMpOwoKcHJvdGVjdGVkOgoKCgoKCiAg
dm9pZCBfTV9yZXNlcnZlX21hcF9hdF9iYWNrIChzaXplX3R5cGUgX19ub2Rlc190b19hZGQgPSAx
KSB7CiAgICBpZiAoX19ub2Rlc190b19hZGQgKyAxID4gX01fbWFwX3NpemUgLSAoX01fZmluaXNo
Ll9NX25vZGUgLSBfTV9tYXApKQogICAgICBfTV9yZWFsbG9jYXRlX21hcChfX25vZGVzX3RvX2Fk
ZCwgZmFsc2UpOwogIH0KCiAgdm9pZCBfTV9yZXNlcnZlX21hcF9hdF9mcm9udCAoc2l6ZV90eXBl
IF9fbm9kZXNfdG9fYWRkID0gMSkgewogICAgaWYgKF9fbm9kZXNfdG9fYWRkID4gc2l6ZV90eXBl
KF9NX3N0YXJ0Ll9NX25vZGUgLSBfTV9tYXApKQogICAgICBfTV9yZWFsbG9jYXRlX21hcChfX25v
ZGVzX3RvX2FkZCwgdHJ1ZSk7CiAgfQoKICB2b2lkIF9NX3JlYWxsb2NhdGVfbWFwKHNpemVfdHlw
ZSBfX25vZGVzX3RvX2FkZCwgYm9vbCBfX2FkZF9hdF9mcm9udCk7Cn07CgoKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQg
ZGVxdWU8X1RwLCBfQWxsb2M+CiAgOjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGl0ZXJhdG9yIF9fY3Vy
ID0gYmVnaW4oKTsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgp
OyArK19fY3VyLCArK19fZmlyc3QpCiAgICAqX19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpCiAgICBlcmFzZShfX2N1ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChl
bmQoKSwgX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jPgp2b2lkIGRlcXVlPF9UcCwgX0FsbG9jPjo6X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19w
b3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19u
LCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCnsKICBpZiAoX19wb3MuX01fY3VyID09IF9NX3N0YXJ0
Ll9NX2N1cikgewogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQgPSBfTV9yZXNlcnZlX2VsZW1lbnRz
X2F0X2Zyb250KF9fbik7CiAgICB0cnkgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19uZXdf
c3RhcnQsIF9NX3N0YXJ0LCBfX3gpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAg
fQogICAgY2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgX01fZGVzdHJveV9ub2RlcyhfX25ld19z
dGFydC5fTV9ub2RlLCBfTV9zdGFydC5fTV9ub2RlKTsKICAgICAgICB0aHJvdzsKICAgICAgfQog
IH0KICBlbHNlIGlmIChfX3Bvcy5fTV9jdXIgPT0gX01fZmluaXNoLl9NX2N1cikgewogICAgaXRl
cmF0b3IgX19uZXdfZmluaXNoID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9iYWNrKF9fbik7CiAg
ICB0cnkgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX01fZmluaXNoLCBfX25ld19maW5pc2gs
IF9feCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIH0KICAgIGNhdGNoKC4u
LikKICAgICAgewogICAgICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX01fZmluaXNoLl9NX25vZGUgKyAx
LCBfX25ld19maW5pc2guX01fbm9kZSArIDEpOwogICAgICAgIHRocm93OwogICAgICB9CiAgfQog
IGVsc2UKICAgIF9NX2luc2VydF9hdXgoX19wb3MsIF9fbiwgX194KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBkZXF1ZTxfVHAsX0FsbG9jPjo6aXRlcmF0
b3IKZGVxdWU8X1RwLF9BbGxvYz46OmVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9f
bGFzdCkKewogIGlmIChfX2ZpcnN0ID09IF9NX3N0YXJ0ICYmIF9fbGFzdCA9PSBfTV9maW5pc2gp
IHsKICAgIGNsZWFyKCk7CiAgICByZXR1cm4gX01fZmluaXNoOwogIH0KICBlbHNlIHsKICAgIGRp
ZmZlcmVuY2VfdHlwZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgZGlmZmVyZW5jZV90eXBl
IF9fZWxlbXNfYmVmb3JlID0gX19maXJzdCAtIF9NX3N0YXJ0OwogICAgaWYgKHN0YXRpY19jYXN0
PHNpemVfdHlwZT4oX19lbGVtc19iZWZvcmUpIDwgKHNpemUoKSAtIF9fbikgLyAyKSB7CiAgICAg
IGNvcHlfYmFja3dhcmQoX01fc3RhcnQsIF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGl0ZXJhdG9y
IF9fbmV3X3N0YXJ0ID0gX01fc3RhcnQgKyBfX247CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBf
X25ld19zdGFydCk7CiAgICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX01fc3RhcnQuX01fbm9kZSwgX19u
ZXdfc3RhcnQuX01fbm9kZSk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICB9CiAg
ICBlbHNlIHsKICAgICAgY29weShfX2xhc3QsIF9NX2ZpbmlzaCwgX19maXJzdCk7CiAgICAgIGl0
ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX2ZpbmlzaCAtIF9fbjsKICAgICAgX0Rlc3Ryb3koX19u
ZXdfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICBfTV9kZXN0cm95X25vZGVzKF9fbmV3X2Zpbmlz
aC5fTV9ub2RlICsgMSwgX01fZmluaXNoLl9NX25vZGUgKyAxKTsKICAgICAgX01fZmluaXNoID0g
X19uZXdfZmluaXNoOwogICAgfQogICAgcmV0dXJuIF9NX3N0YXJ0ICsgX19lbGVtc19iZWZvcmU7
CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8X1Rw
LF9BbGxvYz46OmNsZWFyKCkKewogIGZvciAoX01hcF9wb2ludGVyIF9fbm9kZSA9IF9NX3N0YXJ0
Ll9NX25vZGUgKyAxOwogICAgICAgX19ub2RlIDwgX01fZmluaXNoLl9NX25vZGU7CiAgICAgICAr
K19fbm9kZSkgewogICAgX0Rlc3Ryb3koKl9fbm9kZSwgKl9fbm9kZSArIF9TX2J1ZmZlcl9zaXpl
KCkpOwogICAgX01fZGVhbGxvY2F0ZV9ub2RlKCpfX25vZGUpOwogIH0KCiAgaWYgKF9NX3N0YXJ0
Ll9NX25vZGUgIT0gX01fZmluaXNoLl9NX25vZGUpIHsKICAgIF9EZXN0cm95KF9NX3N0YXJ0Ll9N
X2N1ciwgX01fc3RhcnQuX01fbGFzdCk7CiAgICBfRGVzdHJveShfTV9maW5pc2guX01fZmlyc3Qs
IF9NX2ZpbmlzaC5fTV9jdXIpOwogICAgX01fZGVhbGxvY2F0ZV9ub2RlKF9NX2ZpbmlzaC5fTV9m
aXJzdCk7CiAgfQogIGVsc2UKICAgIF9EZXN0cm95KF9NX3N0YXJ0Ll9NX2N1ciwgX01fZmluaXNo
Ll9NX2N1cik7CgogIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0Owp9CiMgMTA1NyAiL3Vzci9pbmNsdWRl
L2crKy9iaXRzL3N0bF9kZXF1ZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fZmlsbF9pbml0aWFsaXplKGNvbnN0IHZhbHVl
X3R5cGUmIF9fdmFsdWUpCnsKICBfTWFwX3BvaW50ZXIgX19jdXI7CiAgdHJ5IHsKICAgIGZvciAo
X19jdXIgPSBfTV9zdGFydC5fTV9ub2RlOyBfX2N1ciA8IF9NX2ZpbmlzaC5fTV9ub2RlOyArK19f
Y3VyKQogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoKl9fY3VyLCAqX19jdXIgKyBfU19idWZmZXJf
c2l6ZSgpLCBfX3ZhbHVlKTsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfTV9maW5pc2guX01fZmly
c3QsIF9NX2ZpbmlzaC5fTV9jdXIsIF9fdmFsdWUpOwogIH0KICBjYXRjaCguLi4pCiAgICB7CiAg
ICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBpdGVyYXRvcigqX19jdXIsIF9fY3VyKSk7CiAgICAgIHRo
cm93OwogICAgfQp9CiMgMTA4NSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9kZXF1ZS5oIiAz
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9yYW5nZV9pbml0aWFsaXplKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIF9NX2luaXRpYWxpemVf
bWFwKDApOwogIHRyeSB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp
CiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgfQogIGNhdGNoKC4uLikKICAgIHsKICAgICAg
Y2xlYXIoKTsKICAgICAgdGhyb3c7CiAgICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQgZGVxdWU8X1Rw
LF9BbGxvYz46Ol9NX3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0
b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgX01faW5pdGlhbGl6ZV9tYXAoX19uKTsKCiAgX01hcF9wb2ludGVyIF9fY3Vy
X25vZGU7CiAgdHJ5IHsKICAgIGZvciAoX19jdXJfbm9kZSA9IF9NX3N0YXJ0Ll9NX25vZGU7CiAg
ICAgICAgIF9fY3VyX25vZGUgPCBfTV9maW5pc2guX01fbm9kZTsKICAgICAgICAgKytfX2N1cl9u
b2RlKSB7CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICBhZHZh
bmNlKF9fbWlkLCBfU19idWZmZXJfc2l6ZSgpKTsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9f
Zmlyc3QsIF9fbWlkLCAqX19jdXJfbm9kZSk7CiAgICAgIF9fZmlyc3QgPSBfX21pZDsKICAgIH0K
ICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX2ZpbmlzaC5fTV9maXJz
dCk7CiAgfQogIGNhdGNoKC4uLikKICAgIHsKICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIGl0ZXJh
dG9yKCpfX2N1cl9ub2RlLCBfX2N1cl9ub2RlKSk7CiAgICAgIHRocm93OwogICAgfQp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZApkZXF1ZTxfVHAsX0FsbG9jPjo6
X01fcHVzaF9iYWNrX2F1eChjb25zdCB2YWx1ZV90eXBlJiBfX3QpCnsKICB2YWx1ZV90eXBlIF9f
dF9jb3B5ID0gX190OwogIF9NX3Jlc2VydmVfbWFwX2F0X2JhY2soKTsKICAqKF9NX2ZpbmlzaC5f
TV9ub2RlICsgMSkgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgdHJ5IHsKICAgIF9Db25zdHJ1Y3Qo
X01fZmluaXNoLl9NX2N1ciwgX190X2NvcHkpOwogICAgX01fZmluaXNoLl9NX3NldF9ub2RlKF9N
X2ZpbmlzaC5fTV9ub2RlICsgMSk7CiAgICBfTV9maW5pc2guX01fY3VyID0gX01fZmluaXNoLl9N
X2ZpcnN0OwogIH0KICBjYXRjaCguLi4pCiAgICB7CiAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZSgq
KF9NX2ZpbmlzaC5fTV9ub2RlICsgMSkpOwogICAgICB0aHJvdzsKICAgIH0KfQoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZApkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcHVz
aF9iYWNrX2F1eCgpCnsKICBfTV9yZXNlcnZlX21hcF9hdF9iYWNrKCk7CiAgKihfTV9maW5pc2gu
X01fbm9kZSArIDEpID0gX01fYWxsb2NhdGVfbm9kZSgpOwogIHRyeSB7CiAgICBfQ29uc3RydWN0
KF9NX2ZpbmlzaC5fTV9jdXIpOwogICAgX01fZmluaXNoLl9NX3NldF9ub2RlKF9NX2ZpbmlzaC5f
TV9ub2RlICsgMSk7CiAgICBfTV9maW5pc2guX01fY3VyID0gX01fZmluaXNoLl9NX2ZpcnN0Owog
IH0KICBjYXRjaCguLi4pCiAgICB7CiAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZSgqKF9NX2Zpbmlz
aC5fTV9ub2RlICsgMSkpOwogICAgICB0aHJvdzsKICAgIH0KfQoKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4Kdm9pZApkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcHVzaF9mcm9udF9h
dXgoY29uc3QgdmFsdWVfdHlwZSYgX190KQp7CiAgdmFsdWVfdHlwZSBfX3RfY29weSA9IF9fdDsK
ICBfTV9yZXNlcnZlX21hcF9hdF9mcm9udCgpOwogICooX01fc3RhcnQuX01fbm9kZSAtIDEpID0g
X01fYWxsb2NhdGVfbm9kZSgpOwogIHRyeSB7CiAgICBfTV9zdGFydC5fTV9zZXRfbm9kZShfTV9z
dGFydC5fTV9ub2RlIC0gMSk7CiAgICBfTV9zdGFydC5fTV9jdXIgPSBfTV9zdGFydC5fTV9sYXN0
IC0gMTsKICAgIF9Db25zdHJ1Y3QoX01fc3RhcnQuX01fY3VyLCBfX3RfY29weSk7CiAgfQogIGNh
dGNoKC4uLikKICAgIHsKICAgICAgKytfTV9zdGFydDsKICAgICAgX01fZGVhbGxvY2F0ZV9ub2Rl
KCooX01fc3RhcnQuX01fbm9kZSAtIDEpKTsKICAgICAgdGhyb3c7CiAgICB9Cn0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQKZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3B1
c2hfZnJvbnRfYXV4KCkKewogIF9NX3Jlc2VydmVfbWFwX2F0X2Zyb250KCk7CiAgKihfTV9zdGFy
dC5fTV9ub2RlIC0gMSkgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgdHJ5IHsKICAgIF9NX3N0YXJ0
Ll9NX3NldF9ub2RlKF9NX3N0YXJ0Ll9NX25vZGUgLSAxKTsKICAgIF9NX3N0YXJ0Ll9NX2N1ciA9
IF9NX3N0YXJ0Ll9NX2xhc3QgLSAxOwogICAgX0NvbnN0cnVjdChfTV9zdGFydC5fTV9jdXIpOwog
IH0KICBjYXRjaCguLi4pCiAgICB7CiAgICAgICsrX01fc3RhcnQ7CiAgICAgIF9NX2RlYWxsb2Nh
dGVfbm9kZSgqKF9NX3N0YXJ0Ll9NX25vZGUgLSAxKSk7CiAgICAgIHRocm93OwogICAgfQp9CgoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+
OjpfTV9wb3BfYmFja19hdXgoKQp7CiAgX01fZGVhbGxvY2F0ZV9ub2RlKF9NX2ZpbmlzaC5fTV9m
aXJzdCk7CiAgX01fZmluaXNoLl9NX3NldF9ub2RlKF9NX2ZpbmlzaC5fTV9ub2RlIC0gMSk7CiAg
X01fZmluaXNoLl9NX2N1ciA9IF9NX2ZpbmlzaC5fTV9sYXN0IC0gMTsKICBfRGVzdHJveShfTV9m
aW5pc2guX01fY3VyKTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
dm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcG9wX2Zyb250X2F1eCgpCnsKICBfRGVzdHJveShf
TV9zdGFydC5fTV9jdXIpOwogIF9NX2RlYWxsb2NhdGVfbm9kZShfTV9zdGFydC5fTV9maXJzdCk7
CiAgX01fc3RhcnQuX01fc2V0X25vZGUoX01fc3RhcnQuX01fbm9kZSArIDEpOwogIF9NX3N0YXJ0
Ll9NX2N1ciA9IF9NX3N0YXJ0Ll9NX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4Kdm9pZCBkZXF1ZTxfVHAs
X0FsbG9jPjo6aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgY29weShf
X2ZpcnN0LCBfX2xhc3QsIGluc2VydGVyKCp0aGlzLCBfX3BvcykpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2
b2lkCmRlcXVlPF9UcCxfQWxsb2M+OjppbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykg
ewogIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX3Bv
cy5fTV9jdXIgPT0gX01fc3RhcnQuX01fY3VyKSB7CiAgICBpdGVyYXRvciBfX25ld19zdGFydCA9
IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQoX19uKTsKICAgIHRyeSB7CiAgICAgIHVuaW5p
dGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3X3N0YXJ0KTsKICAgICAgX01fc3Rh
cnQgPSBfX25ld19zdGFydDsKICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9N
X2Rlc3Ryb3lfbm9kZXMoX19uZXdfc3RhcnQuX01fbm9kZSwgX01fc3RhcnQuX01fbm9kZSk7CiAg
ICAgICAgdGhyb3c7CiAgICAgIH0KICB9CiAgZWxzZSBpZiAoX19wb3MuX01fY3VyID09IF9NX2Zp
bmlzaC5fTV9jdXIpIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVfZWxl
bWVudHNfYXRfYmFjayhfX24pOwogICAgdHJ5IHsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX01fZmluaXNoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNo
OwogICAgfQogICAgY2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgX01fZGVzdHJveV9ub2Rlcyhf
TV9maW5pc2guX01fbm9kZSArIDEsIF9fbmV3X2ZpbmlzaC5fTV9ub2RlICsgMSk7CiAgICAgICAg
dGhyb3c7CiAgICAgIH0KICB9CiAgZWxzZQogICAgX01faW5zZXJ0X2F1eChfX3BvcywgX19maXJz
dCwgX19sYXN0LCBfX24pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnR5
cGVuYW1lIGRlcXVlPF9UcCwgX0FsbG9jPjo6aXRlcmF0b3IKZGVxdWU8X1RwLF9BbGxvYz46Ol9N
X2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKewogIGRp
ZmZlcmVuY2VfdHlwZSBfX2luZGV4ID0gX19wb3MgLSBfTV9zdGFydDsKICB2YWx1ZV90eXBlIF9f
eF9jb3B5ID0gX194OwogIGlmIChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9faW5kZXgpIDwgc2l6
ZSgpIC8gMikgewogICAgcHVzaF9mcm9udChmcm9udCgpKTsKICAgIGl0ZXJhdG9yIF9fZnJvbnQx
ID0gX01fc3RhcnQ7CiAgICArK19fZnJvbnQxOwogICAgaXRlcmF0b3IgX19mcm9udDIgPSBfX2Zy
b250MTsKICAgICsrX19mcm9udDI7CiAgICBfX3BvcyA9IF9NX3N0YXJ0ICsgX19pbmRleDsKICAg
IGl0ZXJhdG9yIF9fcG9zMSA9IF9fcG9zOwogICAgKytfX3BvczE7CiAgICBjb3B5KF9fZnJvbnQy
LCBfX3BvczEsIF9fZnJvbnQxKTsKICB9CiAgZWxzZSB7CiAgICBwdXNoX2JhY2soYmFjaygpKTsK
ICAgIGl0ZXJhdG9yIF9fYmFjazEgPSBfTV9maW5pc2g7CiAgICAtLV9fYmFjazE7CiAgICBpdGVy
YXRvciBfX2JhY2syID0gX19iYWNrMTsKICAgIC0tX19iYWNrMjsKICAgIF9fcG9zID0gX01fc3Rh
cnQgKyBfX2luZGV4OwogICAgY29weV9iYWNrd2FyZChfX3BvcywgX19iYWNrMiwgX19iYWNrMSk7
CiAgfQogICpfX3BvcyA9IF9feF9jb3B5OwogIHJldHVybiBfX3BvczsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBkZXF1ZTxfVHAsX0FsbG9jPjo6aXRlcmF0
b3IKZGVxdWU8X1RwLF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MpCnsKICBk
aWZmZXJlbmNlX3R5cGUgX19pbmRleCA9IF9fcG9zIC0gX01fc3RhcnQ7CiAgaWYgKHN0YXRpY19j
YXN0PHNpemVfdHlwZT4oX19pbmRleCkgPCBzaXplKCkgLyAyKSB7CiAgICBwdXNoX2Zyb250KGZy
b250KCkpOwogICAgaXRlcmF0b3IgX19mcm9udDEgPSBfTV9zdGFydDsKICAgICsrX19mcm9udDE7
CiAgICBpdGVyYXRvciBfX2Zyb250MiA9IF9fZnJvbnQxOwogICAgKytfX2Zyb250MjsKICAgIF9f
cG9zID0gX01fc3RhcnQgKyBfX2luZGV4OwogICAgaXRlcmF0b3IgX19wb3MxID0gX19wb3M7CiAg
ICArK19fcG9zMTsKICAgIGNvcHkoX19mcm9udDIsIF9fcG9zMSwgX19mcm9udDEpOwogIH0KICBl
bHNlIHsKICAgIHB1c2hfYmFjayhiYWNrKCkpOwogICAgaXRlcmF0b3IgX19iYWNrMSA9IF9NX2Zp
bmlzaDsKICAgIC0tX19iYWNrMTsKICAgIGl0ZXJhdG9yIF9fYmFjazIgPSBfX2JhY2sxOwogICAg
LS1fX2JhY2syOwogICAgX19wb3MgPSBfTV9zdGFydCArIF9faW5kZXg7CiAgICBjb3B5X2JhY2t3
YXJkKF9fcG9zLCBfX2JhY2syLCBfX2JhY2sxKTsKICB9CiAgKl9fcG9zID0gdmFsdWVfdHlwZSgp
OwogIHJldHVybiBfX3BvczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2
b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVfdHlwZSYgX194KQp7CiAg
Y29uc3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNfYmVmb3JlID0gX19wb3MgLSBfTV9zdGFydDsK
ICBzaXplX3R5cGUgX19sZW5ndGggPSB0aGlzLT5zaXplKCk7CiAgdmFsdWVfdHlwZSBfX3hfY29w
eSA9IF9feDsKICBpZiAoX19lbGVtc19iZWZvcmUgPCBkaWZmZXJlbmNlX3R5cGUoX19sZW5ndGgg
LyAyKSkgewogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQgPSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0
X2Zyb250KF9fbik7CiAgICBpdGVyYXRvciBfX29sZF9zdGFydCA9IF9NX3N0YXJ0OwogICAgX19w
b3MgPSBfTV9zdGFydCArIF9fZWxlbXNfYmVmb3JlOwogICAgdHJ5IHsKICAgICAgaWYgKF9fZWxl
bXNfYmVmb3JlID49IGRpZmZlcmVuY2VfdHlwZShfX24pKSB7CiAgICAgICAgaXRlcmF0b3IgX19z
dGFydF9uID0gX01fc3RhcnQgKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgICB1bmluaXRp
YWxpemVkX2NvcHkoX01fc3RhcnQsIF9fc3RhcnRfbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9N
X3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgICAgY29weShfX3N0YXJ0X24sIF9fcG9zLCBfX29s
ZF9zdGFydCk7CiAgICAgICAgZmlsbChfX3BvcyAtIGRpZmZlcmVuY2VfdHlwZShfX24pLCBfX3Bv
cywgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fdW5pbml0aWFsaXpl
ZF9jb3B5X2ZpbGwoX01fc3RhcnQsIF9fcG9zLCBfX25ld19zdGFydCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9NX3N0YXJ0LCBfX3hfY29weSk7CiAgICAgICAgX01fc3RhcnQg
PSBfX25ld19zdGFydDsKICAgICAgICBmaWxsKF9fb2xkX3N0YXJ0LCBfX3BvcywgX194X2NvcHkp
OwogICAgICB9CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBfTV9kZXN0cm95
X25vZGVzKF9fbmV3X3N0YXJ0Ll9NX25vZGUsIF9NX3N0YXJ0Ll9NX25vZGUpOwogICAgICAgIHRo
cm93OwogICAgICB9CiAgfQogIGVsc2UgewogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX01f
cmVzZXJ2ZV9lbGVtZW50c19hdF9iYWNrKF9fbik7CiAgICBpdGVyYXRvciBfX29sZF9maW5pc2gg
PSBfTV9maW5pc2g7CiAgICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19lbGVtc19hZnRlciA9CiAg
ICAgIGRpZmZlcmVuY2VfdHlwZShfX2xlbmd0aCkgLSBfX2VsZW1zX2JlZm9yZTsKICAgIF9fcG9z
ID0gX01fZmluaXNoIC0gX19lbGVtc19hZnRlcjsKICAgIHRyeSB7CiAgICAgIGlmIChfX2VsZW1z
X2FmdGVyID4gZGlmZmVyZW5jZV90eXBlKF9fbikpIHsKICAgICAgICBpdGVyYXRvciBfX2Zpbmlz
aF9uID0gX01fZmluaXNoIC0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgdW5pbml0aWFs
aXplZF9jb3B5KF9fZmluaXNoX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9m
aW5pc2ggPSBfX25ld19maW5pc2g7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3BvcywgX19maW5p
c2hfbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBmaWxsKF9fcG9zLCBfX3BvcyArIGRpZmZlcmVu
Y2VfdHlwZShfX24pLCBfX3hfY29weSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX191
bmluaXRpYWxpemVkX2ZpbGxfY29weShfTV9maW5pc2gsIF9fcG9zICsgZGlmZmVyZW5jZV90eXBl
KF9fbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3hfY29weSwgX19wb3Ms
IF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgICAgIGZp
bGwoX19wb3MsIF9fb2xkX2ZpbmlzaCwgX194X2NvcHkpOwogICAgICB9CiAgICB9CiAgICBjYXRj
aCguLi4pCiAgICAgIHsKICAgICAgICBfTV9kZXN0cm95X25vZGVzKF9NX2ZpbmlzaC5fTV9ub2Rl
ICsgMSwgX19uZXdfZmluaXNoLl9NX25vZGUgKyAxKTsKICAgICAgICB0aHJvdzsKICAgICAgfQog
IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyYXRvcj4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01faW5zZXJ0X2F1eChp
dGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90eXBlIF9fbikKewogIGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2VsZW1z
YmVmb3JlID0gX19wb3MgLSBfTV9zdGFydDsKICBzaXplX3R5cGUgX19sZW5ndGggPSBzaXplKCk7
CiAgaWYgKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19lbGVtc2JlZm9yZSkgPCBfX2xlbmd0aCAv
IDIpIHsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9m
cm9udChfX24pOwogICAgaXRlcmF0b3IgX19vbGRfc3RhcnQgPSBfTV9zdGFydDsKICAgIF9fcG9z
ID0gX01fc3RhcnQgKyBfX2VsZW1zYmVmb3JlOwogICAgdHJ5IHsKICAgICAgaWYgKF9fZWxlbXNi
ZWZvcmUgPj0gZGlmZmVyZW5jZV90eXBlKF9fbikpIHsKICAgICAgICBpdGVyYXRvciBfX3N0YXJ0
X24gPSBfTV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIHVuaW5pdGlhbGl6
ZWRfY29weShfTV9zdGFydCwgX19zdGFydF9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX01fc3Rh
cnQgPSBfX25ld19zdGFydDsKICAgICAgICBjb3B5KF9fc3RhcnRfbiwgX19wb3MsIF9fb2xkX3N0
YXJ0KTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3MgLSBkaWZmZXJlbmNlX3R5
cGUoX19uKSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBf
X21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgZGlmZmVyZW5jZV90eXBlKF9f
bikgLSBfX2VsZW1zYmVmb3JlKTsKICAgICAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9N
X3N0YXJ0LCBfX3BvcywgX19maXJzdCwgX19taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX25ld19zdGFydCk7CiAgICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAg
ICAgICBjb3B5KF9fbWlkLCBfX2xhc3QsIF9fb2xkX3N0YXJ0KTsKICAgICAgfQogICAgfQogICAg
Y2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgX01fZGVzdHJveV9ub2RlcyhfX25ld19zdGFydC5f
TV9ub2RlLCBfTV9zdGFydC5fTV9ub2RlKTsKICAgICAgICB0aHJvdzsKICAgICAgfQogIH0KICBl
bHNlIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRf
YmFjayhfX24pOwogICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNoOwogICAgY29u
c3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNhZnRlciA9CiAgICAgIGRpZmZlcmVuY2VfdHlwZShf
X2xlbmd0aCkgLSBfX2VsZW1zYmVmb3JlOwogICAgX19wb3MgPSBfTV9maW5pc2ggLSBfX2VsZW1z
YWZ0ZXI7CiAgICB0cnkgewogICAgICBpZiAoX19lbGVtc2FmdGVyID4gZGlmZmVyZW5jZV90eXBl
KF9fbikpIHsKICAgICAgICBpdGVyYXRvciBfX2ZpbmlzaF9uID0gX01fZmluaXNoIC0gZGlmZmVy
ZW5jZV90eXBlKF9fbik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fZmluaXNoX24sIF9N
X2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAg
ICAgICAgY29weV9iYWNrd2FyZChfX3BvcywgX19maW5pc2hfbiwgX19vbGRfZmluaXNoKTsKICAg
ICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3MpOwogICAgICB9CiAgICAgIGVsc2Ugewog
ICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2Uo
X19taWQsIF9fZWxlbXNhZnRlcik7CiAgICAgICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShf
X21pZCwgX19sYXN0LCBfX3BvcywgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2Zp
bmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfX3Bvcyk7
CiAgICAgIH0KICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9NX2Rlc3Ryb3lf
bm9kZXMoX01fZmluaXNoLl9NX25vZGUgKyAxLCBfX25ld19maW5pc2guX01fbm9kZSArIDEpOwog
ICAgICAgIHRocm93OwogICAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX25ld19lbGVtZW50c19hdF9mcm9udChz
aXplX3R5cGUgX19uZXdfZWxlbXMpCnsKICBzaXplX3R5cGUgX19uZXdfbm9kZXMKICAgICAgPSAo
X19uZXdfZWxlbXMgKyBfU19idWZmZXJfc2l6ZSgpIC0gMSkgLyBfU19idWZmZXJfc2l6ZSgpOwog
IF9NX3Jlc2VydmVfbWFwX2F0X2Zyb250KF9fbmV3X25vZGVzKTsKICBzaXplX3R5cGUgX19pOwog
IHRyeSB7CiAgICBmb3IgKF9faSA9IDE7IF9faSA8PSBfX25ld19ub2RlczsgKytfX2kpCiAgICAg
ICooX01fc3RhcnQuX01fbm9kZSAtIF9faSkgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgfQogIGNh
dGNoKC4uLikgewogICAgZm9yIChzaXplX3R5cGUgX19qID0gMTsgX19qIDwgX19pOyArK19faikK
ICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlKCooX01fc3RhcnQuX01fbm9kZSAtIF9faikpOwogICAg
dGhyb3c7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVx
dWU8X1RwLF9BbGxvYz46Ol9NX25ld19lbGVtZW50c19hdF9iYWNrKHNpemVfdHlwZSBfX25ld19l
bGVtcykKewogIHNpemVfdHlwZSBfX25ld19ub2RlcwogICAgICA9IChfX25ld19lbGVtcyArIF9T
X2J1ZmZlcl9zaXplKCkgLSAxKSAvIF9TX2J1ZmZlcl9zaXplKCk7CiAgX01fcmVzZXJ2ZV9tYXBf
YXRfYmFjayhfX25ld19ub2Rlcyk7CiAgc2l6ZV90eXBlIF9faTsKICB0cnkgewogICAgZm9yIChf
X2kgPSAxOyBfX2kgPD0gX19uZXdfbm9kZXM7ICsrX19pKQogICAgICAqKF9NX2ZpbmlzaC5fTV9u
b2RlICsgX19pKSA9IF9NX2FsbG9jYXRlX25vZGUoKTsKICB9CiAgY2F0Y2goLi4uKSB7CiAgICBm
b3IgKHNpemVfdHlwZSBfX2ogPSAxOyBfX2ogPCBfX2k7ICsrX19qKQogICAgICBfTV9kZWFsbG9j
YXRlX25vZGUoKihfTV9maW5pc2guX01fbm9kZSArIF9faikpOwogICAgdGhyb3c7CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46
Ol9NX3JlYWxsb2NhdGVfbWFwKHNpemVfdHlwZSBfX25vZGVzX3RvX2FkZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBfX2FkZF9hdF9mcm9udCkKewogIHNp
emVfdHlwZSBfX29sZF9udW1fbm9kZXMgPSBfTV9maW5pc2guX01fbm9kZSAtIF9NX3N0YXJ0Ll9N
X25vZGUgKyAxOwogIHNpemVfdHlwZSBfX25ld19udW1fbm9kZXMgPSBfX29sZF9udW1fbm9kZXMg
KyBfX25vZGVzX3RvX2FkZDsKCiAgX01hcF9wb2ludGVyIF9fbmV3X25zdGFydDsKICBpZiAoX01f
bWFwX3NpemUgPiAyICogX19uZXdfbnVtX25vZGVzKSB7CiAgICBfX25ld19uc3RhcnQgPSBfTV9t
YXAgKyAoX01fbWFwX3NpemUgLSBfX25ld19udW1fbm9kZXMpIC8gMgogICAgICAgICAgICAgICAg
ICAgICArIChfX2FkZF9hdF9mcm9udCA/IF9fbm9kZXNfdG9fYWRkIDogMCk7CiAgICBpZiAoX19u
ZXdfbnN0YXJ0IDwgX01fc3RhcnQuX01fbm9kZSkKICAgICAgY29weShfTV9zdGFydC5fTV9ub2Rl
LCBfTV9maW5pc2guX01fbm9kZSArIDEsIF9fbmV3X25zdGFydCk7CiAgICBlbHNlCiAgICAgIGNv
cHlfYmFja3dhcmQoX01fc3RhcnQuX01fbm9kZSwgX01fZmluaXNoLl9NX25vZGUgKyAxLAogICAg
ICAgICAgICAgICAgICAgIF9fbmV3X25zdGFydCArIF9fb2xkX251bV9ub2Rlcyk7CiAgfQogIGVs
c2UgewogICAgc2l6ZV90eXBlIF9fbmV3X21hcF9zaXplID0KICAgICAgX01fbWFwX3NpemUgKyBt
YXgoX01fbWFwX3NpemUsIF9fbm9kZXNfdG9fYWRkKSArIDI7CgogICAgX01hcF9wb2ludGVyIF9f
bmV3X21hcCA9IF9NX2FsbG9jYXRlX21hcChfX25ld19tYXBfc2l6ZSk7CiAgICBfX25ld19uc3Rh
cnQgPSBfX25ld19tYXAgKyAoX19uZXdfbWFwX3NpemUgLSBfX25ld19udW1fbm9kZXMpIC8gMgog
ICAgICAgICAgICAgICAgICAgICAgICAgKyAoX19hZGRfYXRfZnJvbnQgPyBfX25vZGVzX3RvX2Fk
ZCA6IDApOwogICAgY29weShfTV9zdGFydC5fTV9ub2RlLCBfTV9maW5pc2guX01fbm9kZSArIDEs
IF9fbmV3X25zdGFydCk7CiAgICBfTV9kZWFsbG9jYXRlX21hcChfTV9tYXAsIF9NX21hcF9zaXpl
KTsKCiAgICBfTV9tYXAgPSBfX25ld19tYXA7CiAgICBfTV9tYXBfc2l6ZSA9IF9fbmV3X21hcF9z
aXplOwogIH0KCiAgX01fc3RhcnQuX01fc2V0X25vZGUoX19uZXdfbnN0YXJ0KTsKICBfTV9maW5p
c2guX01fc2V0X25vZGUoX19uZXdfbnN0YXJ0ICsgX19vbGRfbnVtX25vZGVzIC0gMSk7Cn0KCgoK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guc2l6ZSgpID09IF9f
eS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJl
Z2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
IG9wZXJhdG9yPChjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIGxleGljb2dy
YXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgZGVxdWU8
X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVxdWU8X1Rw
LCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgZGVxdWU8
X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXF1ZTxfVHAs
IF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBkZXF1ZTxfVHAs
IF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9B
bGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IGRlcXVlPF9UcCwg
X0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0Fs
bG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKGRlcXVlPF9UcCxfQWxsb2M+JiBfX3gs
IGRlcXVlPF9UcCxfQWxsb2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9Cgp9CiMgNzEgIi91
c3IvaW5jbHVkZS9nKysvc3RhY2siIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxf
c3RhY2suaCIgMSAzCiMgNjYgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfc3RhY2suaCIgMwpu
YW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9T
ZXF1ZW5jZSA9IGRlcXVlPF9UcD4gPgpjbGFzcyBzdGFjazsKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9TZXE+CmJvb2wgb3BlcmF0b3I9PShjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwg
Y29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3kpOwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X1NlcT4KYm9vbCBvcGVyYXRvcjwoY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0IHN0
YWNrPF9UcCxfU2VxPiYgX195KTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxdWVu
Y2U+CmNsYXNzIHN0YWNrCnsKCiAKIAogIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjp2YWx1
ZV90eXBlIF9TZXF1ZW5jZV92YWx1ZV90eXBlOwogIDsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDEs
IGNsYXNzIF9TZXExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0IHN0YWNrPF9UcDEs
IF9TZXExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2s8X1RwMSwgX1Nl
cTE+Jik7CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDEsIGNsYXNzIF9TZXExPgogIGZyaWVuZCBib29s
IG9wZXJhdG9yPCAoY29uc3Qgc3RhY2s8X1RwMSwgX1NlcTE+JiwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0YWNrPF9UcDEsIF9TZXExPiYpOwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBl
bmFtZSBfU2VxdWVuY2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1l
IF9TZXF1ZW5jZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIF9TZXF1ZW5jZSBjb250
YWluZXJfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnJlZmVyZW5jZSByZWZl
cmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OmNvbnN0X3JlZmVyZW5jZSBjb25z
dF9yZWZlcmVuY2U7CnByb3RlY3RlZDoKICBfU2VxdWVuY2UgYzsKcHVibGljOgogIHN0YWNrKCkg
OiBjKCkge30KICBleHBsaWNpdCBzdGFjayhjb25zdCBfU2VxdWVuY2UmIF9fcykgOiBjKF9fcykg
e30KCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGMuZW1wdHkoKTsgfQogIHNpemVfdHlw
ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gYy5zaXplKCk7IH0KICByZWZlcmVuY2UgdG9wKCkgeyBy
ZXR1cm4gYy5iYWNrKCk7IH0KICBjb25zdF9yZWZlcmVuY2UgdG9wKCkgY29uc3QgeyByZXR1cm4g
Yy5iYWNrKCk7IH0KICB2b2lkIHB1c2goY29uc3QgdmFsdWVfdHlwZSYgX194KSB7IGMucHVzaF9i
YWNrKF9feCk7IH0KICB2b2lkIHBvcCgpIHsgYy5wb3BfYmFjaygpOyB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpib29sIG9wZXJhdG9yPT0oY29uc3Qgc3RhY2s8X1RwLF9T
ZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYgX195KQp7CiAgcmV0dXJuIF9feC5jID09
IF9feS5jOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpib29sIG9wZXJhdG9y
PChjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwgY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3kp
CnsKICByZXR1cm4gX194LmMgPCBfX3kuYzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X1NlcT4KYm9vbCBvcGVyYXRvciE9KGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYgX194LCBjb25zdCBz
dGFjazxfVHAsX1NlcT4mIF9feSkKewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpib29sIG9wZXJhdG9yPihjb25zdCBzdGFjazxfVHAs
X1NlcT4mIF9feCwgY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3kpCnsKICByZXR1cm4gX195IDwg
X194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpib29sIG9wZXJhdG9yPD0o
Y29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYgX195KQp7
CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1Nl
cT4KYm9vbCBvcGVyYXRvcj49KGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYgX194LCBjb25zdCBzdGFj
azxfVHAsX1NlcT4mIF9feSkKewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCn0KIyA3MiAiL3Vz
ci9pbmNsdWRlL2crKy9zdGFjayIgMiAzCiMgMjYgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUv
SU9EYXRhL2lucHV0c291cmNlX2ZpbGUuaCIgMiAzCgoKCgoKCgpjbGFzcyBDTF9JbnB1dFNvdXJj
ZV9GaWxlIDogcHVibGljIENMX0lucHV0U291cmNlCnsKCnB1YmxpYzoKCiAgICAgICAgQ0xfSW5w
dXRTb3VyY2VfRmlsZShjb25zdCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUpOwoKCiAgICAgICAgQ0xf
SW5wdXRTb3VyY2VfRmlsZShjb25zdCBDTF9JbnB1dFNvdXJjZV9GaWxlICpzb3VyY2UpOwoKCiAg
ICAgICAgdmlydHVhbCB+Q0xfSW5wdXRTb3VyY2VfRmlsZSgpOwoKCnB1YmxpYzoKCgogICAgICAg
IHZpcnR1YWwgaW50IHRlbGwoKSBjb25zdDsKCgoKICAgICAgICB2aXJ0dWFsIGludCBzaXplKCkg
Y29uc3Q7CgoKcHVibGljOgoKCgoKICAgICAgICB2aXJ0dWFsIGludCByZWFkKHZvaWQgKmRhdGEs
IGludCBzaXplKTsKCgogICAgICAgIHZpcnR1YWwgdm9pZCBvcGVuKCk7CgoKICAgICAgICB2aXJ0
dWFsIHZvaWQgY2xvc2UoKTsKCgoKICAgICAgICB2aXJ0dWFsIENMX0lucHV0U291cmNlICpjbG9u
ZSgpIGNvbnN0OwoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQgc2VlayhpbnQgcG9zLCBTZWVrRW51
bSBzZWVrX3R5cGUpOwoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBwdXNoX3Bvc2l0aW9uKCk7CgoK
ICAgICAgICB2aXJ0dWFsIHZvaWQgcG9wX3Bvc2l0aW9uKCk7CgoKcHJpdmF0ZToKICAgICAgICBz
dGQ6OnN0YWNrPGludD4gc3RhY2s7CiAgICAgICAgc3RkOjpzdHJpbmcgZmlsZW5hbWU7CiAgICAg
ICAgRklMRSAqZmlsZWhhbmRsZTsKICAgICAgICBpbnQgZmlsZXNpemU7Cn07CiMgNTcgIi91c3Iv
aW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29y
ZS9JT0RhdGEvaW5wdXRzb3VyY2VfbWVtb3J5LmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvQ2xh
bkxpYi9Db3JlL0lPRGF0YS9pbnB1dHNvdXJjZV9tZW1vcnkuaCIgMwpjbGFzcyBDTF9JbnB1dFNv
dXJjZV9NZW1vcnkgOiBwdWJsaWMgQ0xfSW5wdXRTb3VyY2UKewoKcHVibGljOgoKICAgICAgICBD
TF9JbnB1dFNvdXJjZV9NZW1vcnkoc3RkOjpzdHJpbmcgZGF0YSk7CgoKICAgICAgICB2aXJ0dWFs
IH5DTF9JbnB1dFNvdXJjZV9NZW1vcnkoKTsKCgpwdWJsaWM6CgoKICAgICAgICB2aXJ0dWFsIGlu
dCB0ZWxsKCkgY29uc3Q7CgoKCiAgICAgICAgdmlydHVhbCBpbnQgc2l6ZSgpIGNvbnN0OwoKCgoK
ICAgICAgICBzdGQ6OnN0cmluZyBnZXRfZGF0YSgpIGNvbnN0OwoKCnB1YmxpYzoKCgoKCiAgICAg
ICAgdmlydHVhbCBpbnQgcmVhZCh2b2lkICpkYXRhLCBpbnQgc2l6ZSk7CgoKICAgICAgICB2aXJ0
dWFsIHZvaWQgb3BlbigpOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CgoKCiAgICAg
ICAgdmlydHVhbCBDTF9JbnB1dFNvdXJjZSAqY2xvbmUoKSBjb25zdDsKCgoKCiAgICAgICAgdmly
dHVhbCB2b2lkIHNlZWsoaW50IHBvcywgU2Vla0VudW0gc2Vla190eXBlKTsKCgoKICAgICAgICB2
aXJ0dWFsIHZvaWQgcHVzaF9wb3NpdGlvbigpOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIHBvcF9w
b3NpdGlvbigpOwoKCnByaXZhdGU6CiAgICAgICAgc3RkOjpzdHJpbmcgZGF0YTsKICAgICAgICB1
bnNpZ25lZCBpbnQgcG9zOwogICAgICAgIGJvb2wgZGVsZXRlX2RhdGE7Cn07CiMgNTggIi91c3Iv
aW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29y
ZS9JT0RhdGEvaW5wdXRzb3VyY2VfcHJvdmlkZXIuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9D
bGFuTGliL0NvcmUvSU9EYXRhL2lucHV0c291cmNlX3Byb3ZpZGVyLmgiIDMKY2xhc3MgQ0xfSW5w
dXRTb3VyY2U7CgoKCgoKY2xhc3MgQ0xfSW5wdXRTb3VyY2VQcm92aWRlcgp7CnB1YmxpYzoKCgog
ICAgICAgIHZpcnR1YWwgfkNMX0lucHV0U291cmNlUHJvdmlkZXIoKSB7IHJldHVybjsgfQoKCgoK
CiAgICAgICAgc3RhdGljIENMX0lucHV0U291cmNlUHJvdmlkZXIgKmNyZWF0ZV9maWxlX3Byb3Zp
ZGVyKGNvbnN0IHN0ZDo6c3RyaW5nICZwYXRoKTsKCgoKCgogICAgICAgIHN0YXRpYyBDTF9JbnB1
dFNvdXJjZVByb3ZpZGVyICpjcmVhdGVfZGF0YWZpbGVfcHJvdmlkZXIoY29uc3Qgc3RkOjpzdHJp
bmcgJmZpbGVuYW1lKTsKCgoKCgogICAgICAgIHZpcnR1YWwgQ0xfSW5wdXRTb3VyY2UgKm9wZW5f
c291cmNlKGNvbnN0IHN0ZDo6c3RyaW5nICZoYW5kbGUpID0gMDsKCgoKICAgICAgICB2aXJ0dWFs
IENMX0lucHV0U291cmNlUHJvdmlkZXIgKmNsb25lKCkgPSAwOwoKCiAgICAgICAgdmlydHVhbCBz
dGQ6OnN0cmluZyBnZXRfcGF0aChjb25zdCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUpID0gMDsKCn07
CiMgNTkgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L0NsYW5MaWIvQ29yZS9JT0RhdGEvaW5wdXRzb3VyY2VfcHJvdmlkZXJfZmlsZS5oIiAxIDMKIyAy
NSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9JT0RhdGEvaW5wdXRzb3VyY2VfcHJvdmlkZXJf
ZmlsZS5oIiAzCmNsYXNzIENMX0lucHV0U291cmNlOwoKCmNsYXNzIENMX0lucHV0U291cmNlUHJv
dmlkZXJfRmlsZSA6IHB1YmxpYyBDTF9JbnB1dFNvdXJjZVByb3ZpZGVyCnsKCnB1YmxpYzoKCiAg
ICAgICAgQ0xfSW5wdXRTb3VyY2VQcm92aWRlcl9GaWxlKGNvbnN0IHN0ZDo6c3RyaW5nICZwYXRo
KTsKCgogICAgICAgIHZpcnR1YWwgQ0xfSW5wdXRTb3VyY2UgKm9wZW5fc291cmNlKGNvbnN0IHN0
ZDo6c3RyaW5nICZmaWxlbmFtZSk7CgoKICAgICAgICBzdGQ6OnN0cmluZyBnZXRfcGF0aChjb25z
dCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUpOwoKCiAgICAgICAgdmlydHVhbCBDTF9JbnB1dFNvdXJj
ZVByb3ZpZGVyICpjbG9uZSgpOwoKCnByaXZhdGU6CiAgICAgICAgc3RkOjpzdHJpbmcgcHJvdmlk
ZXJfcGF0aDsKfTsKIyA2MCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvY29yZS5oIiAyIDMKIyAxICIv
dXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL0lPRGF0YS9vdXRwdXRzb3VyY2UuaCIgMSAzCiMgMzIg
Ii91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvSU9EYXRhL291dHB1dHNvdXJjZS5oIiAzCmNsYXNz
IENMX091dHB1dFNvdXJjZQp7CgpwdWJsaWM6CgogICAgICAgIENMX091dHB1dFNvdXJjZSgpIHsg
c2V0X3N5c3RlbV9tb2RlKCk7IH0KCgogICAgICAgIHZpcnR1YWwgfkNMX091dHB1dFNvdXJjZSgp
IHsgcmV0dXJuOyB9CgoKcHVibGljOgoKCiAgICAgICAgdmlydHVhbCBpbnQgdGVsbCgpIGNvbnN0
ID0gMDsKCgoKICAgICAgICB2aXJ0dWFsIGludCBzaXplKCkgY29uc3QgPSAwOwoKCnB1YmxpYzoK
CiAgICAgICAgdmlydHVhbCB2b2lkIHNldF9zeXN0ZW1fbW9kZSgpOwoKCiAgICAgICAgdmlydHVh
bCB2b2lkIHNldF9iaWdfZW5kaWFuX21vZGUoKTsKCgogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRf
bGl0dGxlX2VuZGlhbl9tb2RlKCk7CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVfaW50MzIo
aW50IGRhdGEpOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlX3VpbnQzMih1bnNpZ25lZCBp
bnQgZGF0YSk7CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVfc2hvcnQxNihzaG9ydCBkYXRh
KTsKCgogICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZV91c2hvcnQxNih1bnNpZ25lZCBzaG9ydCBk
YXRhKTsKCgogICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZV9jaGFyOChjaGFyIGRhdGEpOwoKCiAg
ICAgICAgdmlydHVhbCB2b2lkIHdyaXRlX3VjaGFyOCh1bnNpZ25lZCBjaGFyIGRhdGEpOwoKCiAg
ICAgICAgdmlydHVhbCB2b2lkIHdyaXRlX2Zsb2F0MzIoZmxvYXQgZGF0YSk7CgoKICAgICAgICB2
aXJ0dWFsIHZvaWQgd3JpdGVfYm9vbDgoYm9vbCBkYXRhKTsKCgoKCiAgICAgICAgdmlydHVhbCB2
b2lkIHdyaXRlX3N0cmluZyhjb25zdCBzdGQ6OnN0cmluZyAmc3RyKTsKCgoKCgogICAgICAgIHZp
cnR1YWwgaW50IHdyaXRlKGNvbnN0IHZvaWQgKmRhdGEsIGludCBzaXplKSA9IDA7CgoKICAgICAg
ICB2aXJ0dWFsIHZvaWQgb3BlbigpID0gMDsKCgogICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgp
ID0gMDsKCgoKICAgICAgICB2aXJ0dWFsIENMX091dHB1dFNvdXJjZSAqY2xvbmUoKSA9IDA7CgoK
cHJvdGVjdGVkOgogICAgICAgIGJvb2wgbGl0dGxlX2VuZGlhbl9tb2RlOwp9OwojIDYxICIvdXNy
L2luY2x1ZGUvQ2xhbkxpYi9jb3JlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL0Nv
cmUvSU9EYXRhL291dHB1dHNvdXJjZV9maWxlLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvQ2xh
bkxpYi9Db3JlL0lPRGF0YS9vdXRwdXRzb3VyY2VfZmlsZS5oIiAzCmNsYXNzIENMX091dHB1dFNv
dXJjZV9GaWxlIDogcHVibGljIENMX091dHB1dFNvdXJjZQp7CgpwdWJsaWM6CgogICAgICAgIENM
X091dHB1dFNvdXJjZV9GaWxlKGNvbnN0IHN0ZDo6c3RyaW5nICZmaWxlKTsKCgogICAgICAgIENM
X091dHB1dFNvdXJjZV9GaWxlKCk7CgoKICAgICAgICB2aXJ0dWFsIH5DTF9PdXRwdXRTb3VyY2Vf
RmlsZSgpOwoKCnB1YmxpYzoKCgogICAgICAgIHZpcnR1YWwgaW50IHRlbGwoKSBjb25zdDsKCgoK
ICAgICAgICB2aXJ0dWFsIGludCBzaXplKCkgY29uc3Q7CgoKCgogICAgICAgIHN0ZDo6c3RyaW5n
IGdldF9kYXRhKCkgY29uc3Q7CgoKcHVibGljOgoKCgoKICAgICAgICB2aXJ0dWFsIGludCB3cml0
ZShjb25zdCB2b2lkICpkYXRhLCBpbnQgc2l6ZSk7CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgb3Bl
bigpOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CgoKCiAgICAgICAgdmlydHVhbCBD
TF9PdXRwdXRTb3VyY2UgKmNsb25lKCk7CgoKcHJpdmF0ZToKICAgICAgICB1bnNpZ25lZCBpbnQg
cG9zOwogICAgICAgIEZJTEUgKmZpbGU7CiAgICAgICAgc3RkOjpzdHJpbmcgZmlsZW5hbWU7Cn07
CiMgNjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L0NsYW5MaWIvQ29yZS9JT0RhdGEvb3V0cHV0c291cmNlX21lbW9yeS5oIiAxIDMKIyAyNSAiL3Vz
ci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9JT0RhdGEvb3V0cHV0c291cmNlX21lbW9yeS5oIiAzCmNs
YXNzIENMX091dHB1dFNvdXJjZV9NZW1vcnkgOiBwdWJsaWMgQ0xfT3V0cHV0U291cmNlCnsKCnB1
YmxpYzoKCiAgICAgICAgQ0xfT3V0cHV0U291cmNlX01lbW9yeSgpOwoKCiAgICAgICAgdmlydHVh
bCB+Q0xfT3V0cHV0U291cmNlX01lbW9yeSgpOwoKCnB1YmxpYzoKCgogICAgICAgIHZpcnR1YWwg
aW50IHRlbGwoKSBjb25zdDsKCgoKICAgICAgICB2aXJ0dWFsIGludCBzaXplKCkgY29uc3Q7CgoK
CgogICAgICAgIHN0ZDo6c3RyaW5nIGdldF9kYXRhKCkgY29uc3Q7CgoKcHVibGljOgoKCgoKICAg
ICAgICB2aXJ0dWFsIGludCB3cml0ZShjb25zdCB2b2lkICpkYXRhLCBpbnQgc2l6ZSk7CgoKICAg
ICAgICB2aXJ0dWFsIHZvaWQgb3BlbigpOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7
CgoKCiAgICAgICAgdmlydHVhbCBDTF9PdXRwdXRTb3VyY2UgKmNsb25lKCk7CgoKcHJpdmF0ZToK
ICAgICAgICBzdGQ6OnN0cmluZyBkYXRhOwogICAgICAgIHVuc2lnbmVkIGludCBwb3M7Cn07CiMg
NjMgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0Ns
YW5MaWIvQ29yZS9JT0RhdGEvb3V0cHV0c291cmNlX3Byb3ZpZGVyLmgiIDEgMwojIDI0ICIvdXNy
L2luY2x1ZGUvQ2xhbkxpYi9Db3JlL0lPRGF0YS9vdXRwdXRzb3VyY2VfcHJvdmlkZXIuaCIgMwpj
bGFzcyBDTF9PdXRwdXRTb3VyY2U7CgoKCgoKY2xhc3MgQ0xfT3V0cHV0U291cmNlUHJvdmlkZXIK
ewpwdWJsaWM6CgoKICAgICAgICB2aXJ0dWFsIH5DTF9PdXRwdXRTb3VyY2VQcm92aWRlcigpIHsg
cmV0dXJuOyB9CgoKCgogICAgICAgIHZpcnR1YWwgQ0xfT3V0cHV0U291cmNlICpvcGVuX3NvdXJj
ZShjb25zdCBzdGQ6OnN0cmluZyAmaGFuZGxlKSA9IDA7CgoKCiAgICAgICAgdmlydHVhbCBDTF9P
dXRwdXRTb3VyY2VQcm92aWRlciAqY2xvbmUoKSA9IDA7Cn07CiMgNjQgIi91c3IvaW5jbHVkZS9D
bGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9JT0RhdGEv
ZGlyZWN0b3J5X3NjYW5uZXIuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUv
SU9EYXRhL2RpcmVjdG9yeV9zY2FubmVyLmgiIDMKY2xhc3MgQ0xfRGlyZWN0b3J5U2Nhbm5lcl9H
ZW5lcmljOwoKY2xhc3MgQ0xfRGlyZWN0b3J5U2Nhbm5lcgp7CgpwdWJsaWM6CgogICAgICAgIENM
X0RpcmVjdG9yeVNjYW5uZXIoKTsKCgogICAgICAgIENMX0RpcmVjdG9yeVNjYW5uZXIoY29uc3Qg
Q0xfRGlyZWN0b3J5U2Nhbm5lciAmY29weSk7CgoKICAgICAgICB+Q0xfRGlyZWN0b3J5U2Nhbm5l
cigpOwoKCnB1YmxpYzoKCiAgICAgICAgYm9vbCBzY2FuKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRo
bmFtZSk7CgoKICAgICAgICBib29sIHNjYW4oY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhuYW1lLCBj
b25zdCBzdGQ6OnN0cmluZyYgcGF0dGVybik7CgoKICAgICAgICBzdGQ6OnN0cmluZyBnZXRfZGly
ZWN0b3J5X3BhdGgoKTsKCgogICAgICAgIHN0ZDo6c3RyaW5nIGdldF9uYW1lKCk7CgoKICAgICAg
ICBzdGQ6OnN0cmluZyBnZXRfcGF0aG5hbWUoKTsKCgogICAgICAgIGJvb2wgaXNfZGlyZWN0b3J5
KCk7CgoKICAgICAgICBib29sIGlzX2hpZGRlbigpOwoKCgoKcHVibGljOgoKICAgICAgICBDTF9E
aXJlY3RvcnlTY2FubmVyICZvcGVyYXRvciA9KGNvbnN0IENMX0RpcmVjdG9yeVNjYW5uZXIgJmNv
cHkpOwoKCiAgICAgICAgYm9vbCBuZXh0KCk7CgoKcHJpdmF0ZToKCiAgICAgICAgQ0xfRGlyZWN0
b3J5U2Nhbm5lcl9HZW5lcmljICppbXBsOwp9OwojIDY1ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9j
b3JlLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9SZXNvdXJjZXMvcmVz
b3VyY2V0eXBlLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1Jlc291cmNl
cy9yZXNvdXJjZXR5cGUuaCIgMwpjbGFzcyBDTF9SZXNvdXJjZTsKCgpjbGFzcyBDTF9SZXNvdXJj
ZVR5cGUKewoKcHVibGljOgoKICAgICAgICBDTF9SZXNvdXJjZVR5cGUoY29uc3Qgc3RkOjpzdHJp
bmcgJnR5cGUpOwoKCiAgICAgICAgdmlydHVhbCB+Q0xfUmVzb3VyY2VUeXBlKCk7CgoKcHVibGlj
OgoKICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmZ2V0X3R5cGUoKSBjb25zdCB7IHJldHVybiB0
eXBlOyB9CgoKICAgICAgICBzdGF0aWMgc3RkOjpsaXN0PENMX1Jlc291cmNlVHlwZSo+IHJlc291
cmNlX3R5cGVzOwoKCnB1YmxpYzoKCgoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNvbm5lY3RfZGF0
YShDTF9SZXNvdXJjZSAmcmVzb3VyY2UpPTA7CgoKcHJpdmF0ZToKICAgICAgICBzdGQ6OnN0cmlu
ZyB0eXBlOwp9OwoKdGVtcGxhdGU8Y2xhc3MgUmVzb3VyY2U+CgoKCgpjbGFzcyBDTF9SZWdpc3Rl
clJlc291cmNlVHlwZSA6IHB1YmxpYyBDTF9SZXNvdXJjZVR5cGUKewpwdWJsaWM6CgogICAgICAg
IENMX1JlZ2lzdGVyUmVzb3VyY2VUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nICZ0eXBlKSA6IENMX1Jl
c291cmNlVHlwZSh0eXBlKQogICAgICAgIHsKICAgICAgICB9CgoKICAgICAgICB2aXJ0dWFsIHZv
aWQgY29ubmVjdF9kYXRhKENMX1Jlc291cmNlICZyZXNvdXJjZSkKICAgICAgICB7CiAgICAgICAg
ICAgICAgICBuZXcgUmVzb3VyY2UocmVzb3VyY2UpOwogICAgICAgIH0KfTsKIyA2OCAiL3Vzci9p
bmNsdWRlL0NsYW5MaWIvY29yZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29y
ZS9SZXNvdXJjZXMvcmVzb3VyY2VvcHRpb25zLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvQ2xh
bkxpYi9Db3JlL1Jlc291cmNlcy9yZXNvdXJjZW9wdGlvbnMuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9nKysvbWFwIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2crKy9tYXAiIDMKCiMgMSAiL3Vzci9p
bmNsdWRlL2crKy9iaXRzL3N0bF90cmVlLmgiIDEgMwojIDkxICIvdXNyL2luY2x1ZGUvZysrL2Jp
dHMvc3RsX3RyZWUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIF9SYl90cmVlX2NvbG9yIHsg
X01fcmVkID0gZmFsc2UsIF9NX2JsYWNrID0gdHJ1ZSB9OwoKICBzdHJ1Y3QgX1JiX3RyZWVfbm9k
ZV9iYXNlCiAgewogICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKCiAg
ICBfUmJfdHJlZV9jb2xvciBfTV9jb2xvcjsKICAgIF9CYXNlX3B0ciBfTV9wYXJlbnQ7CiAgICBf
QmFzZV9wdHIgX01fbGVmdDsKICAgIF9CYXNlX3B0ciBfTV9yaWdodDsKCiAgICBzdGF0aWMgX0Jh
c2VfcHRyCiAgICBfU19taW5pbXVtKF9CYXNlX3B0ciBfX3gpCiAgICB7CiAgICAgIHdoaWxlIChf
X3gtPl9NX2xlZnQgIT0gMCkgX194ID0gX194LT5fTV9sZWZ0OwogICAgICByZXR1cm4gX194Owog
ICAgfQoKICAgIHN0YXRpYyBfQmFzZV9wdHIKICAgIF9TX21heGltdW0oX0Jhc2VfcHRyIF9feCkK
ICAgIHsKICAgICAgd2hpbGUgKF9feC0+X01fcmlnaHQgIT0gMCkgX194ID0gX194LT5fTV9yaWdo
dDsKICAgICAgcmV0dXJuIF9feDsKICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFs
PgogICAgc3RydWN0IF9SYl90cmVlX25vZGUgOiBwdWJsaWMgX1JiX3RyZWVfbm9kZV9iYXNlCiAg
ICB7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsPiogX0xpbmtfdHlwZTsKICAgICAg
X1ZhbCBfTV92YWx1ZV9maWVsZDsKICAgIH07CgogIHN0cnVjdCBfUmJfdHJlZV9iYXNlX2l0ZXJh
dG9yCiAgewogICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9CYXNlX3B0ciBfQmFzZV9w
dHI7CiAgICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn
b3J5OwogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAgIF9CYXNlX3B0
ciBfTV9ub2RlOwoKICAgIHZvaWQKICAgIF9NX2luY3JlbWVudCgpCiAgICB7CiAgICAgIGlmIChf
TV9ub2RlLT5fTV9yaWdodCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9NX25vZGUgPSBfTV9u
b2RlLT5fTV9yaWdodDsKICAgICAgICAgIHdoaWxlIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApCiAg
ICAgICAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9sZWZ0OwogICAgICAgIH0KICAgICAgZWxz
ZQogICAgICAgIHsKICAgICAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9wYXJlbnQ7
CiAgICAgICAgICB3aGlsZSAoX01fbm9kZSA9PSBfX3ktPl9NX3JpZ2h0KQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICAgICAgICBfX3kgPSBfX3ktPl9N
X3BhcmVudDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9NX25vZGUtPl9NX3JpZ2h0ICE9
IF9feSkKICAgICAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICB9CiAgICB9CgogICAgdm9p
ZAogICAgX01fZGVjcmVtZW50KCkKICAgIHsKICAgICAgaWYgKF9NX25vZGUtPl9NX2NvbG9yID09
IF9NX3JlZAogICAgICAgICAgJiYgX01fbm9kZS0+X01fcGFyZW50LT5fTV9wYXJlbnQgPT0gX01f
bm9kZSkKICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fcmlnaHQ7CiAgICAgIGVsc2UgaWYg
KF9NX25vZGUtPl9NX2xlZnQgIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfQmFzZV9wdHIgX195
ID0gX01fbm9kZS0+X01fbGVmdDsKICAgICAgICAgIHdoaWxlIChfX3ktPl9NX3JpZ2h0ICE9IDAp
CiAgICAgICAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7CiAgICAgICAgICBfTV9ub2RlID0gX195
OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9CYXNlX3B0ciBfX3kg
PSBfTV9ub2RlLT5fTV9wYXJlbnQ7CiAgICAgICAgICB3aGlsZSAoX01fbm9kZSA9PSBfX3ktPl9N
X2xlZnQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAg
ICAgICAgIF9feSA9IF9feS0+X01fcGFyZW50OwogICAgICAgICAgICB9CiAgICAgICAgICBfTV9u
b2RlID0gX195OwogICAgICAgIH0KICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFs
LCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgogICAgc3RydWN0IF9SYl90cmVlX2l0ZXJh
dG9yIDogcHVibGljIF9SYl90cmVlX2Jhc2VfaXRlcmF0b3IKICAgIHsKICAgICAgdHlwZWRlZiBf
VmFsIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgICAgIHR5cGVk
ZWYgX1B0ciBwb2ludGVyOwogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9W
YWwmLCBfVmFsKj4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1Zh
bCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9WYWwqPgogICAgICBjb25zdF9pdGVyYXRvcjsKICAgICAg
dHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRyPiBfU2VsZjsKICAgICAg
dHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWw+KiBfTGlua190eXBlOwoKICAgICAgX1JiX3RyZWVf
aXRlcmF0b3IoKSB7fQogICAgICBfUmJfdHJlZV9pdGVyYXRvcihfTGlua190eXBlIF9feCkgeyBf
TV9ub2RlID0gX194OyB9CiAgICAgIF9SYl90cmVlX2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBf
X2l0KSB7IF9NX25vZGUgPSBfX2l0Ll9NX25vZGU7IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBv
cGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfTGlua190eXBlKF9NX25vZGUpLT5fTV92YWx1ZV9m
aWVsZDsgfQoKICAgICAgcG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
JihvcGVyYXRvciooKSk7IH0KCiAgICAgIF9TZWxmJgogICAgICBvcGVyYXRvcisrKCkKICAgICAg
ewogICAgICAgIF9NX2luY3JlbWVudCgpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoK
ICAgICAgX1NlbGYKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICBfU2VsZiBf
X3RtcCA9ICp0aGlzOwogICAgICAgIF9NX2luY3JlbWVudCgpOwogICAgICAgIHJldHVybiBfX3Rt
cDsKICAgICAgfQoKICAgICAgX1NlbGYmCiAgICAgIG9wZXJhdG9yLS0oKSB7IF9NX2RlY3JlbWVu
dCgpOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9TZWxmCiAgICAgIG9wZXJhdG9yLS0oaW50KQog
ICAgICB7CiAgICAgICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICAgICBfTV9kZWNyZW1lbnQo
KTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmFsLCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0cj4mIF9f
eCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0
cj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25z
dCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+JiBfX3gs
CiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFs
Kj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25z
dCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwgX1ZhbCo+JiBfX3gsCiAgICAgICAgICAg
ICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFs
Kj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBf
UmVmLCBfUHRyPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxf
VmFsLCBfUmVmLCBfUHRyPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9N
X25vZGU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25z
dCBfVmFsKj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1Zh
bCwgX1ZhbCYsIF9WYWwqPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9N
X25vZGU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9f
eCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1Zh
bCYsIGNvbnN0IF9WYWwqPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9N
X25vZGU7IH0KCiAgaW5saW5lIHZvaWQKICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfUmJfdHJlZV9u
b2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQogIHsKICAgIF9SYl90
cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9yaWdodDsKICAgIF9feC0+X01fcmlnaHQgPSBf
X3ktPl9NX2xlZnQ7CiAgICBpZiAoX195LT5fTV9sZWZ0ICE9MCkKICAgICAgX195LT5fTV9sZWZ0
LT5fTV9wYXJlbnQgPSBfX3g7CiAgICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwoK
ICAgIGlmIChfX3ggPT0gX19yb290KQogICAgICBfX3Jvb3QgPSBfX3k7CiAgICBlbHNlIGlmIChf
X3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX2xlZnQpCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9s
ZWZ0ID0gX195OwogICAgZWxzZQogICAgICBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7
CiAgICBfX3ktPl9NX2xlZnQgPSBfX3g7CiAgICBfX3gtPl9NX3BhcmVudCA9IF9feTsKICB9Cgog
IGlubGluZSB2b2lkCiAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9SYl90cmVlX25vZGVfYmFzZSog
X194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCiAgewogICAgX1JiX3RyZWVfbm9kZV9i
YXNlKiBfX3kgPSBfX3gtPl9NX2xlZnQ7CiAgICBfX3gtPl9NX2xlZnQgPSBfX3ktPl9NX3JpZ2h0
OwogICAgaWYgKF9feS0+X01fcmlnaHQgIT0gMCkKICAgICAgX195LT5fTV9yaWdodC0+X01fcGFy
ZW50ID0gX194OwogICAgX195LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgICBpZiAo
X194ID09IF9fcm9vdCkKICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBpZiAoX194ID09IF9f
eC0+X01fcGFyZW50LT5fTV9yaWdodCkKICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0g
X195OwogICAgZWxzZQogICAgICBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsKICAgIF9f
eS0+X01fcmlnaHQgPSBfX3g7CiAgICBfX3gtPl9NX3BhcmVudCA9IF9feTsKICB9CgogIGlubGlu
ZSB2b2lkCiAgX1JiX3RyZWVfcmViYWxhbmNlKF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJf
dHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCiAgewogICAgX194LT5fTV9jb2xvciA9IF9NX3JlZDsK
ICAgIHdoaWxlIChfX3ggIT0gX19yb290CiAgICAgICAgICAgJiYgX194LT5fTV9wYXJlbnQtPl9N
X2NvbG9yID09IF9NX3JlZCkKICAgICAgewogICAgICAgIGlmIChfX3gtPl9NX3BhcmVudCA9PSBf
X3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0KQogICAgICAgICAgewogICAgICAgICAg
ICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9N
X3JpZ2h0OwogICAgICAgICAgICBpZiAoX195ICYmIF9feS0+X01fY29sb3IgPT0gX01fcmVkKQog
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9
IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX195LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAg
ICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7
CiAgICAgICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50OwogICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0KQogICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAg
ICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsK
ICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01f
cmVkOwogICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feC0+X01fcGFyZW50
LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAg
IGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBf
X3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgICBpZiAoX195ICYm
IF9feS0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX195
LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9N
X3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICBfX3ggPSBfX3gtPl9N
X3BhcmVudC0+X01fcGFyZW50OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9N
X2xlZnQpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBfX3ggPSBfX3gt
Pl9NX3BhcmVudDsKICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194
LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfX3gtPl9NX3Bh
cmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50
LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgX1JiX3RyZWVf
cm90YXRlX2xlZnQoX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudCwgX19yb290KTsKICAgICAgICAg
ICAgICB9CiAgICAgICAgICB9CiAgICAgIH0KICAgIF9fcm9vdC0+X01fY29sb3IgPSBfTV9ibGFj
azsKICB9CgogIGlubGluZSBfUmJfdHJlZV9ub2RlX2Jhc2UqCiAgX1JiX3RyZWVfcmViYWxhbmNl
X2Zvcl9lcmFzZShfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fbGVmdG1vc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3JpZ2h0bW9zdCkKICB7
CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9fejsKICAgIF9SYl90cmVlX25vZGVfYmFz
ZSogX194ID0gMDsKICAgIF9SYl90cmVlX25vZGVfYmFzZSogX194X3BhcmVudCA9IDA7CiAgICBp
ZiAoX195LT5fTV9sZWZ0ID09IDApCiAgICAgIF9feCA9IF9feS0+X01fcmlnaHQ7CiAgICBlbHNl
CiAgICAgIGlmIChfX3ktPl9NX3JpZ2h0ID09IDApCiAgICAgICAgX194ID0gX195LT5fTV9sZWZ0
OwogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7CiAg
ICAgICAgICB3aGlsZSAoX195LT5fTV9sZWZ0ICE9IDApCiAgICAgICAgICAgIF9feSA9IF9feS0+
X01fbGVmdDsKICAgICAgICAgIF9feCA9IF9feS0+X01fcmlnaHQ7CiAgICAgICAgfQogICAgaWYg
KF9feSAhPSBfX3opCiAgICAgIHsKCiAgICAgICAgX196LT5fTV9sZWZ0LT5fTV9wYXJlbnQgPSBf
X3k7CiAgICAgICAgX195LT5fTV9sZWZ0ID0gX196LT5fTV9sZWZ0OwogICAgICAgIGlmIChfX3kg
IT0gX196LT5fTV9yaWdodCkKICAgICAgICAgIHsKICAgICAgICAgICAgX194X3BhcmVudCA9IF9f
eS0+X01fcGFyZW50OwogICAgICAgICAgICBpZiAoX194KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+
X01fcGFyZW50OwogICAgICAgICAgICBfX3ktPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feDsKICAg
ICAgICAgICAgX195LT5fTV9yaWdodCA9IF9fei0+X01fcmlnaHQ7CiAgICAgICAgICAgIF9fei0+
X01fcmlnaHQtPl9NX3BhcmVudCA9IF9feTsKICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAg
ICAgICBfX3hfcGFyZW50ID0gX195OwogICAgICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICAg
ICAgX19yb290ID0gX195OwogICAgICAgIGVsc2UgaWYgKF9fei0+X01fcGFyZW50LT5fTV9sZWZ0
ID09IF9feikKICAgICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogICAgICAg
IGVsc2UKICAgICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICAgICAgICBf
X3ktPl9NX3BhcmVudCA9IF9fei0+X01fcGFyZW50OwogICAgICAgIHN0ZDo6c3dhcChfX3ktPl9N
X2NvbG9yLCBfX3otPl9NX2NvbG9yKTsKICAgICAgICBfX3kgPSBfX3o7CgogICAgICB9CiAgICBl
bHNlCiAgICAgIHsKICAgICAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAg
aWYgKF9feCkKICAgICAgICAgIF9feC0+X01fcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAg
ICAgaWYgKF9fcm9vdCA9PSBfX3opCiAgICAgICAgICBfX3Jvb3QgPSBfX3g7CiAgICAgICAgZWxz
ZQogICAgICAgICAgaWYgKF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID09IF9feikKICAgICAgICAg
ICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7CiAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgIF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feDsKICAgICAgICBpZiAoX19sZWZ0bW9z
dCA9PSBfX3opCiAgICAgICAgICBpZiAoX196LT5fTV9yaWdodCA9PSAwKQogICAgICAgICAgICBf
X2xlZnRtb3N0ID0gX196LT5fTV9wYXJlbnQ7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICBf
X2xlZnRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9feCk7CiAgICAgICAg
aWYgKF9fcmlnaHRtb3N0ID09IF9feikKICAgICAgICAgIGlmIChfX3otPl9NX2xlZnQgPT0gMCkK
ICAgICAgICAgICAgX19yaWdodG1vc3QgPSBfX3otPl9NX3BhcmVudDsKCiAgICAgICAgICBlbHNl
CiAgICAgICAgICAgIF9fcmlnaHRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVt
KF9feCk7CiAgICAgIH0KICAgIGlmIChfX3ktPl9NX2NvbG9yICE9IF9NX3JlZCkKICAgICAgewog
ICAgICAgIHdoaWxlIChfX3ggIT0gX19yb290ICYmIChfX3ggPT0gMCB8fCBfX3gtPl9NX2NvbG9y
ID09IF9NX2JsYWNrKSkKICAgICAgICAgIGlmIChfX3ggPT0gX194X3BhcmVudC0+X01fbGVmdCkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX193ID0gX194
X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICAgICAgaWYgKF9fdy0+X01fY29sb3IgPT0gX01f
cmVkKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0g
X01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVk
OwogICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBfX3Jv
b3QpOwogICAgICAgICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoKF9fdy0+X01fbGVmdCA9PSAwIHx8CiAgICAg
ICAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSAmJgogICAg
ICAgICAgICAgICAgICAoX193LT5fTV9yaWdodCA9PSAwIHx8CiAgICAgICAgICAgICAgICAgICBf
X3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAg
IF9feCA9IF9feF9wYXJlbnQ7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hfcGFy
ZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCA9PSAwCiAg
ICAgICAgICAgICAgICAgICAgICB8fCBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfTV9ibGFj
aykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoX193LT5f
TV9sZWZ0KSBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAg
ICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICAgICAgX1Ji
X3RyZWVfcm90YXRlX3JpZ2h0KF9fdywgX19yb290KTsKICAgICAgICAgICAgICAgICAgICAgIF9f
dyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAgICAgICAg
ICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAg
ICBpZiAoX193LT5fTV9yaWdodCkKICAgICAgICAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0LT5f
TV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVm
dChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgogICAg
ICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+X01fbGVmdDsK
ICAgICAgICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAg
ICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAg
IF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAg
ICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgIGlmICgoX193LT5fTV9yaWdodCA9PSAwIHx8CiAgICAgICAgICAgICAgICAgICBfX3ct
Pl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykgJiYKICAgICAgICAgICAgICAgICAgKF9f
dy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2Nv
bG9yID09IF9NX2JsYWNrKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX193
LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgX194ID0gX194X3BhcmVudDsK
ICAgICAgICAgICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9NX3BhcmVudDsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQgPT0gMCB8fCBfX3ctPl9NX2xlZnQtPl9NX2Nv
bG9yID09IF9NX2JsYWNrKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgIGlmIChfX3ctPl9NX3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9NX2JsYWNr
OwogICAgICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAg
ICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9fdywgX19yb290KTsKICAgICAgICAg
ICAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX194X3BhcmVudC0+X01fY29s
b3I7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAg
ICAgICAgICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQpCiAgICAgICAgICAgICAgICAgICAgX193
LT5fTV9sZWZ0LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBfUmJfdHJl
ZV9yb3RhdGVfcmlnaHQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICBpZiAoX194KSBfX3gt
Pl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgIH0KICAgIHJldHVybiBfX3k7CiAgfQoKCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYywgYm9vbCBfU19pbnN0YW5j
ZWxlc3M+CiAgICBjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3Jf
dHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxv
Y2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvcjsgfQoKICAgICAgX1JiX3Ry
ZWVfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgICA6IF9NX25vZGVf
YWxsb2NhdG9yKF9fYSksIF9NX2hlYWRlcigwKSB7fQoKICAgIHByb3RlY3RlZDoKICAgICAgdHlw
ZW5hbWUgX0FsbG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46OmFsbG9jYXRv
cl90eXBlCiAgICAgIF9NX25vZGVfYWxsb2NhdG9yOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+
KiBfTV9oZWFkZXI7CgogICAgICBfUmJfdHJlZV9ub2RlPF9UcD4qCiAgICAgIF9NX2dldF9ub2Rl
KCkgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0KCiAgICAgIHZvaWQK
ICAgICAgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApCiAgICAgIHsgX01fbm9k
ZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNl
PF9UcCwgX0FsbG9jLCB0cnVlPgogICAgewogICAgcHVibGljOgogICAgdHlwZWRlZiB0eXBlbmFt
ZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5
cGU7CiAgICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBh
bGxvY2F0b3JfdHlwZSgpOyB9CgogICAgICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9j
YXRvcl90eXBlJikgOiBfTV9oZWFkZXIoMCkge30KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9SYl90
cmVlX25vZGU8X1RwPiogX01faGVhZGVyOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2Nf
dHJhaXRzPF9SYl90cmVlX25vZGU8X1RwPiwgX0FsbG9jPjo6X0FsbG9jX3R5cGUKICAgICAgX0Fs
bG9jX3R5cGU7CgogICAgICBfUmJfdHJlZV9ub2RlPF9UcD4qCiAgICAgIF9NX2dldF9ub2RlKCkg
eyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKDEpOyB9CgogICAgICB2b2lkCiAgICAgIF9N
X3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKSB7IF9BbGxvY190eXBlOjpkZWFsbG9j
YXRlKF9fcCwgMSk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg
X0FsbG9jPgogICAgc3RydWN0IF9SYl90cmVlX2Jhc2UgOiBwdWJsaWMgX1JiX3RyZWVfYWxsb2Nf
YmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxv
Y190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICB7CiAgICAgIHR5cGVk
ZWYgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAsCiAgICAgICAgX0FsbG9jLCBfQWxsb2NfdHJhaXRz
PF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPiBfQmFzZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogICAgICBfUmJfdHJl
ZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICAgIDogX0Jhc2UoX19hKSB7IF9N
X2hlYWRlciA9IF9NX2dldF9ub2RlKCk7IH0KICAgICAgfl9SYl90cmVlX2Jhc2UoKSB7IF9NX3B1
dF9ub2RlKF9NX2hlYWRlcik7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0
eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBf
Q29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9WYWw+ID4KICAgIGNsYXNzIF9S
Yl90cmVlIDogcHJvdGVjdGVkIF9SYl90cmVlX2Jhc2U8X1ZhbCwgX0FsbG9jPgogICAgewogICAg
ICB0eXBlZGVmIF9SYl90cmVlX2Jhc2U8X1ZhbCwgX0FsbG9jPiBfQmFzZTsKCiAgICBwcm90ZWN0
ZWQ6CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9wdHI7CiAgICAgIHR5
cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsPiBfUmJfdHJlZV9ub2RlOwoKICAgIHB1YmxpYzoKICAg
ICAgdHlwZWRlZiBfS2V5IGtleV90eXBlOwogICAgICB0eXBlZGVmIF9WYWwgdmFsdWVfdHlwZTsK
ICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IHZh
bHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJl
bmNlOwogICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICAg
ICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlKiBfTGlua190eXBlOwogICAgICB0eXBlZGVmIHNpemVf
dCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBl
OwogICAgICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jh
c2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdXNpbmcgX0Jhc2U6
Ol9NX2dldF9ub2RlOwogICAgICB1c2luZyBfQmFzZTo6X01fcHV0X25vZGU7CiAgICAgIHVzaW5n
IF9CYXNlOjpfTV9oZWFkZXI7CgogICAgICBfTGlua190eXBlCiAgICAgIF9NX2NyZWF0ZV9ub2Rl
KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgICAgewogICAgICAgIF9MaW5rX3R5cGUgX190bXAg
PSBfTV9nZXRfbm9kZSgpOwogICAgICAgIHRyeQogICAgICAgICAgeyBfQ29uc3RydWN0KCZfX3Rt
cC0+X01fdmFsdWVfZmllbGQsIF9feCk7IH0KICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICB7
CiAgICAgICAgICBfTV9wdXRfbm9kZShfX3RtcCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICAg
IH0KICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIF9MaW5rX3R5cGUKICAgICAg
X01fY2xvbmVfbm9kZShfTGlua190eXBlIF9feCkKICAgICAgewogICAgICAgIF9MaW5rX3R5cGUg
X190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgICAgICBfX3Rt
cC0+X01fY29sb3IgPSBfX3gtPl9NX2NvbG9yOwogICAgICAgIF9fdG1wLT5fTV9sZWZ0ID0gMDsK
ICAgICAgICBfX3RtcC0+X01fcmlnaHQgPSAwOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAg
fQoKICAgICAgdm9pZAogICAgICBkZXN0cm95X25vZGUoX0xpbmtfdHlwZSBfX3ApCiAgICAgIHsK
ICAgICAgICBfRGVzdHJveSgmX19wLT5fTV92YWx1ZV9maWVsZCk7CiAgICAgICAgX01fcHV0X25v
ZGUoX19wKTsKICAgICAgfQoKICAgICAgc2l6ZV90eXBlIF9NX25vZGVfY291bnQ7CiAgICAgIF9D
b21wYXJlIF9NX2tleV9jb21wYXJlOwoKICAgICAgX0xpbmtfdHlwZSYKICAgICAgX01fcm9vdCgp
IGNvbnN0IHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9wYXJlbnQ7IH0KCiAg
ICAgIF9MaW5rX3R5cGUmCiAgICAgIF9NX2xlZnRtb3N0KCkgY29uc3QgeyByZXR1cm4gKF9MaW5r
X3R5cGUmKSBfTV9oZWFkZXItPl9NX2xlZnQ7IH0KCiAgICAgIF9MaW5rX3R5cGUmCiAgICAgIF9N
X3JpZ2h0bW9zdCgpIGNvbnN0IHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9y
aWdodDsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX2xlZnQoX0xpbmtfdHlw
ZSBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0KTsgfQoKICAgICAgc3Rh
dGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX3JpZ2h0KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiAo
X0xpbmtfdHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYK
ICAgICAgX1NfcGFyZW50KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9f
eC0+X01fcGFyZW50KTsgfQoKICAgICAgc3RhdGljIHJlZmVyZW5jZQogICAgICBfU192YWx1ZShf
TGlua190eXBlIF9feCkgeyByZXR1cm4gX194LT5fTV92YWx1ZV9maWVsZDsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IF9LZXkmCiAgICAgIF9TX2tleShfTGlua190eXBlIF9feCkgeyByZXR1cm4gX0tl
eU9mVmFsdWUoKShfU192YWx1ZShfX3gpKTsgfQoKICAgICAgc3RhdGljIF9SYl90cmVlX2NvbG9y
JgogICAgICBfU19jb2xvcihfTGlua190eXBlIF9feCkgeyByZXR1cm4gX194LT5fTV9jb2xvcjsg
fQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX2xlZnQoX0Jhc2VfcHRyIF9feCkg
eyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CgogICAgICBzdGF0aWMgX0xp
bmtfdHlwZSYKICAgICAgX1NfcmlnaHQoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5
cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9T
X3BhcmVudChfQmFzZV9wdHIgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcGFy
ZW50KTsgfQoKICAgICAgc3RhdGljIHJlZmVyZW5jZQogICAgICBfU192YWx1ZShfQmFzZV9wdHIg
X194KSB7IHJldHVybiAoKF9MaW5rX3R5cGUpX194KS0+X01fdmFsdWVfZmllbGQ7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBfS2V5JgogICAgICBfU19rZXkoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4g
X0tleU9mVmFsdWUoKShfU192YWx1ZShfTGlua190eXBlKF9feCkpKTt9CgogICAgICBzdGF0aWMg
X1JiX3RyZWVfY29sb3ImCiAgICAgIF9TX2NvbG9yKF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChf
TGlua190eXBlKF9feCktPl9NX2NvbG9yKTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUKICAg
ICAgX1NfbWluaW11bShfTGlua190eXBlIF9feCkKICAgICAgeyByZXR1cm4gKF9MaW5rX3R5cGUp
IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOyB9CgogICAgICBzdGF0aWMgX0xp
bmtfdHlwZQogICAgICBfU19tYXhpbXVtKF9MaW5rX3R5cGUgX194KQogICAgICB7IHJldHVybiAo
X0xpbmtfdHlwZSkgX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7IH0KCiAgICBw
dWJsaWM6CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgcmVmZXJl
bmNlLCBwb2ludGVyPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2
YWx1ZV90eXBlLCBjb25zdF9yZWZlcmVuY2UsIGNvbnN0X3BvaW50ZXI+CiAgICAgIGNvbnN0X2l0
ZXJhdG9yOwoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRl
cmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKICAgICAgaXRlcmF0b3IKICAg
ICAgX01faW5zZXJ0KF9CYXNlX3B0ciBfX3gsIF9CYXNlX3B0ciBfX3ksIGNvbnN0IHZhbHVlX3R5
cGUmIF9fdik7CgogICAgICBfTGlua190eXBlCiAgICAgIF9NX2NvcHkoX0xpbmtfdHlwZSBfX3gs
IF9MaW5rX3R5cGUgX19wKTsKCiAgICAgIHZvaWQKICAgICAgX01fZXJhc2UoX0xpbmtfdHlwZSBf
X3gpOwoKICAgIHB1YmxpYzoKCiAgICAgIF9SYl90cmVlKCkKICAgICAgICA6IF9CYXNlKGFsbG9j
YXRvcl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZSgpCiAgICAgIHsg
X01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogICAgICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYg
X19jb21wKQogICAgICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVfY291bnQo
MCksIF9NX2tleV9jb21wYXJlKF9fY29tcCkKICAgICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7
IH0KCiAgICAgIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsIGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EpCiAgICAgICAgOiBfQmFzZShfX2EpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9r
ZXlfY29tcGFyZShfX2NvbXApCiAgICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogICAg
ICBfUmJfdHJlZShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPiYgX194KQogICAgICAgIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSksIF9NX25v
ZGVfY291bnQoMCksCiAgICAgICAgICAgICAgICAgX01fa2V5X2NvbXBhcmUoX194Ll9NX2tleV9j
b21wYXJlKQogICAgICB7CiAgICAgICAgaWYgKF9feC5fTV9yb290KCkgPT0gMCkKICAgICAgICAg
IF9NX2VtcHR5X2luaXRpYWxpemUoKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAg
ICAgIF9TX2NvbG9yKF9NX2hlYWRlcikgPSBfTV9yZWQ7CiAgICAgICAgICAgIF9NX3Jvb3QoKSA9
IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwgX01faGVhZGVyKTsKICAgICAgICAgICAgX01fbGVmdG1v
c3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkg
PSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAgICAgICAgICB9CiAgICAgICAgX01fbm9kZV9jb3Vu
dCA9IF9feC5fTV9ub2RlX2NvdW50OwogICAgICB9CgogICAgICB+X1JiX3RyZWUoKSB7IGNsZWFy
KCk7IH0KCiAgICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+JgogICAgICBvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz4mIF9feCk7CgogICAgcHJpdmF0ZToKICAgICAgdm9pZCBfTV9lbXB0
eV9pbml0aWFsaXplKCkKICAgICAgewogICAgICAgIF9TX2NvbG9yKF9NX2hlYWRlcikgPSBfTV9y
ZWQ7CgogICAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9NX2hl
YWRlcjsKICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgfQoKICAgIHB1
YmxpYzoKCiAgICAgIF9Db21wYXJlCiAgICAgIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01f
a2V5X2NvbXBhcmU7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkgeyByZXR1cm4gX01f
bGVmdG1vc3QoKTsgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlbmQoKSB7IHJl
dHVybiBfTV9oZWFkZXI7IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIF9NX2hlYWRlcjsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVn
aW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKICAgICAgY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yKGVuZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkg
eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcgogICAgICByZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVy
YXRvcihiZWdpbigpKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IF9NX25vZGVfY291bnQgPT0gMDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHNpemUoKSBjb25z
dCB7IHJldHVybiBfTV9ub2RlX2NvdW50OyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3Np
emUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CgogICAgICB2b2lkCiAgICAgIHN3
YXAoX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9fdCkK
ICAgICAgewogICAgICAgIHN0ZDo6c3dhcChfTV9oZWFkZXIsIF9fdC5fTV9oZWFkZXIpOwogICAg
ICAgIHN0ZDo6c3dhcChfTV9ub2RlX2NvdW50LCBfX3QuX01fbm9kZV9jb3VudCk7CiAgICAgICAg
c3RkOjpzd2FwKF9NX2tleV9jb21wYXJlLCBfX3QuX01fa2V5X2NvbXBhcmUpOwogICAgICB9CgoK
ICAgICAgcGFpcjxpdGVyYXRvcixib29sPgogICAgICBpbnNlcnRfdW5pcXVlKGNvbnN0IHZhbHVl
X3R5cGUmIF9feCk7CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnRfZXF1YWwoY29uc3QgdmFs
dWVfdHlwZSYgX194KTsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydF91bmlxdWUoaXRlcmF0
b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCiAgICAgIGl0ZXJhdG9yCiAg
ICAgIGluc2VydF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBf
X3gpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIHZvaWQK
ICAgICAgaW5zZXJ0X3VuaXF1ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAg
IHZvaWQKICAgICAgaW5zZXJ0X2VxdWFsKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCk7CgogICAgICB2b2lkCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRp
b24pOwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpOwoK
ICAgICAgdm9pZAogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3Qp
OwoKICAgICAgdm9pZAogICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSogX19maXJzdCwgY29uc3Qg
a2V5X3R5cGUqIF9fbGFzdCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFyKCkKICAgICAgewogICAg
ICAgIGlmIChfTV9ub2RlX2NvdW50ICE9IDApCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX2Vy
YXNlKF9NX3Jvb3QoKSk7CiAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAg
ICAgICAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01f
aGVhZGVyOwogICAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgICAgICAgIH0KICAgICAg
fQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAg
ICBjb25zdF9pdGVyYXRvcgogICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoK
ICAgICAgc2l6ZV90eXBlCiAgICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoK
ICAgICAgaXRlcmF0b3IKICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7Cgog
ICAgICBjb25zdF9pdGVyYXRvcgogICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194
KSBjb25zdDsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBl
JiBfX3gpOwoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5
X3R5cGUmIF9feCkgY29uc3Q7CgogICAgICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPgogICAgICBl
cXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAgIHBhaXI8Y29uc3RfaXRlcmF0
b3IsIGNvbnN0X2l0ZXJhdG9yPgogICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194
KSBjb25zdDsKCgogICAgICBib29sCiAgICAgIF9fcmJfdmVyaWZ5KCkgY29uc3Q7CiAgICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZW
YWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsKICAg
ICAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgIGVxdWFsKF9feC5i
ZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAg
dHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcjwoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz4mIF9feCwKICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgewogICAgICByZXR1cm4gbGV4aWNvZ3Jh
cGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwK
ICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tl
eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuICEo
X194ID09IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwg
dHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX1JiX3RyZWU8
X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAg
ICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg
X195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXks
IHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1l
IF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8
PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg
X194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPiYgX195KQogIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwK
ICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tl
eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICB7IHJldHVybiAhKF9f
eCA8IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlw
ZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgIF9SYl90cmVlPF9LZXksX1Zh
bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IF9feC5zd2FwKF9feSk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tl
eU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JgogICAg
X1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgb3Bl
cmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+JiBfX3gpCiAgICB7CiAgICAgIGlmICh0aGlzICE9ICZfX3gpCiAgICAgICAgewoKICAgICAg
ICAgIGNsZWFyKCk7CiAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgICAgICAgIF9NX2tl
eV9jb21wYXJlID0gX194Ll9NX2tleV9jb21wYXJlOwogICAgICAgICAgaWYgKF9feC5fTV9yb290
KCkgPT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAg
ICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgICAgICAgICBfTV9yaWdo
dG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBf
TV9oZWFkZXIpOwogICAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jv
b3QoKSk7CiAgICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3Qo
KSk7CiAgICAgICAgICAgICAgX01fbm9kZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBf
UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IK
ICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAg
IF9NX2luc2VydChfQmFzZV9wdHIgX194XywgX0Jhc2VfcHRyIF9feV8sIGNvbnN0IF9WYWwmIF9f
dikKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX194XzsKICAgICAg
X0xpbmtfdHlwZSBfX3kgPSAoX0xpbmtfdHlwZSkgX195XzsKICAgICAgX0xpbmtfdHlwZSBfX3o7
CgogICAgICBpZiAoX195ID09IF9NX2hlYWRlciB8fCBfX3ggIT0gMCB8fAogICAgICAgICAgX01f
a2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX195KSkpCiAgICAgICAgewog
ICAgICAgICAgX196ID0gX01fY3JlYXRlX25vZGUoX192KTsKICAgICAgICAgIF9TX2xlZnQoX195
KSA9IF9fejsKCiAgICAgICAgICBpZiAoX195ID09IF9NX2hlYWRlcikKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIF9NX3Jvb3QoKSA9IF9fejsKICAgICAgICAgICAgICBfTV9yaWdodG1vc3Qo
KSA9IF9fejsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX195ID09IF9NX2xlZnRt
b3N0KCkpCiAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfX3o7CiAgICAgICAgfQogICAgICBl
bHNlCiAgICAgICAgewogICAgICAgICAgX196ID0gX01fY3JlYXRlX25vZGUoX192KTsKICAgICAg
ICAgIF9TX3JpZ2h0KF9feSkgPSBfX3o7CgogICAgICAgICAgaWYgKF9feSA9PSBfTV9yaWdodG1v
c3QoKSkKICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfX3o7CiAgICAgICAgfQogICAgICBf
U19wYXJlbnQoX196KSA9IF9feTsKICAgICAgX1NfbGVmdChfX3opID0gMDsKICAgICAgX1Nfcmln
aHQoX196KSA9IDA7CiAgICAgIF9SYl90cmVlX3JlYmFsYW5jZShfX3osIF9NX2hlYWRlci0+X01f
cGFyZW50KTsKICAgICAgKytfTV9ub2RlX2NvdW50OwogICAgICByZXR1cm4gaXRlcmF0b3IoX196
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5h
bWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+OjppdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz46OgogICAgaW5zZXJ0X2VxdWFsKGNvbnN0IF9WYWwmIF9fdikKICAgIHsK
ICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0g
X01fcm9vdCgpOwogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgewogICAgICAgICAgX195
ID0gX194OwogICAgICAgICAgX194ID0gX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3Yp
LCBfU19rZXkoX194KSkgPwogICAgICAgICAgICBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gp
OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9NX2luc2VydChfX3gsIF9feSwgX192KTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9m
VmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IHBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz46Oml0ZXJhdG9yLAogICAgYm9vbD4KICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGluc2VydF91bmlxdWUoY29uc3QgX1ZhbCYgX192
KQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlw
ZSBfX3ggPSBfTV9yb290KCk7CiAgICAgIGJvb2wgX19jb21wID0gdHJ1ZTsKICAgICAgd2hpbGUg
KF9feCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9feSA9IF9feDsKICAgICAgICAgIF9fY29t
cCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkpOwogICAg
ICAgICAgX194ID0gX19jb21wID8gX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICAgICAg
ICB9CiAgICAgIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9feSk7CiAgICAgIGlmIChfX2NvbXAp
CiAgICAgICAgaWYgKF9faiA9PSBiZWdpbigpKQogICAgICAgICAgcmV0dXJuIHBhaXI8aXRlcmF0
b3IsYm9vbD4oX01faW5zZXJ0KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICAgICAgICBlbHNlCiAg
ICAgICAgICAtLV9fajsKICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfX2ouX01fbm9k
ZSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9v
bD4oX01faW5zZXJ0KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICAgICAgcmV0dXJuIHBhaXI8aXRl
cmF0b3IsYm9vbD4oX19qLCBmYWxzZSk7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5
LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFt
ZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwg
X1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvcgogICAgX1JiX3Ry
ZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKICAgIGluc2Vy
dF91bmlxdWUoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1ZhbCYgX192KQogICAgewogICAg
ICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkKICAgICAgICB7
CgogICAgICAgICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgICAgICAgICBfTV9rZXlfY29tcGFy
ZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkKICAgICAg
ICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01f
bm9kZSwgX192KTsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfdW5p
cXVlKF9fdikuZmlyc3Q7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25v
ZGUgPT0gX01faGVhZGVyKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoX01fa2V5X2NvbXBhcmUo
X1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICAgICAg
cmV0dXJuIF9NX2luc2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICAgICAgICB9CiAg
ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRp
b247CiAgICAgICAgICAtLV9fYmVmb3JlOwogICAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9T
X2tleShfX2JlZm9yZS5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKQogICAgICAgICAgICAg
ICYmIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSxfU19rZXkoX19wb3NpdGlvbi5f
TV9ub2RlKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX1NfcmlnaHQoX19iZWZv
cmUuX01fbm9kZSkgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19i
ZWZvcmUuX01fbm9kZSwgX192KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBy
ZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBf
X3YpOwoKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5z
ZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAg
dHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVl
PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAgX1Ji
X3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgaW5zZXJ0
X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKICAgIHsKICAgICAg
aWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXItPl9NX2xlZnQpCiAgICAgICAgewoK
ICAgICAgICAgIGlmIChzaXplKCkgPiAwICYmCiAgICAgICAgICAgICAgIV9NX2tleV9jb21wYXJl
KF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAg
ICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9u
b2RlLCBfX3YpOwoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIGluc2VydF9lcXVh
bChfX3YpOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9N
X2hlYWRlcikKICAgICAgICB7CgogICAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfS2V5T2ZW
YWx1ZSgpKF9fdiksIF9TX2tleShfTV9yaWdodG1vc3QoKSkpKQogICAgICAgICAgICByZXR1cm4g
X01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwogICAgICAgICAgZWxzZQogICAgICAg
ICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg
ICAgewogICAgICAgICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bvc2l0aW9uOwogICAgICAgICAg
LS1fX2JlZm9yZTsKICAgICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShf
X3YpLCBfU19rZXkoX19iZWZvcmUuX01fbm9kZSkpCiAgICAgICAgICAgICAgJiYgIV9NX2tleV9j
b21wYXJlKF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9NX25vZGUpID09IDApCiAgICAgICAgICAgICAgICBy
ZXR1cm4gX01faW5zZXJ0KDAsIF9fYmVmb3JlLl9NX25vZGUsIF9fdik7CiAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUs
IF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogICAgICAgIH0KICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAg
ICAgICAgICB0eXBlbmFtZSBfQ21wLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTxjbGFz
cyBfSUk+CiAgICAgIHZvaWQKICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxs
b2M+OjoKICAgICAgaW5zZXJ0X2VxdWFsKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0KQogICAgICB7
CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICAg
aW5zZXJ0X2VxdWFsKCpfX2ZpcnN0KTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5
LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9DbXAs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPGNsYXNzIF9JST4KICAgIHZvaWQKICAgIF9S
Yl90cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPjo6CiAgICBpbnNlcnRfdW5pcXVlKF9J
SSBfX2ZpcnN0LCBfSUkgX19sYXN0KQogICAgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpCiAgICAgICAgaW5zZXJ0X3VuaXF1ZSgqX19maXJzdCk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZh
bHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz46OmVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAgICB7CiAgICAgIF9MaW5rX3R5cGUg
X195ID0KICAgICAgICAoX0xpbmtfdHlwZSkgX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9lcmFzZShf
X3Bvc2l0aW9uLl9NX25vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX01faGVhZGVyLT5fTV9wYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9sZWZ0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+X01fcmln
aHQpOwogICAgICBkZXN0cm95X25vZGUoX195KTsKICAgICAgLS1fTV9ub2RlX2NvdW50OwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5
T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz46OnNpemVfdHlwZQogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz46OmVyYXNlKGNvbnN0IF9LZXkmIF9feCkKICAgIHsKICAgICAgcGFpcjxpdGVyYXRv
cixpdGVyYXRvcj4gX19wID0gZXF1YWxfcmFuZ2UoX194KTsKICAgICAgc2l6ZV90eXBlIF9fbiA9
IGRpc3RhbmNlKF9fcC5maXJzdCwgX19wLnNlY29uZCk7CiAgICAgIGVyYXNlKF9fcC5maXJzdCwg
X19wLnNlY29uZCk7CiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAgdHlwZW5hbWUg
X0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9W
YWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+OjpfTGlua190eXBlCiAgICBfUmJfdHJlZTxfS2V5
LF9WYWwsX0tvVixfQ29tcGFyZSxfQWxsb2M+OjoKICAgIF9NX2NvcHkoX0xpbmtfdHlwZSBfX3gs
IF9MaW5rX3R5cGUgX19wKQogICAgewoKICAgICAgX0xpbmtfdHlwZSBfX3RvcCA9IF9NX2Nsb25l
X25vZGUoX194KTsKICAgICAgX190b3AtPl9NX3BhcmVudCA9IF9fcDsKCiAgICAgIHRyeQogICAg
ICAgIHsKICAgICAgICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICAgICAgICBfX3RvcC0+X01f
cmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9fdG9wKTsKICAgICAgICAgIF9fcCA9IF9f
dG9wOwogICAgICAgICAgX194ID0gX1NfbGVmdChfX3gpOwoKICAgICAgICAgIHdoaWxlIChfX3gg
IT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9MaW5rX3R5cGUgX195ID0gX01fY2xv
bmVfbm9kZShfX3gpOwogICAgICAgICAgICAgIF9fcC0+X01fbGVmdCA9IF9feTsKICAgICAgICAg
ICAgICBfX3ktPl9NX3BhcmVudCA9IF9fcDsKICAgICAgICAgICAgICBpZiAoX194LT5fTV9yaWdo
dCkKICAgICAgICAgICAgICAgIF9feS0+X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCks
IF9feSk7CiAgICAgICAgICAgICAgX19wID0gX195OwogICAgICAgICAgICAgIF9feCA9IF9TX2xl
ZnQoX194KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAg
IHsKICAgICAgICAgIF9NX2VyYXNlKF9fdG9wKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fdG9wOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBl
bmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t
cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Ol9NX2VyYXNlKF9MaW5rX3R5cGUgX194KQogICAg
ewoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9NX2VyYXNlKF9T
X3JpZ2h0KF9feCkpOwogICAgICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfU19sZWZ0KF9feCk7CiAg
ICAgICAgICBkZXN0cm95X25vZGUoX194KTsKICAgICAgICAgIF9feCA9IF9feTsKICAgICAgICB9
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l
IF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPjo6CiAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAg
ICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IGJlZ2luKCkgJiYgX19sYXN0ID09IGVuZCgpKQogICAg
ICAgIGNsZWFyKCk7CiAgICAgIGVsc2UKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp
IGVyYXNlKF9fZmlyc3QrKyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVu
YW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w
YXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBlcmFzZShjb25zdCBfS2V5KiBfX2ZpcnN0
LCBjb25zdCBfS2V5KiBfX2xhc3QpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz
dCkKICAgICAgICBlcmFzZSgqX19maXJzdCsrKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlw
ZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9L
ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmZpbmQoY29uc3QgX0tl
eSYgX19rKQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xp
bmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAg
aWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgICAgIF9feSA9IF9f
eCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3Jp
Z2h0KF9feCk7CgogICAgICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOwogICAgICByZXR1
cm4gKF9faiA9PSBlbmQoKSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9k
ZSkpKSA/CiAgICAgICAgZW5kKCkgOiBfX2o7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9L
ZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVu
YW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5
LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKICAgIF9S
Yl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGZpbmQo
Y29uc3QgX0tleSYgX19rKSBjb25zdAogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hl
YWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgIHdoaWxlIChfX3gg
IT0gMCkKICAgICAgIHsKICAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwg
X19rKSkKICAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CiAgICAgICB9CiAgICAgY29uc3Rf
aXRlcmF0b3IgX19qID0gY29uc3RfaXRlcmF0b3IoX195KTsKICAgICByZXR1cm4gKF9faiA9PSBl
bmQoKSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/CiAgICAg
ICBlbmQoKSA6IF9fajsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUg
X1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpzaXplX3R5cGUKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGNvdW50KGNvbnN0IF9LZXkmIF9faykg
Y29uc3QKICAgIHsKICAgICAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IF9f
cCA9IGVxdWFsX3JhbmdlKF9fayk7CiAgICAgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX3Au
Zmlyc3QsIF9fcC5zZWNvbmQpOwogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAg
ICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1Ji
X3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAg
ICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBs
b3dlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0g
X01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxl
IChfX3ggIT0gMCkKICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2sp
KQogICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQog
ICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIHJldHVybiBpdGVyYXRvcihfX3kp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFt
ZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBsb3dlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNv
bnN0CiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190
eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICBpZiAo
IV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICAgICAgX195ID0gX194LCBf
X3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQo
X194KTsKCiAgICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAg
ICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUg
X1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9y
CiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAg
ICB1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195
ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdo
aWxlIChfX3ggIT0gMCkKICAgICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194
KSkpCiAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNl
CiAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9f
eSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVu
YW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIHVwcGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykg
Y29uc3QKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5r
X3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlm
IChfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkKICAgICAgICAgIF9feSA9IF9feCwg
X194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0
KF9feCk7CgogICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAg
ICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZQog
ICAgcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPjo6aXRlcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWws
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3I+CiAgICBfUmJfdHJlZTxfS2V5
LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBlcXVhbF9yYW5nZShjb25z
dCBfS2V5JiBfX2spCiAgICB7IHJldHVybiBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4obG93ZXJf
Ym91bmQoX19rKSwgdXBwZXJfYm91bmQoX19rKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tl
eSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t
cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogIGlubGluZQogIHBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8
X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46
OmNvbnN0X2l0ZXJhdG9yPgogIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBf
QWxsb2M+CiAgOjplcXVhbF9yYW5nZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CiAgewogICAgcmV0
dXJuIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9fayks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfYm91
bmQoX19rKSk7CiAgfQoKICBpbmxpbmUgaW50CiAgX19ibGFja19jb3VudChfUmJfdHJlZV9ub2Rl
X2Jhc2UqIF9fbm9kZSwgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3Jvb3QpCiAgewogICAgaWYgKF9f
bm9kZSA9PSAwKQogICAgICByZXR1cm4gMDsKICAgIGludCBfX3N1bSA9IDA7CiAgICBkbwogICAg
ICB7CiAgICAgICAgaWYgKF9fbm9kZS0+X01fY29sb3IgPT0gX01fYmxhY2spCiAgICAgICAgICAr
K19fc3VtOwogICAgICAgIGlmIChfX25vZGUgPT0gX19yb290KQogICAgICAgICAgYnJlYWs7CiAg
ICAgICAgX19ub2RlID0gX19ub2RlLT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgIHdoaWxlICgxKTsK
ICAgIHJldHVybiBfX3N1bTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1l
IF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJl
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBib29sCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X19yYl92ZXJpZnkoKSBjb25zdAogICAgewogICAgaWYg
KF9NX25vZGVfY291bnQgPT0gMCB8fCBiZWdpbigpID09IGVuZCgpKQogICAgICByZXR1cm4gX01f
bm9kZV9jb3VudCA9PSAwICYmIGJlZ2luKCkgPT0gZW5kKCkgJiYKICAgICAgICBfTV9oZWFkZXIt
Pl9NX2xlZnQgPT0gX01faGVhZGVyICYmIF9NX2hlYWRlci0+X01fcmlnaHQgPT0gX01faGVhZGVy
OwoKICAgIGludCBfX2xlbiA9IF9fYmxhY2tfY291bnQoX01fbGVmdG1vc3QoKSwgX01fcm9vdCgp
KTsKICAgIGZvciAoY29uc3RfaXRlcmF0b3IgX19pdCA9IGJlZ2luKCk7IF9faXQgIT0gZW5kKCk7
ICsrX19pdCkKICAgICAgewogICAgICAgIF9MaW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9f
aXQuX01fbm9kZTsKICAgICAgICBfTGlua190eXBlIF9fTCA9IF9TX2xlZnQoX194KTsKICAgICAg
ICBfTGlua190eXBlIF9fUiA9IF9TX3JpZ2h0KF9feCk7CgogICAgICAgIGlmIChfX3gtPl9NX2Nv
bG9yID09IF9NX3JlZCkKICAgICAgICAgIGlmICgoX19MICYmIF9fTC0+X01fY29sb3IgPT0gX01f
cmVkKQogICAgICAgICAgICAgIHx8IChfX1IgJiYgX19SLT5fTV9jb2xvciA9PSBfTV9yZWQpKQog
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIGlmIChfX0wgJiYgX01fa2V5X2NvbXBh
cmUoX1Nfa2V5KF9feCksIF9TX2tleShfX0wpKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICBpZiAoX19SICYmIF9NX2tleV9jb21wYXJlKF9TX2tleShfX1IpLCBfU19rZXkoX194KSkp
CiAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIGlmICghX19MICYmICFfX1IgJiYgX19i
bGFja19jb3VudChfX3gsIF9NX3Jvb3QoKSkgIT0gX19sZW4pCiAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgIH0KCiAgICBpZiAoX01fbGVmdG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6
Ol9TX21pbmltdW0oX01fcm9vdCgpKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKF9NX3Jp
Z2h0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfTV9yb290KCkpKQog
ICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQojIDY3ICIvdXNyL2lu
Y2x1ZGUvZysrL21hcCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tYXAuaCIg
MSAzCiMgNjYgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfbWFwLmgiIDMKbmFtZXNwYWNlIHN0
ZAp7CiMgNzcgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfbWFwLmgiIDMKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAgICAg
ICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KY2xh
c3MgbWFwCnsKCiAKICA7CgpwdWJsaWM6CgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBl
ZGVmIF9UcCBkYXRhX3R5cGU7CiAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgdHlwZWRlZiBw
YWlyPGNvbnN0IF9LZXksIF9UcD4gdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9j
b21wYXJlOwoKICBjbGFzcyB2YWx1ZV9jb21wYXJlCiAgICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248dmFsdWVfdHlwZSwgdmFsdWVfdHlwZSwgYm9vbD4gewogIGZyaWVuZCBjbGFzcyBtYXA8X0tl
eSxfVHAsX0NvbXBhcmUsX0FsbG9jPjsKICBwcm90ZWN0ZWQgOgogICAgX0NvbXBhcmUgY29tcDsK
ICAgIHZhbHVlX2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6IGNvbXAoX19jKSB7fQogIHB1YmxpYzoK
ICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5
cGUmIF9feSkgY29uc3QgewogICAgICByZXR1cm4gY29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7
CiAgICB9CiAgfTsKCnByaXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVf
dHlwZSwKICAgICAgICAgICAgICAgICAgIF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21w
YXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKICBfUmVwX3R5cGUgX01fdDsKcHVibGljOgogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVu
YW1lIF9SZXBfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVw
X3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUg
X1JlcF90eXBlOjpyZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlw
ZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxs
b2NhdG9yX3R5cGU7CgoKCiAgbWFwKCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBl
KCkpIHt9CiAgZXhwbGljaXQgbWFwKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAg
ICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBf
TV90KF9fY29tcCwgX19hKSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg
bWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDog
X01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF91bmlx
dWUoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgY29u
c3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs
bG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfdW5p
cXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KICBtYXAoY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5fTV90KSB7fQoKICBtYXA8X0tleSxfVHAsX0NvbXBh
cmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9B
bGxvYz4mIF9feCkKICB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQoKCgogIGtleV9jb21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29t
cCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVf
Y29tcGFyZShfTV90LmtleV9jb21wKCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgoKCgoKICBpdGVyYXRv
ciBiZWdpbigpIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQoKCgoKCiAgY29uc3RfaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KCgoKCgogIGl0ZXJhdG9yIGVu
ZCgpIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgoKICBjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoKICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdp
bigpIHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KCgoKCgoKICByZXZl
cnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiBfTV90LnJlbmQoKTsgfQoKCgoKCgogIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CgoK
ICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CgogIHNpemVfdHlw
ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KCiAgc2l6ZV90eXBlIG1heF9z
aXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CiMgMjIxICIvdXNyL2luY2x1
ZGUvZysrL2JpdHMvc3RsX21hcC5oIiAzCiAgX1RwJiBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBl
JiBfX2spIHsKICAgIGl0ZXJhdG9yIF9faSA9IGxvd2VyX2JvdW5kKF9fayk7CgogICAgaWYgKF9f
aSA9PSBlbmQoKSB8fCBrZXlfY29tcCgpKF9faywgKCpfX2kpLmZpcnN0KSkKICAgICAgX19pID0g
aW5zZXJ0KF9faSwgdmFsdWVfdHlwZShfX2ssIF9UcCgpKSk7CiAgICByZXR1cm4gKCpfX2kpLnNl
Y29uZDsKICB9CgogIHZvaWQgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194
KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KIyAyNDQgIi91c3IvaW5jbHVkZS9nKysvYml0cy9z
dGxfbWFwLmgiIDMKICBwYWlyPGl0ZXJhdG9yLGJvb2w+IGluc2VydChjb25zdCB2YWx1ZV90eXBl
JiBfX3gpCiAgICB7IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUoX194KTsgfQojIDI2MSAiL3Vz
ci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tYXAuaCIgMwogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRv
ciBwb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgeyByZXR1cm4gX01fdC5pbnNl
cnRfdW5pcXVlKHBvc2l0aW9uLCBfX3gpOyB9CgoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3Qp
OwogIH0KIyAyODQgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfbWFwLmgiIDMKICB2b2lkIGVy
YXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQojIDI5
NyAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tYXAuaCIgMwogIHNpemVfdHlwZSBlcmFzZShj
b25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmVyYXNlKF9feCk7IH0KIyAzMDkgIi91
c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfbWFwLmgiIDMKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9f
Zmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgIHsgX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3Qp
OyB9CgoKCgoKCiAgdm9pZCBjbGVhcigpIHsgX01fdC5jbGVhcigpOyB9CiMgMzMyICIvdXNyL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX21hcC5oIiAzCiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlw
ZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQojIDM0NSAiL3Vzci9pbmNsdWRlL2cr
Ky9iaXRzL3N0bF9tYXAuaCIgMwogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUm
IF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KIyAzNTQgIi91c3IvaW5jbHVk
ZS9nKysvYml0cy9zdGxfbWFwLmgiIDMKICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUm
IF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZmluZChfX3gpID09IF9NX3QuZW5kKCkgPyAw
IDogMTsKICB9CiMgMzY5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX21hcC5oIiAzCiAgaXRl
cmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90Lmxvd2Vy
X2JvdW5kKF9feCk7IH0KIyAzODIgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfbWFwLmgiIDMK
ICBjb25zdF9pdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7
CiAgICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KIyAzOTMgIi91c3IvaW5jbHVk
ZS9nKysvYml0cy9zdGxfbWFwLmgiIDMKICBpdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlf
dHlwZSYgX194KSB7cmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQojIDQwMyAiL3Vzci9p
bmNsdWRlL2crKy9iaXRzL3N0bF9tYXAuaCIgMwogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5k
KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5k
KF9feCk7CiAgfQojIDQyMyAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tYXAuaCIgMwogIHBh
aXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsK
ICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQojIDQ0MyAiL3Vzci9pbmNsdWRl
L2crKy9iaXRzL3N0bF9tYXAuaCIgMwogIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0
b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf
TV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBf
VDEsIGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0
IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNz
IF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChjb25z
dCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs
YXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsK
ICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJh
dG9yPChjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewog
IHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh
c3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewog
IHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Rw
LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29u
c3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4g
X195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IG1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9f
eCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgbWFwPF9LZXksX1RwLF9D
b21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tl
eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIHZvaWQgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194
LAogICAgICAgICAgICAgICAgIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsK
ICBfX3guc3dhcChfX3kpOwp9Cgp9CiMgNjggIi91c3IvaW5jbHVkZS9nKysvbWFwIiAyIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX211bHRpbWFwLmgiIDEgMwojIDY2ICIvdXNyL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUgPSBsZXNz
PF9LZXk+LAogICAgICAgICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tl
eSwgX1RwPiA+ID4KY2xhc3MgbXVsdGltYXA7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg
X1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3kpOwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1Rw
LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRp
bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSk7CiMgOTAgIi91c3IvaW5jbHVkZS9n
KysvYml0cy9zdGxfbXVsdGltYXAuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Rw
LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpjbGFzcyBtdWx0aW1hcAp7CgogCiAgOwoK
cHVibGljOgoKCgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9UcCBkYXRhX3R5
cGU7CiAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXks
IF9UcD4gdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwoKICBjbGFz
cyB2YWx1ZV9jb21wYXJlIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1
ZV90eXBlLCBib29sPiB7CiAgZnJpZW5kIGNsYXNzIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz47CiAgcHJvdGVjdGVkOgogICAgX0NvbXBhcmUgY29tcDsKICAgIHZhbHVlX2NvbXBh
cmUoX0NvbXBhcmUgX19jKSA6IGNvbXAoX19jKSB7fQogIHB1YmxpYzoKICAgIGJvb2wgb3BlcmF0
b3IoKShjb25zdCB2YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3Qg
ewogICAgICByZXR1cm4gY29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7CiAgICB9CiAgfTsKCnBy
aXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAg
ICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1Jl
cF90eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVw
X3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29u
c3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpy
ZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9y
ZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpp
dGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRl
cmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVy
c2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlw
ZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlw
ZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoK
ICBtdWx0aW1hcCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7IH0KICBl
eHBsaWNpdCBtdWx0aW1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBf
TV90KF9fY29tcCwgX19hKSB7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog
IG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkK
ICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2Vy
dF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICBjb25z
dCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2Nv
bXAsIF9fYSkgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgbXVsdGlt
YXAoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3Qo
X194Ll9NX3QpIHsgfQoKICBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9w
ZXJhdG9yPShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsK
ICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBh
cmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9j
b21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJldHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5
X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1
cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCgoKCgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1
cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKCiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBfTV90LmJlZ2luKCk7IH0KCgoKCgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9N
X3QuZW5kKCk7IH0KCgoKCgoKICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBf
TV90LmVuZCgpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBf
TV90LnJiZWdpbigpOyB9CgoKCgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBj
b25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciBy
ZW5kKCkgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQoKCiAgYm9vbCBlbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQoKCiAgc2l6ZV90eXBlIHNpemUoKSBjb25z
dCB7IHJldHVybiBfTV90LnNpemUoKTsgfQoKCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3Qg
eyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CgogIHZvaWQgc3dhcChtdWx0aW1hcDxfS2V5LF9U
cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQojIDI0MiAi
L3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgaXRlcmF0b3IgaW5zZXJ0
KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoX194KTsg
fQojIDI1OSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgaXRlcmF0
b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewog
ICAgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9fcG9zaXRpb24sIF9feCk7CiAgfQojIDI3MCAi
L3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19s
YXN0KTsKICB9CiMgMjg0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX211bHRpbWFwLmgiIDMK
ICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9u
KTsgfQojIDI5NyAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgc2l6
ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZXJhc2UoX194
KTsgfQojIDMwOSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdm9p
ZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJh
c2UoX19maXJzdCwgX19sYXN0KTsgfQoKCgoKCgogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIo
KTsgfQojIDMzMiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgaXRl
cmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsg
fQojIDM0NSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgY29uc3Rf
aXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZp
bmQoX194KTsgfQoKCgoKCgogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBj
b25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0KIyAzNjUgIi91c3IvaW5jbHVkZS9nKysv
Yml0cy9zdGxfbXVsdGltYXAuaCIgMwogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90
eXBlJiBfX3gpIHtyZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CiMgMzc4ICIvdXNyL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBjb25zdF9pdGVyYXRvciBsb3dlcl9i
b3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5sb3dlcl9i
b3VuZChfX3gpOwogIH0KCgoKCgoKICBpdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlw
ZSYgX194KSB7cmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQoKCgoKCgoKICBjb25zdF9p
dGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1
cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOwogIH0KIyA0MTMgIi91c3IvaW5jbHVkZS9nKysvYml0
cy9zdGxfbXVsdGltYXAuaCIgMwogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3Jhbmdl
KGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7
CiAgfQojIDQzMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgcGFp
cjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5
cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAg
ZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0Ex
PiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9D
MSwgX0ExPiYpOwogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBj
bGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChjb25zdCBtdWx0aW1hcDxfSzEsIF9U
MSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9L
MSwgX1QxLCBfQzEsIF9BMT4mKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAs
IGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkg
ewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXks
IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv
Yz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4m
IF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29t
cGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv
Yz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9D
b21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGlu
ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9D
b21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0Fs
bG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1Rw
LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+
CmlubGluZSB2b2lkIHN3YXAobXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194
LAogICAgICAgICAgICAgICAgIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f
eSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0KIyA2OSAiL3Vzci9pbmNsdWRlL2crKy9tYXAiIDIg
MwojIDIzICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1Jlc291cmNlcy9yZXNvdXJjZW9wdGlv
bnMuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvUmVzb3VyY2VzL3Jlc291
cmNlb3B0aW9uLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1Jlc291cmNl
cy9yZXNvdXJjZW9wdGlvbi5oIiAzCmNsYXNzIENMX1Jlc291cmNlT3B0aW9uCnsKCnB1YmxpYzoK
CgoKICAgICAgICBDTF9SZXNvdXJjZU9wdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgY29u
c3Qgc3RkOjpzdHJpbmcgJnZhbHVlKSA6IG5hbWUobmFtZSkKICAgICAgICB7CiAgICAgICAgICBu
dW1fdmFscyA9IDE7CiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaF9iYWNrKHZhbHVlKTsKICAg
ICAgICB9CgoKCiAgICAgICAgQ0xfUmVzb3VyY2VPcHRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJm5h
bWUpIDogbmFtZShuYW1lKQogICAgICAgIHsKICAgICAgICAgIG51bV92YWxzID0gMDsKICAgICAg
ICB9CgoKICAgICAgICBDTF9SZXNvdXJjZU9wdGlvbigpCiAgICAgICAgewogICAgICAgICAgbnVt
X3ZhbHMgPSAwOwogICAgICAgIH0KCiAgICAgICAgQ0xfUmVzb3VyY2VPcHRpb24oY29uc3QgQ0xf
UmVzb3VyY2VPcHRpb24gJm90aGVyKQogICAgICAgIHsKICAgICAgICAgICAgICAgIG51bV92YWxz
ID0gb3RoZXIubnVtX3ZhbHM7CiAgICAgICAgICAgICAgICBuYW1lID0gb3RoZXIubmFtZTsKICAg
ICAgICAgICAgICAgIGlmKG51bV92YWxzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0Owog
ICAgICAgICAgICAgICAgICAgICAgICBmb3IoaXQgPSBvdGhlci52YWx1ZXMuYmVnaW4oKTsgaXQg
IT0gb3RoZXIudmFsdWVzLmVuZCgpOyArK2l0KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2hfYmFjaygqaXQpOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCnB1Ymxp
YzoKCgogICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZnZXRfbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG5hbWU7IH0KCgoKCiAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmdldF92YWx1ZShpbnQgaT0w
KSBjb25zdCB7IHJldHVybiB2YWx1ZXNbaV07IH0KCgoKICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6
OnN0cmluZz4gJmdldF92YWx1ZXMoKSB7IHJldHVybiB2YWx1ZXM7IH0KCgpwdWJsaWM6CiAgICAg
ICAgdm9pZCBvcGVyYXRvciA9KCBjb25zdCBDTF9SZXNvdXJjZU9wdGlvbiAmb3RoZXIpCiAgICAg
ICAgewogICAgICAgICAgICAgICAgbnVtX3ZhbHMgPSBvdGhlci5udW1fdmFsczsKICAgICAgICAg
ICAgICAgIG5hbWUgPSBvdGhlci5uYW1lOwogICAgICAgICAgICAgICAgaWYobnVtX3ZhbHMpCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6
c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihp
dCA9IG90aGVyLnZhbHVlcy5iZWdpbigpOyBpdCAhPSBvdGhlci52YWx1ZXMuZW5kKCk7ICsraXQp
CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZXMucHVzaF9iYWNrKCppdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KICAgICAgICB9CgoKCgogICAgICAgIGludCBhZGRfdmFsdWUoY29uc3Qgc3Rk
OjpzdHJpbmcgJnZhbHVlKSB7IHZhbHVlcy5wdXNoX2JhY2sodmFsdWUpOyByZXR1cm4gbnVtX3Zh
bHMrKzsgfQoKCnByaXZhdGU6CiAgICAgICAgaW50IG51bV92YWxzOwogICAgICAgIHN0ZDo6c3Ry
aW5nIG5hbWU7CiAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHZhbHVlczsKfTsKIyAy
NSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9SZXNvdXJjZXMvcmVzb3VyY2VvcHRpb25zLmgi
IDIgMwoKY2xhc3MgQ0xfUmVzb3VyY2VNYW5hZ2VyOwoKCmNsYXNzIENMX1Jlc291cmNlT3B0aW9u
cwp7CgpwdWJsaWM6CgogICAgICAgIENMX1Jlc291cmNlT3B0aW9ucygpOwoKCiAgICAgICAgfkNM
X1Jlc291cmNlT3B0aW9ucygpOwoKCnB1YmxpYzoKCiAgICAgICAgc3RkOjptYXA8c3RkOjpzdHJp
bmcsIENMX1Jlc291cmNlT3B0aW9uPiAmZ2V0X29wdGlvbnMoKTsKCgogICAgICAgIENMX1Jlc291
cmNlT3B0aW9uICZnZXRfb3B0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKCgogICAgICAg
IGNvbnN0IENMX1Jlc291cmNlT3B0aW9uICZnZXRfb3B0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZu
YW1lKSBjb25zdDsKCgogICAgICAgIGJvb2wgZXhpc3RzKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1l
KTsKCgpwdWJsaWM6CgogICAgICAgIHZvaWQgYWRkKGNvbnN0IENMX1Jlc291cmNlT3B0aW9uICZv
cHRpb24pOwoKCnByaXZhdGU6CiAgICAgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIENMX1Jlc291
cmNlT3B0aW9uPiBvcHRpb25zOwp9OwojIDcwICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9jb3JlLmgi
IDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1Jlc291cmNlcy9yZXNvdXJjZXR5
cGVfYm9vbGVhbi5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9SZXNvdXJj
ZXMvcmVzb3VyY2V0eXBlX2Jvb2xlYW4uaCIgMwpjbGFzcyBDTF9SZXNvdXJjZURhdGFfQm9vbGVh
biA6IHB1YmxpYyBDTF9SZXNvdXJjZURhdGEKewoKcHVibGljOgoKICAgICAgICBDTF9SZXNvdXJj
ZURhdGFfQm9vbGVhbihjbGFzcyBDTF9SZXNvdXJjZSAmcmVzb3VyY2UpOwoKCnB1YmxpYzoKCiAg
ICAgICAgYm9vbCB2YWx1ZTsKfTsKCgpjbGFzcyBDTF9Cb29sZWFuCnsKCnB1YmxpYzoKCiAgICAg
ICAgQ0xfQm9vbGVhbihjb25zdCBzdGQ6OnN0cmluZyAmcmVzX2lkLCBDTF9SZXNvdXJjZU1hbmFn
ZXIgKnJlc291cmNlcykKICAgICAgICB7CiAgICAgICAgICAgICAgICBDTF9SZXNvdXJjZSByZXMg
PSByZXNvdXJjZXMtPmdldF9yZXNvdXJjZShyZXNfaWQpOwogICAgICAgICAgICAgICAgcmVzLmxv
YWQoKTsKICAgICAgICAgICAgICAgIENMX1Jlc291cmNlRGF0YV9Cb29sZWFuICpkYXRhID0gKENM
X1Jlc291cmNlRGF0YV9Cb29sZWFuICopIHJlcy5nZXRfZGF0YSgiYm9vbGVhbiIpOwogICAgICAg
ICAgICAgICAgdmFsdWUgPSBkYXRhLT52YWx1ZTsKICAgICAgICAgICAgICAgIHJlcy51bmxvYWQo
KTsKICAgICAgICB9CgoKICAgICAgICBDTF9Cb29sZWFuKGNvbnN0IHN0ZDo6c3RyaW5nICZyZXNf
aWQsIENMX1Jlc291cmNlTWFuYWdlciAqcmVzb3VyY2VzLCBib29sIGRlZl92YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgQ0xfUmVzb3VyY2UgcmVzID0gcmVzb3VyY2VzLT5nZXRfcmVzb3VyY2UocmVzX2lk
KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmxvYWQoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgQ0xfUmVzb3VyY2VEYXRhX0Jvb2xlYW4gKmRhdGEgPSAoQ0xfUmVzb3VyY2VEYXRhX0Jv
b2xlYW4gKikgcmVzLmdldF9kYXRhKCJib29sZWFuIik7CiAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gZGF0YS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy51bmxvYWQo
KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNhdGNoIChDTF9FcnJvciBlcnIp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmX3Zh
bHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgoKICAgICAgICBvcGVyYXRvciBib29s
KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAg
fQoKcHJpdmF0ZToKICAgICAgICBib29sIHZhbHVlOwp9OwojIDcyICIvdXNyL2luY2x1ZGUvQ2xh
bkxpYi9jb3JlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvUmVzb3VyY2Vz
L3Jlc291cmNldHlwZV9pbnRlZ2VyLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9D
b3JlL1Jlc291cmNlcy9yZXNvdXJjZXR5cGVfaW50ZWdlci5oIiAzCmNsYXNzIENMX1Jlc291cmNl
RGF0YV9JbnRlZ2VyIDogcHVibGljIENMX1Jlc291cmNlRGF0YQp7CgpwdWJsaWM6CgogICAgICAg
IENMX1Jlc291cmNlRGF0YV9JbnRlZ2VyKGNsYXNzIENMX1Jlc291cmNlICZyZXNvdXJjZSk7CgoK
cHVibGljOgoKICAgICAgICBpbnQgdmFsdWU7Cn07CgoKY2xhc3MgQ0xfSW50ZWdlcgp7CgpwdWJs
aWM6CgogICAgICAgIENMX0ludGVnZXIoY29uc3Qgc3RkOjpzdHJpbmcgJnJlc19pZCwgQ0xfUmVz
b3VyY2VNYW5hZ2VyICpyZXNvdXJjZXMpCiAgICAgICAgewogICAgICAgICAgICAgICAgQ0xfUmVz
b3VyY2UgcmVzID0gcmVzb3VyY2VzLT5nZXRfcmVzb3VyY2UocmVzX2lkKTsKICAgICAgICAgICAg
ICAgIHJlcy5sb2FkKCk7CiAgICAgICAgICAgICAgICBDTF9SZXNvdXJjZURhdGFfSW50ZWdlciAq
ZGF0YSA9IChDTF9SZXNvdXJjZURhdGFfSW50ZWdlciAqKSByZXMuZ2V0X2RhdGEoImludGVnZXIi
KTsKICAgICAgICAgICAgICAgIHZhbHVlID0gZGF0YS0+dmFsdWU7CiAgICAgICAgICAgICAgICBy
ZXMudW5sb2FkKCk7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfSW50ZWdlcihjb25zdCBzdGQ6OnN0
cmluZyAmcmVzX2lkLCBDTF9SZXNvdXJjZU1hbmFnZXIgKnJlc291cmNlcywgaW50IGRlZl92YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgQ0xfUmVzb3VyY2UgcmVzID0gcmVzb3VyY2VzLT5nZXRfcmVzb3Vy
Y2UocmVzX2lkKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmxvYWQoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgQ0xfUmVzb3VyY2VEYXRhX0ludGVnZXIgKmRhdGEgPSAoQ0xfUmVzb3Vy
Y2VEYXRhX0ludGVnZXIgKikgcmVzLmdldF9kYXRhKCJpbnRlZ2VyIik7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlID0gZGF0YS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
cy51bmxvYWQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNhdGNoIChDTF9F
cnJvciBlcnIpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gZGVmX3ZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgoKICAgICAgICBvcGVy
YXRvciBpbnQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsK
ICAgICAgICB9Cgpwcml2YXRlOgogICAgICAgIGludCB2YWx1ZTsKfTsKIyA3MyAiL3Vzci9pbmNs
dWRlL0NsYW5MaWIvY29yZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9S
ZXNvdXJjZXMvcmVzb3VyY2V0eXBlX3Jhdy5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL0NsYW5M
aWIvQ29yZS9SZXNvdXJjZXMvcmVzb3VyY2V0eXBlX3Jhdy5oIiAzCmNsYXNzIENMX1Jlc291cmNl
RGF0YV9SYXcgOiBwdWJsaWMgQ0xfUmVzb3VyY2VEYXRhCnsKCnB1YmxpYzoKCiAgICAgICAgQ0xf
UmVzb3VyY2VEYXRhX1JhdyhjbGFzcyBDTF9SZXNvdXJjZSAmcmVzb3VyY2UpOwoKCnB1YmxpYzoK
CiAgICAgICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgY2hhcj4gdmFsdWU7CgoKcHJpdmF0ZToKICAg
ICAgICB2b2lkIG9uX2xvYWRfZmlsZSgpOwogICAgICAgIHZvaWQgb25fbG9hZF9kYXRhZmlsZShj
bGFzcyBDTF9JbnB1dFNvdXJjZVByb3ZpZGVyICpwcm92aWRlcik7CiAgICAgICAgdm9pZCBvbl9z
YXZlX2RhdGFmaWxlKGNsYXNzIENMX091dHB1dFNvdXJjZVByb3ZpZGVyICpwcm92aWRlcik7CiAg
ICAgICAgdm9pZCBvbl91bmxvYWQoKTsKCiAgICAgICAgQ0xfU2xvdCBzbG90X2xvYWRfZmlsZTsK
ICAgICAgICBDTF9TbG90IHNsb3RfbG9hZF9kYXRhZmlsZTsKICAgICAgICBDTF9TbG90IHNsb3Rf
c2F2ZV9kYXRhZmlsZTsKICAgICAgICBDTF9TbG90IHNsb3RfdW5sb2FkOwp9OwoKCmNsYXNzIENM
X1Jhdwp7CgpwdWJsaWM6CgogICAgICAgIENMX1Jhdyhjb25zdCBzdGQ6OnN0cmluZyAmcmVzX2lk
LCBDTF9SZXNvdXJjZU1hbmFnZXIgKnJlc291cmNlcykKICAgICAgICB7CiAgICAgICAgICAgICAg
ICByZXMgPSByZXNvdXJjZXMtPmdldF9yZXNvdXJjZShyZXNfaWQpOwogICAgICAgICAgICAgICAg
cmVzLmxvYWQoKTsKICAgICAgICAgICAgICAgIGRhdGEgPSAoQ0xfUmVzb3VyY2VEYXRhX1JhdyAq
KSByZXMuZ2V0X2RhdGEoInJhdyIpOwogICAgICAgIH0KCgogICAgICAgIH5DTF9SYXcoKQogICAg
ICAgIHsKICAgICAgICAgICAgICAgIHJlcy51bmxvYWQoKTsKICAgICAgICB9CgoKICAgICAgICBz
dGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiAmZ2V0X2RhdGEoKQogICAgICAgIHsKICAgICAgICAg
ICAgICAgIHJldHVybiBkYXRhLT52YWx1ZTsKICAgICAgICB9CgoKICAgICAgICBjb25zdCBzdGQ6
OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiAmZ2V0X2RhdGEoKSBjb25zdAogICAgICAgIHsKICAgICAg
ICAgICAgICAgIHJldHVybiBkYXRhLT52YWx1ZTsKICAgICAgICB9Cgpwcml2YXRlOgogICAgICAg
IENMX1Jlc291cmNlIHJlczsKICAgICAgICBDTF9SZXNvdXJjZURhdGFfUmF3ICpkYXRhOwp9OwoK
CmNsYXNzIENMX0lucHV0U291cmNlX1JhdyA6IHB1YmxpYyBDTF9SYXcsIHB1YmxpYyBDTF9JbnB1
dFNvdXJjZV9NZW1vcnkKewpwdWJsaWM6CgogICAgICAgIENMX0lucHV0U291cmNlX1Jhdyhjb25z
dCBzdGQ6OnN0cmluZyAmcmVzX2lkLCBDTF9SZXNvdXJjZU1hbmFnZXIgKnJlc291cmNlcykKICAg
ICAgICAgICAgICAgIDogQ0xfUmF3KHJlc19pZCwgcmVzb3VyY2VzKSwgQ0xfSW5wdXRTb3VyY2Vf
TWVtb3J5KHN0ZDo6c3RyaW5nKChjaGFyICopICZDTF9SYXc6OmdldF9kYXRhKClbMF0sIENMX1Jh
dzo6Z2V0X2RhdGEoKS5zaXplKCkpKQogICAgICAgIHsKICAgICAgICB9Cn07CiMgNzUgIi91c3Iv
aW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29y
ZS9SZXNvdXJjZXMvZGF0YWZpbGVfY29tcGlsZXIuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9D
bGFuTGliL0NvcmUvUmVzb3VyY2VzL2RhdGFmaWxlX2NvbXBpbGVyLmgiIDMKY2xhc3MgQ0xfRGF0
YWZpbGVDb21waWxlcgp7CnB1YmxpYzoKCgoKCiAgICAgICAgc3RhdGljIHZvaWQgd3JpdGUoCiAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmc2NyX2ZpbGUsCiAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyAmZGF0X2ZpbGUpOwp9OwojIDc2ICIvdXNyL2luY2x1ZGUvQ2xh
bkxpYi9jb3JlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL01hdGgvY2xf
dmVjdG9yLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL01hdGgvY2xfdmVj
dG9yLmgiIDMKY2xhc3MgQ0xfVmVjdG9yCnsKcHVibGljOgoKCiAgICAgICAgZmxvYXQgeDsKCiAg
ICAgICAgZmxvYXQgeTsKCiAgICAgICAgZmxvYXQgejsKCiAgICAgICAgZmxvYXQgdzsKCnB1Ymxp
YzoKCgoKICAgICAgICBDTF9WZWN0b3IoZmxvYXQgeCA9IDAuMCwgZmxvYXQgeSA9IDAuMCwgZmxv
YXQgeiA9IDAuMCwgZmxvYXQgdyA9IDEuMCk7CgoKCiAgICAgICAgQ0xfVmVjdG9yKGNvbnN0IENM
X1ZlY3RvciAmb3RoZXIpOwoKCgoKICAgICAgICBmbG9hdCBub3JtKCkgY29uc3Q7CgoKICAgICAg
ICB2b2lkIG5vcm1hbGl6ZSgpOwoKCgoKICAgICAgICBmbG9hdCBkb3QoY29uc3QgQ0xfVmVjdG9y
JiB2KSBjb25zdDsKCgoKCiAgICAgICAgZmxvYXQgYW5nbGUoY29uc3QgQ0xfVmVjdG9yJiB2KSBj
b25zdDsKCgoKCiAgICAgICAgQ0xfVmVjdG9yIGNyb3NzKGNvbnN0IENMX1ZlY3RvciYgdikgY29u
c3Q7CgoKCgoKICAgICAgICBDTF9WZWN0b3Igcm90YXRlKGZsb2F0IGFuZ2xlLCBjb25zdCBDTF9W
ZWN0b3ImIGEpIGNvbnN0OwoKCiAgICAgICAgdm9pZCByb3VuZCgpOwoKCgoKICAgICAgICBDTF9W
ZWN0b3Igb3BlcmF0b3IgKiAoZmxvYXQgcyk7CgoKCiAgICAgICAgZnJpZW5kIENMX1ZlY3RvciBv
cGVyYXRvciAqIChmbG9hdCBzLCBjb25zdCBDTF9WZWN0b3ImIHYpOwoKCiAgICAgICAgdm9pZCBv
cGVyYXRvciArPSAoY29uc3QgQ0xfVmVjdG9yJiB2KTsKCgogICAgICAgIHZvaWQgb3BlcmF0b3Ig
LT0gKGNvbnN0IENMX1ZlY3RvciYgdik7CgoKICAgICAgICB2b2lkIG9wZXJhdG9yICo9IChmbG9h
dCBzKTsKCgogICAgICAgIENMX1ZlY3RvciBvcGVyYXRvciArIChjb25zdCBDTF9WZWN0b3ImIHYp
OwoKCiAgICAgICAgQ0xfVmVjdG9yIG9wZXJhdG9yIC0gKGNvbnN0IENMX1ZlY3RvciYgdik7CgoK
ICAgICAgICBDTF9WZWN0b3Igb3BlcmF0b3IgLSAoKTsKCgogICAgICAgIENMX1ZlY3RvciYgb3Bl
cmF0b3IgPSAoY29uc3QgQ0xfVmVjdG9yJiB2KTsKCgoKCiAgICAgICAgaW50IG9wZXJhdG9yID09
IChjb25zdCBDTF9WZWN0b3ImIHYpIGNvbnN0OwoKCgoKICAgICAgICBpbnQgb3BlcmF0b3IgIT0g
KGNvbnN0IENMX1ZlY3RvciYgdikgY29uc3Q7CgoKCgogICAgICAgIGZsb2F0JiBvcGVyYXRvciBb
XSAoaW50IG4pOwoKCiAgICAgICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3IgPDwgKHN0
ZDo6b3N0cmVhbSYsIENMX1ZlY3RvciYgdik7Cn07CiMgNzggIi91c3IvaW5jbHVkZS9DbGFuTGli
L2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9NYXRoL3ZlY3RvcjIu
aCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvTWF0aC92ZWN0b3IyLmgiIDMK
Y2xhc3MgQ0xfVmVjdG9yMgp7CnB1YmxpYzoKCgogICAgICAgIENMX1ZlY3RvcjIoKTsKCgoKCiAg
ICAgICAgQ0xfVmVjdG9yMihmbG9hdCBmWCwgZmxvYXQgZlkpOwoKCiAgICAgICAgQ0xfVmVjdG9y
MihmbG9hdCBhZkNvb3JkaW5hdGVbMl0pOwoKCgogICAgICAgIENMX1ZlY3RvcjIoY29uc3QgQ0xf
VmVjdG9yMiYgcmtWZWN0b3IpOwojIDU3ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL01hdGgv
dmVjdG9yMi5oIiAzCiAgICAgICAgZmxvYXQmIG9wZXJhdG9yW10gKGludCBpKSBjb25zdDsKCgog
ICAgICAgIG9wZXJhdG9yIGZsb2F0KiAoKTsKCgogICAgICAgIENMX1ZlY3RvcjImIG9wZXJhdG9y
PSAoY29uc3QgQ0xfVmVjdG9yMiYgcmtWZWN0b3IpOwoKCgoKCiAgICAgICAgYm9vbCBvcGVyYXRv
cj09IChjb25zdCBDTF9WZWN0b3IyJiBya1ZlY3RvcikgY29uc3Q7CgoKCiAgICAgICAgYm9vbCBv
cGVyYXRvciE9IChjb25zdCBDTF9WZWN0b3IyJiBya1ZlY3RvcikgY29uc3Q7CgoKCiAgICAgICAg
Ym9vbCBvcGVyYXRvcjwgKGNvbnN0IENMX1ZlY3RvcjImIHJrVmVjdG9yKSBjb25zdDsKCgoKICAg
ICAgICBib29sIG9wZXJhdG9yPD0gKGNvbnN0IENMX1ZlY3RvcjImIHJrVmVjdG9yKSBjb25zdDsK
CgoKICAgICAgICBib29sIG9wZXJhdG9yPiAoY29uc3QgQ0xfVmVjdG9yMiYgcmtWZWN0b3IpIGNv
bnN0OwoKCgogICAgICAgIGJvb2wgb3BlcmF0b3I+PSAoY29uc3QgQ0xfVmVjdG9yMiYgcmtWZWN0
b3IpIGNvbnN0OwoKCgoKICAgICAgICBDTF9WZWN0b3IyIG9wZXJhdG9yKyAoY29uc3QgQ0xfVmVj
dG9yMiYgcmtWZWN0b3IpIGNvbnN0OwoKCiAgICAgICAgQ0xfVmVjdG9yMiBvcGVyYXRvci0gKGNv
bnN0IENMX1ZlY3RvcjImIHJrVmVjdG9yKSBjb25zdDsKCgogICAgICAgIENMX1ZlY3RvcjIgb3Bl
cmF0b3IqIChmbG9hdCBmU2NhbGFyKSBjb25zdDsKCgogICAgICAgIENMX1ZlY3RvcjIgb3BlcmF0
b3IvIChmbG9hdCBmU2NhbGFyKSBjb25zdDsKCgoKICAgICAgICBDTF9WZWN0b3IyIG9wZXJhdG9y
LSAoKSBjb25zdDsKCgoKCgoKICAgICAgICBDTF9WZWN0b3IyJiBvcGVyYXRvcis9IChjb25zdCBD
TF9WZWN0b3IyJiBya1ZlY3Rvcik7CgoKICAgICAgICBDTF9WZWN0b3IyJiBvcGVyYXRvci09IChj
b25zdCBDTF9WZWN0b3IyJiBya1ZlY3Rvcik7CgoKICAgICAgICBDTF9WZWN0b3IyJiBvcGVyYXRv
cio9IChmbG9hdCBmU2NhbGFyKTsKCgogICAgICAgIENMX1ZlY3RvcjImIG9wZXJhdG9yLz0gKGZs
b2F0IGZTY2FsYXIpOwoKCgoKICAgICAgICB2b2lkIHNldF9mdXp6KCkgeyBGVVpaID0gMS4wOyB9
CgoKICAgICAgICB2b2lkIGRpc2FibGVfZnV6eigpIHsgRlVaWiA9IDAuMDsgfQoKCgogICAgICAg
IGJvb2wgZ2V0X2Z1enooKSB7IHJldHVybiAoRlVaWiA+IDAuMCk/IHRydWUgOiBmYWxzZSA7fQoK
CgoKICAgICAgICBmbG9hdCBsZW5ndGgoKSBjb25zdDsKCgoKICAgICAgICBmbG9hdCBzcXVhcmVk
X2xlbmd0aCgpIGNvbnN0OwoKCiAgICAgICAgZmxvYXQgZG90KGNvbnN0IENMX1ZlY3RvcjImIHJr
VmVjdG9yKSBjb25zdDsKCgogICAgICAgIGZsb2F0IHVuaXRpemUoZmxvYXQgZlRvbGVyYW5jZSA9
IDFlLTA2Zik7CgoKCgogICAgICAgIENMX1ZlY3RvcjIgY3Jvc3MoKSBjb25zdDsKCgoKICAgICAg
ICBDTF9WZWN0b3IyIHVuaXRfY3Jvc3MoKSBjb25zdDsKCgoKCgoKICAgICAgICBmbG9hdCB4LCB5
OwoKCiAgICAgICAgc3RhdGljIGNvbnN0IENMX1ZlY3RvcjIgWkVSTzsKICAgICAgICBzdGF0aWMg
Y29uc3QgQ0xfVmVjdG9yMiBVTklUX1g7CiAgICAgICAgc3RhdGljIGNvbnN0IENMX1ZlY3RvcjIg
VU5JVF9ZOwoKCiAgICAgICAgc3RhdGljIGZsb2F0IEZVWlo7Cn07CgojIDEgIi91c3IvaW5jbHVk
ZS9DbGFuTGliL0NvcmUvTWF0aC92ZWN0b3IyLmlubCIgMSAzCiMgMTggIi91c3IvaW5jbHVkZS9D
bGFuTGliL0NvcmUvTWF0aC92ZWN0b3IyLmlubCIgMwppbmxpbmUgQ0xfVmVjdG9yMjo6Q0xfVmVj
dG9yMiAoKQp7CgoKfQoKaW5saW5lIGZsb2F0JiBDTF9WZWN0b3IyOjpvcGVyYXRvcltdKGludCBp
KSBjb25zdAp7CiAgICByZXR1cm4gKChmbG9hdCopdGhpcylbaV07Cn0KCmlubGluZSBDTF9WZWN0
b3IyOjpvcGVyYXRvciBmbG9hdCooKQp7CiAgICByZXR1cm4gKGZsb2F0Kil0aGlzOwp9Cgppbmxp
bmUgZmxvYXQgQ0xfVmVjdG9yMjo6c3F1YXJlZF9sZW5ndGgoKSBjb25zdAp7CiAgICByZXR1cm4g
eCp4ICsgeSp5Owp9CiMgMTc4ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL01hdGgvdmVjdG9y
Mi5oIiAyIDMKIyA3OSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvY29yZS5oIiAyIDMKIyAxICIvdXNy
L2luY2x1ZGUvQ2xhbkxpYi9Db3JlL01hdGgvYmV6aWVyLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1
ZGUvQ2xhbkxpYi9Db3JlL01hdGgvYmV6aWVyLmgiIDMKY2xhc3MgQ0xfQmV6aWVyQ3VydmUKewpw
cm90ZWN0ZWQ6CiAgICAgICAgQ0xfVmVjdG9yICpjdXJ2ZTsKICAgICAgICBDTF9WZWN0b3IgKmNw
OwoKICAgICAgICBpbnQgc3RlcHMsIGNzOwogICAgICAgIGJvb2wgc3RlcHBpbmc7CgogICAgICAg
IHZpcnR1YWwgdm9pZCBtYWtlX2N1cnZlKCk7CgpwdWJsaWM6CgoKCgoKCiAgICAgICAgQ0xfQmV6
aWVyQ3VydmUoY29uc3QgQ0xfVmVjdG9yICpjcCwgaW50IGNzLCBpbnQgc3RlcHMsIGJvb2wgc3Rl
cHBpbmcgPSB0cnVlKTsKCgogICAgICAgIHZpcnR1YWwgfkNMX0JlemllckN1cnZlKCk7CgoKCgog
ICAgICAgIHZpcnR1YWwgaW50IGdldF9zdGVwcygpIGNvbnN0IHsgcmV0dXJuIHN0ZXBzOyB9CgoK
CiAgICAgICAgdmlydHVhbCBpbnQgZ2V0X2NzKCkgY29uc3QgeyByZXR1cm4gY3M7IH0KCgoKICAg
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0X3N0ZXBwaW5nKCkgY29uc3QgeyByZXR1cm4gc3RlcHBpbmc7
IH0KCgoKCiAgICAgICAgdmlydHVhbCBmbG9hdCBnZXRfbGVuZ3RoKGludCBzZWdtZW50ID0gLTEp
IGNvbnN0OwoKCgogICAgICAgIHZpcnR1YWwgQ0xfVmVjdG9yKiBnZXRfY3VydmUoKSBjb25zdCB7
IHJldHVybiBjdXJ2ZTsgfQoKCgogICAgICAgIHZpcnR1YWwgQ0xfVmVjdG9yKiBnZXRfY29udHJv
bF9wb2ludHMoKSBjb25zdCB7IHJldHVybiBjcDsgfQoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0X3N0ZXBzKGludCBzdGVwcyk7CgoKCiAgICAgICAgdmlydHVhbCB2b2lkIHNldF9zdGVwcGlu
Zyhib29sIHN0ZXBwaW5nKTsKCgoKCgogICAgICAgIENMX1ZlY3RvciBvcGVyYXRvciBbXSAoaW50
IG4pIHsgcmV0dXJuIGN1cnZlW25dOyB9Cn07CiMgMTQwICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9D
b3JlL01hdGgvYmV6aWVyLmgiIDMKY2xhc3MgQ0xfQmV6aWVyU3VyZmFjZQp7CnByb3RlY3RlZDoK
ICAgICAgICBDTF9WZWN0b3IgKnN1cmZhY2U7CiAgICAgICAgQ0xfVmVjdG9yICpjcDsKCiAgICAg
ICAgaW50IHhzdGVwcywgeXN0ZXBzOwogICAgICAgIGludCB4cywgeXM7CiAgICAgICAgYm9vbCBz
dGVwcGluZzsKCiAgICAgICAgdmlydHVhbCBDTF9WZWN0b3IgZXZhbHVhdGUoZmxvYXQsIGZsb2F0
LCBpbnQpOwogICAgICAgIHZpcnR1YWwgdm9pZCBtYWtlX3N1cmZhY2UoKTsKCnB1YmxpYzoKIyAx
NjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvTWF0aC9iZXppZXIuaCIgMwogICAgICAgIENM
X0JlemllclN1cmZhY2UoY29uc3QgQ0xfVmVjdG9yICpjcCwgaW50IHhzLCBpbnQgeXMsIGludCB4
c3RlcHMsIGludCB5c3RlcHMsIGJvb2wgc3RlcHBpbmcgPSB0cnVlKTsKCgogICAgICAgIHZpcnR1
YWwgfkNMX0JlemllclN1cmZhY2UoKTsKCgoKCiAgICAgICAgdmlydHVhbCBpbnQgZ2V0X3hzdGVw
cygpIGNvbnN0IHsgcmV0dXJuIHhzdGVwczsgfQoKICAgICAgICB2aXJ0dWFsIGludCBnZXRfeXN0
ZXBzKCkgY29uc3QgeyByZXR1cm4geXN0ZXBzOyB9CgoKCgoKICAgICAgICB2aXJ0dWFsIGludCBn
ZXRfeHMoKSBjb25zdCB7IHJldHVybiB4czsgfQoKCgogICAgICAgIHZpcnR1YWwgaW50IGdldF95
cygpIGNvbnN0IHsgcmV0dXJuIHlzOyB9CgoKCiAgICAgICAgdmlydHVhbCBib29sIGdldF9zdGVw
cGluZygpIGNvbnN0IHsgcmV0dXJuIHN0ZXBwaW5nOyB9CiMgMTk2ICIvdXNyL2luY2x1ZGUvQ2xh
bkxpYi9Db3JlL01hdGgvYmV6aWVyLmgiIDMKICAgICAgICB2aXJ0dWFsIENMX1ZlY3RvciogZ2V0
X3N1cmZhY2UoKSBjb25zdCB7IHJldHVybiBzdXJmYWNlOyB9CgoKCiAgICAgICAgdmlydHVhbCBD
TF9WZWN0b3IqIGdldF9jb250cm9sX3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIGNwOyB9CgoKCgog
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRfeHN0ZXBzKGludCB4c3RlcHMpOwoKCgogICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRfeXN0ZXBzKGludCB5c3RlcHMpOwoKCgogICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRfc3RlcHBpbmcoYm9vbCBzdGVwcGluZyk7CgoKCgoKICAgICAgICBDTF9WZWN0b3Igb3Bl
cmF0b3IgW10gKGludCBuKSB7IHJldHVybiBzdXJmYWNlW25dOyB9Cn07CiMgODAgIi91c3IvaW5j
bHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9N
YXRoL21hdGguaCIgMSAzCiMgODEgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMg
MSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9NYXRoL3JlY3QuaCIgMSAzCiMgMjcgIi91c3Iv
aW5jbHVkZS9DbGFuTGliL0NvcmUvTWF0aC9yZWN0LmgiIDMKY2xhc3MgQ0xfUmVjdAp7CgpwdWJs
aWM6CgogICAgICAgIGludCB4MTsKCiAgICAgICAgaW50IHkxOwoKICAgICAgICBpbnQgeDI7Cgog
ICAgICAgIGludCB5MjsKCnB1YmxpYzoKCgoKCgoKICAgICAgICBDTF9SZWN0KGludCBueDEgPSAw
LCBpbnQgbnkxID0gMCwgaW50IG54MiA9IDAsIGludCBueTIgPSAwKSA6IHgxKG54MSksIHkxKG55
MSksIHgyKG54MiksIHkyKG55MikgeyB9CgoKCiAgICAgICAgQ0xfUmVjdChjb25zdCBDTF9SZWN0
ICZyZWN0KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPngxID0gcmVjdC54MTsKICAg
ICAgICAgICAgICAgIHRoaXMtPngyID0gcmVjdC54MjsKICAgICAgICAgICAgICAgIHRoaXMtPnkx
ID0gcmVjdC55MTsKICAgICAgICAgICAgICAgIHRoaXMtPnkyID0gcmVjdC55MjsKICAgICAgICB9
OwojIDY2ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL01hdGgvcmVjdC5oIiAzCiAgICAgICAg
c3RhdGljIENMX1JlY3QgY2VudGVyKGludCBjZW50ZXJfeCwgaW50IGNlbnRlcl95LCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIENMX1JlY3Qo
CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlcl94IC0gd2lkdGgvMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgY2VudGVyX3kgLSBoZWlnaHQvMiwKICAgICAgICAgICAgICAgICAgICAgICAg
Y2VudGVyX3ggKyB3aWR0aC8yLAogICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJfeSArIGhl
aWdodC8yKTsKICAgICAgICB9CiMgODIgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvTWF0aC9y
ZWN0LmgiIDMKICAgICAgICBzdGF0aWMgQ0xfUmVjdCBsZWZ0KGludCB4LCBpbnQgeSwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBib29sIGNlbnRlcl92ZXJ0ID0gdHJ1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgICAgICByZXR1cm4gQ0xfUmVjdCgKICAgICAgICAgICAgICAgICAgICAgICAgeCAtIHdp
ZHRoLAogICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJfdmVydCA/ICh5IC0gaGVpZ2h0LzIp
IDogeSwKICAgICAgICAgICAgICAgICAgICAgICAgeCwKICAgICAgICAgICAgICAgICAgICAgICAg
Y2VudGVyX3ZlcnQgPyAoeSArIGhlaWdodC8yKSA6IHkgKyBoZWlnaHQpOwogICAgICAgIH0KIyA5
OCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9NYXRoL3JlY3QuaCIgMwogICAgICAgIHN0YXRp
YyBDTF9SZWN0IHJpZ2h0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29s
IGNlbnRlcl92ZXJ0ID0gdHJ1ZSkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gQ0xf
UmVjdCgKICAgICAgICAgICAgICAgICAgICAgICAgeCwKICAgICAgICAgICAgICAgICAgICAgICAg
Y2VudGVyX3ZlcnQgPyAoeSAtIGhlaWdodC8yKSA6IHksCiAgICAgICAgICAgICAgICAgICAgICAg
IHggKyB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyX3ZlcnQgPyAoeSArIGhl
aWdodC8yKSA6IHkgKyBoZWlnaHQpOwogICAgICAgIH0KCgoKCiAgICAgICAgdm9pZCBtb3ZlKGlu
dCBkZWx0YV94LCBpbnQgZGVsdGFfeSkKICAgICAgICB7CiAgICAgICAgICAgICAgICB4MSArPSBk
ZWx0YV94OwogICAgICAgICAgICAgICAgeDIgKz0gZGVsdGFfeDsKICAgICAgICAgICAgICAgIHkx
ICs9IGRlbHRhX3k7CiAgICAgICAgICAgICAgICB5MiArPSBkZWx0YV95OwogICAgICAgIH0KCgog
ICAgICAgIHZvaWQgbm9ybWFsaXplKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoeDEg
PiB4MikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRlbXAg
PSB4MjsKICAgICAgICAgICAgICAgICAgICAgICAgeDIgPSB4MTsKICAgICAgICAgICAgICAgICAg
ICAgICAgeDEgPSB0ZW1wOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICh5
MSA+IHkyKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGVt
cCA9IHkyOwogICAgICAgICAgICAgICAgICAgICAgICB5MiA9IHkxOwogICAgICAgICAgICAgICAg
ICAgICAgICB5MSA9IHRlbXA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCgoKCgogICAg
ICAgIGJvb2wgaW5zaWRlKGludCB4LCBpbnQgeSkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAg
ICAgICByZXR1cm4geCA+PSB4MSAmJiB5ID49IHkxICYmIHggPCB4MiAmJiB5IDwgeTI7CiAgICAg
ICAgfQoKCgogICAgICAgIGludCBnZXRfd2lkdGgoKSBjb25zdCB7IHJldHVybiB4MiAtIHgxOyB9
OwoKCgogICAgICAgIGludCBnZXRfaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4geTIgLSB5MTsgfTsK
CgogICAgICAgIHZvaWQgY2xlYXIoKSB7IHgxID0geTEgPSB4MiA9IHkyID0gMDsgfTsKCgoKICAg
ICAgICBib29sIG9wZXJhdG9yID09IChjb25zdCBDTF9SZWN0ICZyZWN0KSBjb25zdDsKfTsKIyA4
MiAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvY29yZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xh
bkxpYi9Db3JlL01hdGgvc2l6ZS5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29y
ZS9NYXRoL3NpemUuaCIgMwpjbGFzcyBDTF9TaXplCnsKcHVibGljOgoKCiAgICAgICAgQ0xfU2l6
ZSgpIDogd2lkdGgoMCksIGhlaWdodCgwKSB7IH0KCgoKCiAgICAgICAgQ0xfU2l6ZShpbnQgdywg
aW50IGgpIDogd2lkdGgodyksIGhlaWdodChoKSB7IH0KCgoKICAgICAgICBpbnQgd2lkdGg7CgoK
ICAgICAgICBpbnQgaGVpZ2h0Owp9OwojIDgzICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9jb3JlLmgi
IDIgMwojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvTWF0aC9wb2ludC5oIiAxIDMKIyAy
OCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9NYXRoL3BvaW50LmgiIDMKY2xhc3MgQ0xfUG9p
bnQKewpwdWJsaWM6CgoKICAgICAgICBDTF9Qb2ludCgpIDogeCgwKSwgeSgwKSB7IH0KCgogICAg
ICAgIENMX1BvaW50KGludCB4MSwgaW50IHkxKSA6IHgoeDEpLCB5KHkxKSB7IH0KCgoKICAgICAg
ICBpbnQgeCwgeTsKfTsKIyA4NCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvY29yZS5oIiAyIDMKIyAz
MiAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvTWlrTW9kL3N0cmVhbWVkX21pa21vZF9zYW1wbGUuaCIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU291bmQvc3RyZWFtX3NvdW5kcHJvdmlkZXIu
aCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NvdW5kL3N0cmVhbV9zb3VuZHByb3Zp
ZGVyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Tb3VuZC9zb3VuZGZvcm1hdC5oIiAx
IDMKIyAyMyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU291bmQvc291bmRmb3JtYXQuaCIgMwplbnVt
IFNvdW5kRm9ybWF0CnsKICAgICAgICBzZl84Yml0X3NpZ25lZCwKICAgICAgICBzZl84Yml0X3Np
Z25lZF9zdGVyZW8sCiAgICAgICAgc2ZfMTZiaXRfc2lnbmVkLAogICAgICAgIHNmXzE2Yml0X3Np
Z25lZF9zdGVyZW8KfTsKIyAyMyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU291bmQvc3RyZWFtX3Nv
dW5kcHJvdmlkZXIuaCIgMiAzCgpjbGFzcyBDTF9TdHJlYW1Tb3VuZFByb3ZpZGVyX1Nlc3Npb247
CgoKCmNsYXNzIENMX1N0cmVhbVNvdW5kUHJvdmlkZXIKewpwdWJsaWM6CgoKICAgICAgICB2aXJ0
dWFsIH5DTF9TdHJlYW1Tb3VuZFByb3ZpZGVyKCkgeyA7IH0KCgoKCgogICAgICAgIHZpcnR1YWwg
Q0xfU3RyZWFtU291bmRQcm92aWRlcl9TZXNzaW9uICpiZWdpbl9zZXNzaW9uKCk9MDsKCgoKCiAg
ICAgICAgdmlydHVhbCB2b2lkIGVuZF9zZXNzaW9uKENMX1N0cmVhbVNvdW5kUHJvdmlkZXJfU2Vz
c2lvbiAqc2Vzc2lvbik9MDsKfTsKCgoKY2xhc3MgQ0xfU3RyZWFtU291bmRQcm92aWRlcl9TZXNz
aW9uCnsKcHVibGljOgoKCiAgICAgICAgdmlydHVhbCB+Q0xfU3RyZWFtU291bmRQcm92aWRlcl9T
ZXNzaW9uKCkgeyA7IH0KCgoKCiAgICAgICAgdmlydHVhbCBib29sIGVvZigpIGNvbnN0ID0wOwoK
CiAgICAgICAgdmlydHVhbCB2b2lkIHN0b3AoKT0wOwoKCgogICAgICAgIHZpcnR1YWwgYm9vbCBw
bGF5KCk9MDsKCgoKCiAgICAgICAgdmlydHVhbCBib29sIHNldF9wb3NpdGlvbihpbnQgcG9zKT0w
OwoKCgoKCgoKICAgICAgICB2aXJ0dWFsIGludCBnZXRfZGF0YSh2b2lkICpkYXRhX3B0ciwgaW50
IGRhdGFfcmVxdWVzdGVkKT0wOwoKCgogICAgICAgIHZpcnR1YWwgaW50IGdldF9mcmVxdWVuY3ko
KSBjb25zdCA9MDsKCgoKICAgICAgICB2aXJ0dWFsIFNvdW5kRm9ybWF0IGdldF9mb3JtYXQoKSBj
b25zdCA9MDsKfTsKIyAzMyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvTWlrTW9kL3N0cmVhbWVkX21p
a21vZF9zYW1wbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU291bmQvc291bmRi
dWZmZXIuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NvdW5kL3NvdW5kYnVmZmVy
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Tb3VuZC9zb3VuZGJ1ZmZlcl9zZXNzaW9u
LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Tb3VuZC9zb3VuZGJ1ZmZlcl9zZXNz
aW9uLmgiIDMKY2xhc3MgQ0xfU291bmRDYXJkOwpjbGFzcyBDTF9Tb3VuZFBsYXlCYWNrRGVzYzsK
Y2xhc3MgQ0xfU291bmRCdWZmZXJfU2Vzc2lvbgojIDQwICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9T
b3VuZC9zb3VuZGJ1ZmZlcl9zZXNzaW9uLmgiIDMKewpwdWJsaWM6CgoKICAgICAgICBDTF9Tb3Vu
ZEJ1ZmZlcl9TZXNzaW9uKCkgeyBoYW5kbGUgPSBfX251bGw7IGNhcmQgPSBfX251bGw7IH0KCgog
ICAgICAgIENMX1NvdW5kQnVmZmVyX1Nlc3Npb24odm9pZCAqaGFuZGxlLCBDTF9Tb3VuZENhcmQg
Kl9jYXJkKTsKCgogICAgICAgIENMX1NvdW5kQnVmZmVyX1Nlc3Npb24oY29uc3QgQ0xfU291bmRC
dWZmZXJfU2Vzc2lvbiAmY29weSk7CgoKICAgICAgICB+Q0xfU291bmRCdWZmZXJfU2Vzc2lvbigp
OwoKCgogICAgICAgIENMX1NvdW5kQnVmZmVyX1Nlc3Npb24mIG9wZXJhdG9yPShjb25zdCBDTF9T
b3VuZEJ1ZmZlcl9TZXNzaW9uICZzZXNzaW9uKTsKCgoKICAgICAgICB2b2lkICpnZXRfaGFuZGxl
KCkgY29uc3QgeyByZXR1cm4gaGFuZGxlOyB9CgoKCgogICAgICAgIENMX1NvdW5kQ2FyZCAqZ2V0
X2NhcmQoKSBjb25zdCB7IHJldHVybiBjYXJkOyB9CgoKCiAgICAgICAgaW50IGdldF9wb3NpdGlv
bigpIGNvbnN0OwoKCgoKCgoKICAgICAgICBmbG9hdCBnZXRfcG9zaXRpb25fcmVsYXRpdmUoKSBj
b25zdDsKCgoKCiAgICAgICAgYm9vbCBzZXRfcG9zaXRpb24oaW50IG5ld19wb3MpOwoKCgoKCgoK
ICAgICAgICBib29sIHNldF9wb3NpdGlvbl9yZWxhdGl2ZShmbG9hdCBuZXdfcG9zKTsKCgoKCgog
ICAgICAgIGludCBnZXRfbGVuZ3RoKCkgY29uc3Q7CgoKCiAgICAgICAgaW50IGdldF9mcmVxdWVu
Y3koKSBjb25zdDsKCgoKCiAgICAgICAgYm9vbCBzZXRfZnJlcXVlbmN5KGludCBuZXdfZnJlcSk7
CgoKCgoKICAgICAgICBmbG9hdCBnZXRfdm9sdW1lKCkgY29uc3Q7CgoKCgoKICAgICAgICBmbG9h
dCBnZXRfcGFuKCkgY29uc3Q7CgoKCgoKCgogICAgICAgIGJvb2wgc2V0X3ZvbHVtZShmbG9hdCBu
ZXdfdm9sdW1lKTsKCgoKCgoKCiAgICAgICAgYm9vbCBzZXRfcGFuKGZsb2F0IG5ld19wYW4pOwoK
CiAgICAgICAgdm9pZCBwbGF5KCk7CgoKICAgICAgICB2b2lkIHN0b3AoKTsKCgogICAgICAgIGJv
b2wgaXNfcGxheWluZygpOwoKCgogICAgICAgIHZvaWQgc2V0X2xvb3BpbmcoYm9vbCBsb29wKTsK
CgoKCiAgICAgICAgdm9pZCBhZGRfZmlsdGVyKGNsYXNzIENMX1NvdW5kRmlsdGVyICpmaWx0ZXIs
IGJvb2wgZGVsZXRlX2ZpbHRlciA9IGZhbHNlKTsKCgogICAgICAgIHZvaWQgcmVtb3ZlX2ZpbHRl
cihjbGFzcyBDTF9Tb3VuZEZpbHRlciAqZmlsdGVyKTsKCgpwcml2YXRlOgogICAgICAgIHZvaWQg
KmhhbmRsZTsKICAgICAgICBDTF9Tb3VuZENhcmQgKmNhcmQ7Cn07CiMgMjMgIi91c3IvaW5jbHVk
ZS9DbGFuTGliL1NvdW5kL3NvdW5kYnVmZmVyLmgiIDIgMwoKCgpjbGFzcyBDTF9TdGF0aWNTb3Vu
ZFByb3ZpZGVyOwpjbGFzcyBDTF9TdHJlYW1Tb3VuZFByb3ZpZGVyOwpjbGFzcyBDTF9Tb3VuZENh
cmQ7CmNsYXNzIENMX1NvdW5kQnVmZmVyX0dlbmVyaWM7CgpjbGFzcyBDTF9Tb3VuZEJ1ZmZlcgoj
IDQ3ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Tb3VuZC9zb3VuZGJ1ZmZlci5oIiAzCnsKcHVibGlj
OgoKCiAgICAgICAgdmlydHVhbCB+Q0xfU291bmRCdWZmZXIoKTsKCgogICAgICAgIHN0YXRpYyBD
TF9Tb3VuZEJ1ZmZlciAqbG9hZCgKICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZy
ZXNfaWQsCiAgICAgICAgICAgICAgICBDTF9SZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIpOwoKCgoK
ICAgICAgICBzdGF0aWMgQ0xfU291bmRCdWZmZXIgKmNyZWF0ZSgKICAgICAgICAgICAgICAgIENM
X1N0YXRpY1NvdW5kUHJvdmlkZXIgKnByb3ZpZGVyLAogICAgICAgICAgICAgICAgYm9vbCBkZWxl
dGVfcHJvdmlkZXI9ZmFsc2UpOwoKCgoKICAgICAgICBzdGF0aWMgQ0xfU291bmRCdWZmZXIgKmNy
ZWF0ZSgKICAgICAgICAgICAgICAgIENMX1N0cmVhbVNvdW5kUHJvdmlkZXIgKnByb3ZpZGVyLAog
ICAgICAgICAgICAgICAgYm9vbCBkZWxldGVfcHJvdmlkZXI9ZmFsc2UpOwoKCiAgICAgICAgQ0xf
U291bmRCdWZmZXIoKTsKCgogICAgICAgIENMX1NvdW5kQnVmZmVyKAogICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjpzdHJpbmcgJnJlc19pZCwKICAgICAgICAgICAgICAgIENMX1Jlc291cmNlTWFu
YWdlciAqbWFuYWdlcik7CgoKCiAgICAgICAgQ0xfU291bmRCdWZmZXIoCiAgICAgICAgICAgICAg
ICBDTF9TdGF0aWNTb3VuZFByb3ZpZGVyICpwcm92aWRlciwKICAgICAgICAgICAgICAgIGJvb2wg
ZGVsZXRlX3Byb3ZpZGVyPWZhbHNlKTsKCgoKICAgICAgICBDTF9Tb3VuZEJ1ZmZlcigKICAgICAg
ICAgICAgICAgIENMX1N0cmVhbVNvdW5kUHJvdmlkZXIgKnByb3ZpZGVyLAogICAgICAgICAgICAg
ICAgYm9vbCBkZWxldGVfcHJvdmlkZXI9ZmFsc2UpOwoKCgogICAgICAgIENMX1NvdW5kQnVmZmVy
KGNvbnN0IENMX1NvdW5kQnVmZmVyICZjb3B5KTsKCgoKICAgICAgICB2b2lkIG9wZXJhdG9yID0o
Y29uc3QgQ0xfU291bmRCdWZmZXIgJmNvcHkpOwoKCgoKCiAgICAgICAgQ0xfU3RhdGljU291bmRQ
cm92aWRlciAqZ2V0X3N0YXRpY19wcm92aWRlcigpIGNvbnN0OwoKCgoKICAgICAgICBDTF9TdHJl
YW1Tb3VuZFByb3ZpZGVyICpnZXRfc3RyZWFtX3Byb3ZpZGVyKCkgY29uc3Q7CgoKCgogICAgICAg
IGludCBnZXRfbGVuZ3RoKCkgY29uc3Q7CgoKCiAgICAgICAgaW50IGdldF9udW1fc2FtcGxlcygp
IGNvbnN0OwoKCgogICAgICAgIGludCBnZXRfZnJlcXVlbmN5KCkgY29uc3Q7CgoKCgoKICAgICAg
ICBib29sIHNldF9mcmVxdWVuY3koaW50IG5ld19mcmVxKTsKCgoKICAgICAgICBmbG9hdCBnZXRf
dm9sdW1lKCkgY29uc3Q7CgoKCgogICAgICAgIGJvb2wgc2V0X3ZvbHVtZShmbG9hdCBuZXdfdm9s
dW1lKTsKCgoKICAgICAgICBmbG9hdCBnZXRfcGFuKCkgY29uc3Q7CgoKCgogICAgICAgIGJvb2wg
c2V0X3BhbihmbG9hdCBuZXdfcGFuKTsKCgoKCiAgICAgICAgYm9vbCBpc19wbGF5aW5nKENMX1Nv
dW5kQnVmZmVyX1Nlc3Npb24gKipzZXNzaW9uPV9fbnVsbCwgQ0xfU291bmRDYXJkICpjYXJkPV9f
bnVsbCkgY29uc3Q7CgoKICAgICAgICB2b2lkIHN0b3AoQ0xfU291bmRDYXJkICpjYXJkPV9fbnVs
bCk7CgoKCgoKCiAgICAgICAgQ0xfU291bmRCdWZmZXJfU2Vzc2lvbiBwbGF5KGJvb2wgbG9vcGlu
Zz1mYWxzZSwgQ0xfU291bmRDYXJkICpjYXJkPV9fbnVsbCk7CgoKCgoKICAgICAgICBDTF9Tb3Vu
ZEJ1ZmZlcl9TZXNzaW9uIHByZXBhcmUoYm9vbCBsb29waW5nPWZhbHNlLCBDTF9Tb3VuZENhcmQg
KmNhcmQ9X19udWxsKTsKCgpwdWJsaWM6CiAgICAgICAgQ0xfU291bmRCdWZmZXJfR2VuZXJpYyAq
aW1wbDsKICAgICAgICBDTF9SZXNvdXJjZSByZXNvdXJjZTsKfTsKIyAzNCAiL3Vzci9pbmNsdWRl
L0NsYW5MaWIvTWlrTW9kL3N0cmVhbWVkX21pa21vZF9zYW1wbGUuaCIgMiAzCgojIDEgIi91c3Iv
aW5jbHVkZS9taWttb2QuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9taWttb2QuaCIgMwpleHRl
cm4gIkMiIHsKIyA2NiAiL3Vzci9pbmNsdWRlL21pa21vZC5oIiAzCiBleHRlcm4gbG9uZyBNaWtN
b2RfR2V0VmVyc2lvbih2b2lkKTsKIyA4MyAiL3Vzci9pbmNsdWRlL21pa21vZC5oIiAzCnR5cGVk
ZWYgY2hhciBDSEFSOwojIDEwMiAiL3Vzci9pbmNsdWRlL21pa21vZC5oIiAzCnR5cGVkZWYgc2ln
bmVkIGNoYXIgU0JZVEU7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBVQllURTsKdHlwZWRlZiBzaWdu
ZWQgc2hvcnQgU1dPUkQ7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgVVdPUkQ7CnR5cGVkZWYgc2ln
bmVkIGxvbmcgU0xPTkc7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUxPTkc7CnR5cGVkZWYgaW50
IEJPT0w7CgoKCgoKCgplbnVtIHsKICAgICAgICBNTUVSUl9PUEVOSU5HX0ZJTEUgPSAxLAogICAg
ICAgIE1NRVJSX09VVF9PRl9NRU1PUlksCiAgICAgICAgTU1FUlJfRFlOQU1JQ19MSU5LSU5HLAoK
ICAgICAgICBNTUVSUl9TQU1QTEVfVE9PX0JJRywKICAgICAgICBNTUVSUl9PVVRfT0ZfSEFORExF
UywKICAgICAgICBNTUVSUl9VTktOT1dOX1dBVkVfVFlQRSwKCiAgICAgICAgTU1FUlJfTE9BRElO
R19QQVRURVJOLAogICAgICAgIE1NRVJSX0xPQURJTkdfVFJBQ0ssCiAgICAgICAgTU1FUlJfTE9B
RElOR19IRUFERVIsCiAgICAgICAgTU1FUlJfTE9BRElOR19TQU1QTEVJTkZPLAogICAgICAgIE1N
RVJSX05PVF9BX01PRFVMRSwKICAgICAgICBNTUVSUl9OT1RfQV9TVFJFQU0sCiAgICAgICAgTU1F
UlJfTUVEX1NZTlRIU0FNUExFUywKICAgICAgICBNTUVSUl9JVFBBQ0tfSU5WQUxJRF9EQVRBLAoK
ICAgICAgICBNTUVSUl9ERVRFQ1RJTkdfREVWSUNFLAogICAgICAgIE1NRVJSX0lOVkFMSURfREVW
SUNFLAogICAgICAgIE1NRVJSX0lOSVRJQUxJWklOR19NSVhFUiwKICAgICAgICBNTUVSUl9PUEVO
SU5HX0FVRElPLAogICAgICAgIE1NRVJSXzhCSVRfT05MWSwKICAgICAgICBNTUVSUl8xNkJJVF9P
TkxZLAogICAgICAgIE1NRVJSX1NURVJFT19PTkxZLAogICAgICAgIE1NRVJSX1VMQVcsCiAgICAg
ICAgTU1FUlJfTk9OX0JMT0NLLAoKICAgICAgICBNTUVSUl9BRl9BVURJT19QT1JULAoKICAgICAg
ICBNTUVSUl9BSVhfQ09ORklHX0lOSVQsCiAgICAgICAgTU1FUlJfQUlYX0NPTkZJR19DT05UUk9M
LAogICAgICAgIE1NRVJSX0FJWF9DT05GSUdfU1RBUlQsCgogICAgICAgIE1NRVJSX0dVU19TRVRU
SU5HUywKICAgICAgICBNTUVSUl9HVVNfUkVTRVQsCiAgICAgICAgTU1FUlJfR1VTX1RJTUVSLAoK
ICAgICAgICBNTUVSUl9IUF9TRVRTQU1QTEVTSVpFLAogICAgICAgIE1NRVJSX0hQX1NFVFNQRUVE
LAogICAgICAgIE1NRVJSX0hQX0NIQU5ORUxTLAogICAgICAgIE1NRVJSX0hQX0FVRElPX09VVFBV
VCwKICAgICAgICBNTUVSUl9IUF9BVURJT19ERVNDLAogICAgICAgIE1NRVJSX0hQX0JVRkZFUlNJ
WkUsCgogICAgICAgIE1NRVJSX09TU19TRVRGUkFHTUVOVCwKICAgICAgICBNTUVSUl9PU1NfU0VU
U0FNUExFU0laRSwKICAgICAgICBNTUVSUl9PU1NfU0VUU1RFUkVPLAogICAgICAgIE1NRVJSX09T
U19TRVRTUEVFRCwKCiAgICAgICAgTU1FUlJfU0dJX1NQRUVELAogICAgICAgIE1NRVJSX1NHSV8x
NkJJVCwKICAgICAgICBNTUVSUl9TR0lfOEJJVCwKICAgICAgICBNTUVSUl9TR0lfU1RFUkVPLAog
ICAgICAgIE1NRVJSX1NHSV9NT05PLAoKICAgICAgICBNTUVSUl9TVU5fSU5JVCwKCiAgICAgICAg
TU1FUlJfT1MyX01JWFNFVFVQLAogICAgICAgIE1NRVJSX09TMl9TRU1BUEhPUkUsCiAgICAgICAg
TU1FUlJfT1MyX1RJTUVSLAogICAgICAgIE1NRVJSX09TMl9USFJFQUQsCgogICAgICAgIE1NRVJS
X0RTX1BSSU9SSVRZLAogICAgICAgIE1NRVJSX0RTX0JVRkZFUiwKICAgICAgICBNTUVSUl9EU19G
T1JNQVQsCiAgICAgICAgTU1FUlJfRFNfTk9USUZZLAogICAgICAgIE1NRVJSX0RTX0VWRU5ULAog
ICAgICAgIE1NRVJSX0RTX1RIUkVBRCwKICAgICAgICBNTUVSUl9EU19VUERBVEUsCgogICAgICAg
IE1NRVJSX1dJTk1NX0hBTkRMRSwKICAgICAgICBNTUVSUl9XSU5NTV9BTExPQ0FURUQsCiAgICAg
ICAgTU1FUlJfV0lOTU1fREVWSUNFSUQsCiAgICAgICAgTU1FUlJfV0lOTU1fRk9STUFULAogICAg
ICAgIE1NRVJSX1dJTk1NX1VOS05PV04sCgogICAgICAgIE1NRVJSX01BQ19TUEVFRCwKICAgICAg
ICBNTUVSUl9NQUNfU1RBUlQsCgogICAgICAgIE1NRVJSX01BWAp9OwoKCgoKCnR5cGVkZWYgdm9p
ZCAoTWlrTW9kX2hhbmRsZXIpKHZvaWQpOwp0eXBlZGVmIE1pa01vZF9oYW5kbGVyICpNaWtNb2Rf
aGFuZGxlcl90OwoKIGV4dGVybiBpbnQgTWlrTW9kX2Vycm5vOwogZXh0ZXJuIEJPT0wgTWlrTW9k
X2NyaXRpY2FsOwogZXh0ZXJuIGNoYXIgKk1pa01vZF9zdHJlcnJvcihpbnQpOwoKIGV4dGVybiBN
aWtNb2RfaGFuZGxlcl90IE1pa01vZF9SZWdpc3RlckVycm9ySGFuZGxlcihNaWtNb2RfaGFuZGxl
cl90KTsKCgoKCgpzdHJ1Y3QgTURSSVZFUjsKCiBleHRlcm4gdm9pZCBNaWtNb2RfUmVnaXN0ZXJB
bGxEcml2ZXJzKHZvaWQpOwoKIGV4dGVybiBDSEFSKiBNaWtNb2RfSW5mb0RyaXZlcih2b2lkKTsK
IGV4dGVybiB2b2lkIE1pa01vZF9SZWdpc3RlckRyaXZlcihzdHJ1Y3QgTURSSVZFUiopOwogZXh0
ZXJuIGludCBNaWtNb2RfRHJpdmVyRnJvbUFsaWFzKENIQVIqKTsKCiBleHRlcm4gQk9PTCBNaWtN
b2RfSW5pdChDSEFSKik7CiBleHRlcm4gdm9pZCBNaWtNb2RfRXhpdCh2b2lkKTsKIGV4dGVybiBC
T09MIE1pa01vZF9SZXNldChDSEFSKik7CiBleHRlcm4gQk9PTCBNaWtNb2RfU2V0TnVtVm9pY2Vz
KGludCxpbnQpOwogZXh0ZXJuIEJPT0wgTWlrTW9kX0FjdGl2ZSh2b2lkKTsKIGV4dGVybiBCT09M
IE1pa01vZF9FbmFibGVPdXRwdXQodm9pZCk7CiBleHRlcm4gdm9pZCBNaWtNb2RfRGlzYWJsZU91
dHB1dCh2b2lkKTsKIGV4dGVybiB2b2lkIE1pa01vZF9VcGRhdGUodm9pZCk7CgogZXh0ZXJuIEJP
T0wgTWlrTW9kX0luaXRUaHJlYWRzKHZvaWQpOwogZXh0ZXJuIHZvaWQgTWlrTW9kX0xvY2sodm9p
ZCk7CiBleHRlcm4gdm9pZCBNaWtNb2RfVW5sb2NrKHZvaWQpOwoKCgoKCnR5cGVkZWYgc3RydWN0
IE1SRUFERVIgewogICAgICAgIEJPT0wgKCpTZWVrKShzdHJ1Y3QgTVJFQURFUiosbG9uZyxpbnQp
OwogICAgICAgIGxvbmcgKCpUZWxsKShzdHJ1Y3QgTVJFQURFUiopOwogICAgICAgIEJPT0wgKCpS
ZWFkKShzdHJ1Y3QgTVJFQURFUiosdm9pZCosc2l6ZV90KTsKICAgICAgICBpbnQgKCpHZXQpKHN0
cnVjdCBNUkVBREVSKik7CiAgICAgICAgQk9PTCAoKkVvZikoc3RydWN0IE1SRUFERVIqKTsKfSBN
UkVBREVSOwoKdHlwZWRlZiBzdHJ1Y3QgTVdSSVRFUiB7CiAgICAgICAgQk9PTCAoKlNlZWspKHN0
cnVjdCBNV1JJVEVSKixsb25nLGludCk7CiAgICAgICAgbG9uZyAoKlRlbGwpKHN0cnVjdCBNV1JJ
VEVSKik7CiAgICAgICAgQk9PTCAoKldyaXRlKShzdHJ1Y3QgTVdSSVRFUiosdm9pZCosc2l6ZV90
KTsKICAgICAgICBCT09MICgqUHV0KShzdHJ1Y3QgTVdSSVRFUiosaW50KTsKfSBNV1JJVEVSOwoj
IDI5OCAiL3Vzci9pbmNsdWRlL21pa21vZC5oIiAzCnR5cGVkZWYgc3RydWN0IFNBTVBMRSB7CiAg
ICAgICAgU1dPUkQgcGFubmluZzsKICAgICAgICBVTE9ORyBzcGVlZDsKICAgICAgICBVQllURSB2
b2x1bWU7CiAgICAgICAgVVdPUkQgaW5mbGFnczsKICAgICAgICBVV09SRCBmbGFnczsKICAgICAg
ICBVTE9ORyBsZW5ndGg7CiAgICAgICAgVUxPTkcgbG9vcHN0YXJ0OwogICAgICAgIFVMT05HIGxv
b3BlbmQ7CiAgICAgICAgVUxPTkcgc3VzYmVnaW47CiAgICAgICAgVUxPTkcgc3VzZW5kOwoKCiAg
ICAgICAgVUJZVEUgZ2xvYnZvbDsKICAgICAgICBVQllURSB2aWJmbGFnczsKICAgICAgICBVQllU
RSB2aWJ0eXBlOwogICAgICAgIFVCWVRFIHZpYnN3ZWVwOwogICAgICAgIFVCWVRFIHZpYmRlcHRo
OwogICAgICAgIFVCWVRFIHZpYnJhdGU7CiAgICAgICAgQ0hBUiogc2FtcGxlbmFtZTsKCgogICAg
ICAgIFVXT1JEIGF2aWJwb3M7CiAgICAgICAgVUJZVEUgZGl2ZmFjdG9yOwogICAgICAgIFVMT05H
IHNlZWtwb3M7CiAgICAgICAgU1dPUkQgaGFuZGxlOwp9IFNBTVBMRTsKCgoKIGV4dGVybiBTQU1Q
TEUgKlNhbXBsZV9Mb2FkKENIQVIqKTsKIGV4dGVybiBTQU1QTEUgKlNhbXBsZV9Mb2FkRlAoRklM
RSopOwogZXh0ZXJuIFNBTVBMRSAqU2FtcGxlX0xvYWRHZW5lcmljKE1SRUFERVIqKTsKIGV4dGVy
biB2b2lkIFNhbXBsZV9GcmVlKFNBTVBMRSopOwogZXh0ZXJuIFNCWVRFIFNhbXBsZV9QbGF5KFNB
TVBMRSosVUxPTkcsVUJZVEUpOwoKIGV4dGVybiB2b2lkIFZvaWNlX1NldFZvbHVtZShTQllURSxV
V09SRCk7CiBleHRlcm4gVVdPUkQgVm9pY2VfR2V0Vm9sdW1lKFNCWVRFKTsKIGV4dGVybiB2b2lk
IFZvaWNlX1NldEZyZXF1ZW5jeShTQllURSxVTE9ORyk7CiBleHRlcm4gVUxPTkcgVm9pY2VfR2V0
RnJlcXVlbmN5KFNCWVRFKTsKIGV4dGVybiB2b2lkIFZvaWNlX1NldFBhbm5pbmcoU0JZVEUsVUxP
TkcpOwogZXh0ZXJuIFVMT05HIFZvaWNlX0dldFBhbm5pbmcoU0JZVEUpOwogZXh0ZXJuIHZvaWQg
Vm9pY2VfUGxheShTQllURSxTQU1QTEUqLFVMT05HKTsKIGV4dGVybiB2b2lkIFZvaWNlX1N0b3Ao
U0JZVEUpOwogZXh0ZXJuIEJPT0wgVm9pY2VfU3RvcHBlZChTQllURSk7CiBleHRlcm4gU0xPTkcg
Vm9pY2VfR2V0UG9zaXRpb24oU0JZVEUpOwogZXh0ZXJuIFVMT05HIFZvaWNlX1JlYWxWb2x1bWUo
U0JZVEUpOwojIDM1OSAiL3Vzci9pbmNsdWRlL21pa21vZC5oIiAzCnR5cGVkZWYgc3RydWN0IEVO
VlBUIHsKICAgICAgICBTV09SRCBwb3M7CiAgICAgICAgU1dPUkQgdmFsOwp9IEVOVlBUOwoKCgoK
CnR5cGVkZWYgc3RydWN0IElOU1RSVU1FTlQgewogICAgICAgIENIQVIqIGluc25hbWU7CgogICAg
ICAgIFVCWVRFIGZsYWdzOwogICAgICAgIFVXT1JEIHNhbXBsZW51bWJlclsxMjBdOwogICAgICAg
IFVCWVRFIHNhbXBsZW5vdGVbMTIwXTsKCiAgICAgICAgVUJZVEUgbm5hdHlwZTsKICAgICAgICBV
QllURSBkY2E7CiAgICAgICAgVUJZVEUgZGN0OwogICAgICAgIFVCWVRFIGdsb2J2b2w7CiAgICAg
ICAgVVdPUkQgdm9sZmFkZTsKICAgICAgICBTV09SRCBwYW5uaW5nOwoKICAgICAgICBVQllURSBw
aXRwYW5zZXA7CiAgICAgICAgVUJZVEUgcGl0cGFuY2VudGVyOwogICAgICAgIFVCWVRFIHJ2b2x2
YXI7CiAgICAgICAgVUJZVEUgcnBhbnZhcjsKCgogICAgICAgIFVCWVRFIHZvbGZsZzsKICAgICAg
ICBVQllURSB2b2xwdHM7CiAgICAgICAgVUJZVEUgdm9sc3VzYmVnOwogICAgICAgIFVCWVRFIHZv
bHN1c2VuZDsKICAgICAgICBVQllURSB2b2xiZWc7CiAgICAgICAgVUJZVEUgdm9sZW5kOwogICAg
ICAgIEVOVlBUIHZvbGVudlszMl07CgogICAgICAgIFVCWVRFIHBhbmZsZzsKICAgICAgICBVQllU
RSBwYW5wdHM7CiAgICAgICAgVUJZVEUgcGFuc3VzYmVnOwogICAgICAgIFVCWVRFIHBhbnN1c2Vu
ZDsKICAgICAgICBVQllURSBwYW5iZWc7CiAgICAgICAgVUJZVEUgcGFuZW5kOwogICAgICAgIEVO
VlBUIHBhbmVudlszMl07CgogICAgICAgIFVCWVRFIHBpdGZsZzsKICAgICAgICBVQllURSBwaXRw
dHM7CiAgICAgICAgVUJZVEUgcGl0c3VzYmVnOwogICAgICAgIFVCWVRFIHBpdHN1c2VuZDsKICAg
ICAgICBVQllURSBwaXRiZWc7CiAgICAgICAgVUJZVEUgcGl0ZW5kOwogICAgICAgIEVOVlBUIHBp
dGVudlszMl07Cn0gSU5TVFJVTUVOVDsKCnN0cnVjdCBNUF9DT05UUk9MOwpzdHJ1Y3QgTVBfVk9J
Q0U7CiMgNDM5ICIvdXNyL2luY2x1ZGUvbWlrbW9kLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgTU9EVUxF
IHsKCiAgICAgICAgICAgICAgICBDSEFSKiBzb25nbmFtZTsKICAgICAgICAgICAgICAgIENIQVIq
IG1vZHR5cGU7CiAgICAgICAgICAgICAgICBDSEFSKiBjb21tZW50OwoKICAgICAgICAgICAgICAg
IFVXT1JEIGZsYWdzOwogICAgICAgICAgICAgICAgVUJZVEUgbnVtY2huOwogICAgICAgICAgICAg
ICAgVUJZVEUgbnVtdm9pY2VzOwogICAgICAgICAgICAgICAgVVdPUkQgbnVtcG9zOwogICAgICAg
ICAgICAgICAgVVdPUkQgbnVtcGF0OwogICAgICAgICAgICAgICAgVVdPUkQgbnVtaW5zOwogICAg
ICAgICAgICAgICAgVVdPUkQgbnVtc21wOwpzdHJ1Y3QgSU5TVFJVTUVOVCogaW5zdHJ1bWVudHM7
CnN0cnVjdCBTQU1QTEUqIHNhbXBsZXM7CiAgICAgICAgICAgICAgICBVQllURSByZWFsY2huOwog
ICAgICAgICAgICAgICAgVUJZVEUgdG90YWxjaG47CgoKICAgICAgICAgICAgICAgIFVXT1JEIHJl
cHBvczsKICAgICAgICAgICAgICAgIFVCWVRFIGluaXRzcGVlZDsKICAgICAgICAgICAgICAgIFVX
T1JEIGluaXR0ZW1wbzsKICAgICAgICAgICAgICAgIFVCWVRFIGluaXR2b2x1bWU7CiAgICAgICAg
ICAgICAgICBVV09SRCBwYW5uaW5nWzY0XTsKICAgICAgICAgICAgICAgIFVCWVRFIGNoYW52b2xb
NjRdOwogICAgICAgICAgICAgICAgVVdPUkQgYnBtOwogICAgICAgICAgICAgICAgVVdPUkQgc25n
c3BkOwogICAgICAgICAgICAgICAgU1dPUkQgdm9sdW1lOwoKICAgICAgICAgICAgICAgIEJPT0wg
ZXh0c3BkOwogICAgICAgICAgICAgICAgQk9PTCBwYW5mbGFnOwogICAgICAgICAgICAgICAgQk9P
TCB3cmFwOwogICAgICAgICAgICAgICAgQk9PTCBsb29wOwogICAgICAgICAgICAgICAgQk9PTCBm
YWRlb3V0OwoKICAgICAgICAgICAgICAgIFVXT1JEIHBhdHBvczsKICAgICAgICAgICAgICAgIFNX
T1JEIHNuZ3BvczsKICAgICAgICAgICAgICAgIFVMT05HIHNuZ3RpbWU7CgogICAgICAgICAgICAg
ICAgU1dPUkQgcmVsc3BkOwoKCiAgICAgICAgICAgICAgICBVV09SRCBudW10cms7CiAgICAgICAg
ICAgICAgICBVQllURSoqIHRyYWNrczsKICAgICAgICAgICAgICAgIFVXT1JEKiBwYXR0ZXJuczsK
ICAgICAgICAgICAgICAgIFVXT1JEKiBwYXR0cm93czsKICAgICAgICAgICAgICAgIFVXT1JEKiBw
b3NpdGlvbnM7CgogICAgICAgICAgICAgICAgQk9PTCBmb3JiaWQ7CiAgICAgICAgICAgICAgICBV
V09SRCBudW1yb3c7CiAgICAgICAgICAgICAgICBVV09SRCB2YnRpY2s7CiAgICAgICAgICAgICAg
ICBVV09SRCBzbmdyZW1haW5kZXI7CgpzdHJ1Y3QgTVBfQ09OVFJPTCogY29udHJvbDsKc3RydWN0
IE1QX1ZPSUNFKiB2b2ljZTsKCiAgICAgICAgICAgICAgICBVQllURSBnbG9iYWxzbGlkZTsKICAg
ICAgICAgICAgICAgIFVCWVRFIHBhdF9yZXBjcmF6eTsKICAgICAgICAgICAgICAgIFVXT1JEIHBh
dGJyazsKICAgICAgICAgICAgICAgIFVCWVRFIHBhdGRseTsKICAgICAgICAgICAgICAgIFVCWVRF
IHBhdGRseTI7CiAgICAgICAgICAgICAgICBTV09SRCBwb3NqbXA7CiAgICAgICAgICAgICAgICBV
V09SRCBicG1saW1pdDsKfSBNT0RVTEU7CgoKCgoKc3RydWN0IE1MT0FERVI7CgogZXh0ZXJuIENI
QVIqIE1pa01vZF9JbmZvTG9hZGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgTWlrTW9kX1JlZ2lzdGVy
QWxsTG9hZGVycyh2b2lkKTsKIGV4dGVybiB2b2lkIE1pa01vZF9SZWdpc3RlckxvYWRlcihzdHJ1
Y3QgTUxPQURFUiopOwoKIGV4dGVybiBzdHJ1Y3QgTUxPQURFUiBsb2FkXzY2OTsKIGV4dGVybiBz
dHJ1Y3QgTUxPQURFUiBsb2FkX2FtZjsKIGV4dGVybiBzdHJ1Y3QgTUxPQURFUiBsb2FkX2RzbTsK
IGV4dGVybiBzdHJ1Y3QgTUxPQURFUiBsb2FkX2ZhcjsKIGV4dGVybiBzdHJ1Y3QgTUxPQURFUiBs
b2FkX2dkbTsKIGV4dGVybiBzdHJ1Y3QgTUxPQURFUiBsb2FkX2l0OwogZXh0ZXJuIHN0cnVjdCBN
TE9BREVSIGxvYWRfaW1mOwogZXh0ZXJuIHN0cnVjdCBNTE9BREVSIGxvYWRfbWVkOwogZXh0ZXJu
IHN0cnVjdCBNTE9BREVSIGxvYWRfbTE1OwogZXh0ZXJuIHN0cnVjdCBNTE9BREVSIGxvYWRfbW9k
OwogZXh0ZXJuIHN0cnVjdCBNTE9BREVSIGxvYWRfbXRtOwogZXh0ZXJuIHN0cnVjdCBNTE9BREVS
IGxvYWRfb2t0OwogZXh0ZXJuIHN0cnVjdCBNTE9BREVSIGxvYWRfc3RtOwogZXh0ZXJuIHN0cnVj
dCBNTE9BREVSIGxvYWRfc3R4OwogZXh0ZXJuIHN0cnVjdCBNTE9BREVSIGxvYWRfczNtOwogZXh0
ZXJuIHN0cnVjdCBNTE9BREVSIGxvYWRfdWx0OwogZXh0ZXJuIHN0cnVjdCBNTE9BREVSIGxvYWRf
dW5pOwogZXh0ZXJuIHN0cnVjdCBNTE9BREVSIGxvYWRfeG07CgoKCgoKIGV4dGVybiBNT0RVTEUq
IFBsYXllcl9Mb2FkKENIQVIqLGludCxCT09MKTsKIGV4dGVybiBNT0RVTEUqIFBsYXllcl9Mb2Fk
RlAoRklMRSosaW50LEJPT0wpOwogZXh0ZXJuIE1PRFVMRSogUGxheWVyX0xvYWRHZW5lcmljKE1S
RUFERVIqLGludCxCT09MKTsKIGV4dGVybiBDSEFSKiBQbGF5ZXJfTG9hZFRpdGxlKENIQVIqKTsK
IGV4dGVybiBDSEFSKiBQbGF5ZXJfTG9hZFRpdGxlRlAoRklMRSopOwogZXh0ZXJuIHZvaWQgUGxh
eWVyX0ZyZWUoTU9EVUxFKik7CiBleHRlcm4gdm9pZCBQbGF5ZXJfU3RhcnQoTU9EVUxFKik7CiBl
eHRlcm4gQk9PTCBQbGF5ZXJfQWN0aXZlKHZvaWQpOwogZXh0ZXJuIHZvaWQgUGxheWVyX1N0b3Ao
dm9pZCk7CiBleHRlcm4gdm9pZCBQbGF5ZXJfVG9nZ2xlUGF1c2Uodm9pZCk7CiBleHRlcm4gQk9P
TCBQbGF5ZXJfUGF1c2VkKHZvaWQpOwogZXh0ZXJuIHZvaWQgUGxheWVyX05leHRQb3NpdGlvbih2
b2lkKTsKIGV4dGVybiB2b2lkIFBsYXllcl9QcmV2UG9zaXRpb24odm9pZCk7CiBleHRlcm4gdm9p
ZCBQbGF5ZXJfU2V0UG9zaXRpb24oVVdPUkQpOwogZXh0ZXJuIEJPT0wgUGxheWVyX011dGVkKFVC
WVRFKTsKIGV4dGVybiB2b2lkIFBsYXllcl9TZXRWb2x1bWUoU1dPUkQpOwogZXh0ZXJuIE1PRFVM
RSogUGxheWVyX0dldE1vZHVsZSh2b2lkKTsKIGV4dGVybiB2b2lkIFBsYXllcl9TZXRTcGVlZChV
V09SRCk7CiBleHRlcm4gdm9pZCBQbGF5ZXJfU2V0VGVtcG8oVVdPUkQpOwogZXh0ZXJuIHZvaWQg
UGxheWVyX1VubXV0ZShTTE9ORywuLi4pOwogZXh0ZXJuIHZvaWQgUGxheWVyX011dGUoU0xPTkcs
Li4uKTsKIGV4dGVybiB2b2lkIFBsYXllcl9Ub2dnbGVNdXRlKFNMT05HLC4uLik7CiBleHRlcm4g
aW50IFBsYXllcl9HZXRDaGFubmVsVm9pY2UoVUJZVEUpOwogZXh0ZXJuIFVXT1JEIFBsYXllcl9H
ZXRDaGFubmVsUGVyaW9kKFVCWVRFKTsKCnR5cGVkZWYgdm9pZCAoTWlrTW9kX3BsYXllcikodm9p
ZCk7CnR5cGVkZWYgTWlrTW9kX3BsYXllciAqTWlrTW9kX3BsYXllcl90OwoKIGV4dGVybiBNaWtN
b2RfcGxheWVyX3QgTWlrTW9kX1JlZ2lzdGVyUGxheWVyKE1pa01vZF9wbGF5ZXJfdCk7CiMgNTc0
ICIvdXNyL2luY2x1ZGUvbWlrbW9kLmgiIDMKZW51bSB7CiAgICAgICAgTURfTVVTSUMgPSAwLAog
ICAgICAgIE1EX1NOREZYCn07CgplbnVtIHsKICAgICAgICBNRF9IQVJEV0FSRSA9IDAsCiAgICAg
ICAgTURfU09GVFdBUkUKfTsKIyA1OTcgIi91c3IvaW5jbHVkZS9taWttb2QuaCIgMwpzdHJ1Y3Qg
U0FNUExPQUQ7CnR5cGVkZWYgc3RydWN0IE1EUklWRVIgewpzdHJ1Y3QgTURSSVZFUiogbmV4dDsK
ICAgICAgICBDSEFSKiBOYW1lOwogICAgICAgIENIQVIqIFZlcnNpb247CgogICAgICAgIFVCWVRF
IEhhcmRWb2ljZUxpbWl0OwogICAgICAgIFVCWVRFIFNvZnRWb2ljZUxpbWl0OwoKICAgICAgICBD
SEFSKiBBbGlhczsKCiAgICAgICAgdm9pZCAoKkNvbW1hbmRMaW5lKSAoQ0hBUiopOwogICAgICAg
IEJPT0wgKCpJc1ByZXNlbnQpICh2b2lkKTsKICAgICAgICBTV09SRCAoKlNhbXBsZUxvYWQpIChz
dHJ1Y3QgU0FNUExPQUQqLGludCk7CiAgICAgICAgdm9pZCAoKlNhbXBsZVVubG9hZCkgKFNXT1JE
KTsKICAgICAgICBVTE9ORyAoKkZyZWVTYW1wbGVTcGFjZSkgKGludCk7CiAgICAgICAgVUxPTkcg
KCpSZWFsU2FtcGxlTGVuZ3RoKSAoaW50LHN0cnVjdCBTQU1QTEUqKTsKICAgICAgICBCT09MICgq
SW5pdCkgKHZvaWQpOwogICAgICAgIHZvaWQgKCpFeGl0KSAodm9pZCk7CiAgICAgICAgQk9PTCAo
KlJlc2V0KSAodm9pZCk7CiAgICAgICAgQk9PTCAoKlNldE51bVZvaWNlcykgKHZvaWQpOwogICAg
ICAgIEJPT0wgKCpQbGF5U3RhcnQpICh2b2lkKTsKICAgICAgICB2b2lkICgqUGxheVN0b3ApICh2
b2lkKTsKICAgICAgICB2b2lkICgqVXBkYXRlKSAodm9pZCk7CiAgICAgICAgdm9pZCAoKlBhdXNl
KSAodm9pZCk7CiAgICAgICAgdm9pZCAoKlZvaWNlU2V0Vm9sdW1lKSAoVUJZVEUsVVdPUkQpOwog
ICAgICAgIFVXT1JEICgqVm9pY2VHZXRWb2x1bWUpIChVQllURSk7CiAgICAgICAgdm9pZCAoKlZv
aWNlU2V0RnJlcXVlbmN5KShVQllURSxVTE9ORyk7CiAgICAgICAgVUxPTkcgKCpWb2ljZUdldEZy
ZXF1ZW5jeSkoVUJZVEUpOwogICAgICAgIHZvaWQgKCpWb2ljZVNldFBhbm5pbmcpIChVQllURSxV
TE9ORyk7CiAgICAgICAgVUxPTkcgKCpWb2ljZUdldFBhbm5pbmcpIChVQllURSk7CiAgICAgICAg
dm9pZCAoKlZvaWNlUGxheSkgKFVCWVRFLFNXT1JELFVMT05HLFVMT05HLFVMT05HLFVMT05HLFVX
T1JEKTsKICAgICAgICB2b2lkICgqVm9pY2VTdG9wKSAoVUJZVEUpOwogICAgICAgIEJPT0wgKCpW
b2ljZVN0b3BwZWQpIChVQllURSk7CiAgICAgICAgU0xPTkcgKCpWb2ljZUdldFBvc2l0aW9uKSAo
VUJZVEUpOwogICAgICAgIFVMT05HICgqVm9pY2VSZWFsVm9sdW1lKSAoVUJZVEUpOwp9IE1EUklW
RVI7CgoKIGV4dGVybiBVQllURSBtZF92b2x1bWU7CiBleHRlcm4gVUJZVEUgbWRfbXVzaWN2b2x1
bWU7CiBleHRlcm4gVUJZVEUgbWRfc25kZnh2b2x1bWU7CiBleHRlcm4gVUJZVEUgbWRfcmV2ZXJi
OwogZXh0ZXJuIFVCWVRFIG1kX3BhbnNlcDsKCgoKCgogZXh0ZXJuIFVXT1JEIG1kX2RldmljZTsK
IGV4dGVybiBVV09SRCBtZF9taXhmcmVxOwogZXh0ZXJuIFVXT1JEIG1kX21vZGU7CgoKIGV4dGVy
biBNRFJJVkVSKiBtZF9kcml2ZXI7CgoKCiBleHRlcm4gc3RydWN0IE1EUklWRVIgZHJ2X25vczsK
IGV4dGVybiBzdHJ1Y3QgTURSSVZFUiBkcnZfcGlwZTsKIGV4dGVybiBzdHJ1Y3QgTURSSVZFUiBk
cnZfcmF3OwogZXh0ZXJuIHN0cnVjdCBNRFJJVkVSIGRydl9zdGRvdXQ7CiBleHRlcm4gc3RydWN0
IE1EUklWRVIgZHJ2X3dhdjsKCiBleHRlcm4gc3RydWN0IE1EUklWRVIgZHJ2X3VsdHJhOwogZXh0
ZXJuIHN0cnVjdCBNRFJJVkVSIGRydl9zYW05NDA3OwoKIGV4dGVybiBzdHJ1Y3QgTURSSVZFUiBk
cnZfQUY7CiBleHRlcm4gc3RydWN0IE1EUklWRVIgZHJ2X2FpeDsKIGV4dGVybiBzdHJ1Y3QgTURS
SVZFUiBkcnZfYWxzYTsKIGV4dGVybiBzdHJ1Y3QgTURSSVZFUiBkcnZfZXNkOwogZXh0ZXJuIHN0
cnVjdCBNRFJJVkVSIGRydl9ocDsKIGV4dGVybiBzdHJ1Y3QgTURSSVZFUiBkcnZfb3NzOwogZXh0
ZXJuIHN0cnVjdCBNRFJJVkVSIGRydl9zZ2k7CiBleHRlcm4gc3RydWN0IE1EUklWRVIgZHJ2X3N1
bjsKCiBleHRlcm4gc3RydWN0IE1EUklWRVIgZHJ2X2RhcnQ7CiBleHRlcm4gc3RydWN0IE1EUklW
RVIgZHJ2X29zMjsKCiBleHRlcm4gc3RydWN0IE1EUklWRVIgZHJ2X2RzOwogZXh0ZXJuIHN0cnVj
dCBNRFJJVkVSIGRydl93aW47CgogZXh0ZXJuIHN0cnVjdCBNRFJJVkVSIGRydl9tYWM7CgoKCiBl
eHRlcm4gQk9PTCBWQ19Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgVkNfRXhpdCh2b2lkKTsKIGV4
dGVybiBCT09MIFZDX1NldE51bVZvaWNlcyh2b2lkKTsKIGV4dGVybiBVTE9ORyBWQ19TYW1wbGVT
cGFjZShpbnQpOwogZXh0ZXJuIFVMT05HIFZDX1NhbXBsZUxlbmd0aChpbnQsU0FNUExFKik7Cgog
ZXh0ZXJuIEJPT0wgVkNfUGxheVN0YXJ0KHZvaWQpOwogZXh0ZXJuIHZvaWQgVkNfUGxheVN0b3Ao
dm9pZCk7CgogZXh0ZXJuIFNXT1JEIFZDX1NhbXBsZUxvYWQoc3RydWN0IFNBTVBMT0FEKixpbnQp
OwogZXh0ZXJuIHZvaWQgVkNfU2FtcGxlVW5sb2FkKFNXT1JEKTsKCiBleHRlcm4gVUxPTkcgVkNf
V3JpdGVCeXRlcyhTQllURSosVUxPTkcpOwogZXh0ZXJuIFVMT05HIFZDX1NpbGVuY2VCeXRlcyhT
QllURSosVUxPTkcpOwoKIGV4dGVybiB2b2lkIFZDX1ZvaWNlU2V0Vm9sdW1lKFVCWVRFLFVXT1JE
KTsKIGV4dGVybiBVV09SRCBWQ19Wb2ljZUdldFZvbHVtZShVQllURSk7CiBleHRlcm4gdm9pZCBW
Q19Wb2ljZVNldEZyZXF1ZW5jeShVQllURSxVTE9ORyk7CiBleHRlcm4gVUxPTkcgVkNfVm9pY2VH
ZXRGcmVxdWVuY3koVUJZVEUpOwogZXh0ZXJuIHZvaWQgVkNfVm9pY2VTZXRQYW5uaW5nKFVCWVRF
LFVMT05HKTsKIGV4dGVybiBVTE9ORyBWQ19Wb2ljZUdldFBhbm5pbmcoVUJZVEUpOwogZXh0ZXJu
IHZvaWQgVkNfVm9pY2VQbGF5KFVCWVRFLFNXT1JELFVMT05HLFVMT05HLFVMT05HLFVMT05HLFVX
T1JEKTsKCiBleHRlcm4gdm9pZCBWQ19Wb2ljZVN0b3AoVUJZVEUpOwogZXh0ZXJuIEJPT0wgVkNf
Vm9pY2VTdG9wcGVkKFVCWVRFKTsKIGV4dGVybiBTTE9ORyBWQ19Wb2ljZUdldFBvc2l0aW9uKFVC
WVRFKTsKIGV4dGVybiBVTE9ORyBWQ19Wb2ljZVJlYWxWb2x1bWUoVUJZVEUpOwoKCn0KIyAzNiAi
L3Vzci9pbmNsdWRlL0NsYW5MaWIvTWlrTW9kL3N0cmVhbWVkX21pa21vZF9zYW1wbGUuaCIgMiAz
CgoKCgoKCmNsYXNzIENMX1N0cmVhbWVkX01pa01vZFNhbXBsZSA6IHB1YmxpYyBDTF9TdHJlYW1T
b3VuZFByb3ZpZGVyCnsKcHJvdGVjdGVkOgogICAgICAgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lOwog
ICAgICAgIGJvb2wgbG9vcGVkOwogICAgICAgIGJvb2wgbG9hZGVkX2Zyb21fcmVzb3VyY2U7CiAg
ICAgICAgQ0xfUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyOwoKICAgICAgICBNT0RVTEUgKm1vZHVs
ZTsKcHVibGljOgoKCiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVyICpjcmVhdGUoCiAgICAg
ICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUsCiAgICAgICAgICAgICAgICBD
TF9JbnB1dFNvdXJjZVByb3ZpZGVyICppbnB1dHByb3ZpZGVyID0gX19udWxsLAogICAgICAgICAg
ICAgICAgYm9vbCBsb29wZWQgPSBmYWxzZSk7CgoKICAgICAgICBzdGF0aWMgQ0xfU291bmRCdWZm
ZXIgKmxvYWQoCiAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmcmVzX2lkLAogICAg
ICAgICAgICAgICAgQ0xfUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLAogICAgICAgICAgICAgICAg
Ym9vbCBsb29wZWQgPSBmYWxzZSk7CgoKICAgICAgICBDTF9TdHJlYW1lZF9NaWtNb2RTYW1wbGUo
CiAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUsCiAgICAgICAgICAg
ICAgICBDTF9JbnB1dFNvdXJjZVByb3ZpZGVyICppbnB1dHByb3ZpZGVyID0gX19udWxsLAogICAg
ICAgICAgICAgICAgYm9vbCBsb29wZWQgPSBmYWxzZSk7CgoKICAgICAgICBDTF9TdHJlYW1lZF9N
aWtNb2RTYW1wbGUoCiAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmcmVzX2lkLAog
ICAgICAgICAgICAgICAgQ0xfUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLAogICAgICAgICAgICAg
ICAgYm9vbCBsb29wZWQgPSBmYWxzZSk7CgoKICAgICAgICB2aXJ0dWFsIH5DTF9TdHJlYW1lZF9N
aWtNb2RTYW1wbGUoKTsKCgoKICAgICAgICB2aXJ0dWFsIENMX1N0cmVhbVNvdW5kUHJvdmlkZXJf
U2Vzc2lvbiAqYmVnaW5fc2Vzc2lvbigpOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIGVuZF9zZXNz
aW9uKENMX1N0cmVhbVNvdW5kUHJvdmlkZXJfU2Vzc2lvbiAqc2Vzc2lvbik7Cgp9OwoKCmNsYXNz
IENMX1N0cmVhbWVkX01pa01vZFNhbXBsZV9TZXNzaW9uIDogcHVibGljIENMX1N0cmVhbVNvdW5k
UHJvdmlkZXJfU2Vzc2lvbgp7CnByb3RlY3RlZDoKICAgICAgICBmcmllbmQgY2xhc3MgQ0xfU3Ry
ZWFtZWRfTWlrTW9kU2FtcGxlOwoKICAgICAgICBDTF9TdHJlYW1lZF9NaWtNb2RTYW1wbGVfU2Vz
c2lvbihNT0RVTEUgKl9tb2R1bGUsIGJvb2wgX2xvb3BlZCk7CgogICAgICAgIE1PRFVMRSAqbW9k
dWxlOwogICAgICAgIGJvb2wgbG9vcGVkOwoKICAgICAgICBTb3VuZEZvcm1hdCBzYW1wbGVfZm9y
bWF0OwogICAgICAgIGludCBzYW1wbGVfc2l6ZTsKICAgICAgICBpbnQgc2FtcGxlX2ZyZXE7CiAg
ICAgICAgaW50IHNhbXBsZV9sZWZ0OwoKcHVibGljOgoKCiAgICAgICAgdmlydHVhbCB+Q0xfU3Ry
ZWFtZWRfTWlrTW9kU2FtcGxlX1Nlc3Npb24oKTsKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQgc3Rv
cCgpOwoKCiAgICAgICAgdmlydHVhbCBib29sIHBsYXkoKTsKCgogICAgICAgIHZpcnR1YWwgYm9v
bCBzZXRfcG9zaXRpb24oaW50IHBvcyk7CgoKICAgICAgICBzdGF0aWMgdm9pZCBjbGFuTWlrTW9k
X1VwZGF0ZSgpIHsgfQoKCgogICAgICAgIHZpcnR1YWwgYm9vbCBlb2YoKSBjb25zdDsKCgogICAg
ICAgIHZpcnR1YWwgaW50IGdldF9kYXRhKHZvaWQgKmRhdGFfcHRyLCBpbnQgZGF0YV9yZXF1ZXN0
ZWQpOwoKCiAgICAgICAgdmlydHVhbCBpbnQgZ2V0X2ZyZXF1ZW5jeSgpIGNvbnN0OwoKCiAgICAg
ICAgdmlydHVhbCBTb3VuZEZvcm1hdCBnZXRfZm9ybWF0KCkgY29uc3Q7CgoKICAgICAgICBzdGF0
aWMgQk9PTCBjbGFuTWlrTW9kX0lzUHJlc2VudCgpIHsgcmV0dXJuIDE7IH0KCgp9OwojIDI5ICIv
dXNyL2luY2x1ZGUvQ2xhbkxpYi9taWttb2QuaCIgMiAzCiMgNDAgIkNsYW5Cb21iZXIuaCIgMgoj
IDEgImxpbmsuaCIgMQojIDI1ICJsaW5rLmgiCmNsYXNzIENMX0xpbmsKewpwdWJsaWM6CiAgICAg
ICAgQ0xfTGluayAqcHJldjsKICAgICAgICBDTF9MaW5rICpuZXh0OwogICAgICAgIHZvaWQgKmlu
c3RhbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFRZUEU+CmNsYXNzIENMX0xpc3QKCgoKCgoKewoK
cHVibGljOgogICAgICAgIENMX0xpbmsgKmZpcnN0OwogICAgICAgIENMX0xpbmsgKmxhc3Q7CiAg
ICAgICAgaW50IG51bV9pdGVtczsKCnB1YmxpYzoKICAgICAgICBDTF9MaXN0KCkKICAgICAgICB7
CiAgICAgICAgICAgICAgICBmaXJzdCA9IF9fbnVsbDsKICAgICAgICAgICAgICAgIGxhc3QgPSBf
X251bGw7CiAgICAgICAgICAgICAgICBudW1faXRlbXMgPSAwOwogICAgICAgIH0KCgogICAgICAg
IENMX0xpc3QoY29uc3QgQ0xfTGlzdDxUWVBFPiAmY2xvbmUpCiAgICAgICAgewogICAgICAgICAg
ICAgICAgZmlyc3QgPSBfX251bGw7CiAgICAgICAgICAgICAgICBsYXN0ID0gX19udWxsOwogICAg
ICAgICAgICAgICAgbnVtX2l0ZW1zID0gMDsKCiAgICAgICAgICAgICAgICBjb3B5KGNsb25lKTsK
ICAgICAgICB9CgoKCiAgICAgICAgfkNMX0xpc3QoKQogICAgICAgIHsKICAgICAgICAgICAgICAg
IGNsZWFyKCk7CiAgICAgICAgfQoKICAgICAgICB2b2lkIGNsZWFyKCkKICAgICAgICB7CiAgICAg
ICAgICAgICAgICBDTF9MaW5rICpjdXJfaW5zdGFuY2UgPSBmaXJzdDsKICAgICAgICAgICAgICAg
IHdoaWxlIChjdXJfaW5zdGFuY2UgIT0gX19udWxsKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICBDTF9MaW5rICpkZWxldGVfaW5zdGFuY2UgPSBjdXJfaW5zdGFuY2U7
CiAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9pbnN0YW5jZSA9IGN1cl9pbnN0YW5jZS0+bmV4
dDsKCgogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZGVsZXRlX2luc3RhbmNlOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZpcnN0ID0gX19udWxsOwogICAgICAgICAg
ICAgICAgbGFzdCA9IF9fbnVsbDsKICAgICAgICAgICAgICAgIG51bV9pdGVtcyA9IDA7CiAgICAg
ICAgfQoKCiAgICAgICAgdm9pZCBjb3B5KGNvbnN0IENMX0xpc3Q8VFlQRT4gJm90aGVyKQogICAg
ICAgIHsKICAgICAgICAgICAgICAgIGNsZWFyKCk7CiAgICAgICAgICAgICAgICBhZGQob3RoZXIp
OwogICAgICAgIH0KCgoKCgogICAgICAgIHZvaWQgYWRkKGNvbnN0IENMX0xpc3Q8VFlQRT4gJm90
aGVyKQogICAgICAgIHsKICAgICAgICAgICAgICAgIENMX0xpbmsgKmN1ciA9IG90aGVyLmZpcnN0
OwogICAgICAgICAgICAgICAgd2hpbGUgKGN1ciAhPSBfX251bGwpCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZCgoVFlQRSAqKSBjdXItPmluc3RhbmNlKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLT5uZXh0OwogICAgICAgICAgICAgICAgfQog
ICAgICAgIH0KCgoKICAgICAgICBDTF9MaW5rICphZGQoVFlQRSAqaXRlbSkKICAgICAgICB7Cgog
ICAgICAgICAgICAgICAgQ0xfTGluayAqY3VyID0gbmV3IENMX0xpbms7CgogICAgICAgICAgICAg
ICAgY3VyLT5pbnN0YW5jZSA9IGl0ZW07CiAgICAgICAgICAgICAgICBjdXItPnByZXYgPSBsYXN0
OwogICAgICAgICAgICAgICAgY3VyLT5uZXh0ID0gX19udWxsOwoKICAgICAgICAgICAgICAgIGlm
IChmaXJzdCA9PSBfX251bGwpIGZpcnN0ID0gY3VyOwogICAgICAgICAgICAgICAgaWYgKGxhc3Qg
IT0gX19udWxsKSBsYXN0LT5uZXh0ID0gY3VyOwogICAgICAgICAgICAgICAgbGFzdCA9IGN1cjsK
CiAgICAgICAgICAgICAgICBudW1faXRlbXMrKzsKCiAgICAgICAgICAgICAgICByZXR1cm4gY3Vy
OwogICAgICAgIH0KCgoKCiAgICAgICAgVFlQRSAqZ2V0X2l0ZW0oaW50IG51bWJlcikKICAgICAg
ICB7CiAgICAgICAgICAgICAgICBpZiAobnVtYmVyPDAgfHwgbnVtYmVyPm51bV9pdGVtcykgcmV0
dXJuIF9fbnVsbDsKCiAgICAgICAgICAgICAgICBDTF9MaW5rICpjdXJfaW5zdGFuY2UgPSBmaXJz
dDsKICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxudW1iZXI7IGkrKykKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2luc3RhbmNlPWN1cl9pbnN0YW5j
ZS0+bmV4dDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gKFRZUEUg
KikgY3VyX2luc3RhbmNlLT5pbnN0YW5jZTsKICAgICAgICB9CgoKCgogICAgICAgIFRZUEUqIG9w
ZXJhdG9yW10oaW50IG51bWJlcikKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0
X2l0ZW0obnVtYmVyKTsKICAgICAgICB9CgoKCgogICAgICAgIGludCBnZXRfbnVtX2l0ZW1zKCkK
ICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVtX2l0ZW1zOwogICAgICAgIH0KCgoK
ICAgICAgICBUWVBFICpnZXRfZmlyc3QoKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChm
aXJzdD09X19udWxsKSByZXR1cm4gX19udWxsOwogICAgICAgICAgICAgICAgcmV0dXJuIChUWVBF
ICopIGZpcnN0LT5pbnN0YW5jZTsKICAgICAgICB9CgoKCiAgICAgICAgVFlQRSAqZ2V0X2xhc3Qo
KQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChsYXN0PT1fX251bGwpIHJldHVybiBfX251
bGw7CiAgICAgICAgICAgICAgICByZXR1cm4gKFRZUEUgKikgbGFzdC0+aW5zdGFuY2U7CiAgICAg
ICAgfQoKCgogICAgICAgIGJvb2wgZGVsKFRZUEUgKml0ZW0pCiAgICAgICAgewogICAgICAgICAg
ICAgICAgcmV0dXJuIGRlbChmaW5kX2xpbmsoaXRlbSkpOwogICAgICAgIH0KCgoKCiAgICAgICAg
Ym9vbCBkZWwoQ0xfTGluayAqaXRlbSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoaXRl
bSA9PSBfX251bGwpIHJldHVybiBmYWxzZTsKCiAgICAgICAgICAgICAgICBpZiAoaXRlbS0+cHJl
diAhPSBfX251bGwpIGl0ZW0tPnByZXYtPm5leHQgPSBpdGVtLT5uZXh0OwogICAgICAgICAgICAg
ICAgZWxzZSBmaXJzdCA9IGl0ZW0tPm5leHQ7CgogICAgICAgICAgICAgICAgaWYgKGl0ZW0tPm5l
eHQgIT0gX19udWxsKSBpdGVtLT5uZXh0LT5wcmV2ID0gaXRlbS0+cHJldjsKICAgICAgICAgICAg
ICAgIGVsc2UgbGFzdCA9IGl0ZW0tPnByZXY7CgoKICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVt
OwoKICAgICAgICAgICAgICAgIG51bV9pdGVtcy0tOwoKICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgIH0KCgoKCgogICAgICAgIENMX0xpbmsgKmZpbmRfbGluayhUWVBFICppdGVt
KQogICAgICAgIHsKICAgICAgICAgICAgICAgIENMX0xpbmsgKmN1ciA9IGZpcnN0OwogICAgICAg
ICAgICAgICAgd2hpbGUgKGN1ciAhPSBfX251bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICgoY3VyLT5pbnN0YW5jZSkgPT0gaXRlbSkgcmV0dXJuIGN1cjsK
ICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLT5uZXh0OwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIHJldHVybiBfX251bGw7CiAgICAgICAgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIFRZUEU+CmNsYXNzIENMX0l0ZXJhdG9yCnsKcHJpdmF0ZToKICAgICAgICBDTF9MaXN0
PFRZUEU+ICpsaXN0OwogICAgICAgIENMX0xpbmsgKmN1cnJlbnQ7CgpwdWJsaWM6CiAgICAgICAg
Q0xfSXRlcmF0b3IoQ0xfTGlzdDxUWVBFPiAqX2xpc3QpCiAgICAgICAgewogICAgICAgICAgICAg
ICAgbGlzdCA9IF9saXN0OwogICAgICAgICAgICAgICAgY3VycmVudCA9IF9fbnVsbDsKICAgICAg
ICB9CgogICAgICAgIENMX0l0ZXJhdG9yKENMX0xpc3Q8VFlQRT4gJl9saXN0KQogICAgICAgIHsK
ICAgICAgICAgICAgICAgIGxpc3QgPSAmX2xpc3Q7CiAgICAgICAgICAgICAgICBjdXJyZW50ID0g
X19udWxsOwogICAgICAgIH0KCiAgICAgICAgVFlQRSAqZmlyc3QoKQogICAgICAgIHsKICAgICAg
ICAgICAgICAgIGN1cnJlbnQgPSBsaXN0LT5maXJzdDsKCiAgICAgICAgICAgICAgICBpZiAoY3Vy
cmVudCA9PSBfX251bGwpIHJldHVybiBfX251bGw7CiAgICAgICAgICAgICAgICByZXR1cm4gKFRZ
UEUgKikgKFRZUEUgKikgY3VycmVudC0+aW5zdGFuY2U7CiAgICAgICAgfQoKICAgICAgICBUWVBF
ICpsYXN0KCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBjdXJyZW50ID0gbGlzdC0+bGFzdDsK
CiAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBfX251bGwpIHJldHVybiBfX251bGw7CiAg
ICAgICAgICAgICAgICByZXR1cm4gKFRZUEUgKikgY3VycmVudC0+aW5zdGFuY2U7CiAgICAgICAg
fQoKICAgICAgICBUWVBFICpwcmV2KCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoY3Vy
cmVudCA9PSBfX251bGwpIHJldHVybiBsYXN0KCk7CiAgICAgICAgICAgICAgICBjdXJyZW50ID0g
Y3VycmVudC0+cHJldjsKCiAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBfX251bGwpIHJl
dHVybiBfX251bGw7CiAgICAgICAgICAgICAgICByZXR1cm4gKFRZUEUgKikgY3VycmVudC0+aW5z
dGFuY2U7CiAgICAgICAgfQoKICAgICAgICBUWVBFICpuZXh0KCkKICAgICAgICB7CiAgICAgICAg
ICAgICAgICBpZiAoY3VycmVudCA9PSBfX251bGwpIHJldHVybiBmaXJzdCgpOwogICAgICAgICAg
ICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CgogICAgICAgICAgICAgICAgaWYgKGN1cnJl
bnQgPT0gX19udWxsKSByZXR1cm4gX19udWxsOwogICAgICAgICAgICAgICAgcmV0dXJuIChUWVBF
ICopIGN1cnJlbnQtPmluc3RhbmNlOwogICAgICAgIH0KCiAgICAgICAgdm9pZCByZW1vdmUoKQog
ICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IF9fbnVsbCkgcmV0dXJuOwoK
ICAgICAgICAgICAgICAgIENMX0xpbmsgKmRlbF9saW5rPWN1cnJlbnQ7CiAgICAgICAgICAgICAg
ICBjdXJyZW50PWN1cnJlbnQtPnByZXY7CiAgICAgICAgICAgICAgICBsaXN0LT5kZWwoZGVsX2xp
bmspOwogICAgICAgIH0KCiAgICAgICAgVFlQRSogb3BlcmF0b3IoKSgpCiAgICAgICAgewogICAg
ICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gX19udWxsKSByZXR1cm4gX19udWxsOwoKICAgICAg
ICAgICAgICAgIHJldHVybiAoVFlQRSAqKSBjdXJyZW50LT5pbnN0YW5jZTsKICAgICAgICB9Cn07
CiMgNDEgIkNsYW5Cb21iZXIuaCIgMgoKZW51bQp7CiAgICAgICAgTUVOVV9MT0NBTEdBTUUsCiAg
ICAgICAgTUVOVV9PUFRJT05TLAogICAgICAgIE1FTlVfQ1JFRElUUywKICAgICAgICBNRU5VX1BM
QVlFUl9TRVRVUCwKICAgICAgICBNRU5VX0VYVFJBX1ZBTFVFUywKICAgICAgICBNRU5VX0VYVFJB
X09OT0ZGLAogICAgICAgIE1FTlVfRVhJVCwKICAgICAgICBNRU5VX0NPTlRST0xMRVIsCiAgICAg
ICAgTUVOVV9IRUxQLAogICAgICAgIE1FTlVfRElTRUFTRV9PTk9GRiwKICAgICAgICBNRU5VX01B
UF9FRElUT1IsCiAgICAgICAgTUVOVV9USU1JTkcsCgogICAgICAgIENPTkZJR19TVEFSVF9CT01C
UywKICAgICAgICBDT05GSUdfU1RBUlRfUE9XRVIsCiAgICAgICAgQ09ORklHX1NUQVJUX1NLQVRF
UywKICAgICAgICBDT05GSUdfU1RBUlRfS0lDSywKICAgICAgICBDT05GSUdfU1RBUlRfR0xPVkUs
CgogICAgICAgIENPTkZJR19CT01CUywKICAgICAgICBDT05GSUdfUE9XRVIsCiAgICAgICAgQ09O
RklHX1NLQVRFUywKICAgICAgICBDT05GSUdfS0lDSywKICAgICAgICBDT05GSUdfR0xPVkUsCgog
ICAgICAgIENPTkZJR19NQVhfQk9NQlMsCiAgICAgICAgQ09ORklHX01BWF9QT1dFUiwKICAgICAg
ICBDT05GSUdfTUFYX1NLQVRFUywKCiAgICAgICAgQ09ORklHX1BPSU5UUywKICAgICAgICBDT05G
SUdfTUFQX1NFTCwKICAgICAgICBDT05GSUdfUk9VTkRfVElNRSwKICAgICAgICBDT05GSUdfTVVT
SUMsCgogICAgICAgIENPTkZJR19KT0lOVCwKICAgICAgICBDT05GSUdfVklBR1JBLAogICAgICAg
IENPTkZJR19LT0tTLAoKICAgICAgICBDT05GSUdfS0lEU19NT0RFLAogICAgICAgIENPTkZJR19T
SEFLRSwKICAgICAgICBDT05GSUdfQ09SUFNFX1BBUlRTLAogICAgICAgIENPTkZJR19SQU5ET01f
UE9TSVRJT05TLAogICAgICAgIENPTkZJR19SQU5ET01fTUFQX09SREVSLAoKICAgICAgICBDT05G
SUdfQk9NQl9DT1VOVERPV04sCiAgICAgICAgQ09ORklHX0JPTUJfREVMQVksCiAgICAgICAgQ09O
RklHX0JPTUJfU1BFRUQsCgogICAgICAgIExPQ0FMR0FNRV9TVEFSVAp9OwoKdHlwZWRlZiBlbnVt
CnsKICAgICAgICBESVJfTk9ORSA9IC0xLAogICAgICAgIERJUl9ET1dOID0gMCwKICAgICAgICBE
SVJfTEVGVCA9IDEsCiAgICAgICAgRElSX1VQID0gMiwKICAgICAgICBESVJfUklHSFQgPSAzCn0g
RGlyZWN0aW9uOwoKCmNsYXNzIENsYW5Cb21iZXJBcHBsaWNhdGlvbiA6IHB1YmxpYyBDTF9DbGFu
QXBwbGljYXRpb24KewpmcmllbmQgY2xhc3MgRGVidWc7CnByb3RlY3RlZDoKCiAgICAgICAgdm9p
ZCBydW5faW50cm8oKTsKICAgICAgICB2b2lkIGluaXRfZ2FtZSgpOwogICAgICAgIHZvaWQgZGVp
bml0X2dhbWUoKTsKICAgICAgICB2b2lkIHNob3dfdHV0b3JpYWwoKTsKCiAgICAgICAgdm9pZCBy
dW5fZ2FtZSgpOwogICAgICAgIHZvaWQgc2hvd19hbGwoKTsKICAgICAgICB2b2lkIGFjdF9hbGwo
KTsKICAgICAgICB2b2lkIGRlbGV0ZV9zb21lKCk7CgoKICAgICAgICBNZW51KiBtZW51OwoKICAg
ICAgICBPYnNlcnZlciogb2JzZXJ2ZXI7CiAgICAgICAgQ0xfU291bmRCdWZmZXIqIHdhdjsKICAg
ICAgICBDTF9Tb3VuZEJ1ZmZlcl9TZXNzaW9uKiBzZXM7CgogICAgICAgIHN0YXRpYyBDTF9TdHJp
bmcgbWFwX3BhdGg7CiAgICAgICAgc3RhdGljIENMX1N0cmluZyBsb2NhbF9tYXBfcGF0aDsKCiAg
ICAgICAgYm9vbCBrZXlfRjE7CiAgICAgICAgYm9vbCBzaG93X2ZwczsKICAgICAgICBpbnQgZnBz
OwogICAgICAgIGludCBmcmFtZV9jb3VudDsKICAgICAgICBmbG9hdCBmcmFtZV90aW1lOwoKcHVi
bGljOgogICAgICAgIE1hcCogbWFwOwogICAgICAgIENMX0xpc3Q8R2FtZU9iamVjdD4gb2JqZWN0
czsKICAgICAgICBDTF9MaXN0PEJvbWJlcj4gYm9tYmVyX29iamVjdHM7CiAgICAgICAgdmlydHVh
bCBjaGFyICpnZXRfdGl0bGUoKTsKICAgICAgICB2aXJ0dWFsIGludCBtYWluKGludCBhcmdjLCBj
aGFyKiogYXJndik7CgogICAgICAgIHN0YXRpYyBDTF9TdHJpbmcgZ2V0X21hcF9wYXRoKCk7CiAg
ICAgICAgc3RhdGljIENMX1N0cmluZyBnZXRfbG9jYWxfbWFwX3BhdGgoKTsKCgogICAgICAgIHZp
cnR1YWwgdm9pZCBpbml0X21vZHVsZXMoKQogICAgewogICAgICAgICAgICAgICAgICAgICAgICBD
TF9TZXR1cENvcmU6OmluaXQoKTsKICAgICAgICAgICAgICAgIENMX1NldHVwRGlzcGxheTo6aW5p
dCgpOwogICAgICAgICAgICAgICAgQ0xfU2V0dXBTb3VuZDo6aW5pdCgpOwogICAgICAgICAgICAg
ICAgQ0xfU2V0dXBNaWtNb2Q6OmluaXQoKTsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgdm9p
ZCBkZWluaXRfbW9kdWxlcygpCiAgICAgICAgewogICAgICAgICAgICAgICAgQ0xfU2V0dXBNaWtN
b2Q6OmRlaW5pdCgpOwogICAgICAgICAgICAgICAgQ0xfU2V0dXBTb3VuZDo6ZGVpbml0KCk7CiAg
ICAgICAgICAgICAgICBDTF9TZXR1cERpc3BsYXk6OmRlaW5pdCgpOwogICAgICAgICAgICAgICAg
Q0xfU2V0dXBDb3JlOjpkZWluaXQoKTsKICAgICAgICB9Cn07CiMgMTc3ICJDbGFuQm9tYmVyLmgi
CmNsYXNzIENMX0lucHV0U291cmNlOwpjbGFzcyBDTF9JbnB1dEJ1ZmZlcjsKQ0xfU3RyaW5nIHJl
YWRfbGluZSggQ0xfSW5wdXRTb3VyY2UqIGluICk7CmludCBlbnRlcl9zdHJpbmcoIENMX0lucHV0
QnVmZmVyICprZXlfYnVmZmVyLCBDTF9TdHJpbmcgJnN0cmluZyApOwojIDMwICJNYXAuY3BwIiAy
CiMgMSAiTWFwLmgiIDEKIyAyMyAiTWFwLmgiCiMgMSAiTWFwRW50cnkuaCIgMQojIDI3ICJNYXBF
bnRyeS5oIgpjbGFzcyBNYXBFbnRyeQp7CnB1YmxpYzoKICAgICAgICBNYXBFbnRyeSggQ0xfU3Ry
aW5nIF9wYXRoLCBDTF9TdHJpbmcgX2ZpbGVuYW1lICk7CiAgICAgICAgTWFwRW50cnkoIENMX1N0
cmluZyBfbmFtZSApOwogICAgICAgIH5NYXBFbnRyeSgpOwoKICAgICAgICBDTF9WZWN0b3IgZ2V0
X2JvbWJlcl9wb3MoaW50IG5yKTsKICAgICAgICBpbnQgZ2V0X21heF9wbGF5ZXJzKCk7CiAgICAg
ICAgQ0xfU3RyaW5nIGdldF9uYW1lKCk7CiAgICAgICAgQ0xfU3RyaW5nIGdldF9hdXRob3IoKTsK
ICAgICAgICBib29sIGlzX2VuYWJsZWQoKTsKICAgICAgICBib29sIGlzX3dyaXRhYmxlKCk7CiAg
ICAgICAgYm9vbCB0b2dnbGUoKTsKICAgICAgICB2b2lkIGVuYWJsZSgpOwogICAgICAgIHZvaWQg
ZGlzYWJsZSgpOwoKICAgICAgICBpbnQgZ2V0X2RhdGEoaW50IHgsIGludCB5KTsKICAgICAgICB2
b2lkIHNldF9kYXRhKGludCB4LCBpbnQgeSwgY2hhciBkYXRhKTsKICAgICAgICB2b2lkIHNldF9i
b21iZXJfcG9zKGludCB4LCBpbnQgeSwgaW50IG51bWJlcik7CiAgICAgICAgdm9pZCBzZXRfbWF4
X3BsYXllcnMoaW50IG5yKTsKICAgICAgICB2b2lkIHNldF9hdXRob3IoQ0xfU3RyaW5nIF9hdXRo
b3IpOwogICAgICAgIHZvaWQgd3JpdGVfYmFjaygpOwogICAgICAgIHZvaWQgY2xlYXIoKTsKICAg
ICAgICB2b2lkIHJlbG9hZCgpOwogICAgICAgIHZvaWQgcmVhZF9ib21iZXJfcG9zaXRpb25zKCk7
CiAgICAgICAgdm9pZCBkZWxldGVfZmlsZSgpOwogICAgICAgIHZvaWQgcmFuZG9taXplX2JvbWJl
cl9wb3NpdGlvbnMoKTsKCnByb3RlY3RlZDoKICAgICAgICBDTF9TdHJpbmcgcGF0aDsKICAgICAg
ICBDTF9TdHJpbmcgZmlsZW5hbWU7CiAgICAgICAgQ0xfU3RyaW5nIG1hcF9uYW1lOwogICAgICAg
IENMX1N0cmluZyBhdXRob3I7CiAgICAgICAgYm9vbCBlbmFibGVkOwogICAgICAgIGJvb2wgd3Jp
dGFibGU7CiAgICAgICAgaW50IG1heF9wbGF5ZXJzOwogICAgICAgIENMX1ZlY3RvciBib21iZXJf
cG9zWzhdOwogICAgICAgIGNoYXIgbWFwX2RhdGFbMTddWzEzXTsKfTsKIyAyNCAiTWFwLmgiIDIK
CmNsYXNzIENsYW5Cb21iZXJBcHBsaWNhdGlvbjsKY2xhc3MgTWFwVGlsZTsKCmNsYXNzIE1hcAp7
CnB1YmxpYzoKICAgICAgICBNYXAoIENsYW5Cb21iZXJBcHBsaWNhdGlvbiogX2FwcCApOwogICAg
ICAgIH5NYXAoKTsKCiAgICAgICAgYm9vbCBhZGRfYm9tYiggaW50IGJ4LCBpbnQgYnksIGludCBi
cG93ZXIsIEJvbWJlciAqYm9tYmVyICk7CiAgICAgICAgdm9pZCBjbGVhcigpOwogICAgICAgIHZv
aWQgbG9hZChpbnQgbWFwX25yICk7CiAgICAgICAgdm9pZCBsb2FkX3JhbmRvbV92YWxpZCgpOwog
ICAgICAgIHZvaWQgbG9hZF9uZXh0X3ZhbGlkKGludCBtYXBfbnIgPSAtMSk7CiAgICAgICAgdm9p
ZCBsb2FkX3ByZXZpb3VzX3ZhbGlkKGludCBtYXBfbnIgPSAtMSk7CiAgICAgICAgdm9pZCBzaG93
KCk7CiAgICAgICAgdm9pZCBzaG93X3ByZXZpZXcoIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9y
ICk7CiAgICAgICAgdm9pZCBzaG93X3JhbmRvbV9ib3hlcygpOwogICAgICAgIHZvaWQgc2hvd19z
dGFydF9wb3NpdGlvbnMoKTsKICAgICAgICB2b2lkIHJlZnJlc2hfaG9sZXMoKTsKICAgICAgICB2
b2lkIGFjdCgpOwogICAgICAgIHZvaWQgc2hha2UoIGludCBfc2hha2UgKTsKICAgICAgICB2b2lk
IHNhdmVfc2VsZWN0aW9uKCk7CiAgICAgICAgdm9pZCBsb2FkX3NlbGVjdGlvbigpOwogICAgICAg
IE1hcFRpbGUqIGdldF9wYXNzYWJsZSgpOwogICAgICAgIE1hcFRpbGUqIGdldF9yYW5kb20oKTsK
ICAgICAgICBNYXBUaWxlKiBnZXRfbWFwdGlsZShpbnQgeCwgaW50IHkpOwogICAgICAgIE1hcFRp
bGUqIGdldF9tYXB0aWxlX3h5IChpbnQgeCwgaW50IHkpOwoKICAgICAgICBDTF9TdHJpbmcgZ2V0
X25hbWUoKTsKICAgICAgICBDTF9TdHJpbmcgZ2V0X2F1dGhvcigpOwogICAgICAgIGludCBnZXRf
bWF4X3BsYXllcnMoKTsKCiAgICAgICAgQ0xfVmVjdG9yIGdldF9ib21iZXJfcG9zKGludCBucik7
CiAgICAgICAgdm9pZCByYW5kb21pemVfYm9tYmVyX3Bvc2l0aW9ucygpOwoKICAgICAgICB2b2lk
IHJlbG9hZCgpOwogICAgICAgIGludCBnZXRfbWFwX2NvdW50KCk7CiAgICAgICAgYm9vbCBhbnlf
dmFsaWRfbWFwKCk7CgogICAgICAgIGludCBuZXdfZW50cnkoIENMX1N0cmluZyBfbmFtZSApOwog
ICAgICAgIGludCBkZWxldGVfZW50cnkoIGludCBuciApOwoKICAgICAgICBmcmllbmQgc3RkOjpv
c3RyZWFtJiBvcGVyYXRvciA8PCAoc3RkOjpvc3RyZWFtJiwgTWFwJiBtKTsKCgogICAgICAgIHN0
YXRpYyBDTF9MaXN0PE1hcEVudHJ5PiBtYXBfbGlzdDsKCnByb3RlY3RlZDoKICAgICAgICBDbGFu
Qm9tYmVyQXBwbGljYXRpb24qIGFwcDsKICAgICAgICBpbnQgaXNfc2hha2VuOwoKICAgICAgICBN
YXBUaWxlKiBtYXB0aWxlc1sxN11bMTNdOwogICAgICAgIE1hcFRpbGUqIGR1bW15X21hcHRpbGU7
CgogICAgICAgIE1hcEVudHJ5ICpjdXJyZW50X21hcDsKICAgICAgICBDTF9JdGVyYXRvcjxNYXBF
bnRyeT4gKm1hcHM7CgogICAgICAgIHZvaWQgZW51bV9tYXBzKCk7CiAgICAgICAgdm9pZCBzb3J0
X21hcHMoKTsKICAgICAgICB2b2lkIHNwaW5fdXAoKTsKICAgICAgICB2b2lkIHNwaW5fZG93bigp
OwogICAgICAgIHZvaWQgc3Bpbl90byhpbnQgbnIpOwp9OwojIDMxICJNYXAuY3BwIiAyCgojIDEg
Ik1hcFRpbGUuaCIgMQojIDIyICJNYXBUaWxlLmgiCmNsYXNzIEdhbWVPYmplY3Q7CmNsYXNzIEJv
bWI7CgoKCgoKY2xhc3MgTWFwVGlsZQp7CnB1YmxpYzoKICAgICAgICBNYXBUaWxlKGludCBfeCwg
aW50IF95LCBDbGFuQm9tYmVyQXBwbGljYXRpb24qIF9hcHApOwogICAgICAgIHZpcnR1YWwgfk1h
cFRpbGUoKTsKCiAgICAgICAgdHlwZWRlZiBlbnVtCiAgICAgICAgewogICAgICAgICAgICAgICAg
Tk9ORSA9IC0zLAogICAgICAgICAgICAgICAgQVJST1cgPSAtMiwKICAgICAgICAgICAgICAgIElD
RSA9IC0xLAogICAgICAgICAgICAgICAgR1JPVU5EID0gMCwKICAgICAgICAgICAgICAgIFdBTEwg
PSAxLAogICAgICAgICAgICAgICAgQk9YID0gMiwKICAgICAgICAgICAgICAgIFRSQVAsCiAgICAg
ICAgfSBUWVBFOwoKICAgICAgICB2aXJ0dWFsIFRZUEUgZ2V0X3R5cGUoKSA9MDsKCiAgICAgICAg
c3RhdGljIE1hcFRpbGUqIGNyZWF0ZSggVFlQRSB0eXBlLCBpbnQgX3gsIGludCBfeSwgQ2xhbkJv
bWJlckFwcGxpY2F0aW9uKiBfYXBwICk7CiAgICAgICAgc3RhdGljIE1hcFRpbGUqIHNwYXduKCBN
YXBUaWxlKiBvbGRfdGlsZSApOwoKICAgICAgICB2b2lkIHNldF9wb3MoIGludCBfeCwgaW50IF95
ICk7CiAgICAgICAgaW50IGdldF94KCk7CiAgICAgICAgaW50IGdldF95KCk7CiAgICAgICAgdm9p
ZCBzZXRfc3ByaXRlX25yKCBpbnQgc3ByaXRlICk7CgogICAgICAgIHZvaWQgc3Bhd25fZXh0cmEo
KTsKCiAgICAgICAgdmlydHVhbCB2b2lkIGFjdCgpOwogICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3
KGludCBhZGR4ID0wLCBpbnQgYWRkeSA9MCk7CiAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdfdGlu
eShpbnQgeCwgaW50IHksIGZsb2F0IGZhY3Rvcik7CiAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdf
c2hha2VuKCk7CgogICAgICAgIENMX0xpc3Q8R2FtZU9iamVjdD4gb2JqZWN0czsKCiAgICAgICAg
TWFwVGlsZSAqcmlnaHQsICpsZWZ0LCAqdXAsICpkb3duOwoKICAgICAgICBib29sIGlzX3Zhbmlz
aGluZygpIHsgcmV0dXJuIHZhbmlzaGluZzsgfQogICAgICAgIGJvb2wgaXNfZGVzdHJveWVkKCkg
eyByZXR1cm4gZGVzdHJveWVkOyB9CiAgICAgICAgYm9vbCBoYXNfZXh0cmEoKTsKICAgICAgICBi
b29sIGhhc19ib21iZXIoKTsKICAgICAgICBib29sIGlzX3Bhc3NhYmxlKCk7CiAgICAgICAgYm9v
bCBpc19ibG9ja2luZygpOwoKICAgICAgICB2aXJ0dWFsIHZvaWQgdmFuaXNoKCk7CiAgICAgICAg
dmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKCiAgICAgICAgQm9tYiAqYm9tYjsKCiAgICAgICAgYm9v
bCBkZWxldGVfbWU7Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW50IHg7CiAgICAgICAgaW50IHk7CiAg
ICAgICAgaW50IHNwcml0ZV9ucjsKICAgICAgICBUWVBFIG5leHQ7CgogICAgICAgIGJvb2wgdmFu
aXNoaW5nOwogICAgICAgIGJvb2wgZGVzdHJveWVkOwogICAgICAgIGJvb2wgcGFzc2FibGU7CiAg
ICAgICAgYm9vbCBibG9ja2luZzsKCiAgICAgICAgZmxvYXQgdmFuaXNoX2NvdW50ZG93bjsKICAg
ICAgICBmbG9hdCBkZXN0cm95X2NvdW50ZG93bjsKCiAgICAgICAgQ2xhbkJvbWJlckFwcGxpY2F0
aW9uKiBhcHA7Cn07CiMgMzMgIk1hcC5jcHAiIDIKIyAxICJNYXBUaWxlX0Fycm93LmgiIDEKIyAy
MSAiTWFwVGlsZV9BcnJvdy5oIgojIDEgIk1hcFRpbGVfR3JvdW5kLmgiIDEKIyAyOCAiTWFwVGls
ZV9Hcm91bmQuaCIKY2xhc3MgTWFwVGlsZV9Hcm91bmQgOiBwdWJsaWMgTWFwVGlsZQp7CnB1Ymxp
YzoKICAgICAgICBNYXBUaWxlX0dyb3VuZChpbnQgX3gsIGludCBfeSwgQ2xhbkJvbWJlckFwcGxp
Y2F0aW9uKiBfYXBwKTsKICAgICAgICB2aXJ0dWFsIH5NYXBUaWxlX0dyb3VuZCgpOwoKICAgICAg
ICB2b2lkIGFjdCgpOwoKICAgICAgICBUWVBFIGdldF90eXBlKCkgeyByZXR1cm4gR1JPVU5EOyB9
Cn07CiMgMjIgIk1hcFRpbGVfQXJyb3cuaCIgMgoKCgoKCmNsYXNzIE1hcFRpbGVfQXJyb3cgOiBw
dWJsaWMgTWFwVGlsZV9Hcm91bmQKewpwdWJsaWM6CgoKICAgICAgICBNYXBUaWxlX0Fycm93KGlu
dCBfeCwgaW50IF95LCBEaXJlY3Rpb24gX2RpciwgQ2xhbkJvbWJlckFwcGxpY2F0aW9uKiBfYXBw
KTsKICAgICAgICB2aXJ0dWFsIH5NYXBUaWxlX0Fycm93KCk7CgogICAgICAgIHZvaWQgYWN0KCk7
CiAgICAgICAgdm9pZCBkcmF3KGludCBhZGR4LCBpbnQgYWRkeSk7CiAgICAgICAgdm9pZCBkcmF3
X3RpbnkoIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yICk7CiAgRGlyZWN0aW9uIGdldF9kaXJl
Y3Rpb24oKSBjb25zdAogICAgICAgIHsKICAgIHJldHVybiBkaXI7CiAgICAgICAgfQogICAgICAg
IFRZUEUgZ2V0X3R5cGUoKSB7IHJldHVybiBBUlJPVzsgfQoKcHJvdGVjdGVkOgogICAgICAgIERp
cmVjdGlvbiBkaXI7CiAgICAgICAgQm9tYiogb2xkX2JvbWI7CiAgICAgICAgZmxvYXQgY2hpbGxf
Y291bnRkb3duOwp9OwojIDM0ICJNYXAuY3BwIiAyCiMgMSAiTWFwVGlsZV9UcmFwLmgiIDEKIyAy
MiAiTWFwVGlsZV9UcmFwLmgiCmNsYXNzIEJvbWI7CgoKCgoKCgpjbGFzcyBNYXBUaWxlX1RyYXAg
OiBwdWJsaWMgTWFwVGlsZV9Hcm91bmQgewpwdWJsaWM6CiAgICAgICAgTWFwVGlsZV9UcmFwKGlu
dCBfeCwgaW50IF95LCBDbGFuQm9tYmVyQXBwbGljYXRpb24qIF9hcHApOwogICAgICAgIH5NYXBU
aWxlX1RyYXAoKTsKCiAgICAgICAgdm9pZCBhY3QoKTsKICAgICAgICB2b2lkIGRyYXcoaW50IGFk
ZHgsIGludCBhZGR5KTsKICAgICAgICB2b2lkIGRyYXdfdGlueSggaW50IHgsIGludCB5LCBmbG9h
dCBmYWN0b3IgKTsKICAgICAgICBUWVBFIGdldF90eXBlKCkgeyByZXR1cm4gVFJBUDsgfQoKcHJv
dGVjdGVkOgogICAgICAgIGNsYXNzIEJvbWJfRW50cnkKICAgICAgICB7CiAgICAgICAgcHVibGlj
OgogICAgICAgICAgICAgICAgQm9tYl9FbnRyeSggQm9tYiAqX2JvbWIgKTsKICAgICAgICAgICAg
ICAgIHZvaWQgY291bnQoKTsKICAgICAgICAgICAgICAgIGJvb2wgcmVhZHlfdG9fc2hvb3QoKTsK
ICAgICAgICAgICAgICAgIEJvbWIgKmdldF9ib21iKCkgeyByZXR1cm4gYm9tYjsgfQogICAgICAg
IHByb3RlY3RlZDoKICAgICAgICAgICAgICAgIGZsb2F0IGNvdW50ZG93bjsKICAgICAgICAgICAg
ICAgIEJvbWIgKmJvbWI7CiAgICAgICAgfTsKCiAgICAgICAgQ0xfTGlzdDxCb21iX0VudHJ5PiBi
b21iczsKfTsKIyAzNSAiTWFwLmNwcCIgMgojIDEgIk1hcFRpbGVfV2FsbC5oIiAxCiMgMjggIk1h
cFRpbGVfV2FsbC5oIgpjbGFzcyBNYXBUaWxlX1dhbGwgOiBwdWJsaWMgTWFwVGlsZQp7CnB1Ymxp
YzoKICAgICAgICBNYXBUaWxlX1dhbGwoaW50IF94LCBpbnQgX3ksIENsYW5Cb21iZXJBcHBsaWNh
dGlvbiogX2FwcCk7CiAgICAgICAgdmlydHVhbCB+TWFwVGlsZV9XYWxsKCk7CgogICAgICAgIHZv
aWQgYWN0KCk7CgogICAgICAgIHZpcnR1YWwgdm9pZCB2YW5pc2goKTsKCiAgICAgICAgVFlQRSBn
ZXRfdHlwZSgpIHsgcmV0dXJuIFdBTEw7IH0KfTsKIyAzNiAiTWFwLmNwcCIgMgoKIyAxICJDb25m
aWcuaCIgMQojIDIyICJDb25maWcuaCIKY2xhc3MgQm9tYmVyQ29uZmlnCnsKcHVibGljOgogICAg
ICAgIEJvbWJlckNvbmZpZygpOwogICAgICAgIH5Cb21iZXJDb25maWcoKTsKCiAgICAgICAgaW50
IGdldF9za2luKCk7CiAgICAgICAgQ0xfU3RyaW5nIGdldF9uYW1lKCk7CiAgICAgICAgaW50IGdl
dF90ZWFtKCk7CiAgICAgICAgaW50IGdldF9jb250cm9sbGVyKCk7CgogICAgICAgIHZvaWQgc2V0
X3NraW4oaW50IF9za2luKTsKICAgICAgICB2b2lkIHNldF9uYW1lKENMX1N0cmluZyBfbmFtZSk7
CiAgICAgICAgdm9pZCBzZXRfdGVhbShpbnQgX3RlYW0pOwogICAgICAgIHZvaWQgc2V0X2NvbnRy
b2xsZXIoaW50IF9jb250cm9sbGVyKTsKICAgICAgICB2b2lkIHNldF9oaWdobGlnaHRfbWFwdGls
ZShib29sIF9oaWdobGlnaHRfbWFwdGlsZSk7CiAgICAgICAgaW50IGdldF9oaWdobGlnaHRfbWFw
dGlsZSgpOwogICAgICAgIHZvaWQgZW5hYmxlKCk7CiAgICAgICAgdm9pZCBkaXNhYmxlKCk7CiAg
ICAgICAgaW50IGlzX2VuYWJsZWQoKTsKICAgICAgICB2b2lkIHNldF9lbmFibGVkKGJvb2wgX2Vu
YWJsZWQpOwoKcHJvdGVjdGVkOgogICAgICAgIGludCBlbmFibGVkOwogICAgICAgIGludCBza2lu
OwogICAgICAgIENMX1N0cmluZyBuYW1lOwogICAgICAgIGludCB0ZWFtOwogICAgICAgIGludCBj
b250cm9sbGVyOwogICAgICAgIGludCBoaWdobGlnaHRfbWFwdGlsZTsKfTsKCmNsYXNzIENvbmZp
Zwp7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdm9pZCBzZXRfcm91bmRfdGltZShpbnQpOwoKICAg
ICAgICBzdGF0aWMgdm9pZCBzZXRfbWF4X3NrYXRlYm9hcmRzKGludCk7CiAgICAgICAgc3RhdGlj
IHZvaWQgc2V0X21heF9wb3dlcihpbnQpOwogICAgICAgIHN0YXRpYyB2b2lkIHNldF9tYXhfYm9t
YnMoaW50KTsKCiAgICAgICAgc3RhdGljIHZvaWQgc2V0X3N0YXJ0X3NrYXRlYm9hcmRzKGludCk7
CiAgICAgICAgc3RhdGljIHZvaWQgc2V0X3N0YXJ0X3Bvd2VyKGludCk7CiAgICAgICAgc3RhdGlj
IHZvaWQgc2V0X3N0YXJ0X2JvbWJzKGludCk7CiAgICAgICAgc3RhdGljIHZvaWQgc2V0X3N0YXJ0
X2tpY2soaW50KTsKICAgICAgICBzdGF0aWMgdm9pZCBzZXRfc3RhcnRfZ2xvdmUoaW50KTsKCiAg
ICAgICAgc3RhdGljIHZvaWQgc2V0X3NrYXRlYm9hcmRzKGludCk7CiAgICAgICAgc3RhdGljIHZv
aWQgc2V0X3Bvd2VyKGludCk7CiAgICAgICAgc3RhdGljIHZvaWQgc2V0X2JvbWJzKGludCk7CiAg
ICAgICAgc3RhdGljIHZvaWQgc2V0X2tpY2soaW50KTsKICAgICAgICBzdGF0aWMgdm9pZCBzZXRf
Z2xvdmUoaW50KTsKCiAgICAgICAgc3RhdGljIHZvaWQgc2V0X2pvaW50KGludCk7CiAgICAgICAg
c3RhdGljIHZvaWQgc2V0X3ZpYWdyYShpbnQpOwogICAgICAgIHN0YXRpYyB2b2lkIHNldF9rb2tz
KGludCk7CgogICAgICAgIHN0YXRpYyB2b2lkIHNldF9zdGFydF9tYXAoaW50KTsKICAgICAgICBz
dGF0aWMgdm9pZCBzZXRfcmFuZG9tX21hcF9vcmRlcihpbnQpOwoKICAgICAgICBzdGF0aWMgdm9p
ZCBzZXRfcG9pbnRzX3RvX3dpbihpbnQpOwogICAgICAgIHN0YXRpYyB2b2lkIHNldF90aGVtZShp
bnQpOwogICAgICAgIHN0YXRpYyB2b2lkIHNldF9tdXNpYyhpbnQpOwoKICAgICAgICBzdGF0aWMg
dm9pZCBzZXRfa2lkc19tb2RlKGludCk7CiAgICAgICAgc3RhdGljIHZvaWQgc2V0X3NoYWt5X2V4
cGxvc2lvbnMoaW50KTsKICAgICAgICBzdGF0aWMgdm9pZCBzZXRfaGlnaGxpZ2h0X21hcHRpbGVz
KGludCk7CiAgICAgICAgc3RhdGljIHZvaWQgc2V0X3JhbmRvbV9wb3NpdGlvbnMoaW50KTsKICAg
ICAgICBzdGF0aWMgdm9pZCBzZXRfY29ycHNlX3BhcnRzKGludCk7CgogICAgICAgIHN0YXRpYyB2
b2lkIHNldF9ib21iX2NvdW50ZG93bihpbnQpOwogICAgICAgIHN0YXRpYyB2b2lkIHNldF9ib21i
X2RlbGF5KGludCk7CiAgICAgICAgc3RhdGljIHZvaWQgc2V0X2JvbWJfc3BlZWQoaW50KTsKCiAg
ICAgICAgc3RhdGljIHZvaWQgc2V0X2ZpbGVuYW1lKENMX1N0cmluZyBfZmlsZW5hbWUpOwoKICAg
ICAgICBzdGF0aWMgaW50IGdldF9yb3VuZF90aW1lKCk7CiAgICAgICAgc3RhdGljIGludCBnZXRf
cmFuZG9tX21hcF9vcmRlcigpOwoKICAgICAgICBzdGF0aWMgaW50IGdldF9tYXhfc2thdGVib2Fy
ZHMoKTsKICAgICAgICBzdGF0aWMgaW50IGdldF9tYXhfcG93ZXIoKTsKICAgICAgICBzdGF0aWMg
aW50IGdldF9tYXhfYm9tYnMoKTsKCiAgICAgICAgc3RhdGljIGludCBnZXRfc3RhcnRfc2thdGVi
b2FyZHMoKTsKICAgICAgICBzdGF0aWMgaW50IGdldF9zdGFydF9wb3dlcigpOwogICAgICAgIHN0
YXRpYyBpbnQgZ2V0X3N0YXJ0X2JvbWJzKCk7CiAgICAgICAgc3RhdGljIGludCBnZXRfc3RhcnRf
a2ljaygpOwogICAgICAgIHN0YXRpYyBpbnQgZ2V0X3N0YXJ0X2dsb3ZlKCk7CgogICAgICAgIHN0
YXRpYyBpbnQgZ2V0X3NrYXRlYm9hcmRzKCk7CiAgICAgICAgc3RhdGljIGludCBnZXRfcG93ZXIo
KTsKICAgICAgICBzdGF0aWMgaW50IGdldF9ib21icygpOwogICAgICAgIHN0YXRpYyBpbnQgZ2V0
X2tpY2soKTsKICAgICAgICBzdGF0aWMgaW50IGdldF9nbG92ZSgpOwoKICAgICAgICBzdGF0aWMg
aW50IGdldF9qb2ludCgpOwogICAgICAgIHN0YXRpYyBpbnQgZ2V0X3ZpYWdyYSgpOwogICAgICAg
IHN0YXRpYyBpbnQgZ2V0X2tva3MoKTsKCiAgICAgICAgc3RhdGljIGludCBnZXRfc3RhcnRfbWFw
KCk7CgogICAgICAgIHN0YXRpYyBpbnQgZ2V0X3BvaW50c190b193aW4oKTsKICAgICAgICBzdGF0
aWMgaW50IGdldF90aGVtZSgpOwoKICAgICAgICBzdGF0aWMgaW50IGdldF9tdXNpYygpOwoKICAg
ICAgICBzdGF0aWMgaW50IGdldF9raWRzX21vZGUoKTsKICAgICAgICBzdGF0aWMgaW50IGdldF9z
aGFreV9leHBsb3Npb25zKCk7CiAgICAgICAgc3RhdGljIGludCBnZXRfaGlnaGxpZ2h0X21hcHRp
bGVzKCk7CiAgICAgICAgc3RhdGljIGludCBnZXRfcmFuZG9tX3Bvc2l0aW9ucygpOwogICAgICAg
IHN0YXRpYyBpbnQgZ2V0X2NvcnBzZV9wYXJ0cygpOwoKICAgICAgICBzdGF0aWMgaW50IGdldF9u
dW1iZXJfb2ZfcGxheWVycygpOwogICAgICAgIHN0YXRpYyBpbnQgZ2V0X251bWJlcl9vZl9vcHBv
bmVudHMoKTsKCiAgICAgICAgc3RhdGljIGludCBnZXRfYm9tYl9jb3VudGRvd24oKTsKICAgICAg
ICBzdGF0aWMgaW50IGdldF9ib21iX2RlbGF5KCk7CiAgICAgICAgc3RhdGljIGludCBnZXRfYm9t
Yl9zcGVlZCgpOwoKICAgICAgICBzdGF0aWMgYm9vbCBsb2FkKCk7CiAgICAgICAgc3RhdGljIGJv
b2wgc2F2ZShib29sIGluaXQ9ZmFsc2UpOwoKICAgICAgICBzdGF0aWMgQm9tYmVyQ29uZmlnIGJv
bWJlcls4XTsKCnByb3RlY3RlZDoKICAgICAgICBzdGF0aWMgaW50IHJvdW5kX3RpbWU7CiAgICAg
ICAgc3RhdGljIGludCByYW5kb21fbWFwX29yZGVyOwoKICAgICAgICBzdGF0aWMgaW50IG1heF9z
a2F0ZWJvYXJkczsKICAgICAgICBzdGF0aWMgaW50IG1heF9wb3dlcjsKICAgICAgICBzdGF0aWMg
aW50IG1heF9ib21iczsKCiAgICAgICAgc3RhdGljIGludCBzdGFydF9ib21iczsKICAgICAgICBz
dGF0aWMgaW50IHN0YXJ0X3Bvd2VyOwogICAgICAgIHN0YXRpYyBpbnQgc3RhcnRfc2thdGVib2Fy
ZHM7CiAgICAgICAgc3RhdGljIGludCBzdGFydF9raWNrOwogICAgICAgIHN0YXRpYyBpbnQgc3Rh
cnRfZ2xvdmU7CgogICAgICAgIHN0YXRpYyBpbnQgYm9tYnM7CiAgICAgICAgc3RhdGljIGludCBw
b3dlcjsKICAgICAgICBzdGF0aWMgaW50IHNrYXRlYm9hcmRzOwogICAgICAgIHN0YXRpYyBpbnQg
a2ljazsKICAgICAgICBzdGF0aWMgaW50IGdsb3ZlOwoKICAgICAgICBzdGF0aWMgaW50IGpvaW50
OwogICAgICAgIHN0YXRpYyBpbnQgdmlhZ3JhOwogICAgICAgIHN0YXRpYyBpbnQga29rczsKCiAg
ICAgICAgc3RhdGljIGludCBzdGFydF9tYXA7CiAgICAgICAgc3RhdGljIGludCBtdXNpYzsKICAg
ICAgICBzdGF0aWMgaW50IGtpZHNfbW9kZTsKICAgICAgICBzdGF0aWMgaW50IHNoYWt5X2V4cGxv
c2lvbnM7CiAgICAgICAgc3RhdGljIGludCBoaWdobGlnaHRfbWFwdGlsZXM7CiAgICAgICAgc3Rh
dGljIGludCByYW5kb21fcG9zaXRpb25zOwogICAgICAgIHN0YXRpYyBpbnQgY29ycHNlX3BhcnRz
OwoKICAgICAgICBzdGF0aWMgaW50IGJvbWJfY291bnRkb3duOwogICAgICAgIHN0YXRpYyBpbnQg
Ym9tYl9kZWxheTsKICAgICAgICBzdGF0aWMgaW50IGJvbWJfc3BlZWQ7CgogICAgICAgIHN0YXRp
YyBpbnQgcG9pbnRzX3RvX3dpbjsKICAgICAgICBzdGF0aWMgaW50IHRoZW1lOwoKICAgICAgICBz
dGF0aWMgQ0xfU3RyaW5nIGZpbGVuYW1lOwp9OwojIDM4ICJNYXAuY3BwIiAyCiMgMSAiQm9tYi5o
IiAxCiMgMjIgIkJvbWIuaCIKY2xhc3MgQm9tYmVyOwpjbGFzcyBNYXBUaWxlOwoKIyAxICJHYW1l
T2JqZWN0LmgiIDEKIyAyMiAiR2FtZU9iamVjdC5oIgojIDEgIkNsYW5Cb21iZXIuaCIgMQojIDE3
NyAiQ2xhbkJvbWJlci5oIgpjbGFzcyBDTF9JbnB1dFNvdXJjZTsKY2xhc3MgQ0xfSW5wdXRCdWZm
ZXI7CkNMX1N0cmluZyByZWFkX2xpbmUoIENMX0lucHV0U291cmNlKiBpbiApOwppbnQgZW50ZXJf
c3RyaW5nKCBDTF9JbnB1dEJ1ZmZlciAqa2V5X2J1ZmZlciwgQ0xfU3RyaW5nICZzdHJpbmcgKTsK
IyAyMyAiR2FtZU9iamVjdC5oIiAyCmNsYXNzIENsYW5Cb21iZXJBcHBsaWNhdGlvbjsKY2xhc3Mg
TWFwVGlsZTsKIyAzOCAiR2FtZU9iamVjdC5oIgpjbGFzcyBHYW1lT2JqZWN0CnsKcHVibGljOgog
ICAgICAgIEdhbWVPYmplY3QoIGludCBfeCwgaW50IF95LCBDbGFuQm9tYmVyQXBwbGljYXRpb24g
Kl9hcHAgKTsKICAgICAgICB2aXJ0dWFsIH5HYW1lT2JqZWN0KCk7CgogICAgICAgIHZvaWQgc2V0
X3BvcyggaW50IF94LCBpbnQgX3kgKTsKICAgICAgICB2b2lkIHNldF9kaXIgKERpcmVjdGlvbiBf
ZGlyKTsKICAgICAgICB2b2lkIHNldF9vcmlnKCBpbnQgX3gsIGludCBfeSApOwogICAgICAgIHZv
aWQgbW92ZV9wb3MoIGludCBfeCwgaW50IF95ICk7CiAgICAgICAgdm9pZCBzbmFwKCk7CiAgICAg
ICAgYm9vbCBtb3ZlKGludCBfc3BlZWQsIERpcmVjdGlvbiBfZGlyPURJUl9OT05FKTsKICAgICAg
ICB2b2lkIGluY19zcGVlZCggaW50IF9jPTEgKTsKICAgICAgICB2b2lkIGRlY19zcGVlZCggaW50
IF9jPTEgKTsKICAgICAgICB2b2lkIHNldF9zcGVlZCggaW50IF9zcGVlZCApOwogICAgICAgIHZp
cnR1YWwgdm9pZCBmYWxsKCk7CgogICAgICAgIGludCBnZXRfeCgpIGNvbnN0OwogICAgICAgIGlu
dCBnZXRfeSgpIGNvbnN0OwogICAgICAgIGludCBnZXRfeigpIGNvbnN0OwogICAgICAgIGludCBn
ZXRfbWFwX3goKSBjb25zdDsKICAgICAgICBpbnQgZ2V0X21hcF95KCkgY29uc3Q7CgogICAgICAg
IGludCBnZXRfc3BlZWQoKSBjb25zdDsKCiAgICAgICAgTWFwVGlsZSogZ2V0X21hcHRpbGUoKSBj
b25zdDsKCiAgICAgICAgYm9vbCBpc19mbHlpbmcoKSBjb25zdDsKICAgICAgICBib29sIGlzX3N0
b3BwZWQoKSBjb25zdDsKCiAgICAgICAgdm9pZCBzZXRfZmx5X292ZXJfd2FsbHMoYm9vbCB2YWwp
CiAgICAgICAgewogICAgICAgICAgICAgICAgY2FuX2ZseV9vdmVyX3dhbGxzID0gdmFsOwogICAg
ICAgIH0KCiAgICAgICAgRGlyZWN0aW9uIGdldF9jdXJfZGlyKCkgY29uc3Q7CgogICAgICAgIHR5
cGVkZWYgZW51bQogICAgICAgIHsKICAgICAgICAgICAgICAgIEJPTUIsCiAgICAgICAgICAgICAg
ICBCT01CRVIsCiAgICAgICAgICAgICAgICBCT01CRVJfQ09SUFNFLAogICAgICAgICAgICAgICAg
RVhQTE9TSU9OLAogICAgICAgICAgICAgICAgRVhUUkEsCiAgICAgICAgICAgICAgICBERUJVRywK
ICAgICAgICAgICAgICAgIE9CU0VSVkVSLAogICAgICAgICAgICAgICAgQ09SUFNFX1BBUlQKICAg
ICAgICB9IE9iamVjdFR5cGU7CgogICAgICAgIHZpcnR1YWwgT2JqZWN0VHlwZSBnZXRfdHlwZSgp
IGNvbnN0ID0wOwogICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAgICAgICAgdmlydHVhbCB2
b2lkIHNob3coKTsKICAgICAgICB2aXJ0dWFsIHZvaWQgYWN0KCk7CiAgICAgICAgdm9pZCBzaG93
IChpbnQgX3gsIGludCBfeSk7CiAgICAgICAgdm9pZCBzaG93IChpbnQgX3gsIGludCBfeSwgZmxv
YXQgX3NjYWxlKTsKICAgICAgICB2b2lkIGZseV90byAoaW50IF94LCBpbnQgX3ksIGludCBfc3Bl
ZWQ9MCk7CiAgICAgICAgdm9pZCBmbHlfdG8gKE1hcFRpbGUqLCBpbnQgX3NwZWVkPTApOwogICAg
ICAgIHZvaWQgZ2Fpbl9raWNrKCk7CiAgICAgICAgdm9pZCBsb29zZV9raWNrKCk7CgogICAgICAg
IGJvb2wgaXNfZmFsbGluZygpOwogICAgICAgIGJvb2wgaXNfYWJsZV90b19raWNrKCkgY29uc3QK
ICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY2FuX2tpY2s7CiAgICAgICAgfQoKCiAg
ICAgICAgYm9vbCBkZWxldGVfbWU7CiAgICAgICAgQ2xhbkJvbWJlckFwcGxpY2F0aW9uICphcHA7
Cgpwcm90ZWN0ZWQ6CgogICAgICAgIENMX1N1cmZhY2UqIHN1cmZhY2U7CgogICAgICAgIGludCBz
cHJpdGVfbnI7CgogICAgICAgIGludCBvZmZzZXRfeDsKICAgICAgICBpbnQgb2Zmc2V0X3k7Cgog
ICAgICAgIGZsb2F0IHg7CiAgICAgICAgZmxvYXQgeTsKICAgICAgICBpbnQgejsKICAgICAgICBp
bnQgb3JpZ194OwogICAgICAgIGludCBvcmlnX3k7CiAgICAgICAgZmxvYXQgcmVtYWluZGVyOwog
ICAgICAgIERpcmVjdGlvbiBjdXJfZGlyOwogICAgICAgIGludCBzcGVlZDsKCiAgICAgICAgYm9v
bCBtb3ZlKCk7CiAgICAgICAgYm9vbCBtb3ZlX2xlZnQoKTsKICAgICAgICBib29sIG1vdmVfcmln
aHQoKTsKICAgICAgICBib29sIG1vdmVfdXAoKTsKICAgICAgICBib29sIG1vdmVfZG93bigpOwoK
ICAgICAgICBpbnQgd2hhdHNfbGVmdCgpOwogICAgICAgIGludCB3aGF0c19yaWdodCgpOwogICAg
ICAgIGludCB3aGF0c191cCgpOwogICAgICAgIGludCB3aGF0c19kb3duKCk7CgogICAgICAgIHZv
aWQgY29udGludWVfZmx5aW5nKCk7CiAgICAgICAgdm9pZCBjb250aW51ZV9mYWxsaW5nKCk7Cgog
ICAgICAgIGJvb2wgZmFsbGluZzsKICAgICAgICBib29sIGZhbGxlbl9kb3duOwogICAgICAgIGZs
b2F0IGZhbGxfY291bnRkb3duOwoKICAgICAgICBib29sIGZseWluZzsKICAgICAgICBmbG9hdCBm
bHlfZGlzdF94OwogICAgICAgIGZsb2F0IGZseV9kaXN0X3k7CiAgICAgICAgZmxvYXQgZmx5X2Rl
c3RfeDsKICAgICAgICBmbG9hdCBmbHlfZGVzdF95OwogICAgICAgIGZsb2F0IGZseV9zcGVlZDsK
ICAgICAgICBmbG9hdCBmbHlfcHJvZ3Jlc3M7CgogICAgICAgIGJvb2wgY2FuX2tpY2s7CiAgICAg
ICAgYm9vbCBjYW5fcGFzc19ib21iZXI7CiAgICAgICAgYm9vbCBjYW5fZmx5X292ZXJfd2FsbHM7
CiAgICAgICAgYm9vbCBzdG9wcGVkOwoKcHJpdmF0ZToKICAgICAgICB2b2lkIGluaXQoQ2xhbkJv
bWJlckFwcGxpY2F0aW9uICpfYXBwKTsKCn07CiMgMjYgIkJvbWIuaCIgMgoKCmNsYXNzIEJvbWIg
OiBwdWJsaWMgR2FtZU9iamVjdAp7CnB1YmxpYzoKICAgICAgICB2b2lkIGV4cGxvZGVfZGVsYXll
ZCgpOwogICAgICAgIHZvaWQgZXhwbG9kZSgpOwogICAgICAgIHZvaWQga2ljayhEaXJlY3Rpb24g
ZGlyKTsKICAgICAgICB2b2lkIHRocm93dyhEaXJlY3Rpb24gZGlyLCBpbnQgZmllbGRzPTQgKTsK
ICAgICAgICB2b2lkIHN0b3AoKTsKICAgICAgICBpbnQgZ2V0X3Bvd2VyKCk7CiAgICAgICAgZmxv
YXQgZ2V0X2NvdW50ZG93bigpOwogICAgICAgIHZvaWQgc2V0X2NvdW50ZG93biggZmxvYXQgX2Nv
dW50ZG93biApOwogICAgICAgIEJvbWJlciogZ2V0X2JvbWJlcigpIGNvbnN0CiAgICAgICAgewog
ICAgICAgICAgICAgICAgcmV0dXJuIGJvbWJlcjsKICAgICAgICB9CiAgICAgICAgQm9tYiggaW50
IF94LCBpbnQgX3ksIGludCBfcG93ZXIsIEJvbWJlciAqX2JvbWJlciwgQ2xhbkJvbWJlckFwcGxp
Y2F0aW9uICpfYXBwICk7CiAgICAgICAgfkJvbWIoKTsKCiAgICAgICAgdmlydHVhbCB2b2lkIHNo
b3coKTsKICAgICAgICB2aXJ0dWFsIHZvaWQgYWN0KCk7CiAgICAgICAgT2JqZWN0VHlwZSBnZXRf
dHlwZSgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIEJPTUI7CiAgICAg
ICAgfQoKcHJvdGVjdGVkOgogICAgICAgIGZsb2F0IGN1cl9zY2FsZTsKICAgICAgICBib29sIGV4
cGxvZGluZzsKICAgICAgICBpbnQgcG93ZXI7CiAgICAgICAgZmxvYXQgZGV0b25hdGlvbl9jb3Vu
dGRvd247CiAgICAgICAgQm9tYmVyICpib21iZXI7Cgpwcml2YXRlOgogICAgICAgIHZvaWQgaW5p
dCgpOwp9OwojIDM5ICJNYXAuY3BwIiAyCiMgMSAiQm9tYmVyLmgiIDEKIyAyNCAiQm9tYmVyLmgi
CmNsYXNzIERpc2Vhc2U7CmNsYXNzIENvbnRyb2xsZXI7CgpjbGFzcyBCb21iZXIgOiBwdWJsaWMg
R2FtZU9iamVjdAp7CnB1YmxpYzoKICAgICAgICB0eXBlZGVmIGVudW0KICAgICAgICB7CiAgICAg
ICAgICAgICAgICBSRUQgPSAwLAogICAgICAgICAgICAgICAgQkxVRSA9IDEsCiAgICAgICAgICAg
ICAgICBZRUxMT1cgPSAyLAogICAgICAgICAgICAgICAgR1JFRU4gPSAzLAogICAgICAgICAgICAg
ICAgUkVEMiA9IDQsCiAgICAgICAgICAgICAgICBCTFVFMiA9IDUsCiAgICAgICAgICAgICAgICBZ
RUxMT1cyID0gNiwKICAgICAgICAgICAgICAgIEdSRUVOMiA9IDcsCiAgICAgICAgfSBDT0xPUjsK
CiAgICAgICAgQm9tYmVyKCBpbnQgX3gsIGludCBfeSwgQ09MT1IgX2NvbG9yLCBDb250cm9sbGVy
KiBfY29udHJvbGxlciwgQ0xfU3RyaW5nIF9uYW1lLCBpbnQgX3RlYW0sIGludCBfbnVtYmVyLCBD
bGFuQm9tYmVyQXBwbGljYXRpb24gKl9hcHApOwogICAgICAgIH5Cb21iZXIoKTsKCiAgICAgICAg
dm9pZCBkZWNfcG9pbnRzKCk7CiAgICAgICAgdm9pZCBpbmNfcG9pbnRzKCk7CiAgICAgICAgdm9p
ZCBzZXRfcG9pbnRzKCBpbnQgX3BvaW50cyApOwogICAgICAgIGludCBnZXRfcG9pbnRzKCkgY29u
c3Q7CiAgICAgICAgYm9vbCBpc19kZWFkKCkgY29uc3Q7CiAgICAgICAgaW50IGdldF9kZWF0aHMo
KSBjb25zdDsKICAgICAgICBpbnQgZ2V0X2tpbGxzKCkgY29uc3Q7CiAgICAgICAgdm9pZCBpbmNf
a2lsbHMoKTsKICAgICAgICBpbnQgZ2V0X2N1cl9ib21icygpIGNvbnN0OwogICAgICAgIGludCBn
ZXRfcG93ZXIoKSBjb25zdDsKICAgICAgICBpbnQgZ2V0X2JvbWJzKCkgY29uc3Q7CgogICAgICAg
IGludCBnZXRfbnVtYmVyKCkgY29uc3Q7CiAgICAgICAgaW50IGdldF90ZWFtKCkgY29uc3Q7CiAg
ICAgICAgdm9pZCBzZXRfdGVhbSggaW50IF90ZWFtKTsKCiAgICAgICAgQ09MT1IgZ2V0X2NvbG9y
KCkgY29uc3Q7CgogICAgICAgIHZvaWQgZ2Fpbl9leHRyYV9ib21iKCk7CiAgICAgICAgdm9pZCBn
YWluX2V4dHJhX3NrYXRlYm9hcmQoKTsKICAgICAgICB2b2lkIGdhaW5fZXh0cmFfa2ljaygpOwog
ICAgICAgIHZvaWQgZ2Fpbl9leHRyYV9nbG92ZSgpOwogICAgICAgIHZvaWQgZ2Fpbl9leHRyYV9w
b3dlcigpOwogICAgICAgIHZvaWQgbG9vc2VfYWxsX2V4dHJhcygpOwogICAgICAgIHZvaWQgbG9v
c2VfZGlzZWFzZSgpOwoKICAgICAgICB2b2lkIGluZmVjdCAoRGlzZWFzZSogX2Rpc2Vhc2UpOwog
ICAgICAgIHZvaWQgaW5mZWN0X290aGVycygpOwoKICAgICAgICB2b2lkIGluY19jdXJfYm9tYnMo
KTsKICAgICAgICB2b2lkIGRlY19jdXJfYm9tYnMoKTsKCiAgICAgICAgdm9pZCBwdXRfYm9tYigp
OwogICAgICAgIGJvb2wgZGllKCk7CiAgICAgICAgdm9pZCBzaG93KCk7CiAgICAgICAgdm9pZCBh
Y3QoKTsKICAgICAgICB2b2lkIHJlc2V0KCk7CgogICAgICAgIENMX1N0cmluZyBnZXRfbmFtZSgp
IGNvbnN0OwoKICAgICAgICBPYmplY3RUeXBlIGdldF90eXBlKCkgY29uc3Q7CgogICAgICAgIENv
bnRyb2xsZXIqIGNvbnRyb2xsZXI7CgogICAgICAgIGJvb2wgaXNfZGlzZWFzZWQoKTsKICAgICAg
ICBib29sIGlzX2FibGVfdG9fdGhyb3coKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAg
IHJldHVybiBjYW5fdGhyb3c7CiAgICAgICAgfQoKcHJvdGVjdGVkOgogICAgICAgIENPTE9SIGNv
bG9yOwogICAgICAgIENMX1N0cmluZyBuYW1lOwogICAgICAgIGludCBkZWF0aHM7CiAgICAgICAg
aW50IGtpbGxzOwogICAgICAgIGJvb2wgZGVhZDsKICAgICAgICBmbG9hdCBhbmltX2NvdW50Owog
ICAgICAgIGludCBwb2ludHM7CiAgICAgICAgYm9vbCBjYW5fdGhyb3c7CiAgICAgICAgRGlzZWFz
ZSogZGlzZWFzZTsKCgogICAgICAgIGludCBza2F0ZWJvYXJkczsKICAgICAgICBpbnQgY3VyX2Jv
bWJzOwogICAgICAgIGludCBib21iczsKICAgICAgICBpbnQgcG93ZXI7CiAgICAgICAgaW50IGds
b3ZlczsKCiAgICAgICAgaW50IGV4dHJhX2dsb3ZlczsKICAgICAgICBpbnQgZXh0cmFfc2thdGVi
b2FyZHM7CiAgICAgICAgaW50IGV4dHJhX3Bvd2VyOwogICAgICAgIGludCBleHRyYV9raWNrOwog
ICAgICAgIGludCBleHRyYV9ib21iczsKCiAgICAgICAgYm9vbCBib21iX2tleTsKCiAgICAgICAg
aW50IHRlYW07CiAgICAgICAgaW50IG51bWJlcjsKfTsKIyA0MCAiTWFwLmNwcCIgMgoKCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL2RpcmVudC5o
IiAzCmV4dGVybiAiQyIgewojIDYyICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9kaXJlbnQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL2RpcmVu
dC5oIiAzCnN0cnVjdCBkaXJlbnQKICB7CgogICAgX19pbm9fdCBkX2lubzsKICAgIF9fb2ZmX3Qg
ZF9vZmY7CgoKCgogICAgdW5zaWduZWQgc2hvcnQgaW50IGRfcmVjbGVuOwogICAgdW5zaWduZWQg
Y2hhciBkX3R5cGU7CiAgICBjaGFyIGRfbmFtZVsyNTZdOwogIH07CgoKc3RydWN0IGRpcmVudDY0
CiAgewogICAgX19pbm82NF90IGRfaW5vOwogICAgX19vZmY2NF90IGRfb2ZmOwogICAgdW5zaWdu
ZWQgc2hvcnQgaW50IGRfcmVjbGVuOwogICAgdW5zaWduZWQgY2hhciBkX3R5cGU7CiAgICBjaGFy
IGRfbmFtZVsyNTZdOwogIH07CiMgNjMgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMiAzCiMgOTgg
Ii91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwplbnVtCiAgewogICAgRFRfVU5LTk9XTiA9IDAsCgog
ICAgRFRfRklGTyA9IDEsCgogICAgRFRfQ0hSID0gMiwKCiAgICBEVF9ESVIgPSA0LAoKICAgIERU
X0JMSyA9IDYsCgogICAgRFRfUkVHID0gOCwKCiAgICBEVF9MTksgPSAxMCwKCiAgICBEVF9TT0NL
ID0gMTIsCgogICAgRFRfV0hUID0gMTQKCiAgfTsKIyAxMjggIi91c3IvaW5jbHVkZS9kaXJlbnQu
aCIgMwp0eXBlZGVmIHN0cnVjdCBfX2RpcnN0cmVhbSBESVI7CgoKCmV4dGVybiBESVIgKm9wZW5k
aXIgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9zZWRp
ciAoRElSICpfX2RpcnApIHRocm93ICgpOwojIDE0NiAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAz
CmV4dGVybiBzdHJ1Y3QgZGlyZW50ICpyZWFkZGlyIChESVIgKl9fZGlycCkgdGhyb3cgKCk7CiMg
MTU2ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIHN0cnVjdCBkaXJlbnQ2NCAqcmVh
ZGRpcjY0IChESVIgKl9fZGlycCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcmVhZGRpcl9y
IChESVIgKl9fcmVzdHJpY3QgX19kaXJwLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRp
cmVudCAqX19yZXN0cmljdCBfX2VudHJ5LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRp
cmVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwojIDE3OSAiL3Vzci9pbmNsdWRl
L2RpcmVudC5oIiAzCmV4dGVybiBpbnQgcmVhZGRpcjY0X3IgKERJUiAqX19yZXN0cmljdCBfX2Rp
cnAsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQ2NCAqX19yZXN0cmljdCBf
X2VudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50NjQgKipfX3Jlc3Ry
aWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHJld2luZGRpciAoRElSICpf
X2RpcnApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNlZWtkaXIgKERJUiAqX19kaXJwLCBs
b25nIGludCBfX3BvcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IHRlbGxkaXIgKERJUiAq
X19kaXJwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGRpcmZkIChESVIgKl9fZGlycCkgdGhy
b3cgKCk7CiMgMjIwICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKIyAxICIvdXNyL2xpYi9nY2Mt
bGliL2k0ODYtc3VzZS1saW51eC8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMjEgIi91
c3IvaW5jbHVkZS9kaXJlbnQuaCIgMiAzCgoKCgoKCmV4dGVybiBpbnQgc2NhbmRpciAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZGlyLAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJl
bnQgKioqX19yZXN0cmljdCBfX25hbWVsaXN0LAogICAgICAgICAgICAgICAgICAgIGludCAoKl9f
c2VsZWN0b3IpIChfX2NvbnN0IHN0cnVjdCBkaXJlbnQgKiksCiAgICAgICAgICAgICAgICAgICAg
aW50ICgqX19jbXApIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopKSB0aHJvdyAoKTsK
IyAyNDcgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gaW50IHNjYW5kaXI2NCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGlyLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IGRpcmVudDY0ICoqKl9fcmVzdHJpY3QgX19uYW1lbGlzdCwKICAgICAgICAgICAgICAgICAgICAg
IGludCAoKl9fc2VsZWN0b3IpIChfX2NvbnN0IHN0cnVjdCBkaXJlbnQ2NCAqKSwKICAgICAgICAg
ICAgICAgICAgICAgIGludCAoKl9fY21wKSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAq
KSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGFscGhhc29ydCAoX19jb25zdCB2b2lkICpfX2Ux
LCBfX2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CiMgMjY5ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIGludCBhbHBoYXNv
cnQ2NCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGludCB2ZXJzaW9uc29y
dCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMgMjkwICIvdXNyL2luY2x1ZGUvZGlyZW50Lmgi
IDMKZXh0ZXJuIGludCB2ZXJzaW9uc29ydDY0IChfX2NvbnN0IHZvaWQgKl9fZTEsIF9fY29uc3Qg
dm9pZCAqX19lMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyAz
MDAgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gX19zc2l6ZV90IGdldGRpcmVudHJp
ZXMgKGludCBfX2ZkLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBfX25ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX29mZl90ICpfX3Jlc3RyaWN0IF9fYmFzZXApIHRocm93ICgpOwojIDMxNiAiL3Vzci9p
bmNsdWRlL2RpcmVudC5oIiAzCmV4dGVybiBfX3NzaXplX3QgZ2V0ZGlyZW50cmllczY0IChpbnQg
X19mZCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBfX25ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fb2ZmNjRfdCAqX19yZXN0cmljdCBfX2Jhc2VwKSB0aHJvdyAoKTsKCgoKCn0KIyA0NiAiTWFw
LmNwcCIgMgoKCnVzaW5nIHN0ZDo6b3N0cmVhbTsKdXNpbmcgc3RkOjpvZnN0cmVhbTsKdXNpbmcg
c3RkOjplbmRsOwoKQ0xfTGlzdDxNYXBFbnRyeT4gTWFwOjptYXBfbGlzdDsKCk1hcDo6TWFwKCBD
bGFuQm9tYmVyQXBwbGljYXRpb24qIF9hcHAgKQp7CiAgICAgICAgYXBwID0gX2FwcDsKICAgICAg
ICBkdW1teV9tYXB0aWxlID0gbmV3IE1hcFRpbGVfV2FsbCgxMDAwLDEwMDAsYXBwKTsKCiAgICAg
ICAgZm9yIChpbnQgeT0wOyB5PDEzOyB5KyspCiAgICAgICAgewogICAgICAgICAgICAgICAgZm9y
IChpbnQgeD0wOyB4PDE3OyB4KyspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIG1hcHRpbGVzW3hdW3ldID0gX19udWxsOwogICAgICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgICBjdXJyZW50X21hcCA9IF9fbnVsbDsKCiAgICAgICAgZW51bV9tYXBzKCk7CiAg
ICAgICAgc29ydF9tYXBzKCk7CiAgICAgICAgbG9hZF9zZWxlY3Rpb24oKTsKCiAgICAgICAgbWFw
cyA9IG5ldyBDTF9JdGVyYXRvcjxNYXBFbnRyeT4obWFwX2xpc3QpOwp9CgpNYXA6On5NYXAoKQp7
CiAgICAgICAgZGVsZXRlIG1hcHM7Cn0KCnZvaWQgTWFwOjpzb3J0X21hcHMoKQp7CiAgICAgICAg
TWFwRW50cnkgKiptYXBzcyA9IG5ldyBNYXBFbnRyeSpbbWFwX2xpc3QuZ2V0X251bV9pdGVtcygp
XTsKICAgICAgICBpbnQgbnVtID0gbWFwX2xpc3QuZ2V0X251bV9pdGVtcygpOwoKICAgICAgICBp
bnQgaTsKCiAgICAgICAgZm9yIChpPTA7IGk8bnVtOyBpKyspCiAgICAgICAgewogICAgICAgICAg
ICAgICAgbWFwc3NbaV0gPSBtYXBfbGlzdFtpXTsKICAgICAgICB9CgogICAgICAgIGJvb2wgZm91
bmQgPSB0cnVlOwogICAgICAgIHdoaWxlIChmb3VuZCkKICAgICAgICB7CiAgICAgICAgICAgICAg
ICBmb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8bnVtLTE7IGkrKykK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAo
IG1hcHNzW2ldLT5nZXRfbmFtZSgpLCBtYXBzc1tpKzFdLT5nZXRfbmFtZSgpICkgPiAwKQogICAg
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFw
RW50cnkgKnRlbXAgPSBtYXBzc1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YXBzc1tpXSA9IG1hcHNzW2krMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFw
c3NbaSsxXSA9IHRlbXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
fQoKICAgICAgICBtYXBfbGlzdC5jbGVhcigpOwogICAgICAgIGZvciAoaT0wOyBpPG51bTsgaSsr
KQogICAgICAgIHsKICAgICAgICAgICAgICAgIG1hcF9saXN0LmFkZCggbWFwc3NbaV0gKTsKICAg
ICAgICB9CgogICAgICAgIGRlbGV0ZVtdIG1hcHNzOwp9CiMgMTQ3ICJNYXAuY3BwIgp2b2lkIE1h
cDo6ZW51bV9tYXBzKCkKewogICAgICAgIGlmIChtYXBfbGlzdC5nZXRfbnVtX2l0ZW1zKCkpCiAg
ICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgRElSICpk
aXI7CiAgICAgICAgZGlyZW50ICplbnRyeTsKCiAgICAgICAgQ0xfU3RyaW5nIGNfcGF0aCA9IGFw
cC0+Z2V0X21hcF9wYXRoKCk7CiAgICAgICAgZGlyID0gb3BlbmRpciggY19wYXRoICk7CiAgICAg
ICAgaWYgKCFkaXIpCiAgICAgICAgewogICAgICAgICAgICAgICAgdGhyb3cgQ0xfRXJyb3IoIkNv
dWxkIG5vdCBmaW5kIGFueSBtYXAgZmlsZXMhIik7CiAgICAgICAgfQogICAgICAgIHdoaWxlICgg
KGVudHJ5ID0gcmVhZGRpcihkaXIpKSAhPSBfX251bGwgKQogICAgICAgIHsKICAgICAgICAgICAg
ICAgIENMX1N0cmluZyBzKGVudHJ5LT5kX25hbWUpOwoKICAgICAgICAgICAgICAgIGlmICggcy5y
aWdodCg0KSA9PSAiLm1hcCIgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICBtYXBfbGlzdC5hZGQoIG5ldyBNYXBFbnRyeSggY19wYXRoLCBzICkgKTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2xvc2VkaXIoIGRpciApOwoKICAgICAgICBjX3Bh
dGggPSBhcHAtPmdldF9sb2NhbF9tYXBfcGF0aCgpOwogICAgICAgIGRpciA9IG9wZW5kaXIoIGNf
cGF0aCApOwogICAgICAgIGlmIChkaXIpCiAgICAgICAgewogICAgICAgICAgICAgICAgd2hpbGUg
KCAoZW50cnkgPSByZWFkZGlyKGRpcikpICE9IF9fbnVsbCApCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIENMX1N0cmluZyBzKGVudHJ5LT5kX25hbWUpOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBzLnJpZ2h0KDQpID09ICIubWFwIiApCiAgICAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBfbGlzdC5h
ZGQoIG5ldyBNYXBFbnRyeSggY19wYXRoLCBzICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfQoKCgpib29sIE1hcDo6YW55X3ZhbGlkX21h
cCgpCnsKICAgICAgICBmb3IgKGludCBpPTA7IGk8Z2V0X21hcF9jb3VudCgpOyBpKyspCiAgICAg
ICAgewogICAgICAgICAgICAgICAgaWYgKENvbmZpZzo6Z2V0X251bWJlcl9vZl9wbGF5ZXJzKCkg
PD0gbWFwX2xpc3RbaV0tPmdldF9tYXhfcGxheWVycygpICYmIG1hcF9saXN0W2ldLT5pc19lbmFi
bGVkKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7Cn0K
CmludCBNYXA6OmdldF9tYXBfY291bnQoKQp7CiAgICAgICAgcmV0dXJuIG1hcF9saXN0LmdldF9u
dW1faXRlbXMoKTsKfQoKdm9pZCBNYXA6OnNwaW5fdXAoKQp7CiAgICAgICAgY3VycmVudF9tYXAg
PSBtYXBzLT5uZXh0KCk7CiAgICAgICAgaWYgKCFjdXJyZW50X21hcCkKICAgICAgICB7CiAgICAg
ICAgICAgICAgICBjdXJyZW50X21hcCA9IG1hcHMtPm5leHQoKTsKICAgICAgICB9Cn0KCnZvaWQg
TWFwOjpzcGluX2Rvd24oKQp7CiAgICAgICAgY3VycmVudF9tYXAgPSBtYXBzLT5wcmV2KCk7CiAg
ICAgICAgaWYgKCFjdXJyZW50X21hcCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBjdXJyZW50
X21hcCA9IG1hcHMtPnByZXYoKTsKICAgICAgICB9Cn0KCnZvaWQgTWFwOjpzcGluX3RvKGludCBu
cikKewogICAgICAgIENMX0Fzc2VydDo6ZGllKG5yID49IDAsICJNYXAuY3BwIiwgMjI5LCBfX251
bGwsICJuciA+PSAwIik7OwogICAgICAgIENMX0Fzc2VydDo6ZGllKG5yIDwgZ2V0X21hcF9jb3Vu
dCgpLCAiTWFwLmNwcCIsIDIzMCwgX19udWxsLCAibnIgPCBnZXRfbWFwX2NvdW50KCkiKTs7Cgog
ICAgICAgIGN1cnJlbnRfbWFwID0gbWFwcy0+Zmlyc3QoKTsKCiAgICAgICAgZm9yIChpbnQgaT0w
OyBpPG5yOyBpKyspCiAgICAgICAgewogICAgICAgICAgICAgICAgY3VycmVudF9tYXAgPSBtYXBz
LT5uZXh0KCk7CiAgICAgICAgfQp9CgoKdm9pZCBNYXA6OmxvYWRfcmFuZG9tX3ZhbGlkKCkKewog
ICAgICAgIGRvCiAgICAgICAgewogICAgICAgICAgICAgICAgc3Bpbl90byhyYW5kKCklZ2V0X21h
cF9jb3VudCgpKTsKICAgICAgICB9IHdoaWxlIChDb25maWc6OmdldF9udW1iZXJfb2ZfcGxheWVy
cygpID4gZ2V0X21heF9wbGF5ZXJzKCkgfHwgIWN1cnJlbnRfbWFwLT5pc19lbmFibGVkKCkpOwog
ICAgICAgIHJlbG9hZCgpOwp9CgoKdm9pZCBNYXA6OmxvYWRfbmV4dF92YWxpZChpbnQgbWFwX25y
KQp7CiAgICAgICAgaWYgKG1hcF9uciAhPSAtMSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBz
cGluX3RvKG1hcF9ucik7CiAgICAgICAgfSBlbHNlCiAgICAgICAgewogICAgICAgICAgICAgICAg
c3Bpbl91cCgpOwogICAgICAgIH0KCiAgICAgICAgd2hpbGUgKENvbmZpZzo6Z2V0X251bWJlcl9v
Zl9wbGF5ZXJzKCkgPiBnZXRfbWF4X3BsYXllcnMoKSB8fCAhY3VycmVudF9tYXAtPmlzX2VuYWJs
ZWQoKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBzcGluX3VwKCk7CiAgICAgICAgfQoKICAg
ICAgICByZWxvYWQoKTsKfQoKCnZvaWQgTWFwOjpsb2FkX3ByZXZpb3VzX3ZhbGlkKGludCBtYXBf
bnIpCnsKICAgICAgICBpZiAobWFwX25yICE9IC0xKQogICAgICAgIHsKICAgICAgICAgICAgICAg
IHNwaW5fdG8obWFwX25yKTsKICAgICAgICB9IGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAg
ICBzcGluX2Rvd24oKTsKICAgICAgICB9CgogICAgICAgIHdoaWxlIChDb25maWc6OmdldF9udW1i
ZXJfb2ZfcGxheWVycygpID4gZ2V0X21heF9wbGF5ZXJzKCkgfHwgIWN1cnJlbnRfbWFwLT5pc19l
bmFibGVkKCkpCiAgICAgICAgewogICAgICAgICAgICAgICAgc3Bpbl9kb3duKCk7CiAgICAgICAg
fQoKICAgICAgICByZWxvYWQoKTsKfQoKdm9pZCBNYXA6OmxvYWQoIGludCBtYXBfbnIgKQp7CiAg
ICAgICAgc3Bpbl90byhtYXBfbnIpOwogICAgICAgIHJlbG9hZCgpOwp9Cgp2b2lkIE1hcDo6cmVs
b2FkKCkKewogICAgICAgIGN1cnJlbnRfbWFwLT5yZWFkX2JvbWJlcl9wb3NpdGlvbnMoKTsKICAg
ICAgICBjbGVhcigpOwoKICAgICAgICBmb3IgKGludCB5PTA7IHk8MTM7IHkrKykKICAgICAgICB7
CiAgICAgICAgICAgICAgICBmb3IgKGludCB4PTA7IHg8MTc7IHgrKykKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjdXJyZW50X21hcC0+Z2V0X2RhdGEo
eCx5KSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgNDg6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDUwOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgNTE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSA1MjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDUzOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTQ6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSA1NToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcg
JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHRpbGVzW3hdW3ld
ID0gTWFwVGlsZTo6Y3JlYXRlKE1hcFRpbGU6OkdST1VORCwgNDAqeCwgNDAqeSwgYXBwKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJyonOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWFwdGlsZXNbeF1beV0gPSBNYXBUaWxlOjpjcmVhdGUoTWFwVGlsZTo6V0FM
TCwgNDAqeCwgNDAqeSwgYXBwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJysnOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwdGlsZXNbeF1beV0gPSBNYXBU
aWxlOjpjcmVhdGUoTWFwVGlsZTo6Qk9YLCA0MCp4LCA0MCp5LCBhcHApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnUic6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHJhbmQoKSAlMykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwdGls
ZXNbeF1beV0gPSBNYXBUaWxlOjpjcmVhdGUoTWFwVGlsZTo6Qk9YLCA0MCp4LCA0MCp5LCBhcHAp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXB0aWxlc1t4XVt5XSA9IE1hcFRpbGU6OmNyZWF0ZShNYXBUaWxlOjpHUk9VTkQs
IDQwKngsIDQwKnksIGFwcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTJzoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcHRpbGVzW3hdW3ldID0gTWFwVGlsZTo6Y3JlYXRlKCBNYXBU
aWxlOjpJQ0UsIDQwKngsIDQwKnksIGFwcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc8
JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHRpbGVzW3hdW3ld
ID0gbmV3IE1hcFRpbGVfQXJyb3coNDAqeCwgNDAqeSwgRElSX0xFRlQsYXBwKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJz4nOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWFwdGlsZXNbeF1beV0gPSBuZXcgTWFwVGlsZV9BcnJvdyg0MCp4LCA0MCp5LCBESVJf
UklHSFQsYXBwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ14nOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwdGlsZXNbeF1beV0gPSBuZXcgTWFwVGlsZV9B
cnJvdyggNDAqeCwgNDAqeSwgRElSX1VQLGFwcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICd2JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHRpbGVzW3hd
W3ldID0gbmV3IE1hcFRpbGVfQXJyb3coIDQwKngsIDQwKnksIERJUl9ET1dOLGFwcCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICdvJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hcHRpbGVzW3hdW3ldID0gbmV3IE1hcFRpbGVfVHJhcCggNDAqeCwgNDAqeSwg
YXBwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXB0aWxlc1t4XVt5XSA9IE1hcFRpbGU6OmNyZWF0ZShNYXBU
aWxlOjpOT05FLCA0MCp4LCA0MCp5LCBhcHApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KICAgICAgICB9Cn0KCnZvaWQgTWFwOjpzaG93KCkKewogICAgICAgIGZvciAoaW50IHk9
MDsgeTwxMzsgeSsrKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAoaW50IHg9MDsgeDwx
NzsgeCsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFw
dGlsZXNbeF1beV0tPmdldF90eXBlKCkhPU1hcFRpbGU6Ok5PTkUpCiAgICAgICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfc2hha2VuID4g
MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobWFwdGlsZXNbeF1beV0pCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcHRpbGVzW3hdW3ldLT5kcmF3X3NoYWtlbigpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1hcHRpbGVzW3hdW3ldKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXB0aWxlc1t4XVt5XS0+ZHJhdygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaXNf
c2hha2VuID4gMCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpc19zaGFrZW4tLTsKICAgICAg
ICB9Cn0KCnZvaWQgTWFwOjpzaG93X3JhbmRvbV9ib3hlcygpCnsKICAgICAgICBmb3IgKGludCB5
PTA7IHk8MTM7IHkrKykKICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKGludCB4PTA7IHg8
MTc7IHgrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1
cnJlbnRfbWFwLT5nZXRfZGF0YSh4LHkpID09ICdSJykKICAgICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlczo6R2FtZV9tYXB0aWxl
X2FkZG9ucygpLT5wdXRfc2NyZWVuKCA2MCt4KjQwLCA0MCt5KjQwLCA1ICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0KCnZvaWQgTWFwOjpz
aG93X3N0YXJ0X3Bvc2l0aW9ucygpCnsKICAgICAgICBmb3IgKGludCBpPTA7IGk8Y3VycmVudF9t
YXAtPmdldF9tYXhfcGxheWVycygpOyBpKyspCiAgICAgICAgewogICAgICAgICAgICAgICAgQ0xf
VmVjdG9yIHBvcyA9IGN1cnJlbnRfbWFwLT5nZXRfYm9tYmVyX3BvcyhpKTsKICAgICAgICAgICAg
ICAgIFJlc291cmNlczo6R2FtZV9tYXB0aWxlX2FkZG9ucygpLT5wdXRfc2NyZWVuKCBpbnQoNjAg
KyBwb3MueCo0MCksIGludCg0MCtwb3MueSo0MCksIDYgKTsKCiAgICAgICAgICAgICAgICBDTF9T
dHJpbmcgbnVtYmVyID0gaSsxOwogICAgICAgICAgICAgICAgUmVzb3VyY2VzOjpGb250X3NtYWxs
KCktPnByaW50X2NlbnRlciggaW50KDg0ICsgcG9zLngqNDApLCBpbnQoNTIgKyBwb3MueSo0MCks
IG51bWJlciApOwogICAgICAgIH0KfQoKdm9pZCBNYXA6OnNob3dfcHJldmlldyggaW50IHgsIGlu
dCB5LCBmbG9hdCBmYWN0b3IgKQp7CiAgICAgICAgaW50IHRpbGVfc2l6ZSA9IChpbnQpKDQwKmZh
Y3Rvcik7CiAgICAgICAgZm9yIChpbnQgeXk9MDsgeXk8MTM7IHl5KyspCiAgICAgICAgewogICAg
ICAgICAgICAgICAgZm9yIChpbnQgeHg9MDsgeHg8MTc7IHh4KyspCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXB0aWxlc1t4eF1beXldKQogICAgICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwdGlsZXNb
eHhdW3l5XS0+ZHJhd190aW55KCB4K3h4KnRpbGVfc2l6ZSwgeSt5eSp0aWxlX3NpemUsIGZhY3Rv
ciApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
fQp9Cgp2b2lkIE1hcDo6cmVmcmVzaF9ob2xlcygpCnsKICAgICAgICBmb3IgKGludCB5PTA7IHk8
MTM7IHkrKykKICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKGludCB4PTA7IHg8MTc7IHgr
KykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHRpbGVz
W3hdW3ldLT5nZXRfdHlwZSgpPT1NYXBUaWxlOjpOT05FKQogICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3NoYWtlbiA+IDApCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1hcHRpbGVzW3hdW3ldKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXB0aWxlc1t4XVt5XS0+ZHJhd19zaGFrZW4oKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChtYXB0aWxlc1t4XVt5XSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFw
dGlsZXNbeF1beV0tPmRyYXcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0KCnZvaWQgTWFwOjphY3QoKQp7
CiAgICAgICAgaW50IHk7CgoKICAgICAgICBmb3IgKHk9MDsgeTwxMzsgeSsrKQogICAgICAgIHsK
ICAgICAgICAgICAgICAgIGZvciAoaW50IHg9MDsgeDwxNzsgeCsrKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICBtYXB0aWxlc1t4XVt5XS0+b2JqZWN0cy5jbGVhcigp
OwogICAgICAgICAgICAgICAgICAgICAgICBtYXB0aWxlc1t4XVt5XS0+Ym9tYiA9IF9fbnVsbDsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgoKICAgICAgICBDTF9JdGVyYXRvcjxCb21iZXI+
IGJvbWJlcl9vYmplY3RfY291bnRlcihhcHAtPmJvbWJlcl9vYmplY3RzKTsKICAgICAgICB3aGls
ZSAoYm9tYmVyX29iamVjdF9jb3VudGVyLm5leHQoKSAhPSBfX251bGwpCiAgICAgICAgewogICAg
ICAgICAgICAgICAgaWYgKCFib21iZXJfb2JqZWN0X2NvdW50ZXIoKS0+aXNfZmx5aW5nKCkgJiYg
IWJvbWJlcl9vYmplY3RfY291bnRlcigpLT5pc19kZWFkKCkpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGJvbWJlcl9vYmplY3RfY291bnRlcigpLT5nZXRfbWFwdGls
ZSgpLT5vYmplY3RzLmFkZChib21iZXJfb2JqZWN0X2NvdW50ZXIoKSk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgfQoKCiAgICAgICAgQ0xfSXRlcmF0b3I8R2FtZU9iamVjdD4gb2JqZWN0X2Nv
dW50ZXIoYXBwLT5vYmplY3RzKTsKICAgICAgICB3aGlsZSAob2JqZWN0X2NvdW50ZXIubmV4dCgp
ICE9IF9fbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoIW9iamVjdF9jb3VudGVy
KCktPmlzX2ZseWluZygpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICBvYmplY3RfY291bnRlcigpLT5nZXRfbWFwdGlsZSgpLT5vYmplY3RzLmFkZChvYmplY3RfY291
bnRlcigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdF9jb3VudGVyKCktPmdl
dF90eXBlKCkgPT0gR2FtZU9iamVjdDo6Qk9NQiAmJiAhKG9iamVjdF9jb3VudGVyKCktPmlzX2Zh
bGxpbmcoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvYmplY3RfY291bnRlcigpLT5nZXRfbWFwdGlsZSgpLT5ib21iID0gKEJvbWIq
KShvYmplY3RfY291bnRlcigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQogICAgICAgIH0KCgogICAgICAgIGZvciAoeT0wOyB5PDEzOyB5KyspCiAgICAgICAg
ewogICAgICAgICAgICAgICAgZm9yIChpbnQgeD0wOyB4PDE3OyB4KyspCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcHRpbGVzW3hdW3ldLT5hY3QoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1hcHRpbGVzW3hdW3ldLT5kZWxldGVfbWUpCiAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXBUaWxl
KiBuZXdfdGlsZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfdGlsZSA9IE1h
cFRpbGU6OnNwYXduKCBtYXB0aWxlc1t4XVt5XSApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSBtYXB0aWxlc1t4XVt5XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXB0aWxlc1t4XVt5XSA9IG5ld190aWxlOwogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9CgoKdm9pZCBNYXA6OnNoYWtlKCBpbnQgX3No
YWtlICkKewogICAgICAgIGlzX3NoYWtlbiA9IENvbmZpZzo6Z2V0X3NoYWt5X2V4cGxvc2lvbnMo
KT9fc2hha2U6MDsKfQoKCnZvaWQgTWFwOjpjbGVhcigpCnsKICAgICAgICBmb3IgKGludCB5PTA7
IHk8MTM7IHkrKykKICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKGludCB4PTA7IHg8MTc7
IHgrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHRp
bGVzW3hdW3ldKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIG1hcHRpbGVzW3hdW3ldOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hcHRpbGVzW3hdW3ldID0gX19udWxsOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlzX3NoYWtlbiA9IDA7Cn0K
CmJvb2wgTWFwOjphZGRfYm9tYihpbnQgYngsIGludCBieSwgaW50IGJwb3dlciwgQm9tYmVyICpi
b21iZXIpCnsKICAgICAgICBpZiAoKGJ4PDApIHx8IChieTwwKSB8fCAoYng+PTE3KSB8fCAoYnk+
PTEzKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoK
ICAgICAgICBpZiAobWFwdGlsZXNbYnhdW2J5XSA9PSBfX251bGwpCiAgICAgICAgewogICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKG1hcHRpbGVzW2J4
XVtieV0tPmJvbWIgPT0gX19udWxsKQogICAgICAgIHsKICAgICAgICAgICAgICAgIG1hcHRpbGVz
W2J4XVtieV0tPmJvbWIgPSBuZXcgQm9tYiggYngqNDAsIGJ5KjQwLGJwb3dlciwgYm9tYmVyLCBh
cHAgKTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0
dXJuIGZhbHNlOwp9CgpDTF9TdHJpbmcgTWFwOjpnZXRfbmFtZSgpCnsKICAgICAgICBDTF9Bc3Nl
cnQ6OmRpZShjdXJyZW50X21hcCAhPSBfX251bGwsICJNYXAuY3BwIiwgNTU4LCBfX251bGwsICJj
dXJyZW50X21hcCAhPSBfX251bGwiKTs7CgogICAgICAgIHJldHVybiBjdXJyZW50X21hcC0+Z2V0
X25hbWUoKTsKfQoKQ0xfU3RyaW5nIE1hcDo6Z2V0X2F1dGhvcigpCnsKICAgICAgICBDTF9Bc3Nl
cnQ6OmRpZShjdXJyZW50X21hcCAhPSBfX251bGwsICJNYXAuY3BwIiwgNTY1LCBfX251bGwsICJj
dXJyZW50X21hcCAhPSBfX251bGwiKTs7CgogICAgICAgIHJldHVybiBjdXJyZW50X21hcC0+Z2V0
X2F1dGhvcigpOwp9CgpDTF9WZWN0b3IgTWFwOjpnZXRfYm9tYmVyX3BvcyhpbnQgbnIpCnsKICAg
ICAgICBDTF9Bc3NlcnQ6OmRpZShjdXJyZW50X21hcCAhPSBfX251bGwsICJNYXAuY3BwIiwgNTcy
LCBfX251bGwsICJjdXJyZW50X21hcCAhPSBfX251bGwiKTs7CgogICAgICAgIHJldHVybiBjdXJy
ZW50X21hcC0+Z2V0X2JvbWJlcl9wb3MobnIpOwp9Cgp2b2lkIE1hcDo6cmFuZG9taXplX2JvbWJl
cl9wb3NpdGlvbnMoKQp7CiAgICAgICAgQ0xfQXNzZXJ0OjpkaWUoY3VycmVudF9tYXAgIT0gX19u
dWxsLCAiTWFwLmNwcCIsIDU3OSwgX19udWxsLCAiY3VycmVudF9tYXAgIT0gX19udWxsIik7OwoK
ICAgICAgICBjdXJyZW50X21hcC0+cmFuZG9taXplX2JvbWJlcl9wb3NpdGlvbnMoKTsKfQoKaW50
IE1hcDo6Z2V0X21heF9wbGF5ZXJzKCkKewogICAgICAgIENMX0Fzc2VydDo6ZGllKGN1cnJlbnRf
bWFwICE9IF9fbnVsbCwgIk1hcC5jcHAiLCA1ODYsIF9fbnVsbCwgImN1cnJlbnRfbWFwICE9IF9f
bnVsbCIpOzsKCiAgICAgICAgcmV0dXJuIGN1cnJlbnRfbWFwLT5nZXRfbWF4X3BsYXllcnMoKTsK
fQoKCk1hcFRpbGUqIE1hcDo6Z2V0X3Bhc3NhYmxlKCkKewogICAgICAgIGludCBpID0wOwogICAg
ICAgIGludCB4bWFwZmllbGQ7CiAgICAgICAgaW50IHltYXBmaWVsZDsKICAgICAgICBkbwogICAg
ICAgIHsKICAgICAgICAgICAgICAgIHhtYXBmaWVsZCA9IHJhbmQoKSAlIDE3OwogICAgICAgICAg
ICAgICAgeW1hcGZpZWxkID0gcmFuZCgpICUgMTM7CiAgICAgICAgICAgICAgICBpZiAobWFwdGls
ZXNbeG1hcGZpZWxkXVt5bWFwZmllbGRdLT5pc19wYXNzYWJsZSgpICYmICFtYXB0aWxlc1t4bWFw
ZmllbGRdW3ltYXBmaWVsZF0tPmlzX3ZhbmlzaGluZygpKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXB0aWxlc1t4bWFwZmllbGRdW3lt
YXBmaWVsZF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpKys7CiAgICAgICAg
fSB3aGlsZSAoaTwxMDAwKTsKCiAgICAgICAgcmV0dXJuIF9fbnVsbDsKfQoKTWFwVGlsZSogTWFw
OjpnZXRfcmFuZG9tKCkKewogICAgICAgIGludCBpID0wOwogICAgICAgIGludCB4bWFwZmllbGQ7
CiAgICAgICAgaW50IHltYXBmaWVsZDsKICAgICAgICBkbwogICAgICAgIHsKICAgICAgICAgICAg
ICAgIHhtYXBmaWVsZCA9IHJhbmQoKSAlIDE3OwogICAgICAgICAgICAgICAgeW1hcGZpZWxkID0g
cmFuZCgpICUgMTM7CiAgICAgICAgICAgICAgICBpZiAobWFwdGlsZXNbeG1hcGZpZWxkXVt5bWFw
ZmllbGRdLT5nZXRfdHlwZSgpIT1NYXBUaWxlOjpOT05FICYmICFtYXB0aWxlc1t4bWFwZmllbGRd
W3ltYXBmaWVsZF0tPmlzX3ZhbmlzaGluZygpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXB0aWxlc1t4bWFwZmllbGRdW3ltYXBmaWVs
ZF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgfSB3aGls
ZSAoaTwxMDAwKTsKCiAgICAgICAgcmV0dXJuIF9fbnVsbDsKfQoKCk1hcFRpbGUqIE1hcDo6Z2V0
X21hcHRpbGUoaW50IHgsIGludCB5KQp7CiAgICAgICAgaWYgKHggPCAwIHx8IHggPiAxNyAtMSB8
fCB5IDwgMCB8fCB5ID4gMTMgLTEpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGR1
bW15X21hcHRpbGU7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAg
ICAgICByZXR1cm4gbWFwdGlsZXNbeF1beV07CiAgICAgICAgfQp9CgpNYXBUaWxlKiBNYXA6Omdl
dF9tYXB0aWxlX3h5KGludCB4LCBpbnQgeSkKewogICAgICAgIGlmICh4IDwgMCB8fCB4ID49ICgx
NykqNDAgfHwgeSA8IDAgfHwgeSA+PSAoMTMpKjQwICkKICAgICAgICB7CiAgICAgICAgICAgICAg
ICByZXR1cm4gZHVtbXlfbWFwdGlsZTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBtYXB0aWxlc1t4LzQwXVt5LzQwXTsKICAgICAgICB9Cn0K
CgppbnQgTWFwOjpuZXdfZW50cnkoIENMX1N0cmluZyBfbmFtZSApCnsKICAgICAgICB0cnkKICAg
ICAgICB7CiAgICAgICAgICAgICAgICBtYXBfbGlzdC5hZGQoIG5ldyBNYXBFbnRyeShfbmFtZSkg
KTsKICAgICAgICAgICAgICAgIHJldHVybiBtYXBfbGlzdC5nZXRfbnVtX2l0ZW1zKCkgLTE7CiAg
ICAgICAgfQogICAgICAgIGNhdGNoKCBDTF9FcnJvciBlcnIgKQogICAgICAgIHsKICAgICAgICAg
ICAgICAgIGRlbGV0ZSBtYXBfbGlzdC5nZXRfbGFzdCgpOwogICAgICAgICAgICAgICAgbWFwX2xp
c3QuZGVsKG1hcF9saXN0LmdldF9sYXN0KCkpOwogICAgICAgICAgICAgICAgdGhyb3cgZXJyOwog
ICAgICAgIH0KfQoKaW50IE1hcDo6ZGVsZXRlX2VudHJ5KCBpbnQgbnIgKQp7CiAgICAgICAgQ0xf
QXNzZXJ0OjpkaWUobnIgPj0gMCwgIk1hcC5jcHAiLCA2NzMsIF9fbnVsbCwgIm5yID49IDAiKTs7
CiAgICAgICAgQ0xfQXNzZXJ0OjpkaWUobnIgPCBnZXRfbWFwX2NvdW50KCksICJNYXAuY3BwIiwg
Njc0LCBfX251bGwsICJuciA8IGdldF9tYXBfY291bnQoKSIpOzsKCiAgICAgICAgbWFwX2xpc3Rb
bnJdLT5kZWxldGVfZmlsZSgpOwogICAgICAgIGRlbGV0ZSBtYXBfbGlzdFtucl07CiAgICAgICAg
bWFwX2xpc3QuZGVsKG1hcF9saXN0W25yXSk7CgogICAgICAgIGlmIChuciA+IGdldF9tYXBfY291
bnQoKS0xKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBuci0xOwogICAgICAgIH0K
ICAgICAgICByZXR1cm4gbnI7Cn0KCm9zdHJlYW0mIG9wZXJhdG9yIDw8IChvc3RyZWFtJiBvcywg
TWFwJiBtKQp7CiAgICAgICAgZm9yIChpbnQgeT0wOyB5PDEzOyB5KyspCiAgICAgICAgewogICAg
ICAgICAgICAgICAgZm9yIChpbnQgeD0wOyB4PDE3OyB4KyspCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChtLm1hcHRpbGVzW3hdW3ldLT5ib21iKQogICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MgPDwg
IioiOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG0ubWFwdGlsZXNbeF1beV0tPmhhc19ib21iZXIoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zIDw8ICJCIjsKICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtLm1h
cHRpbGVzW3hdW3ldLT5oYXNfZXh0cmEoKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zIDw8ICJlIjsKICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG0ubWFwdGlsZXNbeF1beV0tPmdldF90eXBlKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBNYXBUaWxlOjpOT05FOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcyA8PCAiLSI7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBNYXBUaWxlOjpHUk9VTkQ6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zIDw8ICIgIjsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIE1hcFRpbGU6OldBTEw6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zIDw8ICIjIjsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE1hcFRpbGU6OkJPWDoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MgPDwgIisiOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTWFwVGlsZTo6VFJBUDoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MgPDwgIiAiOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTWFwVGlsZTo6QVJST1c6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zIDw8ICIgIjsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE1hcFRpbGU6OklDRToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MgPDwgIiAiOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgb3MgPDwgIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgb3MgPDwgZW5kbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9zOwp9CgoKdm9p
ZCBNYXA6OnNhdmVfc2VsZWN0aW9uKCkKewogICAgICAgIENMX1N0cmluZyBmaWxlbmFtZTsKCgoK
ICAgICAgICBmaWxlbmFtZSA9IGdldGVudigiSE9NRSIpOwogICAgICAgIGZpbGVuYW1lICs9ICIv
LmNsYW5ib21iZXIvbWFwcy5kaXNhYmxlZCI7CgogICAgICAgIG9mc3RyZWFtIG1hcF9zZWxlY3Rp
b25fZmlsZShmaWxlbmFtZSk7CiAgICAgICAgQ0xfSXRlcmF0b3I8TWFwRW50cnk+IG1hcF9lbnRy
eV9pdGVyYXRvcihtYXBfbGlzdCk7CiAgICAgICAgd2hpbGUgKG1hcF9lbnRyeV9pdGVyYXRvci5u
ZXh0KCkhPV9fbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoIShtYXBfZW50cnlf
aXRlcmF0b3IoKS0+aXNfZW5hYmxlZCgpKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgbWFwX3NlbGVjdGlvbl9maWxlIDw8IG1hcF9lbnRyeV9pdGVyYXRvcigpLT5n
ZXRfbmFtZSgpIDw8IGVuZGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9Cgp2b2lkIE1h
cDo6bG9hZF9zZWxlY3Rpb24oKQp7CiAgICAgICAgQ0xfU3RyaW5nIGZpbGVuYW1lOwoKCgogICAg
ICAgIGZpbGVuYW1lID0gZ2V0ZW52KCJIT01FIik7CiAgICAgICAgZmlsZW5hbWUgKz0gIi8uY2xh
bmJvbWJlci9tYXBzLmRpc2FibGVkIjsKCgogICAgICAgIEZJTEUqIG1hcF9zZWxlY3Rpb25fZmls
ZTsKICAgICAgICBjaGFyIG1hcF9uYW1lWzEwMF07CgogICAgICAgIGlmICgobWFwX3NlbGVjdGlv
bl9maWxlID0gZm9wZW4oIGZpbGVuYW1lLCAiciIgKSkgIT0gX19udWxsKQogICAgICAgIHsKICAg
ICAgICAgICAgICAgIHdoaWxlICghKGZlb2YobWFwX3NlbGVjdGlvbl9maWxlKSkpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZzY2FuZiggbWFwX3NlbGVjdGlvbl9m
aWxlLCAiJXNcbiIsIG1hcF9uYW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgIENMX0l0ZXJh
dG9yPE1hcEVudHJ5PiBtYXBfZW50cnlfaXRlcmF0b3IobWFwX2xpc3QpOwogICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAobWFwX2VudHJ5X2l0ZXJhdG9yLm5leHQoKSE9X19udWxsKQogICAg
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG1hcF9lbnRyeV9pdGVyYXRvcigpLT5nZXRfbmFtZSgpID09IG1hcF9uYW1lKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1hcF9lbnRyeV9pdGVyYXRvcigpLT5kaXNhYmxlKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICBmY2xvc2UobWFwX3NlbGVjdGlvbl9maWxlKTsKICAgICAgICB9
Cn0K


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