public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/3101: ICE -- seg. fault compiling and encountering C::Angle(...)
@ 2001-06-09 15:36 ltuikov
  0 siblings, 0 replies; 3+ messages in thread
From: ltuikov @ 2001-06-09 15:36 UTC (permalink / raw)
  To: gcc-gnats

>Number:         3101
>Category:       c++
>Synopsis:       ICE -- seg. fault compiling and encountering C::Angle(...)
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Sat Jun 09 15:36:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Luben Tuikov
>Release:        gcc version 2.96 20000731 (Red Hat Linux 7.0)
>Organization:
>Environment:
RH7, 2.4.4, P2, 384 MB RAM.
>Description:
luben@lt1 ~/c/sgeom>g++ -save-temps -v -c -o box.o box.cpp
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs
gcc version 2.96 20000731 (Red Hat Linux 7.0)
 /usr/lib/gcc-lib/i386-redhat-linux/2.96/cpp0 -lang-c++ -D__GNUG__=2 -v -D__GNUC__=2 -D__GNUC_MINOR__=96 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem(posix) -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__tune_i386__ box.cpp box.ii
GNU CPP version 2.96 20000731 (Red Hat Linux 7.0) (cpplib)
 (i386 Linux/ELF)
ignoring nonexistent directory "/usr/i386-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/g++-3
 /usr/local/include
 /usr/lib/gcc-lib/i386-redhat-linux/2.96/include
 /usr/include
End of search list.
 /usr/lib/gcc-lib/i386-redhat-linux/2.96/cc1plus box.ii -quiet -dumpbase box.cpp -version -o box.s
GNU C++ version 2.96 20000731 (Red Hat Linux 7.0) (i386-redhat-linux) compiled by GNU C version 2.96 20000731 (Red Hat Linux 7.0).
In file included from box.cpp:2:
cdefs.h:137: Internal error: Segmentation fault.
Please submit a full bug report.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.

If I comment out line 137 (Angle(...)) then it compiles
until it encounters calls to Angle() and it complains,
as it should...
>How-To-Repeat:
Apparently a method with the name of Angle() will cause
it to crash...
>Fix:
... I am looking for one.. :-)
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="box.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="box.ii"

IyAxICJib3guY3BwIgoKIyA1ICJjZGVmcy5oIiAxCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzEyICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDM0
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxOTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1y
ZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgc2l6ZV90OwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKZXh0ZXJuICJDIiB7
CgojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBp
bnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAg
ICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwojIDEzMyAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21h
eCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpf
X25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBh
dG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBs
b25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgojIDE2MyAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAzCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3Vs
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAg
dGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhy
b3cgKCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoK
X19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAg
IHRocm93ICgpOwojIDI1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkb3VibGUg
X19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFs
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0
aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBf
X3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91
cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJu
YWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQg
X19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50
IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i
YXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0
aHJvdyAoKTsKIyAzODUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbDY0
YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25z
dCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgojIDI4
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwpleHRlcm4gIkMiIHsKCgojIDMwICIvdXNy
L2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2No
YXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9f
IHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9f
IHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMv
dHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBl
ZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19p
bnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0
eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3Qg
Kl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9pbnQg
X191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19pbm9f
dDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190Owp0
eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVk
ZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3VfbG9uZyBf
X3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2ludCBf
X2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90
OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVk
ZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29uZHNfdDsK
dHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtf
dDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90
OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBf
X2ZkX21hc2s7CgoKIyAxMDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBz
dHJ1Y3QKICB7CgoKCgoKCiAgICBfX2ZkX21hc2sgX19mZHNfYml0c1sxMDI0IC8gKDggKiBzaXpl
b2YgKF9fZmRfbWFzaykpXTsKCgogIH0gX19mZF9zZXQ7CgoKdHlwZWRlZiBpbnQgX19rZXlfdDsK
Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBsb25n
IGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRl
ZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7
CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9f
ZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYg
X191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlw
ZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190
X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQg
aW50IF9fc29ja2xlbl90OwoKCgoKCiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBl
cy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCnN0cnVjdCBfX3Nj
aGVkX3BhcmFtCiAgewogICAgaW50IHNjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5j
bHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sK
ewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBz
dHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVm
IHN0cnVjdAp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3Ry
dWN0IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBp
bnQgX19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsK
ICB2b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRy
X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xv
Y2s7CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5
cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAg
aW50IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9v
d25lcjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2Nr
Owp9IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2lu
ZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsK
CgojIDE0MCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIGludCBwdGhyZWFkX3Q7CgojIDE2NiAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu
aCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiBfX3Vf
Y2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1
X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0
eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5
cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CiMgNTggIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBl
ZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVk
ZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlw
ZWRlZiBfX29mZl90IG9mZl90OwojIDk2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlw
ZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYg
X19zc2l6ZV90IHNzaXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVm
IF9fY2FkZHJfdCBjYWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTI3ICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyA3MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCnR5
cGVkZWYgX190aW1lX3QgdGltZV90OwoKIyA4MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBl
ZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsKCiMgOTQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK
dHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKCiMgMTI3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDIgMwojIDE0MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgoKCnR5cGVkZWYgdW5z
aWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxODQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18p
KSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18p
KSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p
KSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18p
KSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVm
IGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CgoK
CgoKCgoKCgoKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMDcgIi91c3IvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi
IDEgMwoKCgojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCnR5cGVkZWYgaW50
IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25n
IGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAg
fSBfX3NpZ3NldF90OwoKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCgoj
IDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIGxv
bmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKCiMgMzkgIi91c3IvaW5j
bHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKc3RydWN0IHRpbWV2YWw7
Cgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoKCnR5cGVkZWYgX19mZF9zZXQgZmRfc2V0OwoK
CiMgNzQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuIGludCBzZWxlY3QgKGlu
dCBfX25mZHMsIF9fZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAg
ICAgIF9fZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICBf
X2ZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVj
dCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgojIDkyICIvdXNyL2lu
Y2x1ZGUvc3lzL3NlbGVjdC5oIiAzCn0KCiMgMjEwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDIgMwoKCgojIDIyNCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtj
bnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlw
ZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTYgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMwp9CgojIDM5MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJu
IGludDMyX3QgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1
bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRl
ICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzZXRz
dGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2Rh
dGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3Qg
KnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5k
X3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0
cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAg
aW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNyYW5k
b21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhy
b3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFy
ICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9f
cmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpf
X3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRv
bV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHJhbmQg
KHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQp
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIHRo
cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0
ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9u
ZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50
IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRl
cm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4gdW5z
aWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10p
IHRocm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJh
bVs3XSkgdGhyb3cgKCk7CgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNo
b3J0IGludCB4WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IGFbM107CiAgICB1bnNpZ25lZCBz
aG9ydCBpbnQgYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBvbGRfeFszXTsKICAgIGludCBpbml0
OwogIH07CgoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jl
c3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0
IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0
IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0
YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19y
ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVj
dCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
ICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgbnJh
bmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAg
ICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm
ZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi
aVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJp
Y3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBf
X3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2Vl
ZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7
CiMgNTI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6
ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVy
biB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxs
b2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoK
CgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgoKIyAyNiAiL3Vz
ci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKCmV4dGVybiAiQyIgewoKCgoKCmV4dGVybiB2b2lkICph
bGxvY2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCn0KCiMgNTQ2ICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyA1NjAgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVu
YykgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19vbl9leGl0ICh2b2lkICgqX19m
dW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93
ICgpOwpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZv
aWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg
ZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7CgojIDU4OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpnZXRlbnYg
KF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJl
X2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg
cHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYg
KF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxh
Y2UpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAq
X19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhyb3cg
KCk7CiMgNjI0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rdGVtcCAo
Y2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNo
YXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY1MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
CmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKIyA2
NzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
X19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAoKTsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2Nv
bXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgoKCgoKCgpleHRl
cm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jh
c2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwg
X19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jh
c2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19j
b21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25n
IGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA3MTEgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50
IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRl
cm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDcyOSAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19y
ZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAg
ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh
ciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93
ICgpOwoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9f
cmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJs
ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry
aWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hh
ciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9f
bmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAq
X19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9f
dmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAg
ICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAog
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcWVj
dnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAg
ICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAg
ICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhy
b3cgKCk7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9f
cmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19i
dWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29u
c3QgY2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAo
d2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0
b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXpl
X3QgbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0
IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDg1MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAzCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxl
bSkgdGhyb3cgKCk7CgoKCgoKfQoKIyA1ICJjZGVmcy5oIiAyCgojIDI4ICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDEgMwpleHRlcm4gIkMiIHsKCgoKCgoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2
b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lk
ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAq
bWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQog
ICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0
IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAg
ICAgICAgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lk
ICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBz
aXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4
dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19u
KQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCiMgNzcgIi91c3Iv
aW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0
IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoK
ZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNo
YXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f
czIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50
IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBp
bnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhm
cm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgojIDEyMCAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hh
ciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL3Vz
ci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAq
X19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy
biBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgojIDE2NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz
CmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAq
X19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0
ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNj
ZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNo
YXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0
cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCgoKCmV4dGVybiBj
aGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19kZWxpbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNo
YXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hh
ciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgp
OwojIDIxOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBzaXplX3Qgc3RybGVuIChf
X2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgoj
IDIyOSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50
IF9fZXJybnVtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RyZXJyb3JfciAoaW50IF9f
ZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGNo
YXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxl
bikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBf
X24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywg
dm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAo
dm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29u
c3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19j
b25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBfX2ZmcyAo
aW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CmV4dGVybiBpbnQgZmZz
IChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKIyAyNzQgIi91
c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hh
ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19z
MSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwojIDI5NiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVy
biBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRocm93ICgpOwojIDM2
NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KCiMgNiAiY2RlZnMuaCIgMgoKCiMgNSAibWF0
aGZ1bnMuaCIgMQojIDI5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKZXh0ZXJuICJDIiB7CgoK
CgoKCgoKCgoKIyA2NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDU0ICIvdXNyL2luY2x1ZGUv
Yml0cy9tYXRoY2FsbHMuaCIgMSAzCmV4dGVybiBkb3VibGUgYWNvcyAoIGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fYWNvcyAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0
ZXJuIGRvdWJsZSBhc2luICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19h
c2luICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW4gKCBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKCBkb3VibGUgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBkb3VibGUgYXRhbjIgKCBkb3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yICggZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGRvdWJsZSBjb3MgKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2NvcyAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW4gKCBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbiAoIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX3RhbiAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKIyA3OCAiL3Vzci9pbmNsdWRl
L2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBjb3NoICggZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19jb3NoICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRl
cm4gZG91YmxlIHNpbmggKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3Np
bmggKCBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgdGFuaCAoIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuaCAoIGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCgpleHRlcm4gZG91YmxlIGFjb3NoICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19hY29zaCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2lu
aCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbmggKCBkb3VibGUg
X194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbmggKCBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW5oICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGRvdWJsZSBleHAgKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4
cCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKIyAxMDYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhj
YWxscy5oIiAzCmV4dGVybiBkb3VibGUgZnJleHAgKCBkb3VibGUgX194LCBpbnQgKl9fZXhwb25l
bnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZnJleHAgKCBkb3VibGUgX194LCBpbnQgKl9f
ZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKCBkb3VibGUgX194LCBp
bnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZGV4cCAoIGRvdWJsZSBf
X3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZyAoIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nICggZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fbG9nMTAgKCBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG1v
ZGYgKCBkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X19tb2RmICggZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4g
ZG91YmxlIGV4cG0xICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHBt
MSAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMXAgKCBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwICggZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2diICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19sb2diICggZG91YmxlIF9feCkgdGhyb3cgKCk7CiMgMTQzICIvdXNyL2luY2x1ZGUv
Yml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIHBvdyAoIGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93ICggZG91YmxlIF9feCwgZG91Ymxl
IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBzcXJ0ICggZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19zcXJ0ICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVy
biBkb3VibGUgaHlwb3QgKCBkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2h5cG90ICggZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gZG91YmxlIGNicnQgKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2NicnQgKCBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjZWlsICgg
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jZWlsICggZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzICggZG91YmxlIF9feCkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFicyAoIGRvdWJsZSBf
X3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91Ymxl
IGZsb29yICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbG9vciAoIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1vZCAoIGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1vZCAoIGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1
ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19m
aW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1
ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGRv
dWJsZSBpbmZuYW4gKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBkb3VibGUgX19pbmZuYW4gKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBkcmVtICggZG91YmxlIF9f
eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19kcmVtICggZG91YmxlIF9f
eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKCBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpZ25pZmljYW5kICggZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduICggZG91YmxlIF9feCwg
ZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g
ZG91YmxlIF9fY29weXNpZ24gKCBkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMjE3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2Fs
bHMuaCIgMwpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3Zh
bHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJs
ZSBqMCAoIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qMCAoIGRvdWJsZSkgdGhy
b3cgKCk7CmV4dGVybiBkb3VibGUgajEgKCBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fajEgKCBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qbiAoaW50LCBkb3VibGUpIHRocm93ICgpOwpleHRl
cm4gZG91YmxlIHkwICggZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kwICggZG91
YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MSAoIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX195MSAoIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeW4gKGludCwg
ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRvdWJsZSkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBlcmYgKCBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fZXJmICggZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmZjICggZG91Ymxl
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZmMgKCBkb3VibGUpIHRocm93ICgpOwpleHRl
cm4gZG91YmxlIGxnYW1tYSAoIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2Ft
bWEgKCBkb3VibGUpIHRocm93ICgpOwojIDI0NiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxz
LmgiIDMKZXh0ZXJuIGRvdWJsZSBnYW1tYSAoIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19nYW1tYSAoIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgbGdhbW1h
X3IgKCBkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19s
Z2FtbWFfciAoIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGRvdWJsZSByaW50ICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yaW50
ICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIgKCBkb3Vi
bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKCBkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGRvdWJsZSByZW1h
aW5kZXIgKCBkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X3JlbWFpbmRlciAoIGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4g
ZG91YmxlIHNjYWxiICggZG91YmxlIF9feCwgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19zY2FsYiAoIGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGRvdWJsZSBzY2FsYm4gKCBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX3NjYWxibiAoIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IGlsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diIChk
b3VibGUgX194KSB0aHJvdyAoKTsKIyA2NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgODMg
Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxz
LmgiIDEgMwpleHRlcm4gZmxvYXQgYWNvc2YgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19hY29zZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXNpbmYg
KCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luZiAoIGZsb2F0IF9feCkg
dGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbmYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19hdGFuZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRh
bjJmICggZmxvYXQgX195LCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFu
MmYgKCBmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2Yg
KCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jb3NmICggZmxvYXQgX194KSB0
aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzaW5mICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fc2luZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuZiAo
IGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3RhbmYgKCBmbG9hdCBfX3gpIHRo
cm93ICgpOwoKIyA3OCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZs
b2F0IGNvc2hmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKCBm
bG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmhmICggZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2luaGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGZsb2F0IHRhbmhmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYg
KCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgYWNvc2hmICggZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNvc2hmICggZmxvYXQgX194KSB0aHJvdyAoKTsK
CmV4dGVybiBmbG9hdCBhc2luaGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19hc2luaGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAoIGZs
b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW5oZiAoIGZsb2F0IF9feCkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4cGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19leHBmICggZmxvYXQgX194KSB0aHJvdyAoKTsKCiMgMTA2ICIvdXNyL2luY2x1
ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgZnJleHBmICggZmxvYXQgX194LCBp
bnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mcmV4cGYgKCBmbG9hdCBf
X3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoIGZs
b2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZGV4cGYg
KCBmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9n
ZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKCBmbG9hdCBfX3gp
IHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxMGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19sb2cxMGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9h
dCBtb2RmZiAoIGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX21vZGZmICggZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGZsb2F0IGV4cG0xZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cG0x
ZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzFwZiAoIGZsb2F0IF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzFwZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGZsb2F0IGxvZ2JmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fbG9nYmYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwojIDE0MyAiL3Vzci9pbmNsdWRlL2JpdHMv
bWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IHBvd2YgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Bvd2YgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IHNxcnRmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fc3FydGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgaHlw
b3RmICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19oeXBv
dGYgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY2Jy
dGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoIGZsb2F0IF9f
eCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjZWlsZiAoIGZsb2F0IF9feCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2NlaWxmICggZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g
ZmxvYXQgZmFic2YgKCBmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmFic2YgKCBmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmICggZmxvYXQgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3JmICggZmxvYXQgX194KSB0aHJvdyAoKTsKCgpl
eHRlcm4gZmxvYXQgZm1vZGYgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2Ztb2RmICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mZiAo
ZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4
dGVybiBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGZsb2F0IGluZm5hbmYgKGludCBfX2Vycm9yKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2luZm5h
bmYgKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
ZXh0ZXJuIGZsb2F0IGRyZW1mICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19kcmVtZiAoIGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX3NpZ25pZmljYW5kZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQg
Y29weXNpZ25mICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mICggZmxvYXQgX194LCBmbG9h
dCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAyMTcgIi91c3Iv
aW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9f
dmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGlu
dCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gZmxvYXQgajBmICggZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19qMGYgKCBmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBqMWYgKCBmbG9hdCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2oxZiAoIGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGpu
ZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCkg
dGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX3kwZiAoIGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkxZiAoIGZsb2F0KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9feTFmICggZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQg
eW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feW5mIChpbnQsIGZsb2F0
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXJmZiAoIGZsb2F0KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fZXJmZiAoIGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGVyZmNmICgg
ZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoIGZsb2F0KSB0aHJvdyAoKTsK
ZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xn
YW1tYWYgKCBmbG9hdCkgdGhyb3cgKCk7CiMgMjQ2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2Fs
bHMuaCIgMwpleHRlcm4gZmxvYXQgZ2FtbWFmICggZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19nYW1tYWYgKCBmbG9hdCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBsZ2FtbWFm
X3IgKCBmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdh
bW1hZl9yICggZmxvYXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBm
bG9hdCByaW50ZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JpbnRmICgg
ZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbmV4dGFmdGVyZiAoIGZsb2F0IF9f
eCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy
biBmbG9hdCBfX25leHRhZnRlcmYgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmICgg
ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJm
ICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc2NhbGJm
ICggZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmYg
KCBmbG9hdCBfX3gsIGZsb2F0IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJu
ZiAoIGZsb2F0IF9feCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYg
KCBmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKIyA4MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgMTAwICIvdXNyL2luY2x1ZGUvbWF0
aC5oIiAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKZXh0ZXJuIGxv
bmcgZG91YmxlIGFjb3NsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fYWNvc2wgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGFzaW5sICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fYXNpbmwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91
YmxlIGF0YW5sICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fYXRhbmwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGF0YW4ybCAoIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsICggbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NsICggbG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAoIGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAoIGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CiMgNzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJs
ZSBjb3NobCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2Nvc2hsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBz
aW5obCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Np
bmhsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5o
bCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Rhbmhs
ICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3No
bCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3No
bCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmhs
ICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhs
ICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwg
KCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuaGwg
KCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBs
ICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAo
IGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgojIDEwNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0
aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGZyZXhwbCAoIGxvbmcgZG91YmxlIF9feCwg
aW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsICgg
bG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25n
IGRvdWJsZSBsZGV4cGwgKCBsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBsICggbG9uZyBkb3VibGUgX194LCBpbnQgX19l
eHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKCBsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsICggbG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMTBsICggbG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMTBsICggbG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKCBsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19t
b2RmbCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoK
CmV4dGVybiBsb25nIGRvdWJsZSBleHBtMWwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBsb2cxcGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19sb2cxcGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKIyAx
NDMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBw
b3dsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19wb3dsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCAoIGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsICggbG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGh5cG90bCAoIGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlwb3RsICggbG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGNicnRsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fY2JydGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9u
ZyBkb3VibGUgY2VpbGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19jZWlsbCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGZhYnNsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsICggbG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGZsb29ybCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2Zsb29ybCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGZtb2RsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19mbW9kbCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxvbmcgZG91YmxlIF9fdmFs
dWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9f
ZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWwg
KGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBpbmZuYW5sIChpbnQgX19lcnJvcikgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19pbmZu
YW5sIChpbnQgX19lcnJvcikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBkcmVtbCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKCBsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWdu
aWZpY2FuZGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19zaWduaWZpY2FuZGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGNvcHlzaWdubCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2NvcHlzaWdubCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMjE3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo
Y2FsbHMuaCIgMwpleHRlcm4gaW50IF9faXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5sIChs
b25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGowbCAoIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fajBsICggbG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBk
b3VibGUgajFsICggbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19q
MWwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwg
bG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9u
ZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsICggbG9uZyBkb3VibGUp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwgKCBsb25nIGRvdWJsZSkgdGhyb3cg
KCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MWwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX3kxbCAoIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg
ZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGVyZmwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Vy
ZmwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAoIGxv
bmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmY2wgKCBsb25nIGRv
dWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsICggbG9uZyBkb3VibGUp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsICggbG9uZyBkb3VibGUpIHRo
cm93ICgpOwojIDI0NiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxv
bmcgZG91YmxlIGdhbW1hbCAoIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fZ2FtbWFsICggbG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBk
b3VibGUgbGdhbW1hbF9yICggbG9uZyBkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxfciAoIGxvbmcgZG91YmxlLCBpbnQgKl9fc2ln
bmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKCBsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yaW50bCAoIGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHRhZnRlcmwgKCBsb25n
IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsICggbG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAoIGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVy
bCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIHNjYWxibCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsICggbG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwg
KCBsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19zY2FsYm5sICggbG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9n
YmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CiMgMTAwICIvdXNyL2luY2x1ZGUvbWF0aC5o
IiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuIGludCBzaWduZ2FtOwoj
IDIzNiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0x
LAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJWF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9O
X1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUgX0xJQl9WRVJTSU9OOwojIDI1OSAi
L3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3QgX19leGNlcHRpb24KCgoKICB7CiAgICBpbnQg
dHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwog
ICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhj
ZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgMjkwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMg
NzkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL2Zsb2F0
LmgiIDEgMwp1bmlvbiBfX2NvbnZlcnRfbG9uZ19kb3VibGUgewogIHVuc2lnbmVkIF9fY29udmVy
dF9sb25nX2RvdWJsZV9pWzRdOwogIGxvbmcgZG91YmxlIF9fY29udmVydF9sb25nX2RvdWJsZV9k
Owp9OwojIDI5MCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNDA5ICIvdXNyL2luY2x1ZGUv
bWF0aC5oIiAzCn0KCgojIDUgIm1hdGhmdW5zLmgiIDIKCmNsYXNzIFNTZWc7CmNsYXNzIFNQb2lu
dDsKY2xhc3MgU1ZlY3RvcjsKY2xhc3MgU1BsYW5lOwoKZXh0ZXJuIGRvdWJsZSBfc3NfZ2xvYmFs
X3RvbDsKZXh0ZXJuIGRvdWJsZSBfc3NfY29ubmVjdF90b2w7CmV4dGVybiBkb3VibGUgU1NfVElO
WTsKCiMgMzAgIm1hdGhmdW5zLmgiCnRlbXBsYXRlPGNsYXNzIF9fU1NfVD4gaW5saW5lCl9fU1Nf
VCBtYXgoX19TU19UIGEsIF9fU1NfVCBiKSB7IGlmIChhID4gYikgcmV0dXJuIGE7IHJldHVybiBi
OyB9Cgp0ZW1wbGF0ZTxjbGFzcyBfX1NTX1Q+IGlubGluZQpfX1NTX1QgbWluKF9fU1NfVCBhLCBf
X1NTX1QgYikgeyBpZiAoYSA+IGIpIHJldHVybiBiOyByZXR1cm4gYTsgfQoKdGVtcGxhdGU8Y2xh
c3MgX19TU19UPiBpbmxpbmUKaW50IGFicyhfX1NTX1QgYSkgeyByZXR1cm4gKChhKSA8IDApID8g
KC0oYSkpIDogKGEpO30KCnRlbXBsYXRlPGNsYXNzIF9fU1NfVD4gaW5saW5lCnZvaWQgc3dhcChf
X1NTX1QgJmEsIF9fU1NfVCAmYikge19fU1NfVCB0ID0gYTsgYSA9IGI7IGIgPSB0O30KCmNvbnN0
IGRvdWJsZSBTX1BJQlkyID0gYWNvcygwLjApOwpjb25zdCBkb3VibGUgU19QSSA9IDIuMCphY29z
KDAuMCk7CmNvbnN0IGRvdWJsZSBTXzNQSUJZMiA9IFNfUEkrU19QSUJZMjsKY29uc3QgZG91Ymxl
IFNfMlBJID0gNC4wKmFjb3MoMC4wKTsKCmRvdWJsZSBTc2V0VG9sKGRvdWJsZSB0KTsKaW50IFN0
b2xDb21wKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIHRvbD1fc3NfZ2xvYmFsX3RvbCk7CmRv
dWJsZSBzcShkb3VibGUgeCk7CmRvdWJsZSBTbW9kMnBpKGRvdWJsZSB4KTsKZG91YmxlIFNzd2Vl
cChkb3VibGUgc2EsIGRvdWJsZSBlYSk7CmRvdWJsZSBTdWxlbihkb3VibGUgdTEsIGRvdWJsZSB1
Mik7CmRvdWJsZSBTYXRhbjIoZG91YmxlIHksIGRvdWJsZSB4KTsKZG91YmxlIFNzaWduKGRvdWJs
ZSB1KTsKZG91YmxlIGxpbWl0MTEoZG91YmxlIGEpOwoKU1NlZyogU21ha2VTZWcoY29uc3QgU1Bv
aW50ICZzcCwgY29uc3QgU1BvaW50ICZtcCwgY29uc3QgU1BvaW50ICZlcCwgY29uc3QgU1BsYW5l
ICZwbCk7CgppbnQgY21wYnl4KGNvbnN0IHZvaWQgKmVsMSwgY29uc3Qgdm9pZCAqZWwyKTsKaW50
IENtcENQZXJpbShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKaW50IENtcENBcmVhKGNv
bnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOwppbnQgQ21wQnlVMShjb25zdCB2b2lkICphLCBj
b25zdCB2b2lkICpiKTsKaW50IENtcEJ5VTIoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7
CmludCBDbXBEYmwoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7CgojIDggImNkZWZzLmgi
IDIKCiMgNiAiY29udGFpbmVyLmgiIDEKdHlwZWRlZiBpbnQgKCpwQ29tcGZfdCkoY29uc3Qgdm9p
ZCAqZTEsIGNvbnN0IHZvaWQgKmUyKTsKIyAxNSAiY29udGFpbmVyLmgiCnRlbXBsYXRlPGNsYXNz
IFQ+CmNsYXNzIFNDb250YWluZXJQIHsKCnByb3RlY3RlZDoKICBUICoqYXA7CiAgaW50IHN6Owog
IGludCBtZW1zaXplOwogIGludCBjaHVuazsKCiAgaW50IEdyb3coKQogIHsKICAgIFQgKip0ID0g
KFQgKiopIHJlYWxsb2MoYXAsIChtZW1zaXplICsgY2h1bmspICogc2l6ZW9mKFQgKikpOwoKICAg
IGlmICghdCkKICAgICAgcmV0dXJuIC0xOwoKICAgIG1lbXNpemUgKz0gY2h1bms7CgogICAgaWYg
KHQgIT0gYXApCiAgICAgIGFwID0gdDsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgaW50IFNocmlu
aygpCiAgewogICAgaWYgKChtZW1zaXplLWNodW5rKSA8IDEpCiAgICAgIHJldHVybiAtMTsKCiAg
ICBUICoqdCA9IChUICoqKSByZWFsbG9jKGFwLCAobWVtc2l6ZSAtIGNodW5rKSAqIHNpemVvZihU
ICopKTsKCiAgICBpZiAoIXQpCiAgICAgIHJldHVybiAtMTsKCiAgICBtZW1zaXplIC09IGNodW5r
OwoKICAgIGlmICh0ICE9IGFwKQogICAgICBhcCA9IHQ7CgogICAgcmV0dXJuIDA7CiAgfQoKCgog
IGludCBtaW5teigpCiAgewogICAgcmVnaXN0ZXIgaW50IHMgPSAoKHN6LTEpL2NodW5rICsgMSkq
Y2h1bms7CiAgICByZXR1cm4gKHMgPCBjaHVuaykgPyBjaHVuayA6IHM7CiAgfQoKCgpwdWJsaWM6
CiAgU0NvbnRhaW5lclAoaW50IGNodW4gPSAzMCkKICB7CiAgICBjaHVuayA9IGNodW47CiAgICBz
eiA9IDA7CiAgICBtZW1zaXplID0gbWlubXooKTsKICAgIGFwID0gKFQgKiopIG1hbGxvYyhtZW1z
aXplICogc2l6ZW9mKFQqKSk7CiAgfQoKCgogIFNDb250YWluZXJQKGNvbnN0IFNDb250YWluZXJQ
PFQ+ICZzYykKICB7CiAgICByZWdpc3RlciBpbnQgaTsKCiAgICBjaHVuayA9IHNjLmNodW5rOwog
ICAgc3ogPSBzYy5zejsKICAgIG1lbXNpemUgPSBtaW5teigpOwogICAgYXAgPSAoVCAqKikgbWFs
bG9jKHNpemVvZihUKikgKiBtZW1zaXplKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgc2Muc3o7IGkr
KykKICAgICAgYXBbaV0gPSBuZXcgVCgqc2MuYXBbaV0pOwogIH0KCgoKICB2aXJ0dWFsIH5TQ29u
dGFpbmVyUCgpCiAgewogICAgd2hpbGUgKHN6LS0gPiAwKSB7CiAgICAgIGFwW3N6XS0+flQoKTsK
ICAgICAgZGVsZXRlIGFwW3N6XTsKICAgICAgYXBbc3pdPTA7CiAgICB9CiAgICBmcmVlKGFwKTsK
ICAgIGFwID0gMDsKICAgIHN6ID0gMDsKICAgIG1lbXNpemUgPSAwOwogIH0KCgoKICB2aXJ0dWFs
IHZvaWQgUmVzZXQoKQogIHsKICAgIHdoaWxlIChzei0tID4gMCkgewogICAgICBhcFtzel0tPn5U
KCk7CiAgICAgIGRlbGV0ZSBhcFtzel07CiAgICAgIGFwW3N6XT0wOwogICAgfQogICAgZnJlZShh
cCk7CiAgICBzeiA9IDA7CiAgICBtZW1zaXplID0gY2h1bmsgPiAwID8gY2h1bmsgOiAzMDsKICAg
IGFwID0gKFQgKiopIG1hbGxvYyhtZW1zaXplICogc2l6ZW9mKFQqKSk7CiAgfQoKCgogIHZpcnR1
YWwgU0NvbnRhaW5lclA8VD4mIG9wZXJhdG9yPShjb25zdCBTQ29udGFpbmVyUDxUPiAmc2MpCiAg
ewogICAgdGhpcy0+flNDb250YWluZXJQKCk7CgogICAgcmVnaXN0ZXIgaW50IGk7CgogICAgY2h1
bmsgPSBzYy5jaHVuazsKICAgIHN6ID0gc2Muc3o7CiAgICBtZW1zaXplID0gbWlubXooKTsKICAg
IGFwID0gKFQgKiopIG1hbGxvYyhzaXplb2YoVCopICogbWVtc2l6ZSk7CgogICAgZm9yIChpID0g
MDsgaSA8IHNjLnN6OyBpKyspCiAgICAgIGFwW2ldID0gbmV3IFQoKnNjLmFwW2ldKTsKCiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQoKCgogIHZpcnR1YWwgU0NvbnRhaW5lclA8VD4gb3BlcmF0b3IrKGNv
bnN0IFNDb250YWluZXJQPFQ+ICZzYykgY29uc3QKICB7CiAgICByZWdpc3RlciBpbnQgaTsKICAg
IFNDb250YWluZXJQPFQ+IGNzYyA9ICp0aGlzOwoKICAgIGZvciAoaSA9IDA7IGkgPCBzYy5zejsg
aSsrKQogICAgICBjc2MuQWRkKG5ldyBUKCpzYy5hcFtpXSkpOwoKICAgIHJldHVybiBjc2M7CiAg
fQoKCgogIHZpcnR1YWwgU0NvbnRhaW5lclA8VD4mIG9wZXJhdG9yKz0oY29uc3QgU0NvbnRhaW5l
clA8VD4gJnNjKQogIHsKICAgIHJlZ2lzdGVyIGludCBpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBz
Yy5zejsgaSsrKQogICAgICBBZGQobmV3IFQoKnNjLmFwW2ldKSk7CgogICAgcmV0dXJuICp0aGlz
OwogIH0KCgoKICB2aXJ0dWFsIFQqIG9wZXJhdG9yW10oaW50IGkpIGNvbnN0CiAgewogICAgaWYg
KChpIDwgMCkgfHwgKGkgPiAoc3otMSkpKQogICAgICByZXR1cm4gMDsKCiAgICByZXR1cm4gYXBb
aV07CiAgfQoKCgogIHZpcnR1YWwgU0NvbnRhaW5lclA8VD4gQ29weShpbnQgaSwgaW50IGopIGNv
bnN0CiAgewogICAgU0NvbnRhaW5lclA8VD4gc2M7CiAgICBmb3IgKCA7IGkgPiAtMSAmJiBpIDwg
aiAmJiBpIDwgc3o7IGkrKykKICAgICAgc2MuQWRkKG5ldyBUKCphcFtpXSkpOwogICAgcmV0dXJu
IHNjOwogIH0KCgoKICB2aXJ0dWFsIGludCBTaXplKCkgY29uc3QKICB7CiAgICByZXR1cm4gc3o7
CiAgfQoKCgogIHZpcnR1YWwgaW50IEFkZChUKiBhKQogIHsKICAgIGlmICghYSkKICAgICAgcmV0
dXJuIC0xOwoKICAgIGlmIChzeiA+PSBtZW1zaXplKQogICAgICBpZiAoR3JvdygpICE9IDApCiAg
ICAgICAgcmV0dXJuIC0xOwogICAgYXBbc3pdID0gYTsKICAgIHN6Kys7CgogICAgcmV0dXJuIDA7
CiAgfQoKCgogIHZpcnR1YWwgaW50IEluc0FmdGVyKGludCBzbiwgVCogYSkKICB7CiAgICBpZiAo
KHNuIDwgMCkgfHwgKHNuID4gKHN6LTEpKSB8fCAhYSkKICAgICAgcmV0dXJuIC0xOwoKICAgIGlm
IChzeiA+PSBtZW1zaXplKSB7CiAgICAgIGlmIChHcm93KCkgIT0gMCkKICAgICAgICByZXR1cm4g
LTE7CiAgICB9CgogICAgcmVnaXN0ZXIgaW50IGk7CgogICAgZm9yIChpID0gc3o7IGkgPiAoc24r
MSk7IGktLSkKICAgICAgYXBbaV0gPSBhcFtpLTFdOwoKICAgIGFwW3NuKzFdID0gYTsKICAgIHN6
Kys7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIHZpcnR1YWwgaW50IEluc0JlZm9yZShpbnQgc2Is
IFQqIGEpCiAgewogICAgaWYgKChzYiA8IDApIHx8IChzYiA+IChzei0xKSkgfHwgIWEpCiAgICAg
IHJldHVybiAtMTsKCiAgICBpZiAoc3ogPj0gbWVtc2l6ZSkgewogICAgICBpZiAoR3JvdygpICE9
IDApCiAgICAgICAgcmV0dXJuIC0xOwogICAgfQoKICAgIHJlZ2lzdGVyIGludCBpOwoKICAgIGZv
ciAoaSA9IHN6OyBpID4gc2I7IGktLSkKICAgICAgYXBbaV0gPSBhcFtpLTFdOwoKICAgIGFwW3Ni
XSA9IGE7CiAgICBzeisrOwoKICAgIHJldHVybiAwOwogIH0KCgoKICB2aXJ0dWFsIGludCBEZWxl
dGUoaW50IGspCiAgewogICAgaWYgKHN6IDwgMSkKICAgICAgcmV0dXJuIC0xOwoKICAgIGlmICgo
ayA8IDApIHx8IChrID4gKHN6LTEpKSkKICAgICAgcmV0dXJuIC0xOwoKICAgIHJlZ2lzdGVyIGlu
dCBpOwoKICAgIGFwW2tdLT5+VCgpOwogICAgZGVsZXRlIGFwW2tdOwoKICAgIGZvciAoaSA9IGs7
IGkgPCAoc3otMSk7IGkrKykKICAgICAgYXBbaV0gPSBhcFtpKzFdOwoKICAgIHN6LS07CgogICAg
aWYgKG1pbm16KCkgPCBtZW1zaXplKQogICAgICBTaHJpbmsoKTsKCiAgICByZXR1cm4gMDsKICB9
CgoKCiAgdmlydHVhbCB2b2lkIFN3YXAoaW50IGEsIGludCBiKQogIHsKICAgIFQqIHBhID0gYXBb
YV07CgogICAgYXBbYV0gPSBhcFtiXTsKICAgIGFwW2JdID0gcGE7CiAgfQoKCgogIHZpcnR1YWwg
dm9pZCBTb3J0KHBDb21wZl90IGNvbXBmKQogIHsKICAgIHFzb3J0KGFwLCBzeiwgc2l6ZW9mKFQq
KSwgY29tcGYpOwogIH0KCgoKICB2aXJ0dWFsIHZvaWQgQ2xlYW5TYW1lKCkKICB7CiAgICByZWdp
c3RlciBpbnQgaSwgajsKICAgIGZvciAoaSA9IDA7IGkgPCAoc3otMSk7IGkrKykKICAgICAgZm9y
IChqID0gaSsxOyBqIDwgc3o7IGorKykKICAgICAgICBpZiAoKihhcFtpXSkgPT0gKihhcFtqXSkp
CiAgICAgICAgICBEZWxldGUoai0tKTsKICB9Cgp9OwojIDMyMCAiY29udGFpbmVyLmgiCnRlbXBs
YXRlPGNsYXNzIFQ+CmNsYXNzIFNDb250YWluZXIgewoKcHJvdGVjdGVkOgogIFQgKmFwOwogIGlu
dCBzejsKICBpbnQgbWVtc2l6ZTsKICBpbnQgY2h1bms7CgogIGludCBHcm93KCkKICB7CiAgICBU
ICp0ID0gKFQgKikgcmVhbGxvYyhhcCwgKG1lbXNpemUgKyBjaHVuaykgKiBzaXplb2YoVCkpOwoK
ICAgIGlmICghdCkKICAgICAgcmV0dXJuIC0xOwoKICAgIG1lbXNpemUgKz0gY2h1bms7CgogICAg
aWYgKHQgIT0gYXApCiAgICAgIGFwID0gdDsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgaW50IFNo
cmluaygpCiAgewogICAgaWYgKChtZW1zaXplLWNodW5rKSA8IDEpCiAgICAgIHJldHVybiAtMTsK
CiAgICBUICp0ID0gKFQgKikgcmVhbGxvYyhhcCwgKG1lbXNpemUgLSBjaHVuaykgKiBzaXplb2Yo
VCkpOwoKICAgIGlmICghdCkKICAgICAgcmV0dXJuIC0xOwoKICAgIG1lbXNpemUgLT0gY2h1bms7
CgogICAgaWYgKHQgIT0gYXApCiAgICAgIGFwID0gdDsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAg
aW50IG1pbm16KCkKICB7CiAgICByZWdpc3RlciBpbnQgcyA9ICgoc3otMSkvY2h1bmsgKyAxKSpj
aHVuazsKICAgIHJldHVybiAocyA8IGNodW5rKSA/IGNodW5rIDogczsKICB9CgoKCnB1YmxpYzoK
ICBTQ29udGFpbmVyKGludCBjaHVuID0gMzApCiAgewogICAgY2h1bmsgPSBjaHVuOwogICAgc3og
PSAwOwogICAgbWVtc2l6ZSA9IG1pbm16KCk7CiAgICBhcCA9IChUICopIG1hbGxvYyhtZW1zaXpl
ICogc2l6ZW9mKFQpKTsKICB9CgoKCiAgU0NvbnRhaW5lcihjb25zdCBTQ29udGFpbmVyPFQ+ICZz
YykKICB7CiAgICByZWdpc3RlciBpbnQgaTsKCiAgICBjaHVuayA9IHNjLmNodW5rOwogICAgc3og
PSBzYy5zejsKICAgIG1lbXNpemUgPSBtaW5teigpOwogICAgYXAgPSAoVCAqKSBtYWxsb2Moc2l6
ZW9mKFQpICogbWVtc2l6ZSk7CgogICAgZm9yIChpID0gMDsgaSA8IHNjLnN6OyBpKyspCiAgICAg
IGFwW2ldID0gc2MuYXBbaV07CiAgfQoKCgogIHZpcnR1YWwgflNDb250YWluZXIoKQogIHsKICAg
IHdoaWxlIChzei0tID4gMCkKICAgICAgYXBbc3pdLn5UKCk7CiAgICBmcmVlKGFwKTsKICAgIGFw
ID0gMDsKICAgIHN6ID0gMDsKICAgIG1lbXNpemUgPSAwOwogIH0KCgoKICB2aXJ0dWFsIHZvaWQg
UmVzZXQoKQogIHsKICAgIHdoaWxlIChzei0tID4gMCkKICAgICAgYXBbc3pdLn5UKCk7CiAgICBm
cmVlKGFwKTsKICAgIHN6ID0gMDsKICAgIG1lbXNpemUgPSBjaHVuayA+IDAgPyBjaHVuayA6IDMw
OwogICAgYXAgPSAoVCAqKSBtYWxsb2MobWVtc2l6ZSAqIHNpemVvZihUKSk7CiAgfQoKCgogIHZp
cnR1YWwgU0NvbnRhaW5lcjxUPiYgb3BlcmF0b3I9KGNvbnN0IFNDb250YWluZXI8VD4gJnNjKQog
IHsKICAgIHRoaXMtPn5TQ29udGFpbmVyKCk7CgogICAgcmVnaXN0ZXIgaW50IGk7CgogICAgY2h1
bmsgPSBzYy5jaHVuazsKICAgIHN6ID0gc2Muc3o7CiAgICBtZW1zaXplID0gbWlubXooKTsKICAg
IGFwID0gKFQgKikgbWFsbG9jKHNpemVvZihUKSAqIG1lbXNpemUpOwoKICAgIGZvciAoaSA9IDA7
IGkgPCBzYy5zejsgaSsrKQogICAgICBhcFtpXSA9IHNjLmFwW2ldOwoKICAgIHJldHVybiAqdGhp
czsKICB9CgoKCiAgdmlydHVhbCBTQ29udGFpbmVyPFQ+JiBvcGVyYXRvcisoY29uc3QgU0NvbnRh
aW5lcjxUPiAmc2MpIGNvbnN0CiAgewogICAgcmVnaXN0ZXIgaW50IGk7CiAgICBTQ29udGFpbmVy
PFQ+ICpwc2MgPSBuZXcgU0NvbnRhaW5lcjxUPigqdGhpcyk7CgogICAgZm9yIChpID0gMDsgaSA8
IHNjLnN6OyBpKyspCiAgICAgIHBzYy0+QWRkKHNjLmFwW2ldKTsKCiAgICByZXR1cm4gKnBzYzsK
ICB9CgoKCiAgdmlydHVhbCBTQ29udGFpbmVyPFQ+JiBvcGVyYXRvcis9KGNvbnN0IFNDb250YWlu
ZXI8VD4gJnNjKQogIHsKICAgIHJlZ2lzdGVyIGludCBpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBz
Yy5zejsgaSsrKQogICAgICBBZGQoc2MuYXBbaV0pOwoKICAgIHJldHVybiAqdGhpczsKICB9CgoK
CiAgdmlydHVhbCBUJiBvcGVyYXRvcltdKGludCBpKSBjb25zdAogIHsKICAgIHJldHVybiBhcFtp
XTsKICB9CgoKCiAgdmlydHVhbCBpbnQgU2l6ZSgpIGNvbnN0CiAgewogICAgcmV0dXJuIHN6Owog
IH0KCgoKICB2aXJ0dWFsIGludCBBZGQoVCBhKQogIHsKICAgIGlmIChzeiA+PSBtZW1zaXplKQog
ICAgICBpZiAoR3JvdygpICE9IDApCiAgICAgICAgcmV0dXJuIC0xOwogICAgYXBbc3pdID0gYTsK
ICAgIHN6Kys7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIHZpcnR1YWwgaW50IEluc0FmdGVyKGlu
dCBzbiwgVCBhKQogIHsKICAgIGlmICgoc24gPCAwKSB8fCAoc24gPiAoc3otMSkpKQogICAgICBy
ZXR1cm4gLTE7CgogICAgaWYgKHN6ID49IG1lbXNpemUpIHsKICAgICAgaWYgKEdyb3coKSAhPSAw
KQogICAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgICByZWdpc3RlciBpbnQgaTsKCiAgICBmb3Ig
KGkgPSBzejsgaSA+IChzbisxKTsgaS0tKQogICAgICBhcFtpXSA9IGFwW2ktMV07CgogICAgYXBb
c24rMV0gPSBhOwogICAgc3orKzsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdmlydHVhbCBpbnQg
SW5zQmVmb3JlKGludCBzYiwgVCBhKQogIHsKICAgIGlmICgoc2IgPCAwKSB8fCAoc2IgPiAoc3ot
MSkpKQogICAgICByZXR1cm4gLTE7CgogICAgaWYgKHN6ID49IG1lbXNpemUpIHsKICAgICAgaWYg
KEdyb3coKSAhPSAwKQogICAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgICByZWdpc3RlciBpbnQg
aTsKCiAgICBmb3IgKGkgPSBzejsgaSA+IHNiOyBpLS0pCiAgICAgIGFwW2ldID0gYXBbaS0xXTsK
CiAgICBhcFtzYl0gPSBhOwogICAgc3orKzsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdmlydHVh
bCBpbnQgRGVsZXRlKGludCBrKQogIHsKICAgIGlmIChzeiA8IDEpCiAgICAgIHJldHVybiAtMTsK
CiAgICBpZiAoKGsgPCAwKSB8fCAoayA+IChzei0xKSkpCiAgICAgIHJldHVybiAtMTsKCiAgICBy
ZWdpc3RlciBpbnQgaTsKCiAgICBhcFtrXS5+VCgpOwoKICAgIGZvciAoaSA9IGs7IGkgPCAoc3ot
MSk7IGkrKykKICAgICAgYXBbaV0gPSBhcFtpKzFdOwoKICAgIHN6LS07CgogICAgaWYgKG1pbm16
KCkgPCBtZW1zaXplKQogICAgICBTaHJpbmsoKTsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdmly
dHVhbCB2b2lkIFN3YXAoaW50IGEsIGludCBiKQogIHsKICAgIFQgZWwgPSBhcFthXTsKCiAgICBh
cFthXSA9IGFwW2JdOwogICAgYXBbYl0gPSBlbDsKICB9CgoKCiAgdmlydHVhbCB2b2lkIFNvcnQo
cENvbXBmX3QgY29tcGYpCiAgewogICAgcXNvcnQoYXAsIHN6LCBzaXplb2YoVCksIGNvbXBmKTsK
ICB9CgoKCiAgdmlydHVhbCB2b2lkIENsZWFuU2FtZSgpCiAgewogICAgcmVnaXN0ZXIgaW50IGks
ajsKICAgIGZvciAoaSA9IDA7IGkgPCAoc3otMSk7IGkrKykKICAgICAgZm9yIChqID0gaSsxOyBq
IDwgc3o7IGorKykKICAgICAgaWYgKGFwW2ldID09IGFwW2pdKQogICAgICAgIERlbGV0ZShqLS0p
OwogIH0KCn07CgojIDkgImNkZWZzLmgiIDIKCgoKY2xhc3MgU0FyYzsKY2xhc3MgU0JveDsKY2xh
c3MgU0NpcmNsZTsKY2xhc3MgU0N1cnZlOwpjbGFzcyBTRXJyb3I7CmNsYXNzIFNJbmZMaW5lOwpj
bGFzcyBTSW50ZXJzZWN0OwpjbGFzcyBTSXNlY3Q7CmNsYXNzIFNMaW5lOwpjbGFzcyBTTWF0cml4
OwpjbGFzcyBTUGxhbmU7CmNsYXNzIFNQb2ludDsKY2xhc3MgU1JheTsKY2xhc3MgU1NlZzsKY2xh
c3MgU1NlZ0NvbnQ7CmNsYXNzIFNWZWN0b3I7CgplbnVtIFNfT3JpZW50IHtTX0NXID0gLTEsIFNf
Q0NXID0gMX07CgplbnVtIFNTZWdfdCB7U0xJTkUsIFNDSVJDTEUsIFNBUkMsIFNDVVJWRX07Cgp0
eXBlZGVmIFNDb250YWluZXJQPFNQb2ludD4gU1BvaW50Q29udDsKCmNsYXNzIFNQb2ludCB7CnBy
aXZhdGU6CiAgY2hhciBtX2xheWVyWzMzXTsKICBpbnQgbV9jb2xvcjsKcHVibGljOgogIGludCBm
bGFnczsKICBpbnQgYXBmbGFnczsKICB1bmlvbiB7CiAgICBkb3VibGUgcFszXTsKICAgIHN0cnVj
dCB7CiAgICAgIGRvdWJsZSB4OwogICAgICBkb3VibGUgeTsKICAgICAgZG91YmxlIHo7CiAgICB9
OwogIH07CgogIFNQb2ludChjb25zdCBTUG9pbnQmIHApOwogIFNQb2ludChkb3VibGUgeD0wLjAs
IGRvdWJsZSB5PTAuMCwgZG91YmxlIHo9MC4wKSB7dGhpcy0+eD14O3RoaXMtPnk9eTt0aGlzLT56
PXo7bV9sYXllclswXT0nXDAnO2FwZmxhZ3M9ZmxhZ3M9MDt9CiAgU1BvaW50KGNvbnN0IFNWZWN0
b3ImIHYpOwoKICBTUG9pbnQmIG9wZXJhdG9yPShjb25zdCBTUG9pbnQgJnApOwogIFNQb2ludCYg
b3BlcmF0b3I9KGNvbnN0IFNWZWN0b3IgJnYpOwogIGJvb2wgb3BlcmF0b3I9PShpbnQgb3JpZ2lu
KSBjb25zdCB7IHJldHVybiAhb3JpZ2luICYmICgqdGhpcyk9PVNQb2ludCgwLjApOyB9CiAgYm9v
bCBvcGVyYXRvciE9KGludCBvcmlnaW4pIGNvbnN0IHsgcmV0dXJuICFvcmlnaW4gJiYgKCp0aGlz
KSE9U1BvaW50KDAuMCk7IH0KICBib29sIG9wZXJhdG9yPT0oY29uc3QgU1BvaW50JiBwKSBjb25z
dCB7cmV0dXJuICEoU3RvbENvbXAoeCxwLngpIHx8IFN0b2xDb21wKHkscC55KSB8fCBTdG9sQ29t
cCh6LHAueikpO30KICBib29sIG9wZXJhdG9yIT0oY29uc3QgU1BvaW50JiBwKSBjb25zdCB7cmV0
dXJuIFN0b2xDb21wKHgscC54KSB8fCBTdG9sQ29tcCh5LHAueSkgfHwgU3RvbENvbXAoeixwLnop
O30KICBTUG9pbnQgb3BlcmF0b3IrKGNvbnN0IFNQb2ludCYgcCkgY29uc3Q7CiAgU1BvaW50JiBv
cGVyYXRvcis9KGNvbnN0IFNQb2ludCYgcCk7CiAgU1BvaW50IG9wZXJhdG9yKyhjb25zdCBTVmVj
dG9yJiBwKTsKICBTUG9pbnQmIG9wZXJhdG9yKz0oY29uc3QgU1ZlY3RvciYgcCk7CiAgU1BvaW50
IG9wZXJhdG9yLSgpIGNvbnN0OwogIFNQb2ludCBvcGVyYXRvci0oY29uc3QgU1BvaW50JiBwKSBj
b25zdDsKICBTUG9pbnQgb3BlcmF0b3ItKGNvbnN0IFNWZWN0b3ImIHApIGNvbnN0OwogIFNQb2lu
dCYgb3BlcmF0b3ItPShjb25zdCBTUG9pbnQmIHApOwogIFNQb2ludCBvcGVyYXRvciooZG91Ymxl
IGspIGNvbnN0OwogIFNQb2ludCYgb3BlcmF0b3IqPShkb3VibGUgayk7CiAgU1BvaW50IG9wZXJh
dG9yLyhkb3VibGUgaykgY29uc3Q7CiAgU1BvaW50JiBvcGVyYXRvci89KGRvdWJsZSBrKTsKICBk
b3VibGUmIG9wZXJhdG9yW10oaW50IGkpOwoKICBkb3VibGUgZGlzdChjb25zdCBTUG9pbnQgJnAp
IGNvbnN0OwogIFNQb2ludCBQcm9qKGNvbnN0IFNQbGFuZSAmcCkgY29uc3Q7CiAgYm9vbCBJbnNp
ZGUoY29uc3QgU1NlZyAqcHMpIGNvbnN0OwoKICBjb25zdCBjaGFyKiBMYXllcigpIGNvbnN0IHty
ZXR1cm4gKGNvbnN0IGNoYXIgKikgbV9sYXllcjt9CiAgdm9pZCBTZXRMYXllcihjb25zdCBjaGFy
ICpzKSB7aWYgKHMpIHtzdHJuY3B5KG1fbGF5ZXIsIHMsIDMzLTEpOyBtX2xheWVyWzMzLTFdID0g
J1wwJzt9fQogIGludCBDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KICB2b2lkIFNl
dENvbG9yKGludCBjKSB7IG1fY29sb3IgPSBjOyB9Cn07CgoKY2xhc3MgU1ZlY3RvciB7CnByaXZh
dGU6CiAgU1ZlY3RvciYgc2V0dzEoKTsKcHVibGljOgogIHVuaW9uIHsKICAgIGRvdWJsZSB2WzRd
OwogICAgc3RydWN0IHsKICAgICAgZG91YmxlIHg7CiAgICAgIGRvdWJsZSB5OwogICAgICBkb3Vi
bGUgejsKICAgICAgZG91YmxlIHc7CiAgICB9OwogIH07CgogIFNWZWN0b3IoZG91YmxlIHg9MC4w
LCBkb3VibGUgeT0wLjAsIGRvdWJsZSB6PTAuMCwgZG91YmxlIHc9MS4wKSB7dGhpcy0+eD14O3Ro
aXMtPnk9eTt0aGlzLT56PXo7dGhpcy0+dz13O30KICBTVmVjdG9yKGNvbnN0IFNWZWN0b3IgJnYp
IHt4PXYueDsgeT12Lnk7IHo9di56OyB3PXYudzt9CiAgU1ZlY3Rvcihjb25zdCBTUG9pbnQgJnAp
IHt4PXAueDsgeT1wLnk7IHo9cC56OyB3PTEuMDt9CiAgU1ZlY3Rvcihjb25zdCBTUG9pbnQgJmEs
IGNvbnN0IFNQb2ludCAmYikge3g9Yi54LWEueDt5PWIueS1hLnk7ej1iLnotYS56O3c9MS4wO30K
CiAgU1ZlY3RvciB3MSgpIGNvbnN0OwoKICBTVmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgU1ZlY3Rv
ciAmdikge3g9di54OyB5PXYueTsgej12Lno7IHc9di53OyByZXR1cm4gKnRoaXM7fQogIFNWZWN0
b3ImIG9wZXJhdG9yPShjb25zdCBTUG9pbnQgJnApIHt4PXAueDsgeT1wLnk7IHo9cC56OyB3PTEu
MDtyZXR1cm4gKnRoaXM7fQogIGJvb2wgb3BlcmF0b3I9PShpbnQgb3JpZ2luKSBjb25zdCB7cmV0
dXJuICFvcmlnaW4gJiYgKCp0aGlzKT09U1ZlY3RvcigwLjApO30KICBib29sIG9wZXJhdG9yIT0o
aW50IG9yaWdpbikgY29uc3Qge3JldHVybiAhb3JpZ2luICYmICgqdGhpcykhPVNWZWN0b3IoMC4w
KTt9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNWZWN0b3IgJnYpIGNvbnN0OwogIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBTVmVjdG9yICZ2KSBjb25zdCB7cmV0dXJuICEoKnRoaXM9PXYpO30KICBT
VmVjdG9yIG9wZXJhdG9yKyhjb25zdCBTVmVjdG9yICZ2KSBjb25zdDsKICBTVmVjdG9yJiBvcGVy
YXRvcis9KGNvbnN0IFNWZWN0b3IgJnYpOwogIFNQb2ludCBvcGVyYXRvcisoY29uc3QgU1BvaW50
ICZwKSBjb25zdDsKICBTVmVjdG9yIG9wZXJhdG9yLSgpIGNvbnN0OwogIFNWZWN0b3Igb3BlcmF0
b3ItKGNvbnN0IFNWZWN0b3IgJnApIGNvbnN0OwogIFNWZWN0b3ImIG9wZXJhdG9yLT0oY29uc3Qg
U1ZlY3RvciAmcCk7CiAgU1ZlY3RvciBvcGVyYXRvciooZG91YmxlIGspIGNvbnN0OwogIFNWZWN0
b3ImIG9wZXJhdG9yKj0oZG91YmxlIGspOwogIFNWZWN0b3Igb3BlcmF0b3IvKGRvdWJsZSBrKSBj
b25zdDsKICBTVmVjdG9yJiBvcGVyYXRvci89KGRvdWJsZSBrKTsKICBkb3VibGUmIG9wZXJhdG9y
W10oaW50IGkpOwoKICBTVmVjdG9yIG9wZXJhdG9yKihjb25zdCBTVmVjdG9yICZwKSBjb25zdDsK
ICBkb3VibGUgZHAoY29uc3QgU1ZlY3RvciAmcCkgY29uc3Q7CgogIGRvdWJsZSBNYWcoKSBjb25z
dDsKICBTVmVjdG9yIFVuaXQoKSBjb25zdDsKCiAgU1ZlY3RvciBSaWdodChjb25zdCBTVmVjdG9y
ICZub3JtYWwpIGNvbnN0OwogIFNWZWN0b3IgTGVmdChjb25zdCBTVmVjdG9yICZub3JtYWwpIGNv
bnN0OwoKICBTVmVjdG9yIFJpZ2h0WFkoKSBjb25zdCB7IHJldHVybiBSaWdodChTVmVjdG9yKDAu
MCwwLjAsMS4wKSk7IH0KICBTVmVjdG9yIExlZnRYWSgpIGNvbnN0IHsgcmV0dXJuIExlZnQoU1Zl
Y3RvcigwLjAsMC4wLDEuMCkpOyB9CgogIGRvdWJsZSBBbmdsZShjb25zdCBTVmVjdG9yICZ2LCBj
b25zdCBTVmVjdG9yICZub3JtYWwgPSBTVmVjdG9yKDAuMCwwLjAsMS4wKSkgY29uc3Q7CgogIGRv
dWJsZSBBbmdsZVgoKSBjb25zdDsKICBkb3VibGUgQW5nbGVZKCkgY29uc3Q7CiAgZG91YmxlIEFu
Z2xlWigpIGNvbnN0OwoKICBkb3VibGUgQW5nbGVYWSgpIGNvbnN0OwogIGRvdWJsZSBBbmdsZVpY
KCkgY29uc3Q7CiAgZG91YmxlIEFuZ2xlWVooKSBjb25zdDsKCiAgU1ZlY3RvciBBcmJYQXhpcygp
IGNvbnN0OwogIFNWZWN0b3IgQXJiWUF4aXMoKSBjb25zdDsKCiAgU1ZlY3RvciBQcm9qKGNvbnN0
IFNWZWN0b3IgJnYpIGNvbnN0OwogIFNWZWN0b3IgUHJvaihjb25zdCBTUGxhbmUgJnBsYW5lKSBj
b25zdDsKICBTVmVjdG9yIFByb2ooY29uc3QgU0luZkxpbmUgJmwpIGNvbnN0Owp9OwoKCmNvbnN0
IFNWZWN0b3IgU19JKDEuMCwwLjAsMC4wKTsKY29uc3QgU1ZlY3RvciBTX0ooMC4wLDEuMCwwLjAp
Owpjb25zdCBTVmVjdG9yIFNfSygwLjAsMC4wLDEuMCk7CgoKY2xhc3MgU1BsYW5lIHsKcHJpdmF0
ZToKICBTVmVjdG9yIG1fbm9ybWFsOwogIFNQb2ludCBtX3B0b25wbGFuZTsKcHVibGljOgogIFNQ
bGFuZSgpIHttX25vcm1hbD1TX0s7IG1fcHRvbnBsYW5lPVNQb2ludCgwLjApO30KICBTUGxhbmUo
Y29uc3QgU1BsYW5lICZhKSB7IG1fbm9ybWFsID0gYS5tX25vcm1hbC5Vbml0KCk7IG1fcHRvbnBs
YW5lID0gYS5tX3B0b25wbGFuZTsgfQogIFNQbGFuZShjb25zdCBTVmVjdG9yICZuLCBjb25zdCBT
UG9pbnQgJnApIHttX25vcm1hbD1uLlVuaXQoKTsgbV9wdG9ucGxhbmU9cDt9CiAgU1BsYW5lKGNv
bnN0IFNQb2ludCAmcCwgY29uc3QgU1ZlY3RvciAmbikge21fbm9ybWFsPW4uVW5pdCgpOyBtX3B0
b25wbGFuZT1wO30KCiAgU1BsYW5lJiBvcGVyYXRvcj0oY29uc3QgU1BsYW5lICZwKSB7bV9ub3Jt
YWw9cC5tX25vcm1hbC5Vbml0KCk7IG1fcHRvbnBsYW5lPXAubV9wdG9ucGxhbmU7IHJldHVybiAq
dGhpczt9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNQbGFuZSAmcCkgY29uc3Qge3JldHVybiBt
X25vcm1hbC5Vbml0KCk9PXAubV9ub3JtYWwuVW5pdCgpICYmIE9uUGxhbmUocC5tX3B0b25wbGFu
ZSk7fQoKICBTVmVjdG9yIEdldE5vcm1hbCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFsOyB9CiAg
U1BvaW50IEdldFB0T25QbGFuZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRvbnBsYW5lOyB9CiAgdm9p
ZCBTZXROb3JtYWwoY29uc3QgU1ZlY3RvciAmdikgeyBtX25vcm1hbCA9IHYuVW5pdCgpOyB9CiAg
dm9pZCBTZXRQdE9uUGxhbmUoY29uc3QgU1BvaW50ICZwKSB7IG1fcHRvbnBsYW5lID0gcDsgfQoK
ICBpbnQgVHJhbnNmb3JtKGNvbnN0IFNNYXRyaXggJm0pOwoKICBTUG9pbnQgR2V0UmFuZFAoKSBj
b25zdDsKICBTVmVjdG9yIEdldFJhbmRWKCkgY29uc3Q7CgogIGRvdWJsZSBkaXN0KGNvbnN0IFNQ
b2ludCAmcCkgY29uc3Q7CgogIGJvb2wgT25QbGFuZShjb25zdCBTUG9pbnQgJnApIGNvbnN0Owog
IGJvb2wgT25QbGFuZShjb25zdCBTSW5mTGluZSAmbCkgY29uc3Q7CiAgYm9vbCBPblBsYW5lKGNv
bnN0IFNQbGFuZSAmcCkgY29uc3Q7CiAgYm9vbCBQYXJhbGxlbChjb25zdCBTSW5mTGluZSAmbCkg
Y29uc3Q7CiAgYm9vbCBQYXJhbGxlbChjb25zdCBTUGxhbmUgJnApIGNvbnN0OwogIGJvb2wgSW50
ZXJzZWN0KGNvbnN0IFNJbmZMaW5lICZsLCBTUG9pbnQgJnAsIGRvdWJsZSAmdGwpIGNvbnN0Owog
IGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNQbGFuZSAmcGxhbmUsIFNJbmZMaW5lICZsKSBjb25zdDsK
Cn07CgoKY29uc3QgU1BsYW5lIFNYWVBMQU5FKFNQb2ludCgwLjApLCBTX0spOwpjb25zdCBTUGxh
bmUgU1pYUExBTkUoU1BvaW50KDAuMCksIFNfSik7CmNvbnN0IFNQbGFuZSBTWVpQTEFORShTUG9p
bnQoMC4wKSwgU19JKTsKCgpjbGFzcyBTQm94IHsKcHJpdmF0ZToKICBTUG9pbnQgbV9wOwogIFNW
ZWN0b3IgbV92OwogIGJvb2wgbV9jdXJyZW50OwpwdWJsaWM6CiAgU0JveCgpIHttX2N1cnJlbnQg
PSBmYWxzZTt9CiAgU0JveChjb25zdCBTU2VnICpwcyk7CiAgU0JveChjb25zdCBTQm94ICZyKSB7
bV9wID0gci5tX3A7IG1fdiA9IHIubV92OyBtX2N1cnJlbnQgPSByLm1fY3VycmVudDt9CgogIFNC
b3gmIG9wZXJhdG9yPShjb25zdCBTQm94JiByKSB7bV9wID0gci5tX3A7IG1fdiA9IHIubV92OyBt
X2N1cnJlbnQgPSByLm1fY3VycmVudDtyZXR1cm4gKnRoaXM7fQogIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBTQm94JiBiKSBjb25zdCB7cmV0dXJuIChtX3A9PWIubV9wICYmIG1fdj09Yi5tX3YpIHx8
IChtX3A9PWIubV9wK2IubV92ICYmIG1fdj09LWIubV92KTt9CgogIGRvdWJsZSBabGVuKCkgY29u
c3Qge3JldHVybiBmYWJzKG1fdi56KTt9CiAgZG91YmxlIFlsZW4oKSBjb25zdCB7cmV0dXJuIGZh
YnMobV92LnkpO30KICBkb3VibGUgWGxlbigpIGNvbnN0IHtyZXR1cm4gZmFicyhtX3YueCk7fQog
IFNWZWN0b3IgR2V0VigpIGNvbnN0IHtyZXR1cm4gbV92O30KICBTUG9pbnQgR2V0UCgpIGNvbnN0
IHtyZXR1cm4gbV9wO30KCiAgYm9vbCBPdmVybGFwWChjb25zdCBTQm94ICZyKSBjb25zdDsKICBi
b29sIE92ZXJsYXBZKGNvbnN0IFNCb3ggJnIpIGNvbnN0OwogIGJvb2wgT3ZlcmxhcFooY29uc3Qg
U0JveCAmcikgY29uc3Q7CgogIGJvb2wgSW5zaWRlWChjb25zdCBTQm94ICZyKSBjb25zdDsKICBi
b29sIEluc2lkZVkoY29uc3QgU0JveCAmcikgY29uc3Q7CiAgYm9vbCBJbnNpZGVaKGNvbnN0IFNC
b3ggJnIpIGNvbnN0OwoKICBib29sIE92ZXJsYXBYWShjb25zdCBTQm94ICZyKSBjb25zdCB7cmV0
dXJuIE92ZXJsYXBYKHIpICYmIE92ZXJsYXBZKHIpO30KICBib29sIE92ZXJsYXBZWihjb25zdCBT
Qm94ICZyKSBjb25zdCB7cmV0dXJuIE92ZXJsYXBZKHIpICYmIE92ZXJsYXBaKHIpO30KICBib29s
IE92ZXJsYXBaWChjb25zdCBTQm94ICZyKSBjb25zdCB7cmV0dXJuIE92ZXJsYXBaKHIpICYmIE92
ZXJsYXBYKHIpO30KCiAgYm9vbCBJbnNpZGVYWShjb25zdCBTQm94ICZyKSBjb25zdCB7cmV0dXJu
IEluc2lkZVgocikgJiYgSW5zaWRlWShyKTt9CiAgYm9vbCBJbnNpZGVZWihjb25zdCBTQm94ICZy
KSBjb25zdCB7cmV0dXJuIEluc2lkZVkocikgJiYgSW5zaWRlWihyKTt9CiAgYm9vbCBJbnNpZGVa
WChjb25zdCBTQm94ICZyKSBjb25zdCB7cmV0dXJuIEluc2lkZVoocikgJiYgSW5zaWRlWChyKTt9
CgogIGJvb2wgT3ZlcmxhcChjb25zdCBTQm94ICZyKSBjb25zdCB7cmV0dXJuIE92ZXJsYXBYWShy
KSAmJiBPdmVybGFwWVoocikgJiYgT3ZlcmxhcFpYKHIpO30KICBib29sIEluc2lkZShjb25zdCBT
Qm94ICZyKSBjb25zdCB7cmV0dXJuIEluc2lkZVhZKHIpICYmIEluc2lkZVlaKHIpICYmIEluc2lk
ZVpYKHIpO30KCiAgU0JveCYgVW5pb24oY29uc3QgU0JveCAmYik7CgogIFNQb2ludCBDZW50ZXIo
KSBjb25zdCB7cmV0dXJuIG1fcCttX3YqMC41O30KICB2b2lkIEdldDhQb2ludHMoU1BvaW50ICpw
cCkgY29uc3Q7CiAgdm9pZCBHZXRCb3hDb250KFNTZWdDb250ICZjYykgY29uc3Q7Cgp9OwoKCmNs
YXNzIFNTZWcgewpwcm90ZWN0ZWQ6CiAgU1BsYW5lIG1fcGxhbmU7CiAgY2hhciBtX2xheWVyWzMz
XTsKICBpbnQgbV9jb2xvcjsKICBTQm94IG1fYm94OwogIGRvdWJsZSBtX2FyZWE7CiAgZG91Ymxl
IG1fbGVuZ3RoOwogIGludCBtX2ZsYWdzOwogIGZyaWVuZCBjbGFzcyBTQ3VydmU7CnB1YmxpYzoK
CiAgZG91YmxlIG1fdTsKICBTU2VnICpwcmV2LCAqbmV4dDsKCiAgaW50IGFwZmxhZ3M7CgogIHZp
cnR1YWwgflNTZWcoKSB7bV9mbGFncz0wLG1fYXJlYT1tX2xlbmd0aD0wLjAsKm1fbGF5ZXI9J1ww
Jzt9CgogIHZpcnR1YWwgU1NlZ190IFR5cGUoKSBjb25zdCA9IDA7CiAgdmlydHVhbCBjb25zdCBj
aGFyKiBMYXllcigpIGNvbnN0IHtyZXR1cm4gKGNvbnN0IGNoYXIgKikgbV9sYXllcjt9CiAgdmly
dHVhbCB2b2lkIFNldExheWVyKGNvbnN0IGNoYXIgKnMpIHtpZiAocykge3N0cm5jcHkobV9sYXll
ciwgcywgMzMtMSk7bV9sYXllclszMy0xXT0nXDAnO319CiAgdmlydHVhbCBpbnQgR2V0Q29sb3Io
KSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAgdmlydHVhbCB2b2lkIFNldENvbG9yKGludCBj
KSB7IG1fY29sb3IgPSBjOyB9CiAgdmlydHVhbCB2b2lkIFNldGFwZmxhZ3NCaXQoaW50IGJpdG1h
c2ssIGludCB2YWwpIHtpZiAodmFsKSBhcGZsYWdzIHw9IGJpdG1hc2s7IGVsc2UgYXBmbGFncyAm
PSB+Yml0bWFzazt9CiAgdmlydHVhbCBpbnQgVGVzdGFwZmxhZ3NCaXQoaW50IGJpdG1hc2spIGNv
bnN0IHtyZXR1cm4gYXBmbGFncyAmIGJpdG1hc2s7fQoKICB2aXJ0dWFsIHZvaWQgVXBkYXRlKCkg
PSAwOwoKICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTU2VnJiBzKSBjb25zdCB7cmV0
dXJuIGZhbHNlO30KCgogIHZpcnR1YWwgU1BvaW50IFBvaW50KGRvdWJsZSB1KSBjb25zdCA9IDA7
CiAgdmlydHVhbCBTUG9pbnQgU3RhcnRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIFBvaW50KDAuMCk7
IH0KICB2aXJ0dWFsIFNQb2ludCBNaWRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIFBvaW50KDAuNSk7
IH0KICB2aXJ0dWFsIFNQb2ludCBFbmRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIFBvaW50KDEuMCk7
IH0KICB2aXJ0dWFsIFNWZWN0b3IgR2V0Tm9ybWFsKCkgY29uc3QgeyByZXR1cm4gbV9wbGFuZS5H
ZXROb3JtYWwoKTt9CgogIHZpcnR1YWwgU0JveCBHZXRCb3goKSBjb25zdCB7IHJldHVybiBtX2Jv
eDsgfQoKICB2aXJ0dWFsIGRvdWJsZSBMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsg
fQogIHZpcnR1YWwgZG91YmxlIEFyZWEoKSBjb25zdCB7IHJldHVybiBtX2FyZWE7IH0KICB2aXJ0
dWFsIHZvaWQgVHJhbnNmb3JtKGNvbnN0IFNNYXRyaXggJm0pID0gMDsKICB2aXJ0dWFsIFNWZWN0
b3IgVGFuZ2VudChkb3VibGUgdSkgY29uc3QgPSAwOwogIHZpcnR1YWwgU1BsYW5lIEdldFBsYW5l
KCkgY29uc3QgeyByZXR1cm4gbV9wbGFuZTsgfQogIHZpcnR1YWwgdm9pZCBTZXRQbGFuZShjb25z
dCBTUGxhbmUgJnBsKSA9IDA7CgogIHZpcnR1YWwgU1NlZyogUHJvaihjb25zdCBTUGxhbmUgJnBs
KSBjb25zdCA9IDA7CiAgdmlydHVhbCBTU2VnKiBUcmltU3RhcnQoZG91YmxlIHUpIGNvbnN0ID0g
MDsKICB2aXJ0dWFsIFNTZWcqIFRyaW1FbmQoZG91YmxlIHUpIGNvbnN0ID0gMDsKICB2aXJ0dWFs
IFNTZWcqIEdldFBhcnQoZG91YmxlIHUwLCBkb3VibGUgdTEpIGNvbnN0ID0gMDsKICB2aXJ0dWFs
IGludCBPZmZzZXQoU1NlZ0NvbnQgJmNhLCBkb3VibGUgb2ZmcywgZG91YmxlIHRpbnkgPSBTU19U
SU5ZKSBjb25zdCA9IDA7CgogIHZpcnR1YWwgdm9pZCBTZXRTcChjb25zdCBTUG9pbnQgJnApID0g
MDsKICB2aXJ0dWFsIHZvaWQgU2V0TXAoY29uc3QgU1BvaW50ICZwKSA9IDA7CiAgdmlydHVhbCB2
b2lkIFNldEVwKGNvbnN0IFNQb2ludCAmcCkgPSAwOwogIHZpcnR1YWwgaW50IFNldDNQdHMoY29u
c3QgU1BvaW50ICZhLCBjb25zdCBTUG9pbnQgJmIsIGNvbnN0IFNQb2ludCAmYykgPSAwOwogIHZp
cnR1YWwgaW50IFNldEJ5UHRzKGNvbnN0IFNDb250YWluZXJQPFNQb2ludD4gJnNldHApID0gMDsK
CiAgdmlydHVhbCBib29sIEluc2lkZShjb25zdCBTU2VnICpwcykgY29uc3QgPSAwOwogIHZpcnR1
YWwgaW50IEFidXRCKGNvbnN0IFNTZWcgKnBzLCBTU2VnQ29udCAmY2MpIGNvbnN0ID0gMDsKICB2
aXJ0dWFsIGludCBBb3JCKGNvbnN0IFNTZWcgKnBzLCBTU2VnQ29udCAmY2MpIGNvbnN0ID0gMDsK
CiAgdmlydHVhbCBpbnQgT3JpZW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQogIHZpcnR1YWwgdm9p
ZCBSZXZlcnNlKCkgPSAwOwogIHZpcnR1YWwgdm9pZCBTZXRPcmllbnQoaW50IG8pIHsgfQoKICB2
aXJ0dWFsIGJvb2wgUG9pbnRPblNlZyhjb25zdCBTUG9pbnQgJnAsIGRvdWJsZSAmdSwgU1BvaW50
ICZhKSBjb25zdCA9IDA7CiAgdmlydHVhbCBib29sIEludGVyc2VjdChjb25zdCBTU2VnICpzZWcs
IFNJbnRlcnNlY3QgJmlzZWN0cykgY29uc3QgPSAwOwoKICB2aXJ0dWFsIFNTZWcqIGNsb25lKCkg
Y29uc3QgPSAwOwoKfTsKCgpjbGFzcyBTRXJyb3IgewpwdWJsaWM6CiAgZW51bSBFcnJvckluZGV4
IHtCQURVX1BPSU5ULCBCQURVX1RBTkdFTlQsIEJBRE1BRywgQkFEU0VHX0JFTE9OR1N9OwogIGNv
bnN0IGNoYXIgKkVycm9yTWVzOwoKICBTRXJyb3IoRXJyb3JJbmRleCBpKSB7CiAgICBjb25zdCBz
dGF0aWMgY2hhciAqZW1bXSA9IHsKICAgICAgInNnZW9tIGxpYnJhcnk6IEJhZCB1IHZhbHVlIGZy
b20gUG9pbnQoKSAodSA+IDEuMCBvciB1IDwgMC4wKS5cbiIsCiAgICAgICJzZ2VvbSBsaWJyYXJ5
OiBCYWQgdSB2YWx1ZSBmcm9tIFRhbmdlbnQoKSAodSA+IDEuMCBvciB1IDwgMC4wKS5cbiIsCiAg
ICAgICJzZ2VvbSBsaWJyYXJ5OiBWZWN0b3Igd2l0aCBtYWduaXR1ZGUgMC5cbiIsCiAgICAgICJz
Z2VvbSBsaWJyYXJ5OiBTZWdtZW50IDB4MCBpbiBVQmVsb25ncygpLlxuIgogICAgfTsKICAgIEVy
cm9yTWVzID0gZW1baV07CiAgfQp9OwoKIyAyICJib3guY3BwIiAyCgojIDUgImNpcmNhcmMuaCIg
MQojIDExICJtYXRyaXguaCIgMQpjbGFzcyBTTWF0cml4IHsKcHVibGljOgogIGRvdWJsZSBtWzRd
WzRdOwoKICBTTWF0cml4KCk7CiAgU01hdHJpeChkb3VibGUgYSk7CiAgU01hdHJpeChjb25zdCBT
TWF0cml4ICZiKTsKCiAgU01hdHJpeCBvcGVyYXRvcisoY29uc3QgU01hdHJpeCAmYikgY29uc3Q7
CiAgU01hdHJpeCBvcGVyYXRvci0oY29uc3QgU01hdHJpeCAmYikgY29uc3Q7CiAgU01hdHJpeCBv
cGVyYXRvci0oKSBjb25zdDsKICBTTWF0cml4IG9wZXJhdG9yKihjb25zdCBTTWF0cml4ICZiKSBj
b25zdDsKICBTVmVjdG9yIG9wZXJhdG9yKihjb25zdCBTVmVjdG9yICZ2KSBjb25zdDsKICBTUG9p
bnQgb3BlcmF0b3IqKGNvbnN0IFNQb2ludCAmcCkgY29uc3Q7CiAgU01hdHJpeCYgb3BlcmF0b3I9
KGNvbnN0IFNNYXRyaXggJmIpOwogIGRvdWJsZSYgb3BlcmF0b3IoKShpbnQgaSwgaW50IGopOwoK
ICBTTWF0cml4IFNldFNjYWxlKGRvdWJsZSBhKSBjb25zdDsKICBTTWF0cml4IFNldFNjYWxlKGNv
bnN0IFNWZWN0b3IgJnYpIGNvbnN0OwoKICBTTWF0cml4IFNldFRyYW5zbChjb25zdCBTVmVjdG9y
ICZ2KSBjb25zdDsKCiAgU01hdHJpeCBTZXRSb3RYKGRvdWJsZSBhKSBjb25zdDsKICBTTWF0cml4
IFNldFJvdFkoZG91YmxlIGEpIGNvbnN0OwogIFNNYXRyaXggU2V0Um90Wihkb3VibGUgYSkgY29u
c3Q7CiAgU01hdHJpeCBTZXRSb3QoY29uc3QgU1ZlY3RvciAmdiwgZG91YmxlIGEpIGNvbnN0OwoK
ICB2b2lkIFNldFJvdyhpbnQgciwgY29uc3QgU1ZlY3RvciAmdik7CiAgdm9pZCBTZXRDb2woaW50
IGMsIGNvbnN0IFNWZWN0b3IgJnYpOwoKICBTTWF0cml4IFRyYW5zZlRvSyhjb25zdCBTVmVjdG9y
ICZ2KSBjb25zdDsKICBTTWF0cml4IFRyYW5zZihjb25zdCBTVmVjdG9yICZmcm9tLCBjb25zdCBT
VmVjdG9yICZ0bykgY29uc3Q7CiAgU01hdHJpeCBUcmFuc2ZUb0koY29uc3QgU1ZlY3RvciB2KSBj
b25zdCB7IHJldHVybiBUcmFuc2YodiwgU19JKTsgfQogIFNNYXRyaXggVHJhbnNmVG9KKGNvbnN0
IFNWZWN0b3IgdikgY29uc3QgeyByZXR1cm4gVHJhbnNmKHYsIFNfSik7IH0KCiAgU01hdHJpeCBU
cmFuc3Bvc2UoKSBjb25zdDsKICBpbnQgTFVQKFNNYXRyaXggJkwsIFNNYXRyaXggJlUsIFNNYXRy
aXggJlApIGNvbnN0OwogIGludCBTb2x2ZUxVUChjb25zdCBTVmVjdG9yICZiLCBTVmVjdG9yICZ4
LCBjb25zdCBTTWF0cml4ICZMLCBjb25zdCBTTWF0cml4ICZVLCBjb25zdCBTTWF0cml4ICZQKSBj
b25zdDsKICBpbnQgU29sdmUoY29uc3QgU1ZlY3RvciAmYiwgU1ZlY3RvciAmeCkgY29uc3Q7CiAg
aW50IEludmVyc2UoU01hdHJpeCAmbSkgY29uc3Q7Cn07CgojIDUgImNpcmNhcmMuaCIgMgoKY2xh
c3MgU0NpcmNsZSA6IHB1YmxpYyBTU2VnIHsKcHJpdmF0ZToKICBTTWF0cml4IG1fTTsKICBTUG9p
bnQgbV9jdHI7CiAgZG91YmxlIG1fcmFkOwogIGludCBtX3N3cDsKICBkb3VibGUgY2FsY0FyZWEo
KTsKICBkb3VibGUgY2FsY1BlcmltKCk7CiAgdm9pZCBjb3B5ZXNzKFNDaXJjbGUgJmMpOwogIHZv
aWQgU2V0Q3RyQW5kUGxhbmUoY29uc3QgU1BvaW50ICZjZW50ZXIsIGNvbnN0IFNQbGFuZSAmcGwp
OwoKcHVibGljOgogIGZyaWVuZCBjbGFzcyBTQXJjOwogIGZyaWVuZCBjbGFzcyBTQ3VydmU7Cgog
IFNDaXJjbGUoKTsKICBTQ2lyY2xlKGNvbnN0IFNQb2ludCAmYywgZG91YmxlIHIgPSAxLjAsIGNv
bnN0IFNQbGFuZSAmcGxhbmUgPSBTWFlQTEFORSk7CiAgU0NpcmNsZShjb25zdCBTQ2lyY2xlICZj
aXJjKTsKICBTQ2lyY2xlKGNvbnN0IFNBcmMgJmFyYyk7CiAgU0NpcmNsZShjb25zdCBTUG9pbnQg
JnNwLCBjb25zdCBTUG9pbnQgJm1wLCBjb25zdCBTUG9pbnQgJmVwKSB7IFNldExheWVyKCIiKTtt
X2ZsYWdzPWFwZmxhZ3M9MDtwcmV2PW5leHQ9MDsgU2V0M1B0cyhzcCwgbXAsIGVwKTsgfQoKICBk
b3VibGUgQW5nbGVBdFUoZG91YmxlIHUpIGNvbnN0IHsgZG91YmxlIGE9U21vZDJwaShTXzJQSStT
bW9kMnBpKHUqU18yUEkpKTsgcmV0dXJuIG1fc3dwPT1TX0NDVyA/IGEgOiBTXzJQSS1hO30KICBk
b3VibGUgVUF0QW5nbGUoZG91YmxlIGFuZ2xlKSBjb25zdCB7IGRvdWJsZSB1PVNtb2QycGkoYW5n
bGUpL1NfMlBJOyByZXR1cm4gbV9zd3A9PVNfQ0NXID8gdSA6IDEuMC11OyB9CgogIFNTZWdfdCBU
eXBlKCkgY29uc3QgeyByZXR1cm4gU0NJUkNMRTsgfQoKICBkb3VibGUgUGVyaW0oKSBjb25zdCB7
cmV0dXJuIG1fbGVuZ3RoO30KCiAgU1BvaW50IEdldEN0cigpIGNvbnN0IHtyZXR1cm4gbV9jdHI7
fQogIGRvdWJsZSBHZXRSYWQoKSBjb25zdCB7cmV0dXJuIG1fcmFkO30KICB2b2lkIFNldFBsYW5l
KGNvbnN0IFNQbGFuZSAmcGwsIGNvbnN0IFNQb2ludCAmY2VudGVyKSB7U2V0Q3RyQW5kUGxhbmUo
Y2VudGVyLCBwbCk7IFVwZGF0ZSgpO30KICB2b2lkIFNldFBsYW5lKGNvbnN0IFNQbGFuZSAmcGwp
IHsgU2V0UGxhbmUocGwsIG1fY3RyKTsgVXBkYXRlKCk7IH0KICB2b2lkIFNldFJhZChkb3VibGUg
cmFkKSB7IG1fcmFkID0gcmFkOyBVcGRhdGUoKTsgfQogIHZvaWQgU2V0Q3RyKGNvbnN0IFNQb2lu
dCAmcCkgeyBTZXRDdHJBbmRQbGFuZShwLCBtX3BsYW5lKTsgVXBkYXRlKCk7IH0KCiAgU0NpcmNs
ZSYgb3BlcmF0b3I9KGNvbnN0IFNDaXJjbGUgJmMpOwogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBT
Q2lyY2xlICZjKSBjb25zdCB7cmV0dXJuIG1fY3RyPT1jLm1fY3RyICYmIFN0b2xDb21wKG1fcmFk
LGMubV9yYWQpPT0wICYmIG1fcGxhbmU9PWMubV9wbGFuZTsgfQoKICB2b2lkIFVwZGF0ZSgpIHtj
YWxjQXJlYSgpOyBjYWxjUGVyaW0oKTttX2JveD1TQm94KHRoaXMpO30KCiAgU1BvaW50IFBvaW50
KGRvdWJsZSB1KSBjb25zdCB7cmV0dXJuIFBvaW50QXRBKEFuZ2xlQXRVKHUpKTt9CiAgU1BvaW50
IFBvaW50QXRBKGRvdWJsZSBhbmdsZSkgY29uc3Q7CiAgdm9pZCBUcmFuc2Zvcm0oY29uc3QgU01h
dHJpeCAmbSk7CiAgU1ZlY3RvciBUYW5nZW50KGRvdWJsZSB1KSBjb25zdDsKCiAgU1NlZyogUHJv
aihjb25zdCBTUGxhbmUgJnBsKSBjb25zdCB7cmV0dXJuIG5ldyBTQ2lyY2xlKG1fY3RyLlByb2oo
cGwpLCBtX3JhZCwgcGwpO30KICBTU2VnKiBUcmltU3RhcnQoZG91YmxlIHUpIGNvbnN0OwogIFNT
ZWcqIFRyaW1FbmQoZG91YmxlIHUpIGNvbnN0OwogIFNTZWcqIEdldFBhcnQoZG91YmxlIHUwLCBk
b3VibGUgdTEpIGNvbnN0OwogIGludCBPZmZzZXQoU1NlZ0NvbnQgJmNhLCBkb3VibGUgb2Zmcywg
ZG91YmxlIHRpbnkgPSBTU19USU5ZKSBjb25zdDsKCiAgdm9pZCBTZXRTcChjb25zdCBTUG9pbnQg
JnApOwogIHZvaWQgU2V0TXAoY29uc3QgU1BvaW50ICZwKTsKICB2b2lkIFNldEVwKGNvbnN0IFNQ
b2ludCAmcCkgeyBTZXRTcChwKTsgfQogIGludCBTZXQzUHRzKGNvbnN0IFNQb2ludCAmYSwgY29u
c3QgU1BvaW50ICZiLCBjb25zdCBTUG9pbnQgJmMpOwogIGludCBTZXRCeVB0cyhjb25zdCBTQ29u
dGFpbmVyUDxTUG9pbnQ+ICZzZXRwKTsKCiAgaW50IE9yaWVudCgpIGNvbnN0IHtyZXR1cm4gbV9z
d3A7IH0KICB2b2lkIFJldmVyc2UoKSB7IG1fc3dwID0gbV9zd3A9PVNfQ0NXID8gU19DVyA6IFNf
Q0NXOyB9CiAgdm9pZCBGbGlwKCkgeyBTUGxhbmUgcGwgPSBTUGxhbmUobV9jdHIsIC1HZXROb3Jt
YWwoKSk7IFNldFBsYW5lKHBsLCBtX2N0cik7IH0KICB2b2lkIFNldE9yaWVudChpbnQgbykgeyBp
ZiAoT3JpZW50KCkgIT0gbykgUmV2ZXJzZSgpOyB9CgogIGJvb2wgUG9pbnRPblNlZyhjb25zdCBT
UG9pbnQgJnAsIGRvdWJsZSAmdSwgU1BvaW50ICZhKSBjb25zdDsKCiAgYm9vbCBJbnNpZGUoY29u
c3QgU1NlZyAqcHMpIGNvbnN0OwogIGludCBBYnV0Qihjb25zdCBTU2VnICpwQiwgU1NlZ0NvbnQg
JmNjKSBjb25zdDsKICBpbnQgQW9yQihjb25zdCBTU2VnICpwQiwgU1NlZ0NvbnQgJmNjKSBjb25z
dDsKCiAgYm9vbCBJbnRlcnNlY3QoY29uc3QgU0luZkxpbmUgJmwsIFNJbnRlcnNlY3QgJmlzZWN0
cykgY29uc3Q7CiAgYm9vbCBJbnRlcnNlY3QoY29uc3QgU1JheSAmciwgU0ludGVyc2VjdCAmaXNl
Y3RzKSBjb25zdDsKICBib29sIEludGVyc2VjdChjb25zdCBTTGluZSAmbCwgU0ludGVyc2VjdCAm
aXNlY3RzKSBjb25zdDsKICBib29sIEludGVyc2VjdChjb25zdCBTQ2lyY2xlICZjLCBTSW50ZXJz
ZWN0ICZpc2VjdHMpIGNvbnN0OwogIGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNBcmMgJmFyYywgU0lu
dGVyc2VjdCAmaXNlY3RzKSBjb25zdDsKICBib29sIEludGVyc2VjdChjb25zdCBTU2VnICpwc2Vn
LCBTSW50ZXJzZWN0ICZpc2VjdHMpIGNvbnN0OwoKICBTU2VnKiBjbG9uZSgpIGNvbnN0IHsgcmV0
dXJuIG5ldyBTQ2lyY2xlKCp0aGlzKTsgfQoKfTsKCgpjbGFzcyBTQXJjIDogcHVibGljIFNTZWcg
ewpwcml2YXRlOgogIFNNYXRyaXggbV9NOwogIFNQb2ludCBtX2N0cjsKICBkb3VibGUgbV9yYWQ7
CiAgZG91YmxlIG1fc2E7CiAgZG91YmxlIG1fc3dwOwogIGRvdWJsZSBjYWxjQXJlYSgpOwogIGRv
dWJsZSBjYWxjUGVyaW0oKTsKICB2b2lkIGNvcHllc3MoU0FyYyAmYSk7CiAgdm9pZCBTZXRDdHJB
bmRQbGFuZShjb25zdCBTUG9pbnQgJmNlbnRlciwgY29uc3QgU1BsYW5lICZwbCk7CgpwdWJsaWM6
CiAgZnJpZW5kIGNsYXNzIFNDaXJjbGU7CiAgZnJpZW5kIGNsYXNzIFNDdXJ2ZTsKCiAgU0FyYygp
OwogIFNBcmMoY29uc3QgU1BvaW50ICZjLCBkb3VibGUgciwgZG91YmxlIHNhLCBkb3VibGUgc3dw
LCBjb25zdCBTUGxhbmUgJnBsYW5lID0gU1hZUExBTkUpOwogIFNBcmMoY29uc3QgU0FyYyAmYXJj
KTsKICBTQXJjKGNvbnN0IFNQb2ludCAmc3AsIGNvbnN0IFNQb2ludCAmbXAsIGNvbnN0IFNQb2lu
dCAmZXApIHtTZXRMYXllcigiIik7bV9mbGFncz1hcGZsYWdzPTA7cHJldj1uZXh0PTA7U2V0M1B0
cyhzcCwgbXAsIGVwKTt9CiAgU0FyYyhjb25zdCBTUG9pbnQgJmMsIGRvdWJsZSByLCBjb25zdCBT
VmVjdG9yICZzdiwgZG91YmxlIHN3cCwgY29uc3QgU1BsYW5lICZwbGFuZSA9IFNYWVBMQU5FKTsK
ICBTQXJjKGNvbnN0IFNQb2ludCAmYywgZG91YmxlIHIsIGNvbnN0IFNWZWN0b3IgJnN2LCBjb25z
dCBTVmVjdG9yICZldiwgY29uc3QgU1BsYW5lICZwbGFuZSA9IFNYWVBMQU5FKTsKCiAgZG91Ymxl
IEFuZ2xlQXRVKGRvdWJsZSB1KSBjb25zdCB7IHJldHVybiBTbW9kMnBpKFNfMlBJICsgbV9zYSAr
IFNtb2QycGkodSptX3N3cCkpOyB9CiAgZG91YmxlIFVBdEFuZ2xlKGRvdWJsZSBhbmdsZSkgY29u
c3Q7CgogIGJvb2wgQU9uU3dlZXAoZG91YmxlIGEpIGNvbnN0OwogIGJvb2wgQUluU3dlZXAoZG91
YmxlIGEpIGNvbnN0OwoKICBTU2VnX3QgVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFNBUkM7IH0KCiAg
ZG91YmxlIFBlcmltKCkgY29uc3Qge3JldHVybiBtX2xlbmd0aDt9CgogIFNQb2ludCBHZXRDdHIo
KSBjb25zdCB7cmV0dXJuIG1fY3RyO30KICBkb3VibGUgR2V0UmFkKCkgY29uc3Qge3JldHVybiBt
X3JhZDt9CiAgZG91YmxlIEdldFNhKCkgY29uc3Qge3JldHVybiBtX3NhO30KICBkb3VibGUgR2V0
U3dwKCkgY29uc3Qge3JldHVybiBtX3N3cDt9CiAgdm9pZCBTZXRQbGFuZShjb25zdCBTUGxhbmUg
JnBsLCBjb25zdCBTUG9pbnQgJmNlbnRlcikge1NldEN0ckFuZFBsYW5lKGNlbnRlciwgcGwpOyBV
cGRhdGUoKTt9CiAgdm9pZCBTZXRQbGFuZShjb25zdCBTUGxhbmUgJnBsKSB7IFNldFBsYW5lKHBs
LCBtX2N0cik7IFVwZGF0ZSgpOyB9CiAgdm9pZCBTZXRSYWQoZG91YmxlIHJhZCkgeyBtX3JhZCA9
IHJhZDsgVXBkYXRlKCk7IH0KICB2b2lkIFNldEN0cihjb25zdCBTUG9pbnQgJnApIHsgU2V0Q3Ry
QW5kUGxhbmUocCwgbV9wbGFuZSk7IFVwZGF0ZSgpOyB9CgogIFNBcmMmIG9wZXJhdG9yPShjb25z
dCBTQXJjICZhKTsKICBib29sIG9wZXJhdG9yPT0oY29uc3QgU0FyYyAmYSkgY29uc3Q7CiAgU0Fy
YyBvcGVyYXRvci0oKSBjb25zdCB7U0FyYyBhKCp0aGlzKTthLlJldmVyc2UoKTtyZXR1cm4gYTt9
CgogIHZvaWQgVXBkYXRlKCkge2NhbGNBcmVhKCk7Y2FsY1BlcmltKCk7bV9ib3g9U0JveCh0aGlz
KTt9CgogIFNQb2ludCBQb2ludChkb3VibGUgdSkgY29uc3Qge3JldHVybiBQb2ludEF0QShBbmds
ZUF0VSh1KSk7fQogIFNQb2ludCBQb2ludEF0QShkb3VibGUgYW5nbGUpIGNvbnN0OwogIHZvaWQg
VHJhbnNmb3JtKGNvbnN0IFNNYXRyaXggJm0pOwogIFNWZWN0b3IgVGFuZ2VudChkb3VibGUgdSkg
Y29uc3Q7CiAgU1NlZyogUHJvaihjb25zdCBTUGxhbmUgJnBsKSBjb25zdDsKICBkb3VibGUgQXJj
SGVpZ2h0KCkgY29uc3Qge3JldHVybiBtX3JhZCooMS4wLWNvcyhmYWJzKG1fc3dwKS8yLjApKTt9
CiAgZG91YmxlIEFyY0Rpdihkb3VibGUgaGVpZ2h0dG9sKSBjb25zdCB7cmV0dXJuIGNlaWwoZmFi
cyhtX3N3cCkvKDIuMCphY29zKDEuMC1oZWlnaHR0b2wvbV9yYWQpKSk7IH0KCiAgU1NlZyogVHJp
bVN0YXJ0KGRvdWJsZSB1KSBjb25zdDsKICBTU2VnKiBUcmltRW5kKGRvdWJsZSB1KSBjb25zdDsK
ICBTU2VnKiBHZXRQYXJ0KGRvdWJsZSB1MCwgZG91YmxlIHUxKSBjb25zdDsKICBpbnQgT2Zmc2V0
KFNTZWdDb250ICZjYSwgZG91YmxlIG9mZnMsIGRvdWJsZSB0aW55ID0gU1NfVElOWSkgY29uc3Q7
CgogIHZvaWQgU2V0U3AoY29uc3QgU1BvaW50ICZwKTsKICB2b2lkIFNldE1wKGNvbnN0IFNQb2lu
dCAmcCk7CiAgdm9pZCBTZXRFcChjb25zdCBTUG9pbnQgJnApOwogIGludCBTZXQzUHRzKGNvbnN0
IFNQb2ludCAmYSwgY29uc3QgU1BvaW50ICZiLCBjb25zdCBTUG9pbnQgJmMpOwogIGludCBTZXRC
eVB0cyhjb25zdCBTQ29udGFpbmVyUDxTUG9pbnQ+ICZzZXRwKTsKICBpbnQgU2V0QnlUYW5nKFNM
aW5lICZsc3AsIFNMaW5lICZsZXAsIGRvdWJsZSByYWQpOwoKICBpbnQgT3JpZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9zd3A+PTAuMD9TX0NDVzpTX0NXOyB9CiAgdm9pZCBGbGlwKCk7CiAgdm9pZCBS
ZXZlcnNlKCkge21fc2E9U21vZDJwaShTXzJQSSttX3NhK21fc3dwKTsgbV9zd3AgPSAtbV9zd3A7
fQogIHZvaWQgU2V0T3JpZW50KGludCBvKSB7IGlmIChPcmllbnQoKSAhPSBvKSBSZXZlcnNlKCk7
IH0KCiAgYm9vbCBQb2ludE9uU2VnKGNvbnN0IFNQb2ludCAmcCwgZG91YmxlICZ1LCBTUG9pbnQg
JmEpIGNvbnN0OwoKICBib29sIEluc2lkZShjb25zdCBTU2VnICpwcykgY29uc3Q7CiAgaW50IEFi
dXRCKGNvbnN0IFNTZWcgKnBCLCBTU2VnQ29udCAmY2MpIGNvbnN0OwogIGludCBBb3JCKGNvbnN0
IFNTZWcgKnBCLCBTU2VnQ29udCAmY2MpIGNvbnN0OwoKICBib29sIEludGVyc2VjdChjb25zdCBT
SW5mTGluZSAmbCwgU0ludGVyc2VjdCAmaXNlY3RzKSBjb25zdDsKICBib29sIEludGVyc2VjdChj
b25zdCBTUmF5ICZyLCBTSW50ZXJzZWN0ICZpc2VjdHMpIGNvbnN0OwogIGJvb2wgSW50ZXJzZWN0
KGNvbnN0IFNMaW5lICZsLCBTSW50ZXJzZWN0ICZpc2VjdHMpIGNvbnN0OwogIGJvb2wgSW50ZXJz
ZWN0KGNvbnN0IFNDaXJjbGUgJmMsIFNJbnRlcnNlY3QgJmlzZWN0cykgY29uc3Q7CiAgYm9vbCBJ
bnRlcnNlY3QoY29uc3QgU0FyYyAmYXJjLCBTSW50ZXJzZWN0ICZpc2VjdHMpIGNvbnN0OwogIGJv
b2wgSW50ZXJzZWN0KGNvbnN0IFNTZWcgKnNlZywgU0ludGVyc2VjdCAmaXNlY3RzKSBjb25zdDsK
CiAgU1NlZyogY2xvbmUoKSBjb25zdCB7IHJldHVybiBuZXcgU0FyYygqdGhpcyk7IH0KCn07Cgoj
IDMgImJveC5jcHAiIDIKCiMgNyAiY3VydmUuaCIgMQojIDcgImNvbnRhaW5lcjIuaCIgMQpleHRl
cm4gY29uc3QgZG91YmxlIG5vX2NpcmNyYWRbXTsKZXh0ZXJuIGNvbnN0IGludCBjbnVtOwoKaW50
IGNtcGJ5eChjb25zdCB2b2lkICplbDEsIGNvbnN0IHZvaWQgKmVsMik7CmludCBDbXBDUGVyaW0o
Y29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7CmludCBDbXBDQXJlYShjb25zdCB2b2lkICph
LCBjb25zdCB2b2lkICpiKTsKCmNsYXNzIFNTZWdDb250IHsKcHJpdmF0ZToKICBmcmllbmQgY2xh
c3MgU0N1cnZlOwogIFNTZWcgKiphcDsKICBpbnQgc3o7CiAgaW50IG1lbXNpemU7CiAgaW50IGNo
dW5rOwogIGNoYXIgbGF5ZXJbMzNdOwogIGludCBjb2xvcjsKCiAgaW50IEdyb3coKQogIHsKICAg
IFNTZWcgKip0ID0gKFNTZWcgKiopIHJlYWxsb2MoYXAsIChtZW1zaXplICsgY2h1bmspICogc2l6
ZW9mKFNTZWcgKikpOwoKICAgIGlmICghdCkKICAgICAgcmV0dXJuIC0xOwoKICAgIG1lbXNpemUg
Kz0gY2h1bms7CgogICAgaWYgKHQgIT0gYXApCiAgICAgIGFwID0gdDsKCiAgICByZXR1cm4gMDsK
ICB9CgoKCiAgaW50IFNocmluaygpCiAgewogICAgaWYgKChtZW1zaXplLWNodW5rKSA8IDEpCiAg
ICAgIHJldHVybiAtMTsKCiAgICBTU2VnICoqdCA9IChTU2VnICoqKSByZWFsbG9jKGFwLCAobWVt
c2l6ZSAtIGNodW5rKSAqIHNpemVvZihTU2VnICopKTsKCiAgICBpZiAoIXQpCiAgICAgIHJldHVy
biAtMTsKCiAgICBtZW1zaXplIC09IGNodW5rOwoKICAgIGlmICh0ICE9IGFwKQogICAgICBhcCA9
IHQ7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIGludCBtaW5teigpCiAgewogICAgcmVnaXN0ZXIg
aW50IHMgPSAoKHN6LTEpL2NodW5rICsgMSkqY2h1bms7CiAgICByZXR1cm4gKHMgPCBjaHVuaykg
PyBjaHVuayA6IHM7CiAgfQoKCgpwdWJsaWM6CiAgY29uc3QgY2hhciogTGF5ZXIoKSBjb25zdCB7
IHJldHVybiAoY29uc3QgY2hhciAqKSBsYXllcjsgfQogIHZvaWQgU2V0TGF5ZXIoY29uc3QgY2hh
ciAqcykKICB7CiAgICBpZiAoIXMpCiAgICAgIHJldHVybjsKICAgIGVsc2UgewogICAgICByZWdp
c3RlciBpbnQgaTsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCBzejsgaSsrKQogICAgICAgIGFwW2ld
LT5TZXRMYXllcihzKTsKCiAgICAgIHN0cm5jcHkobGF5ZXIsIHMsIDMzLTEpOwogICAgICBsYXll
clszMy0xXT0nXDAnOwogICAgfQogIH0KCgoKICBpbnQgQ29sb3IoKSBjb25zdCB7IHJldHVybiBj
b2xvcjsgfQoKICB2b2lkIFNldENvbG9yKGludCBjKSB7IGNvbG9yID0gYzsgfQoKCgogIFNTZWdD
b250KGludCBjaHVuID0gMzApCiAgewogICAgY2h1bmsgPSBjaHVuOwogICAgc3ogPSAwOwogICAg
bWVtc2l6ZSA9IG1pbm16KCk7CiAgICBhcCA9IChTU2VnICoqKSBtYWxsb2MobWVtc2l6ZSAqIHNp
emVvZihTU2VnKikpOwogICAgbGF5ZXJbMF0gPSAnXDAnOwogICAgY29sb3IgPSAyNTY7CiAgfQoK
CgogIFNTZWdDb250KGNvbnN0IFNTZWdDb250ICZzYykKICB7CiAgICByZWdpc3RlciBpbnQgaTsK
CiAgICBjaHVuayA9IHNjLmNodW5rOwogICAgc3ogPSBzYy5zejsKICAgIG1lbXNpemUgPSBtaW5t
eigpOwogICAgYXAgPSAoU1NlZyAqKikgbWFsbG9jKHNpemVvZihTU2VnKikgKiBtZW1zaXplKTsK
CiAgICBmb3IgKGkgPSAwOyBpIDwgc2Muc3o7IGkrKykKICAgICAgYXBbaV0gPSBzYy5hcFtpXS0+
Y2xvbmUoKTsKICAgIHN0cm5jcHkobGF5ZXIsIHNjLmxheWVyLCAzMy0xKTsKICAgIGxheWVyWzMz
LTFdID0gJ1wwJzsKICB9CgoKCiAgdmlydHVhbCB+U1NlZ0NvbnQoKQogIHsKICAgIHdoaWxlIChz
ei0tID4gMCkgewogICAgICBhcFtzel0tPn5TU2VnKCk7CiAgICAgIGRlbGV0ZSBhcFtzel07CiAg
ICAgIGFwW3N6XT0wOwogICAgfQogICAgZnJlZShhcCk7CiAgICBhcCA9IDA7CiAgICBzeiA9IDA7
CiAgICBtZW1zaXplID0gMDsKICAgIGxheWVyWzBdID0gJ1wwJzsKICB9CgoKCiAgdmlydHVhbCB2
b2lkIFJlc2V0KCkKICB7CiAgICB3aGlsZSAoc3otLSA+IDApIHsKICAgICAgYXBbc3pdLT5+U1Nl
ZygpOwogICAgICBkZWxldGUgYXBbc3pdOwogICAgICBhcFtzel09MDsKICAgIH0KICAgIGZyZWUo
YXApOwogICAgc3ogPSAwOwogICAgbWVtc2l6ZSA9IGNodW5rID4gMCA/IGNodW5rIDogMzA7CiAg
ICBhcCA9IChTU2VnICoqKSBtYWxsb2MobWVtc2l6ZSAqIHNpemVvZihTU2VnKikpOwogICAgbGF5
ZXJbMF0gPSAnXDAnOwogIH0KCgoKICB2aXJ0dWFsIFNTZWdDb250JiBvcGVyYXRvcj0oY29uc3Qg
U1NlZ0NvbnQgJnNjKQogIHsKICAgIHRoaXMtPn5TU2VnQ29udCgpOwoKICAgIHJlZ2lzdGVyIGlu
dCBpOwoKICAgIGNodW5rID0gc2MuY2h1bms7CiAgICBzeiA9IHNjLnN6OwogICAgbWVtc2l6ZSA9
IG1pbm16KCk7CiAgICBhcCA9IChTU2VnICoqKSBtYWxsb2Moc2l6ZW9mKFNTZWcqKSAqIG1lbXNp
emUpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBzYy5zejsgaSsrKQogICAgICBhcFtpXSA9IHNjLmFw
W2ldLT5jbG9uZSgpOwogICAgc3RybmNweShsYXllciwgc2MubGF5ZXIsIDMzKTsKICAgIGxheWVy
WzMzLTFdID0gJ1wwJzsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAgdmlydHVhbCBTU2VnQ29u
dCBvcGVyYXRvcisoY29uc3QgU1NlZ0NvbnQgJnNjKSBjb25zdAogIHsKICAgIHJlZ2lzdGVyIGlu
dCBpOwogICAgU1NlZ0NvbnQgY3NjID0gKnRoaXM7CgogICAgZm9yIChpID0gMDsgaSA8IHNjLnN6
OyBpKyspCiAgICAgIGNzYy5BZGQoc2MuYXBbaV0tPmNsb25lKCkpOwoKICAgIHJldHVybiBjc2M7
CiAgfQoKCgogIHZpcnR1YWwgU1NlZ0NvbnQmIG9wZXJhdG9yKz0oY29uc3QgU1NlZ0NvbnQgJnNj
KQogIHsKICAgIHJlZ2lzdGVyIGludCBpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBzYy5zejsgaSsr
KQogICAgICBBZGQoc2MuYXBbaV0tPmNsb25lKCkpOwoKICAgIHJldHVybiAqdGhpczsKICB9CgoK
CiAgdmlydHVhbCBTU2VnKiBvcGVyYXRvcltdKGludCBpKSBjb25zdAogIHsKICAgIGlmICgoaSA8
IDApIHx8IChpID4gKHN6LTEpKSkKICAgICAgcmV0dXJuIDA7CgogICAgcmV0dXJuIGFwW2ldOwog
IH0KCgoKICB2aXJ0dWFsIGludCBTaXplKCkgY29uc3QKICB7CiAgICByZXR1cm4gc3o7CiAgfQoK
CgogIHZpcnR1YWwgaW50IEFkZChTU2VnKiBhKQogIHsKICAgIGlmICghYSkKICAgICAgcmV0dXJu
IC0xOwoKICAgIGlmIChzeiA+PSBtZW1zaXplKQogICAgICBpZiAoR3JvdygpICE9IDApCiAgICAg
ICAgcmV0dXJuIC0xOwoKICAgIGFwW3N6XSA9IGE7CiAgICBzeisrOwoKICAgIHJldHVybiAwOwog
IH0KCgoKICB2aXJ0dWFsIGludCBJbnNBZnRlcihpbnQgc24sIFNTZWcqIGEpCiAgewogICAgaWYg
KHN6IDwgMSkKICAgICAgcmV0dXJuIEFkZChhKTsKCiAgICBpZiAoKHNuIDwgMCkgfHwgKHNuID4g
KHN6LTEpKSB8fCAhYSkKICAgICAgcmV0dXJuIC0xOwoKICAgIGlmIChzeiA+PSBtZW1zaXplKSB7
CiAgICAgIGlmIChHcm93KCkgIT0gMCkKICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgcmVn
aXN0ZXIgaW50IGk7CgogICAgZm9yIChpID0gc3o7IGkgPiAoc24rMSk7IGktLSkKICAgICAgYXBb
aV0gPSBhcFtpLTFdOwoKICAgIGFwW3NuKzFdID0gYTsKICAgIHN6Kys7CgogICAgcmV0dXJuIDA7
CiAgfQoKCgogIHZpcnR1YWwgaW50IEluc0JlZm9yZShpbnQgc2IsIFNTZWcqIGEpCiAgewogICAg
aWYgKHN6IDwgMSkKICAgICAgcmV0dXJuIEFkZChhKTsKCiAgICBpZiAoKHNiIDwgMCkgfHwgKHNi
ID4gKHN6LTEpKSB8fCAhYSkKICAgICAgcmV0dXJuIC0xOwoKICAgIGlmIChzeiA+PSBtZW1zaXpl
KSB7CiAgICAgIGlmIChHcm93KCkgIT0gMCkKICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAg
cmVnaXN0ZXIgaW50IGk7CgogICAgZm9yIChpID0gc3o7IGkgPiBzYjsgaS0tKQogICAgICBhcFtp
XSA9IGFwW2ktMV07CgogICAgYXBbc2JdID0gYTsKICAgIHN6Kys7CgogICAgcmV0dXJuIDA7CiAg
fQoKCgogIHZpcnR1YWwgaW50IERlbGV0ZShpbnQgaykKICB7CiAgICBpZiAoc3ogPCAxKQogICAg
ICByZXR1cm4gLTE7CgogICAgaWYgKChrIDwgMCkgfHwgKGsgPiAoc3otMSkpKQogICAgICByZXR1
cm4gLTE7CgogICAgcmVnaXN0ZXIgaW50IGk7CgogICAgYXBba10tPn5TU2VnKCk7CiAgICBkZWxl
dGUgYXBba107CgogICAgZm9yIChpID0gazsgaSA8IChzei0xKTsgaSsrKQogICAgICBhcFtpXSA9
IGFwW2krMV07CgogICAgc3otLTsKCiAgICBpZiAobWlubXooKSA8IG1lbXNpemUpCiAgICAgIFNo
cmluaygpOwoKICAgIHJldHVybiAwOwogIH0KCgoKICB2aXJ0dWFsIGludCBSZXBsYWNlKGludCBr
LCBTU2VnICpwcykKICB7CiAgICBpZiAoc3ogPCAxKQogICAgICByZXR1cm4gLTE7CgogICAgaWYg
KChrIDwgMCkgfHwgKGsgPiAoc3otMSkpIHx8ICFwcykKICAgICAgcmV0dXJuIC0xOwoKICAgIGFw
W2tdLT5+U1NlZygpOwogICAgZGVsZXRlIGFwW2tdOwoKICAgIGFwW2tdID0gcHM7CgogICAgcmV0
dXJuIDA7CiAgfQoKCgogIHZpcnR1YWwgaW50IFN3YXAoaW50IGEsIGludCBiKQogIHsKICAgIFNT
ZWcqIHBhID0gYXBbYV07CgogICAgaWYgKCFwYSB8fCAhYXBbYl0pCiAgICAgIHJldHVybiAtMTsK
CiAgICBhcFthXSA9IGFwW2JdOwogICAgYXBbYl0gPSBwYTsKCiAgICByZXR1cm4gMDsKICB9CgoK
CiAgdmlydHVhbCB2b2lkIFNvcnQocENvbXBmX3QgY29tcGYpCiAgewogICAgcXNvcnQoYXAsIHN6
LCBzaXplb2YoU1NlZyopLCBjb21wZik7CiAgfQoKCgogIHZpcnR1YWwgdm9pZCBTb3J0QnlYKCkK
ICB7CiAgICBTb3J0KGNtcGJ5eCk7CiAgfQoKCgogIGludCBDbGVhblNhbWUoKQogIHsKICAgIHJl
Z2lzdGVyIGludCBpLCBrLCBkZWxzOwoKICAgIGlmIChzeiA8IDIpCiAgICAgIHJldHVybiAwOwoK
ICAgIGRlbHMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IChzei0xKTsgaSsrKSB7CgogICAgICBk
b3VibGUgaWFyZWEgPSBhcFtpXS0+QXJlYSgpOwogICAgICBkb3VibGUgaWxlbiA9IGFwW2ldLT5M
ZW5ndGgoKTsKCiAgICAgIGZvciAoayA9IGkrMTsgayA8IHN6OyBrKyspIHsKCiAgICAgICAgZG91
YmxlIGthcmVhID0gYXBba10tPkFyZWEoKTsKICAgICAgICBkb3VibGUga2xlbiA9IGFwW2tdLT5M
ZW5ndGgoKTsKCiAgICAgICAgaWYgKCBTdG9sQ29tcChpYXJlYSwga2FyZWEpID09IDAKICAgICAg
ICAgICYmIFN0b2xDb21wKGlsZW4sIGtsZW4pID09IDAKICAgICAgICAgICYmIChhcFtrXS0+R2V0
Qm94KCkgPT0gYXBbaV0tPkdldEJveCgpKSkgewoKCgogICAgICAgICAgRGVsZXRlKGstLSksIGRl
bHMrKzsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZGVsczsKICB9CgoKCiAg
aW50IFJlbW92ZVN0YXJ0Q2lyKCkKICB7CiAgICByZWdpc3RlciBpbnQgaSwgaiwgZGVsczsKCiAg
ICBkZWxzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCBzejsgaSsrKSB7CiAgICAgIGlmIChhcFtp
XS0+VHlwZSgpID09IFNDSVJDTEUpIHsKCiAgICAgICAgU0NpcmNsZSAqY2lyYyA9IChTQ2lyY2xl
ICopIGFwW2ldOwoKICAgICAgICBmb3IgKGogPSAwOyBqIDwgY251bTsgaisrKQogICAgICAgICAg
aWYgKFN0b2xDb21wKGNpcmMtPkdldFJhZCgpLCBub19jaXJjcmFkW2pdKSA9PSAwKSB7CiAgICAg
ICAgICAgIERlbGV0ZShpLS0pLCBkZWxzKys7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
fQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGRlbHM7CiAgfQoKCgogIGludCBTb3J0QnlQZXJp
bSgpCiAgewogICAgaWYgKHN6IDwgMSkKICAgICAgcmV0dXJuIC0xOwoKICAgIHFzb3J0KGFwLCBz
eiwgc2l6ZW9mKFNTZWcqKSwgQ21wQ1BlcmltKTsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgaW50
IFNvcnRCeUFyZWEoKQogIHsKICAgIGlmIChzeiA8IDEpCiAgICAgIHJldHVybiAtMTsKCiAgICBx
c29ydChhcCwgc3osIHNpemVvZihTU2VnKiksIENtcENBcmVhKTsKCiAgICByZXR1cm4gMDsKICB9
CgoKCiAgdm9pZCBUcmFuc2Zvcm0oY29uc3QgU01hdHJpeCYgbSkKICB7CiAgICByZWdpc3RlciBp
bnQgaTsKCiAgICBpZiAoc3ogPCAxKQogICAgICByZXR1cm47CgogICAgZm9yIChpID0gMDsgaSA8
IHN6OyBpKyspCiAgICAgIGFwW2ldLT5UcmFuc2Zvcm0obSk7CgogIH0KCgoKICBTQm94IEdldEJv
eCgpCiAgewogICAgU0JveCBiOwogICAgcmVnaXN0ZXIgaW50IGk7CiAgICBmb3IgKGkgPSAwOyBp
IDwgc3o7IGkrKykKICAgICAgYi5VbmlvbihhcFtpXS0+R2V0Qm94KCkpOwogICAgcmV0dXJuIGI7
CiAgfQoKCgogIHZvaWQgU2V0YXBmbGFnc0JpdChpbnQgYml0bWFzaywgaW50IHZhbCkKICB7CiAg
ICByZWdpc3RlciBpbnQgaTsKCiAgICBmb3IgKGk9MDsgaSA8IHN6OyBpKyspCiAgICAgIGlmICh2
YWwpCiAgICAgICAgYXBbaV0tPmFwZmxhZ3MgfD0gYml0bWFzazsKICAgICAgZWxzZQogICAgICAg
IGFwW2ldLT5hcGZsYWdzICY9IH5iaXRtYXNrOwogIH0KCgoKICBpbnQgQWRkQnlHZW9tKFNTZWcg
KnBzKQogIHsKICAgIGlmICghcHMpCiAgICAgIHJldHVybiAtMTsKCiAgICBpZiAoc3ogPCAxKQog
ICAgICByZXR1cm4gQWRkKHBzKTsKCiAgICBTUG9pbnQgc3NwID0gcHMtPlN0YXJ0UG9pbnQoKTsK
ICAgIFNQb2ludCBzZXAgPSBwcy0+RW5kUG9pbnQoKTsKICAgIHJlZ2lzdGVyIGludCBpOwoKCiAg
ICBpID0gc3otMTsKICAgIHsKICAgICAgU1BvaW50IHNwID0gYXBbaV0tPlN0YXJ0UG9pbnQoKTsK
ICAgICAgU1BvaW50IGVwID0gYXBbaV0tPkVuZFBvaW50KCk7CgogICAgICBpZiAoc2VwID09IHNw
KSB7CiAgICAgICAgcmV0dXJuIEluc0JlZm9yZShpLCBwcyk7CiAgICAgIH0gZWxzZSBpZiAoc3Nw
ID09IGVwKSB7CiAgICAgICAgcmV0dXJuIEluc0FmdGVyKGksIHBzKTsKICAgICAgfSBlbHNlIGlm
IChzZXAgPT0gZXApIHsKICAgICAgICBwcy0+UmV2ZXJzZSgpOwogICAgICAgIHJldHVybiBJbnNB
ZnRlcihpLCBwcyk7CiAgICAgIH0gZWxzZSBpZiAoc3NwID09IHNwKSB7CiAgICAgICAgcHMtPlJl
dmVyc2UoKTsKICAgICAgICByZXR1cm4gSW5zQmVmb3JlKGksIHBzKTsKICAgICAgfQogICAgfQog
ICAgaWYgKHN6IDwgMikKICAgICAgcmV0dXJuIC0xOwoKICAgIGkgPSAwOwogICAgewogICAgICBT
UG9pbnQgc3AgPSBhcFtpXS0+U3RhcnRQb2ludCgpOwogICAgICBTUG9pbnQgZXAgPSBhcFtpXS0+
RW5kUG9pbnQoKTsKCiAgICAgIGlmIChzZXAgPT0gc3ApIHsKICAgICAgICByZXR1cm4gSW5zQmVm
b3JlKGksIHBzKTsKICAgICAgfSBlbHNlIGlmIChzc3AgPT0gZXApIHsKICAgICAgICByZXR1cm4g
SW5zQWZ0ZXIoaSwgcHMpOwogICAgICB9IGVsc2UgaWYgKHNlcCA9PSBlcCkgewogICAgICAgIHBz
LT5SZXZlcnNlKCk7CiAgICAgICAgcmV0dXJuIEluc0FmdGVyKGksIHBzKTsKICAgICAgfSBlbHNl
IGlmIChzc3AgPT0gc3ApIHsKICAgICAgICBwcy0+UmV2ZXJzZSgpOwogICAgICAgIHJldHVybiBJ
bnNCZWZvcmUoaSwgcHMpOwogICAgICB9CiAgICB9CiAgICBpZiAoc3ogPCAzKQogICAgICByZXR1
cm4gLTE7CgogICAgZm9yIChpID0gMTsgaSA8IChzei0xKTsgaSsrKSB7CiAgICAgIFNQb2ludCBz
cCA9IGFwW2ldLT5TdGFydFBvaW50KCk7CiAgICAgIFNQb2ludCBlcCA9IGFwW2ldLT5FbmRQb2lu
dCgpOwoKICAgICAgaWYgKHNlcCA9PSBzcCkgewogICAgICAgIHJldHVybiBJbnNCZWZvcmUoaSwg
cHMpOwogICAgICB9IGVsc2UgaWYgKHNzcCA9PSBlcCkgewogICAgICAgIHJldHVybiBJbnNBZnRl
cihpLCBwcyk7CiAgICAgIH0gZWxzZSBpZiAoc2VwID09IGVwKSB7CiAgICAgICAgcHMtPlJldmVy
c2UoKTsKICAgICAgICByZXR1cm4gSW5zQWZ0ZXIoaSwgcHMpOwogICAgICB9IGVsc2UgaWYgKHNz
cCA9PSBzcCkgewogICAgICAgIHBzLT5SZXZlcnNlKCk7CiAgICAgICAgcmV0dXJuIEluc0JlZm9y
ZShpLCBwcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAtMTsKICB9CgoKCiAgdm9pZCByb3Io
aW50IGkpCiAgewogICAgaWYgKHN6IDwgMiB8fCBpIDwgMSkKICAgICAgcmV0dXJuOwogICAgaSAl
PSBzejsKICAgIGlmIChpIDwgMSkKICAgICAgcmV0dXJuOwoKICAgIHJlZ2lzdGVyIGludCBrOwog
ICAgU1NlZ0NvbnQgc2Moc3opOwoKICAgIGZvciAoayA9IDA7IGsgPCBzejsgaysrKQogICAgICBz
Yy5hcFsoaytpKSVzel0gPSBhcFtrXTsKICAgIGZvciAoayA9IDA7IGsgPCBzejsgaysrKQogICAg
ICBhcFtrXSA9IHNjLmFwW2tdOwogICAgZGVsZXRlIHNjLmFwOwogICAgc2MuYXAgPSAwOwogICAg
c2Muc3ogPSAwOwogICAgc2MubWVtc2l6ZSA9IDA7CiAgfQoKCgogIHZvaWQgcm9sKGludCBpKQog
IHsKICAgIHJvcihzei1pKTsKICB9CgoKCiAgdm9pZCBTZXRMYXJnZXN0QXJlYUZpcnN0KCkgewog
ICAgcmVnaXN0ZXIgaW50IGksIGsgPSAwOwogICAgcmVnaXN0ZXIgZG91YmxlIG1hID0gMC4wOwog
ICAgZm9yIChpPTA7IGkgPCBTaXplKCk7IGkrKykKICAgICAgaWYgKGFwW2ldLT5BcmVhKCkgPiBt
YSkgewogICAgICAgIG1hID0gYXBbaV0tPkFyZWEoKTsKICAgICAgICBrID0gaTsKICAgICAgfQog
ICAgaWYgKGsgPiAwKQogICAgICBTd2FwKDAsIGspOwogIH0KCgoKfTsKCiMgNyAiY3VydmUuaCIg
MgoKIyA1ICJpc2VjdC5oIiAxCiMgMTIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGlu
dXgvMi45Ni9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyA4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
cmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzCiMgMTMxICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMg
MTQ1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMv
cG9zaXgxX2xpbS5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDEg
MwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3Iv
aW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJl
ZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDggIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvbGltaXRzLmgi
IDIgMwojIDUgImlzZWN0LmgiIDIKCgoKCmNsYXNzIFNJc2VjdCB7CnB1YmxpYzoKICBTSXNlY3Qo
KSB7c3RoaXM9c290aGVyPTA7dXRoaXM9dW90aGVyPS0xLjA7fQogIFNJc2VjdChjb25zdCBTSXNl
Y3QgJmlzKSB7c3RoaXM9aXMuc3RoaXM7c290aGVyPWlzLnNvdGhlcjt1dGhpcz1pcy51dGhpczt1
b3RoZXI9aXMudW90aGVyO30KICBTSXNlY3QmIG9wZXJhdG9yPShjb25zdCBTSXNlY3QgJmlzKSB7
c3RoaXM9aXMuc3RoaXM7c290aGVyPWlzLnNvdGhlcjt1dGhpcz1pcy51dGhpczt1b3RoZXI9aXMu
dW90aGVyO3JldHVybiAqdGhpczt9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNJc2VjdCAmaXMp
IHtyZXR1cm4gc3RoaXM9PWlzLnN0aGlzICYmIHNvdGhlcj09aXMuc290aGVyICYmICFTdG9sQ29t
cCh1dGhpcywgaXMudXRoaXMpICYmICFTdG9sQ29tcCh1b3RoZXIsIGlzLnVvdGhlcik7IH0KICBj
b25zdCBTU2VnICpzdGhpczsKICBjb25zdCBTU2VnICpzb3RoZXI7CiAgZG91YmxlIHV0aGlzOwog
IGRvdWJsZSB1b3RoZXI7Cn07CgoKCmNsYXNzIFNVU2VnIHsKcHVibGljOgogIFNVU2VnKCkge3Uw
PXUxPS0xLjA7IHBzPTA7IHZhbHVlPWZsYWdzPTA7fQogIFNVU2VnKGRvdWJsZSB1MCwgZG91Ymxl
IHUxLCBjb25zdCBTU2VnICpwcywgY29uc3QgU0lzZWN0ICZpczAsIGNvbnN0IFNJc2VjdCAmaXMx
KQogIHsKICAgIHRoaXMtPnUwPXUwOwogICAgdGhpcy0+dTE9dTE7CiAgICB0aGlzLT5wcz0oU1Nl
ZyopcHM7CiAgICB2YWx1ZT1mbGFncz0wOwogICAgdGhpcy0+aXMwID0gKFNJc2VjdCkgaXMwOwog
ICAgdGhpcy0+aXMxID0gKFNJc2VjdCkgaXMxOwogIH0KICBTVVNlZyhjb25zdCBTVVNlZyAmdXMp
CiAgewogICAgdTAgPSB1cy51MDsKICAgIHUxID0gdXMudTE7CiAgICBwcyA9IHVzLnBzOwogICAg
aXMwID0gKFNJc2VjdCkgdXMuaXMwOwogICAgaXMxID0gKFNJc2VjdCkgdXMuaXMxOwogICAgdmFs
dWUgPSB1cy52YWx1ZTsKICAgIGZsYWdzID0gdXMuZmxhZ3M7CiAgfQogIGRvdWJsZSB1MDsKICBk
b3VibGUgdTE7CiAgU1NlZyAqcHM7CiAgU0lzZWN0IGlzMDsKICBTSXNlY3QgaXMxOwogIGludCB2
YWx1ZTsKICBpbnQgZmxhZ3M7CiAgYm9vbCBvcGVyYXRvcj09KFNVU2VnICZzdSkgeyByZXR1cm4g
IVN0b2xDb21wKHUwLCBzdS51MCkgJiYgIVN0b2xDb21wKHUxLCBzdS51MSkgJiYgaXMwPT1pczE7
IH0KfTsKCgoKY2xhc3MgU0ludGVyc2VjdCA6IHB1YmxpYyBTQ29udGFpbmVyUDxTSXNlY3Q+IHsK
cHVibGljOgogIHZvaWQgU3dhcElzZWN0cygpCiAgewogICAgcmVnaXN0ZXIgaW50IGs7CiAgICBm
b3IgKGs9MDsgayA8IFNpemUoKTsgaysrKSB7CiAgICAgIHN3YXA8ZG91YmxlPihhcFtrXS0+dXRo
aXMsIGFwW2tdLT51b3RoZXIpOwogICAgICBTU2VnICp0ID0gKFNTZWcgKikgYXBba10tPnN0aGlz
OwogICAgICBhcFtrXS0+c3RoaXMgPSAoU1NlZyAqKSBhcFtrXS0+c290aGVyOwogICAgICBhcFtr
XS0+c290aGVyID0gdDsKICAgIH0KICB9CgoKCgoKCgogIHZvaWQgRGJsSXNlY3RzKCkKICB7CiAg
ICByZWdpc3RlciBpbnQgaSwgazsKICAgIFNJbnRlcnNlY3QgaXMyOwoKICAgIGlzMiA9ICp0aGlz
OwogICAgaXMyLlN3YXBJc2VjdHMoKTsKICAgICp0aGlzICs9IGlzMjsKICAgIFNvcnQoQ21wQnlV
MSk7CiAgICBmb3IgKGsgPSAwOyBrIDwgKFNpemUoKS0xKTsgaysrKSB7CiAgICAgIGZvciAoaT1r
KzE7IGkgPCBTaXplKCk7IGkrKykKICAgICAgICBpZiAoU3RvbENvbXAoYXBba10tPnV0aGlzLCBh
cFtpXS0+dXRoaXMpID09IDApIHsKICAgICAgICAgIERlbGV0ZShpLS0pOwogICAgICAgIH0KICAg
IH0KICB9CgoKCiAgaW50IERlbFRyaXZpYWwoKQogIHsKICAgIHJlZ2lzdGVyIGludCBpLCBkZWxz
OwogICAgZm9yIChkZWxzPWk9MDsgaSA8IFNpemUoKTsgaSsrKSB7CiAgICAgIGlmIChTdG9sQ29t
cChmYWJzKGFwW2ldLT51dGhpcy1hcFtpXS0+dW90aGVyKSwgMS4wKSA9PSAwKQogICAgICAgIERl
bGV0ZShpLS0pLCBkZWxzKys7CiAgICB9CiAgICByZXR1cm4gZGVsczsKICB9CgogIGludCBEZWxQ
b2ludHNOZWFyKGNvbnN0IFNQb2ludCAmcCwgZG91YmxlIHRvbCA9IF9zc19nbG9iYWxfdG9sKQog
IHsKICAgIHJlZ2lzdGVyIGludCBpLCBkZWxzOwogICAgZm9yIChpPWRlbHM9MDsgaSA8IFNpemUo
KTsgaSsrKQogICAgICBpZiAoU3RvbENvbXAocC5kaXN0KGFwW2ldLT5zdGhpcy0+UG9pbnQoYXBb
aV0tPnV0aGlzKSksIDAuMCwgdG9sKSA8PSAwKQogICAgICAgIERlbGV0ZShpLS0pLCBkZWxzKys7
CiAgICByZXR1cm4gZGVsczsKICB9Cgp9OwoKCgpjbGFzcyBTVVNlZ0NvbnQgOiBwdWJsaWMgU0Nv
bnRhaW5lclA8U1VTZWc+IHsKcHVibGljOgoKCiAgaW50IE1ha2VDb3VudChjb25zdCBTVmVjdG9y
ICZOLCBpbnQgaW5jcmVtZW50b3IpCiAgewogICAgcmVnaXN0ZXIgaW50IG0gPSAyMTQ3NDgzNjQ3
OwogICAgcmVnaXN0ZXIgaW50IGksIGN2ID0gMDsKCiAgICBmb3IgKGkgPSAwOyBpIDwgU2l6ZSgp
OyBpKyspIHsKICAgICAgU1ZlY3RvciB2MSA9IGFwW2ldLT5wcy0+VGFuZ2VudChhcFtpXS0+dTAp
OwogICAgICBTVmVjdG9yIHYyID0gYXBbaV0tPmlzMC5zb3RoZXItPlRhbmdlbnQoYXBbaV0tPmlz
MC51b3RoZXIpOwogICAgICBkb3VibGUgYSA9IHYxLkFuZ2xlKHYyLCBOKTsKCiAgICAgIGlmIChT
dG9sQ29tcChhLCBTX1BJKSA+IDApCiAgICAgICAgbSA9IG1pbjxpbnQ+KGFwW2ldLT52YWx1ZSA9
IChjdiArPSBpbmNyZW1lbnRvciksIG0pOwogICAgICBlbHNlCiAgICAgICAgbSA9IG1pbjxpbnQ+
KGFwW2ldLT52YWx1ZSA9IChjdiAtPSBpbmNyZW1lbnRvciksIG0pOwogICAgfQogICAgcmV0dXJu
IG07CiAgfQoKCgogIHZvaWQgQWRkVmFsKGludCB2YWwpCiAgewogICAgcmVnaXN0ZXIgaW50IGk7
CiAgICBmb3IgKGkgPSAwOyBpIDwgU2l6ZSgpOyBpKyspCiAgICAgIGFwW2ldLT52YWx1ZSArPSB2
YWw7CiAgfQoKCgoKICBpbnQgTWFrZVVTZWdzVGhpcyhTSW50ZXJzZWN0ICZpc2VjdHMpCiAgewog
ICAgaWYgKGlzZWN0cy5TaXplKCkgPCAxKQogICAgICByZXR1cm4gLTE7CiAgICBTSW50ZXJzZWN0
IGlzMiA9IGlzZWN0czsKICAgIGlzMi5Tb3J0KENtcEJ5VTEpOwoKICAgIHJlZ2lzdGVyIGludCBp
OwogICAgZm9yIChpPTA7IGk8aXMyLlNpemUoKTsgaSsrKQogICAgICBBZGQobmV3IFNVU2VnKGlz
MltpXS0+dXRoaXMsIGlzMlsoaSsxKSVpczIuU2l6ZSgpXS0+dXRoaXMsIGlzMltpXS0+c3RoaXMs
ICooaXMyW2ldKSwgKihpczJbKGkrMSklaXMyLlNpemUoKV0pKSk7CgogICAgcmV0dXJuIDA7CiAg
fQoKCgoKCgogIGludCBNYWtlVVNlZ3NPdGhlcihTSW50ZXJzZWN0ICZpc2VjdHMpCiAgewogICAg
aWYgKGlzZWN0cy5TaXplKCkgPCAxKQogICAgICByZXR1cm4gLTE7CiAgICBTSW50ZXJzZWN0IGlz
MiA9IGlzZWN0czsKICAgIGlzMi5Tb3J0KENtcEJ5VTIpOwoKICAgIHJlZ2lzdGVyIGludCBpOwog
ICAgZm9yIChpPTA7IGk8aXMyLlNpemUoKTsgaSsrKSB7CiAgICAgIFNJc2VjdCBpeDEgPSAqKGlz
MltpXSk7CiAgICAgIFNJc2VjdCBpeDIgPSAqKGlzMlsoaSsxKSVpczIuU2l6ZSgpXSk7CiAgICAg
IFNTZWcgKnQ7CiAgICAgIHN3YXA8ZG91YmxlPihpeDEudXRoaXMsIGl4MS51b3RoZXIpOwogICAg
ICB0ID0gKFNTZWcgKikgaXgxLnN0aGlzOwogICAgICBpeDEuc3RoaXMgPSBpeDEuc290aGVyOwog
ICAgICBpeDEuc290aGVyID0gdDsKICAgICAgc3dhcDxkb3VibGU+KGl4Mi51dGhpcywgaXgyLnVv
dGhlcik7CiAgICAgIHQgPSAoU1NlZyAqKSBpeDIuc3RoaXM7CiAgICAgIGl4Mi5zdGhpcyA9IGl4
Mi5zb3RoZXI7CiAgICAgIGl4Mi5zb3RoZXIgPSB0OwogICAgICBBZGQobmV3IFNVU2VnKGlzMltp
XS0+dW90aGVyLCBpczJbKGkrMSklaXMyLlNpemUoKV0tPnVvdGhlciwgaXMyW2ldLT5zb3RoZXIs
IGl4MSwgaXgyKSk7CiAgICB9CgogICAgcmV0dXJuIDA7CiAgfQoKfTsKCiMgOCAiY3VydmUuaCIg
MgoKY2xhc3MgU0N1cnZlIDogcHVibGljIFNTZWcgewpwcml2YXRlOgogIFNTZWdDb250IG1fc2xp
c3Q7CiAgYm9vbCBtX2N1cnJlbnQ7CiAgY2xhc3MgX191cGQgewogIHB1YmxpYzoKICAgIF9fdXBk
KCkgeyB2YWxpZF9jbG9zZWQgPSB2YWxpZF9ib3ggPSB2YWxpZF9sZW4gPSB2YWxpZF9hcmVhID0g
ZmFsc2U7IH0KICAgIHZvaWQgRmFsc2VBbGwoKSB7IHZhbGlkX2Nsb3NlZCA9IHZhbGlkX2JveCA9
IHZhbGlkX2xlbiA9IHZhbGlkX2FyZWEgPSBmYWxzZTsgfQogICAgYm9vbCB2YWxpZF9jbG9zZWQ7
CiAgICBib29sIHZhbGlkX2JveDsKICAgIGJvb2wgdmFsaWRfbGVuOwogICAgYm9vbCB2YWxpZF9h
cmVhOwogIH0gbV91cGQ7CiAgYm9vbCBtX2Nsb3NlZDsKICBpbnQgbV9vcmllbnRhdGlvbjsKCiAg
ZG91YmxlIGxhcmVhKFNMaW5lICpwbCkgY29uc3Q7CiAgZG91YmxlIGFhcmVhKFNBcmMgKnBhKSBj
b25zdDsKICBib29sIGl4c2VnKGNvbnN0IFNTZWcgKnBzLCBTSW50ZXJzZWN0ICZpc2VjdHMsIGRv
dWJsZSB0b2wgPSBfc3NfZ2xvYmFsX3RvbCkgY29uc3Q7CiAgYm9vbCBpeHNlbGYoU0ludGVyc2Vj
dCAmaXNlY3RzKSBjb25zdDsKICBib29sIGl4b3RoZXIoY29uc3QgU0N1cnZlICpwYywgU0ludGVy
c2VjdCAmaXNlY3RzKSBjb25zdDsKICB2b2lkIHNldFAoKTsKICBpbnQgY2xlYW5Ucml2aWFsRnJv
bU9mZnNldCgpOwoKICB2b2lkIFNldFUoKTsKICBkb3VibGUgY2FsY0FyZWEoKTsKICBkb3VibGUg
Y2FsY0xlbmd0aCgpOwoKcHVibGljOgogIFNDdXJ2ZSgpIHsgbV9jdXJyZW50ID0gZmFsc2U7IG1f
ZmxhZ3MgPSBhcGZsYWdzID0gMDsgbV9jb2xvciA9IDI1NjsgfQogIFNDdXJ2ZShjb25zdCBTQ3Vy
dmUgJmMpOwogIFNDdXJ2ZShTU2VnICpwcyk7CiAgU0N1cnZlKGNvbnN0IFNTZWdDb250ICZzbCkg
eyBtX3NsaXN0ID0gc2w7IG1fY3VycmVudCA9IGZhbHNlOyBtX2NvbG9yID0gc2wuQ29sb3IoKTsg
VXBkYXRlKCk7IH0KICB2aXJ0dWFsIH5TQ3VydmUoKSB7IERlc3Ryb3koKTsgfQoKICBlbnVtIENv
bW1vbkZsYWdzIHsgT0ZGU0VUX0lOU0VSVEVEX0lOVkFSQz0oaW50KTEgfTsKCiAgU1NlZ190IFR5
cGUoKSBjb25zdCB7IHJldHVybiBTQ1VSVkU7IH0KCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFND
dXJ2ZSAmYykgY29uc3Q7CgogIFNDdXJ2ZSYgb3BlcmF0b3I9KGNvbnN0IFNDdXJ2ZSAmYyk7CiAg
U0N1cnZlIG9wZXJhdG9yKyhjb25zdCBTQ3VydmUgJmMpIGNvbnN0OwogIFNDdXJ2ZSYgb3BlcmF0
b3IrPShjb25zdCBTQ3VydmUgJmMpOwogIFNTZWcqIG9wZXJhdG9yW10oaW50IGkpIGNvbnN0IHsg
cmV0dXJuIG1fc2xpc3RbaV07IH0KICBpbnQgU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2xpc3Qu
U2l6ZSgpOyB9CiAgaW50IEFkZChTU2VnKiBwcyk7CiAgaW50IEluc0FmdGVyKGludCBpLCBTU2Vn
ICpwcyk7CiAgaW50IEluc0JlZm9yZShpbnQgaSwgU1NlZyAqcHMpOwogIGludCBEZWxldGUoaW50
IGkpOwogIHZvaWQgU3dhcChpbnQgaSwgaW50IGopOwogIHZvaWQgUmVwbGFjZShpbnQgaSwgU1Nl
ZyAqcHMpOwogIHZvaWQgRGVzdHJveSgpIHttX2FyZWE9bV9sZW5ndGg9bV91PW1fb3JpZW50YXRp
b249bV9mbGFncz1hcGZsYWdzPTA7bV9zbGlzdC5+U1NlZ0NvbnQoKTttX2N1cnJlbnQ9ZmFsc2U7
fQogIHZvaWQgcm9sKGludCBpKSB7IG1fc2xpc3Qucm9sKGkpOyBzZXRQKCk7IG1fY3VycmVudCA9
IGZhbHNlOyB9CiAgdm9pZCByb3IoaW50IGkpIHsgbV9zbGlzdC5yb3IoaSk7IHNldFAoKTsgbV9j
dXJyZW50ID0gZmFsc2U7IH0KCiAgdm9pZCBTZXRQbGFuZShjb25zdCBTUGxhbmUgJnApIHttX3Bs
YW5lPXA7fQogIGludCBHZXRNZmxhZ3MoKSBjb25zdCB7cmV0dXJuIG1fZmxhZ3M7fQoKICBpbnQg
QWRkQnlHZW9tKFNTZWcgKnBzKTsKCiAgdm9pZCBVcGRhdGUoKSB7IGlmICghbV9jdXJyZW50KSB7
c2V0UCgpOyBTZXRVKCk7IG1fY3VycmVudD10cnVlOyBtX3VwZC5GYWxzZUFsbCgpO319CiAgYm9v
bCBDbG9zZWQoKSBjb25zdDsKICBTQm94IEdldEJveCgpIGNvbnN0OwogIGRvdWJsZSBMZW5ndGgo
KSBjb25zdDsKICBkb3VibGUgQXJlYSgpIGNvbnN0OwogIGRvdWJsZSBFbGV2YXRpb24oKSBjb25z
dDsKICB2b2lkIFNldEVsZXZhdGlvbihkb3VibGUgZWxlKSB7IFRyYW5zZm9ybShTTWF0cml4KCku
U2V0VHJhbnNsKEdldE5vcm1hbCgpKmVsZSkpOyBtX2N1cnJlbnQ9ZmFsc2U7IH0KCiAgaW50IE9y
aWVudCgpIGNvbnN0OwogIHZvaWQgUmV2ZXJzZSgpOwogIHZvaWQgU2V0T3JpZW50KGludCBvKSB7
IGlmIChPcmllbnQoKSAhPSBvKSBSZXZlcnNlKCk7IH0KCiAgaW50IEluZGV4KGNvbnN0IFNTZWcg
KnBzKSBjb25zdDsKICBkb3VibGUgVUxpbWl0KGRvdWJsZSB1KSBjb25zdCB7aW50IGM9Q2xvc2Vk
KCk7IGlmIChTdG9sQ29tcCh1LDEuMCk9PTApIHJldHVybiBjPzAuMDoxLjA7IHJldHVybiBmbW9k
KDEuMCtmbW9kKHUsMS4wKSwxLjApO30KICBkb3VibGUgVUxvY2FsKGRvdWJsZSB1Z2xvYmFsLCBT
U2VnKiYgcHMsIGludCAqcGkgPSAwKSBjb25zdDsKICBkb3VibGUgVUdsb2JhbChkb3VibGUgdWxv
Y2FsLCBjb25zdCBTU2VnKiBwcykgY29uc3Q7CiAgZG91YmxlIFVHbG9iYWwoZG91YmxlIHVsb2Nh
bCwgaW50IGkpIGNvbnN0OwogIGJvb2wgVUJlbG9uZ3MoZG91YmxlIHVnbG9iYWwsIGNvbnN0IFNT
ZWcgKiBjb25zdCBwcykgY29uc3Q7CgogIFNQb2ludCBQb2ludChkb3VibGUgdSkgY29uc3Q7CiAg
U1NlZyogU2VnQXRVKGRvdWJsZSB1LCBpbnQgKnBpID0gMCkgY29uc3Q7CgogIHZvaWQgVHJhbnNm
b3JtKGNvbnN0IFNNYXRyaXggJm0pOwogIFNWZWN0b3IgVGFuZ2VudChkb3VibGUgdSkgY29uc3Q7
CgogIFNTZWcqIFByb2ooY29uc3QgU1BsYW5lICZwbCkgY29uc3Q7CiAgU1NlZyogVHJpbVN0YXJ0
KGRvdWJsZSB1KSBjb25zdDsKICBTU2VnKiBUcmltRW5kKGRvdWJsZSB1KSBjb25zdDsKICBTU2Vn
KiBHZXRQYXJ0KGRvdWJsZSB1MCwgZG91YmxlIHUxKSBjb25zdDsKICBib29sIEluc05vZGUoZG91
YmxlIHUpOwoKICB2b2lkIFNldFNwKGNvbnN0IFNQb2ludCAmcCk7CiAgdm9pZCBTZXRNcChjb25z
dCBTUG9pbnQgJnApOwogIHZvaWQgU2V0RXAoY29uc3QgU1BvaW50ICZwKTsKICBpbnQgU2V0M1B0
cyhjb25zdCBTUG9pbnQgJmEsIGNvbnN0IFNQb2ludCAmYiwgY29uc3QgU1BvaW50ICZjKTsKICBp
bnQgU2V0QnlQdHMoY29uc3QgU0NvbnRhaW5lclA8U1BvaW50PiAmc2V0cCk7CgogIGJvb2wgUG9p
bnRPblNlZyhjb25zdCBTUG9pbnQgJnAsIGRvdWJsZSAmdSwgU1BvaW50ICZhKSBjb25zdDsKICBi
b29sIEludGVyc2VjdChjb25zdCBTU2VnICpwcywgU0ludGVyc2VjdCAmaXNlY3RzKSBjb25zdDsK
ICBpbnQgTWFrZUN1cnZlcyhTU2VnQ29udCAmY2MpIGNvbnN0OwogIGludCBEaXNzb2x2ZShTU2Vn
Q29udCAmY2MpIGNvbnN0OwoKICBTU2VnKiBjbG9uZSgpIGNvbnN0IHsgU0N1cnZlICpwYyA9IG5l
dyBTQ3VydmUoKnRoaXMpOyByZXR1cm4gcGM7fQoKICBib29sIEluc2lkZShjb25zdCBTU2VnICpw
cykgY29uc3Q7CiAgaW50IEFidXRCKGNvbnN0IFNTZWcgKnBCLCBTU2VnQ29udCAmY2MpIGNvbnN0
OwogIGludCBBb3JCKGNvbnN0IFNTZWcgKnBCLCBTU2VnQ29udCAmY2MpIGNvbnN0OwoKICBkb3Vi
bGUgV2FsbHRoKGNvbnN0IFNQb2ludCAmcCwgU1BvaW50ICpwQ2VudGVyID0gMCwgU1BvaW50ICpw
cDAgPSAwLCBTUG9pbnQgKnBwMSA9IDAsIGNvbnN0IFNTZWdDb250ICpwQWdhaW5zdCA9IDApIGNv
bnN0OwogIGRvdWJsZSBXYWxsdGgoZG91YmxlIHUsIFNQb2ludCAqcENlbnRlciA9IDAsIFNQb2lu
dCAqcHAwID0gMCwgU1BvaW50ICpwcDEgPSAwLCBjb25zdCBTU2VnQ29udCAqcEFnYWluc3QgPSAw
KSBjb25zdCB7IHJldHVybiBXYWxsdGgoUG9pbnQodSksIHBDZW50ZXIsIHBwMCwgcHAxLCBwQWdh
aW5zdCk7IH0KCiAgaW50IElubmVyKFNTZWdDb250ICZjYywgYm9vbCBzZXRfb3JpZW50YXRpb25f
Y2N3ID0gdHJ1ZSkgY29uc3Q7CiAgaW50IE91dGVyKFNTZWdDb250ICZjYywgYm9vbCBzZXRfb3Jp
ZW50YXRpb25fY2N3ID0gdHJ1ZSkgY29uc3Q7CiAgaW50IGNydWRlT2Zmc2V0KFNDdXJ2ZSAmd2Ms
IGRvdWJsZSBvZmZzLCBkb3VibGUgdGlueSA9IFNTX1RJTlkpIGNvbnN0OwogIGludCBPZmZzZXQo
U1NlZ0NvbnQgJmNjLCBkb3VibGUgb2ZmcywgZG91YmxlIHRpbnkgPSBTU19USU5ZKSBjb25zdDsK
ICBkb3VibGUgTGFyZ2VzdENpcmNsZShTUG9pbnQgJmN0ciwgZG91YmxlIHRpbnkgPSAwLjAwMSkg
Y29uc3Q7CiAgZG91YmxlIExvY2FsTGFyZ2VzdENpcmNsZShkb3VibGUgdSwgU1BvaW50ICpwQ2Vu
dGVyLCBTUG9pbnQgKnBwMCwgU1BvaW50ICpwcDEsIGNvbnN0IFNTZWdDb250ICpwQWdhaW5zdCA9
IDAsIGNvbnN0IGRvdWJsZSBpbml0X3N0ZXAgPSAwLjUsIGNvbnN0IGRvdWJsZSBwYXJhdG9sX3Jh
ZGlhbnMgPSAwLjAxNzQ1MzI5MiwgY29uc3QgZG91YmxlIGNpcl90b2wgPSBfc3NfZ2xvYmFsX3Rv
bCkgY29uc3Q7CgogIGludCBSbTBsZW5zZWdzKGRvdWJsZSB0b2wgPSBfc3NfY29ubmVjdF90b2wp
OwogIGludCBGbGF0dGVuQXJjcyhkb3VibGUgYXJjaGVpZ2h0dG9sKTsKICBpbnQgQ29ubmVjdE5v
ZGVzKGRvdWJsZSB0b2wgPSBfc3NfY29ubmVjdF90b2wpOwogIGludCBDb2xsYXBzZUFyY3MoZG91
YmxlIGNlbnRlcl9kaXN0X3RvbCA9IDAuMSk7CiAgaW50IENvbGxhcHNlTGluZXMoZG91YmxlIGRl
Z3RvbCA9IDEwLjApOwogIHZvaWQgQ2xvc2VJdCgpOwogIGludCBSZW1vdmVTdGFydENpcigpIHsg
cmV0dXJuIG1fc2xpc3QuUmVtb3ZlU3RhcnRDaXIoKTsgfQogIGludCBDbGVhblNhbWUoKSB7IHJl
dHVybiBtX3NsaXN0LkNsZWFuU2FtZSgpOyB9CiAgaW50IEZpeEhlYWRUYWlsKCk7Cgp9OwoKCgpj
bGFzcyBTQ3VydmVTb3J0IHsKcHJpdmF0ZToKICBpbnQgc3o7CiAgaW50ICppbmRleDsKICBpbnQg
SW5pdChjb25zdCBTQ3VydmUgJmMpOwoKcHVibGljOgogIFNDdXJ2ZVNvcnQoKTsKICB2aXJ0dWFs
IH5TQ3VydmVTb3J0KCk7CgogIGludCBTb3J0QnlYKGNvbnN0IFNDdXJ2ZSAmYyk7CiAgaW50IFNv
cnRCeVkoY29uc3QgU0N1cnZlICZjKTsKICBpbnQgU29ydEJ5Wihjb25zdCBTQ3VydmUgJmMpOwog
IGludCBTb3J0KGNvbnN0IFNDdXJ2ZSAmYyk7CgogIGludCBTaXplKCkgY29uc3QgeyByZXR1cm4g
c3o7IH0KICBpbnQgb3BlcmF0b3JbXShpbnQgaSkgY29uc3QgeyByZXR1cm4gaW5kZXhbaV07IH0K
Cn07CgoKCiMgNCAiYm94LmNwcCIgMgoKIyA4ICJsaW5lLmgiIDEKY2xhc3MgU0luZkxpbmUgewpw
cm90ZWN0ZWQ6CiAgU1BvaW50IHNwOwogIFNWZWN0b3IgZGlydjsKcHVibGljOgoKICBmcmllbmQg
Y2xhc3MgU1BsYW5lOwoKICBTSW5mTGluZSgpIHsgfTsKICBTSW5mTGluZShjb25zdCBTUG9pbnQg
JnNwLCBjb25zdCBTVmVjdG9yICZkaXJ2KTsKICBTSW5mTGluZShjb25zdCBTVmVjdG9yICZzcCwg
Y29uc3QgU1ZlY3RvciAmZGlydik7CiAgU0luZkxpbmUoY29uc3QgU1ZlY3RvciAmZGlydiwgY29u
c3QgU1BvaW50ICZzcCk7CiAgU0luZkxpbmUoY29uc3QgU1BvaW50ICZzcCwgY29uc3QgU1BvaW50
ICZlcCk7CiAgdmlydHVhbCB+U0luZkxpbmUoKSB7IH07CgogIHZpcnR1YWwgU1BvaW50IFBvaW50
KGRvdWJsZSB1KSBjb25zdCB7IHJldHVybiBTUG9pbnQoc3ArZGlydip1KTsgfQogIHZpcnR1YWwg
U1BvaW50IEdldFNwKCkgY29uc3Qge3JldHVybiBzcDt9CiAgdmlydHVhbCBTVmVjdG9yIEdldERp
cnYoKSBjb25zdCB7cmV0dXJuIGRpcnY7fQoKICB2aXJ0dWFsIGRvdWJsZSBkaXN0KGNvbnN0IFNQ
b2ludCAmcCkgY29uc3Q7CiAgdmlydHVhbCBkb3VibGUgZGlzdChjb25zdCBTSW5mTGluZSAmbCkg
Y29uc3Q7CiAgdmlydHVhbCBib29sIFBvaW50T24oY29uc3QgU1BvaW50ICZwKSBjb25zdCB7IHJl
dHVybiBTdG9sQ29tcChkaXN0KHApLCAwLjApID09IDAuMDt9CiAgdmlydHVhbCBib29sIFBhcmFs
bGVsKGNvbnN0IFNJbmZMaW5lICZsKSBjb25zdDsKICB2aXJ0dWFsIGJvb2wgQ29saW5lYXIoY29u
c3QgU0luZkxpbmUgJmwpIGNvbnN0OwogIHZpcnR1YWwgYm9vbCBQZXJwZW5kaWN1bGFyKGNvbnN0
IFNJbmZMaW5lICZsKSBjb25zdDsKICB2aXJ0dWFsIGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNJbmZM
aW5lICZsLCBTUG9pbnQgJnAsIGRvdWJsZSAmdCwgZG91YmxlICZ0bCkgY29uc3Q7Cn07CgpjbGFz
cyBTUmF5IDogcHVibGljIFNJbmZMaW5lIHsKcHVibGljOgogIFNSYXkoKSB7IH07CiAgU1JheShj
b25zdCBTUG9pbnQgJmEsIGNvbnN0IFNQb2ludCAmYikgOiBTSW5mTGluZShhLCBiKSB7fQogIFNS
YXkoY29uc3QgU1ZlY3RvciAmYSwgY29uc3QgU1ZlY3RvciAmYikgOiBTSW5mTGluZShhLCBiKSB7
fQogIFNSYXkoY29uc3QgU1BvaW50ICZhLCBjb25zdCBTVmVjdG9yICZiKSA6IFNJbmZMaW5lKGEs
IGIpIHt9CiAgU1JheShjb25zdCBTVmVjdG9yICZhLCBjb25zdCBTUG9pbnQgJmIpIDogU0luZkxp
bmUoYSwgYikge30KCiAgdmlydHVhbCB+U1JheSgpIHsgfTsKCiAgdmlydHVhbCBTUG9pbnQgUG9p
bnQoZG91YmxlIHUpIGNvbnN0IHsgcmV0dXJuIFNQb2ludChzcCtkaXJ2KnUpOyB9CiAgdmlydHVh
bCBTUG9pbnQgR2V0U3AoKSBjb25zdCB7cmV0dXJuIHNwO30KICB2aXJ0dWFsIFNWZWN0b3IgR2V0
RGlydigpIGNvbnN0IHtyZXR1cm4gZGlydjt9CgogIHZpcnR1YWwgYm9vbCBQb2ludE9uKGNvbnN0
IFNQb2ludCAmcCkgY29uc3Q7CgogIHZpcnR1YWwgYm9vbCBJbnRlcnNlY3QoY29uc3QgU0luZkxp
bmUgJmwsIFNQb2ludCAmcCwgZG91YmxlICZ0LCBkb3VibGUgJnRsKSBjb25zdDsKICB2aXJ0dWFs
IGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNSYXkgJnIsIFNQb2ludCAmcCwgZG91YmxlICZ0LCBkb3Vi
bGUgJnRyKSBjb25zdDsKfTsKCmNsYXNzIFNMaW5lIDogcHJvdGVjdGVkIFNSYXksIHB1YmxpYyBT
U2VnIHsKcHJvdGVjdGVkOgogIFNQb2ludCBlcDsKICB2b2lkIHNldHNlZ3YoY29uc3QgU1BsYW5l
ICZwbCk7CnB1YmxpYzoKCiAgU0xpbmUoKSB7IH07CiAgU0xpbmUoY29uc3QgU1BvaW50ICZzcCwg
Y29uc3QgU1BvaW50ICZlcCwgY29uc3QgU1BsYW5lICZwbGFuZSA9IFNYWVBMQU5FKSB7U0xpbmU6
OnNwPXNwO1NMaW5lOjplcD1lcDtkaXJ2PWVwLXNwO3NldHNlZ3YocGxhbmUpO3ByZXY9bmV4dD0w
O21fY29sb3I9MjU2O30KICBTTGluZShjb25zdCBTUG9pbnQgJnAsIGNvbnN0IFNWZWN0b3IgJmRp
ciwgY29uc3QgU1BsYW5lICZwbGFuZSA9IFNYWVBMQU5FKSB7c3A9cDtlcD1wK2RpcjtkaXJ2PWRp
cjtzZXRzZWd2KHBsYW5lKTtwcmV2PW5leHQ9MDttX2NvbG9yPTI1Njt9CiAgU0xpbmUoY29uc3Qg
U0xpbmUgJmwpOwogIHZpcnR1YWwgflNMaW5lKCkgeyB9OwoKICB2aXJ0dWFsIFNTZWdfdCBUeXBl
KCkgY29uc3QgeyByZXR1cm4gU0xJTkU7fQoKICBTUG9pbnQgR2V0U3AoKSBjb25zdCB7cmV0dXJu
IHNwO30KICBTUG9pbnQgR2V0RXAoKSBjb25zdCB7cmV0dXJuIGVwO30KICBTVmVjdG9yIEdldERp
cnYoKSBjb25zdCB7cmV0dXJuIGRpcnY7fQoKICBTTGluZSYgb3BlcmF0b3I9KGNvbnN0IFNMaW5l
ICZsKTsKICBib29sIG9wZXJhdG9yPT0oY29uc3QgU0xpbmUgJmwpIGNvbnN0IHsgcmV0dXJuIHNw
PT1sLnNwICYmIGVwPT1sLmVwOyB9CiAgU0xpbmUgb3BlcmF0b3ItKCkgY29uc3QgeyBTTGluZSBs
KCp0aGlzKTsgbC5SZXZlcnNlKCk7IHJldHVybiBsOyB9CgogIHZvaWQgVXBkYXRlKCkgeyBtX2Fy
ZWEgPSAwLjA7IG1fbGVuZ3RoID0gc3AuZGlzdChlcCk7IG1fYm94ID0gU0JveCh0aGlzKTsgfQog
IHZvaWQgU2V0UGxhbmUoY29uc3QgU1BsYW5lICZwKSB7bV9wbGFuZT1wO30KCiAgdmlydHVhbCBT
UG9pbnQgUG9pbnQoZG91YmxlIHUpIGNvbnN0IHsgcmV0dXJuIFNQb2ludChzcCtkaXJ2KnUpOyB9
CgogIHZvaWQgVHJhbnNmb3JtKGNvbnN0IFNNYXRyaXggJm0pOwogIFNWZWN0b3IgVGFuZ2VudChk
b3VibGUgdSkgY29uc3QgeyByZXR1cm4gZGlydi5Vbml0KCk7fQogIFNTZWcqIFByb2ooY29uc3Qg
U1BsYW5lICZwKSBjb25zdCB7cmV0dXJuIG5ldyBTTGluZShzcC5Qcm9qKHApLCBlcC5Qcm9qKHAp
LCBwKTt9CgogIFNTZWcqIFRyaW1TdGFydChkb3VibGUgdSkgY29uc3Qge1NMaW5lICpwbD1uZXcg
U0xpbmUoUG9pbnQodSksIGVwLCBtX3BsYW5lKTtwbC0+U2V0TGF5ZXIobV9sYXllcik7cGwtPlNl
dFBsYW5lKG1fcGxhbmUpO3JldHVybiBwbDt9CiAgU1NlZyogVHJpbUVuZChkb3VibGUgdSkgY29u
c3Qge1NMaW5lICpwbD1uZXcgU0xpbmUoc3AsIFBvaW50KHUpLCBtX3BsYW5lKTtwbC0+U2V0TGF5
ZXIobV9sYXllcik7cGwtPlNldFBsYW5lKG1fcGxhbmUpO3JldHVybiBwbDt9CiAgU1NlZyogR2V0
UGFydChkb3VibGUgdTAsIGRvdWJsZSB1MSkgY29uc3Qge1NMaW5lICpwbD1uZXcgU0xpbmUoUG9p
bnQodTApLCBQb2ludCh1MSksIG1fcGxhbmUpO3BsLT5TZXRMYXllcihtX2xheWVyKTtwbC0+U2V0
UGxhbmUobV9wbGFuZSk7cmV0dXJuIHBsO30KICBpbnQgT2Zmc2V0KFNTZWdDb250ICZjYSwgZG91
YmxlIG9mZnMsIGRvdWJsZSB0aW55ID0gU1NfVElOWSkgY29uc3Q7CgogIHZvaWQgU2V0U3AoY29u
c3QgU1BvaW50ICZwKTsKICB2b2lkIFNldE1wKGNvbnN0IFNQb2ludCAmcCk7CiAgdm9pZCBTZXRF
cChjb25zdCBTUG9pbnQgJnApOwogIGludCBTZXQzUHRzKGNvbnN0IFNQb2ludCAmYSwgY29uc3Qg
U1BvaW50ICZiLCBjb25zdCBTUG9pbnQgJmMpOwogIGludCBTZXRCeVB0cyhjb25zdCBTQ29udGFp
bmVyUDxTUG9pbnQ+ICZzZXRwKTsKCiAgdm9pZCBSZXZlcnNlKCk7CiAgYm9vbCBQb2ludE9uU2Vn
KGNvbnN0IFNQb2ludCAmcCwgZG91YmxlICZ1LCBTUG9pbnQgJmEpIGNvbnN0OwoKICBib29sIElu
c2lkZShjb25zdCBTU2VnICpwcykgY29uc3Q7CiAgaW50IEFidXRCKGNvbnN0IFNTZWcgKnBCLCBT
U2VnQ29udCAmY2MpIGNvbnN0OwogIGludCBBb3JCKGNvbnN0IFNTZWcgKnBCLCBTU2VnQ29udCAm
Y2MpIGNvbnN0OwoKICBib29sIEludGVyc2VjdChjb25zdCBTSW5mTGluZSAmbCwgU1BvaW50ICZw
LCBkb3VibGUgJnQsIGRvdWJsZSAmdGwpIGNvbnN0OwogIGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNS
YXkgJnIsIFNQb2ludCAmcCwgZG91YmxlICZ0LCBkb3VibGUgJnRyKSBjb25zdDsKICBib29sIElu
dGVyc2VjdChjb25zdCBTTGluZSAmbCwgU1BvaW50ICZwLCBkb3VibGUgJnQsIGRvdWJsZSAmdHIp
IGNvbnN0OwogIGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNTZWcgKnBzZWcsIFNJbnRlcnNlY3QgJmlz
ZWN0cykgY29uc3Q7CgogIFNTZWcqIGNsb25lKCkgY29uc3QgeyByZXR1cm4gbmV3IFNMaW5lKCp0
aGlzKTt9Cn07CgojIDUgImJveC5jcHAiIDIKCgoKU0JveDo6U0JveChjb25zdCBTU2VnICpwcykK
ewogIHN3aXRjaCAocHMtPlR5cGUoKSkgewogIGNhc2UgU0xJTkU6CiAgICB7CiAgICAgIG1fcCA9
IHBzLT5TdGFydFBvaW50KCk7CiAgICAgIG1fdiA9IFNWZWN0b3IobV9wLCBwcy0+RW5kUG9pbnQo
KSk7CiAgICAgIG1fY3VycmVudCA9IHRydWU7CiAgICB9CiAgICBicmVhazsKICBjYXNlIFNBUkM6
CiAgICB7CiAgICAgIFNBcmMgKnBhID0gKFNBcmMgKikgcHM7CiAgICAgIFNQb2ludCBjdHIgPSBw
YS0+R2V0Q3RyKCksIGE7CiAgICAgIGRvdWJsZSByYWQgPSBwYS0+R2V0UmFkKCksIHU7CiAgICAg
IFNWZWN0b3IgaSA9IFNfSS5Qcm9qKHBhLT5HZXRQbGFuZSgpKS5Vbml0KCkqcmFkOwogICAgICBT
VmVjdG9yIGogPSBTX0ouUHJvaihwYS0+R2V0UGxhbmUoKSkuVW5pdCgpKnJhZDsKICAgICAgU1Zl
Y3RvciBrID0gU19LLlByb2oocGEtPkdldFBsYW5lKCkpLlVuaXQoKSpyYWQ7CiAgICAgIFNQb2lu
dCBzcCA9IHBhLT5TdGFydFBvaW50KCk7CiAgICAgIFNQb2ludCBlcCA9IHBhLT5FbmRQb2ludCgp
OwoKICAgICAgaWYgKHBhLT5Qb2ludE9uU2VnKGN0citpLCB1LCBhKSkKICAgICAgICBtX3YueCA9
IChjdHIraSkueDsKICAgICAgZWxzZQogICAgICAgIG1fdi54ID0gbWF4PGRvdWJsZT4oc3AueCwg
ZXAueCk7CiAgICAgIGlmIChwYS0+UG9pbnRPblNlZyhjdHItaSwgdSwgYSkpCiAgICAgICAgbV9w
LnggPSAoY3RyLWkpLng7CiAgICAgIGVsc2UKICAgICAgICBtX3AueCA9IG1pbjxkb3VibGU+KHNw
LngsIGVwLngpOwoKICAgICAgaWYgKHBhLT5Qb2ludE9uU2VnKGN0citqLCB1LCBhKSkKICAgICAg
ICBtX3YueSA9IChjdHIraikueTsKICAgICAgZWxzZQogICAgICAgIG1fdi55ID0gbWF4PGRvdWJs
ZT4oc3AueSwgZXAueSk7CiAgICAgIGlmIChwYS0+UG9pbnRPblNlZyhjdHItaiwgdSwgYSkpCiAg
ICAgICAgbV9wLnkgPSAoY3RyLWopLnk7CiAgICAgIGVsc2UKICAgICAgICBtX3AueSA9IG1pbjxk
b3VibGU+KHNwLnksIGVwLnkpOwoKICAgICAgaWYgKHBhLT5Qb2ludE9uU2VnKGN0citrLCB1LCBh
KSkKICAgICAgICBtX3YueiA9IChjdHIraykuejsKICAgICAgZWxzZQogICAgICAgIG1fdi56ID0g
bWF4PGRvdWJsZT4oc3AueiwgZXAueik7CiAgICAgIGlmIChwYS0+UG9pbnRPblNlZyhjdHItaywg
dSwgYSkpCiAgICAgICAgbV9wLnogPSAoY3RyLWspLno7CiAgICAgIGVsc2UKICAgICAgICBtX3Au
eiA9IG1pbjxkb3VibGU+KHNwLnosIGVwLnopOwoKICAgICAgbV92IC09IG1fcDsKICAgICAgbV9j
dXJyZW50ID0gdHJ1ZTsKICAgIH0KICAgIGJyZWFrOwogIGNhc2UgU0NJUkNMRToKICAgIHsKICAg
ICAgU0NpcmNsZSAqcG8gPSAoU0NpcmNsZSAqKSBwczsKICAgICAgU1BvaW50IGN0ciA9IHBvLT5H
ZXRDdHIoKTsKICAgICAgZG91YmxlIHJhZCA9IHBvLT5HZXRSYWQoKTsKICAgICAgU1ZlY3RvciBp
ID0gU19JLlByb2oocG8tPkdldFBsYW5lKCkpLlVuaXQoKSpyYWQ7CiAgICAgIFNWZWN0b3IgaiA9
IFNfSi5Qcm9qKHBvLT5HZXRQbGFuZSgpKS5Vbml0KCkqcmFkOwogICAgICBTVmVjdG9yIGsgPSBT
X0suUHJvaihwby0+R2V0UGxhbmUoKSkuVW5pdCgpKnJhZDsKCiAgICAgIG1fdi56ID0gKGN0citr
KS56OwogICAgICBtX3AueiA9IChjdHItaykuejsKICAgICAgbV92LnggPSAoY3RyK2kpLng7CiAg
ICAgIG1fcC54ID0gKGN0ci1pKS54OwogICAgICBtX3YueSA9IChjdHIraikueTsKICAgICAgbV9w
LnkgPSAoY3RyLWopLnk7CiAgICAgIG1fdiAtPSBtX3A7CiAgICAgIG1fY3VycmVudCA9IHRydWU7
CiAgICB9CiAgICBicmVhazsKICBjYXNlIFNDVVJWRToKICAgIHsKICAgICAgU0N1cnZlICpwYyA9
IChTQ3VydmUgKikgcHM7CiAgICAgIHJlZ2lzdGVyIGludCBpOwoKICAgICAgbV9jdXJyZW50ID0g
ZmFsc2U7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBwYy0+U2l6ZSgpOyBpKyspCiAgICAgICAgdGhp
cy0+VW5pb24oU0JveCgoKnBjKVtpXSkpOwogICAgfQogICAgYnJlYWs7CiAgZGVmYXVsdDoKICAg
IGJyZWFrOwogIH0KfQoKCgpib29sIFNCb3g6Ok92ZXJsYXBYKGNvbnN0IFNCb3ggJnIpIGNvbnN0
CnsKICBkb3VibGUgbWlueDEgPSBtaW48ZG91YmxlPihtX3AueCwgbV9wLngrbV92LngpOwogIGRv
dWJsZSBtYXh4MSA9IG1heDxkb3VibGU+KG1fcC54LCBtX3AueCttX3YueCk7CiAgZG91YmxlIG1p
bngyID0gbWluPGRvdWJsZT4oci5tX3AueCwgci5tX3AueCtyLm1fdi54KTsKICBkb3VibGUgbWF4
eDIgPSBtYXg8ZG91YmxlPihyLm1fcC54LCByLm1fcC54K3IubV92LngpOwogIGRvdWJsZSBtaW5l
cCA9IG1pbjxkb3VibGU+KG1heHgxLCBtYXh4Mik7CiAgZG91YmxlIG1heHNwID0gbWF4PGRvdWJs
ZT4obWlueDEsIG1pbngyKTsKCiAgcmV0dXJuIFN0b2xDb21wKG1pbmVwLCBtYXhzcCkgPj0gMDsK
fQoKCgpib29sIFNCb3g6Ok92ZXJsYXBZKGNvbnN0IFNCb3ggJnIpIGNvbnN0CnsKICBkb3VibGUg
bWlueTEgPSBtaW48ZG91YmxlPihtX3AueSwgbV9wLnkrbV92LnkpOwogIGRvdWJsZSBtYXh5MSA9
IG1heDxkb3VibGU+KG1fcC55LCBtX3AueSttX3YueSk7CiAgZG91YmxlIG1pbnkyID0gbWluPGRv
dWJsZT4oci5tX3AueSwgci5tX3AueStyLm1fdi55KTsKICBkb3VibGUgbWF4eTIgPSBtYXg8ZG91
YmxlPihyLm1fcC55LCByLm1fcC55K3IubV92LnkpOwogIGRvdWJsZSBtaW5lcCA9IG1pbjxkb3Vi
bGU+KG1heHkxLCBtYXh5Mik7CiAgZG91YmxlIG1heHNwID0gbWF4PGRvdWJsZT4obWlueTEsIG1p
bnkyKTsKCiAgcmV0dXJuIFN0b2xDb21wKG1pbmVwLCBtYXhzcCkgPj0gMDsKfQoKCgpib29sIFNC
b3g6Ok92ZXJsYXBaKGNvbnN0IFNCb3ggJnIpIGNvbnN0CnsKICBkb3VibGUgbWluejEgPSBtaW48
ZG91YmxlPihtX3AueiwgbV9wLnorbV92LnopOwogIGRvdWJsZSBtYXh6MSA9IG1heDxkb3VibGU+
KG1fcC56LCBtX3AueittX3Yueik7CiAgZG91YmxlIG1pbnoyID0gbWluPGRvdWJsZT4oci5tX3Au
eiwgci5tX3AueityLm1fdi56KTsKICBkb3VibGUgbWF4ejIgPSBtYXg8ZG91YmxlPihyLm1fcC56
LCByLm1fcC56K3IubV92LnopOwogIGRvdWJsZSBtaW5lcCA9IG1pbjxkb3VibGU+KG1heHoxLCBt
YXh6Mik7CiAgZG91YmxlIG1heHNwID0gbWF4PGRvdWJsZT4obWluejEsIG1pbnoyKTsKCiAgcmV0
dXJuIFN0b2xDb21wKG1pbmVwLCBtYXhzcCkgPj0gMDsKfQoKCgpib29sIFNCb3g6Okluc2lkZVgo
Y29uc3QgU0JveCAmcikgY29uc3QKewogIGRvdWJsZSBtaW54MSA9IG1pbjxkb3VibGU+KG1fcC54
LCBtX3AueCttX3YueCk7CiAgZG91YmxlIG1heHgxID0gbWF4PGRvdWJsZT4obV9wLngsIG1fcC54
K21fdi54KTsKICBkb3VibGUgbWlueDIgPSBtaW48ZG91YmxlPihyLm1fcC54LCByLm1fcC54K3Iu
bV92LngpOwogIGRvdWJsZSBtYXh4MiA9IG1heDxkb3VibGU+KHIubV9wLngsIHIubV9wLngrci5t
X3YueCk7CgogIHJldHVybiBTdG9sQ29tcChtaW54MiwgbWlueDEpIDw9IDAgJiYgU3RvbENvbXAo
bWF4eDEsIG1heHgyKSA8PSAwOwp9CgoKCmJvb2wgU0JveDo6SW5zaWRlWShjb25zdCBTQm94ICZy
KSBjb25zdAp7CiAgZG91YmxlIG1pbnkxID0gbWluPGRvdWJsZT4obV9wLnksIG1fcC55K21fdi55
KTsKICBkb3VibGUgbWF4eTEgPSBtYXg8ZG91YmxlPihtX3AueSwgbV9wLnkrbV92LnkpOwogIGRv
dWJsZSBtaW55MiA9IG1pbjxkb3VibGU+KHIubV9wLnksIHIubV9wLnkrci5tX3YueSk7CiAgZG91
YmxlIG1heHkyID0gbWF4PGRvdWJsZT4oci5tX3AueSwgci5tX3AueStyLm1fdi55KTsKCiAgcmV0
dXJuIFN0b2xDb21wKG1pbnkyLCBtaW55MSkgPD0gMCAmJiBTdG9sQ29tcChtYXh5MSwgbWF4eTIp
IDw9IDA7Cn0KCgoKYm9vbCBTQm94OjpJbnNpZGVaKGNvbnN0IFNCb3ggJnIpIGNvbnN0CnsKICBk
b3VibGUgbWluejEgPSBtaW48ZG91YmxlPihtX3AueiwgbV9wLnorbV92LnopOwogIGRvdWJsZSBt
YXh6MSA9IG1heDxkb3VibGU+KG1fcC56LCBtX3AueittX3Yueik7CiAgZG91YmxlIG1pbnoyID0g
bWluPGRvdWJsZT4oci5tX3Aueiwgci5tX3AueityLm1fdi56KTsKICBkb3VibGUgbWF4ejIgPSBt
YXg8ZG91YmxlPihyLm1fcC56LCByLm1fcC56K3IubV92LnopOwoKICByZXR1cm4gU3RvbENvbXAo
bWluejIsIG1pbnoxKSA8PSAwICYmIFN0b2xDb21wKG1heHoxLCBtYXh6MikgPD0gMDsKfQoKCgpT
Qm94JiBTQm94OjpVbmlvbihjb25zdCBTQm94ICZyKQp7CiAgaWYgKCFtX2N1cnJlbnQpIHsKICAg
ICp0aGlzID0gcjsKICAgIG1fY3VycmVudCA9IHRydWU7CiAgfSBlbHNlIHsKICAgIGRvdWJsZSBt
aW54MSA9IG1pbjxkb3VibGU+KG1fcC54LCBtX3AueCttX3YueCk7CiAgICBkb3VibGUgbWF4eDEg
PSBtYXg8ZG91YmxlPihtX3AueCwgbV9wLngrbV92LngpOwogICAgZG91YmxlIG1pbngyID0gbWlu
PGRvdWJsZT4oci5tX3AueCwgci5tX3AueCtyLm1fdi54KTsKICAgIGRvdWJsZSBtYXh4MiA9IG1h
eDxkb3VibGU+KHIubV9wLngsIHIubV9wLngrci5tX3YueCk7CgogICAgZG91YmxlIG1pbnkxID0g
bWluPGRvdWJsZT4obV9wLnksIG1fcC55K21fdi55KTsKICAgIGRvdWJsZSBtYXh5MSA9IG1heDxk
b3VibGU+KG1fcC55LCBtX3AueSttX3YueSk7CiAgICBkb3VibGUgbWlueTIgPSBtaW48ZG91Ymxl
PihyLm1fcC55LCByLm1fcC55K3IubV92LnkpOwogICAgZG91YmxlIG1heHkyID0gbWF4PGRvdWJs
ZT4oci5tX3AueSwgci5tX3AueStyLm1fdi55KTsKCiAgICBkb3VibGUgbWluejEgPSBtaW48ZG91
YmxlPihtX3AueiwgbV9wLnorbV92LnopOwogICAgZG91YmxlIG1heHoxID0gbWF4PGRvdWJsZT4o
bV9wLnosIG1fcC56K21fdi56KTsKICAgIGRvdWJsZSBtaW56MiA9IG1pbjxkb3VibGU+KHIubV9w
LnosIHIubV9wLnorci5tX3Yueik7CiAgICBkb3VibGUgbWF4ejIgPSBtYXg8ZG91YmxlPihyLm1f
cC56LCByLm1fcC56K3IubV92LnopOwoKICAgIG1fcC54ID0gbWluPGRvdWJsZT4obWlueDEsIG1p
bngyKTsKICAgIG1fcC55ID0gbWluPGRvdWJsZT4obWlueTEsIG1pbnkyKTsKICAgIG1fcC56ID0g
bWluPGRvdWJsZT4obWluejEsIG1pbnoyKTsKCiAgICBtX3YueCA9IG1heDxkb3VibGU+KG1heHgx
LCBtYXh4Mik7CiAgICBtX3YueSA9IG1heDxkb3VibGU+KG1heHkxLCBtYXh5Mik7CiAgICBtX3Yu
eiA9IG1heDxkb3VibGU+KG1heHoxLCBtYXh6Mik7CgogICAgbV92IC09IG1fcDsKICB9CgogIHJl
dHVybiAqdGhpczsKfQoKCgp2b2lkIFNCb3g6OkdldDhQb2ludHMoU1BvaW50ICpwcCkgY29uc3QK
ewogIFNWZWN0b3IgeGEsIHlhLCB6YTsKICB4YSA9IFNfSSAqIG1fdi54OwogIHlhID0gU19KICog
bV92Lnk7CiAgemEgPSBTX0sgKiBtX3YuejsKICBwcFswXSA9IG1fcDsKICBwcFsxXSA9IG1fcCt4
YTsKICBwcFsyXSA9IHBwWzFdK3lhOwogIHBwWzNdID0gcHBbMl0teGE7CiAgcHBbNF0gPSBwcFsw
XSt6YTsKICBwcFs1XSA9IHBwWzFdK3phOwogIHBwWzZdID0gcHBbMl0remE7CiAgcHBbN10gPSBw
cFszXSt6YTsKfQoKCgp2b2lkIFNCb3g6OkdldEJveENvbnQoU1NlZ0NvbnQgJmNjKSBjb25zdAp7
CiAgU1BvaW50IHBzWzhdOwogIEdldDhQb2ludHMocHMpOwogIGNjLkFkZChuZXcgU0xpbmUocHNb
MF0sIHBzWzFdKSk7CiAgY2MuQWRkKG5ldyBTTGluZShwc1sxXSwgcHNbMl0pKTsKICBjYy5BZGQo
bmV3IFNMaW5lKHBzWzJdLCBwc1szXSkpOwogIGNjLkFkZChuZXcgU0xpbmUocHNbM10sIHBzWzBd
KSk7CiAgY2MuQWRkKG5ldyBTTGluZShwc1s0XSwgcHNbNV0pKTsKICBjYy5BZGQobmV3IFNMaW5l
KHBzWzVdLCBwc1s2XSkpOwogIGNjLkFkZChuZXcgU0xpbmUocHNbNl0sIHBzWzddKSk7CiAgY2Mu
QWRkKG5ldyBTTGluZShwc1s3XSwgcHNbNF0pKTsKICBjYy5BZGQobmV3IFNMaW5lKHBzWzBdLCBw
c1s0XSkpOwogIGNjLkFkZChuZXcgU0xpbmUocHNbMV0sIHBzWzVdKSk7CiAgY2MuQWRkKG5ldyBT
TGluZShwc1syXSwgcHNbNl0pKTsKICBjYy5BZGQobmV3IFNMaW5lKHBzWzNdLCBwc1s3XSkpOwp9
Cg==


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: c++/3101: ICE -- seg. fault compiling and encountering C::Angle(...)
@ 2001-06-14 19:21 rodrigc
  0 siblings, 0 replies; 3+ messages in thread
From: rodrigc @ 2001-06-14 19:21 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, ltuikov, nobody, rodrigc

Synopsis: ICE -- seg. fault compiling and encountering C::Angle(...)

State-Changed-From-To: open->closed
State-Changed-By: rodrigc
State-Changed-When: Thu Jun 14 19:21:45 2001
State-Changed-Why:
    This does not crash with gcc 3.0 (prerelease).
    You are using the version of gcc distributed by
    Red Hat.  You should obtain the latest patchlevel version
    of this compiler from Red Hat, since the version you
    have has known bugs. 
    You can get the latest gcc version from
    ftp://rawhide.redhat.com

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=3101&database=gcc


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: c++/3101: ICE -- seg. fault compiling and encountering C::Angle(...)
@ 2001-06-09 22:16 Luben Tuikov
  0 siblings, 0 replies; 3+ messages in thread
From: Luben Tuikov @ 2001-06-09 22:16 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/3101; it has been noted by GNATS.

From: Luben Tuikov <ltuikov@yahoo.com>
To: gcc-gnats@gcc.gnu.org, nobody@gcc.gnu.org
Cc:  
Subject: Re: c++/3101: ICE -- seg. fault compiling and encountering C::Angle(...)
Date: Sat, 9 Jun 2001 22:11:26 -0700 (PDT)

 Ok,
 I figured it out:
 If a class' constructor uses default values for
 the parameters and then only few are set in an
 object definition -- then the compiler seg. faults!
 E.g:
 
 class A {
 public:
 	A(int a=0, int b=0, int c=1) { ... }
 	...
 }
 
 class B {
 public:
 	SomeMethod(A v = A(0,0));
 }
 
 Oops -- seg fault at line containing SomeMethod(...)!
 
 This is the problem with c++/3101...
 
 Will this be fixed...? or already has been?
 
 Luben
 
 
 --- gcc-gnats@gcc.gnu.org wrote:
 > Thank you very much for your problem report.
 > It has the internal identification `c++/3101'.
 > The individual assigned to look at your
 > report is: unassigned. 
 > 
 > >Category:       c++
 > >Responsible:    unassigned
 > >Synopsis:       ICE -- seg. fault compiling and
 > encountering C::Angle(...)
 > >Arrival-Date:   Sat Jun 09 15:36:00 PDT 2001
 
 
 __________________________________________________
 Do You Yahoo!?
 Get personalized email addresses from Yahoo! Mail - only $35 
 a year!  http://personal.mail.yahoo.com/


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2001-06-14 19:21 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-06-09 15:36 c++/3101: ICE -- seg. fault compiling and encountering C::Angle(...) ltuikov
2001-06-09 22:16 Luben Tuikov
2001-06-14 19:21 rodrigc

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).