public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/10635: g++ seg faluts on compile command
@ 2003-05-06  3:36 Shea.Williams
  0 siblings, 0 replies; only message in thread
From: Shea.Williams @ 2003-05-06  3:36 UTC (permalink / raw)
  To: gcc-gnats


>Number:         10635
>Category:       c++
>Synopsis:       g++ seg faluts on compile command
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue May 06 03:36:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Shea.Williams@colorado.edu
>Release:        gcc version 3.2.3 20030415 (Debian prerelease)
>Organization:
>Environment:
Debian GNU/Linux Sarge/Sid distribution
g++ -v produces:
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,objc,ada --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.2 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-java-gc=boehm --enable-objc-gc i386-linux
Thread model: posix
gcc version 3.2.3 20030415 (Debian prerelease)
>Description:
command below produces this:
 /usr/lib/gcc-lib/i386-linux/3.2.3/cpp0 -lang-c++ -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -v -I/home/williasp/payload/src/include -I/usr/local/qt-x11-free-3.0.6/include -I/home/williasp/payload/generic-sw/src/gstaci-framework/include -I/home/williasp/payload/generic-sw/src/gstaci-framework/built-source -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=3 -D__GXX_ABI_VERSION=102 -D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -D__ELF__ -D__unix__ -D__gnu_linux__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i386__ moc_timelabel.cpp -Wall moc_timelabel.ii
ignoring nonexistent directory "/home/williasp/payload/src/include"
GNU CPP version 3.2.3 20030415 (Debian prerelease) (cpplib) (i386 Linux/ELF)
ignoring nonexistent directory "/usr/i386-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/qt-x11-free-3.0.6/include
 /home/williasp/payload/generic-sw/src/gstaci-framework/include
 /home/williasp/payload/generic-sw/src/gstaci-framework/built-source
 /usr/include/c++/3.2
 /usr/include/c++/3.2/i386-linux
 /usr/include/c++/3.2/backward
 /usr/local/include
 /usr/lib/gcc-lib/i386-linux/3.2.3/include
 /usr/include
End of search list.
 /usr/lib/gcc-lib/i386-linux/3.2.3/cc1plus -fpreprocessed moc_timelabel.ii -quiet -dumpbase moc_timelabel.cpp -gstabs -Wall -version -o moc_timelabel.s
GNU CPP version 3.2.3 20030415 (Debian prerelease) (cpplib) (i386 Linux/ELF)
GNU C++ version 3.2.3 20030415 (Debian prerelease) (i386-linux)
        compiled by GNU C version 3.2.3 20030415 (Debian prerelease).
moc_timelabel.cpp: In member function `virtual bool TimeLabel::qt_invoke(int, 
   QUObject*)':
moc_timelabel.cpp:84: internal error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
>How-To-Repeat:
All I did was run the following:

g++ -Wall -I/home/williasp/payload/src/include -I/usr/local/qt-x11-free-3.0.6/include -I/home/williasp/payload/generic-sw/src/gstaci-framework/include -I/home/williasp/payload/generic-sw/src/gstaci-framework/built-source -gstabs -c moc_timelabel.cpp -o moc_timelabel.o
>Fix:

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

IyAxICJtb2NfdGltZWxhYmVsLmNwcCIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxp
bmU+IgojIDEgIm1vY190aW1lbGFiZWwuY3BwIgojIDExICJtb2NfdGltZWxhYmVsLmNwcCIKIyAx
ICIvaG9tZS93aWxsaWFzcC9wYXlsb2FkL2dlbmVyaWMtc3cvc3JjL2dzdGFjaS1mcmFtZXdvcmsv
aW5jbHVkZS90aW1lbGFiZWwuaCIgMQojIDE4ICIvaG9tZS93aWxsaWFzcC9wYXlsb2FkL2dlbmVy
aWMtc3cvc3JjL2dzdGFjaS1mcmFtZXdvcmsvaW5jbHVkZS90aW1lbGFiZWwuaCIKIyAxICIvdXNy
L2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWhib3guaCIgMQojIDM5ICIvdXNyL2xv
Y2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWhib3guaCIKIyAxICIvdXNyL2xvY2FsL3F0
LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXdpZGdldC5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQt
eDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xd2lkZ2V0LmgiCiMgMSAiL3Vzci9sb2NhbC9xdC14MTEt
ZnJlZS0zLjAuNi9pbmNsdWRlL3F3aW5kb3dkZWZzLmgiIDEKIyA0MyAiL3Vzci9sb2NhbC9xdC14
MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3F3aW5kb3dkZWZzLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC14
MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FvYmplY3RkZWZzLmgiIDEKIyA0MiAiL3Vzci9sb2NhbC9x
dC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FvYmplY3RkZWZzLmgiCiMgMSAiL3Vzci9sb2NhbC9x
dC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FnbG9iYWwuaCIgMQojIDUwNiAiL3Vzci9sb2NhbC9x
dC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FnbG9iYWwuaCIKdHlwZWRlZiB1bnNpZ25lZCBjaGFy
IHVjaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCB1
aW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWxvbmc7CnR5cGVkZWYgY2hhciAqcGNoYXI7CnR5
cGVkZWYgdWNoYXIgKnB1Y2hhcjsKdHlwZWRlZiBjb25zdCBjaGFyICpwY2NoYXI7CgoKCgoKCgpj
b25zdCBib29sIEZBTFNFID0gMDsKY29uc3QgYm9vbCBUUlVFID0gITA7CiMgNTUxICIvdXNyL2xv
Y2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWdsb2JhbC5oIgppbmxpbmUgaW50IHFSb3Vu
ZCggZG91YmxlIGQgKQp7CiAgICByZXR1cm4gaW50KCBkID49IDAuMCA/IGQgKyAwLjUgOiBkIC0g
MC41ICk7Cn0KIyA1NjMgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZ2xv
YmFsLmgiCnR5cGVkZWYgc2lnbmVkIGNoYXIgSU5UODsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJ
TlQ4Owp0eXBlZGVmIHNob3J0IElOVDE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVJTlQxNjsK
dHlwZWRlZiBpbnQgSU5UMzI7CnR5cGVkZWYgdW5zaWduZWQgaW50IFVJTlQzMjsKCgp0eXBlZGVm
IHNpZ25lZCBjaGFyIFFfSU5UODsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFFfVUlOVDg7CnR5cGVk
ZWYgc2hvcnQgUV9JTlQxNjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBRX1VJTlQxNjsKdHlwZWRl
ZiBpbnQgUV9JTlQzMjsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgUV9VSU5UMzI7CgoKCgoKCnR5cGVk
ZWYgbG9uZyBRX0xPTkc7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBRX1VMT05HOwojIDU5OCAiL3Vz
ci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FnbG9iYWwuaCIKY2xhc3MgUURhdGFT
dHJlYW07CiMgNjI5ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWdsb2Jh
bC5oIgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xY29uZmlnLmgi
IDEKIyA2MzAgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZ2xvYmFsLmgi
IDIKIyA2MzkgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZ2xvYmFsLmgi
CiMgMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3Ftb2R1bGVzLmgiIDEK
IyA2NDAgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZ2xvYmFsLmgiIDIK
IyA2ODggIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZ2xvYmFsLmgiCiMg
MSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FmZWF0dXJlcy5oIiAxCiMg
Njg5ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWdsb2JhbC5oIiAyCiMg
NzM0ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWdsb2JhbC5oIgogY29u
c3QgY2hhciAqcVZlcnNpb24oKTsKIGJvb2wgcVN5c0luZm8oIGludCAqd29yZFNpemUsIGJvb2wg
KmJpZ0VuZGlhbiApOwojIDgxNCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRl
L3FnbG9iYWwuaCIKIHZvaWQgcURlYnVnKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRy
aWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7Cgogdm9pZCBxV2FybmluZyggY29u
c3QgY2hhciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwg
MikpKQoKOwoKIHZvaWQgcUZhdGFsKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1
dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7Cgogdm9pZCBxU3lzdGVtV2FybmluZygg
Y29uc3QgY2hhciAqLCBpbnQgY29kZSA9IC0xICk7CgoKCgogdm9pZCBkZWJ1ZyggY29uc3QgY2hh
ciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoK
OwoKIHZvaWQgd2FybmluZyggY29uc3QgY2hhciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18g
KChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoKOwoKIHZvaWQgZmF0YWwoIGNvbnN0IGNoYXIgKiwg
Li4uICkKCiAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKCjsKIyA4
ODAgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZ2xvYmFsLmgiCiBib29s
IHF0X2NoZWNrX3BvaW50ZXIoIGJvb2wgYywgY29uc3QgY2hhciAqLCBpbnQgKTsKIyA4OTYgIi91
c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZ2xvYmFsLmgiCmVudW0gUXRNc2dU
eXBlIHsgUXREZWJ1Z01zZywgUXRXYXJuaW5nTXNnLCBRdEZhdGFsTXNnIH07Cgp0eXBlZGVmIHZv
aWQgKCpRdE1zZ0hhbmRsZXIpKFF0TXNnVHlwZSwgY29uc3QgY2hhciAqKTsKIFF0TXNnSGFuZGxl
ciBxSW5zdGFsbE1zZ0hhbmRsZXIoIFF0TXNnSGFuZGxlciApOwoKCgp0eXBlZGVmIFF0TXNnSGFu
ZGxlciBtc2dfaGFuZGxlcjsKCgogdm9pZCBxU3VwcHJlc3NPYnNvbGV0ZVdhcm5pbmdzKCBib29s
ID0gVFJVRSApOwoKIHZvaWQgcU9ic29sZXRlKCBjb25zdCBjaGFyICpvYmosIGNvbnN0IGNoYXIg
Km9sZGZ1bmMsCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuZXdmdW5jICk7CiB2b2lk
IHFPYnNvbGV0ZSggY29uc3QgY2hhciAqb2JqLCBjb25zdCBjaGFyICpvbGRmdW5jICk7CiB2b2lk
IHFPYnNvbGV0ZSggY29uc3QgY2hhciAqbWVzc2FnZSApOwojIDQzICIvdXNyL2xvY2FsL3F0LXgx
MS1mcmVlLTMuMC42L2luY2x1ZGUvcW9iamVjdGRlZnMuaCIgMgojIDcxICIvdXNyL2xvY2FsL3F0
LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcW9iamVjdGRlZnMuaCIKc3RydWN0IFFVT2JqZWN0Owoj
IDE1MSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FvYmplY3RkZWZzLmgi
CmNsYXNzIFFPYmplY3Q7CmNsYXNzIFFNZXRhT2JqZWN0OwpjbGFzcyBRU2lnbmFsOwpjbGFzcyBR
Q29ubmVjdGlvbjsKY2xhc3MgUUV2ZW50OwpzdHJ1Y3QgUU1ldGFEYXRhOwpjbGFzcyBRQ29ubmVj
dGlvbkxpc3Q7CmNsYXNzIFFDb25uZWN0aW9uTGlzdEl0OwpjbGFzcyBRU2lnbmFsVmVjOwpjbGFz
cyBRT2JqZWN0TGlzdDsKY2xhc3MgUU9iamVjdExpc3RJdDsKY2xhc3MgUU1lbWJlckRpY3Q7CiMg
NDQgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xd2luZG93ZGVmcy5oIiAy
CiMgMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FzdHJpbmcuaCIgMQoj
IDQzICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXN0cmluZy5oIgojIDEg
Ii91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xY3N0cmluZy5oIiAxCiMgNDMg
Ii91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xY3N0cmluZy5oIgojIDEgIi91
c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xbWVtYXJyYXkuaCIgMQojIDQyICIv
dXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcW1lbWFycmF5LmgiCiMgMSAiL3Vz
ci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FnYXJyYXkuaCIgMQojIDQyICIvdXNy
L2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWdhcnJheS5oIgojIDEgIi91c3IvbG9j
YWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xc2hhcmVkLmgiIDEKIyA0NiAiL3Vzci9sb2Nh
bC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FzaGFyZWQuaCIKc3RydWN0IFFTaGFyZWQKewog
ICAgUVNoYXJlZCgpIHsgY291bnQgPSAxOyB9CiAgICB2b2lkIHJlZigpIHsgY291bnQrKzsgfQog
ICAgYm9vbCBkZXJlZigpIHsgcmV0dXJuICEtLWNvdW50OyB9CiAgICB1aW50IGNvdW50Owp9Owoj
IDQzICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWdhcnJheS5oIiAyCgoK
CmNsYXNzIFFHQXJyYXkKewpmcmllbmQgY2xhc3MgUUJ1ZmZlcjsKcHVibGljOgoKICAgIHN0cnVj
dCBhcnJheV9kYXRhIDogcHVibGljIFFTaGFyZWQgewogICAgICAgIGFycmF5X2RhdGEoKSB7IGRh
dGE9MDsgbGVuPTA7IH0KICAgICAgICBjaGFyICpkYXRhOwogICAgICAgIHVpbnQgbGVuOwogICAg
fTsKICAgIFFHQXJyYXkoKTsKcHJvdGVjdGVkOgogICAgUUdBcnJheSggaW50LCBpbnQgKTsKICAg
IFFHQXJyYXkoIGludCBzaXplICk7CiAgICBRR0FycmF5KCBjb25zdCBRR0FycmF5ICZhICk7CiAg
ICB2aXJ0dWFsIH5RR0FycmF5KCk7CgogICAgUUdBcnJheSAmb3BlcmF0b3I9KCBjb25zdCBRR0Fy
cmF5ICZhICkgeyByZXR1cm4gYXNzaWduKCBhICk7IH0KCiAgICB2aXJ0dWFsIHZvaWQgZGV0YWNo
KCkgeyBkdXBsaWNhdGUoKnRoaXMpOyB9CgogICAgY2hhciAqZGF0YSgpIGNvbnN0IHsgcmV0dXJu
IHNoZC0+ZGF0YTsgfQogICAgdWludCBucmVmcygpIGNvbnN0IHsgcmV0dXJuIHNoZC0+Y291bnQ7
IH0KICAgIHVpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNoZC0+bGVuOyB9CiAgICBib29sIGlz
RXF1YWwoIGNvbnN0IFFHQXJyYXkgJmEgKSBjb25zdDsKCiAgICBib29sIHJlc2l6ZSggdWludCBu
ZXdzaXplICk7CgogICAgYm9vbCBmaWxsKCBjb25zdCBjaGFyICpkLCBpbnQgbGVuLCB1aW50IHN6
ICk7CgogICAgUUdBcnJheSAmYXNzaWduKCBjb25zdCBRR0FycmF5ICZhICk7CiAgICBRR0FycmF5
ICZhc3NpZ24oIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVuICk7CiAgICBRR0FycmF5ICZkdXBsaWNh
dGUoIGNvbnN0IFFHQXJyYXkgJmEgKTsKICAgIFFHQXJyYXkgJmR1cGxpY2F0ZSggY29uc3QgY2hh
ciAqZCwgdWludCBsZW4gKTsKICAgIHZvaWQgc3RvcmUoIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVu
ICk7CgogICAgYXJyYXlfZGF0YSAqc2hhcmVkQmxvY2soKSBjb25zdCB7IHJldHVybiBzaGQ7IH0K
ICAgIHZvaWQgc2V0U2hhcmVkQmxvY2soIGFycmF5X2RhdGEgKnAgKSB7IHNoZD0oYXJyYXlfZGF0
YSopcDsgfQoKICAgIFFHQXJyYXkgJnNldFJhd0RhdGEoIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVu
ICk7CiAgICB2b2lkIHJlc2V0UmF3RGF0YSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKCiAg
ICBpbnQgZmluZCggY29uc3QgY2hhciAqZCwgdWludCBpbmRleCwgdWludCBzeiApIGNvbnN0Owog
ICAgaW50IGNvbnRhaW5zKCBjb25zdCBjaGFyICpkLCB1aW50IHN6ICkgY29uc3Q7CgogICAgdm9p
ZCBzb3J0KCB1aW50IHN6ICk7CiAgICBpbnQgYnNlYXJjaCggY29uc3QgY2hhciAqZCwgdWludCBz
eiApIGNvbnN0OwoKICAgIGNoYXIgKmF0KCB1aW50IGluZGV4ICkgY29uc3Q7CgogICAgYm9vbCBz
ZXRFeHBhbmQoIHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKmQsIHVpbnQgc3ogKTsKCnByb3RlY3Rl
ZDoKICAgIHZpcnR1YWwgYXJyYXlfZGF0YSAqbmV3RGF0YSgpOwogICAgdmlydHVhbCB2b2lkIGRl
bGV0ZURhdGEoIGFycmF5X2RhdGEgKnAgKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgdm9pZCBtc2df
aW5kZXgoIHVpbnQgKTsKICAgIGFycmF5X2RhdGEgKnNoZDsKfTsKCgppbmxpbmUgY2hhciAqUUdB
cnJheTo6YXQoIHVpbnQgaW5kZXggKSBjb25zdAp7CgogICAgaWYgKCBpbmRleCA+PSBzaXplKCkg
KSB7CiAgICAgICAgbXNnX2luZGV4KCBpbmRleCApOwogICAgICAgIGluZGV4ID0gMDsKICAgIH0K
CiAgICByZXR1cm4gJnNoZC0+ZGF0YVtpbmRleF07Cn0KIyA0MyAiL3Vzci9sb2NhbC9xdC14MTEt
ZnJlZS0zLjAuNi9pbmNsdWRlL3FtZW1hcnJheS5oIiAyCgoKCnRlbXBsYXRlPGNsYXNzIHR5cGU+
CmNsYXNzIFFNZW1BcnJheQo6IHB1YmxpYyBRR0FycmF5CnsKcHVibGljOgogICAgdHlwZWRlZiB0
eXBlKiBJdGVyYXRvcjsKICAgIHR5cGVkZWYgY29uc3QgdHlwZSogQ29uc3RJdGVyYXRvcjsKICAg
IHR5cGVkZWYgdHlwZSBWYWx1ZVR5cGU7Cgpwcm90ZWN0ZWQ6CiAgICBRTWVtQXJyYXkoIGludCwg
aW50ICkgOiBRR0FycmF5KCAwLCAwICkge30KCnB1YmxpYzoKICAgIFFNZW1BcnJheSgpIHt9CiAg
ICBRTWVtQXJyYXkoIGludCBzaXplICkgOiBRR0FycmF5KHNpemUqc2l6ZW9mKHR5cGUpKSB7fQog
ICAgUU1lbUFycmF5KCBjb25zdCBRTWVtQXJyYXk8dHlwZT4gJmEgKSA6IFFHQXJyYXkoYSkge30K
ICAgflFNZW1BcnJheSgpIHt9CiAgICBRTWVtQXJyYXk8dHlwZT4gJm9wZXJhdG9yPShjb25zdCBR
TWVtQXJyYXk8dHlwZT4gJmEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1
cm4gKFFNZW1BcnJheTx0eXBlPiYpUUdBcnJheTo6YXNzaWduKGEpOyB9CiAgICB0eXBlICpkYXRh
KCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0FycmF5OjpkYXRhKCk7IH0KICAgIHVpbnQgbnJl
ZnMoKSBjb25zdCB7IHJldHVybiBRR0FycmF5OjpucmVmcygpOyB9CiAgICB1aW50IHNpemUoKSBj
b25zdCB7IHJldHVybiBRR0FycmF5OjpzaXplKCkvc2l6ZW9mKHR5cGUpOyB9CiAgICB1aW50IGNv
dW50KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpOyB9CiAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBRR0FycmF5OjpzaXplKCkgPT0gMDsgfQogICAgYm9vbCBpc051bGwoKSBjb25zdCB7
IHJldHVybiBRR0FycmF5OjpkYXRhKCkgPT0gMDsgfQogICAgYm9vbCByZXNpemUoIHVpbnQgc2l6
ZSApIHsgcmV0dXJuIFFHQXJyYXk6OnJlc2l6ZShzaXplKnNpemVvZih0eXBlKSk7IH0KICAgIGJv
b2wgdHJ1bmNhdGUoIHVpbnQgcG9zICkgeyByZXR1cm4gUUdBcnJheTo6cmVzaXplKHBvcypzaXpl
b2YodHlwZSkpOyB9CiAgICBib29sIGZpbGwoIGNvbnN0IHR5cGUgJmQsIGludCBzaXplID0gLTEg
KQogICAgICAgIHsgcmV0dXJuIFFHQXJyYXk6OmZpbGwoKGNoYXIqKSZkLHNpemUsc2l6ZW9mKHR5
cGUpICk7IH0KICAgIHZvaWQgZGV0YWNoKCkgeyBRR0FycmF5OjpkZXRhY2goKTsgfQogICAgUU1l
bUFycmF5PHR5cGU+IGNvcHkoKSBjb25zdAogICAgICAgIHsgUU1lbUFycmF5PHR5cGU+IHRtcDsg
cmV0dXJuIHRtcC5kdXBsaWNhdGUoKnRoaXMpOyB9CiAgICBRTWVtQXJyYXk8dHlwZT4mIGFzc2ln
biggY29uc3QgUU1lbUFycmF5PHR5cGU+JiBhICkKICAgICAgICB7IHJldHVybiAoUU1lbUFycmF5
PHR5cGU+JilRR0FycmF5Ojphc3NpZ24oYSk7IH0KICAgIFFNZW1BcnJheTx0eXBlPiYgYXNzaWdu
KCBjb25zdCB0eXBlICphLCB1aW50IG4gKQogICAgICAgIHsgcmV0dXJuIChRTWVtQXJyYXk8dHlw
ZT4mKVFHQXJyYXk6OmFzc2lnbigoY2hhciopYSxuKnNpemVvZih0eXBlKSk7IH0KICAgIFFNZW1B
cnJheTx0eXBlPiYgZHVwbGljYXRlKCBjb25zdCBRTWVtQXJyYXk8dHlwZT4mIGEgKQogICAgICAg
IHsgcmV0dXJuIChRTWVtQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmR1cGxpY2F0ZShhKTsgfQogICAg
UU1lbUFycmF5PHR5cGU+JiBkdXBsaWNhdGUoIGNvbnN0IHR5cGUgKmEsIHVpbnQgbiApCiAgICAg
ICAgeyByZXR1cm4gKFFNZW1BcnJheTx0eXBlPiYpUUdBcnJheTo6ZHVwbGljYXRlKChjaGFyKilh
LG4qc2l6ZW9mKHR5cGUpKTsgfQogICAgUU1lbUFycmF5PHR5cGU+JiBzZXRSYXdEYXRhKCBjb25z
dCB0eXBlICphLCB1aW50IG4gKQogICAgICAgIHsgcmV0dXJuIChRTWVtQXJyYXk8dHlwZT4mKVFH
QXJyYXk6OnNldFJhd0RhdGEoKGNoYXIqKWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbipzaXplb2YodHlwZSkpOyB9CiAgICB2b2lkIHJlc2V0
UmF3RGF0YSggY29uc3QgdHlwZSAqYSwgdWludCBuICkKICAgICAgICB7IFFHQXJyYXk6OnJlc2V0
UmF3RGF0YSgoY2hhciopYSxuKnNpemVvZih0eXBlKSk7IH0KICAgIGludCBmaW5kKCBjb25zdCB0
eXBlICZkLCB1aW50IGk9MCApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gUUdBcnJheTo6ZmluZCgo
Y2hhciopJmQsaSxzaXplb2YodHlwZSkpOyB9CiAgICBpbnQgY29udGFpbnMoIGNvbnN0IHR5cGUg
JmQgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIFFHQXJyYXk6OmNvbnRhaW5zKChjaGFyKikmZCxz
aXplb2YodHlwZSkpOyB9CiAgICB2b2lkIHNvcnQoKSB7IFFHQXJyYXk6OnNvcnQoc2l6ZW9mKHR5
cGUpKTsgfQogICAgaW50IGJzZWFyY2goIGNvbnN0IHR5cGUgJmQgKSBjb25zdAogICAgICAgIHsg
cmV0dXJuIFFHQXJyYXk6OmJzZWFyY2goKGNvbnN0IGNoYXIqKSZkLHNpemVvZih0eXBlKSk7IH0K
ICAgIHR5cGUmIG9wZXJhdG9yW10oIGludCBpICkgY29uc3QKICAgICAgICB7IHJldHVybiAodHlw
ZSAmKSgqKHR5cGUgKilRR0FycmF5OjphdChpKnNpemVvZih0eXBlKSkpOyB9CiAgICB0eXBlJiBh
dCggdWludCBpICkgY29uc3QKICAgICAgICB7IHJldHVybiAodHlwZSAmKSgqKHR5cGUgKilRR0Fy
cmF5OjphdChpKnNpemVvZih0eXBlKSkpOyB9CiAgICAgICAgIG9wZXJhdG9yIGNvbnN0IHR5cGUq
KCkgY29uc3QgeyByZXR1cm4gKGNvbnN0IHR5cGUgKilRR0FycmF5OjpkYXRhKCk7IH0KICAgIGJv
b2wgb3BlcmF0b3I9PSggY29uc3QgUU1lbUFycmF5PHR5cGU+ICZhICkgY29uc3QgeyByZXR1cm4g
aXNFcXVhbChhKTsgfQogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRTWVtQXJyYXk8dHlwZT4g
JmEgKSBjb25zdCB7IHJldHVybiAhaXNFcXVhbChhKTsgfQogICAgSXRlcmF0b3IgYmVnaW4oKSB7
IHJldHVybiBkYXRhKCk7IH0KICAgIEl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGRhdGEoKSArIHNp
emUoKTsgfQogICAgQ29uc3RJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGRhdGEoKTsg
fQogICAgQ29uc3RJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBkYXRhKCkgKyBzaXplKCk7
IH0KfTsKIyA0NCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3Fjc3RyaW5n
LmgiIDIKCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVk
ZS9zdHJpbmcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOTEgIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAx
IDMKIyAyOTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMTQgIi91c3IvaW5jbHVk
ZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMTUg
Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N0cmluZy5o
IiAyIDMKCmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv
My4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjEzICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
bGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXpl
X3Q7CiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqbWVt
Y3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4g
dm9pZCAqbWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19y
ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAg
ICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQg
Kl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNp
emVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoK
CmV4dGVybiB2b2lkICpyYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtcmNociAo
X19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIg
Kl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAg
dGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3Qs
CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNp
emVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJp
Y3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7
CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24p
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u
c3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f
czIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq
X19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBz
aXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNs
dWRlL3hsb2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewoKICBzdHJ1
Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBp
bnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQg
Kl9fY3R5cGVfdG91cHBlcjsKCgogIGNvbnN0IGNoYXIgKl9fbmFtZXNbMTNdOwp9ICpfX2xvY2Fs
ZV90OwojIDExNSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgpleHRlcm4gaW50IHN0cmNv
bGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIF9fbG9jYWxlX3Qg
X19sKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNp
emVfdCBzdHJ4ZnJtX2wgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19j
b25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19tYWxsb2NfXykpOwojIDE2MCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoKZXh0
ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3Qg
Y2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHNpemVfdCBz
dHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNw
biAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19j
b25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNo
YXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9f
cmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0aHJv
dyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGlt
LAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikg
dGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpz
dHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVk
bGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKCmV4dGVy
biB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3Rh
Y2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNpemVf
dCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9f
ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3Ny
Yywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29u
c3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpl
eHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21h
eGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRl
cm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh
ciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVu
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9f
bikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2
b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2
b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25z
dCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2Nv
bnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IGZmcyAoaW50
IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGlu
dCBmZnNsIChsb25nIGludCBfX2wpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQg
c3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJuY2Fz
ZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24p
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGlu
dCBzdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jYXNlY21wX2wgKF9fY29uc3Qg
Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJp
Y3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3Qg
Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgdGhy
b3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9fc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hh
ciAqc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFy
ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0
cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl
cm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQg
Km1lbWZyb2IgKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBj
aGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKIyAzNzkg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwp9CiMgNDcgIi91c3IvbG9jYWwvcXQteDExLWZyZWUt
My4wLjYvaW5jbHVkZS9xY3N0cmluZy5oIiAyCgoKCgoKCiB2b2lkICpxbWVtbW92ZSggdm9pZCAq
ZHN0LCBjb25zdCB2b2lkICpzcmMsIHVpbnQgbGVuICk7CgogY2hhciAqcXN0cmR1cCggY29uc3Qg
Y2hhciAqICk7CgogaW5saW5lIHVpbnQgcXN0cmxlbiggY29uc3QgY2hhciAqc3RyICkKeyByZXR1
cm4gc3RyID8gKHVpbnQpc3RybGVuKHN0cikgOiAwOyB9CgogaW5saW5lIGNoYXIgKnFzdHJjcHko
IGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjICkKeyByZXR1cm4gc3JjID8gc3RyY3B5KGRzdCwg
c3JjKSA6IDA7IH0KCiBjaGFyICpxc3RybmNweSggY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMs
IHVpbnQgbGVuICk7CgogaW5saW5lIGludCBxc3RyY21wKCBjb25zdCBjaGFyICpzdHIxLCBjb25z
dCBjaGFyICpzdHIyICkKewogICAgcmV0dXJuICggc3RyMSAmJiBzdHIyICkgPyBzdHJjbXAoIHN0
cjEsIHN0cjIgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIHN0cjEgPyAxIDogKCBz
dHIyID8gLTEgOiAwICkgKTsKfQoKIGlubGluZSBpbnQgcXN0cm5jbXAoIGNvbnN0IGNoYXIgKnN0
cjEsIGNvbnN0IGNoYXIgKnN0cjIsIHVpbnQgbGVuICkKewogICAgcmV0dXJuICggc3RyMSAmJiBz
dHIyICkgPyBzdHJuY21wKCBzdHIxLCBzdHIyLCBsZW4gKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiAoIHN0cjEgPyAxIDogKCBzdHIyID8gLTEgOiAwICkgKTsKfQoKIGludCBxc3RyaWNt
cCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKCiBpbnQgcXN0cm5pY21wKCBjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKiwgdWludCBsZW4gKTsKCgogaW5saW5lIHVpbnQgY3N0cmxlbigg
Y29uc3QgY2hhciAqc3RyICkKeyByZXR1cm4gKHVpbnQpc3RybGVuKHN0cik7IH0KCiBpbmxpbmUg
Y2hhciAqY3N0cmNweSggY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMgKQp7IHJldHVybiBzdHJj
cHkoZHN0LHNyYyk7IH0KCiBpbmxpbmUgaW50IGNzdHJjbXAoIGNvbnN0IGNoYXIgKnN0cjEsIGNv
bnN0IGNoYXIgKnN0cjIgKQp7IHJldHVybiBzdHJjbXAoc3RyMSxzdHIyKTsgfQoKIGlubGluZSBp
bnQgY3N0cm5jbXAoIGNvbnN0IGNoYXIgKnN0cjEsIGNvbnN0IGNoYXIgKnN0cjIsIHVpbnQgbGVu
ICkKeyByZXR1cm4gc3RybmNtcChzdHIxLHN0cjIsbGVuKTsgfQoKCgoKCiBRX1VJTlQxNiBxQ2hl
Y2tzdW0oIGNvbnN0IGNoYXIgKnMsIHVpbnQgbGVuICk7CiMgMTIwICIvdXNyL2xvY2FsL3F0LXgx
MS1mcmVlLTMuMC42L2luY2x1ZGUvcWNzdHJpbmcuaCIKdHlwZWRlZiBRTWVtQXJyYXk8Y2hhcj4g
UUJ5dGVBcnJheTsKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAm
LCBjb25zdCBRQnl0ZUFycmF5ICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0
cmVhbSAmLCBRQnl0ZUFycmF5ICYgKTsKIyAxMzcgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4w
LjYvaW5jbHVkZS9xY3N0cmluZy5oIgpjbGFzcyBRUmVnRXhwOwoKY2xhc3MgUUNTdHJpbmcgOiBw
dWJsaWMgUUJ5dGVBcnJheQp7CnB1YmxpYzoKICAgIFFDU3RyaW5nKCkge30KICAgIFFDU3RyaW5n
KCBpbnQgc2l6ZSApOwogICAgUUNTdHJpbmcoIGNvbnN0IFFDU3RyaW5nICZzICkgOiBRQnl0ZUFy
cmF5KCBzICkge30KICAgIFFDU3RyaW5nKCBjb25zdCBjaGFyICpzdHIgKTsKICAgIFFDU3RyaW5n
KCBjb25zdCBjaGFyICpzdHIsIHVpbnQgbWF4bGVuICk7CiAgICB+UUNTdHJpbmcoKTsKCiAgICBR
Q1N0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBRQ1N0cmluZyAmcyApOwogICAgUUNTdHJpbmcgJm9w
ZXJhdG9yPSggY29uc3QgY2hhciAqc3RyICk7CgogICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgdWludCBsZW5ndGgoKSBjb25zdDsKICAgIGJvb2wg
cmVzaXplKCB1aW50IG5ld2xlbiApOwogICAgYm9vbCB0cnVuY2F0ZSggdWludCBwb3MgKTsKICAg
IGJvb2wgZmlsbCggY2hhciBjLCBpbnQgbGVuID0gLTEgKTsKCiAgICBRQ1N0cmluZyBjb3B5KCkg
Y29uc3Q7CgogICAgUUNTdHJpbmcgJnNwcmludGYoIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uICk7
CgogICAgaW50IGZpbmQoIGNoYXIgYywgaW50IGluZGV4PTAsIGJvb2wgY3M9VFJVRSApIGNvbnN0
OwogICAgaW50IGZpbmQoIGNvbnN0IGNoYXIgKnN0ciwgaW50IGluZGV4PTAsIGJvb2wgY3M9VFJV
RSApIGNvbnN0OwoKICAgIGludCBmaW5kKCBjb25zdCBRUmVnRXhwICYsIGludCBpbmRleD0wICkg
Y29uc3Q7CgogICAgaW50IGZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4PS0xLCBib29sIGNzPVRS
VUUpIGNvbnN0OwogICAgaW50IGZpbmRSZXYoIGNvbnN0IGNoYXIgKnN0ciwgaW50IGluZGV4PS0x
LCBib29sIGNzPVRSVUUpIGNvbnN0OwoKICAgIGludCBmaW5kUmV2KCBjb25zdCBRUmVnRXhwICYs
IGludCBpbmRleD0tMSApIGNvbnN0OwoKICAgIGludCBjb250YWlucyggY2hhciBjLCBib29sIGNz
PVRSVUUgKSBjb25zdDsKICAgIGludCBjb250YWlucyggY29uc3QgY2hhciAqc3RyLCBib29sIGNz
PVRSVUUgKSBjb25zdDsKCiAgICBpbnQgY29udGFpbnMoIGNvbnN0IFFSZWdFeHAgJiApIGNvbnN0
OwoKICAgIFFDU3RyaW5nIGxlZnQoIHVpbnQgbGVuICkgY29uc3Q7CiAgICBRQ1N0cmluZyByaWdo
dCggdWludCBsZW4gKSBjb25zdDsKICAgIFFDU3RyaW5nIG1pZCggdWludCBpbmRleCwgdWludCBs
ZW49MHhmZmZmZmZmZikgY29uc3Q7CgogICAgUUNTdHJpbmcgbGVmdEp1c3RpZnkoIHVpbnQgd2lk
dGgsIGNoYXIgZmlsbD0nICcsIGJvb2wgdHJ1bmM9RkFMU0UpY29uc3Q7CiAgICBRQ1N0cmluZyBy
aWdodEp1c3RpZnkoIHVpbnQgd2lkdGgsIGNoYXIgZmlsbD0nICcsYm9vbCB0cnVuYz1GQUxTRSlj
b25zdDsKCiAgICBRQ1N0cmluZyBsb3dlcigpIGNvbnN0OwogICAgUUNTdHJpbmcgdXBwZXIoKSBj
b25zdDsKCiAgICBRQ1N0cmluZyBzdHJpcFdoaXRlU3BhY2UoKSBjb25zdDsKICAgIFFDU3RyaW5n
IHNpbXBsaWZ5V2hpdGVTcGFjZSgpIGNvbnN0OwoKICAgIFFDU3RyaW5nICZpbnNlcnQoIHVpbnQg
aW5kZXgsIGNvbnN0IGNoYXIgKiApOwogICAgUUNTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwg
Y2hhciApOwogICAgUUNTdHJpbmcgJmFwcGVuZCggY29uc3QgY2hhciAqICk7CiAgICBRQ1N0cmlu
ZyAmcHJlcGVuZCggY29uc3QgY2hhciAqICk7CiAgICBRQ1N0cmluZyAmcmVtb3ZlKCB1aW50IGlu
ZGV4LCB1aW50IGxlbiApOwogICAgUUNTdHJpbmcgJnJlcGxhY2UoIHVpbnQgaW5kZXgsIHVpbnQg
bGVuLCBjb25zdCBjaGFyICogKTsKCiAgICBRQ1N0cmluZyAmcmVwbGFjZSggY29uc3QgUVJlZ0V4
cCAmLCBjb25zdCBjaGFyICogKTsKCiAgICBzaG9ydCB0b1Nob3J0KCBib29sICpvaz0wICkgY29u
c3Q7CiAgICB1c2hvcnQgdG9VU2hvcnQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIGludCB0b0lu
dCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgdWludCB0b1VJbnQoIGJvb2wgKm9rPTAgKSBjb25z
dDsKICAgIGxvbmcgdG9Mb25nKCBib29sICpvaz0wICkgY29uc3Q7CiAgICB1bG9uZyB0b1VMb25n
KCBib29sICpvaz0wICkgY29uc3Q7CiAgICBmbG9hdCB0b0Zsb2F0KCBib29sICpvaz0wICkgY29u
c3Q7CiAgICBkb3VibGUgdG9Eb3VibGUoIGJvb2wgKm9rPTAgKSBjb25zdDsKCiAgICBRQ1N0cmlu
ZyAmc2V0U3RyKCBjb25zdCBjaGFyICpzICk7CiAgICBRQ1N0cmluZyAmc2V0TnVtKCBzaG9ydCAp
OwogICAgUUNTdHJpbmcgJnNldE51bSggdXNob3J0ICk7CiAgICBRQ1N0cmluZyAmc2V0TnVtKCBp
bnQgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIHVpbnQgKTsKICAgIFFDU3RyaW5nICZzZXROdW0o
IGxvbmcgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIHVsb25nICk7CiAgICBRQ1N0cmluZyAmc2V0
TnVtKCBmbG9hdCwgY2hhciBmPSdnJywgaW50IHByZWM9NiApOwogICAgUUNTdHJpbmcgJnNldE51
bSggZG91YmxlLCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CgogICAgYm9vbCBzZXRFeHBhbmQo
IHVpbnQgaW5kZXgsIGNoYXIgYyApOwoKICAgICAgICAgICAgICAgIG9wZXJhdG9yIGNvbnN0IGNo
YXIgKigpIGNvbnN0OwogICAgUUNTdHJpbmcgJm9wZXJhdG9yKz0oIGNvbnN0IGNoYXIgKnN0ciAp
OwogICAgUUNTdHJpbmcgJm9wZXJhdG9yKz0oIGNoYXIgYyApOwp9OwoKCgoKCgogUURhdGFTdHJl
YW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFDU3RyaW5nICYgKTsKIFFEYXRh
U3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRQ1N0cmluZyAmICk7CgoKCgoKCmlu
bGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6Om9wZXJhdG9yPSggY29uc3QgUUNTdHJpbmcgJnMgKQp7
IHJldHVybiAoUUNTdHJpbmcmKWFzc2lnbiggcyApOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3Ry
aW5nOjpvcGVyYXRvcj0oIGNvbnN0IGNoYXIgKnN0ciApCnsgcmV0dXJuIChRQ1N0cmluZyYpZHVw
bGljYXRlKCBzdHIsIHFzdHJsZW4oc3RyKSsxICk7IH0KCmlubGluZSBib29sIFFDU3RyaW5nOjpp
c051bGwoKSBjb25zdAp7IHJldHVybiBkYXRhKCkgPT0gMDsgfQoKaW5saW5lIGJvb2wgUUNTdHJp
bmc6OmlzRW1wdHkoKSBjb25zdAp7IHJldHVybiBkYXRhKCkgPT0gMCB8fCAqZGF0YSgpID09ICdc
MCc7IH0KCmlubGluZSB1aW50IFFDU3RyaW5nOjpsZW5ndGgoKSBjb25zdAp7IHJldHVybiBxc3Ry
bGVuKCBkYXRhKCkgKTsgfQoKaW5saW5lIGJvb2wgUUNTdHJpbmc6OnRydW5jYXRlKCB1aW50IHBv
cyApCnsgcmV0dXJuIHJlc2l6ZShwb3MrMSk7IH0KCmlubGluZSBRQ1N0cmluZyBRQ1N0cmluZzo6
Y29weSgpIGNvbnN0CnsgcmV0dXJuIFFDU3RyaW5nKCBkYXRhKCkgKTsgfQoKaW5saW5lIFFDU3Ry
aW5nICZRQ1N0cmluZzo6cHJlcGVuZCggY29uc3QgY2hhciAqcyApCnsgcmV0dXJuIGluc2VydCgw
LHMpOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjphcHBlbmQoIGNvbnN0IGNoYXIgKnMg
KQp7IHJldHVybiBvcGVyYXRvcis9KHMpOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpz
ZXROdW0oIHNob3J0IG4gKQp7IHJldHVybiBzZXROdW0oKGxvbmcpbik7IH0KCmlubGluZSBRQ1N0
cmluZyAmUUNTdHJpbmc6OnNldE51bSggdXNob3J0IG4gKQp7IHJldHVybiBzZXROdW0oKHVsb25n
KW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXROdW0oIGludCBuICkKeyByZXR1
cm4gc2V0TnVtKChsb25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXROdW0o
IHVpbnQgbiApCnsgcmV0dXJuIHNldE51bSgodWxvbmcpbik7IH0KCmlubGluZSBRQ1N0cmluZyAm
UUNTdHJpbmc6OnNldE51bSggZmxvYXQgbiwgY2hhciBmLCBpbnQgcHJlYyApCnsgcmV0dXJuIHNl
dE51bSgoZG91YmxlKW4sZixwcmVjKTsgfQoKaW5saW5lIFFDU3RyaW5nOjpvcGVyYXRvciBjb25z
dCBjaGFyICooKSBjb25zdAp7IHJldHVybiAoY29uc3QgY2hhciAqKWRhdGEoKTsgfQoKCgoKCgog
aW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBRQ1N0cmlu
ZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMi5kYXRhKCkpID09IDA7IH0KCiBp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMy
ICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIpID09IDA7IH0KCiBpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4g
cXN0cmNtcChzMSxzMi5kYXRhKCkpID09IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBj
b25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAo
czEuZGF0YSgpLHMyLmRhdGEoKSkgIT0gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNv
bnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRh
dGEoKSxzMikgIT0gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IGNoYXIgKnMx
LCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLHMyLmRhdGEoKSkgIT0g
MDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPCggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBR
Q1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMi5kYXRhKCkpIDwgMDsg
fQoKIGlubGluZSBib29sIG9wZXJhdG9yPCggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFy
ICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyKSA8IDA7IH0KCiBpbmxpbmUgYm9v
bCBvcGVyYXRvcjwoIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVy
biBxc3RyY21wKHMxLHMyLmRhdGEoKSkgPCAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I8PSgg
Y29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21w
KHMxLmRhdGEoKSxzMi5kYXRhKCkpIDw9IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBj
b25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5k
YXRhKCksczIpIDw9IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBjaGFyICpz
MSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkpIDw9
IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj4oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3Qg
UUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIuZGF0YSgpKSA+IDA7
IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj4oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hh
ciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMikgPiAwOyB9CgogaW5saW5lIGJv
b2wgb3BlcmF0b3I+KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1
cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkpID4gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPj0o
IGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNt
cChzMS5kYXRhKCksczIuZGF0YSgpKSA+PSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I+PSgg
Y29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEu
ZGF0YSgpLHMyKSA+PSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgY2hhciAq
czEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSA+
PSAwOyB9CgogaW5saW5lIGNvbnN0IFFDU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUUNTdHJpbmcg
JnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMxLmRhdGEoKSAp
OwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlubGluZSBjb25zdCBRQ1N0cmlu
ZyBvcGVyYXRvcisoIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7CiAgICBR
Q1N0cmluZyB0bXAoIHMxLmRhdGEoKSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsK
fQoKIGlubGluZSBjb25zdCBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IGNoYXIgKnMxLCBjb25z
dCBRQ1N0cmluZyAmczIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gczI7
CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5lIGNvbnN0IFFDU3RyaW5nIG9wZXJhdG9yKyggY29u
c3QgUUNTdHJpbmcgJnMxLCBjaGFyIGMyICkKewogICAgUUNTdHJpbmcgdG1wKCBzMS5kYXRhKCkg
KTsKICAgIHRtcCArPSBjMjsKICAgIHJldHVybiB0bXA7Cn0KCiBpbmxpbmUgY29uc3QgUUNTdHJp
bmcgb3BlcmF0b3IrKCBjaGFyIGMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7CiAgICBRQ1N0cmlu
ZyB0bXA7CiAgICB0bXAgKz0gYzE7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CiMg
NDQgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xc3RyaW5nLmgiIDIKCgoK
CgoKCmNsYXNzIFFSZWdFeHA7CmNsYXNzIFFTdHJpbmc7CmNsYXNzIFFDaGFyUmVmOwoKY2xhc3Mg
UUNoYXIgewpwdWJsaWM6CiAgICBRQ2hhcigpOwogICAgUUNoYXIoIGNoYXIgYyApOwogICAgUUNo
YXIoIHVjaGFyIGMgKTsKICAgIFFDaGFyKCB1Y2hhciBjLCB1Y2hhciByICk7CiAgICBRQ2hhcigg
Y29uc3QgUUNoYXImIGMgKTsKICAgIFFDaGFyKCB1c2hvcnQgcmMgKTsKICAgIFFDaGFyKCBzaG9y
dCByYyApOwogICAgUUNoYXIoIHVpbnQgcmMgKTsKICAgIFFDaGFyKCBpbnQgcmMgKTsKCiAgICBz
dGF0aWMgY29uc3QgUUNoYXIgbnVsbDsKICAgIHN0YXRpYyBjb25zdCBRQ2hhciByZXBsYWNlbWVu
dDsKICAgIHN0YXRpYyBjb25zdCBRQ2hhciBieXRlT3JkZXJNYXJrOwogICAgc3RhdGljIGNvbnN0
IFFDaGFyIGJ5dGVPcmRlclN3YXBwZWQ7CiAgICBzdGF0aWMgY29uc3QgUUNoYXIgbmJzcDsKCgoK
ICAgIGVudW0gQ2F0ZWdvcnkKICAgIHsKICAgICAgICBOb0NhdGVnb3J5LAoKICAgICAgICBNYXJr
X05vblNwYWNpbmcsCiAgICAgICAgTWFya19TcGFjaW5nQ29tYmluaW5nLAogICAgICAgIE1hcmtf
RW5jbG9zaW5nLAoKICAgICAgICBOdW1iZXJfRGVjaW1hbERpZ2l0LAogICAgICAgIE51bWJlcl9M
ZXR0ZXIsCiAgICAgICAgTnVtYmVyX090aGVyLAoKICAgICAgICBTZXBhcmF0b3JfU3BhY2UsCiAg
ICAgICAgU2VwYXJhdG9yX0xpbmUsCiAgICAgICAgU2VwYXJhdG9yX1BhcmFncmFwaCwKCiAgICAg
ICAgT3RoZXJfQ29udHJvbCwKICAgICAgICBPdGhlcl9Gb3JtYXQsCiAgICAgICAgT3RoZXJfU3Vy
cm9nYXRlLAogICAgICAgIE90aGVyX1ByaXZhdGVVc2UsCiAgICAgICAgT3RoZXJfTm90QXNzaWdu
ZWQsCgogICAgICAgIExldHRlcl9VcHBlcmNhc2UsCiAgICAgICAgTGV0dGVyX0xvd2VyY2FzZSwK
ICAgICAgICBMZXR0ZXJfVGl0bGVjYXNlLAogICAgICAgIExldHRlcl9Nb2RpZmllciwKICAgICAg
ICBMZXR0ZXJfT3RoZXIsCgogICAgICAgIFB1bmN0dWF0aW9uX0Nvbm5lY3RvciwKICAgICAgICBQ
dW5jdHVhdGlvbl9EYXNoLAogICAgICAgIFB1bmN0dWF0aW9uX0Rhc2sgPSBQdW5jdHVhdGlvbl9E
YXNoLAogICAgICAgIFB1bmN0dWF0aW9uX09wZW4sCiAgICAgICAgUHVuY3R1YXRpb25fQ2xvc2Us
CiAgICAgICAgUHVuY3R1YXRpb25fSW5pdGlhbFF1b3RlLAogICAgICAgIFB1bmN0dWF0aW9uX0Zp
bmFsUXVvdGUsCiAgICAgICAgUHVuY3R1YXRpb25fT3RoZXIsCgogICAgICAgIFN5bWJvbF9NYXRo
LAogICAgICAgIFN5bWJvbF9DdXJyZW5jeSwKICAgICAgICBTeW1ib2xfTW9kaWZpZXIsCiAgICAg
ICAgU3ltYm9sX090aGVyCiAgICB9OwoKICAgIGVudW0gRGlyZWN0aW9uCiAgICB7CiAgICAgICAg
RGlyTCwgRGlyUiwgRGlyRU4sIERpckVTLCBEaXJFVCwgRGlyQU4sIERpckNTLCBEaXJCLCBEaXJT
LCBEaXJXUywgRGlyT04sCiAgICAgICAgRGlyTFJFLCBEaXJMUk8sIERpckFMLCBEaXJSTEUsIERp
clJMTywgRGlyUERGLCBEaXJOU00sIERpckJOCiAgICB9OwoKICAgIGVudW0gRGVjb21wb3NpdGlv
bgogICAgewogICAgICAgIFNpbmdsZSwgQ2Fub25pY2FsLCBGb250LCBOb0JyZWFrLCBJbml0aWFs
LCBNZWRpYWwsCiAgICAgICAgRmluYWwsIElzb2xhdGVkLCBDaXJjbGUsIFN1cGVyLCBTdWIsIFZl
cnRpY2FsLAogICAgICAgIFdpZGUsIE5hcnJvdywgU21hbGwsIFNxdWFyZSwgQ29tcGF0LCBGcmFj
dGlvbgogICAgfTsKCiAgICBlbnVtIEpvaW5pbmcKICAgIHsKICAgICAgICBPdGhlckpvaW5pbmcs
IER1YWwsIFJpZ2h0LCBDZW50ZXIKICAgIH07CgogICAgZW51bSBDb21iaW5pbmdDbGFzcwogICAg
ewogICAgICAgIENvbWJpbmluZ19CZWxvd0xlZnRBdHRhY2hlZCA9IDIwMCwKICAgICAgICBDb21i
aW5pbmdfQmVsb3dBdHRhY2hlZCA9IDIwMiwKICAgICAgICBDb21iaW5pbmdfQmVsb3dSaWdodEF0
dGFjaGVkID0gMjA0LAogICAgICAgIENvbWJpbmluZ19MZWZ0QXR0YWNoZWQgPSAyMDgsCiAgICAg
ICAgQ29tYmluaW5nX1JpZ2h0QXR0YWNoZWQgPSAyMTAsCiAgICAgICAgQ29tYmluaW5nX0Fib3Zl
TGVmdEF0dGFjaGVkID0gMjEyLAogICAgICAgIENvbWJpbmluZ19BYm92ZUF0dGFjaGVkID0gMjE0
LAogICAgICAgIENvbWJpbmluZ19BYm92ZVJpZ2h0QXR0YWNoZWQgPSAyMTYsCgogICAgICAgIENv
bWJpbmluZ19CZWxvd0xlZnQgPSAyMTgsCiAgICAgICAgQ29tYmluaW5nX0JlbG93ID0gMjIwLAog
ICAgICAgIENvbWJpbmluZ19CZWxvd1JpZ2h0ID0gMjIyLAogICAgICAgIENvbWJpbmluZ19MZWZ0
ID0gMjI0LAogICAgICAgIENvbWJpbmluZ19SaWdodCA9IDIyNiwKICAgICAgICBDb21iaW5pbmdf
QWJvdmVMZWZ0ID0gMjI4LAogICAgICAgIENvbWJpbmluZ19BYm92ZSA9IDIzMCwKICAgICAgICBD
b21iaW5pbmdfQWJvdmVSaWdodCA9IDIzMiwKCiAgICAgICAgQ29tYmluaW5nX0RvdWJsZUJlbG93
ID0gMjMzLAogICAgICAgIENvbWJpbmluZ19Eb3VibGVBYm92ZSA9IDIzNCwKICAgICAgICBDb21i
aW5pbmdfSW90YVN1YnNjcmlwdCA9IDI0MAogICAgfTsKCgoKICAgIGludCBkaWdpdFZhbHVlKCkg
Y29uc3Q7CiAgICBRQ2hhciBsb3dlcigpIGNvbnN0OwogICAgUUNoYXIgdXBwZXIoKSBjb25zdDsK
CiAgICBDYXRlZ29yeSBjYXRlZ29yeSgpIGNvbnN0OwogICAgRGlyZWN0aW9uIGRpcmVjdGlvbigp
IGNvbnN0OwogICAgSm9pbmluZyBqb2luaW5nKCkgY29uc3Q7CiAgICBib29sIG1pcnJvcmVkKCkg
Y29uc3Q7CiAgICBRQ2hhciBtaXJyb3JlZENoYXIoKSBjb25zdDsKICAgIGNvbnN0IFFTdHJpbmcg
JmRlY29tcG9zaXRpb24oKSBjb25zdDsKICAgIERlY29tcG9zaXRpb24gZGVjb21wb3NpdGlvblRh
ZygpIGNvbnN0OwogICAgdW5zaWduZWQgY2hhciBjb21iaW5pbmdDbGFzcygpIGNvbnN0OwoKICAg
IGNoYXIgbGF0aW4xKCkgY29uc3QgeyByZXR1cm4gdWNzID4gMHhmZiA/IDAgOiAoY2hhcikgdWNz
OyB9CiAgICB1c2hvcnQgdW5pY29kZSgpIGNvbnN0IHsgcmV0dXJuIHVjczsgfQogICAgdXNob3J0
ICZ1bmljb2RlKCkgeyByZXR1cm4gdWNzOyB9CgoKICAgIG9wZXJhdG9yIGNoYXIoKSBjb25zdCB7
IHJldHVybiBsYXRpbjEoKTsgfQoKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHVu
aWNvZGUoKT09MDsgfQogICAgYm9vbCBpc1ByaW50KCkgY29uc3Q7CiAgICBib29sIGlzUHVuY3Qo
KSBjb25zdDsKICAgIGJvb2wgaXNTcGFjZSgpIGNvbnN0OwogICAgYm9vbCBpc01hcmsoKSBjb25z
dDsKICAgIGJvb2wgaXNMZXR0ZXIoKSBjb25zdDsKICAgIGJvb2wgaXNOdW1iZXIoKSBjb25zdDsK
ICAgIGJvb2wgaXNMZXR0ZXJPck51bWJlcigpIGNvbnN0OwogICAgYm9vbCBpc0RpZ2l0KCkgY29u
c3Q7CiAgICBib29sIGlzU3ltYm9sKCkgY29uc3Q7CgogICAgdWNoYXIgY2VsbCgpIGNvbnN0IHsg
cmV0dXJuICgodWNoYXIpIHVjcyAmIDB4ZmYpOyB9CiAgICB1Y2hhciByb3coKSBjb25zdCB7IHJl
dHVybiAoKHVjaGFyKSAodWNzPj44KSYweGZmKTsgfQogICAgdm9pZCBzZXRDZWxsKCB1Y2hhciBj
ZWxsICkgeyB1Y3MgPSAodWNzICYgMHhmZjAwKSArIGNlbGw7IH0KICAgIHZvaWQgc2V0Um93KCB1
Y2hhciByb3cgKSB7IHVjcyA9ICgoKHVzaG9ydCkgcm93KTw8OCkgKyAodWNzJjB4ZmYpOyB9Cgog
ICAgc3RhdGljIGJvb2wgbmV0d29ya09yZGVyZWQoKSB7CiAgICAgICAgaW50IHdvcmRTaXplOwog
ICAgICAgIGJvb2wgYmlnRW5kaWFuID0gRkFMU0U7CiAgICAgICAgcVN5c0luZm8oICZ3b3JkU2l6
ZSwgJmJpZ0VuZGlhbiApOwogICAgICAgIHJldHVybiBiaWdFbmRpYW47CiAgICB9CgogICAgZnJp
ZW5kIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNoYXIgY2gsIFFDaGFyIGMgKTsKICAgIGZyaWVu
ZCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBRQ2hhciBjLCBjaGFyIGNoICk7CiAgICBmcmllbmQg
aW5saW5lIGJvb2wgb3BlcmF0b3I9PSggUUNoYXIgYzEsIFFDaGFyIGMyICk7CiAgICBmcmllbmQg
aW5saW5lIGJvb2wgb3BlcmF0b3IhPSggUUNoYXIgYzEsIFFDaGFyIGMyICk7CiAgICBmcmllbmQg
aW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY2hhciBjaCwgUUNoYXIgYyApOwogICAgZnJpZW5kIGlu
bGluZSBib29sIG9wZXJhdG9yIT0oIFFDaGFyIGMsIGNoYXIgY2ggKTsKICAgIGZyaWVuZCBpbmxp
bmUgYm9vbCBvcGVyYXRvcjw9KCBRQ2hhciBjLCBjaGFyIGNoICk7CiAgICBmcmllbmQgaW5saW5l
IGJvb2wgb3BlcmF0b3I8PSggY2hhciBjaCwgUUNoYXIgYyApOwogICAgZnJpZW5kIGlubGluZSBi
b29sIG9wZXJhdG9yPD0oIFFDaGFyIGMxLCBRQ2hhciBjMiApOwoKcHJpdmF0ZToKICAgIHVzaG9y
dCB1Y3M7CgoKCn0gOwoKaW5saW5lIFFDaGFyOjpRQ2hhcigpCnsKICAgIHVjcyA9IDA7CgoKCn0K
aW5saW5lIFFDaGFyOjpRQ2hhciggY2hhciBjICkKewogICAgdWNzID0gKHVjaGFyKWM7CgoKCn0K
aW5saW5lIFFDaGFyOjpRQ2hhciggdWNoYXIgYyApCnsKICAgIHVjcyA9IGM7CgoKCn0KaW5saW5l
IFFDaGFyOjpRQ2hhciggdWNoYXIgYywgdWNoYXIgciApCnsKICAgIHVjcyA9IChyIDw8IDgpIHwg
YzsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBjb25zdCBRQ2hhciYgYyApCnsKICAgIHVjcyA9
IGMudWNzOwoKCgp9CgppbmxpbmUgUUNoYXI6OlFDaGFyKCB1c2hvcnQgcmMgKQp7CiAgICB1Y3Mg
PSByYzsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBzaG9ydCByYyApCnsKICAgIHVjcyA9ICh1
c2hvcnQpIHJjOwoKCgp9CmlubGluZSBRQ2hhcjo6UUNoYXIoIHVpbnQgcmMgKQp7CiAgICB1Y3Mg
PSAodXNob3J0ICkgKHJjICYgMHhmZmZmKTsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBpbnQg
cmMgKQp7CiAgICB1Y3MgPSAodXNob3J0KSAocmMgJiAweGZmZmYpOwoKCgp9CgoKaW5saW5lIGJv
b2wgb3BlcmF0b3I9PSggY2hhciBjaCwgUUNoYXIgYyApCnsKICAgIHJldHVybiAoKHVjaGFyKSBj
aCkgPT0gYy51Y3M7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yPT0oIFFDaGFyIGMsIGNoYXIgY2gg
KQp7CiAgICByZXR1cm4gKCh1Y2hhcikgY2gpID09IGMudWNzOwp9CgppbmxpbmUgYm9vbCBvcGVy
YXRvcj09KCBRQ2hhciBjMSwgUUNoYXIgYzIgKQp7CiAgICByZXR1cm4gYzEudWNzID09IGMyLnVj
czsKfQoKaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggUUNoYXIgYzEsIFFDaGFyIGMyICkKewogICAg
cmV0dXJuIGMxLnVjcyAhPSBjMi51Y3M7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yIT0oIGNoYXIg
Y2gsIFFDaGFyIGMgKQp7CiAgICByZXR1cm4gKCh1Y2hhciljaCkgIT0gYy51Y3M7Cn0KCmlubGlu
ZSBib29sIG9wZXJhdG9yIT0oIFFDaGFyIGMsIGNoYXIgY2ggKQp7CiAgICByZXR1cm4gKCh1Y2hh
cikgY2gpICE9IGMudWNzOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBRQ2hhciBjLCBjaGFy
IGNoICkKewogICAgcmV0dXJuIGMudWNzIDw9ICgodWNoYXIpIGNoKTsKfQoKaW5saW5lIGJvb2wg
b3BlcmF0b3I8PSggY2hhciBjaCwgUUNoYXIgYyApCnsKICAgIHJldHVybiAoKHVjaGFyKSBjaCkg
PD0gYy51Y3M7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yPD0oIFFDaGFyIGMxLCBRQ2hhciBjMiAp
CnsKICAgIHJldHVybiBjMS51Y3MgPD0gYzIudWNzOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvcj49
KCBRQ2hhciBjLCBjaGFyIGNoICkgeyByZXR1cm4gY2ggPD0gYzsgfQppbmxpbmUgYm9vbCBvcGVy
YXRvcj49KCBjaGFyIGNoLCBRQ2hhciBjICkgeyByZXR1cm4gYyA8PSBjaDsgfQppbmxpbmUgYm9v
bCBvcGVyYXRvcj49KCBRQ2hhciBjMSwgUUNoYXIgYzIgKSB7IHJldHVybiBjMiA8PSBjMTsgfQpp
bmxpbmUgYm9vbCBvcGVyYXRvcjwoIFFDaGFyIGMsIGNoYXIgY2ggKSB7IHJldHVybiAhKGNoPD1j
KTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcjwoIGNoYXIgY2gsIFFDaGFyIGMgKSB7IHJldHVybiAh
KGM8PWNoKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcjwoIFFDaGFyIGMxLCBRQ2hhciBjMiApIHsg
cmV0dXJuICEoYzI8PWMxKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj4oIFFDaGFyIGMsIGNoYXIg
Y2ggKSB7IHJldHVybiAhKGNoPj1jKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj4oIGNoYXIgY2gs
IFFDaGFyIGMgKSB7IHJldHVybiAhKGM+PWNoKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj4oIFFD
aGFyIGMxLCBRQ2hhciBjMiApIHsgcmV0dXJuICEoYzI+PWMxKTsgfQoKCnN0cnVjdCBRU3RyaW5n
RGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKICAgIFFTdHJpbmdEYXRhKCkgOgogICAgICAgIHVuaWNv
ZGUoMCksIGFzY2lpKDApLCBsZW4oMCksIHNpbXBsZXRleHQoMSksIG1heGwoMCksIGRpcnR5KDAp
IHsgcmVmKCk7IH0KICAgIFFTdHJpbmdEYXRhKFFDaGFyICp1LCB1aW50IGwsIHVpbnQgbSkgOgog
ICAgICAgIHVuaWNvZGUodSksIGFzY2lpKDApLCBsZW4obCksIHNpbXBsZXRleHQoMSksIG1heGwo
bSksIGRpcnR5KDEpIHsgfQoKICAgIH5RU3RyaW5nRGF0YSgpIHsgaWYgKCB1bmljb2RlICkgZGVs
ZXRlW10gKChjaGFyKil1bmljb2RlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCBhc2NpaSAp
IGRlbGV0ZVtdIGFzY2lpOyB9CgogICAgdm9pZCBkZWxldGVTZWxmKCk7CiAgICBRQ2hhciAqdW5p
Y29kZTsKICAgIGNoYXIgKmFzY2lpOwogICAgdm9pZCBzZXREaXJ0eSgpIHsKICAgICAgICBpZiAo
IGFzY2lpICkgewogICAgICAgICAgICBkZWxldGUgW10gYXNjaWk7CiAgICAgICAgICAgIGFzY2lp
ID0gMDsKICAgICAgICB9CiAgICAgICAgZGlydHkgPSAxOwogICAgfQoKCgogICAgdWludCBsZW4g
OiAzMDsKCiAgICB1aW50IHNpbXBsZXRleHQgOiAxOwoKCgogICAgdWludCBtYXhsIDogMzA7Cgog
ICAgdWludCBkaXJ0eSA6IDE7Cn07CgoKY2xhc3MgUVN0cmluZwp7CnB1YmxpYzoKICAgIFFTdHJp
bmcoKTsKICAgIFFTdHJpbmcoIFFDaGFyICk7CiAgICBRU3RyaW5nKCBjb25zdCBRU3RyaW5nICYg
KTsKICAgIFFTdHJpbmcoIGNvbnN0IFFCeXRlQXJyYXkmICk7CiAgICBRU3RyaW5nKCBjb25zdCBR
Q2hhciogdW5pY29kZSwgdWludCBsZW5ndGggKTsKCiAgICBRU3RyaW5nKCBjb25zdCBjaGFyICpz
dHIgKTsKCiAgICB+UVN0cmluZygpOwoKICAgIFFTdHJpbmcgJm9wZXJhdG9yPSggY29uc3QgUVN0
cmluZyAmICk7CgogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBjaGFyICogKTsKCiAgICBR
U3RyaW5nICZvcGVyYXRvcj0oIGNvbnN0IFFDU3RyaW5nJiApOwogICAgUVN0cmluZyAmb3BlcmF0
b3I9KCBRQ2hhciBjICk7CiAgICBRU3RyaW5nICZvcGVyYXRvcj0oIGNoYXIgYyApOwoKICAgIHN0
YXRpYyBjb25zdCBRU3RyaW5nIG51bGw7CgogICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0OwogICAgdWludCBsZW5ndGgoKSBjb25zdDsKICAgIHZvaWQgdHJ1
bmNhdGUoIHVpbnQgcG9zICk7CgogICAgUVN0cmluZyAmIGZpbGwoIFFDaGFyIGMsIGludCBsZW4g
PSAtMSApOwoKICAgIFFTdHJpbmcgY29weSgpIGNvbnN0OwoKICAgIFFTdHJpbmcgYXJnKCBsb25n
IGEsIGludCBmaWVsZHdpZHRoPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICBRU3RyaW5nIGFy
ZyggdWxvbmcgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIFFT
dHJpbmcgYXJnKCBpbnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsK
ICAgIFFTdHJpbmcgYXJnKCB1aW50IGEsIGludCBmaWVsZHdpZHRoPTAsIGludCBiYXNlPTEwICkg
Y29uc3Q7CiAgICBRU3RyaW5nIGFyZyggc2hvcnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJh
c2U9MTAgKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKCB1c2hvcnQgYSwgaW50IGZpZWxkd2lkdGg9
MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKCBjaGFyIGEsIGludCBmaWVs
ZHdpZHRoPTAgKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKCBRQ2hhciBhLCBpbnQgZmllbGR3aWR0
aD0wICkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyggY29uc3QgUVN0cmluZyYgYSwgaW50IGZpZWxk
d2lkdGg9MCApIGNvbnN0OwogICAgUVN0cmluZyBhcmcoIGRvdWJsZSBhLCBpbnQgZmllbGR3aWR0
aD0wLCBjaGFyIGZtdD0nZycsIGludCBwcmVjPS0xICkgY29uc3Q7CgoKICAgIFFTdHJpbmcgJnNw
cmludGYoIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uICkKCiAgICAgICAgX19hdHRyaWJ1dGVfXyAo
KGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCgogICAgICAgIDsKCgogICAgaW50IGZpbmQoIFFDaGFy
IGMsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBmaW5kKCBjaGFy
IGMsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBmaW5kKCBjb25z
dCBRU3RyaW5nICZzdHIsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKCiAgICBp
bnQgZmluZCggY29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5kZXg9MCApIGNvbnN0OwoKCiAgICBpbnQg
ZmluZCggY29uc3QgY2hhciogc3RyLCBpbnQgaW5kZXg9MCApIGNvbnN0OwoKICAgIGludCBmaW5k
UmV2KCBRQ2hhciBjLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkgY29uc3Q7CiAgICBpbnQg
ZmluZFJldiggY2hhciBjLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkgY29uc3Q7CiAgICBp
bnQgZmluZFJldiggY29uc3QgUVN0cmluZyAmc3RyLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJV
RSkgY29uc3Q7CgogICAgaW50IGZpbmRSZXYoIGNvbnN0IFFSZWdFeHAgJiwgaW50IGluZGV4PS0x
ICkgY29uc3Q7CgoKICAgIGludCBmaW5kUmV2KCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleD0t
MSApIGNvbnN0OwoKICAgIGludCBjb250YWlucyggUUNoYXIgYywgYm9vbCBjcz1UUlVFICkgY29u
c3Q7CiAgICBpbnQgY29udGFpbnMoIGNoYXIgYywgYm9vbCBjcz1UUlVFICkgY29uc3QKICAgICAg
ICAgICAgICAgICAgICB7IHJldHVybiBjb250YWlucyhRQ2hhcihjKSwgY3MpOyB9CgogICAgaW50
IGNvbnRhaW5zKCBjb25zdCBjaGFyKiBzdHIsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwoKICAgIGlu
dCBjb250YWlucyggY29uc3QgUVN0cmluZyAmc3RyLCBib29sIGNzPVRSVUUgKSBjb25zdDsKCiAg
ICBpbnQgY29udGFpbnMoIGNvbnN0IFFSZWdFeHAgJiApIGNvbnN0OwoKCiAgICBlbnVtIFNlY3Rp
b25GbGFncyB7CiAgICAgICAgU2VjdGlvbkRlZmF1bHQgPSAweDAwLAogICAgICAgIFNlY3Rpb25T
a2lwRW1wdHkgPSAweDAxLAogICAgICAgIFNlY3Rpb25JbmNsdWRlTGVhZGluZ1NlcCA9IDB4MDIs
CiAgICAgICAgU2VjdGlvbkluY2x1ZGVUcmFpbGluZ1NlcCA9IDB4MDQsCiAgICAgICAgU2VjdGlv
bkNhc2VJbnNlbnNpdGl2ZVNlcHMgPSAweDA4CiAgICB9OwogICAgUVN0cmluZyBzZWN0aW9uKCBR
Q2hhciBzZXAsIGludCBzdGFydCwgaW50IGVuZCA9IDB4ZmZmZmZmZmYsIGludCBmbGFncyA9IFNl
Y3Rpb25EZWZhdWx0ICkgY29uc3Q7CiAgICBRU3RyaW5nIHNlY3Rpb24oIGNoYXIgc2VwLCBpbnQg
c3RhcnQsIGludCBlbmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCAp
IGNvbnN0OwoKICAgIFFTdHJpbmcgc2VjdGlvbiggY29uc3QgY2hhciAqaW5fc2VwLCBpbnQgc3Rh
cnQsIGludCBlbmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCApIGNv
bnN0OwoKICAgIFFTdHJpbmcgc2VjdGlvbiggY29uc3QgUVN0cmluZyAmaW5fc2VwLCBpbnQgc3Rh
cnQsIGludCBlbmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCApIGNv
bnN0OwoKICAgIFFTdHJpbmcgc2VjdGlvbiggY29uc3QgUVJlZ0V4cCAmcmVnLCBpbnQgc3RhcnQs
IGludCBlbmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCApIGNvbnN0
OwoKCiAgICBRU3RyaW5nIGxlZnQoIHVpbnQgbGVuICkgY29uc3Q7CiAgICBRU3RyaW5nIHJpZ2h0
KCB1aW50IGxlbiApIGNvbnN0OwogICAgUVN0cmluZyBtaWQoIHVpbnQgaW5kZXgsIHVpbnQgbGVu
PTB4ZmZmZmZmZmYpIGNvbnN0OwoKICAgIFFTdHJpbmcgbGVmdEp1c3RpZnkoIHVpbnQgd2lkdGgs
IFFDaGFyIGZpbGw9JyAnLCBib29sIHRydW5jPUZBTFNFKWNvbnN0OwogICAgUVN0cmluZyByaWdo
dEp1c3RpZnkoIHVpbnQgd2lkdGgsIFFDaGFyIGZpbGw9JyAnLGJvb2wgdHJ1bmM9RkFMU0UpY29u
c3Q7CgogICAgUVN0cmluZyBsb3dlcigpIGNvbnN0OwogICAgUVN0cmluZyB1cHBlcigpIGNvbnN0
OwoKICAgIFFTdHJpbmcgc3RyaXBXaGl0ZVNwYWNlKCkgY29uc3Q7CiAgICBRU3RyaW5nIHNpbXBs
aWZ5V2hpdGVTcGFjZSgpIGNvbnN0OwoKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwg
Y29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNvbnN0
IFFDaGFyKiwgdWludCBsZW4gKTsKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgUUNo
YXIgKTsKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgY2hhciBjICkgeyByZXR1cm4g
aW5zZXJ0KGluZGV4LFFDaGFyKGMpKTsgfQogICAgUVN0cmluZyAmYXBwZW5kKCBjaGFyICk7CiAg
ICBRU3RyaW5nICZhcHBlbmQoIFFDaGFyICk7CiAgICBRU3RyaW5nICZhcHBlbmQoIGNvbnN0IFFT
dHJpbmcgJiApOwogICAgUVN0cmluZyAmcHJlcGVuZCggY2hhciApOwogICAgUVN0cmluZyAmcHJl
cGVuZCggUUNoYXIgKTsKICAgIFFTdHJpbmcgJnByZXBlbmQoIGNvbnN0IFFTdHJpbmcgJiApOwog
ICAgUVN0cmluZyAmcmVtb3ZlKCB1aW50IGluZGV4LCB1aW50IGxlbiApOwogICAgUVN0cmluZyAm
cmVwbGFjZSggdWludCBpbmRleCwgdWludCBsZW4sIGNvbnN0IFFTdHJpbmcgJiApOwogICAgUVN0
cmluZyAmcmVwbGFjZSggdWludCBpbmRleCwgdWludCBsZW4sIGNvbnN0IFFDaGFyKiwgdWludCBj
bGVuICk7CgogICAgUVN0cmluZyAmcmVwbGFjZSggY29uc3QgUVJlZ0V4cCAmLCBjb25zdCBRU3Ry
aW5nICYgKTsKCiAgICBzaG9ydCB0b1Nob3J0KCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNv
bnN0OwogICAgdXNob3J0IHRvVVNob3J0KCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0
OwogICAgaW50IHRvSW50KCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAgdWlu
dCB0b1VJbnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICBsb25nIHRvTG9u
ZyggYm9vbCAqb2s9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIHVsb25nIHRvVUxvbmcoIGJv
b2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICBmbG9hdCB0b0Zsb2F0KCBib29sICpv
az0wICkgY29uc3Q7CiAgICBkb3VibGUgdG9Eb3VibGUoIGJvb2wgKm9rPTAgKSBjb25zdDsKCiAg
ICBRU3RyaW5nICZzZXROdW0oIHNob3J0LCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0
TnVtKCB1c2hvcnQsIGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5nICZzZXROdW0oIGludCwgaW50
IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggdWludCwgaW50IGJhc2U9MTAgKTsKICAg
IFFTdHJpbmcgJnNldE51bSggbG9uZywgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51
bSggdWxvbmcsIGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5nICZzZXROdW0oIGZsb2F0LCBjaGFy
IGY9J2cnLCBpbnQgcHJlYz02ICk7CiAgICBRU3RyaW5nICZzZXROdW0oIGRvdWJsZSwgY2hhciBm
PSdnJywgaW50IHByZWM9NiApOwoKICAgIHN0YXRpYyBRU3RyaW5nIG51bWJlciggbG9uZywgaW50
IGJhc2U9MTAgKTsKICAgIHN0YXRpYyBRU3RyaW5nIG51bWJlciggdWxvbmcsIGludCBiYXNlPTEw
KTsKICAgIHN0YXRpYyBRU3RyaW5nIG51bWJlciggaW50LCBpbnQgYmFzZT0xMCApOwogICAgc3Rh
dGljIFFTdHJpbmcgbnVtYmVyKCB1aW50LCBpbnQgYmFzZT0xMCk7CiAgICBzdGF0aWMgUVN0cmlu
ZyBudW1iZXIoIGRvdWJsZSwgY2hhciBmPSdnJywgaW50IHByZWM9NiApOwoKICAgIHZvaWQgc2V0
RXhwYW5kKCB1aW50IGluZGV4LCBRQ2hhciBjICk7CgogICAgUVN0cmluZyAmb3BlcmF0b3IrPSgg
Y29uc3QgUVN0cmluZyAmc3RyICk7CiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBRQ2hhciBjICk7
CiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBjaGFyIGMgKTsKCiAgICBRQ2hhciBhdCggdWludCBp
ICkgY29uc3QKICAgICAgICB7IHJldHVybiBpIDwgZC0+bGVuID8gZC0+dW5pY29kZVtpXSA6IFFD
aGFyOjpudWxsOyB9CiAgICBRQ2hhciBvcGVyYXRvcltdKCBpbnQgaSApIGNvbnN0IHsgcmV0dXJu
IGF0KCh1aW50KWkpOyB9CiAgICBRQ2hhclJlZiBhdCggdWludCBpICk7CiAgICBRQ2hhclJlZiBv
cGVyYXRvcltdKCBpbnQgaSApOwoKICAgIFFDaGFyIGNvbnN0cmVmKHVpbnQgaSkgY29uc3QKICAg
ICAgICB7IHJldHVybiBhdChpKTsgfQogICAgUUNoYXImIHJlZih1aW50IGkpCiAgICAgICAgewog
ICAgICAgICAgICBpZiAoIGQtPmNvdW50ICE9IDEgfHwgaSA+PSBkLT5sZW4gKQogICAgICAgICAg
ICAgICAgc3ViYXQoIGkgKTsKICAgICAgICAgICAgZC0+c2V0RGlydHkoKTsKICAgICAgICAgICAg
cmV0dXJuIGQtPnVuaWNvZGVbaV07CiAgICAgICAgfQoKICAgIGNvbnN0IFFDaGFyKiB1bmljb2Rl
KCkgY29uc3QgeyByZXR1cm4gZC0+dW5pY29kZTsgfQogICAgY29uc3QgY2hhciogYXNjaWkoKSBj
b25zdCB7IHJldHVybiBsYXRpbjEoKTsgfQogICAgY29uc3QgY2hhciogbGF0aW4xKCkgY29uc3Q7
CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tTGF0aW4xKGNvbnN0IGNoYXIqLCBpbnQgbGVuPS0xKTsK
CiAgICBRQ1N0cmluZyB1dGY4KCkgY29uc3Q7CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tVXRmOChj
b25zdCBjaGFyKiwgaW50IGxlbj0tMSk7CgogICAgUUNTdHJpbmcgbG9jYWw4Qml0KCkgY29uc3Q7
CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tTG9jYWw4Qml0KGNvbnN0IGNoYXIqLCBpbnQgbGVuPS0x
KTsKICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgY2hhciAq
KCkgY29uc3QgeyByZXR1cm4gbGF0aW4xKCk7IH0KCgogICAgUVN0cmluZyAmc2V0VW5pY29kZSgg
Y29uc3QgUUNoYXIqIHVuaWNvZGUsIHVpbnQgbGVuICk7CiAgICBRU3RyaW5nICZzZXRVbmljb2Rl
Q29kZXMoIGNvbnN0IHVzaG9ydCogdW5pY29kZV9hc191c2hvcnRzLCB1aW50IGxlbiApOwogICAg
UVN0cmluZyAmc2V0TGF0aW4xKCBjb25zdCBjaGFyKiwgaW50IGxlbj0tMSApOwoKICAgIGludCBj
b21wYXJlKCBjb25zdCBRU3RyaW5nJiBzICkgY29uc3Q7CiAgICBzdGF0aWMgaW50IGNvbXBhcmUo
IGNvbnN0IFFTdHJpbmcmIHMxLCBjb25zdCBRU3RyaW5nJiBzMiApCiAgICB7IHJldHVybiBzMS5j
b21wYXJlKCBzMiApOyB9CgogICAgaW50IGxvY2FsZUF3YXJlQ29tcGFyZSggY29uc3QgUVN0cmlu
ZyYgcyApIGNvbnN0OwogICAgc3RhdGljIGludCBsb2NhbGVBd2FyZUNvbXBhcmUoIGNvbnN0IFFT
dHJpbmcmIHMxLCBjb25zdCBRU3RyaW5nJiBzMiApCiAgICB7IHJldHVybiBzMS5sb2NhbGVBd2Fy
ZUNvbXBhcmUoIHMyICk7IH0KCgogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBR
RGF0YVN0cmVhbSAmLCBRU3RyaW5nICYgKTsKCgogICAgdm9pZCBjb21wb3NlKCk7CgoKICAgIGNv
bnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBsYXRpbjEoKTsgfQoKCiAgICBib29sIHN0
YXJ0c1dpdGgoIGNvbnN0IFFTdHJpbmcmICkgY29uc3Q7CiAgICBib29sIGVuZHNXaXRoKCBjb25z
dCBRU3RyaW5nJiApIGNvbnN0OwoKICAgIHZvaWQgc2V0TGVuZ3RoKCB1aW50IG5ld0xlbmd0aCAp
OwoKICAgIGJvb2wgc2ltcGxlVGV4dCgpIGNvbnN0IHsgaWYgKCBkLT5kaXJ0eSApIGNoZWNrU2lt
cGxlVGV4dCgpOyByZXR1cm4gKGJvb2wpZC0+c2ltcGxldGV4dDsgfQogICAgYm9vbCBpc1JpZ2h0
VG9MZWZ0KCkgY29uc3Q7Cgpwcml2YXRlOgojIDYwNyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0z
LjAuNi9pbmNsdWRlL3FzdHJpbmcuaCIKICAgIFFTdHJpbmcmIHJlcGxhY2UoIGNvbnN0IFFTdHJp
bmcgJiwgY29uc3QgUVN0cmluZyAmICkgeyByZXR1cm4gKnRoaXM7IH0KCiAgICBRU3RyaW5nKCBp
bnQgc2l6ZSwgYm9vbCApOwoKICAgIHZvaWQgZGVyZWYoKTsKICAgIHZvaWQgcmVhbF9kZXRhY2go
KTsKICAgIHZvaWQgc3ViYXQoIHVpbnQgKTsKICAgIGJvb2wgZmluZEFyZyhpbnQmIHBvcywgaW50
JiBsZW4pIGNvbnN0OwoKICAgIHZvaWQgY2hlY2tTaW1wbGVUZXh0KCkgY29uc3Q7CgogICAgc3Rh
dGljIFFDaGFyKiBhc2NpaVRvVW5pY29kZSggY29uc3QgY2hhciosIHVpbnQgKiBsZW4sIHVpbnQg
bWF4bGVuPSh1aW50KS0xICk7CiAgICBzdGF0aWMgUUNoYXIqIGFzY2lpVG9Vbmljb2RlKCBjb25z
dCBRQnl0ZUFycmF5JiwgdWludCAqIGxlbiApOwogICAgc3RhdGljIGNoYXIqIHVuaWNvZGVUb0Fz
Y2lpKCBjb25zdCBRQ2hhciosIHVpbnQgbGVuICk7CgogICAgUVN0cmluZ0RhdGEgKmQ7CiAgICBz
dGF0aWMgUVN0cmluZ0RhdGEqIHNoYXJlZF9udWxsOwogICAgc3RhdGljIFFTdHJpbmdEYXRhKiBt
YWtlU2hhcmVkTnVsbCgpOwoKICAgIGZyaWVuZCBjbGFzcyBRQ29uc3RTdHJpbmc7CiAgICBmcmll
bmQgY2xhc3MgUVRleHRTdHJlYW07CiAgICBRU3RyaW5nKCBRU3RyaW5nRGF0YSogZGQsIGJvb2wg
KSA6IGQoZGQpIHsgfQp9OwoKY2xhc3MgUUNoYXJSZWYgewogICAgZnJpZW5kIGNsYXNzIFFTdHJp
bmc7CiAgICBRU3RyaW5nJiBzOwogICAgdWludCBwOwogICAgUUNoYXJSZWYoUVN0cmluZyogc3Ry
LCB1aW50IHBvcykgOiBzKCpzdHIpLCBwKHBvcykgeyB9CgpwdWJsaWM6CgoKCgogICAgdXNob3J0
IHVuaWNvZGUoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLnVuaWNvZGUoKTsgfQogICAg
Y2hhciBsYXRpbjEoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmxhdGluMSgpOyB9CgoK
ICAgIFFDaGFyUmVmIG9wZXJhdG9yPShjaGFyIGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAqdGhp
czsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KHVjaGFyIGMgKSB7IHMucmVmKHApPWM7IHJldHVy
biAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KFFDaGFyIGMgKSB7IHMucmVmKHApPWM7
IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KGNvbnN0IFFDaGFyUmVmJiBj
ICkgeyBzLnJlZihwKT1jLnVuaWNvZGUoKTsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBv
cGVyYXRvcj0odXNob3J0IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CiAgICBR
Q2hhclJlZiBvcGVyYXRvcj0oc2hvcnQgcmMgKSB7IHMucmVmKHApPXJjOyByZXR1cm4gKnRoaXM7
IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPSh1aW50IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJu
ICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0oaW50IHJjICkgeyBzLnJlZihwKT1yYzsg
cmV0dXJuICp0aGlzOyB9CgogICAgb3BlcmF0b3IgUUNoYXIgKCkgY29uc3QgeyByZXR1cm4gcy5j
b25zdHJlZihwKTsgfQoKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHVuaWNvZGUo
KT09MDsgfQogICAgYm9vbCBpc1ByaW50KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5p
c1ByaW50KCk7IH0KICAgIGJvb2wgaXNQdW5jdCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYo
cCkuaXNQdW5jdCgpOyB9CiAgICBib29sIGlzU3BhY2UoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0
cmVmKHApLmlzU3BhY2UoKTsgfQogICAgYm9vbCBpc01hcmsoKSBjb25zdCB7IHJldHVybiBzLmNv
bnN0cmVmKHApLmlzTWFyaygpOyB9CiAgICBib29sIGlzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4g
cy5jb25zdHJlZihwKS5pc0xldHRlcigpOyB9CiAgICBib29sIGlzTnVtYmVyKCkgY29uc3QgeyBy
ZXR1cm4gcy5jb25zdHJlZihwKS5pc051bWJlcigpOyB9CiAgICBib29sIGlzTGV0dGVyT3JOdW1i
ZXIoKSB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzTGV0dGVyT3JOdW1iZXIoKTsgfQogICAgYm9v
bCBpc0RpZ2l0KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc0RpZ2l0KCk7IH0KCiAg
ICBpbnQgZGlnaXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuZGlnaXRWYWx1
ZSgpOyB9CiAgICBRQ2hhciBsb3dlcigpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkubG93
ZXIoKTsgfQogICAgUUNoYXIgdXBwZXIoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLnVw
cGVyKCk7IH0KCiAgICBRQ2hhcjo6Q2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7IHJldHVybiBz
LmNvbnN0cmVmKHApLmNhdGVnb3J5KCk7IH0KICAgIFFDaGFyOjpEaXJlY3Rpb24gZGlyZWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5kaXJlY3Rpb24oKTsgfQogICAgUUNoYXI6
OkpvaW5pbmcgam9pbmluZygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuam9pbmluZygp
OyB9CiAgICBib29sIG1pcnJvcmVkKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5taXJy
b3JlZCgpOyB9CiAgICBRQ2hhciBtaXJyb3JlZENoYXIoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0
cmVmKHApLm1pcnJvcmVkQ2hhcigpOyB9CiAgICBjb25zdCBRU3RyaW5nICZkZWNvbXBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5kZWNvbXBvc2l0aW9uKCk7IH0KICAgIFFD
aGFyOjpEZWNvbXBvc2l0aW9uIGRlY29tcG9zaXRpb25UYWcoKSBjb25zdCB7IHJldHVybiBzLmNv
bnN0cmVmKHApLmRlY29tcG9zaXRpb25UYWcoKTsgfQogICAgdW5zaWduZWQgY2hhciBjb21iaW5p
bmdDbGFzcygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuY29tYmluaW5nQ2xhc3MoKTsg
fQoKCiAgICB1Y2hhciBjZWxsKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5jZWxsKCk7
IH0KICAgIHVjaGFyIHJvdygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkucm93KCk7IH0K
Cn07CgppbmxpbmUgUUNoYXJSZWYgUVN0cmluZzo6YXQoIHVpbnQgaSApIHsgcmV0dXJuIFFDaGFy
UmVmKHRoaXMsaSk7IH0KaW5saW5lIFFDaGFyUmVmIFFTdHJpbmc6Om9wZXJhdG9yW10oIGludCBp
ICkgeyByZXR1cm4gYXQoKHVpbnQpaSk7IH0KCgpjbGFzcyBRQ29uc3RTdHJpbmcgOiBwcml2YXRl
IFFTdHJpbmcgewpwdWJsaWM6CiAgICBRQ29uc3RTdHJpbmcoIGNvbnN0IFFDaGFyKiB1bmljb2Rl
LCB1aW50IGxlbmd0aCApOwogICAgflFDb25zdFN0cmluZygpOwogICAgY29uc3QgUVN0cmluZyYg
c3RyaW5nKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KfTsKCgoKCgoKIFFEYXRhU3RyZWFtICZv
cGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRU3RyaW5nICYgKTsKIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRU3RyaW5nICYgKTsKIyA3MTYgIi91c3IvbG9j
YWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xc3RyaW5nLmgiCmlubGluZSBRU3RyaW5nOjpR
U3RyaW5nKCkgOgogICAgZChzaGFyZWRfbnVsbCA/IHNoYXJlZF9udWxsIDogbWFrZVNoYXJlZE51
bGwoKSkKewogICAgZC0+cmVmKCk7Cn0KCmlubGluZSBRU3RyaW5nOjp+UVN0cmluZygpCnsKICAg
IGlmICggZC0+ZGVyZWYoKSApIHsKICAgICAgICBpZiAoIGQgPT0gc2hhcmVkX251bGwgKQogICAg
ICAgICAgICBzaGFyZWRfbnVsbCA9IDA7CiAgICAgICAgZC0+ZGVsZXRlU2VsZigpOwogICAgfQp9
CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjpzZWN0aW9uKCBRQ2hhciBzZXAsIGludCBzdGFydCwg
aW50IGVuZCwgaW50IGZsYWdzICkgY29uc3QKeyByZXR1cm4gc2VjdGlvbihRU3RyaW5nKHNlcCks
IHN0YXJ0LCBlbmQsIGZsYWdzKTsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmluZzo6c2VjdGlvbigg
Y2hhciBzZXAsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGZsYWdzICkgY29uc3QKeyByZXR1cm4g
c2VjdGlvbihRQ2hhcihzZXApLCBzdGFydCwgZW5kLCBmbGFncyk7IH0KCgppbmxpbmUgUVN0cmlu
ZyBRU3RyaW5nOjpzZWN0aW9uKCBjb25zdCBjaGFyICppbl9zZXAsIGludCBzdGFydCwgaW50IGVu
ZCwgaW50IGZsYWdzICkgY29uc3QKeyByZXR1cm4gc2VjdGlvbihRU3RyaW5nKGluX3NlcCksIHN0
YXJ0LCBlbmQsIGZsYWdzKTsgfQoKCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpvcGVyYXRvcj0o
IFFDaGFyIGMgKQp7IHJldHVybiAqdGhpcyA9IFFTdHJpbmcoYyk7IH0KCmlubGluZSBRU3RyaW5n
ICZRU3RyaW5nOjpvcGVyYXRvcj0oIGNoYXIgYyApCnsgcmV0dXJuICp0aGlzID0gUVN0cmluZyhR
Q2hhcihjKSk7IH0KCmlubGluZSBib29sIFFTdHJpbmc6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJu
IHVuaWNvZGUoKSA9PSAwOyB9CgppbmxpbmUgYm9vbCBRU3RyaW5nOjpvcGVyYXRvciEoKSBjb25z
dAp7IHJldHVybiBpc051bGwoKTsgfQoKaW5saW5lIHVpbnQgUVN0cmluZzo6bGVuZ3RoKCkgY29u
c3QKeyByZXR1cm4gZC0+bGVuOyB9CgppbmxpbmUgYm9vbCBRU3RyaW5nOjppc0VtcHR5KCkgY29u
c3QKeyByZXR1cm4gbGVuZ3RoKCkgPT0gMDsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmluZzo6Y29w
eSgpIGNvbnN0CnsgcmV0dXJuIFFTdHJpbmcoICp0aGlzICk7IH0KCmlubGluZSBRU3RyaW5nICZR
U3RyaW5nOjpwcmVwZW5kKCBjb25zdCBRU3RyaW5nICYgcyApCnsgcmV0dXJuIGluc2VydCgwLHMp
OyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCggUUNoYXIgYyApCnsgcmV0dXJu
IGluc2VydCgwLGMpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCggY2hhciBj
ICkKeyByZXR1cm4gaW5zZXJ0KDAsYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBl
bmQoIGNvbnN0IFFTdHJpbmcgJiBzICkKeyByZXR1cm4gb3BlcmF0b3IrPShzKTsgfQoKaW5saW5l
IFFTdHJpbmcgJlFTdHJpbmc6OmFwcGVuZCggUUNoYXIgYyApCnsgcmV0dXJuIG9wZXJhdG9yKz0o
Yyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNoYXIgYyApCnsgcmV0dXJu
IG9wZXJhdG9yKz0oYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0oIHNob3J0
IG4sIGludCBiYXNlICkKeyByZXR1cm4gc2V0TnVtKChsb25nKW4sIGJhc2UpOyB9CgppbmxpbmUg
UVN0cmluZyAmUVN0cmluZzo6c2V0TnVtKCB1c2hvcnQgbiwgaW50IGJhc2UgKQp7IHJldHVybiBz
ZXROdW0oKHVsb25nKW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVt
KCBpbnQgbiwgaW50IGJhc2UgKQp7IHJldHVybiBzZXROdW0oKGxvbmcpbiwgYmFzZSk7IH0KCmlu
bGluZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0oIHVpbnQgbiwgaW50IGJhc2UgKQp7IHJldHVy
biBzZXROdW0oKHVsb25nKW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0
TnVtKCBmbG9hdCBuLCBjaGFyIGYsIGludCBwcmVjICkKeyByZXR1cm4gc2V0TnVtKChkb3VibGUp
bixmLHByZWMpOyB9CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjphcmcoaW50IGEsIGludCBmaWVs
ZHdpZHRoLCBpbnQgYmFzZSkgY29uc3QKeyByZXR1cm4gYXJnKChsb25nKWEsIGZpZWxkd2lkdGgs
IGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjphcmcodWludCBhLCBpbnQgZmllbGR3
aWR0aCwgaW50IGJhc2UpIGNvbnN0CnsgcmV0dXJuIGFyZygodWxvbmcpYSwgZmllbGR3aWR0aCwg
YmFzZSk7IH0KCmlubGluZSBRU3RyaW5nIFFTdHJpbmc6OmFyZyhzaG9ydCBhLCBpbnQgZmllbGR3
aWR0aCwgaW50IGJhc2UpIGNvbnN0CnsgcmV0dXJuIGFyZygobG9uZylhLCBmaWVsZHdpZHRoLCBi
YXNlKTsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmluZzo6YXJnKHVzaG9ydCBhLCBpbnQgZmllbGR3
aWR0aCwgaW50IGJhc2UpIGNvbnN0CnsgcmV0dXJuIGFyZygodWxvbmcpYSwgZmllbGR3aWR0aCwg
YmFzZSk7IH0KCmlubGluZSBpbnQgUVN0cmluZzo6ZmluZCggY2hhciBjLCBpbnQgaW5kZXgsIGJv
b2wgY3MgKSBjb25zdAp7IHJldHVybiBmaW5kKFFDaGFyKGMpLCBpbmRleCwgY3MpOyB9Cgppbmxp
bmUgaW50IFFTdHJpbmc6OmZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4LCBib29sIGNzKSBjb25z
dAp7IHJldHVybiBmaW5kUmV2KCBRQ2hhcihjKSwgaW5kZXgsIGNzICk7IH0KCgoKaW5saW5lIGlu
dCBRU3RyaW5nOjpmaW5kKCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleCApIGNvbnN0CnsgcmV0
dXJuIGZpbmQoUVN0cmluZzo6ZnJvbUxhdGluMShzdHIpLCBpbmRleCk7IH0KCmlubGluZSBpbnQg
UVN0cmluZzo6ZmluZFJldiggY29uc3QgY2hhciogc3RyLCBpbnQgaW5kZXggKSBjb25zdAp7IHJl
dHVybiBmaW5kUmV2KFFTdHJpbmc6OmZyb21MYXRpbjEoc3RyKSwgaW5kZXgpOyB9CgoKCgoKCgog
Ym9vbCBvcGVyYXRvciE9KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsK
IGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsK
IGJvb2wgb3BlcmF0b3I8PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7
CiBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiAp
OwogYm9vbCBvcGVyYXRvcj4oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiAp
OwogYm9vbCBvcGVyYXRvcj49KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIg
KTsKCiBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiAp
OwogYm9vbCBvcGVyYXRvcjwoIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwog
Ym9vbCBvcGVyYXRvcjw9KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKIGJv
b2wgb3BlcmF0b3I9PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiBib29s
IG9wZXJhdG9yPiggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiBib29sIG9w
ZXJhdG9yPj0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogYm9vbCBvcGVy
YXRvciE9KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKIGJvb2wgb3BlcmF0
b3I8KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKIGJvb2wgb3BlcmF0b3I8
PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiBib29sIG9wZXJhdG9yPT0o
IGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwoKIGJvb2wgb3BlcmF0b3I+PSgg
Y29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CgoKIGlubGluZSBjb25zdCBRU3Ry
aW5nIG9wZXJhdG9yKyggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewog
ICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgoK
IGlubGluZSBjb25zdCBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0
IGNoYXIgKnMyICkKewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gUVN0cmluZzo6
ZnJvbUxhdGluMShzMik7CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5lIGNvbnN0IFFTdHJpbmcg
b3BlcmF0b3IrKCBjb25zdCBjaGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKQp7CiAgICBRU3Ry
aW5nIHRtcCA9IFFTdHJpbmc6OmZyb21MYXRpbjEoIHMxICk7CiAgICB0bXAgKz0gczI7CiAgICBy
ZXR1cm4gdG1wOwp9CgoKIGlubGluZSBjb25zdCBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUVN0
cmluZyAmczEsIFFDaGFyIGMyICkKewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0g
YzI7CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5lIGNvbnN0IFFTdHJpbmcgb3BlcmF0b3IrKCBj
b25zdCBRU3RyaW5nICZzMSwgY2hhciBjMiApCnsKICAgIFFTdHJpbmcgdG1wKCBzMSApOwogICAg
dG1wICs9IGMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlubGluZSBjb25zdCBRU3RyaW5nIG9wZXJh
dG9yKyggUUNoYXIgYzEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewogICAgUVN0cmluZyB0bXA7CiAg
ICB0bXAgKz0gYzE7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5lIGNv
bnN0IFFTdHJpbmcgb3BlcmF0b3IrKCBjaGFyIGMxLCBjb25zdCBRU3RyaW5nICZzMiApCnsKICAg
IFFTdHJpbmcgdG1wOwogICAgdG1wICs9IGMxOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRt
cDsKfQojIDQ1ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXdpbmRvd2Rl
ZnMuaCIgMgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xbmFtZXNw
YWNlLmgiIDEKIyA0NiAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FuYW1l
c3BhY2UuaCIKY2xhc3MgUUNvbG9yOwpjbGFzcyBRQ3Vyc29yOwoKCmNsYXNzIFF0IHsKcHVibGlj
OgogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGNvbG9yMDsKICAgIHN0YXRpYyBjb25zdCBRQ29s
b3IgJiBjb2xvcjE7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgYmxhY2s7CiAgICBzdGF0aWMg
Y29uc3QgUUNvbG9yICYgd2hpdGU7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya0dyYXk7
CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZ3JheTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3Ig
JiBsaWdodEdyYXk7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgcmVkOwogICAgc3RhdGljIGNv
bnN0IFFDb2xvciAmIGdyZWVuOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGJsdWU7CiAgICBz
dGF0aWMgY29uc3QgUUNvbG9yICYgY3lhbjsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBtYWdl
bnRhOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIHllbGxvdzsKICAgIHN0YXRpYyBjb25zdCBR
Q29sb3IgJiBkYXJrUmVkOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGRhcmtHcmVlbjsKICAg
IHN0YXRpYyBjb25zdCBRQ29sb3IgJiBkYXJrQmx1ZTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3Ig
JiBkYXJrQ3lhbjsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBkYXJrTWFnZW50YTsKICAgIHN0
YXRpYyBjb25zdCBRQ29sb3IgJiBkYXJrWWVsbG93OwoKCiAgICBlbnVtIEJ1dHRvblN0YXRlIHsK
ICAgICAgICBOb0J1dHRvbiA9IDB4MDAwMCwKICAgICAgICBMZWZ0QnV0dG9uID0gMHgwMDAxLAog
ICAgICAgIFJpZ2h0QnV0dG9uID0gMHgwMDAyLAogICAgICAgIE1pZEJ1dHRvbiA9IDB4MDAwNCwK
ICAgICAgICBNb3VzZUJ1dHRvbk1hc2sgPSAweDAwMDcsCiAgICAgICAgU2hpZnRCdXR0b24gPSAw
eDAxMDAsCiAgICAgICAgQ29udHJvbEJ1dHRvbiA9IDB4MDIwMCwKICAgICAgICBBbHRCdXR0b24g
PSAweDA0MDAsCiAgICAgICAgTWV0YUJ1dHRvbiA9IDB4MDgwMCwKICAgICAgICBLZXlCdXR0b25N
YXNrID0gMHgwZjAwLAogICAgICAgIEtleXBhZCA9IDB4NDAwMAogICAgfTsKCgoKICAgIGVudW0g
T3JpZW50YXRpb24gewogICAgICAgIEhvcml6b250YWwgPSAwLAogICAgICAgIFZlcnRpY2FsCiAg
ICB9OwoKCgoKCgogICAgZW51bSBBbGlnbm1lbnRGbGFncyB7CiAgICAgICAgQWxpZ25BdXRvID0g
MHgwMDAwLAogICAgICAgIEFsaWduTGVmdCA9IDB4MDAwMSwKICAgICAgICBBbGlnblJpZ2h0ID0g
MHgwMDAyLAogICAgICAgIEFsaWduSENlbnRlciA9IDB4MDAwNCwKICAgICAgICBBbGlnbkp1c3Rp
ZnkgPSAweDAwMDgsCiAgICAgICAgQWxpZ25Ib3Jpem9udGFsX01hc2sgPSBBbGlnbkxlZnQgfCBB
bGlnblJpZ2h0IHwgQWxpZ25IQ2VudGVyIHwgQWxpZ25KdXN0aWZ5LAogICAgICAgIEFsaWduVG9w
ID0gMHgwMDEwLAogICAgICAgIEFsaWduQm90dG9tID0gMHgwMDIwLAogICAgICAgIEFsaWduVkNl
bnRlciA9IDB4MDA0MCwKICAgICAgICBBbGlnblZlcnRpY2FsX01hc2sgPSBBbGlnblRvcCB8IEFs
aWduQm90dG9tIHwgQWxpZ25WQ2VudGVyLAogICAgICAgIEFsaWduQ2VudGVyID0gQWxpZ25WQ2Vu
dGVyIHwgQWxpZ25IQ2VudGVyCiAgICB9OwoKCiAgICBlbnVtIFRleHRGbGFncyB7CiAgICAgICAg
U2luZ2xlTGluZSA9IDB4MDA4MCwKICAgICAgICBEb250Q2xpcCA9IDB4MDEwMCwKICAgICAgICBF
eHBhbmRUYWJzID0gMHgwMjAwLAogICAgICAgIFNob3dQcmVmaXggPSAweDA0MDAsCiAgICAgICAg
V29yZEJyZWFrID0gMHgwODAwLAogICAgICAgIEJyZWFrQW55d2hlcmUgPSAweDEwMDAsCiAgICAg
ICAgRG9udFByaW50ID0gMHgyMDAwLAogICAgICAgIE5vQWNjZWwgPSAweDQwMDAKICAgIH07CgoK
ICAgIHR5cGVkZWYgdWludCBXU3RhdGU7CgoKICAgIGVudW0gV2lkZ2V0U3RhdGUgewogICAgICAg
IFdTdGF0ZV9DcmVhdGVkID0gMHgwMDAwMDAwMSwKICAgICAgICBXU3RhdGVfRGlzYWJsZWQgPSAw
eDAwMDAwMDAyLAogICAgICAgIFdTdGF0ZV9WaXNpYmxlID0gMHgwMDAwMDAwNCwKICAgICAgICBX
U3RhdGVfRm9yY2VIaWRlID0gMHgwMDAwMDAwOCwKICAgICAgICBXU3RhdGVfT3duQ3Vyc29yID0g
MHgwMDAwMDAxMCwKICAgICAgICBXU3RhdGVfTW91c2VUcmFja2luZyA9IDB4MDAwMDAwMjAsCiAg
ICAgICAgV1N0YXRlX0NvbXByZXNzS2V5cyA9IDB4MDAwMDAwNDAsCiAgICAgICAgV1N0YXRlX0Js
b2NrVXBkYXRlcyA9IDB4MDAwMDAwODAsCiAgICAgICAgV1N0YXRlX0luUGFpbnRFdmVudCA9IDB4
MDAwMDAxMDAsCiAgICAgICAgV1N0YXRlX1JlcGFyZW50ZWQgPSAweDAwMDAwMjAwLAogICAgICAg
IFdTdGF0ZV9Db25maWdQZW5kaW5nID0gMHgwMDAwMDQwMCwKICAgICAgICBXU3RhdGVfUmVzaXpl
ZCA9IDB4MDAwMDA4MDAsCiAgICAgICAgV1N0YXRlX0F1dG9NYXNrID0gMHgwMDAwMTAwMCwKICAg
ICAgICBXU3RhdGVfUG9saXNoZWQgPSAweDAwMDAyMDAwLAogICAgICAgIFdTdGF0ZV9ETkQgPSAw
eDAwMDA0MDAwLAogICAgICAgIFdTdGF0ZV9SZXNlcnZlZDAgPSAweDAwMDA4MDAwLAogICAgICAg
IFdTdGF0ZV9SZXNlcnZlZDEgPSAweDAwMDEwMDAwLAogICAgICAgIFdTdGF0ZV9SZXNlcnZlZDIg
PSAweDAwMDIwMDAwLAogICAgICAgIFdTdGF0ZV9SZXNlcnZlZDMgPSAweDAwMDQwMDAwLAogICAg
ICAgIFdTdGF0ZV9NYXhpbWl6ZWQgPSAweDAwMDgwMDAwLAogICAgICAgIFdTdGF0ZV9NaW5pbWl6
ZWQgPSAweDAwMTAwMDAwLAogICAgICAgIFdTdGF0ZV9Gb3JjZURpc2FibGVkID0gMHgwMDIwMDAw
MCwKICAgICAgICBXU3RhdGVfRXhwb3NlZCA9IDB4MDA0MDAwMDAsCiAgICAgICAgV1N0YXRlX0hh
c01vdXNlID0gMHgwMDgwMDAwMAogICAgfTsKCgogICAgdHlwZWRlZiB1aW50IFdGbGFnczsKCgog
ICAgZW51bSBXaWRnZXRGbGFncyB7CiAgICAgICAgV1R5cGVfVG9wTGV2ZWwgPSAweDAwMDAwMDAx
LAogICAgICAgIFdUeXBlX0RpYWxvZyA9IDB4MDAwMDAwMDIsCiAgICAgICAgV1R5cGVfUG9wdXAg
PSAweDAwMDAwMDA0LAogICAgICAgIFdUeXBlX0Rlc2t0b3AgPSAweDAwMDAwMDA4LAogICAgICAg
IFdUeXBlX01hc2sgPSAweDAwMDAwMDBmLAoKICAgICAgICBXU3R5bGVfQ3VzdG9taXplID0gMHgw
MDAwMDAxMCwKICAgICAgICBXU3R5bGVfTm9ybWFsQm9yZGVyID0gMHgwMDAwMDAyMCwKICAgICAg
ICBXU3R5bGVfRGlhbG9nQm9yZGVyID0gMHgwMDAwMDA0MCwKICAgICAgICBXU3R5bGVfTm9Cb3Jk
ZXIgPSAweDAwMDAyMDAwLAogICAgICAgIFdTdHlsZV9UaXRsZSA9IDB4MDAwMDAwODAsCiAgICAg
ICAgV1N0eWxlX1N5c01lbnUgPSAweDAwMDAwMTAwLAogICAgICAgIFdTdHlsZV9NaW5pbWl6ZSA9
IDB4MDAwMDAyMDAsCiAgICAgICAgV1N0eWxlX01heGltaXplID0gMHgwMDAwMDQwMCwKICAgICAg
ICBXU3R5bGVfTWluTWF4ID0gV1N0eWxlX01pbmltaXplIHwgV1N0eWxlX01heGltaXplLAogICAg
ICAgIFdTdHlsZV9Ub29sID0gMHgwMDAwMDgwMCwKICAgICAgICBXU3R5bGVfU3RheXNPblRvcCA9
IDB4MDAwMDEwMDAsCiAgICAgICAgV1N0eWxlX0NvbnRleHRIZWxwID0gMHgwMDAwNDAwMCwKICAg
ICAgICBXU3R5bGVfUmVzZXJ2ZWQgPSAweDAwMDA4MDAwLAogICAgICAgIFdTdHlsZV9NYXNrID0g
MHgwMDAwZmZmMCwKCiAgICAgICAgV0Rlc3RydWN0aXZlQ2xvc2UgPSAweDAwMDEwMDAwLAogICAg
ICAgIFdQYWludERlc2t0b3AgPSAweDAwMDIwMDAwLAogICAgICAgIFdQYWludFVuY2xpcHBlZCA9
IDB4MDAwNDAwMDAsCiAgICAgICAgV1BhaW50Q2xldmVyID0gMHgwMDA4MDAwMCwKICAgICAgICBX
UmVzaXplTm9FcmFzZSA9IDB4MDAxMDAwMDAsCiAgICAgICAgV01vdXNlTm9NYXNrID0gMHgwMDIw
MDAwMCwKICAgICAgICBXU3RhdGljQ29udGVudHMgPSAweDAwNDAwMDAwLAogICAgICAgIFdSZXBh
aW50Tm9FcmFzZSA9IDB4MDA4MDAwMDAsCgogICAgICAgIFdYMTFCeXBhc3NXTSA9IDB4MDEwMDAw
MDAsCiAgICAgICAgV1dpbk93bkRDID0gMHgwMDAwMDAwMCwKCgoKCiAgICAgICAgV0dyb3VwTGVh
ZGVyID0gMHgwMjAwMDAwMCwKICAgICAgICBXU2hvd01vZGFsID0gMHgwNDAwMDAwMCwKICAgICAg
ICBXTm9Nb3VzZVByb3BhZ2F0aW9uID0gMHgwODAwMDAwMCwKICAgICAgICBXU3ViV2luZG93ID0g
MHgxMDAwMDAwMAoKICAgICAgICAsCiAgICAgICAgV05vcnRoV2VzdEdyYXZpdHkgPSBXU3RhdGlj
Q29udGVudHMsCiAgICAgICAgV1R5cGVfTW9kYWwgPSBXVHlwZV9EaWFsb2cgfCBXU2hvd01vZGFs
LAogICAgICAgIFdTdHlsZV9EaWFsb2cgPSBXVHlwZV9EaWFsb2csCiAgICAgICAgV1N0eWxlX05v
Qm9yZGVyRXggPSBXU3R5bGVfTm9Cb3JkZXIKCiAgICB9OwoKCgoKCiAgICBlbnVtIEltYWdlQ29u
dmVyc2lvbkZsYWdzIHsKICAgICAgICBDb2xvck1vZGVfTWFzayA9IDB4MDAwMDAwMDMsCiAgICAg
ICAgQXV0b0NvbG9yID0gMHgwMDAwMDAwMCwKICAgICAgICBDb2xvck9ubHkgPSAweDAwMDAwMDAz
LAogICAgICAgIE1vbm9Pbmx5ID0gMHgwMDAwMDAwMiwKCgogICAgICAgIEFscGhhRGl0aGVyX01h
c2sgPSAweDAwMDAwMDBjLAogICAgICAgIFRocmVzaG9sZEFscGhhRGl0aGVyID0gMHgwMDAwMDAw
MCwKICAgICAgICBPcmRlcmVkQWxwaGFEaXRoZXIgPSAweDAwMDAwMDA0LAogICAgICAgIERpZmZ1
c2VBbHBoYURpdGhlciA9IDB4MDAwMDAwMDgsCiAgICAgICAgTm9BbHBoYSA9IDB4MDAwMDAwMGMs
CgogICAgICAgIERpdGhlcl9NYXNrID0gMHgwMDAwMDAzMCwKICAgICAgICBEaWZmdXNlRGl0aGVy
ID0gMHgwMDAwMDAwMCwKICAgICAgICBPcmRlcmVkRGl0aGVyID0gMHgwMDAwMDAxMCwKICAgICAg
ICBUaHJlc2hvbGREaXRoZXIgPSAweDAwMDAwMDIwLAoKCiAgICAgICAgRGl0aGVyTW9kZV9NYXNr
ID0gMHgwMDAwMDBjMCwKICAgICAgICBBdXRvRGl0aGVyID0gMHgwMDAwMDAwMCwKICAgICAgICBQ
cmVmZXJEaXRoZXIgPSAweDAwMDAwMDQwLAogICAgICAgIEF2b2lkRGl0aGVyID0gMHgwMDAwMDA4
MAogICAgfTsKCgogICAgZW51bSBCR01vZGUgewogICAgICAgIFRyYW5zcGFyZW50TW9kZSwKICAg
ICAgICBPcGFxdWVNb2RlCiAgICB9OwoKCgogICAgZW51bSBQYWludFVuaXQgewogICAgICAgIFBp
eGVsVW5pdCwKICAgICAgICBMb01ldHJpY1VuaXQsCiAgICAgICAgSGlNZXRyaWNVbml0LAogICAg
ICAgIExvRW5nbGlzaFVuaXQsCiAgICAgICAgSGlFbmdsaXNoVW5pdCwKICAgICAgICBUd2lwc1Vu
aXQKICAgIH07CiMgMjY0ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcW5h
bWVzcGFjZS5oIgogICAgZW51bSBHVUlTdHlsZSB7CiAgICAgICAgTWFjU3R5bGUsCiAgICAgICAg
V2luZG93c1N0eWxlLAogICAgICAgIFdpbjNTdHlsZSwKICAgICAgICBQTVN0eWxlLAogICAgICAg
IE1vdGlmU3R5bGUKICAgIH07CgoKCiAgICBlbnVtIE1vZGlmaWVyIHsKICAgICAgICBTSElGVCA9
IDB4MDAyMDAwMDAsCiAgICAgICAgQ1RSTCA9IDB4MDA0MDAwMDAsCiAgICAgICAgQUxUID0gMHgw
MDgwMDAwMCwKICAgICAgICBNT0RJRklFUl9NQVNLID0gMHgwMGUwMDAwMCwKICAgICAgICBVTklD
T0RFX0FDQ0VMID0gMHgxMDAwMDAwMCwKCiAgICAgICAgQVNDSUlfQUNDRUwgPSBVTklDT0RFX0FD
Q0VMCiAgICB9OwoKCiAgICBlbnVtIEtleSB7CiAgICAgICAgS2V5X0VzY2FwZSA9IDB4MTAwMCwK
ICAgICAgICBLZXlfVGFiID0gMHgxMDAxLAogICAgICAgIEtleV9CYWNrdGFiID0gMHgxMDAyLCBL
ZXlfQmFja1RhYiA9IEtleV9CYWNrdGFiLAogICAgICAgIEtleV9CYWNrc3BhY2UgPSAweDEwMDMs
IEtleV9CYWNrU3BhY2UgPSBLZXlfQmFja3NwYWNlLAogICAgICAgIEtleV9SZXR1cm4gPSAweDEw
MDQsCiAgICAgICAgS2V5X0VudGVyID0gMHgxMDA1LAogICAgICAgIEtleV9JbnNlcnQgPSAweDEw
MDYsCiAgICAgICAgS2V5X0RlbGV0ZSA9IDB4MTAwNywKICAgICAgICBLZXlfUGF1c2UgPSAweDEw
MDgsCiAgICAgICAgS2V5X1ByaW50ID0gMHgxMDA5LAogICAgICAgIEtleV9TeXNSZXEgPSAweDEw
MGEsCiAgICAgICAgS2V5X0hvbWUgPSAweDEwMTAsCiAgICAgICAgS2V5X0VuZCA9IDB4MTAxMSwK
ICAgICAgICBLZXlfTGVmdCA9IDB4MTAxMiwKICAgICAgICBLZXlfVXAgPSAweDEwMTMsCiAgICAg
ICAgS2V5X1JpZ2h0ID0gMHgxMDE0LAogICAgICAgIEtleV9Eb3duID0gMHgxMDE1LAogICAgICAg
IEtleV9QcmlvciA9IDB4MTAxNiwgS2V5X1BhZ2VVcCA9IEtleV9QcmlvciwKICAgICAgICBLZXlf
TmV4dCA9IDB4MTAxNywgS2V5X1BhZ2VEb3duID0gS2V5X05leHQsCiAgICAgICAgS2V5X1NoaWZ0
ID0gMHgxMDIwLAogICAgICAgIEtleV9Db250cm9sID0gMHgxMDIxLAogICAgICAgIEtleV9NZXRh
ID0gMHgxMDIyLAogICAgICAgIEtleV9BbHQgPSAweDEwMjMsCiAgICAgICAgS2V5X0NhcHNMb2Nr
ID0gMHgxMDI0LAogICAgICAgIEtleV9OdW1Mb2NrID0gMHgxMDI1LAogICAgICAgIEtleV9TY3Jv
bGxMb2NrID0gMHgxMDI2LAogICAgICAgIEtleV9GMSA9IDB4MTAzMCwKICAgICAgICBLZXlfRjIg
PSAweDEwMzEsCiAgICAgICAgS2V5X0YzID0gMHgxMDMyLAogICAgICAgIEtleV9GNCA9IDB4MTAz
MywKICAgICAgICBLZXlfRjUgPSAweDEwMzQsCiAgICAgICAgS2V5X0Y2ID0gMHgxMDM1LAogICAg
ICAgIEtleV9GNyA9IDB4MTAzNiwKICAgICAgICBLZXlfRjggPSAweDEwMzcsCiAgICAgICAgS2V5
X0Y5ID0gMHgxMDM4LAogICAgICAgIEtleV9GMTAgPSAweDEwMzksCiAgICAgICAgS2V5X0YxMSA9
IDB4MTAzYSwKICAgICAgICBLZXlfRjEyID0gMHgxMDNiLAogICAgICAgIEtleV9GMTMgPSAweDEw
M2MsCiAgICAgICAgS2V5X0YxNCA9IDB4MTAzZCwKICAgICAgICBLZXlfRjE1ID0gMHgxMDNlLAog
ICAgICAgIEtleV9GMTYgPSAweDEwM2YsCiAgICAgICAgS2V5X0YxNyA9IDB4MTA0MCwKICAgICAg
ICBLZXlfRjE4ID0gMHgxMDQxLAogICAgICAgIEtleV9GMTkgPSAweDEwNDIsCiAgICAgICAgS2V5
X0YyMCA9IDB4MTA0MywKICAgICAgICBLZXlfRjIxID0gMHgxMDQ0LAogICAgICAgIEtleV9GMjIg
PSAweDEwNDUsCiAgICAgICAgS2V5X0YyMyA9IDB4MTA0NiwKICAgICAgICBLZXlfRjI0ID0gMHgx
MDQ3LAogICAgICAgIEtleV9GMjUgPSAweDEwNDgsCiAgICAgICAgS2V5X0YyNiA9IDB4MTA0OSwK
ICAgICAgICBLZXlfRjI3ID0gMHgxMDRhLAogICAgICAgIEtleV9GMjggPSAweDEwNGIsCiAgICAg
ICAgS2V5X0YyOSA9IDB4MTA0YywKICAgICAgICBLZXlfRjMwID0gMHgxMDRkLAogICAgICAgIEtl
eV9GMzEgPSAweDEwNGUsCiAgICAgICAgS2V5X0YzMiA9IDB4MTA0ZiwKICAgICAgICBLZXlfRjMz
ID0gMHgxMDUwLAogICAgICAgIEtleV9GMzQgPSAweDEwNTEsCiAgICAgICAgS2V5X0YzNSA9IDB4
MTA1MiwKICAgICAgICBLZXlfU3VwZXJfTCA9IDB4MTA1MywKICAgICAgICBLZXlfU3VwZXJfUiA9
IDB4MTA1NCwKICAgICAgICBLZXlfTWVudSA9IDB4MTA1NSwKICAgICAgICBLZXlfSHlwZXJfTCA9
IDB4MTA1NiwKICAgICAgICBLZXlfSHlwZXJfUiA9IDB4MTA1NywKICAgICAgICBLZXlfSGVscCA9
IDB4MTA1OCwKICAgICAgICBLZXlfRGlyZWN0aW9uX0wgPSAweDEwNTksCiAgICAgICAgS2V5X0Rp
cmVjdGlvbl9SID0gMHgxMDYwLAogICAgICAgIEtleV9TcGFjZSA9IDB4MjAsCiAgICAgICAgS2V5
X0FueSA9IEtleV9TcGFjZSwKICAgICAgICBLZXlfRXhjbGFtID0gMHgyMSwKICAgICAgICBLZXlf
UXVvdGVEYmwgPSAweDIyLAogICAgICAgIEtleV9OdW1iZXJTaWduID0gMHgyMywKICAgICAgICBL
ZXlfRG9sbGFyID0gMHgyNCwKICAgICAgICBLZXlfUGVyY2VudCA9IDB4MjUsCiAgICAgICAgS2V5
X0FtcGVyc2FuZCA9IDB4MjYsCiAgICAgICAgS2V5X0Fwb3N0cm9waGUgPSAweDI3LAogICAgICAg
IEtleV9QYXJlbkxlZnQgPSAweDI4LAogICAgICAgIEtleV9QYXJlblJpZ2h0ID0gMHgyOSwKICAg
ICAgICBLZXlfQXN0ZXJpc2sgPSAweDJhLAogICAgICAgIEtleV9QbHVzID0gMHgyYiwKICAgICAg
ICBLZXlfQ29tbWEgPSAweDJjLAogICAgICAgIEtleV9NaW51cyA9IDB4MmQsCiAgICAgICAgS2V5
X1BlcmlvZCA9IDB4MmUsCiAgICAgICAgS2V5X1NsYXNoID0gMHgyZiwKICAgICAgICBLZXlfMCA9
IDB4MzAsCiAgICAgICAgS2V5XzEgPSAweDMxLAogICAgICAgIEtleV8yID0gMHgzMiwKICAgICAg
ICBLZXlfMyA9IDB4MzMsCiAgICAgICAgS2V5XzQgPSAweDM0LAogICAgICAgIEtleV81ID0gMHgz
NSwKICAgICAgICBLZXlfNiA9IDB4MzYsCiAgICAgICAgS2V5XzcgPSAweDM3LAogICAgICAgIEtl
eV84ID0gMHgzOCwKICAgICAgICBLZXlfOSA9IDB4MzksCiAgICAgICAgS2V5X0NvbG9uID0gMHgz
YSwKICAgICAgICBLZXlfU2VtaWNvbG9uID0gMHgzYiwKICAgICAgICBLZXlfTGVzcyA9IDB4M2Ms
CiAgICAgICAgS2V5X0VxdWFsID0gMHgzZCwKICAgICAgICBLZXlfR3JlYXRlciA9IDB4M2UsCiAg
ICAgICAgS2V5X1F1ZXN0aW9uID0gMHgzZiwKICAgICAgICBLZXlfQXQgPSAweDQwLAogICAgICAg
IEtleV9BID0gMHg0MSwKICAgICAgICBLZXlfQiA9IDB4NDIsCiAgICAgICAgS2V5X0MgPSAweDQz
LAogICAgICAgIEtleV9EID0gMHg0NCwKICAgICAgICBLZXlfRSA9IDB4NDUsCiAgICAgICAgS2V5
X0YgPSAweDQ2LAogICAgICAgIEtleV9HID0gMHg0NywKICAgICAgICBLZXlfSCA9IDB4NDgsCiAg
ICAgICAgS2V5X0kgPSAweDQ5LAogICAgICAgIEtleV9KID0gMHg0YSwKICAgICAgICBLZXlfSyA9
IDB4NGIsCiAgICAgICAgS2V5X0wgPSAweDRjLAogICAgICAgIEtleV9NID0gMHg0ZCwKICAgICAg
ICBLZXlfTiA9IDB4NGUsCiAgICAgICAgS2V5X08gPSAweDRmLAogICAgICAgIEtleV9QID0gMHg1
MCwKICAgICAgICBLZXlfUSA9IDB4NTEsCiAgICAgICAgS2V5X1IgPSAweDUyLAogICAgICAgIEtl
eV9TID0gMHg1MywKICAgICAgICBLZXlfVCA9IDB4NTQsCiAgICAgICAgS2V5X1UgPSAweDU1LAog
ICAgICAgIEtleV9WID0gMHg1NiwKICAgICAgICBLZXlfVyA9IDB4NTcsCiAgICAgICAgS2V5X1gg
PSAweDU4LAogICAgICAgIEtleV9ZID0gMHg1OSwKICAgICAgICBLZXlfWiA9IDB4NWEsCiAgICAg
ICAgS2V5X0JyYWNrZXRMZWZ0ID0gMHg1YiwKICAgICAgICBLZXlfQmFja3NsYXNoID0gMHg1YywK
ICAgICAgICBLZXlfQnJhY2tldFJpZ2h0ID0gMHg1ZCwKICAgICAgICBLZXlfQXNjaWlDaXJjdW0g
PSAweDVlLAogICAgICAgIEtleV9VbmRlcnNjb3JlID0gMHg1ZiwKICAgICAgICBLZXlfUXVvdGVM
ZWZ0ID0gMHg2MCwKICAgICAgICBLZXlfQnJhY2VMZWZ0ID0gMHg3YiwKICAgICAgICBLZXlfQmFy
ID0gMHg3YywKICAgICAgICBLZXlfQnJhY2VSaWdodCA9IDB4N2QsCiAgICAgICAgS2V5X0FzY2lp
VGlsZGUgPSAweDdlLAoKCgogICAgICAgIEtleV9ub2JyZWFrc3BhY2UgPSAweDBhMCwKICAgICAg
ICBLZXlfZXhjbGFtZG93biA9IDB4MGExLAogICAgICAgIEtleV9jZW50ID0gMHgwYTIsCiAgICAg
ICAgS2V5X3N0ZXJsaW5nID0gMHgwYTMsCiAgICAgICAgS2V5X2N1cnJlbmN5ID0gMHgwYTQsCiAg
ICAgICAgS2V5X3llbiA9IDB4MGE1LAogICAgICAgIEtleV9icm9rZW5iYXIgPSAweDBhNiwKICAg
ICAgICBLZXlfc2VjdGlvbiA9IDB4MGE3LAogICAgICAgIEtleV9kaWFlcmVzaXMgPSAweDBhOCwK
ICAgICAgICBLZXlfY29weXJpZ2h0ID0gMHgwYTksCiAgICAgICAgS2V5X29yZGZlbWluaW5lID0g
MHgwYWEsCiAgICAgICAgS2V5X2d1aWxsZW1vdGxlZnQgPSAweDBhYiwKICAgICAgICBLZXlfbm90
c2lnbiA9IDB4MGFjLAogICAgICAgIEtleV9oeXBoZW4gPSAweDBhZCwKICAgICAgICBLZXlfcmVn
aXN0ZXJlZCA9IDB4MGFlLAogICAgICAgIEtleV9tYWNyb24gPSAweDBhZiwKICAgICAgICBLZXlf
ZGVncmVlID0gMHgwYjAsCiAgICAgICAgS2V5X3BsdXNtaW51cyA9IDB4MGIxLAogICAgICAgIEtl
eV90d29zdXBlcmlvciA9IDB4MGIyLAogICAgICAgIEtleV90aHJlZXN1cGVyaW9yID0gMHgwYjMs
CiAgICAgICAgS2V5X2FjdXRlID0gMHgwYjQsCiAgICAgICAgS2V5X211ID0gMHgwYjUsCiAgICAg
ICAgS2V5X3BhcmFncmFwaCA9IDB4MGI2LAogICAgICAgIEtleV9wZXJpb2RjZW50ZXJlZCA9IDB4
MGI3LAogICAgICAgIEtleV9jZWRpbGxhID0gMHgwYjgsCiAgICAgICAgS2V5X29uZXN1cGVyaW9y
ID0gMHgwYjksCiAgICAgICAgS2V5X21hc2N1bGluZSA9IDB4MGJhLAogICAgICAgIEtleV9ndWls
bGVtb3RyaWdodCA9IDB4MGJiLAogICAgICAgIEtleV9vbmVxdWFydGVyID0gMHgwYmMsCiAgICAg
ICAgS2V5X29uZWhhbGYgPSAweDBiZCwKICAgICAgICBLZXlfdGhyZWVxdWFydGVycyA9IDB4MGJl
LAogICAgICAgIEtleV9xdWVzdGlvbmRvd24gPSAweDBiZiwKICAgICAgICBLZXlfQWdyYXZlID0g
MHgwYzAsCiAgICAgICAgS2V5X0FhY3V0ZSA9IDB4MGMxLAogICAgICAgIEtleV9BY2lyY3VtZmxl
eCA9IDB4MGMyLAogICAgICAgIEtleV9BdGlsZGUgPSAweDBjMywKICAgICAgICBLZXlfQWRpYWVy
ZXNpcyA9IDB4MGM0LAogICAgICAgIEtleV9BcmluZyA9IDB4MGM1LAogICAgICAgIEtleV9BRSA9
IDB4MGM2LAogICAgICAgIEtleV9DY2VkaWxsYSA9IDB4MGM3LAogICAgICAgIEtleV9FZ3JhdmUg
PSAweDBjOCwKICAgICAgICBLZXlfRWFjdXRlID0gMHgwYzksCiAgICAgICAgS2V5X0VjaXJjdW1m
bGV4ID0gMHgwY2EsCiAgICAgICAgS2V5X0VkaWFlcmVzaXMgPSAweDBjYiwKICAgICAgICBLZXlf
SWdyYXZlID0gMHgwY2MsCiAgICAgICAgS2V5X0lhY3V0ZSA9IDB4MGNkLAogICAgICAgIEtleV9J
Y2lyY3VtZmxleCA9IDB4MGNlLAogICAgICAgIEtleV9JZGlhZXJlc2lzID0gMHgwY2YsCiAgICAg
ICAgS2V5X0VUSCA9IDB4MGQwLAogICAgICAgIEtleV9OdGlsZGUgPSAweDBkMSwKICAgICAgICBL
ZXlfT2dyYXZlID0gMHgwZDIsCiAgICAgICAgS2V5X09hY3V0ZSA9IDB4MGQzLAogICAgICAgIEtl
eV9PY2lyY3VtZmxleCA9IDB4MGQ0LAogICAgICAgIEtleV9PdGlsZGUgPSAweDBkNSwKICAgICAg
ICBLZXlfT2RpYWVyZXNpcyA9IDB4MGQ2LAogICAgICAgIEtleV9tdWx0aXBseSA9IDB4MGQ3LAog
ICAgICAgIEtleV9Pb2JsaXF1ZSA9IDB4MGQ4LAogICAgICAgIEtleV9VZ3JhdmUgPSAweDBkOSwK
ICAgICAgICBLZXlfVWFjdXRlID0gMHgwZGEsCiAgICAgICAgS2V5X1VjaXJjdW1mbGV4ID0gMHgw
ZGIsCiAgICAgICAgS2V5X1VkaWFlcmVzaXMgPSAweDBkYywKICAgICAgICBLZXlfWWFjdXRlID0g
MHgwZGQsCiAgICAgICAgS2V5X1RIT1JOID0gMHgwZGUsCiAgICAgICAgS2V5X3NzaGFycCA9IDB4
MGRmLAogICAgICAgIEtleV9hZ3JhdmUgPSAweDBlMCwKICAgICAgICBLZXlfYWFjdXRlID0gMHgw
ZTEsCiAgICAgICAgS2V5X2FjaXJjdW1mbGV4ID0gMHgwZTIsCiAgICAgICAgS2V5X2F0aWxkZSA9
IDB4MGUzLAogICAgICAgIEtleV9hZGlhZXJlc2lzID0gMHgwZTQsCiAgICAgICAgS2V5X2FyaW5n
ID0gMHgwZTUsCiAgICAgICAgS2V5X2FlID0gMHgwZTYsCiAgICAgICAgS2V5X2NjZWRpbGxhID0g
MHgwZTcsCiAgICAgICAgS2V5X2VncmF2ZSA9IDB4MGU4LAogICAgICAgIEtleV9lYWN1dGUgPSAw
eDBlOSwKICAgICAgICBLZXlfZWNpcmN1bWZsZXggPSAweDBlYSwKICAgICAgICBLZXlfZWRpYWVy
ZXNpcyA9IDB4MGViLAogICAgICAgIEtleV9pZ3JhdmUgPSAweDBlYywKICAgICAgICBLZXlfaWFj
dXRlID0gMHgwZWQsCiAgICAgICAgS2V5X2ljaXJjdW1mbGV4ID0gMHgwZWUsCiAgICAgICAgS2V5
X2lkaWFlcmVzaXMgPSAweDBlZiwKICAgICAgICBLZXlfZXRoID0gMHgwZjAsCiAgICAgICAgS2V5
X250aWxkZSA9IDB4MGYxLAogICAgICAgIEtleV9vZ3JhdmUgPSAweDBmMiwKICAgICAgICBLZXlf
b2FjdXRlID0gMHgwZjMsCiAgICAgICAgS2V5X29jaXJjdW1mbGV4ID0gMHgwZjQsCiAgICAgICAg
S2V5X290aWxkZSA9IDB4MGY1LAogICAgICAgIEtleV9vZGlhZXJlc2lzID0gMHgwZjYsCiAgICAg
ICAgS2V5X2RpdmlzaW9uID0gMHgwZjcsCiAgICAgICAgS2V5X29zbGFzaCA9IDB4MGY4LAogICAg
ICAgIEtleV91Z3JhdmUgPSAweDBmOSwKICAgICAgICBLZXlfdWFjdXRlID0gMHgwZmEsCiAgICAg
ICAgS2V5X3VjaXJjdW1mbGV4ID0gMHgwZmIsCiAgICAgICAgS2V5X3VkaWFlcmVzaXMgPSAweDBm
YywKICAgICAgICBLZXlfeWFjdXRlID0gMHgwZmQsCiAgICAgICAgS2V5X3Rob3JuID0gMHgwZmUs
CiAgICAgICAgS2V5X3lkaWFlcmVzaXMgPSAweDBmZiwKCiAgICAgICAgS2V5X3Vua25vd24gPSAw
eGZmZmYKICAgIH07CgoKICAgIGVudW0gQXJyb3dUeXBlIHsKICAgICAgICBVcEFycm93LAogICAg
ICAgIERvd25BcnJvdywKICAgICAgICBMZWZ0QXJyb3csCiAgICAgICAgUmlnaHRBcnJvdwogICAg
fTsKCgogICAgZW51bSBSYXN0ZXJPcCB7CiAgICAgICAgQ29weVJPUCwKICAgICAgICBPclJPUCwK
ICAgICAgICBYb3JST1AsCiAgICAgICAgTm90QW5kUk9QLCBFcmFzZVJPUD1Ob3RBbmRST1AsCiAg
ICAgICAgTm90Q29weVJPUCwKICAgICAgICBOb3RPclJPUCwKICAgICAgICBOb3RYb3JST1AsCiAg
ICAgICAgQW5kUk9QLCBOb3RFcmFzZVJPUD1BbmRST1AsCiAgICAgICAgTm90Uk9QLAogICAgICAg
IENsZWFyUk9QLAogICAgICAgIFNldFJPUCwKICAgICAgICBOb3BST1AsCiAgICAgICAgQW5kTm90
Uk9QLAogICAgICAgIE9yTm90Uk9QLAogICAgICAgIE5hbmRST1AsCiAgICAgICAgTm9yUk9QLCBM
YXN0Uk9QPU5vclJPUAogICAgfTsKCgogICAgZW51bSBQZW5TdHlsZSB7CiAgICAgICAgTm9QZW4s
CiAgICAgICAgU29saWRMaW5lLAogICAgICAgIERhc2hMaW5lLAogICAgICAgIERvdExpbmUsCiAg
ICAgICAgRGFzaERvdExpbmUsCiAgICAgICAgRGFzaERvdERvdExpbmUsCiAgICAgICAgTVBlblN0
eWxlID0gMHgwZgogICAgfTsKCgogICAgZW51bSBQZW5DYXBTdHlsZSB7CiAgICAgICAgRmxhdENh
cCA9IDB4MDAsCiAgICAgICAgU3F1YXJlQ2FwID0gMHgxMCwKICAgICAgICBSb3VuZENhcCA9IDB4
MjAsCiAgICAgICAgTVBlbkNhcFN0eWxlID0gMHgzMAogICAgfTsKCgogICAgZW51bSBQZW5Kb2lu
U3R5bGUgewogICAgICAgIE1pdGVySm9pbiA9IDB4MDAsCiAgICAgICAgQmV2ZWxKb2luID0gMHg0
MCwKICAgICAgICBSb3VuZEpvaW4gPSAweDgwLAogICAgICAgIE1QZW5Kb2luU3R5bGUgPSAweGMw
CiAgICB9OwoKCiAgICBlbnVtIEJydXNoU3R5bGUgewogICAgICAgIE5vQnJ1c2gsCiAgICAgICAg
U29saWRQYXR0ZXJuLAogICAgICAgIERlbnNlMVBhdHRlcm4sCiAgICAgICAgRGVuc2UyUGF0dGVy
biwKICAgICAgICBEZW5zZTNQYXR0ZXJuLAogICAgICAgIERlbnNlNFBhdHRlcm4sCiAgICAgICAg
RGVuc2U1UGF0dGVybiwKICAgICAgICBEZW5zZTZQYXR0ZXJuLAogICAgICAgIERlbnNlN1BhdHRl
cm4sCiAgICAgICAgSG9yUGF0dGVybiwKICAgICAgICBWZXJQYXR0ZXJuLAogICAgICAgIENyb3Nz
UGF0dGVybiwKICAgICAgICBCRGlhZ1BhdHRlcm4sCiAgICAgICAgRkRpYWdQYXR0ZXJuLAogICAg
ICAgIERpYWdDcm9zc1BhdHRlcm4sCiAgICAgICAgQ3VzdG9tUGF0dGVybj0yNAogICAgfTsKCgog
ICAgZW51bSBXaW5kb3dzVmVyc2lvbiB7CiAgICAgICAgV1ZfMzJzID0gMHgwMDAxLAogICAgICAg
IFdWXzk1ID0gMHgwMDAyLAogICAgICAgIFdWXzk4ID0gMHgwMDAzLAogICAgICAgIFdWX01lID0g
MHgwMDA0LAogICAgICAgIFdWX0RPU19iYXNlZCA9IDB4MDAwZiwKCiAgICAgICAgV1ZfTlQgPSAw
eDAwMTAsCiAgICAgICAgV1ZfMjAwMCA9IDB4MDAyMCwKICAgICAgICBXVl9YUCA9IDB4MDAzMCwK
ICAgICAgICBXVl9OVF9iYXNlZCA9IDB4MDBmMAogICAgfTsKCgogICAgZW51bSBVSUVmZmVjdCB7
CiAgICAgICAgVUlfR2VuZXJhbCwKICAgICAgICBVSV9BbmltYXRlTWVudSwKICAgICAgICBVSV9G
YWRlTWVudSwKICAgICAgICBVSV9BbmltYXRlQ29tYm8sCiAgICAgICAgVUlfQW5pbWF0ZVRvb2x0
aXAsCiAgICAgICAgVUlfRmFkZVRvb2x0aXAKICAgIH07CgoKICAgIGVudW0gQ3Vyc29yU2hhcGUg
ewogICAgICAgIEFycm93Q3Vyc29yLAogICAgICAgIFVwQXJyb3dDdXJzb3IsCiAgICAgICAgQ3Jv
c3NDdXJzb3IsCiAgICAgICAgV2FpdEN1cnNvciwKICAgICAgICBJYmVhbUN1cnNvciwKICAgICAg
ICBTaXplVmVyQ3Vyc29yLAogICAgICAgIFNpemVIb3JDdXJzb3IsCiAgICAgICAgU2l6ZUJEaWFn
Q3Vyc29yLAogICAgICAgIFNpemVGRGlhZ0N1cnNvciwKICAgICAgICBTaXplQWxsQ3Vyc29yLAog
ICAgICAgIEJsYW5rQ3Vyc29yLAogICAgICAgIFNwbGl0VkN1cnNvciwKICAgICAgICBTcGxpdEhD
dXJzb3IsCiAgICAgICAgUG9pbnRpbmdIYW5kQ3Vyc29yLAogICAgICAgIEZvcmJpZGRlbkN1cnNv
ciwKICAgICAgICBXaGF0c1RoaXNDdXJzb3IsCiAgICAgICAgTGFzdEN1cnNvciA9IFdoYXRzVGhp
c0N1cnNvciwKICAgICAgICBCaXRtYXBDdXJzb3IgPSAyNAogICAgfTsKCgoKICAgIHN0YXRpYyBj
b25zdCBRQ3Vyc29yICYgYXJyb3dDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHVw
QXJyb3dDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGNyb3NzQ3Vyc29yOwogICAg
c3RhdGljIGNvbnN0IFFDdXJzb3IgJiB3YWl0Q3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJz
b3IgJiBpYmVhbUN1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZVZlckN1cnNv
cjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZUhvckN1cnNvcjsKICAgIHN0YXRpYyBj
b25zdCBRQ3Vyc29yICYgc2l6ZUJEaWFnQ3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3Ig
JiBzaXplRkRpYWdDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHNpemVBbGxDdXJz
b3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGJsYW5rQ3Vyc29yOwogICAgc3RhdGljIGNv
bnN0IFFDdXJzb3IgJiBzcGxpdFZDdXJzb3I7CgogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBz
cGxpdEhDdXJzb3I7CgogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBwb2ludGluZ0hhbmRDdXJz
b3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGZvcmJpZGRlbkN1cnNvcjsKICAgIHN0YXRp
YyBjb25zdCBRQ3Vyc29yICYgd2hhdHNUaGlzQ3Vyc29yOwoKCiAgICBlbnVtIFRleHRGb3JtYXQg
ewogICAgICAgIFBsYWluVGV4dCwKICAgICAgICBSaWNoVGV4dCwKICAgICAgICBBdXRvVGV4dAog
ICAgfTsKCgogICAgZW51bSBEb2NrIHsKICAgICAgICBEb2NrVW5tYW5hZ2VkLAogICAgICAgIERv
Y2tUb3JuT2ZmLAogICAgICAgIERvY2tUb3AsCiAgICAgICAgRG9ja0JvdHRvbSwKICAgICAgICBE
b2NrUmlnaHQsCiAgICAgICAgRG9ja0xlZnQsCiAgICAgICAgRG9ja01pbmltaXplZAoKICAgICAg
ICAsCiAgICAgICAgVW5tYW5hZ2VkID0gRG9ja1VubWFuYWdlZCwKICAgICAgICBUb3JuT2ZmID0g
RG9ja1Rvcm5PZmYsCiAgICAgICAgVG9wID0gRG9ja1RvcCwKICAgICAgICBCb3R0b20gPSBEb2Nr
Qm90dG9tLAogICAgICAgIFJpZ2h0ID0gRG9ja1JpZ2h0LAogICAgICAgIExlZnQgPSBEb2NrTGVm
dCwKICAgICAgICBNaW5pbWl6ZWQgPSBEb2NrTWluaW1pemVkCgogICAgfTsKCiAgICB0eXBlZGVm
IERvY2sgVG9vbEJhckRvY2s7CgoKICAgIGVudW0gRGF0ZUZvcm1hdCB7CiAgICAgICAgVGV4dERh
dGUsCiAgICAgICAgSVNPRGF0ZSwKICAgICAgICBMb2NhbERhdGUKICAgIH07CgoKICAgIGVudW0g
QmFja2dyb3VuZE1vZGUgewogICAgICAgIEZpeGVkQ29sb3IsCiAgICAgICAgRml4ZWRQaXhtYXAs
CiAgICAgICAgTm9CYWNrZ3JvdW5kLAogICAgICAgIFBhbGV0dGVGb3JlZ3JvdW5kLAogICAgICAg
IFBhbGV0dGVCdXR0b24sCiAgICAgICAgUGFsZXR0ZUxpZ2h0LAogICAgICAgIFBhbGV0dGVNaWRs
aWdodCwKICAgICAgICBQYWxldHRlRGFyaywKICAgICAgICBQYWxldHRlTWlkLAogICAgICAgIFBh
bGV0dGVUZXh0LAogICAgICAgIFBhbGV0dGVCcmlnaHRUZXh0LAogICAgICAgIFBhbGV0dGVCYXNl
LAogICAgICAgIFBhbGV0dGVCYWNrZ3JvdW5kLAogICAgICAgIFBhbGV0dGVTaGFkb3csCiAgICAg
ICAgUGFsZXR0ZUhpZ2hsaWdodCwKICAgICAgICBQYWxldHRlSGlnaGxpZ2h0ZWRUZXh0LAogICAg
ICAgIFBhbGV0dGVCdXR0b25UZXh0LAogICAgICAgIFBhbGV0dGVMaW5rLAogICAgICAgIFBhbGV0
dGVMaW5rVmlzaXRlZCwKICAgICAgICBYMTFQYXJlbnRSZWxhdGl2ZQogICAgfTsKCiAgICB0eXBl
ZGVmIHVpbnQgQ29tcGFyaXNvbkZsYWdzOwoKCiAgICBlbnVtIFN0cmluZ0NvbXBhcmlzb25Nb2Rl
IHsKICAgICAgICBDYXNlU2Vuc2l0aXZlID0gMHgwMDAwMSwKICAgICAgICBCZWdpbnNXaXRoID0g
MHgwMDAwMiwKICAgICAgICBFbmRzV2l0aCA9IDB4MDAwMDQsCiAgICAgICAgQ29udGFpbnMgPSAw
eDAwMDA4LAogICAgICAgIEV4YWN0TWF0Y2ggPSAweDAwMDEwCiAgICB9OwojIDc0OSAiL3Vzci9s
b2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FuYW1lc3BhY2UuaCIKICAgIHR5cGVkZWYg
dW5zaWduZWQgbG9uZyBIQU5ETEU7CgoKCn07CgoKY2xhc3MgUUludGVybmFsIHsKcHVibGljOgog
ICAgZW51bSBQYWludERldmljZUZsYWdzIHsKICAgICAgICBVbmRlZmluZWREZXZpY2UgPSAweDAw
LAogICAgICAgIFdpZGdldCA9IDB4MDEsCiAgICAgICAgUGl4bWFwID0gMHgwMiwKICAgICAgICBQ
cmludGVyID0gMHgwMywKICAgICAgICBQaWN0dXJlID0gMHgwNCwKICAgICAgICBTeXN0ZW0gPSAw
eDA1LAogICAgICAgIERldmljZVR5cGVNYXNrID0gMHgwZiwKICAgICAgICBFeHRlcm5hbERldmlj
ZSA9IDB4MTAsCgogICAgICAgIENvbXBhdGliaWxpdHlNb2RlID0gMHgyMAogICAgfTsKfTsKIyA0
NiAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3F3aW5kb3dkZWZzLmgiIDIK
CgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL2xpbWl0cy5o
IiAxIDMKIyAxMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvbGlt
aXRzLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9z
eXNsaW1pdHMuaCIgMSAzCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMu
Mi4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEzMiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzMuMi4zL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgi
IDEgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0u
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAiL3Vzci9p
bmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRz
LmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIv
dXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9pbmNsdWRlL2xp
bWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEgMwoj
IDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy94b3Blbl9saW0uaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1
ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTM2ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9s
aW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDEzNyAiL3Vz
ci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0
cy5oIiAyIDMKIyAxMzMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRl
L2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5j
bHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMgMTIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8z
LjIuMy9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA0OSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0z
LjAuNi9pbmNsdWRlL3F3aW5kb3dkZWZzLmgiIDIKCgoKY2xhc3MgUVBhaW50RGV2aWNlOwpjbGFz
cyBRUGFpbnREZXZpY2VNZXRyaWNzOwpjbGFzcyBRV2lkZ2V0OwpjbGFzcyBRV2lkZ2V0TWFwcGVy
OwpjbGFzcyBRRGlhbG9nOwpjbGFzcyBRQ29sb3I7CmNsYXNzIFFDb2xvckdyb3VwOwpjbGFzcyBR
UGFsZXR0ZTsKY2xhc3MgUUN1cnNvcjsKY2xhc3MgUVBvaW50OwpjbGFzcyBRU2l6ZTsKY2xhc3Mg
UVJlY3Q7CmNsYXNzIFFQb2ludEFycmF5OwpjbGFzcyBRUGFpbnRlcjsKY2xhc3MgUVJlZ2lvbjsK
Y2xhc3MgUUZvbnQ7CmNsYXNzIFFGb250TWV0cmljczsKY2xhc3MgUUZvbnRJbmZvOwpjbGFzcyBR
UGVuOwpjbGFzcyBRQnJ1c2g7CmNsYXNzIFFXTWF0cml4OwpjbGFzcyBRUGl4bWFwOwpjbGFzcyBR
Qml0bWFwOwpjbGFzcyBRTW92aWU7CmNsYXNzIFFJbWFnZTsKY2xhc3MgUUltYWdlSU87CmNsYXNz
IFFQaWN0dXJlOwpjbGFzcyBRUHJpbnRlcjsKY2xhc3MgUUFjY2VsOwpjbGFzcyBRVGltZXI7CmNs
YXNzIFFUaW1lOwpjbGFzcyBRQ2xpcGJvYXJkOwoKCgoKY2xhc3MgUVdpZGdldExpc3Q7CmNsYXNz
IFFXaWRnZXRMaXN0SXQ7CiMgMTM5ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1
ZGUvcXdpbmRvd2RlZnMuaCIKdHlwZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CnR5cGVk
ZWYgdW5pb24gX1hFdmVudCBYRXZlbnQ7CnR5cGVkZWYgc3RydWN0IF9YR0MgKkdDOwp0eXBlZGVm
IHN0cnVjdCBfWFJlZ2lvbiAqUmVnaW9uOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgV0lkOwoKIERp
c3BsYXkgKnF0X3hkaXNwbGF5KCk7CiBpbnQgcXRfeHNjcmVlbigpOwogV0lkIHF0X3hyb290d2lu
KCk7CiBHQyBxdF94Z2V0X3JlYWRvbmx5X2djKCBpbnQgc2NybiwgYm9vbCBtb25vY2hyb21lICk7
CiBHQyBxdF94Z2V0X3RlbXBfZ2MoIGludCBzY3JuLCBib29sIG1vbm9jaHJvbWUgKTsKIyAxNjEg
Ii91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xd2luZG93ZGVmcy5oIgpjbGFz
cyBRQXBwbGljYXRpb247CgoKCgoKCgp0eXBlZGVmIFFfSU5UMzIgUUNPT1JEOwpjb25zdCBRQ09P
UkQgUUNPT1JEX01BWCA9IDIxNDc0ODM2NDc7CmNvbnN0IFFDT09SRCBRQ09PUkRfTUlOID0gLVFD
T09SRF9NQVggLSAxOwoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgUVJnYjsKCiBjb25zdCBjaGFyICpx
QXBwTmFtZSgpOwoKCgp0eXBlZGVmIHZvaWQgKCpRdENsZWFuVXBGdW5jdGlvbikoKTsKIHZvaWQg
cUFkZFBvc3RSb3V0aW5lKCBRdENsZWFuVXBGdW5jdGlvbiApOwogdm9pZCBxUmVtb3ZlUG9zdFJv
dXRpbmUoIFF0Q2xlYW5VcEZ1bmN0aW9uICk7CgoKCnR5cGVkZWYgUXRDbGVhblVwRnVuY3Rpb24g
UV9DbGVhblVwRnVuY3Rpb247CgoKCiB2b2lkICpxdF9maW5kX29ial9jaGlsZCggUU9iamVjdCAq
LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwojIDQzICIvdXNyL2xvY2FsL3F0LXgxMS1m
cmVlLTMuMC42L2luY2x1ZGUvcXdpZGdldC5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJl
ZS0zLjAuNi9pbmNsdWRlL3FvYmplY3QuaCIgMQojIDQ1ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVl
LTMuMC42L2luY2x1ZGUvcW9iamVjdC5oIgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4w
LjYvaW5jbHVkZS9xZXZlbnQuaCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42
L2luY2x1ZGUvcWV2ZW50LmgiCiMgMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNs
dWRlL3FyZWdpb24uaCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1
ZGUvcXJlZ2lvbi5oIgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9x
cmVjdC5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xcmVj
dC5oIgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xc2l6ZS5oIiAx
CiMgNDIgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xc2l6ZS5oIgojIDEg
Ii91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xcG9pbnQuaCIgMQojIDQ2ICIv
dXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXBvaW50LmgiCmNsYXNzIFFQb2lu
dAp7CnB1YmxpYzoKICAgIFFQb2ludCgpOwogICAgUVBvaW50KCBpbnQgeHBvcywgaW50IHlwb3Mg
KTsKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0OwoKICAgIGludCB4KCkgY29uc3Q7CiAgICBpbnQg
eSgpIGNvbnN0OwogICAgdm9pZCBzZXRYKCBpbnQgeCApOwogICAgdm9pZCBzZXRZKCBpbnQgeSAp
OwoKICAgIGludCBtYW5oYXR0YW5MZW5ndGgoKSBjb25zdDsKCiAgICBRQ09PUkQgJnJ4KCk7CiAg
ICBRQ09PUkQgJnJ5KCk7CgogICAgUVBvaW50ICZvcGVyYXRvcis9KCBjb25zdCBRUG9pbnQgJnAg
KTsKICAgIFFQb2ludCAmb3BlcmF0b3ItPSggY29uc3QgUVBvaW50ICZwICk7CiAgICBRUG9pbnQg
Jm9wZXJhdG9yKj0oIGludCBjICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yKj0oIGRvdWJsZSBjICk7
CiAgICBRUG9pbnQgJm9wZXJhdG9yLz0oIGludCBjICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yLz0o
IGRvdWJsZSBjICk7CgogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQ
b2ludCAmLCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9y
IT0oIGNvbnN0IFFQb2ludCAmLCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBj
b25zdCBRUG9pbnQgb3BlcmF0b3IrKCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVBvaW50ICYgKTsK
ICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICYs
IGNvbnN0IFFQb2ludCAmICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRv
ciooIGNvbnN0IFFQb2ludCAmLCBpbnQgKTsKICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVBvaW50
IG9wZXJhdG9yKiggaW50LCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25z
dCBRUG9pbnQgb3BlcmF0b3IqKCBjb25zdCBRUG9pbnQgJiwgZG91YmxlICk7CiAgICBmcmllbmQg
aW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvciooIGRvdWJsZSwgY29uc3QgUVBvaW50ICYgKTsK
ICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICYg
KTsKICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yLyggY29uc3QgUVBvaW50
ICYsIGludCApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRUG9pbnQgb3BlcmF0b3IvKCBjb25z
dCBRUG9pbnQgJiwgZG91YmxlICk7Cgpwcml2YXRlOgogICAgc3RhdGljIHZvaWQgd2FybmluZ0Rp
dkJ5WmVybygpOwoKCgoKCiAgICBRQ09PUkQgeHA7CiAgICBRQ09PUkQgeXA7Cgp9OwoKCgoKCgog
UURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFQb2ludCAmICk7
CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVBvaW50ICYgKTsKCgoK
CgoKaW5saW5lIFFQb2ludDo6UVBvaW50KCkKeyB4cD0wOyB5cD0wOyB9CgppbmxpbmUgUVBvaW50
OjpRUG9pbnQoIGludCB4cG9zLCBpbnQgeXBvcyApCnsgeHA9KFFDT09SRCl4cG9zOyB5cD0oUUNP
T1JEKXlwb3M7IH0KCmlubGluZSBib29sIFFQb2ludDo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4g
eHAgPT0gMCAmJiB5cCA9PSAwOyB9CgppbmxpbmUgaW50IFFQb2ludDo6eCgpIGNvbnN0CnsgcmV0
dXJuIHhwOyB9CgppbmxpbmUgaW50IFFQb2ludDo6eSgpIGNvbnN0CnsgcmV0dXJuIHlwOyB9Cgpp
bmxpbmUgdm9pZCBRUG9pbnQ6OnNldFgoIGludCB4ICkKeyB4cCA9IChRQ09PUkQpeDsgfQoKaW5s
aW5lIHZvaWQgUVBvaW50OjpzZXRZKCBpbnQgeSApCnsgeXAgPSAoUUNPT1JEKXk7IH0KCmlubGlu
ZSBRQ09PUkQgJlFQb2ludDo6cngoKQp7IHJldHVybiB4cDsgfQoKaW5saW5lIFFDT09SRCAmUVBv
aW50OjpyeSgpCnsgcmV0dXJuIHlwOyB9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9y
Kz0oIGNvbnN0IFFQb2ludCAmcCApCnsgeHArPXAueHA7IHlwKz1wLnlwOyByZXR1cm4gKnRoaXM7
IH0KCmlubGluZSBRUG9pbnQgJlFQb2ludDo6b3BlcmF0b3ItPSggY29uc3QgUVBvaW50ICZwICkK
eyB4cC09cC54cDsgeXAtPXAueXA7IHJldHVybiAqdGhpczsgfQoKaW5saW5lIFFQb2ludCAmUVBv
aW50OjpvcGVyYXRvcio9KCBpbnQgYyApCnsgeHAqPShRQ09PUkQpYzsgeXAqPShRQ09PUkQpYzsg
cmV0dXJuICp0aGlzOyB9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yKj0oIGRvdWJs
ZSBjICkKeyB4cD0oUUNPT1JEKSh4cCpjKTsgeXA9KFFDT09SRCkoeXAqYyk7IHJldHVybiAqdGhp
czsgfQoKaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVBvaW50ICZwMSwgY29uc3QgUVBv
aW50ICZwMiApCnsgcmV0dXJuIHAxLnhwID09IHAyLnhwICYmIHAxLnlwID09IHAyLnlwOyB9Cgpp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAy
ICkKeyByZXR1cm4gcDEueHAgIT0gcDIueHAgfHwgcDEueXAgIT0gcDIueXA7IH0KCmlubGluZSBj
b25zdCBRUG9pbnQgb3BlcmF0b3IrKCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAy
ICkKeyByZXR1cm4gUVBvaW50KHAxLnhwK3AyLnhwLCBwMS55cCtwMi55cCk7IH0KCmlubGluZSBj
b25zdCBRUG9pbnQgb3BlcmF0b3ItKCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAy
ICkKeyByZXR1cm4gUVBvaW50KHAxLnhwLXAyLnhwLCBwMS55cC1wMi55cCk7IH0KCmlubGluZSBj
b25zdCBRUG9pbnQgb3BlcmF0b3IqKCBjb25zdCBRUG9pbnQgJnAsIGludCBjICkKeyByZXR1cm4g
UVBvaW50KHAueHAqYywgcC55cCpjKTsgfQoKaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvcioo
IGludCBjLCBjb25zdCBRUG9pbnQgJnAgKQp7IHJldHVybiBRUG9pbnQocC54cCpjLCBwLnlwKmMp
OyB9CgppbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yKiggY29uc3QgUVBvaW50ICZwLCBkb3Vi
bGUgYyApCnsgcmV0dXJuIFFQb2ludCgoUUNPT1JEKShwLnhwKmMpLCAoUUNPT1JEKShwLnlwKmMp
KTsgfQoKaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvciooIGRvdWJsZSBjLCBjb25zdCBRUG9p
bnQgJnAgKQp7IHJldHVybiBRUG9pbnQoKFFDT09SRCkocC54cCpjKSwgKFFDT09SRCkocC55cCpj
KSk7IH0KCmlubGluZSBjb25zdCBRUG9pbnQgb3BlcmF0b3ItKCBjb25zdCBRUG9pbnQgJnAgKQp7
IHJldHVybiBRUG9pbnQoLXAueHAsIC1wLnlwKTsgfQoKaW5saW5lIFFQb2ludCAmUVBvaW50Ojpv
cGVyYXRvci89KCBpbnQgYyApCnsKCiAgICBpZiAoIGMgPT0gMCApCiAgICAgICAgd2FybmluZ0Rp
dkJ5WmVybygpOwoKICAgIHhwLz0oUUNPT1JEKWM7CiAgICB5cC89KFFDT09SRCljOwogICAgcmV0
dXJuICp0aGlzOwp9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yLz0oIGRvdWJsZSBj
ICkKewoKICAgIGlmICggYyA9PSAwLjAgKQogICAgICAgIHdhcm5pbmdEaXZCeVplcm8oKTsKCiAg
ICB4cD0oUUNPT1JEKSh4cC9jKTsKICAgIHlwPShRQ09PUkQpKHlwL2MpOwogICAgcmV0dXJuICp0
aGlzOwp9CgppbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yLyggY29uc3QgUVBvaW50ICZwLCBp
bnQgYyApCnsKCiAgICBpZiAoIGMgPT0gMCApCiAgICAgICAgUVBvaW50Ojp3YXJuaW5nRGl2Qnla
ZXJvKCk7CgogICAgcmV0dXJuIFFQb2ludChwLnhwL2MsIHAueXAvYyk7Cn0KCmlubGluZSBjb25z
dCBRUG9pbnQgb3BlcmF0b3IvKCBjb25zdCBRUG9pbnQgJnAsIGRvdWJsZSBjICkKewoKICAgIGlm
ICggYyA9PSAwLjAgKQogICAgICAgIFFQb2ludDo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHJl
dHVybiBRUG9pbnQoKFFDT09SRCkocC54cC9jKSwgKFFDT09SRCkocC55cC9jKSk7Cn0KIyA0MyAi
L3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FzaXplLmgiIDIKCgoKY2xhc3Mg
UVNpemUKewpwdWJsaWM6CiAgICBRU2l6ZSgpOwogICAgUVNpemUoIGludCB3LCBpbnQgaCApOwoK
ICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OwoKICAgIGludCB3aWR0aCgpIGNvbnN0OwogICAgaW50IGhlaWdo
dCgpIGNvbnN0OwogICAgdm9pZCBzZXRXaWR0aCggaW50IHcgKTsKICAgIHZvaWQgc2V0SGVpZ2h0
KCBpbnQgaCApOwogICAgdm9pZCB0cmFuc3Bvc2UoKTsKCiAgICBRU2l6ZSBleHBhbmRlZFRvKCBj
b25zdCBRU2l6ZSAmICkgY29uc3Q7CiAgICBRU2l6ZSBib3VuZGVkVG8oIGNvbnN0IFFTaXplICYg
KSBjb25zdDsKCiAgICBRQ09PUkQgJnJ3aWR0aCgpOwogICAgUUNPT1JEICZyaGVpZ2h0KCk7Cgog
ICAgUVNpemUgJm9wZXJhdG9yKz0oIGNvbnN0IFFTaXplICYgKTsKICAgIFFTaXplICZvcGVyYXRv
ci09KCBjb25zdCBRU2l6ZSAmICk7CiAgICBRU2l6ZSAmb3BlcmF0b3IqPSggaW50IGMgKTsKICAg
IFFTaXplICZvcGVyYXRvcio9KCBkb3VibGUgYyApOwogICAgUVNpemUgJm9wZXJhdG9yLz0oIGlu
dCBjICk7CiAgICBRU2l6ZSAmb3BlcmF0b3IvPSggZG91YmxlIGMgKTsKCiAgICBmcmllbmQgaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVNpemUgJiwgY29uc3QgUVNpemUgJiApOwogICAg
ZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTaXplICYsIGNvbnN0IFFTaXpl
ICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVNpemUgb3BlcmF0b3IrKCBjb25zdCBRU2l6
ZSAmLCBjb25zdCBRU2l6ZSAmICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0IFFTaXplIG9wZXJh
dG9yLSggY29uc3QgUVNpemUgJiwgY29uc3QgUVNpemUgJiApOwogICAgZnJpZW5kIGlubGluZSBj
b25zdCBRU2l6ZSBvcGVyYXRvciooIGNvbnN0IFFTaXplICYsIGludCApOwogICAgZnJpZW5kIGlu
bGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvciooIGludCwgY29uc3QgUVNpemUgJiApOwogICAgZnJp
ZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvciooIGNvbnN0IFFTaXplICYsIGRvdWJsZSAp
OwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvciooIGRvdWJsZSwgY29uc3Qg
UVNpemUgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvci8oIGNvbnN0
IFFTaXplICYsIGludCApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvci8o
IGNvbnN0IFFTaXplICYsIGRvdWJsZSApOwoKcHJpdmF0ZToKICAgIHN0YXRpYyB2b2lkIHdhcm5p
bmdEaXZCeVplcm8oKTsKCiAgICBRQ09PUkQgd2Q7CiAgICBRQ09PUkQgaHQ7Cn07CgoKCgoKCiBR
RGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVNpemUgJiApOwog
UURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFTaXplICYgKTsKCgoKCgoK
aW5saW5lIFFTaXplOjpRU2l6ZSgpCnsgd2QgPSBodCA9IC0xOyB9CgppbmxpbmUgUVNpemU6OlFT
aXplKCBpbnQgdywgaW50IGggKQp7IHdkPShRQ09PUkQpdzsgaHQ9KFFDT09SRCloOyB9Cgppbmxp
bmUgYm9vbCBRU2l6ZTo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4gd2Q9PTAgJiYgaHQ9PTA7IH0K
CmlubGluZSBib29sIFFTaXplOjppc0VtcHR5KCkgY29uc3QKeyByZXR1cm4gd2Q8MSB8fCBodDwx
OyB9CgppbmxpbmUgYm9vbCBRU2l6ZTo6aXNWYWxpZCgpIGNvbnN0CnsgcmV0dXJuIHdkPj0wICYm
IGh0Pj0wOyB9CgppbmxpbmUgaW50IFFTaXplOjp3aWR0aCgpIGNvbnN0CnsgcmV0dXJuIHdkOyB9
CgppbmxpbmUgaW50IFFTaXplOjpoZWlnaHQoKSBjb25zdAp7IHJldHVybiBodDsgfQoKaW5saW5l
IHZvaWQgUVNpemU6OnNldFdpZHRoKCBpbnQgdyApCnsgd2Q9KFFDT09SRCl3OyB9CgppbmxpbmUg
dm9pZCBRU2l6ZTo6c2V0SGVpZ2h0KCBpbnQgaCApCnsgaHQ9KFFDT09SRCloOyB9CgppbmxpbmUg
UUNPT1JEICZRU2l6ZTo6cndpZHRoKCkKeyByZXR1cm4gd2Q7IH0KCmlubGluZSBRQ09PUkQgJlFT
aXplOjpyaGVpZ2h0KCkKeyByZXR1cm4gaHQ7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6Om9wZXJh
dG9yKz0oIGNvbnN0IFFTaXplICZzICkKeyB3ZCs9cy53ZDsgaHQrPXMuaHQ7IHJldHVybiAqdGhp
czsgfQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3ItPSggY29uc3QgUVNpemUgJnMgKQp7
IHdkLT1zLndkOyBodC09cy5odDsgcmV0dXJuICp0aGlzOyB9CgppbmxpbmUgUVNpemUgJlFTaXpl
OjpvcGVyYXRvcio9KCBpbnQgYyApCnsgd2QqPShRQ09PUkQpYzsgaHQqPShRQ09PUkQpYzsgcmV0
dXJuICp0aGlzOyB9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVyYXRvcio9KCBkb3VibGUgYyAp
Cnsgd2Q9KFFDT09SRCkod2QqYyk7IGh0PShRQ09PUkQpKGh0KmMpOyByZXR1cm4gKnRoaXM7IH0K
CmlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFTaXplICZzMSwgY29uc3QgUVNpemUgJnMy
ICkKeyByZXR1cm4gczEud2QgPT0gczIud2QgJiYgczEuaHQgPT0gczIuaHQ7IH0KCmlubGluZSBi
b29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTaXplICZzMSwgY29uc3QgUVNpemUgJnMyICkKeyByZXR1
cm4gczEud2QgIT0gczIud2QgfHwgczEuaHQgIT0gczIuaHQ7IH0KCmlubGluZSBjb25zdCBRU2l6
ZSBvcGVyYXRvcisoIGNvbnN0IFFTaXplICYgczEsIGNvbnN0IFFTaXplICYgczIgKQp7IHJldHVy
biBRU2l6ZShzMS53ZCtzMi53ZCwgczEuaHQrczIuaHQpOyB9CgppbmxpbmUgY29uc3QgUVNpemUg
b3BlcmF0b3ItKCBjb25zdCBRU2l6ZSAmczEsIGNvbnN0IFFTaXplICZzMiApCnsgcmV0dXJuIFFT
aXplKHMxLndkLXMyLndkLCBzMS5odC1zMi5odCk7IH0KCmlubGluZSBjb25zdCBRU2l6ZSBvcGVy
YXRvciooIGNvbnN0IFFTaXplICZzLCBpbnQgYyApCnsgcmV0dXJuIFFTaXplKHMud2QqYywgcy5o
dCpjKTsgfQoKaW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9yKiggaW50IGMsIGNvbnN0IFFTaXpl
ICZzICkKeyByZXR1cm4gUVNpemUocy53ZCpjLCBzLmh0KmMpOyB9CgppbmxpbmUgY29uc3QgUVNp
emUgb3BlcmF0b3IqKCBjb25zdCBRU2l6ZSAmcywgZG91YmxlIGMgKQp7IHJldHVybiBRU2l6ZSgo
UUNPT1JEKShzLndkKmMpLCAoUUNPT1JEKShzLmh0KmMpKTsgfQoKaW5saW5lIGNvbnN0IFFTaXpl
IG9wZXJhdG9yKiggZG91YmxlIGMsIGNvbnN0IFFTaXplICZzICkKeyByZXR1cm4gUVNpemUoKFFD
T09SRCkocy53ZCpjKSwgKFFDT09SRCkocy5odCpjKSk7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6
Om9wZXJhdG9yLz0oIGludCBjICkKewoKICAgIGlmICggYyA9PSAwICkKICAgICAgICB3YXJuaW5n
RGl2QnlaZXJvKCk7CgogICAgd2QvPShRQ09PUkQpYzsgaHQvPShRQ09PUkQpYzsKICAgIHJldHVy
biAqdGhpczsKfQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3IvPSggZG91YmxlIGMgKQp7
CgogICAgaWYgKCBjID09IDAuMCApCiAgICAgICAgd2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHdk
PShRQ09PUkQpKHdkL2MpOyBodD0oUUNPT1JEKShodC9jKTsKICAgIHJldHVybiAqdGhpczsKfQoK
aW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9yLyggY29uc3QgUVNpemUgJnMsIGludCBjICkKewoK
ICAgIGlmICggYyA9PSAwICkKICAgICAgICBRU2l6ZTo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAg
IHJldHVybiBRU2l6ZShzLndkL2MsIHMuaHQvYyk7Cn0KCmlubGluZSBjb25zdCBRU2l6ZSBvcGVy
YXRvci8oIGNvbnN0IFFTaXplICZzLCBkb3VibGUgYyApCnsKCiAgICBpZiAoIGMgPT0gMC4wICkK
ICAgICAgICBRU2l6ZTo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHJldHVybiBRU2l6ZSgoUUNP
T1JEKShzLndkL2MpLCAoUUNPT1JEKShzLmh0L2MpKTsKfQoKaW5saW5lIFFTaXplIFFTaXplOjpl
eHBhbmRlZFRvKCBjb25zdCBRU2l6ZSAmIG90aGVyU2l6ZSApIGNvbnN0CnsKICAgIHJldHVybiBR
U2l6ZSggKChvdGhlclNpemUud2QpIDwgKHdkKSA/ICh3ZCkgOiAob3RoZXJTaXplLndkKSksICgo
b3RoZXJTaXplLmh0KSA8IChodCkgPyAoaHQpIDogKG90aGVyU2l6ZS5odCkpICk7Cn0KCmlubGlu
ZSBRU2l6ZSBRU2l6ZTo6Ym91bmRlZFRvKCBjb25zdCBRU2l6ZSAmIG90aGVyU2l6ZSApIGNvbnN0
CnsKICAgIHJldHVybiBRU2l6ZSggKCh3ZCkgPCAob3RoZXJTaXplLndkKSA/ICh3ZCkgOiAob3Ro
ZXJTaXplLndkKSksICgoaHQpIDwgKG90aGVyU2l6ZS5odCkgPyAoaHQpIDogKG90aGVyU2l6ZS5o
dCkpICk7Cn0KIyA0MyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FyZWN0
LmgiIDIKCgoKCgoKCmNsYXNzIFFSZWN0CnsKcHVibGljOgogICAgUVJlY3QoKSB7IHgxID0geTEg
PSAwOyB4MiA9IHkyID0gLTE7IH0KICAgIFFSZWN0KCBjb25zdCBRUG9pbnQgJnRvcGxlZnQsIGNv
bnN0IFFQb2ludCAmYm90dG9tcmlnaHQgKTsKICAgIFFSZWN0KCBjb25zdCBRUG9pbnQgJnRvcGxl
ZnQsIGNvbnN0IFFTaXplICZzaXplICk7CiAgICBRUmVjdCggaW50IGxlZnQsIGludCB0b3AsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29s
IGlzRW1wdHkoKSBjb25zdDsKICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogICAgUVJlY3Qgbm9y
bWFsaXplKCkgY29uc3Q7CgogICAgaW50IGxlZnQoKSBjb25zdDsKICAgIGludCB0b3AoKSBjb25z
dDsKICAgIGludCByaWdodCgpIGNvbnN0OwogICAgaW50IGJvdHRvbSgpIGNvbnN0OwoKICAgIFFD
T09SRCAmckxlZnQoKTsKICAgIFFDT09SRCAmclRvcCgpOwogICAgUUNPT1JEICZyUmlnaHQoKTsK
ICAgIFFDT09SRCAmckJvdHRvbSgpOwoKICAgIGludCB4KCkgY29uc3Q7CiAgICBpbnQgeSgpIGNv
bnN0OwogICAgdm9pZCBzZXRMZWZ0KCBpbnQgcG9zICk7CiAgICB2b2lkIHNldFRvcCggaW50IHBv
cyApOwogICAgdm9pZCBzZXRSaWdodCggaW50IHBvcyApOwogICAgdm9pZCBzZXRCb3R0b20oIGlu
dCBwb3MgKTsKICAgIHZvaWQgc2V0WCggaW50IHggKTsKICAgIHZvaWQgc2V0WSggaW50IHkgKTsK
CiAgICBRUG9pbnQgdG9wTGVmdCgpIGNvbnN0OwogICAgUVBvaW50IGJvdHRvbVJpZ2h0KCkgY29u
c3Q7CiAgICBRUG9pbnQgdG9wUmlnaHQoKSBjb25zdDsKICAgIFFQb2ludCBib3R0b21MZWZ0KCkg
Y29uc3Q7CiAgICBRUG9pbnQgY2VudGVyKCkgY29uc3Q7CgogICAgdm9pZCByZWN0KCBpbnQgKngs
IGludCAqeSwgaW50ICp3LCBpbnQgKmggKSBjb25zdDsKICAgIHZvaWQgY29vcmRzKCBpbnQgKngx
LCBpbnQgKnkxLCBpbnQgKngyLCBpbnQgKnkyICkgY29uc3Q7CgogICAgdm9pZCBtb3ZlVG9wTGVm
dCggY29uc3QgUVBvaW50ICZwICk7CiAgICB2b2lkIG1vdmVCb3R0b21SaWdodCggY29uc3QgUVBv
aW50ICZwICk7CiAgICB2b2lkIG1vdmVUb3BSaWdodCggY29uc3QgUVBvaW50ICZwICk7CiAgICB2
b2lkIG1vdmVCb3R0b21MZWZ0KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgbW92ZUNlbnRl
ciggY29uc3QgUVBvaW50ICZwICk7CiAgICB2b2lkIG1vdmVCeSggaW50IGR4LCBpbnQgZHkgKTsK
CiAgICB2b2lkIHNldFJlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoICk7CiAgICB2b2lk
IHNldENvb3JkcyggaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyICk7CiAgICB2b2lkIGFk
ZENvb3JkcyggaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyICk7CgogICAgUVNpemUgc2l6
ZSgpIGNvbnN0OwogICAgaW50IHdpZHRoKCkgY29uc3Q7CiAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7
CiAgICB2b2lkIHNldFdpZHRoKCBpbnQgdyApOwogICAgdm9pZCBzZXRIZWlnaHQoIGludCBoICk7
CiAgICB2b2lkIHNldFNpemUoIGNvbnN0IFFTaXplICZzICk7CgogICAgUVJlY3Qgb3BlcmF0b3J8
KGNvbnN0IFFSZWN0ICZyKSBjb25zdDsKICAgIFFSZWN0IG9wZXJhdG9yJihjb25zdCBRUmVjdCAm
cikgY29uc3Q7CiAgICBRUmVjdCYgb3BlcmF0b3J8PShjb25zdCBRUmVjdCAmcik7CiAgICBRUmVj
dCYgb3BlcmF0b3ImPShjb25zdCBRUmVjdCAmcik7CgogICAgYm9vbCBjb250YWlucyggY29uc3Qg
UVBvaW50ICZwLCBib29sIHByb3Blcj1GQUxTRSApIGNvbnN0OwogICAgYm9vbCBjb250YWlucygg
aW50IHgsIGludCB5LCBib29sIHByb3Blcj1GQUxTRSApIGNvbnN0OwogICAgYm9vbCBjb250YWlu
cyggY29uc3QgUVJlY3QgJnIsIGJvb2wgcHJvcGVyPUZBTFNFICkgY29uc3Q7CiAgICBRUmVjdCB1
bml0ZSggY29uc3QgUVJlY3QgJnIgKSBjb25zdDsKICAgIFFSZWN0IGludGVyc2VjdCggY29uc3Qg
UVJlY3QgJnIgKSBjb25zdDsKICAgIGJvb2wgaW50ZXJzZWN0cyggY29uc3QgUVJlY3QgJnIgKSBj
b25zdDsKCiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRUmVjdCAmLCBjb25zdCBR
UmVjdCAmICk7CiAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRUmVjdCAmLCBjb25z
dCBRUmVjdCAmICk7Cgpwcml2YXRlOgoKCgoKCgogICAgUUNPT1JEIHgxOwogICAgUUNPT1JEIHkx
OwogICAgUUNPT1JEIHgyOwogICAgUUNPT1JEIHkyOwoKfTsKCiBib29sIG9wZXJhdG9yPT0oIGNv
bnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVJl
Y3QgJiwgY29uc3QgUVJlY3QgJiApOwoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFE
YXRhU3RyZWFtICYsIGNvbnN0IFFSZWN0ICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBR
RGF0YVN0cmVhbSAmLCBRUmVjdCAmICk7CgoKCgoKCmlubGluZSBRUmVjdDo6UVJlY3QoIGludCBs
ZWZ0LCBpbnQgdG9wLCBpbnQgd2lkdGgsIGludCBoZWlnaHQgKQp7CiAgICB4MSA9IChRQ09PUkQp
bGVmdDsKICAgIHkxID0gKFFDT09SRCl0b3A7CiAgICB4MiA9IChRQ09PUkQpKGxlZnQrd2lkdGgt
MSk7CiAgICB5MiA9IChRQ09PUkQpKHRvcCtoZWlnaHQtMSk7Cn0KCmlubGluZSBib29sIFFSZWN0
Ojppc051bGwoKSBjb25zdAp7IHJldHVybiB4MiA9PSB4MS0xICYmIHkyID09IHkxLTE7IH0KCmlu
bGluZSBib29sIFFSZWN0Ojppc0VtcHR5KCkgY29uc3QKeyByZXR1cm4geDEgPiB4MiB8fCB5MSA+
IHkyOyB9CgppbmxpbmUgYm9vbCBRUmVjdDo6aXNWYWxpZCgpIGNvbnN0CnsgcmV0dXJuIHgxIDw9
IHgyICYmIHkxIDw9IHkyOyB9CgppbmxpbmUgaW50IFFSZWN0OjpsZWZ0KCkgY29uc3QKeyByZXR1
cm4geDE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OnRvcCgpIGNvbnN0CnsgcmV0dXJuIHkxOyB9Cgpp
bmxpbmUgaW50IFFSZWN0OjpyaWdodCgpIGNvbnN0CnsgcmV0dXJuIHgyOyB9CgppbmxpbmUgaW50
IFFSZWN0Ojpib3R0b20oKSBjb25zdAp7IHJldHVybiB5MjsgfQoKaW5saW5lIFFDT09SRCAmUVJl
Y3Q6OnJMZWZ0KCkKeyByZXR1cm4geDE7IH0KCmlubGluZSBRQ09PUkQgJiBRUmVjdDo6clRvcCgp
CnsgcmV0dXJuIHkxOyB9CgppbmxpbmUgUUNPT1JEICYgUVJlY3Q6OnJSaWdodCgpCnsgcmV0dXJu
IHgyOyB9CgppbmxpbmUgUUNPT1JEICYgUVJlY3Q6OnJCb3R0b20oKQp7IHJldHVybiB5MjsgfQoK
aW5saW5lIGludCBRUmVjdDo6eCgpIGNvbnN0CnsgcmV0dXJuIHgxOyB9CgppbmxpbmUgaW50IFFS
ZWN0Ojp5KCkgY29uc3QKeyByZXR1cm4geTE7IH0KCmlubGluZSB2b2lkIFFSZWN0OjpzZXRMZWZ0
KCBpbnQgcG9zICkKeyB4MSA9IChRQ09PUkQpcG9zOyB9CgppbmxpbmUgdm9pZCBRUmVjdDo6c2V0
VG9wKCBpbnQgcG9zICkKeyB5MSA9IChRQ09PUkQpcG9zOyB9CgppbmxpbmUgdm9pZCBRUmVjdDo6
c2V0UmlnaHQoIGludCBwb3MgKQp7IHgyID0gKFFDT09SRClwb3M7IH0KCmlubGluZSB2b2lkIFFS
ZWN0OjpzZXRCb3R0b20oIGludCBwb3MgKQp7IHkyID0gKFFDT09SRClwb3M7IH0KCmlubGluZSB2
b2lkIFFSZWN0OjpzZXRYKCBpbnQgeCApCnsgeDEgPSAoUUNPT1JEKXg7IH0KCmlubGluZSB2b2lk
IFFSZWN0OjpzZXRZKCBpbnQgeSApCnsgeTEgPSAoUUNPT1JEKXk7IH0KCmlubGluZSBRUG9pbnQg
UVJlY3Q6OnRvcExlZnQoKSBjb25zdAp7IHJldHVybiBRUG9pbnQoeDEsIHkxKTsgfQoKaW5saW5l
IFFQb2ludCBRUmVjdDo6Ym90dG9tUmlnaHQoKSBjb25zdAp7IHJldHVybiBRUG9pbnQoeDIsIHky
KTsgfQoKaW5saW5lIFFQb2ludCBRUmVjdDo6dG9wUmlnaHQoKSBjb25zdAp7IHJldHVybiBRUG9p
bnQoeDIsIHkxKTsgfQoKaW5saW5lIFFQb2ludCBRUmVjdDo6Ym90dG9tTGVmdCgpIGNvbnN0Cnsg
cmV0dXJuIFFQb2ludCh4MSwgeTIpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0OjpjZW50ZXIoKSBj
b25zdAp7IHJldHVybiBRUG9pbnQoKHgxK3gyKS8yLCAoeTEreTIpLzIpOyB9CgppbmxpbmUgaW50
IFFSZWN0Ojp3aWR0aCgpIGNvbnN0CnsgcmV0dXJuIHgyIC0geDEgKyAxOyB9CgppbmxpbmUgaW50
IFFSZWN0OjpoZWlnaHQoKSBjb25zdAp7IHJldHVybiB5MiAtIHkxICsgMTsgfQoKaW5saW5lIFFT
aXplIFFSZWN0OjpzaXplKCkgY29uc3QKeyByZXR1cm4gUVNpemUoeDIteDErMSwgeTIteTErMSk7
IH0KCmlubGluZSBib29sIFFSZWN0Ojpjb250YWlucyggaW50IHgsIGludCB5LCBib29sIHByb3Bl
ciApIGNvbnN0CnsKICAgIGlmICggcHJvcGVyICkKICAgICAgICByZXR1cm4geCA+IHgxICYmIHgg
PCB4MiAmJgogICAgICAgICAgICAgICB5ID4geTEgJiYgeSA8IHkyOwogICAgZWxzZQogICAgICAg
IHJldHVybiB4ID49IHgxICYmIHggPD0geDIgJiYKICAgICAgICAgICAgICAgeSA+PSB5MSAmJiB5
IDw9IHkyOwp9CiMgNDQgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xcmVn
aW9uLmgiIDIKCgoKY2xhc3MgUVJlZ2lvbgp7CnB1YmxpYzoKICAgIGVudW0gUmVnaW9uVHlwZSB7
IFJlY3RhbmdsZSwgRWxsaXBzZSB9OwoKICAgIFFSZWdpb24oKTsKICAgIFFSZWdpb24oIGludCB4
LCBpbnQgeSwgaW50IHcsIGludCBoLCBSZWdpb25UeXBlID0gUmVjdGFuZ2xlICk7CiAgICBRUmVn
aW9uKCBjb25zdCBRUmVjdCAmLCBSZWdpb25UeXBlID0gUmVjdGFuZ2xlICk7CiAgICBRUmVnaW9u
KCBjb25zdCBRUG9pbnRBcnJheSAmLCBib29sIHdpbmRpbmc9RkFMU0UgKTsKICAgIFFSZWdpb24o
IGNvbnN0IFFSZWdpb24gJiApOwogICAgUVJlZ2lvbiggY29uc3QgUUJpdG1hcCAmICk7CiAgIH5R
UmVnaW9uKCk7CiAgICBRUmVnaW9uICZvcGVyYXRvcj0oIGNvbnN0IFFSZWdpb24gJiApOwoKICAg
IGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKCiAgICBib29s
IGNvbnRhaW5zKCBjb25zdCBRUG9pbnQgJnAgKSBjb25zdDsKICAgIGJvb2wgY29udGFpbnMoIGNv
bnN0IFFSZWN0ICZyICkgY29uc3Q7CgogICAgdm9pZCB0cmFuc2xhdGUoIGludCBkeCwgaW50IGR5
ICk7CgogICAgUVJlZ2lvbiB1bml0ZSggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVn
aW9uIGludGVyc2VjdCggY29uc3QgUVJlZ2lvbiAmKSBjb25zdDsKICAgIFFSZWdpb24gc3VidHJh
Y3QoIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgUVJlZ2lvbiBlb3IoIGNvbnN0IFFSZWdp
b24gJiApIGNvbnN0OwoKICAgIFFSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OwogICAgUU1lbUFy
cmF5PFFSZWN0PiByZWN0cygpIGNvbnN0OwogICAgdm9pZCBzZXRSZWN0cyggY29uc3QgUVJlY3Qg
KiwgaW50ICk7CgogICAgY29uc3QgUVJlZ2lvbiBvcGVyYXRvcnwoIGNvbnN0IFFSZWdpb24gJiAp
IGNvbnN0OwogICAgY29uc3QgUVJlZ2lvbiBvcGVyYXRvcisoIGNvbnN0IFFSZWdpb24gJiApIGNv
bnN0OwogICAgY29uc3QgUVJlZ2lvbiBvcGVyYXRvciYoIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0
OwogICAgY29uc3QgUVJlZ2lvbiBvcGVyYXRvci0oIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0Owog
ICAgY29uc3QgUVJlZ2lvbiBvcGVyYXRvcl4oIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAg
UVJlZ2lvbiYgb3BlcmF0b3J8PSggY29uc3QgUVJlZ2lvbiAmICk7CiAgICBRUmVnaW9uJiBvcGVy
YXRvcis9KCBjb25zdCBRUmVnaW9uICYgKTsKICAgIFFSZWdpb24mIG9wZXJhdG9yJj0oIGNvbnN0
IFFSZWdpb24gJiApOwogICAgUVJlZ2lvbiYgb3BlcmF0b3ItPSggY29uc3QgUVJlZ2lvbiAmICk7
CiAgICBRUmVnaW9uJiBvcGVyYXRvcl49KCBjb25zdCBRUmVnaW9uICYgKTsKCiAgICBib29sIG9w
ZXJhdG9yPT0oIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBj
b25zdCBRUmVnaW9uICZyICkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4g
IShvcGVyYXRvcj09KHIpKTsgfQoKCgoKICAgIFJlZ2lvbiBoYW5kbGUoKSBjb25zdCB7IHJldHVy
biBkYXRhLT5yZ247IH0KIyAxMDUgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVk
ZS9xcmVnaW9uLmgiCiAgICBmcmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3Ry
ZWFtICYsIGNvbnN0IFFSZWdpb24gJiApOwogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRv
cj4+KCBRRGF0YVN0cmVhbSAmLCBRUmVnaW9uICYgKTsKCnByaXZhdGU6CiAgICBRUmVnaW9uKCBi
b29sICk7CiAgICBRUmVnaW9uIGNvcHkoKSBjb25zdDsKICAgIHZvaWQgZGV0YWNoKCk7CgoKCiAg
ICB2b2lkIGV4ZWMoIGNvbnN0IFFCeXRlQXJyYXkgJiwgaW50IHZlciA9IDAgKTsKICAgIHN0cnVj
dCBRUmVnaW9uRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKCgoKICAgICAgICBRUmVjdCByZWN0Owog
ICAgICAgIFJlZ2lvbiByZ247CgoKCgoKCgogICAgICAgIGJvb2wgaXNfbnVsbDsKICAgIH0gKmRh
dGE7CgoKCgoKCgp9OwojIDE1OCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRl
L3FyZWdpb24uaCIKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25z
dCBRUmVnaW9uICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBR
UmVnaW9uICYgKTsKIyA0NCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3Fl
dmVudC5oIiAyCgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xbWlt
ZS5oIiAxCiMgNDMgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xbWltZS5o
IgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xbWFwLmgiIDEKIyA0
NCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FtYXAuaCIKIyAxICIvdXNy
L2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIgMQojIDQyICIv
dXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIKIyAxICIv
dXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWlvZGV2aWNlLmgiIDEKIyA5NSAi
L3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3Fpb2RldmljZS5oIgpjbGFzcyBR
SU9EZXZpY2UKewpwdWJsaWM6CgoKCiAgICB0eXBlZGVmIFFfVUxPTkcgT2Zmc2V0OwoKCiAgICBR
SU9EZXZpY2UoKTsKICAgIHZpcnR1YWwgflFJT0RldmljZSgpOwoKICAgIGludCBmbGFncygpIGNv
bnN0IHsgcmV0dXJuIGlvTW9kZTsgfQogICAgaW50IG1vZGUoKSBjb25zdCB7IHJldHVybiBpb01v
ZGUgJiAweDAwZmY7IH0KICAgIGludCBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGlvTW9kZSAmIDB4
ZjAwMDsgfQoKICAgIGJvb2wgaXNEaXJlY3RBY2Nlc3MoKSBjb25zdCB7IHJldHVybiAoKGlvTW9k
ZSAmIDB4MDEwMCkgPT0gMHgwMTAwKTsgfQogICAgYm9vbCBpc1NlcXVlbnRpYWxBY2Nlc3MoKSBj
b25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDIwMCkgPT0gMHgwMjAwKTsgfQogICAgYm9vbCBp
c0NvbWJpbmVkQWNjZXNzKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAzMDApID09IDB4
MDMwMCk7IH0KICAgIGJvb2wgaXNCdWZmZXJlZCgpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYg
MHgwMDQwKSAhPSAweDAwNDApOyB9CiAgICBib29sIGlzUmF3KCkgY29uc3QgeyByZXR1cm4gKChp
b01vZGUgJiAweDAwNDApID09IDB4MDA0MCk7IH0KICAgIGJvb2wgaXNTeW5jaHJvbm91cygpIGNv
bnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDgwKSAhPSAweDAwODApOyB9CiAgICBib29sIGlz
QXN5bmNocm9ub3VzKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwODApID09IDB4MDA4
MCk7IH0KICAgIGJvb2wgaXNUcmFuc2xhdGVkKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAw
eDAwMTApID09IDB4MDAxMCk7IH0KICAgIGJvb2wgaXNSZWFkYWJsZSgpIGNvbnN0IHsgcmV0dXJu
ICgoaW9Nb2RlICYgMHgwMDAxKSA9PSAweDAwMDEpOyB9CiAgICBib29sIGlzV3JpdGFibGUoKSBj
b25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDAwMikgPT0gMHgwMDAyKTsgfQogICAgYm9vbCBp
c1JlYWRXcml0ZSgpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDAzKSA9PSAweDAwMDMp
OyB9CiAgICBib29sIGlzSW5hY3RpdmUoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IDA7IH0K
ICAgIGJvb2wgaXNPcGVuKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKSA9PSAweDEwMDA7IH0KCiAg
ICBpbnQgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gaW9TdDsgfQogICAgdm9pZCByZXNldFN0YXR1
cygpIHsgaW9TdCA9IDA7IH0KCiAgICB2aXJ0dWFsIGJvb2wgb3BlbiggaW50IG1vZGUgKSA9IDA7
CiAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKSA9
IDA7CgogICAgdmlydHVhbCBPZmZzZXQgc2l6ZSgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgT2Zm
c2V0IGF0KCkgY29uc3Q7CiAgICB2aXJ0dWFsIGJvb2wgYXQoIE9mZnNldCApOwogICAgdmlydHVh
bCBib29sIGF0RW5kKCkgY29uc3Q7CiAgICBib29sIHJlc2V0KCkgeyByZXR1cm4gYXQoMCk7IH0K
CiAgICB2aXJ0dWFsIFFfTE9ORyByZWFkQmxvY2soIGNoYXIgKmRhdGEsIFFfVUxPTkcgbWF4bGVu
ICkgPSAwOwogICAgdmlydHVhbCBRX0xPTkcgd3JpdGVCbG9jayggY29uc3QgY2hhciAqZGF0YSwg
UV9VTE9ORyBsZW4gKSA9IDA7CiAgICB2aXJ0dWFsIFFfTE9ORyByZWFkTGluZSggY2hhciAqZGF0
YSwgUV9VTE9ORyBtYXhsZW4gKTsKICAgIFFfTE9ORyB3cml0ZUJsb2NrKCBjb25zdCBRQnl0ZUFy
cmF5JiBkYXRhICk7CiAgICB2aXJ0dWFsIFFCeXRlQXJyYXkgcmVhZEFsbCgpOwoKICAgIHZpcnR1
YWwgaW50IGdldGNoKCkgPSAwOwogICAgdmlydHVhbCBpbnQgcHV0Y2goIGludCApID0gMDsKICAg
IHZpcnR1YWwgaW50IHVuZ2V0Y2goIGludCApID0gMDsKCnByb3RlY3RlZDoKICAgIHZvaWQgc2V0
RmxhZ3MoIGludCBmICkgeyBpb01vZGUgPSBmOyB9CiAgICB2b2lkIHNldFR5cGUoIGludCApOwog
ICAgdm9pZCBzZXRNb2RlKCBpbnQgKTsKICAgIHZvaWQgc2V0U3RhdGUoIGludCApOwogICAgdm9p
ZCBzZXRTdGF0dXMoIGludCApOwogICAgT2Zmc2V0IGlvSW5kZXg7Cgpwcml2YXRlOgogICAgaW50
IGlvTW9kZTsKICAgIGludCBpb1N0OwoKcHJpdmF0ZToKCiAgICBRSU9EZXZpY2UoIGNvbnN0IFFJ
T0RldmljZSAmICk7CiAgICBRSU9EZXZpY2UgJm9wZXJhdG9yPSggY29uc3QgUUlPRGV2aWNlICYg
KTsKCn07CiMgNDMgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZGF0YXN0
cmVhbS5oIiAyCgoKCgpjbGFzcyBRRGF0YVN0cmVhbQp7CnB1YmxpYzoKICAgIFFEYXRhU3RyZWFt
KCk7CiAgICBRRGF0YVN0cmVhbSggUUlPRGV2aWNlICogKTsKICAgIFFEYXRhU3RyZWFtKCBRQnl0
ZUFycmF5LCBpbnQgbW9kZSApOwogICAgdmlydHVhbCB+UURhdGFTdHJlYW0oKTsKCiAgICBRSU9E
ZXZpY2UgKmRldmljZSgpIGNvbnN0OwogICAgdm9pZCBzZXREZXZpY2UoIFFJT0RldmljZSAqICk7
CiAgICB2b2lkIHVuc2V0RGV2aWNlKCk7CgogICAgYm9vbCBhdEVuZCgpIGNvbnN0OwogICAgYm9v
bCBlb2YoKSBjb25zdDsKCiAgICBlbnVtIEJ5dGVPcmRlciB7IEJpZ0VuZGlhbiwgTGl0dGxlRW5k
aWFuIH07CiAgICBpbnQgYnl0ZU9yZGVyKCkgY29uc3Q7CiAgICB2b2lkIHNldEJ5dGVPcmRlcigg
aW50ICk7CgogICAgYm9vbCBpc1ByaW50YWJsZURhdGEoKSBjb25zdDsKICAgIHZvaWQgc2V0UHJp
bnRhYmxlRGF0YSggYm9vbCApOwoKICAgIGludCB2ZXJzaW9uKCkgY29uc3Q7CiAgICB2b2lkIHNl
dFZlcnNpb24oIGludCApOwoKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX0lOVDggJmkg
KTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX1VJTlQ4ICZpICk7CiAgICBRRGF0YVN0
cmVhbSAmb3BlcmF0b3I+PiggUV9JTlQxNiAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9y
Pj4oIFFfVUlOVDE2ICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9JTlQzMiAm
aSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfVUlOVDMyICZpICk7CiAgICBRRGF0
YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9MT05HICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0
b3I+PiggUV9VTE9ORyAmaSApOwoKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBmbG9hdCAm
ZiApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIGRvdWJsZSAmZiApOwogICAgUURhdGFT
dHJlYW0gJm9wZXJhdG9yPj4oIGNoYXIgKiZzdHIgKTsKCiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0
b3I8PCggUV9JTlQ4IGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRX1VJTlQ4IGkg
KTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRX0lOVDE2IGkgKTsKICAgIFFEYXRhU3Ry
ZWFtICZvcGVyYXRvcjw8KCBRX1VJTlQxNiBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8
PCggUV9JTlQzMiBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9VSU5UMzIgaSAp
OwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfTE9ORyBpICk7CiAgICBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I8PCggUV9VTE9ORyBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCgg
ZmxvYXQgZiApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIGRvdWJsZSBmICk7CiAgICBR
RGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggY29uc3QgY2hhciAqc3RyICk7CgogICAgUURhdGFTdHJl
YW0gJnJlYWRCeXRlcyggY2hhciAqJiwgdWludCAmbGVuICk7CiAgICBRRGF0YVN0cmVhbSAmcmVh
ZFJhd0J5dGVzKCBjaGFyICosIHVpbnQgbGVuICk7CgogICAgUURhdGFTdHJlYW0gJndyaXRlQnl0
ZXMoIGNvbnN0IGNoYXIgKiwgdWludCBsZW4gKTsKICAgIFFEYXRhU3RyZWFtICZ3cml0ZVJhd0J5
dGVzKCBjb25zdCBjaGFyICosIHVpbnQgbGVuICk7Cgpwcml2YXRlOgogICAgUUlPRGV2aWNlICpk
ZXY7CiAgICBib29sIG93bmRldjsKICAgIGludCBieXRlb3JkZXI7CiAgICBib29sIHByaW50YWJs
ZTsKICAgIGJvb2wgbm9zd2FwOwogICAgaW50IHZlcjsKCnByaXZhdGU6CgogICAgUURhdGFTdHJl
YW0oIGNvbnN0IFFEYXRhU3RyZWFtICYgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj0oIGNv
bnN0IFFEYXRhU3RyZWFtICYgKTsKCn07CgoKCgoKCmlubGluZSBRSU9EZXZpY2UgKlFEYXRhU3Ry
ZWFtOjpkZXZpY2UoKSBjb25zdAp7IHJldHVybiBkZXY7IH0KCmlubGluZSBib29sIFFEYXRhU3Ry
ZWFtOjphdEVuZCgpIGNvbnN0CnsgcmV0dXJuIGRldiA/IGRldi0+YXRFbmQoKSA6IFRSVUU7IH0K
CmlubGluZSBib29sIFFEYXRhU3RyZWFtOjplb2YoKSBjb25zdAp7IHJldHVybiBhdEVuZCgpOyB9
CgppbmxpbmUgaW50IFFEYXRhU3RyZWFtOjpieXRlT3JkZXIoKSBjb25zdAp7IHJldHVybiBieXRl
b3JkZXI7IH0KCmlubGluZSBib29sIFFEYXRhU3RyZWFtOjppc1ByaW50YWJsZURhdGEoKSBjb25z
dAp7IHJldHVybiBwcmludGFibGU7IH0KCmlubGluZSB2b2lkIFFEYXRhU3RyZWFtOjpzZXRQcmlu
dGFibGVEYXRhKCBib29sIHAgKQp7IHByaW50YWJsZSA9IHA7IH0KCmlubGluZSBpbnQgUURhdGFT
dHJlYW06OnZlcnNpb24oKSBjb25zdAp7IHJldHVybiB2ZXI7IH0KCmlubGluZSB2b2lkIFFEYXRh
U3RyZWFtOjpzZXRWZXJzaW9uKCBpbnQgdiApCnsgdmVyID0gdjsgfQoKaW5saW5lIFFEYXRhU3Ry
ZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I+PiggUV9VSU5UOCAmaSApCnsgcmV0dXJuICp0aGlz
ID4+IChRX0lOVDgmKWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJh
dG9yPj4oIFFfVUlOVDE2ICZpICkKeyByZXR1cm4gKnRoaXMgPj4gKFFfSU5UMTYmKWk7IH0KCmlu
bGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPj4oIFFfVUlOVDMyICZpICkK
eyByZXR1cm4gKnRoaXMgPj4gKFFfSU5UMzImKWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURh
dGFTdHJlYW06Om9wZXJhdG9yPj4oIFFfVUxPTkcgJmkgKQp7IHJldHVybiAqdGhpcyA+PiAoUV9M
T05HJilpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRvcjw8KCBR
X1VJTlQ4IGkgKQp7IHJldHVybiAqdGhpcyA8PCAoUV9JTlQ4KWk7IH0KCmlubGluZSBRRGF0YVN0
cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPDwoIFFfVUlOVDE2IGkgKQp7IHJldHVybiAqdGhp
cyA8PCAoUV9JTlQxNilpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVy
YXRvcjw8KCBRX1VJTlQzMiBpICkKeyByZXR1cm4gKnRoaXMgPDwgKFFfSU5UMzIpaTsgfQoKaW5s
aW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggUV9VTE9ORyBpICkKeyBy
ZXR1cm4gKnRoaXMgPDwgKFFfTE9ORylpOyB9CiMgNDUgIi91c3IvbG9jYWwvcXQteDExLWZyZWUt
My4wLjYvaW5jbHVkZS9xbWFwLmgiIDIKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42
L2luY2x1ZGUvcXBhaXIuaCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2lu
Y2x1ZGUvcXBhaXIuaCIKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4Kc3RydWN0IFFQYWly
CnsKICAgIHR5cGVkZWYgVDEgZmlyc3RfdHlwZTsKICAgIHR5cGVkZWYgVDIgc2Vjb25kX3R5cGU7
CgogICAgUVBhaXIoKQogICAgICAgIDogZmlyc3QoIFQxKCkgKSwgc2Vjb25kKCBUMigpICkKICAg
IHt9CiAgICBRUGFpciggY29uc3QgVDEmIHQxLCBjb25zdCBUMiYgdDIgKQogICAgICAgIDogZmly
c3QoIHQxICksIHNlY29uZCggdDIgKQogICAge30KCiAgICBUMSBmaXJzdDsKICAgIFQyIHNlY29u
ZDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+CiBib29sIG9wZXJhdG9yPT0oIGNv
bnN0IFFQYWlyPFQxLCBUMj4mIHgsIGNvbnN0IFFQYWlyPFQxLCBUMj4mIHkgKQp7CiAgICByZXR1
cm4geC5maXJzdCA9PSB5LmZpcnN0ICYmIHguc2Vjb25kID09IHkuc2Vjb25kOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgogYm9vbCBvcGVyYXRvcjwoIGNvbnN0IFFQYWlyPFQxLCBU
Mj4mIHgsIGNvbnN0IFFQYWlyPFQxLCBUMj4mIHkgKQp7CgoKCiAgICByZXR1cm4geC5maXJzdCA8
IHkuZmlyc3QgfHwgKCAhKCB5LmZpcnN0IDwgeC5maXJzdCApICYmIHguc2Vjb25kIDwgeS5zZWNv
bmQgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KIFFQYWlyPFQxLCBUMj4gcU1h
a2VQYWlyKCBjb25zdCBUMSYgeCwgY29uc3QgVDImIHkgKQp7CiAgICByZXR1cm4gUVBhaXI8VDEs
IFQyPiggeCwgeSApOwp9CiMgNDYgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVk
ZS9xbWFwLmgiIDIKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXRs
LmgiIDEKIyA0MyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3F0bC5oIgoj
IDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xdGV4dHN0cmVhbS5oIiAx
CiMgNDQgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xdGV4dHN0cmVhbS5o
IgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgi
IDEgMwojIDM5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRp
by5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8z
LjIuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0NCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5
cGVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUv
c3RkZGVmLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9f
dV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGludCBfX3VfbG9uZzsKCgp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVm
IHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQx
Nl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25l
ZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKCgoKX19l
eHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRl
bnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCgoKCgpf
X2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKX19leHRlbnNpb25f
XyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKIyAxMjggIi91c3Iv
aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlc2l6ZXMu
aCIgMSAzCiMgMTI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQgX19kZXZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aWRf
dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19naWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu
dCBfX2lub190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbm82NF90Owp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfX21vZGVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19ubGlua190
Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgbG9uZyBsb25nIGludCBfX29mZjY0
X3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgc3RydWN0IHsgaW50IF9fdmFsWzJdOyB9
IF9fZnNpZF90Owp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGludCBfX3JsaW1fdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fcmxpbTY0
X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9faWRfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVf
dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9f
c3VzZWNvbmRzX3Q7Cgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19z
d2Jsa190Owp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoK
CnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoK
CgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19i
bGtjbnQ2NF90OwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19mc2Jsa2NudF90Owp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIGludCBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGlu
dCBfX2ZzZmlsY250NjRfdDsKCgoKCnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX29m
ZjY0X3QgX19sb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKdHlwZWRlZiBjaGFy
ICpfX2NhZGRyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVk
IGludCBfX3NvY2tsZW5fdDsKIyA0NiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4z
L2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJ
TEU7CgoKCgoKIyA3MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUv
c3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgODEgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvbGliaW8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyAxNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o
IiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVm
LmgiIDEgMwojIDM1NCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUv
c3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1
ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz
CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgNjMgIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2Nv
dW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAg
fSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi
IDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19z
dGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAg
X19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRlL19H
X2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI4ICIvdXNyL2lu
Y2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4y
LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMK
IyA2MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCiMgMjkgIi91c3IvaW5jbHVkZS9nY29udi5o
IiAyIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0Kewog
IF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dD
T05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQs
CiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAg
X19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoK
CgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJS
T1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0
ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJh
bnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0
ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGlu
dCwgaW50KTsKCgp0eXBlZGVmIHdpbnRfdCAoKl9fZ2NvbnZfYnRvd2NfZmN0KSAoc3RydWN0IF9f
Z2NvbnZfc3RlcCAqLCB1bnNpZ25lZCBjaGFyKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5p
dF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2Vu
ZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf
dHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVu
c2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
Kik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0
eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9f
Y29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAq
KiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAo
dm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2Zj
dCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4
dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpf
X2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3Qg
X19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hh
bmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hh
ciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsK
ICBfX2djb252X2J0b3djX2ZjdCBfX2J0b3djX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5p
dF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVk
X2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAg
aW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7
Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRi
dWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAg
aW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19t
YnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9f
Z2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9p
bmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsK
ICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9f
Z2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlv
bgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBf
X2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAg
fSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBf
R191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p
KSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2xp
YmlvLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9z
dGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNs
dWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7
CiMgNTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyAxNjIgIi91c3IvaW5jbHVkZS9saWJp
by5oIiAzCnN0cnVjdCBfSU9fanVtcF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTcyICIvdXNyL2lu
Y2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lP
X21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAq
X3NidWY7CgoKCiAgaW50IF9wb3M7CiMgMTk1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9OwoK
CmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0
aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252Cn07CiMgMjYzICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgog
IGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3Jl
YWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwog
IGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19i
dWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsK
ICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAg
c3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwoKCgogIGludCBfZmxhZ3My
OwoKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1u
OwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgog
IF9JT19sb2NrX3QgKl9sb2NrOwojIDMxMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKICBfX29m
ZjY0X3QgX29mZnNldDsKCgoKCgogIHZvaWQgKl9fcGFkMTsKICB2b2lkICpfX3BhZDI7CgogIGlu
dCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2Yg
KHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3Qg
X0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVz
IF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rk
ZXJyXzsKIyAzNTAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9f
aW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMp
OwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUs
IF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tp
ZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9m
biAodm9pZCAqX19jb29raWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRf
ZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90
Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9f
aW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewog
IF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtf
Zm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlv
bnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlv
bnNfdDsKCnN0cnVjdCBfSU9fY29va2llX2ZpbGU7CgoKZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9p
bml0IChzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlICpfX2NmaWxlLCBpbnQgX19yZWFkX3dyaXRlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fY29va2llLCBfSU9fY29va2llX2lv
X2Z1bmN0aW9uc190IF9fZm5zKTsKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRl
cmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxF
ICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgdGhy
b3cgKCk7CmV4dGVybiB3aW50X3QgX193dW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsK
ZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50
X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgdGhyb3cgKCk7CiMgNDMyICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpl
eHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVy
biB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBf
SU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5
bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwojIDQ2MiAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25z
dCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp
c3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChf
SU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBf
SU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6
ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0
ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGlu
dCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9f
b2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVh
IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKIyA1MjAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn0K
IyA4MiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIg
MiAzCgoKCgp0eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA5NSAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIgMwoKCnR5cGVk
ZWYgX0dfZnBvc190IGZwb3NfdDsKCgoKCgp0eXBlZGVmIF9HX2Zwb3M2NF90IGZwb3M2NF90Owoj
IDE0NyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxNDggIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4g
c3RydWN0IF9JT19GSUxFICpzdGRpbjsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRSAqc3Rkb3V0Owpl
eHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRlcnI7CgoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAo
X19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1lIChf
X2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE4MCAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdG1w
bmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lk
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cg
KCk7CiMgMjAyICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRp
by5oIiAzCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0
IGNoYXIgKl9fcGZ4KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7
CgoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZm
bHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBm
Y2xvc2VhbGwgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVv
cGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAg
ICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgMjQ4ICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAzCgoKZXh0ZXJuIEZJ
TEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgp
OwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxl
bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p
IHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hh
ciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuY29va2llICh2b2lk
ICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgdGhyb3cgKCk7CgoKZXh0ZXJu
IEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBjaGFyICpf
X21vZGVzKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hhciAq
Kl9fcmVzdHJpY3QgX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkIHNldGJ1
ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwg
Y2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywg
c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVi
dWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBwcmludGYg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJn
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywg
c2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt
YXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkp
KTsKCgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAgICAgICAgICAgX19nbnVj
X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVz
dHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3Ry
aWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w
cmludGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf
bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w
cmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgoKZXh0ZXJuIGludCBmc2NhbmYg
KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5m
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp
c3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2Nh
bmZfXywgMiwgMCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNz
Y2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDAp
KSk7CgoKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRj
aGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lk
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgoK
ZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNo
YXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDQ3MCAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19zc2l6ZV90IF9f
Z2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRo
cm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xp
bmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9f
biwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGluZSAo
Y2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUg
Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAg
ICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVf
dCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJp
Y3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9p
ZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoK
CgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwg
c2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwg
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRl
X3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0
cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9u
ZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHJld2lu
ZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKIyA1MzcgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUg
Kl9fc3RyZWFtLCBfX29mZl90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJu
IF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNTUzICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBp
bnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0
IF9fcG9zKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVh
bSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1NzIgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKZXh0ZXJuIGludCBmc2Vl
a282NCAoRklMRSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJv
dyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwpleHRlcm4gaW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0
X3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgZnNldHBvczY0
IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19wb3MpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2Vk
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFy
ICpfX3MpIHRocm93ICgpOwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N5c19lcnJsaXN0
LmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9zeXNfZXJybGlzdC5oIiAzCmV4dGVybiBp
bnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsK
CgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lz
X2Vycmxpc3RbXTsKIyA2MDkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNs
dWRlL3N0ZGlvLmgiIDIgMwoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpfX2NvbW1h
bmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwY2xvc2Ug
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hh
ciAqX19zKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKSB0
aHJvdyAoKTsKCgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVybiBpbnQgb2JzdGFja19wcmludGYg
KHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4
dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29i
c3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf
X2FyZ3MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm
X18sIDIsIDApKSk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwojIDY4NiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3Rk
aW8uaCIgMwp9CiMgNDUgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xdGV4
dHN0cmVhbS5oIiAyCgoKCmNsYXNzIFFUZXh0Q29kZWM7CmNsYXNzIFFUZXh0RGVjb2RlcjsKCmNs
YXNzIFFUZXh0U3RyZWFtUHJpdmF0ZTsKCmNsYXNzIFFUZXh0U3RyZWFtCnsKcHVibGljOgogICAg
ZW51bSBFbmNvZGluZyB7IExvY2FsZSwgTGF0aW4xLCBVbmljb2RlLCBVbmljb2RlTmV0d29ya09y
ZGVyLAogICAgICAgICAgICAgICAgICAgIFVuaWNvZGVSZXZlcnNlLCBSYXdVbmljb2RlLCBVbmlj
b2RlVVRGOCB9OwoKICAgIHZvaWQgc2V0RW5jb2RpbmcoIEVuY29kaW5nICk7CgogICAgdm9pZCBz
ZXRDb2RlYyggUVRleHRDb2RlYyogKTsKCgoKCiAgICBRVGV4dFN0cmVhbSgpOwogICAgUVRleHRT
dHJlYW0oIFFJT0RldmljZSAqICk7CiAgICBRVGV4dFN0cmVhbSggUVN0cmluZyosIGludCBtb2Rl
ICk7CiAgICBRVGV4dFN0cmVhbSggUVN0cmluZyYsIGludCBtb2RlICk7CiAgICBRVGV4dFN0cmVh
bSggUUJ5dGVBcnJheSwgaW50IG1vZGUgKTsKICAgIFFUZXh0U3RyZWFtKCBGSUxFICosIGludCBt
b2RlICk7CiAgICB2aXJ0dWFsIH5RVGV4dFN0cmVhbSgpOwoKICAgIFFJT0RldmljZSAqZGV2aWNl
KCkgY29uc3Q7CiAgICB2b2lkIHNldERldmljZSggUUlPRGV2aWNlICogKTsKICAgIHZvaWQgdW5z
ZXREZXZpY2UoKTsKCiAgICBib29sIGF0RW5kKCkgY29uc3Q7CiAgICBib29sIGVvZigpIGNvbnN0
OwoKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCBRQ2hhciAmICk7CiAgICBRVGV4dFN0cmVh
bSAmb3BlcmF0b3I+PiggY2hhciAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+Piggc2ln
bmVkIHNob3J0ICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCB1bnNpZ25lZCBzaG9y
dCAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+Piggc2lnbmVkIGludCAmICk7CiAgICBR
VGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggdW5zaWduZWQgaW50ICYgKTsKICAgIFFUZXh0U3RyZWFt
ICZvcGVyYXRvcj4+KCBzaWduZWQgbG9uZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+
PiggdW5zaWduZWQgbG9uZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggZmxvYXQg
JiApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPj4oIGRvdWJsZSAmICk7CiAgICBRVGV4dFN0
cmVhbSAmb3BlcmF0b3I+PiggY2hhciAqICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+Pigg
UVN0cmluZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggUUNTdHJpbmcgJiApOwoK
ICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBRQ2hhciApOwogICAgUVRleHRTdHJlYW0gJm9w
ZXJhdG9yPDwoIGNoYXIgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBzaWduZWQgc2hv
cnQgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCB1bnNpZ25lZCBzaG9ydCApOwogICAg
UVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIHNpZ25lZCBpbnQgKTsKICAgIFFUZXh0U3RyZWFtICZv
cGVyYXRvcjw8KCB1bnNpZ25lZCBpbnQgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBz
aWduZWQgbG9uZyApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIHVuc2lnbmVkIGxvbmcg
KTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBmbG9hdCApOwogICAgUVRleHRTdHJlYW0g
Jm9wZXJhdG9yPDwoIGRvdWJsZSApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIGNvbnN0
IGNoYXIqICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggY29uc3QgUVN0cmluZyAmICk7
CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggY29uc3QgUUNTdHJpbmcgJiApOwogICAgUVRl
eHRTdHJlYW0gJm9wZXJhdG9yPDwoIHZvaWQgKiApOwoKICAgIFFUZXh0U3RyZWFtICZyZWFkUmF3
Qnl0ZXMoIGNoYXIgKiwgdWludCBsZW4gKTsKICAgIFFUZXh0U3RyZWFtICZ3cml0ZVJhd0J5dGVz
KCBjb25zdCBjaGFyKiAsIHVpbnQgbGVuICk7CgogICAgUVN0cmluZyByZWFkTGluZSgpOwogICAg
UVN0cmluZyByZWFkKCk7CiAgICB2b2lkIHNraXBXaGl0ZVNwYWNlKCk7CgogICAgZW51bSB7CiAg
ICAgICAgc2tpcHdzID0gMHgwMDAxLAogICAgICAgIGxlZnQgPSAweDAwMDIsCiAgICAgICAgcmln
aHQgPSAweDAwMDQsCiAgICAgICAgaW50ZXJuYWwgPSAweDAwMDgsCiAgICAgICAgYmluID0gMHgw
MDEwLAogICAgICAgIG9jdCA9IDB4MDAyMCwKICAgICAgICBkZWMgPSAweDAwNDAsCiAgICAgICAg
aGV4ID0gMHgwMDgwLAogICAgICAgIHNob3diYXNlID0gMHgwMTAwLAogICAgICAgIHNob3dwb2lu
dCA9IDB4MDIwMCwKICAgICAgICB1cHBlcmNhc2UgPSAweDA0MDAsCiAgICAgICAgc2hvd3BvcyA9
IDB4MDgwMCwKICAgICAgICBzY2llbnRpZmljPSAweDEwMDAsCiAgICAgICAgZml4ZWQgPSAweDIw
MDAKICAgIH07CgogICAgc3RhdGljIGNvbnN0IGludCBiYXNlZmllbGQ7CiAgICBzdGF0aWMgY29u
c3QgaW50IGFkanVzdGZpZWxkOwogICAgc3RhdGljIGNvbnN0IGludCBmbG9hdGZpZWxkOwoKICAg
IGludCBmbGFncygpIGNvbnN0OwogICAgaW50IGZsYWdzKCBpbnQgZiApOwogICAgaW50IHNldGYo
IGludCBiaXRzICk7CiAgICBpbnQgc2V0ZiggaW50IGJpdHMsIGludCBtYXNrICk7CiAgICBpbnQg
dW5zZXRmKCBpbnQgYml0cyApOwoKICAgIHZvaWQgcmVzZXQoKTsKCiAgICBpbnQgd2lkdGgoKSBj
b25zdDsKICAgIGludCB3aWR0aCggaW50ICk7CiAgICBpbnQgZmlsbCgpIGNvbnN0OwogICAgaW50
IGZpbGwoIGludCApOwogICAgaW50IHByZWNpc2lvbigpIGNvbnN0OwogICAgaW50IHByZWNpc2lv
biggaW50ICk7Cgpwcml2YXRlOgogICAgbG9uZyBpbnB1dF9pbnQoKTsKICAgIHZvaWQgaW5pdCgp
OwogICAgUVRleHRTdHJlYW0gJm91dHB1dF9pbnQoIGludCwgdWxvbmcsIGJvb2wgKTsKICAgIFFJ
T0RldmljZSAqZGV2OwoKICAgIGludCBmZmxhZ3M7CiAgICBpbnQgZndpZHRoOwogICAgaW50IGZp
bGxjaGFyOwogICAgaW50IGZwcmVjOwogICAgYm9vbCBkb1VuaWNvZGVIZWFkZXI7CiAgICBib29s
IG93bmRldjsKICAgIFFUZXh0Q29kZWMgKm1hcHBlcjsKICAgIFFUZXh0U3RyZWFtUHJpdmF0ZSAq
IGQ7CiAgICBRQ2hhciB1bnVzZWQxOwogICAgYm9vbCBsYXRpbjE7CiAgICBib29sIGludGVybmFs
T3JkZXI7CiAgICBib29sIG5ldHdvcmtPcmRlcjsKICAgIHZvaWQgKnVudXNlZDI7CgogICAgUUNo
YXIgZWF0X3dzKCk7CiAgICB1aW50IHRzX2dldGxpbmUoIFFDaGFyKiApOwogICAgdm9pZCB0c191
bmdldGMoIFFDaGFyICk7CiAgICBRQ2hhciB0c19nZXRjKCk7CiAgICB1aW50IHRzX2dldGJ1Zigg
UUNoYXIqLCB1aW50ICk7CiAgICB2b2lkIHRzX3B1dGMoaW50KTsKICAgIHZvaWQgdHNfcHV0YyhR
Q2hhcik7CiAgICBib29sIHRzX2lzc3BhY2UoUUNoYXIpOwogICAgYm9vbCB0c19pc2RpZ2l0KFFD
aGFyKTsKICAgIHVsb25nIGlucHV0X2JpbigpOwogICAgdWxvbmcgaW5wdXRfb2N0KCk7CiAgICB1
bG9uZyBpbnB1dF9kZWMoKTsKICAgIHVsb25nIGlucHV0X2hleCgpOwogICAgZG91YmxlIGlucHV0
X2RvdWJsZSgpOwogICAgUVRleHRTdHJlYW0gJndyaXRlQmxvY2soIGNvbnN0IGNoYXIqIHAsIHVp
bnQgbGVuICk7CiAgICBRVGV4dFN0cmVhbSAmd3JpdGVCbG9jayggY29uc3QgUUNoYXIqIHAsIHVp
bnQgbGVuICk7Cgpwcml2YXRlOgoKICAgIFFUZXh0U3RyZWFtKCBjb25zdCBRVGV4dFN0cmVhbSAm
ICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I9KCBjb25zdCBRVGV4dFN0cmVhbSAmICk7Cgp9
OwoKdHlwZWRlZiBRVGV4dFN0cmVhbSBRVFM7CgpjbGFzcyBRVGV4dElTdHJlYW0gOiBwdWJsaWMg
UVRleHRTdHJlYW0gewpwdWJsaWM6CiAgICBRVGV4dElTdHJlYW0oIGNvbnN0IFFTdHJpbmcqIHMg
KSA6CiAgICAgICAgUVRleHRTdHJlYW0oKFFTdHJpbmcqKXMsMHgwMDAxKSB7IH0KICAgIFFUZXh0
SVN0cmVhbSggUUJ5dGVBcnJheSBiYSApIDoKICAgICAgICBRVGV4dFN0cmVhbShiYSwweDAwMDEp
IHsgfQogICAgUVRleHRJU3RyZWFtKCBGSUxFICpmICkgOgogICAgICAgIFFUZXh0U3RyZWFtKGYs
MHgwMDAxKSB7IH0KfTsKCmNsYXNzIFFUZXh0T1N0cmVhbSA6IHB1YmxpYyBRVGV4dFN0cmVhbSB7
CnB1YmxpYzoKICAgIFFUZXh0T1N0cmVhbSggUVN0cmluZyogcyApIDoKICAgICAgICBRVGV4dFN0
cmVhbShzLDB4MDAwMikgeyB9CiAgICBRVGV4dE9TdHJlYW0oIFFCeXRlQXJyYXkgYmEgKSA6CiAg
ICAgICAgUVRleHRTdHJlYW0oYmEsMHgwMDAyKSB7IH0KICAgIFFUZXh0T1N0cmVhbSggRklMRSAq
ZiApIDoKICAgICAgICBRVGV4dFN0cmVhbShmLDB4MDAwMikgeyB9Cn07CgoKCgoKaW5saW5lIFFJ
T0RldmljZSAqUVRleHRTdHJlYW06OmRldmljZSgpIGNvbnN0CnsgcmV0dXJuIGRldjsgfQoKaW5s
aW5lIGJvb2wgUVRleHRTdHJlYW06OmF0RW5kKCkgY29uc3QKeyByZXR1cm4gZGV2ID8gZGV2LT5h
dEVuZCgpIDogRkFMU0U7IH0KCmlubGluZSBib29sIFFUZXh0U3RyZWFtOjplb2YoKSBjb25zdAp7
IHJldHVybiBhdEVuZCgpOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjpmbGFncygpIGNvbnN0
CnsgcmV0dXJuIGZmbGFnczsgfQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6ZmxhZ3MoIGludCBm
ICkKeyBpbnQgb2xkZiA9IGZmbGFnczsgZmZsYWdzID0gZjsgcmV0dXJuIG9sZGY7IH0KCmlubGlu
ZSBpbnQgUVRleHRTdHJlYW06OnNldGYoIGludCBiaXRzICkKeyBpbnQgb2xkZiA9IGZmbGFnczsg
ZmZsYWdzIHw9IGJpdHM7IHJldHVybiBvbGRmOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjpz
ZXRmKCBpbnQgYml0cywgaW50IG1hc2sgKQp7IGludCBvbGRmID0gZmZsYWdzOyBmZmxhZ3MgPSAo
ZmZsYWdzICYgfm1hc2spIHwgKGJpdHMgJiBtYXNrKTsgcmV0dXJuIG9sZGY7IH0KCmlubGluZSBp
bnQgUVRleHRTdHJlYW06OnVuc2V0ZiggaW50IGJpdHMgKQp7IGludCBvbGRmID0gZmZsYWdzOyBm
ZmxhZ3MgJj0gfmJpdHM7IHJldHVybiBvbGRmOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjp3
aWR0aCgpIGNvbnN0CnsgcmV0dXJuIGZ3aWR0aDsgfQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6
d2lkdGgoIGludCB3ICkKeyBpbnQgb2xkdyA9IGZ3aWR0aDsgZndpZHRoID0gdzsgcmV0dXJuIG9s
ZHc7IH0KCmlubGluZSBpbnQgUVRleHRTdHJlYW06OmZpbGwoKSBjb25zdAp7IHJldHVybiBmaWxs
Y2hhcjsgfQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6ZmlsbCggaW50IGYgKQp7IGludCBvbGRj
ID0gZmlsbGNoYXI7IGZpbGxjaGFyID0gZjsgcmV0dXJuIG9sZGM7IH0KCmlubGluZSBpbnQgUVRl
eHRTdHJlYW06OnByZWNpc2lvbigpIGNvbnN0CnsgcmV0dXJuIGZwcmVjOyB9CgppbmxpbmUgaW50
IFFUZXh0U3RyZWFtOjpwcmVjaXNpb24oIGludCBwICkKeyBpbnQgb2xkcCA9IGZwcmVjOyBmcHJl
YyA9IHA7IHJldHVybiBvbGRwOyB9CgoKCgppbmxpbmUgUUNoYXIgUVRleHRTdHJlYW06OnRzX2dl
dGMoKQp7IFFDaGFyIHI7IHJldHVybiAoIHRzX2dldGJ1ZiggJnIsMSApID09IDEgPyByIDogUUNo
YXIoKHVzaG9ydCkweGZmZmYpICk7IH0KCgoKCgp0eXBlZGVmIFFUZXh0U3RyZWFtICYgKCpRVFNG
VU5DKShRVGV4dFN0cmVhbSAmKTsKdHlwZWRlZiBpbnQgKFFUZXh0U3RyZWFtOjoqUVRTTUZJKShp
bnQpOwoKY2xhc3MgUVRTTWFuaXAgewpwdWJsaWM6CiAgICBRVFNNYW5pcCggUVRTTUZJIG0sIGlu
dCBhICkgeyBtZj1tOyBhcmc9YTsgfQogICAgdm9pZCBleGVjKCBRVGV4dFN0cmVhbSAmcyApIHsg
KHMuKm1mKShhcmcpOyB9CnByaXZhdGU6CiAgICBRVFNNRkkgbWY7CiAgICBpbnQgYXJnOwp9OwoK
IGlubGluZSBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggUVRleHRTdHJlYW0gJnMsIFFUU0ZVTkMg
ZiApCnsgcmV0dXJuICgqZikoIHMgKTsgfQoKIGlubGluZSBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8
PCggUVRleHRTdHJlYW0gJnMsIFFUU0ZVTkMgZiApCnsgcmV0dXJuICgqZikoIHMgKTsgfQoKIGlu
bGluZSBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggUVRleHRTdHJlYW0gJnMsIFFUU01hbmlwIG0g
KQp7IG0uZXhlYyhzKTsgcmV0dXJuIHM7IH0KCiBRVGV4dFN0cmVhbSAmYmluKCBRVGV4dFN0cmVh
bSAmcyApOwogUVRleHRTdHJlYW0gJm9jdCggUVRleHRTdHJlYW0gJnMgKTsKIFFUZXh0U3RyZWFt
ICZkZWMoIFFUZXh0U3RyZWFtICZzICk7CiBRVGV4dFN0cmVhbSAmaGV4KCBRVGV4dFN0cmVhbSAm
cyApOwogUVRleHRTdHJlYW0gJmVuZGwoIFFUZXh0U3RyZWFtICZzICk7CiBRVGV4dFN0cmVhbSAm
Zmx1c2goIFFUZXh0U3RyZWFtICZzICk7CiBRVGV4dFN0cmVhbSAmd3MoIFFUZXh0U3RyZWFtICZz
ICk7CiBRVGV4dFN0cmVhbSAmcmVzZXQoIFFUZXh0U3RyZWFtICZzICk7CgogaW5saW5lIFFUU01h
bmlwIHFTZXRXKCBpbnQgdyApCnsKICAgIFFUU01GSSBmdW5jID0gJlFUZXh0U3RyZWFtOjp3aWR0
aDsKICAgIHJldHVybiBRVFNNYW5pcChmdW5jLHcpOwp9CgogaW5saW5lIFFUU01hbmlwIHFTZXRG
aWxsKCBpbnQgZiApCnsKICAgIFFUU01GSSBmdW5jID0gJlFUZXh0U3RyZWFtOjpmaWxsOwogICAg
cmV0dXJuIFFUU01hbmlwKGZ1bmMsZik7Cn0KCiBpbmxpbmUgUVRTTWFuaXAgcVNldFByZWNpc2lv
biggaW50IHAgKQp7CiAgICBRVFNNRkkgZnVuYyA9ICZRVGV4dFN0cmVhbTo6cHJlY2lzaW9uOwog
ICAgcmV0dXJuIFFUU01hbmlwKGZ1bmMscCk7Cn0KIyA0NCAiL3Vzci9sb2NhbC9xdC14MTEtZnJl
ZS0zLjAuNi9pbmNsdWRlL3F0bC5oIiAyCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgUVRl
eHRPU3RyZWFtSXRlcmF0b3IKewpwcm90ZWN0ZWQ6CiAgICBRVGV4dE9TdHJlYW0mIHN0cmVhbTsK
ICAgIFFTdHJpbmcgc2VwYXJhdG9yOwoKcHVibGljOgogICAgUVRleHRPU3RyZWFtSXRlcmF0b3Io
IFFUZXh0T1N0cmVhbSYgcykgOiBzdHJlYW0oIHMgKSB7fQogICAgUVRleHRPU3RyZWFtSXRlcmF0
b3IoIFFUZXh0T1N0cmVhbSYgcywgY29uc3QgUVN0cmluZyYgc2VwICkKICAgICAgICA6IHN0cmVh
bSggcyApLCBzZXBhcmF0b3IoIHNlcCApIHt9CiAgICBRVGV4dE9TdHJlYW1JdGVyYXRvcjxUPiYg
b3BlcmF0b3I9ICggY29uc3QgVCYgeCApIHsKICAgICAgICBzdHJlYW0gPDwgeDsKICAgICAgICBp
ZiAoICFzZXBhcmF0b3IuaXNFbXB0eSgpICkKICAgICAgICAgICAgc3RyZWFtIDw8IHNlcGFyYXRv
cjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICBRVGV4dE9TdHJlYW1JdGVyYXRvcjxU
PiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIFFUZXh0T1N0cmVhbUl0ZXJhdG9y
PFQ+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIFFUZXh0T1N0cmVhbUl0ZXJh
dG9yPFQ+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgT3V0cHV0SXRlcmF0b3I+CmlubGluZSBPdXRwdXRJ
dGVyYXRvciBxQ29weSggSW5wdXRJdGVyYXRvciBfYmVnaW4sIElucHV0SXRlcmF0b3IgX2VuZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRJdGVyYXRvciBfZGVzdCApCnsKICAg
IHdoaWxlKCBfYmVnaW4gIT0gX2VuZCApCiAgICAgICAgKl9kZXN0KysgPSAqX2JlZ2luKys7CiAg
ICByZXR1cm4gX2Rlc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBCaUl0ZXJhdG9yLCBjbGFzcyBCaU91
dHB1dEl0ZXJhdG9yPgppbmxpbmUgQmlPdXRwdXRJdGVyYXRvciBxQ29weUJhY2t3YXJkKCBCaUl0
ZXJhdG9yIF9iZWdpbiwgQmlJdGVyYXRvciBfZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBCaU91dHB1dEl0ZXJhdG9yIF9kZXN0ICkKewogICAgd2hpbGUgKCBfYmVn
aW4gIT0gX2VuZCApCiAgICAgICAgKi0tX2Rlc3QgPSAqLS1fZW5kOwogICAgcmV0dXJuIF9kZXN0
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcjEsIGNsYXNzIElucHV0SXRlcmF0b3Iy
PgppbmxpbmUgYm9vbCBxRXF1YWwoIElucHV0SXRlcmF0b3IxIGZpcnN0MSwgSW5wdXRJdGVyYXRv
cjEgbGFzdDEsIElucHV0SXRlcmF0b3IyIGZpcnN0MiApCnsKICAgIGZvciAoIDsgZmlyc3QxICE9
IGxhc3QxOyArK2ZpcnN0MSwgKytmaXJzdDIgKQogICAgICAgIGlmICggKmZpcnN0MSAhPSAqZmly
c3QyICkKICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgcmV0dXJuIFRSVUU7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3IsIGNsYXNzIFQ+CmlubGluZSB2b2lkIHFGaWxsKCBG
b3J3YXJkSXRlcmF0b3IgZmlyc3QsIEZvcndhcmRJdGVyYXRvciBsYXN0LCBjb25zdCBUJiB2YWwg
KQp7CiAgICBmb3IgKCA7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3QgKQogICAgICAgICpmaXJzdCA9
IHZhbDsKfQojIDEyMCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3F0bC5o
Igp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgVD4KaW5saW5lIElucHV0SXRl
cmF0b3IgcUZpbmQoIElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQmIHZhbCApCnsKICAgIHdoaWxlICggZmly
c3QgIT0gbGFzdCAmJiAqZmlyc3QgIT0gdmFsICkKICAgICAgICArK2ZpcnN0OwogICAgcmV0dXJu
IGZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgVCwgY2xhc3Mg
U2l6ZT4KaW5saW5lIHZvaWQgcUNvdW50KCBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJh
dG9yIGxhc3QsIGNvbnN0IFQmIHZhbHVlLAogICAgICAgICAgICAgICAgICAgIFNpemUmIG4gKQp7
CiAgICBmb3IgKCA7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3QgKQogICAgICAgIGlmICggKmZpcnN0
ID09IHZhbHVlICkKICAgICAgICAgICAgKytuOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5l
IHZvaWQgcVN3YXAoIFQmIF92YWx1ZTEsIFQmIF92YWx1ZTIgKQp7CiAgICBUIHRtcCA9IF92YWx1
ZTE7CiAgICBfdmFsdWUxID0gX3ZhbHVlMjsKICAgIF92YWx1ZTIgPSB0bXA7Cn0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KIHZvaWQgcUJ1YmJsZVNvcnQoIElucHV0SXRlcmF0b3Ig
YiwgSW5wdXRJdGVyYXRvciBlICkKewoKICAgIElucHV0SXRlcmF0b3IgbGFzdCA9IGU7CiAgICAt
LWxhc3Q7CgogICAgaWYgKCBsYXN0ID09IGIgKQogICAgICAgIHJldHVybjsKCgogICAgd2hpbGUo
IGIgIT0gbGFzdCApIHsKICAgICAgICBib29sIHN3YXBwZWQgPSBGQUxTRTsKICAgICAgICBJbnB1
dEl0ZXJhdG9yIHN3YXBfcG9zID0gYjsKICAgICAgICBJbnB1dEl0ZXJhdG9yIHggPSBlOwogICAg
ICAgIElucHV0SXRlcmF0b3IgeSA9IHg7CiAgICAgICAgeS0tOwogICAgICAgIGRvIHsKICAgICAg
ICAgICAgLS14OwogICAgICAgICAgICAtLXk7CiAgICAgICAgICAgIGlmICggKnggPCAqeSApIHsK
ICAgICAgICAgICAgICAgIHN3YXBwZWQgPSBUUlVFOwogICAgICAgICAgICAgICAgcVN3YXAoICp4
LCAqeSApOwogICAgICAgICAgICAgICAgc3dhcF9wb3MgPSB5OwogICAgICAgICAgICB9CiAgICAg
ICAgfSB3aGlsZSggeSAhPSBiICk7CiAgICAgICAgaWYgKCAhc3dhcHBlZCApCiAgICAgICAgICAg
IHJldHVybjsKICAgICAgICBiID0gc3dhcF9wb3M7CiAgICAgICAgYisrOwogICAgfQp9CgoKdGVt
cGxhdGUgPGNsYXNzIENvbnRhaW5lcj4KaW5saW5lIHZvaWQgcUJ1YmJsZVNvcnQoIENvbnRhaW5l
ciAmYyApCnsKICBxQnViYmxlU29ydCggYy5iZWdpbigpLCBjLmVuZCgpICk7Cn0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgVmFsdWU+CiB2b2lkIHFIZWFwU29ydFB1c2hEb3duKCBWYWx1ZSogaGVhcCwgaW50
IGZpcnN0LCBpbnQgbGFzdCApCnsKICAgIGludCByID0gZmlyc3Q7CiAgICB3aGlsZSggciA8PSBs
YXN0LzIgKSB7CgogICAgICAgIGlmICggbGFzdCA9PSAyKnIgKSB7CgogICAgICAgICAgICBpZiAo
IGhlYXBbcl0gPiBoZWFwWyAyKnIgXSApCiAgICAgICAgICAgICAgICBxU3dhcCggaGVhcFtyXSwg
aGVhcFsgMipyIF0gKTsKCiAgICAgICAgICAgIHIgPSBsYXN0OwogICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgIGlmICggaGVhcFtyXSA+IGhlYXBbIDIqciBdICYmIGhlYXBbIDIqciBdIDw9IGhl
YXBbIDIqcisxIF0gKSB7CgogICAgICAgICAgICAgICAgcVN3YXAoIGhlYXBbcl0sIGhlYXBbIDIq
ciBdICk7CiAgICAgICAgICAgICAgICByICo9IDI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoIGhl
YXBbcl0gPiBoZWFwWyAyKnIrMSBdICYmCiAgICAgICAgICAgICAgICAgICAgICAgIGhlYXBbIDIq
cisxIF0gPCBoZWFwWyAyKnIgXSApIHsKCiAgICAgICAgICAgICAgICBxU3dhcCggaGVhcFtyXSwg
aGVhcFsgMipyKzEgXSApOwogICAgICAgICAgICAgICAgciA9IDIqcisxOwogICAgICAgICAgICB9
IGVsc2UgewoKICAgICAgICAgICAgICAgIHIgPSBsYXN0OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgfQp9CgoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIFZhbHVlPgog
dm9pZCBxSGVhcFNvcnRIZWxwZXIoIElucHV0SXRlcmF0b3IgYiwgSW5wdXRJdGVyYXRvciBlLCBW
YWx1ZSwgdWludCBuICkKewoKICAgIElucHV0SXRlcmF0b3IgaW5zZXJ0ID0gYjsKICAgIFZhbHVl
KiByZWFsaGVhcCA9IG5ldyBWYWx1ZVsgbiBdOwoKICAgIFZhbHVlKiBoZWFwID0gcmVhbGhlYXAg
LSAxOwogICAgaW50IHNpemUgPSAwOwogICAgZm9yKCA7IGluc2VydCAhPSBlOyArK2luc2VydCAp
IHsKICAgICAgICBoZWFwWysrc2l6ZV0gPSAqaW5zZXJ0OwogICAgICAgIGludCBpID0gc2l6ZTsK
ICAgICAgICB3aGlsZSggaSA+IDEgJiYgaGVhcFtpXSA8IGhlYXBbIGkgLyAyIF0gKSB7CiAgICAg
ICAgICAgIHFTd2FwKCBoZWFwW2ldLCBoZWFwWyBpIC8gMiBdICk7CiAgICAgICAgICAgIGkgLz0g
MjsKICAgICAgICB9CiAgICB9CgoKICAgIGZvciggdWludCBpID0gbjsgaSA+IDA7IGktLSApIHsK
ICAgICAgICAqYisrID0gaGVhcFsxXTsKICAgICAgICBpZiAoIGkgPiAxICkgewogICAgICAgICAg
ICBoZWFwWzFdID0gaGVhcFtpXTsKICAgICAgICAgICAgcUhlYXBTb3J0UHVzaERvd24oIGhlYXAs
IDEsIChpbnQpaSAtIDEgKTsKICAgICAgICB9CiAgICB9CgogICAgZGVsZXRlW10gcmVhbGhlYXA7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KIHZvaWQgcUhlYXBTb3J0KCBJbnB1
dEl0ZXJhdG9yIGIsIElucHV0SXRlcmF0b3IgZSApCnsKCiAgICBpZiAoIGIgPT0gZSApCiAgICAg
ICAgcmV0dXJuOwoKCiAgICBJbnB1dEl0ZXJhdG9yIGl0ID0gYjsKICAgIHVpbnQgbiA9IDA7CiAg
ICB3aGlsZSAoIGl0ICE9IGUgKSB7CiAgICAgICAgKytuOwogICAgICAgICsraXQ7CiAgICB9CgoK
CiAgICBxSGVhcFNvcnRIZWxwZXIoIGIsIGUsICpiLCBuICk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
Q29udGFpbmVyPgogdm9pZCBxSGVhcFNvcnQoIENvbnRhaW5lciAmYyApCnsKICAgIGlmICggYy5i
ZWdpbigpID09IGMuZW5kKCkgKQogICAgICAgIHJldHVybjsKCgoKICAgIHFIZWFwU29ydEhlbHBl
ciggYy5iZWdpbigpLCBjLmVuZCgpLCAqKGMuYmVnaW4oKSksICh1aW50KWMuY291bnQoKSApOwp9
CiMgNDcgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xbWFwLmgiIDIKIyAx
ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXZhbHVlbGlzdC5oIiAxCiMg
NDggIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xdmFsdWVsaXN0LmgiCiMg
MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaXRlcmF0b3IiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9pdGVyYXRvciIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgv
Yml0cy9jKytjb25maWcuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGlu
dXgvYml0cy9jKytjb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGlu
dXgvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2
LWxpbnV4L2JpdHMvYysrY29uZmlnLmgiIDIgMwojIDY2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9p
dGVyYXRvciIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGRlZiIgMSAzCiMgNDcg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRkZWYiIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE1MSAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRy
ZGlmZl90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkZGVmIiAyIDMKCm5hbWVzcGFj
ZSBzdGQKewogIHVzaW5nIDo6cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgNjcgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2l0ZXJhdG9yIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKCm5hbWVzcGFjZSBzdGQK
ewojIDgwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVz
LmgiIDMKICBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3Qgb3V0cHV0X2l0
ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlu
cHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn
IDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgcmFuZG9tX2FjY2Vz
c19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CiMg
MTAwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2F0ZWdvcnksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg
X0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAgICAgICAgIHR5cGVuYW1lIF9Qb2ludGVyID0gX1Rw
KiwgdHlwZW5hbWUgX1JlZmVyZW5jZSA9IF9UcCY+CiAgICBzdHJ1Y3QgaXRlcmF0b3IgewoKICAg
ICAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgICB0eXBlZGVmIF9U
cCB2YWx1ZV90eXBlOwoKICAgICAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwoK
ICAgICAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwoKICAgICAgdHlwZWRlZiBfUmVmZXJlbmNl
IHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4K
ICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVy
YXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewog
ICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBk
aWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVm
IF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3Ry
dWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2Fj
Y2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZh
bHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAg
dHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiByZWZl
cmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgIGlubGlu
ZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQogICAg
X19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCiAgICB7IHJldHVybiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpOyB9Cgp9CiMgNjggIi91
c3IvaW5jbHVkZS9jKysvMy4yL2l0ZXJhdG9yIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvY29uY2VwdF9jaGVjay5oIiAzCiMgNjkgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsK
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIF9fZGlzdGFuY2Uo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVy
YXRvcl90YWcpCiAgewoKICAgCgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICB3aGlsZSAoX19maXJzdCAhPSBf
X2xhc3QpIHsKICAgICAgKytfX2ZpcnN0OyArK19fbjsKICAgIH0KICAgIHJldHVybiBfX247CiAg
fQoKdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogIGlubGluZSB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90
eXBlCiAgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf
dGFnKQogIHsKCiAgIAogICAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7CiAgfQojIDExMSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCnRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICBkaXN0YW5jZShfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgewoKICAgIHJldHVybiBf
X2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7
CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgog
IGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwg
aW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICB9
Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlz
dGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciYg
X19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZykKICB7CgogICAKCiAgICBpZiAoX19uID4gMCkKICAgICAgd2hpbGUgKF9fbi0tKSArK19faTsK
ICAgIGVsc2UKICAgICAgd2hpbGUgKF9fbisrKSAtLV9faTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9p
ZAogIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwK
ICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICBfX2kg
Kz0gX19uOwogIH0KIyAxNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9y
X2Jhc2VfZnVuY3MuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5h
bWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19p
LCBfRGlzdGFuY2UgX19uKQogIHsKCiAgICBfX2FkdmFuY2UoX19pLCBfX24sIF9faXRlcmF0b3Jf
Y2F0ZWdvcnkoX19pKSk7CiAgfQoKfQojIDY5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pdGVyYXRv
ciIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAz
CiMgNjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNw
YWNlIHN0ZAp7CiMgODkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBjbGFzcyByZXZlcnNlX2l0ZXJh
dG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh
dG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUs
CiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y
Pjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9JdGVy
YXRvciBjdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0
b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y
Pjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRl
ciBwb2ludGVyOwoKICAgIHB1YmxpYzoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcigpIHsgfQoK
CgoKICAgICAgZXhwbGljaXQKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9f
eCkgOiBjdXJyZW50KF9feCkgeyB9CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3ImIF9feCkKICAgICAgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7IH0KCgoK
CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgICByZXZlcnNlX2l0ZXJhdG9y
KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICAgICAgOiBjdXJyZW50KF9f
eC5iYXNlKCkpIHsgfQoKCgoKICAgICAgaXRlcmF0b3JfdHlwZQogICAgICBiYXNlKCkgY29uc3Qg
eyByZXR1cm4gY3VycmVudDsgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3Iq
KCkgY29uc3QKICAgICAgewogICAgICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICAg
ICAgcmV0dXJuICotLV9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHBvaW50ZXIKICAgICAgb3Bl
cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKCgoKCiAgICAgIHJl
dmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgLS1jdXJy
ZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0
ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgcmV2ZXJzZV9pdGVy
YXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgIC0tY3VycmVudDsKICAgICAgICByZXR1cm4gX190
bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3It
LSgpCiAgICAgIHsKICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
ICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCiAgICAgIHsK
ICAgICAgICByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgKytjdXJyZW50
OwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJh
dG9yCiAgICAgIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAgICB7IHJl
dHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgLSBfX24pOyB9CgoKCgoKCiAgICAgIHJldmVy
c2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikKICAgICAg
ewogICAgICAgIGN1cnJlbnQgLT0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoK
CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5
cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgKyBf
X24pOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0oZGlm
ZmVyZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJlbnQgKz0gX19uOwogICAgICAg
IHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0
b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsg
fQogICAgfTsKIyAyNjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAg
ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVy
biBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh
dG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9y
PF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feS5iYXNlKCkgPCBfX3guYmFzZSgpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
ciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAg
ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEo
X194ID09IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f
eCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkK
ICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICBjb25zdCByZXZl
cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX194IDwgX195KTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgdHlwZW5hbWUgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgIG9wZXJhdG9yLShj
b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBjb25z
dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feS5iYXNl
KCkgLSBfX3guYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlu
bGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4KICAgIG9wZXJhdG9yKyh0eXBlbmFtZSBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAg
ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpCiAgICB7IHJldHVy
biByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJhc2UoKSAtIF9fbik7IH0KIyAzMjcg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3IKICAgIDog
cHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZv
aWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKCiAg
ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CgoKICAg
ICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6
IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2l0ZXJhdG9yLmgiIDMKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y
PSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewog
ICAgICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhp
czsKICAgICAgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcioo
KSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBv
cGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRv
cgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgMzg0ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFp
bmVyPgogICAgYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpCiAgICB7IHJldHVybiBiYWNr
X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgMzk3ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRh
aW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0
b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAg
IHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdCBm
cm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7
IH0KIyA0MjIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAg
ICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRh
aW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXIt
PnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAg
ICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhp
czsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsg
cmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJh
dG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA0NTMgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFp
bmVyPgogICAgaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgZnJv
bnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+KF9feCk7IH0KIyA0NzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAg
Y2xhc3MgaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0
b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAg
ICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJh
dG9yIGl0ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5l
cl90eXBlOwoKCgoKCiAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVu
YW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgICAgOiBjb250YWluZXIoJl9feCksIGl0
ZXIoX19pKSB7fQojIDUxMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3Iu
aCIgMwogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFt
ZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGl0
ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICAgICArK2l0ZXI7CiAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAg
ICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYK
ICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNTQ0
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NvbnRhaW5lciwgdHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGluc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRl
cmF0b3IgX19pKQogICAgewogICAgICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
KF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBf
Q29udGFpbmVyOjppdGVyYXRvcihfX2kpKTsKICAgIH0KfQoKbmFtZXNwYWNlIF9fZ251X2N4eAp7
CgoKCgoKCgogIHVzaW5nIHN0ZDo6aXRlcmF0b3JfdHJhaXRzOwogIHVzaW5nIHN0ZDo6aXRlcmF0
b3I7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgog
ICAgY2xhc3MgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgOiBwdWJsaWMgaXRlcmF0b3I8dHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFs
dWVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+
CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKICAgIHB1
YmxpYzoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6
ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBw
b2ludGVyOwoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IoKSA6IF9NX2N1cnJlbnQoX0l0ZXJhdG9y
KCkpIHsgfQoKICAgICAgZXhwbGljaXQKICAgICAgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0
ZXJhdG9yJiBfX2kpIDogX01fY3VycmVudChfX2kpIHsgfQoKCiAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyPgogICAgICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXIsIF9Db250YWluZXI+JiBfX2kpCiAgICAgICAgOiBfTV9jdXJyZW50KF9f
aS5iYXNlKCkpIHsgfQoKCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvciooKSBjb25zdCB7
IHJldHVybiAqX01fY3VycmVudDsgfQoKICAgICAgcG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkg
Y29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAg
ICAgIG9wZXJhdG9yKysoKSB7ICsrX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogICAgICBf
X25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gX19ub3JtYWxf
aXRlcmF0b3IoX01fY3VycmVudCsrKTsgfQoKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAg
ICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19u
b3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItLShpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0
ZXJhdG9yKF9NX2N1cnJlbnQtLSk7IH0KCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3Jb
XShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3Vy
cmVudFtfX25dOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShj
b25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKICAgICAgeyBfTV9jdXJyZW50ICs9IF9fbjsgcmV0
dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisoY29u
c3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0
ZXJhdG9yKF9NX2N1cnJlbnQgKyBfX24pOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAg
ICAgb3BlcmF0b3ItPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKICAgICAgeyBfTV9jdXJy
ZW50IC09IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAg
ICBvcGVyYXRvci0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgLSBfX24pOyB9CgogICAgICBjb25zdCBf
SXRlcmF0b3ImCiAgICAgIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CiAgICB9
OwojIDY0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1l
IF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0
IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJl
dHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9y
PT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMs
CiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu
ZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVu
YW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNv
bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7
IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJh
dG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19s
aHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250
YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0
eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAg
Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQog
IHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVy
YXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19s
aHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250
YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlw
ZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgIGNv
bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7
IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0
b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhz
LAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu
ZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5h
bWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsg
cmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0
b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xo
cywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRh
aW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlw
ZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3Jt
YWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAg
Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQog
IHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3Bl
cmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBf
X2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv
bnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7
IH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRv
clIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0o
Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAog
ICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5l
cj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2UoKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5l
IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4KICBvcGVyYXRvcisodHlw
ZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5j
ZV90eXBlIF9fbiwKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
LCBfQ29udGFpbmVyPiYgX19pKQogIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KfQojIDcwICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9pdGVyYXRvciIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIg
MSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL29zdHJlYW0iIDMKCiMgMSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvaW9zIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAzCgoj
IDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2lvc2Z3ZCIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJpbmdm
d2QuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RyaW5nZndkLmgiIDMK
CgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3Mg
YWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFp
dHM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf
dHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9D
aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nOwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFy
X3RyYWl0czxjaGFyPjsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKCiAg
dGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD47CgogIHR5cGVkZWYgYmFzaWNf
c3RyaW5nPHdjaGFyX3Q+IHdzdHJpbmc7Cgp9CiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lv
c2Z3ZCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mcG9zLmgiIDEgMwojIDQz
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2kzODYtbGludXgvYml0cy9jKytpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvY3N0ZGlvIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAzCiMgOTcg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRpbyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6
OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAgdXNpbmcgOjpm
Y2xvc2U7CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5nIDo6ZmZsdXNo
OwogIHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6ZmdldHM7CiAg
dXNpbmcgOjpmb3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0YzsKICB1c2lu
ZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwogIHVzaW5nIDo6
ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVzaW5nIDo6ZnRl
bGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6Z2V0Y2hhcjsK
ICB1c2luZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmludGY7CiAgdXNp
bmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAgdXNpbmcgOjpy
ZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNpbmcgOjpzY2Fu
ZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcgOjpzcHJpbnRm
OwogIHVzaW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6OnRtcG5hbTsK
ICB1c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6dnByaW50ZjsK
ICB1c2luZyA6OnZzcHJpbnRmOwp9CiMgMTUzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8i
IDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjpzbnByaW50ZjsKICB1c2luZyA6OnZm
c2NhbmY7CiAgdXNpbmcgOjp2c2NhbmY7CiAgdXNpbmcgOjp2c25wcmludGY7CiAgdXNpbmcgOjp2
c3NjYW5mOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OnNucHJpbnRmOwog
IHVzaW5nIF9fZ251X2N4eDo6dmZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzY2FuZjsKICB1
c2luZyBfX2dudV9jeHg6OnZzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZzc2NhbmY7Cn0K
IyAzNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2MrK2lvLmgiIDIgMwoK
IyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvZ3Roci5oIiAxIDMKIyA5
OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2d0aHIuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9ndGhyLWRlZmF1bHQuaCIgMSAzCiMg
MzcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9ndGhyLWRlZmF1bHQuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvcHRo
cmVhZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1
ZGUvc2NoZWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDExNiAiL3Vzci9p
bmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7
CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgMzAgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAy
IDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDYyICIvdXNyL2luY2x1
ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVk
X3ByaW9yaXR5OwogIH07CgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIGludCBjbG9uZSAoaW50ICgq
X19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFjaywKICAgICAgICAgICAgICAg
ICAgaW50IF9fZmxhZ3MsIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgp9CgoKCgoKCgpzdHJ1Y3Qg
X19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMzMgIi91
c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2No
ZWRfc2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpf
X3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlk
X3QgX19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBzY2hlZF9zZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpf
X3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRf
dCBfX3BpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0p
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxn
b3JpdGhtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19w
aWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBzY2hlZF9zZXRhZmZpbml0eSAoX19waWRfdCBfX3BpZCwgdW5zaWduZWQgbG9uZyBpbnQgX19s
ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ICpfX21h
c2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0YWZmaW5pdHkgKF9fcGlkX3QgX19w
aWQsIHVuc2lnbmVkIGxvbmcgaW50IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIGludCAqX19tYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjEgIi91c3IvaW5j
bHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMwICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgoKIyAxICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzkgIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAz
CiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDU4ICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAzCgoKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCgoKIyA3NCAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMwoKCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwoKCgojIDkyICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDEwNCAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90OwojIDEyNyAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMwoKCnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQgdG1fbWluOwog
IGludCB0bV9ob3VyOwogIGludCB0bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50IHRtX3llYXI7
CiAgaW50IHRtX3dkYXk7CiAgaW50IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0OwoKCiAgbG9uZyBp
bnQgdG1fZ210b2ZmOwogIF9fY29uc3QgY2hhciAqdG1fem9uZTsKCgoKCn07CgoKCgoKCgoKc3Ry
dWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICBz
dHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CgoKCgoKdHlw
ZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKCgoKCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0
aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUw
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGlt
ZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90
IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqc3RycHRpbWUgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm10LCBzdHJ1Y3QgdG0gKl9fdHApCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gc2l6
ZV90IHN0cmZ0aW1lX2wgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmlj
dCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93
ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
bXQsIHN0cnVjdCB0bSAqX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg
X19sb2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3Qg
dGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1l
IChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0
bSAqZ210aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0
cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpf
X3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2Nv
bnN0IHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lIChfX2Nv
bnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGlt
ZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAq
Y3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo
YXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCBf
X3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoKZXh0ZXJuIHZvaWQgdHpz
ZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRlcm4gbG9uZyBp
bnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3QgKl9fd2hl
bikgdGhyb3cgKCk7CiMgMzA3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiB0aW1lX3Qg
dGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZWxv
Y2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZHlzaXplIChpbnQg
X195ZWFyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJu
IGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1l
LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lkX3QgX19jbG9ja19pZCwg
c3RydWN0IHRpbWVzcGVjICpfX3JlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXR0
aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3RwKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBfX2Nv
bnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBj
bG9ja19uYW5vc2xlZXAgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW0pIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3QgX19waWQsIGNsb2NraWRf
dCAqX19jbG9ja19pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZSAoY2xv
Y2tpZF90IF9fY2xvY2tfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnZXZl
bnQgKl9fcmVzdHJpY3QgX19ldnAsCiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl90ICpf
X3Jlc3RyaWN0IF9fdGltZXJpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUg
KHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUg
KHRpbWVyX3QgX190aW1lcmlkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fdmFsdWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQs
IHN0cnVjdCBpdGltZXJzcGVjICpfX3ZhbHVlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
dGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwojIDM3OCAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4dGVybiBz
dHJ1Y3QgdG0gKmdldGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwojIDM5
MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRt
ICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKfQojIDIyICIvdXNyL2luY2x1ZGUv
cHRocmVhZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMzEgIi91
c3IvaW5jbHVkZS9zaWduYWwuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvc2lnc2V0LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBl
ZGVmIGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWdu
ZWQgbG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQp
KSldOwogIH0gX19zaWdzZXRfdDsKIyAzNCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKIyA1
MCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsK
IyAzNzggIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp9CiMgMjUgIi91c3IvaW5jbHVkZS9wdGhy
ZWFkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAy
MyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9zY2hlZC5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi
IDIgMwoKdHlwZWRlZiBpbnQgX19hdG9taWNfbG9ja190OwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0
bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAgX19hdG9taWNfbG9ja190IF9fc3BpbmxvY2s7
Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rl
c2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MKewogIGludCBfX2RldGFj
aHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2No
ZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9f
Z3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAg
c2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7
CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9f
Y193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9f
ZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJl
YWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50
IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9fbV9raW5kOwog
IHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211dGV4X3Q7CgoK
CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJf
dDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRo
cmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndfbG9jazsKICBp
bnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwogIF9wdGhyZWFk
X2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2Fp
dGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xv
Y2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwogIGludCBfX3BzaGFy
ZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZvbGF0aWxlIGludCBwdGhy
ZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVjdCBfcHRocmVhZF9mYXN0
bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50IF9fYmFfcHJlc2VudDsK
ICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9iYXJyaWVyX3Q7CgoKdHlw
ZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9iYXJyaWVyYXR0cl90OwoK
CgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDI2ICIvdXNyL2luY2x1
ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbml0c3Bpbi5oIiAxIDMK
IyAyNyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKZXh0ZXJuICJDIiB7CiMgNTkgIi91
c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUs
CgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhFUklU
X1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9T
Q09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0KewogIFBUSFJF
QURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVB
RF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAKCiAgLAog
IFBUSFJFQURfTVVURVhfTk9STUFMID0gUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFE
X01VVEVYX1JFQ1VSU0lWRSA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBUSFJFQURf
TVVURVhfRVJST1JDSEVDSyA9IFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFE
X01VVEVYX0RFRkFVTFQgPSBQVEhSRUFEX01VVEVYX05PUk1BTAoKCgogICwgUFRIUkVBRF9NVVRF
WF9GQVNUX05QID0gUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoKfTsKCmVudW0KewogIFBUSFJF
QURfUFJPQ0VTU19QUklWQVRFLAoKICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoKCmVudW0K
ewogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJF
RkVSX1dSSVRFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJFQ1VSU0lW
RV9OUCwKICBQVEhSRUFEX1JXTE9DS19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xPQ0tfUFJFRkVS
X1dSSVRFUl9OUAp9OwojIDEzMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpzdHJ1Y3QgX3B0
aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopOwogIHZv
aWQgKl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBf
YnVmZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSwKCiAg
UFRIUkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfREVGRVJS
RUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoKfTsKIyAxNjMgIi91c3IvaW5jbHVk
ZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVhZF90ICpfX3Jl
c3RyaWN0IF9fdGhyZWFkcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhy
ZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKigqX19zdGFydF9yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqX19yZXN0cmljdCBfX2FyZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHB0aHJlYWRf
dCBwdGhyZWFkX3NlbGYgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9lcXVh
bCAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVhZF90IF9fdGhyZWFkMikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3JldHZhbCkKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfam9p
biAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSB0aHJvdyAoKTsKCgoK
CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0
cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFj
aHN0YXRlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fZGV0YWNo
c3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0g
KHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19jb25zdCBwdGhyZWFk
X2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz
Y2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBp
bnQgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0
c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9f
cG9saWN5KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVy
aXRzY2hlZCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19pbmhlcml0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVz
dHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGlu
dCAqX19yZXN0cmljdCBfX2luaGVyaXQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Njb3BlKQog
ICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlIChfX2NvbnN0
IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Njb3BlKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2d1YXJkc2l6ZSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplIChfX2NvbnN0
IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19ndWFyZHNpemUpCiAgICAgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkciAocHRocmVh
ZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICpfX3N0YWNrYWRkcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0
c3RhY2thZGRyIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB2b2lkICoqX19yZXN0cmljdCBfX3N0
YWNrYWRkcikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRz
dGFjayAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqX19zdGFja2FkZHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90
ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKipfX3Jlc3RyaWN0IF9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhY2tzaXpl
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUgKF9fY29u
c3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6ZSkKICAgICB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGF0dHJfbnAgKHB0aHJlYWRfdCBfX3Ro
LCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBfX3BvbGlj
eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVk
X3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRz
Y2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0p
CiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25jdXJyZW5jeSAodm9p
ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5IChpbnQgX19s
ZXZlbCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfeWllbGQgKHZvaWQpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVhZF9tdXRl
eF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbXV0ZXhfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X211dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJlYWRfbXV0ZXhf
dCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90aW1lZGxv
Y2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0
ZXgpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgKHB0
aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X211dGV4YXR0cl9kZXN0cm95IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhy
ZWFkX211dGV4YXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKHB0aHJl
YWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkKICAgICB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0
dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fa2luZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50
IHB0aHJlYWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICpf
X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uZF9hdHRyKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFkX2NvbmRfdCAq
X19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWduYWwgKHB0aHJl
YWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Jy
b2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
cHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9f
bXV0ZXgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAo
cHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jl
c3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0IChwdGhyZWFkX2NvbmRh
dHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rl
c3Ryb3kgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3Qg
KgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp
Y3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfc2V0
cHNoYXJlZCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy
biBpbnQgcHRocmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBf
X3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRf
cndsb2NrYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3kgKHB0
aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf
cndsb2NrX3JkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3
bG9jaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWRyZGxvY2sg
KHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190
ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3cmxv
Y2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBw
dGhyZWFkX3J3bG9ja190aW1lZHdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBf
X3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBz
dHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j
a191bmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19h
dHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95IChw
dGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl
YWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0
cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRy
X3NldHBzaGFyZWQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldGtpbmRfbnAgKF9fY29uc3QgcHRocmVhZF9y
d2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50ICpfX3ByZWYpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2th
dHRyX3NldGtpbmRfbnAgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3ByZWYpIHRocm93ICgpOwojIDUw
OSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9pbml0
IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaywgaW50IF9fcHNoYXJlZCkKICAgICB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9kZXN0cm95IChwdGhyZWFkX3NwaW5sb2NrX3Qg
Kl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fbG9jayAocHRocmVh
ZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGlu
X3RyeWxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfc3Bpbl91bmxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2luaXQgKHB0aHJlYWRfYmFycmll
cl90ICpfX3Jlc3RyaWN0IF9fYmFycmllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB1bnNpZ25lZCBpbnQgX19jb3VudCkgdGhyb3cg
KCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJf
dCAqX19iYXJyaWVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9p
bml0IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50
IHB0aHJlYWRfYmFycmllcmF0dHJfZGVzdHJveSAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX2F0
dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2dldHBzaGFyZWQg
KF9fY29uc3QgcHRocmVhZF9iYXJyaWVyYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cg
KCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9i
YXJyaWVyYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJy
aWVyX3dhaXQgKHB0aHJlYWRfYmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwojIDU1NiAi
L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZSAo
cHRocmVhZF9rZXlfdCAqX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9rZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgpOwoK
CmV4dGVybiB2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5KSB0
aHJvdyAoKTsKIyA1NzYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhy
ZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChpbnQgX19zdGF0ZSwgaW50ICpfX29s
ZHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKGlu
dCBfX3R5cGUsIGludCAqX19vbGR0eXBlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf
Y2FuY2VsIChwdGhyZWFkX3QgX19jYW5jZWx0aHJlYWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZv
aWQgcHRocmVhZF90ZXN0Y2FuY2VsICh2b2lkKSB0aHJvdyAoKTsKIyA2MTAgIi91c3IvaW5jbHVk
ZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoIChzdHJ1Y3Qg
X3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB2
b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIg
Kl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0
ZSkgdGhyb3cgKCk7CiMgNjMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lk
IF9wdGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlciAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVm
ZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkICpfX2FyZykgdGhyb3cgKCk7CiMgNjQyICIvdXNyL2luY2x1ZGUvcHRo
cmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVj
dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBpbnQgcHRocmVhZF9nZXRjcHVjbG9ja2lkIChwdGhyZWFkX3QgX190aHJlYWRfaWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIHRocm93
ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzCiMgMzEgIi91
c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNr
IChpbnQgX19ob3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IF9fc2lnc2V0
X3QgKl9fcmVzdHJpY3QgX19uZXdtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19z
aWdzZXRfdCAqX19yZXN0cmljdCBfX29sZG1hc2spdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2tpbGwgKHB0aHJlYWRfdCBfX3RocmVhZGlkLCBpbnQgX19zaWdubykgdGhyb3cgKCk7CiMg
NjU2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyA2NzEgIi91c3IvaW5jbHVkZS9wdGhy
ZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZv
aWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAodm9pZCkg
dGhyb3cgKCk7Cgp9CiMgMzggIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9n
dGhyLWRlZmF1bHQuaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19ndGhyZWFkX2tleV90
Owp0eXBlZGVmIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7CnR5cGVkZWYgcHRocmVh
ZF9tdXRleF90IF9fZ3RocmVhZF9tdXRleF90OwoKCgoKCgojcHJhZ21hIHdlYWsgcHRocmVhZF9v
bmNlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUKI3ByYWdtYSB3ZWFrIHB0aHJlYWRf
a2V5X2RlbGV0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsg
cHRocmVhZF9zZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9jcmVhdGUKCiNwcmFnbWEg
d2VhayBwdGhyZWFkX211dGV4X2xvY2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3RyeWxv
Y2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3VubG9jayAKIyA4MCAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCnN0YXRpYyBpbmxpbmUg
aW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHN0YXRpYyB2b2lkICpjb25zdCBfX2d0
aHJlYWRfYWN0aXZlX3B0ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0ZTsKICByZXR1cm4gX19n
dGhyZWFkX2FjdGl2ZV9wdHIgIT0gMDsKfQojIDQzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4
Ni1saW51eC9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVh
ZF9vbmNlIChfX2d0aHJlYWRfb25jZV90ICpvbmNlLCB2b2lkICgqZnVuYykgKHZvaWQpKQp7CiAg
aWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX29uY2UgKG9uY2Us
IGZ1bmMpOwogIGVsc2UKICAgIHJldHVybiAtMTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhy
ZWFkX2tleV9jcmVhdGUgKF9fZ3RocmVhZF9rZXlfdCAqa2V5LCB2b2lkICgqZHRvcikgKHZvaWQg
KikpCnsKICByZXR1cm4gcHRocmVhZF9rZXlfY3JlYXRlIChrZXksIGR0b3IpOwp9CgpzdGF0aWMg
aW5saW5lIGludApfX2d0aHJlYWRfa2V5X2R0b3IgKF9fZ3RocmVhZF9rZXlfdCBrZXksIHZvaWQg
KnB0cikKewoKICBpZiAocHRyKQogICAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwg
MCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9r
ZXlfZGVsZXRlIChfX2d0aHJlYWRfa2V5X3Qga2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2Rl
bGV0ZSAoa2V5KTsKfQoKc3RhdGljIGlubGluZSB2b2lkICoKX19ndGhyZWFkX2dldHNwZWNpZmlj
IChfX2d0aHJlYWRfa2V5X3Qga2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMgKGtl
eSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9zZXRzcGVjaWZpYyAoX19ndGhyZWFk
X2tleV90IGtleSwgY29uc3Qgdm9pZCAqcHRyKQp7CiAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lm
aWMgKGtleSwgcHRyKTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X2xvY2sg
KF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkp
CiAgICByZXR1cm4gcHRocmVhZF9tdXRleF9sb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJu
IDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJl
YWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0
dXJuIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9
CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0
ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0
aHJlYWRfbXV0ZXhfdW5sb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KIyA5OSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2d0aHIuaCIgMiAzCiMgMzggIi91
c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFj
ZSBzdGQKewoKICB0eXBlZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0
cmVhbXNpemU7CgogIHR5cGVkZWYgcHRyZGlmZl90IHdzdHJlYW1zaXplOwoKICB0eXBlZGVmIGZw
b3NfdCBfX2Nfc3RyZWFtcG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRleF90IF9fY19sb2Nr
OwoKCiAgdHlwZWRlZiBGSUxFIF9fY19maWxlOwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewog
ICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Rl
YyA9IDB4MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0
OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGlj
IGNvbnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1Nfb2N0ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAw
eDAwODA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAw
OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBz
dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMg
Y29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9f
aW50X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfdW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVy
Y2FzZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxk
ID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfYmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGlj
IGNvbnN0IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19m
YWlsYml0ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgw
MTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMg
Y29uc3QgX19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfaW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgx
MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMg
NDUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9jd2NoYXIiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIi
IDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jdGltZSIgMSAzCiMgNDggIi91c3IvaW5j
bHVkZS9jKysvMy4yL2N0aW1lIiAzCiMgNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N0aW1lIiAz
Cm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6OnRpbWVfdDsKICB1
c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVzaW5nIDo6ZGlmZnRpbWU7CiAgdXNpbmcg
Ojpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5nIDo6YXNjdGltZTsKICB1c2luZyA6OmN0
aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6bG9jYWx0aW1lOwogIHVzaW5nIDo6c3Ry
ZnRpbWU7Cn0KIyA1MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAyIDMKCgojIDEgIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAx
ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRhcmcuaCIgMSAz
CiMgNDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgojIDg4ICIv
dXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKCnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90OwoK
CgojIDExMyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgpzdHJ1Y3Qg
dG07CgoKCgoKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3
Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoK
ZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBz
aXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChfX2NvbnN0IHdj
aGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3Y2hhcl90
ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXAgKF9f
Y29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHdjc25jYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2No
YXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCB3Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19j
b25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBf
X2xvYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IHdjc25jYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJf
dCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg
d2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRo
cm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z
MSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z
Miwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCB3Y3Njb2xsX2wgKF9f
Y29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAg
ICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHdj
c3hmcm1fbCAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoK
ZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hyIChf
X2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2NzcmNociAoX19jb25zdCB3
Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHJudWwgKF9fY29uc3Qgd2No
YXJfdCAqX19zLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9f
d2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9fY29uc3Qgd2No
YXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nzc3RyIChfX2NvbnN0
IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc3Rv
ayAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICB3
Y2hhcl90ICoqX19yZXN0cmljdCBfX3B0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3Ns
ZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlz
dGFjaywgX19jb25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgd2NzbmxlbiAoX19jb25zdCB3Y2hh
cl90ICpfX3MsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hhcl90
ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19zMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3Zl
ICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAg
dGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1zZXQgKHdjaGFyX3QgKl9fcywgd2NoYXJf
dCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtcGNw
eSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gd2ludF90IGJ0b3djIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCB3Y3RvYiAod2ludF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgbWJzaW5pdCAo
X19jb25zdCBtYnN0YXRlX3QgKl9fcHMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCgpleHRlcm4gc2l6ZV90IG1icnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2Ms
CiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6
ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJfdCBf
X3djLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0
aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IF9fbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9f
cmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgbWJz
dGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKIyAzMjQgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAzCgoKCmV4dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmlj
dCBfX3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90
ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAo
Y2hhciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVf
dCBfX25tYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4sIG1ic3RhdGVf
dCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJz
IChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWJz
dGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHdjd2lk
dGggKHdjaGFyX3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAoX19jb25z
dCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91Ymxl
IHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgp
OwpleHRlcm4gbG9uZyBkb3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hh
cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVy
biB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lv
bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lv
bl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNp
b25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9u
X18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQ0MyAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDMKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHdjc3Rv
dWxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19s
b2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xs
X2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg
KCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxs
X2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xv
Y2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB3Y3N0b2RfbCAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhy
b3cgKCk7CgpleHRlcm4gZmxvYXQgd2NzdG9mX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3Vi
bGUgd2NzdG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4g
ZmxvYXQgX193Y3N0b2ZfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUg
X193Y3N0b2xkX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
Z3JvdXApIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoK
CmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3djc3RvdWxfaW50ZXJuYWwgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX25wdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0
aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxf
aW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg
aW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3Y2hhcl90ICoqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKIyA1NjMg
Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3Qg
Kl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hh
cl90ICp3Y3BuY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNp
emVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBmd2lkZSAoX19GSUxF
ICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmd3ByaW50ZiAoX19G
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4g
aW50IHdwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQog
ICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2Zndw
cmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBf
X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3cHJpbnRm
IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZz
d3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAg
ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKCmV4
dGVybiBpbnQgZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAg
IHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3c2NhbmYgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCgoK
CgoKCmV4dGVybiBpbnQgdmZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAg
ICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0
ZXJuIGludCB2d3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAg
ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoK
ZXh0ZXJuIGludCB2c3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7
CgoKCgoKCgpleHRlcm4gd2ludF90IGZnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CmV4dGVybiB3aW50X3QgZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVy
biB3aW50X3QgZ2V0d2NoYXIgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IGZwdXR3
YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRf
dCBwdXR3YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl
cm4gd2ludF90IHB1dHdjaGFyICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdj
aGFyX3QgKmZnZXR3cyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAg
ICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgZnB1dHdzIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywKICAg
ICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
CmV4dGVybiB3aW50X3QgdW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gd2ludF90IGdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBmZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgZnB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2Ms
IF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHB1dHdjX3VubG9j
a2VkICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2lu
dF90IHB1dHdjaGFyX3VubG9ja2VkICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4g
d2NoYXJfdCAqZmdldHdzX3VubG9ja2VkICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBf
X24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmcHV0d3NfdW5sb2NrZWQgKF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19G
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBzaXplX3Qg
d2NzZnRpbWUgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQs
CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9f
dHApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NmdGltZV9sICh3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKIyA3MzcgIi91c3IvaW5j
bHVkZS93Y2hhci5oIiAzCn0KIyA1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAyIDMK
IyA2OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAzCm5hbWVzcGFjZSBzdGQKewogIHVz
aW5nIDo6bWJzdGF0ZV90Owp9CiMgMTMzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDMK
bmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVzaW5nIDo6YnRvd2M7CiAgdXNp
bmcgOjpmZ2V0d2M7CiAgdXNpbmcgOjpmZ2V0d3M7CiAgdXNpbmcgOjpmcHV0d2M7CiAgdXNpbmcg
OjpmcHV0d3M7CiAgdXNpbmcgOjpmd2lkZTsKICB1c2luZyA6OmZ3cHJpbnRmOwogIHVzaW5nIDo6
ZndzY2FuZjsKICB1c2luZyA6OmdldHdjOwogIHVzaW5nIDo6Z2V0d2NoYXI7CiAgdXNpbmcgOjpt
YnJsZW47CiAgdXNpbmcgOjptYnJ0b3djOwogIHVzaW5nIDo6bWJzaW5pdDsKICB1c2luZyA6Om1i
c3J0b3djczsKICB1c2luZyA6OnB1dHdjOwogIHVzaW5nIDo6cHV0d2NoYXI7CiAgdXNpbmcgOjpz
d3ByaW50ZjsKICB1c2luZyA6OnN3c2NhbmY7CiAgdXNpbmcgOjp1bmdldHdjOwogIHVzaW5nIDo6
dmZ3cHJpbnRmOwogIHVzaW5nIDo6dmZ3c2NhbmY7CiAgdXNpbmcgOjp2c3dwcmludGY7CiAgdXNp
bmcgOjp2c3dzY2FuZjsKICB1c2luZyA6OnZ3cHJpbnRmOwogIHVzaW5nIDo6dndzY2FuZjsKICB1
c2luZyA6OndjcnRvbWI7CiAgdXNpbmcgOjp3Y3NjYXQ7CiAgdXNpbmcgOjp3Y3NjbXA7CiAgdXNp
bmcgOjp3Y3Njb2xsOwogIHVzaW5nIDo6d2NzY3B5OwogIHVzaW5nIDo6d2NzY3NwbjsKICB1c2lu
ZyA6Ondjc2Z0aW1lOwogIHVzaW5nIDo6d2NzbGVuOwogIHVzaW5nIDo6d2NzbmNhdDsKICB1c2lu
ZyA6Ondjc25jbXA7CiAgdXNpbmcgOjp3Y3NuY3B5OwogIHVzaW5nIDo6d2NzcnRvbWJzOwogIHVz
aW5nIDo6d2Nzc3BuOwogIHVzaW5nIDo6d2NzdG9kOwogIHVzaW5nIDo6d2NzdG9mOwogIHVzaW5n
IDo6d2NzdG9rOwogIHVzaW5nIDo6d2NzdG9sOwogIHVzaW5nIDo6d2NzdG91bDsKICB1c2luZyA6
Ondjc3hmcm07CiAgdXNpbmcgOjp3Y3RvYjsKICB1c2luZyA6OndtZW1jbXA7CiAgdXNpbmcgOjp3
bWVtY3B5OwogIHVzaW5nIDo6d21lbW1vdmU7CiAgdXNpbmcgOjp3bWVtc2V0OwogIHVzaW5nIDo6
d3ByaW50ZjsKICB1c2luZyA6OndzY2FuZjsKCiAgdXNpbmcgOjp3Y3NjaHI7CgogIGlubGluZSB3
Y2hhcl90KgogIHdjc2Nocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdj
c2Nocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6
d2NzcGJyazsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcGJyayh3Y2hhcl90KiBfX3MxLCB3Y2hh
cl90KiBfX3MyKQogIHsgcmV0dXJuIHdjc3BicmsoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4o
X19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6d2NzcmNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAg
d2NzcmNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc3JjaHIoY29u
c3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2luZyA6Ondjc3N0cjsK
CiAgaW5saW5lIHdjaGFyX3QqCiAgd2Nzc3RyKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIp
CiAgeyByZXR1cm4gd2Nzc3RyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3My
KTsgfQoKICB1c2luZyA6OndtZW1jaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdtZW1jaHIod2No
YXJfdCogX19wLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiB3bWVtY2hyKGNv
bnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYywgX19uKTsgfQp9CgoKCgoKCgpuYW1l
c3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6Ondjc3RvbGQ7CiAgdXNpbmcgOjp3Y3N0b2xsOwog
IHVzaW5nIDo6d2NzdG91bGw7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6
d2NzdG9sZDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvbGw7CiAgdXNpbmcgX19nbnVfY3h4Ojp3
Y3N0b3VsbDsKfQojIDQ2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMiAzCgpu
YW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3Mg
ZnBvcwogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlw
ZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1vZmYgX01fb2ZmOwogICAgICBfX3N0YXRlX3R5
cGUgX01fc3Q7CgogICAgcHVibGljOgogICAgICBfX3N0YXRlX3R5cGUKICAgICAgc3RhdGUoKSBj
b25zdCB7IHJldHVybiBfTV9zdDsgfQoKICAgICAgdm9pZAogICAgICBzdGF0ZShfX3N0YXRlX3R5
cGUgX19zdCkgeyBfTV9zdCA9IF9fc3Q7IH0KCgoKICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFt
b2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5cGUoKSkgeyB9CgogICAgICBmcG9zKHN0cmVhbW9mZiBf
X29mZiwgX19zdGF0ZV90eXBlIF9fc3QgPSBfX3N0YXRlX3R5cGUoKSkKICAgICAgOiBfTV9vZmYo
X19vZmYpLCBfTV9zdChfX3N0KSB7IH0KCiAgICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0
IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3IrPShzdHJlYW1v
ZmYgX19vZmYpIHsgX01fb2ZmICs9IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3Mm
CiAgICAgIG9wZXJhdG9yLT0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiAtPSBfX29mZjsgcmV0
dXJuICp0aGlzOyB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYp
CiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190ICs9IF9fb2ZmOwog
ICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3ItKHN0
cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBf
X3QgLT0gX19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgYm9vbAogICAg
ICBvcGVyYXRvcj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9v
ZmYgPT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3Qg
ZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiAhPSBfX3Bvcy5fTV9vZmY7
IH0KCiAgICAgIHN0cmVhbW9mZgogICAgICBfTV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9N
X29mZjsgfQoKICAgICAgdm9pZAogICAgICBfTV9wb3NpdGlvbihzdHJlYW1vZmYgX19vZmYpIHsg
X01fb2ZmID0gX19vZmY7IH0KICAgIH07CgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJl
YW1wb3M7CgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHdzdHJlYW1wb3M7Cgp9CiMgNDcgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9m
dW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uX2RlZmlu
ZXMuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lk
KTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93
X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAg
dm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f
dGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2lu
dmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3Ro
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv
aWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAog
IF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDQ4ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9pb3Nmd2QiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBj
bGFzcyBiYXNpY19pb3M7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xh
c3MgYmFzaWNfb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp
dHM8X0NoYXJUPiwKICAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFy
VD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5
cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJp
bmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2Nh
dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwK
ICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFz
cyBiYXNpY19zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1
ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAg
ICBjbGFzcyBiYXNpY19vZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19mc3Ry
ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
VD4gPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsKCgoKICBjbGFzcyBpb3NfYmFzZTsK
CgogIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXI+IGlvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1
ZjxjaGFyPiBzdHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07
CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19p
b3N0cmVhbTxjaGFyPiBpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBz
dHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJl
YW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJpbmdzdHJlYW07CiAg
dHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYg
YmFzaWNfZmlsZWJ1ZjxjaGFyPiBmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hh
cj4gaWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsKICB0
eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsKCgogIHR5cGVkZWYgYmFzaWNfaW9z
PHdjaGFyX3Q+IHdpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVh
bWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRl
ZiBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+IHdvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJl
YW08d2NoYXJfdD4gd2lvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+
IHdzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3Ry
aW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmlu
Z3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3Ry
ZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVm
IGJhc2ljX2lmc3RyZWFtPHdjaGFyX3Q+IHdpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3Ry
ZWFtPHdjaGFyX3Q+IHdvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4g
d2ZzdHJlYW07Cgp9CiMgNDUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBj
bGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0K
ICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoKICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDog
cHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3co
KSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7CiAgfTsKCgogIHR5
cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKCiAgdHlwZWRlZiB2b2lkICgqdW5l
eHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUo
dGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmli
dXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBl
Y3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHVuZXhwZWN0ZWQoKSBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMgOTggIi91c3IvaW5jbHVkZS9jKysvMy4y
L2V4Y2VwdGlvbiIgMwogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgdGhyb3coKTsKfQoKbmFt
ZXNwYWNlIF9fZ251X2N4eAp7CiMgMTExICIvdXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb24i
IDMKICB2b2lkIF9fdmVyYm9zZV90ZXJtaW5hdGVfaGFuZGxlciAoKTsKfQoKfQojIDQ2ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9pb3MiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
Y2hhcl90cmFpdHMuaCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY2hhcl90
cmFpdHMuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAxIDMKIyA0OCAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0cmluZyIgMwojIDc3ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9jc3RyaW5nIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWVtY3B5OwogIHVzaW5nIDo6
bWVtbW92ZTsKICB1c2luZyA6OnN0cmNweTsKICB1c2luZyA6OnN0cm5jcHk7CiAgdXNpbmcgOjpz
dHJjYXQ7CiAgdXNpbmcgOjpzdHJuY2F0OwogIHVzaW5nIDo6bWVtY21wOwogIHVzaW5nIDo6c3Ry
Y21wOwogIHVzaW5nIDo6c3RyY29sbDsKICB1c2luZyA6OnN0cm5jbXA7CiAgdXNpbmcgOjpzdHJ4
ZnJtOwogIHVzaW5nIDo6c3RyY3NwbjsKICB1c2luZyA6OnN0cnNwbjsKICB1c2luZyA6OnN0cnRv
azsKICB1c2luZyA6Om1lbXNldDsKICB1c2luZyA6OnN0cmVycm9yOwogIHVzaW5nIDo6c3RybGVu
OwoKICB1c2luZyA6Om1lbWNocjsKCiAgaW5saW5lIHZvaWQqCiAgbWVtY2hyKHZvaWQqIF9fcCwg
aW50IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB2
b2lkKj4oX19wKSwgX19jLCBfX24pOyB9CgogIHVzaW5nIDo6c3RyY2hyOwoKICBpbmxpbmUgY2hh
cioKICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3Ry
Y2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3Ry
cGJyazsKCiAgaW5saW5lIGNoYXIqCiAgc3RycGJyayhjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBf
X3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJrKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+
KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OnN0cnJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0
cnJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycmNocihj
b25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnN0cjsK
CiAgaW5saW5lIGNoYXIqCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAg
eyByZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwg
X19zMik7IH0KfQojIDQ2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NoYXJfdHJhaXRzLmgi
IDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0
cnVjdCBjaGFyX3RyYWl0cwogICAgewogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7Cgog
ICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFt
cG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlw
ZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2ln
bihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMg
Ym9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19j
Mik7CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNv
bnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29u
c3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOwoK
ICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpOwoK
ICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUq
IF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpOwoKICAgICAgc3RhdGljIGNo
YXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19z
Miwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJf
dHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAgIHN0
YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwg
Y2hhcl90eXBlIF9fYSk7CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlw
ZShjb25zdCBpbnRfdHlwZSYgX19jKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19p
bnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMgYm9vbAogICAgICBl
cV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpOwoK
ICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpOwoKICAgICAgc3RhdGljIGludF90eXBl
CiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYyk7CiAgICB9OwoKCgogIHRlbXBsYXRl
PD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAgewogICAgICB0eXBlZGVmIGNoYXIg
Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJl
YW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0
eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNz
aWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEg
PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9f
YzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9
CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0
IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0
YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJf
dHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gbWVtY21wKF9fczEsIF9fczIs
IF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlw
ZSogX19zKQogICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0
IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwg
Y29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGNo
YXJfdHlwZSo+KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5
cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp
emVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbW1vdmUo
X19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHko
Y2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbWNweShfX3MxLCBfX3MyLCBfX24p
KTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19z
LCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxj
aGFyX3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90
eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoKICAgICAgc3RhdGljIGludF90eXBl
CiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7IH0K
CiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2Mx
LCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9Cgog
ICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
X3R5cGU+KCgtMSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25z
dCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiAoX19jID09IGVvZigpKSA/IDAgOiBfX2M7
IH0KICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90Pgog
ICAgewogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdpbnRf
dCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVk
ZWYgd3N0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlw
ZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0
IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJv
b2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIp
CiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAg
bHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg
cmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29u
c3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAg
ICAgIHsgcmV0dXJuIHdtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIHNp
emVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJuIHdj
c2xlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNv
bnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAg
ICAgeyByZXR1cm4gd21lbWNocihfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJf
dHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwg
aW50X3R5cGUgX19uKQogICAgICB7IHJldHVybiB3bWVtbW92ZShfX3MxLCBfX3MyLCBfX24pOyB9
CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29u
c3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiB3bWVtY3B5KF9f
czEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihj
aGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4g
d21lbXNldChfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0
b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7
IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5
cGUmIF9fYykgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAg
ICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2My
KQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQog
ICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKDB4ZmZmZmZmZmZ1KSk7
IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBf
X2MpCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkpID8gMCA6IF9fYzsgfQog
IH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBz
dHJ1Y3QgX0NoYXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFyVCBfTV9jOwogICAgICBf
Q2hhcl90cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2MpIHsgfQoKICAg
ICAgYm9vbAogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVybiBfVHJh
aXRzOjplcShfTV9jLCBfX2EpOyB9CiAgICB9Owp9CiMgNDcgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2lvcyIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDEg
MwojIDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAzCgoKIyAxICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDEgMwojIDM2
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbG9jYWxlIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvY2xvY2FsZSIgMwoKIyAxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDEgMwojIDI5ICIv
dXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv
My4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1
ZGUvYml0cy9sb2NhbGUuaCIgMwplbnVtCnsKICBfX0xDX0NUWVBFID0gMCwKICBfX0xDX05VTUVS
SUMgPSAxLAogIF9fTENfVElNRSA9IDIsCiAgX19MQ19DT0xMQVRFID0gMywKICBfX0xDX01PTkVU
QVJZID0gNCwKICBfX0xDX01FU1NBR0VTID0gNSwKICBfX0xDX0FMTCA9IDYsCiAgX19MQ19QQVBF
UiA9IDcsCiAgX19MQ19OQU1FID0gOCwKICBfX0xDX0FERFJFU1MgPSA5LAogIF9fTENfVEVMRVBI
T05FID0gMTAsCiAgX19MQ19NRUFTVVJFTUVOVCA9IDExLAogIF9fTENfSURFTlRJRklDQVRJT04g
PSAxMgp9OwojIDMxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMg
NTIgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwpzdHJ1Y3QgbGNvbnYKewoKCiAgY2hhciAqZGVj
aW1hbF9wb2ludDsKICBjaGFyICp0aG91c2FuZHNfc2VwOwoKCgoKCiAgY2hhciAqZ3JvdXBpbmc7
CgoKCgoKICBjaGFyICppbnRfY3Vycl9zeW1ib2w7CiAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwog
IGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogIGNoYXIgKm1vbl90aG91c2FuZHNfc2VwOwogIGNo
YXIgKm1vbl9ncm91cGluZzsKICBjaGFyICpwb3NpdGl2ZV9zaWduOwogIGNoYXIgKm5lZ2F0aXZl
X3NpZ247CiAgY2hhciBpbnRfZnJhY19kaWdpdHM7CiAgY2hhciBmcmFjX2RpZ2l0czsKCiAgY2hh
ciBwX2NzX3ByZWNlZGVzOwoKICBjaGFyIHBfc2VwX2J5X3NwYWNlOwoKICBjaGFyIG5fY3NfcHJl
Y2VkZXM7CgogIGNoYXIgbl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAgY2hhciBwX3NpZ25fcG9zbjsK
ICBjaGFyIG5fc2lnbl9wb3NuOwoKCiAgY2hhciBpbnRfcF9jc19wcmVjZWRlczsKCiAgY2hhciBp
bnRfcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgaW50X25fY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50
X25fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgaW50X3Bfc2lnbl9wb3NuOwogIGNoYXIgaW50
X25fc2lnbl9wb3NuOwojIDExOSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCn07CgoKCgoKZXh0
ZXJuIGNoYXIgKnNldGxvY2FsZSAoaW50IF9fY2F0ZWdvcnksIF9fY29uc3QgY2hhciAqX19sb2Nh
bGUpIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2FsZWNvbnYgKHZvaWQpIHRo
cm93ICgpOwoKCiMgMTQ4ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKdHlwZWRlZiBfX2xvY2Fs
ZV90IGxvY2FsZV90OwoKCgoKCmV4dGVybiBfX2xvY2FsZV90IG5ld2xvY2FsZSAoaW50IF9fY2F0
ZWdvcnlfbWFzaywgX19jb25zdCBjaGFyICpfX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xvY2FsZV90IF9fYmFzZSkgdGhyb3cgKCk7CiMgMTg5ICIvdXNyL2luY2x1ZGUv
bG9jYWxlLmgiIDMKZXh0ZXJuIF9fbG9jYWxlX3QgZHVwbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0
YXNldCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19k
YXRhc2V0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fbG9jYWxlX3QgdXNlbG9jYWxlIChfX2xv
Y2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCgoKCgp9CiMgNTAgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2Nsb2NhbGUiIDIgMwoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bGNvbnY7
CiAgdXNpbmcgOjpzZXRsb2NhbGU7CiAgdXNpbmcgOjpsb2NhbGVjb252Owp9CiMgMzcgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2xhbmdpbmZvLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9ubF90eXBlcy5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL25s
X3R5cGVzLmgiIDMKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZiB2b2lkICpubF9jYXRkOwoKCnR5cGVk
ZWYgaW50IG5sX2l0ZW07CgoKZXh0ZXJuIG5sX2NhdGQgY2F0b3BlbiAoX19jb25zdCBjaGFyICpf
X2NhdF9uYW1lLCBpbnQgX19mbGFnKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmNhdGdldHMg
KG5sX2NhdGQgX19jYXRhbG9nLCBpbnQgX19zZXQsIGludCBfX251bWJlciwKICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
Y2F0Y2xvc2UgKG5sX2NhdGQgX19jYXRhbG9nKSB0aHJvdyAoKTsKCn0KIyAyNSAiL3Vzci9pbmNs
dWRlL2xhbmdpbmZvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAz
CiMgMjcgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA0MyAi
L3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMKZW51bQp7CgoKCiAgQUJEQVlfMSA9ICgoKF9fTENf
VElNRSkgPDwgMTYpIHwgKDApKSwKCiAgQUJEQVlfMiwKCiAgQUJEQVlfMywKCiAgQUJEQVlfNCwK
CiAgQUJEQVlfNSwKCiAgQUJEQVlfNiwKCiAgQUJEQVlfNywKCgoKICBEQVlfMSwKCiAgREFZXzIs
CgogIERBWV8zLAoKICBEQVlfNCwKCiAgREFZXzUsCgogIERBWV82LAoKICBEQVlfNywKCgoKICBB
Qk1PTl8xLAoKICBBQk1PTl8yLAoKICBBQk1PTl8zLAoKICBBQk1PTl80LAoKICBBQk1PTl81LAoK
ICBBQk1PTl82LAoKICBBQk1PTl83LAoKICBBQk1PTl84LAoKICBBQk1PTl85LAoKICBBQk1PTl8x
MCwKCiAgQUJNT05fMTEsCgogIEFCTU9OXzEyLAoKCgogIE1PTl8xLAoKICBNT05fMiwKCiAgTU9O
XzMsCgogIE1PTl80LAoKICBNT05fNSwKCiAgTU9OXzYsCgogIE1PTl83LAoKICBNT05fOCwKCiAg
TU9OXzksCgogIE1PTl8xMCwKCiAgTU9OXzExLAoKICBNT05fMTIsCgoKICBBTV9TVFIsCgogIFBN
X1NUUiwKCgogIERfVF9GTVQsCgogIERfRk1ULAoKICBUX0ZNVCwKCiAgVF9GTVRfQU1QTSwKCgog
IEVSQSwKCiAgX19FUkFfWUVBUiwKCgoKICBFUkFfRF9GTVQsCgogIEFMVF9ESUdJVFMsCgogIEVS
QV9EX1RfRk1ULAoKICBFUkFfVF9GTVQsCgoKICBfTkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsCiAg
X05MX1RJTUVfRVJBX0VOVFJJRVMsCgogIF9OTF9XQUJEQVlfMSwKICBfTkxfV0FCREFZXzIsCiAg
X05MX1dBQkRBWV8zLAogIF9OTF9XQUJEQVlfNCwKICBfTkxfV0FCREFZXzUsCiAgX05MX1dBQkRB
WV82LAogIF9OTF9XQUJEQVlfNywKCgogIF9OTF9XREFZXzEsCiAgX05MX1dEQVlfMiwKICBfTkxf
V0RBWV8zLAogIF9OTF9XREFZXzQsCiAgX05MX1dEQVlfNSwKICBfTkxfV0RBWV82LAogIF9OTF9X
REFZXzcsCgoKICBfTkxfV0FCTU9OXzEsCiAgX05MX1dBQk1PTl8yLAogIF9OTF9XQUJNT05fMywK
ICBfTkxfV0FCTU9OXzQsCiAgX05MX1dBQk1PTl81LAogIF9OTF9XQUJNT05fNiwKICBfTkxfV0FC
TU9OXzcsCiAgX05MX1dBQk1PTl84LAogIF9OTF9XQUJNT05fOSwKICBfTkxfV0FCTU9OXzEwLAog
IF9OTF9XQUJNT05fMTEsCiAgX05MX1dBQk1PTl8xMiwKCgogIF9OTF9XTU9OXzEsCiAgX05MX1dN
T05fMiwKICBfTkxfV01PTl8zLAogIF9OTF9XTU9OXzQsCiAgX05MX1dNT05fNSwKICBfTkxfV01P
Tl82LAogIF9OTF9XTU9OXzcsCiAgX05MX1dNT05fOCwKICBfTkxfV01PTl85LAogIF9OTF9XTU9O
XzEwLAogIF9OTF9XTU9OXzExLAogIF9OTF9XTU9OXzEyLAoKICBfTkxfV0FNX1NUUiwKICBfTkxf
V1BNX1NUUiwKCiAgX05MX1dEX1RfRk1ULAogIF9OTF9XRF9GTVQsCiAgX05MX1dUX0ZNVCwKICBf
TkxfV1RfRk1UX0FNUE0sCgogIF9OTF9XRVJBX1lFQVIsCiAgX05MX1dFUkFfRF9GTVQsCiAgX05M
X1dBTFRfRElHSVRTLAogIF9OTF9XRVJBX0RfVF9GTVQsCiAgX05MX1dFUkFfVF9GTVQsCgogIF9O
TF9USU1FX1dFRUtfTkRBWVMsCiAgX05MX1RJTUVfV0VFS18xU1REQVksCiAgX05MX1RJTUVfV0VF
S18xU1RXRUVLLAogIF9OTF9USU1FX0ZJUlNUX1dFRUtEQVksCiAgX05MX1RJTUVfRklSU1RfV09S
S0RBWSwKICBfTkxfVElNRV9DQUxfRElSRUNUSU9OLAogIF9OTF9USU1FX1RJTUVaT05FLAoKICBf
REFURV9GTVQsCgogIF9OTF9XX0RBVEVfRk1ULAoKICBfTkxfVElNRV9DT0RFU0VULAoKICBfTkxf
TlVNX0xDX1RJTUUsCgoKCgogIF9OTF9DT0xMQVRFX05SVUxFUyA9ICgoKF9fTENfQ09MTEFURSkg
PDwgMTYpIHwgKDApKSwKICBfTkxfQ09MTEFURV9SVUxFU0VUUywKICBfTkxfQ09MTEFURV9UQUJM
RU1CLAogIF9OTF9DT0xMQVRFX1dFSUdIVE1CLAogIF9OTF9DT0xMQVRFX0VYVFJBTUIsCiAgX05M
X0NPTExBVEVfSU5ESVJFQ1RNQiwKICBfTkxfQ09MTEFURV9HQVAxLAogIF9OTF9DT0xMQVRFX0dB
UDIsCiAgX05MX0NPTExBVEVfR0FQMywKICBfTkxfQ09MTEFURV9UQUJMRVdDLAogIF9OTF9DT0xM
QVRFX1dFSUdIVFdDLAogIF9OTF9DT0xMQVRFX0VYVFJBV0MsCiAgX05MX0NPTExBVEVfSU5ESVJF
Q1RXQywKICBfTkxfQ09MTEFURV9TWU1CX0hBU0hfU0laRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJf
VEFCTEVNQiwKICBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfQ09MTFNF
UU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFXQywKICBfTkxfQ09MTEFURV9DT0RFU0VULAogIF9O
TF9OVU1fTENfQ09MTEFURSwKCgoKCiAgX05MX0NUWVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkg
PDwgMTYpIHwgKDApKSwKICBfTkxfQ1RZUEVfVE9VUFBFUiwKICBfTkxfQ1RZUEVfR0FQMSwKICBf
TkxfQ1RZUEVfVE9MT1dFUiwKICBfTkxfQ1RZUEVfR0FQMiwKICBfTkxfQ1RZUEVfQ0xBU1MzMiwK
ICBfTkxfQ1RZUEVfR0FQMywKICBfTkxfQ1RZUEVfR0FQNCwKICBfTkxfQ1RZUEVfR0FQNSwKICBf
TkxfQ1RZUEVfR0FQNiwKICBfTkxfQ1RZUEVfQ0xBU1NfTkFNRVMsCiAgX05MX0NUWVBFX01BUF9O
QU1FUywKICBfTkxfQ1RZUEVfV0lEVEgsCiAgX05MX0NUWVBFX01CX0NVUl9NQVgsCiAgX05MX0NU
WVBFX0NPREVTRVRfTkFNRSwKICBDT0RFU0VUID0gX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKCiAg
X05MX0NUWVBFX1RPVVBQRVIzMiwKICBfTkxfQ1RZUEVfVE9MT1dFUjMyLAogIF9OTF9DVFlQRV9D
TEFTU19PRkZTRVQsCiAgX05MX0NUWVBFX01BUF9PRkZTRVQsCiAgX05MX0NUWVBFX0lORElHSVRT
X01CX0xFTiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMwX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFf
TUIsCiAgX05MX0NUWVBFX0lORElHSVRTMl9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX01CLAog
IF9OTF9DVFlQRV9JTkRJR0lUUzRfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNV9NQiwKICBfTkxf
Q1RZUEVfSU5ESUdJVFM2X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzdfTUIsCiAgX05MX0NUWVBF
X0lORElHSVRTOF9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM5X01CLAogIF9OTF9DVFlQRV9JTkRJ
R0lUU19XQ19MRU4sCiAgX05MX0NUWVBFX0lORElHSVRTMF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJ
VFMxX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzJfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTM19X
QywKICBfTkxfQ1RZUEVfSU5ESUdJVFM0X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfV0MsCiAg
X05MX0NUWVBFX0lORElHSVRTNl9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM3X1dDLAogIF9OTF9D
VFlQRV9JTkRJR0lUUzhfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTOV9XQywKICBfTkxfQ1RZUEVf
T1VURElHSVQwX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDFfTUIsCiAgX05MX0NUWVBFX09VVERJ
R0lUMl9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQzX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDRf
TUIsCiAgX05MX0NUWVBFX09VVERJR0lUNV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ2X01CLAog
IF9OTF9DVFlQRV9PVVRESUdJVDdfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUOF9NQiwKICBfTkxf
Q1RZUEVfT1VURElHSVQ5X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDBfV0MsCiAgX05MX0NUWVBF
X09VVERJR0lUMV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQyX1dDLAogIF9OTF9DVFlQRV9PVVRE
SUdJVDNfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUNF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ1
X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDZfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUN19XQywK
ICBfTkxfQ1RZUEVfT1VURElHSVQ4X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDlfV0MsCiAgX05M
X0NUWVBFX1RSQU5TTElUX1RBQl9TSVpFLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCwK
ICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9UQkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lE
WCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZB
VUxUX01JU1NJTkdfTEVOLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcsCiAg
X05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRV9MRU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9S
RSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8yLAogIF9O
TF9DVFlQRV9FWFRSQV9NQVBfMywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzQsCiAgX05MX0NUWVBF
X0VYVFJBX01BUF81LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNiwKICBfTkxfQ1RZUEVfRVhUUkFf
TUFQXzcsCiAgX05MX0NUWVBFX0VYVFJBX01BUF84LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOSwK
ICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEwLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTEsCiAgX05M
X0NUWVBFX0VYVFJBX01BUF8xMiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEzLAogIF9OTF9DVFlQ
RV9FWFRSQV9NQVBfMTQsCiAgX05MX05VTV9MQ19DVFlQRSwKCgoKCiAgX19JTlRfQ1VSUl9TWU1C
T0wgPSAoKChfX0xDX01PTkVUQVJZKSA8PCAxNikgfCAoMCkpLAoKCgogIF9fQ1VSUkVOQ1lfU1lN
Qk9MLAoKCgogIF9fTU9OX0RFQ0lNQUxfUE9JTlQsCgoKCiAgX19NT05fVEhPVVNBTkRTX1NFUCwK
CgoKICBfX01PTl9HUk9VUElORywKCgoKICBfX1BPU0lUSVZFX1NJR04sCgoKCiAgX19ORUdBVElW
RV9TSUdOLAoKCgogIF9fSU5UX0ZSQUNfRElHSVRTLAoKCgogIF9fRlJBQ19ESUdJVFMsCgoKCiAg
X19QX0NTX1BSRUNFREVTLAoKCgogIF9fUF9TRVBfQllfU1BBQ0UsCgoKCiAgX19OX0NTX1BSRUNF
REVTLAoKCgogIF9fTl9TRVBfQllfU1BBQ0UsCgoKCiAgX19QX1NJR05fUE9TTiwKCgoKICBfX05f
U0lHTl9QT1NOLAoKCgogIF9OTF9NT05FVEFSWV9DUk5DWVNUUiwKCiAgX19JTlRfUF9DU19QUkVD
RURFUywKCgoKICBfX0lOVF9QX1NFUF9CWV9TUEFDRSwKCgoKICBfX0lOVF9OX0NTX1BSRUNFREVT
LAoKCgogIF9fSU5UX05fU0VQX0JZX1NQQUNFLAoKCgogIF9fSU5UX1BfU0lHTl9QT1NOLAoKCgog
IF9fSU5UX05fU0lHTl9QT1NOLAoKCgogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9M
LAogIF9OTF9NT05FVEFSWV9EVU9fQ1VSUkVOQ1lfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9f
SU5UX0ZSQUNfRElHSVRTLAogIF9OTF9NT05FVEFSWV9EVU9fRlJBQ19ESUdJVFMsCiAgX05MX01P
TkVUQVJZX0RVT19QX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TRVBfQllfU1BB
Q0UsCiAgX05MX01PTkVUQVJZX0RVT19OX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9f
Tl9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9DU19QUkVDRURFUywKICBf
TkxfTU9ORVRBUllfRFVPX0lOVF9QX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lO
VF9OX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0VQX0JZX1NQQUNFLAog
IF9OTF9NT05FVEFSWV9EVU9fUF9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19OX1NJR05f
UE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllf
RFVPX0lOVF9OX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX0ZST00sCiAgX05M
X01PTkVUQVJZX1VOT19WQUxJRF9UTywKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX0ZST00sCiAg
X05MX01PTkVUQVJZX0RVT19WQUxJRF9UTywKICBfTkxfTU9ORVRBUllfQ09OVkVSU0lPTl9SQVRF
LAogIF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLAogIF9OTF9NT05FVEFSWV9USE9VU0FO
RFNfU0VQX1dDLAogIF9OTF9NT05FVEFSWV9DT0RFU0VULAogIF9OTF9OVU1fTENfTU9ORVRBUlks
CgoKCiAgX19ERUNJTUFMX1BPSU5UID0gKCgoX19MQ19OVU1FUklDKSA8PCAxNikgfCAoMCkpLAoK
CgogIFJBRElYQ0hBUiA9IF9fREVDSU1BTF9QT0lOVCwKCiAgX19USE9VU0FORFNfU0VQLAoKCgog
IFRIT1VTRVAgPSBfX1RIT1VTQU5EU19TRVAsCgogIF9fR1JPVVBJTkcsCgoKCiAgX05MX05VTUVS
SUNfREVDSU1BTF9QT0lOVF9XQywKICBfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLAogIF9O
TF9OVU1FUklDX0NPREVTRVQsCiAgX05MX05VTV9MQ19OVU1FUklDLAoKICBfX1lFU0VYUFIgPSAo
KChfX0xDX01FU1NBR0VTKSA8PCAxNikgfCAoMCkpLAoKICBfX05PRVhQUiwKCiAgX19ZRVNTVFIs
CgoKCiAgX19OT1NUUiwKCgoKICBfTkxfTUVTU0FHRVNfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01F
U1NBR0VTLAoKICBfTkxfUEFQRVJfSEVJR0hUID0gKCgoX19MQ19QQVBFUikgPDwgMTYpIHwgKDAp
KSwKICBfTkxfUEFQRVJfV0lEVEgsCiAgX05MX1BBUEVSX0NPREVTRVQsCiAgX05MX05VTV9MQ19Q
QVBFUiwKCiAgX05MX05BTUVfTkFNRV9GTVQgPSAoKChfX0xDX05BTUUpIDw8IDE2KSB8ICgwKSks
CiAgX05MX05BTUVfTkFNRV9HRU4sCiAgX05MX05BTUVfTkFNRV9NUiwKICBfTkxfTkFNRV9OQU1F
X01SUywKICBfTkxfTkFNRV9OQU1FX01JU1MsCiAgX05MX05BTUVfTkFNRV9NUywKICBfTkxfTkFN
RV9DT0RFU0VULAogIF9OTF9OVU1fTENfTkFNRSwKCiAgX05MX0FERFJFU1NfUE9TVEFMX0ZNVCA9
ICgoKF9fTENfQUREUkVTUykgPDwgMTYpIHwgKDApKSwKICBfTkxfQUREUkVTU19DT1VOVFJZX05B
TUUsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9QT1NULAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIy
LAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIzLAogIF9OTF9BRERSRVNTX0NPVU5UUllfQ0FSLAog
IF9OTF9BRERSRVNTX0NPVU5UUllfTlVNLAogIF9OTF9BRERSRVNTX0NPVU5UUllfSVNCTiwKICBf
TkxfQUREUkVTU19MQU5HX05BTUUsCiAgX05MX0FERFJFU1NfTEFOR19BQiwKICBfTkxfQUREUkVT
U19MQU5HX1RFUk0sCiAgX05MX0FERFJFU1NfTEFOR19MSUIsCiAgX05MX0FERFJFU1NfQ09ERVNF
VCwKICBfTkxfTlVNX0xDX0FERFJFU1MsCgogIF9OTF9URUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAo
KChfX0xDX1RFTEVQSE9ORSkgPDwgMTYpIHwgKDApKSwKICBfTkxfVEVMRVBIT05FX1RFTF9ET01f
Rk1ULAogIF9OTF9URUxFUEhPTkVfSU5UX1NFTEVDVCwKICBfTkxfVEVMRVBIT05FX0lOVF9QUkVG
SVgsCiAgX05MX1RFTEVQSE9ORV9DT0RFU0VULAogIF9OTF9OVU1fTENfVEVMRVBIT05FLAoKICBf
TkxfTUVBU1VSRU1FTlRfTUVBU1VSRU1FTlQgPSAoKChfX0xDX01FQVNVUkVNRU5UKSA8PCAxNikg
fCAoMCkpLAogIF9OTF9NRUFTVVJFTUVOVF9DT0RFU0VULAogIF9OTF9OVU1fTENfTUVBU1VSRU1F
TlQsCgogIF9OTF9JREVOVElGSUNBVElPTl9USVRMRSA9ICgoKF9fTENfSURFTlRJRklDQVRJT04p
IDw8IDE2KSB8ICgwKSksCiAgX05MX0lERU5USUZJQ0FUSU9OX1NPVVJDRSwKICBfTkxfSURFTlRJ
RklDQVRJT05fQUREUkVTUywKICBfTkxfSURFTlRJRklDQVRJT05fQ09OVEFDVCwKICBfTkxfSURF
TlRJRklDQVRJT05fRU1BSUwsCiAgX05MX0lERU5USUZJQ0FUSU9OX1RFTCwKICBfTkxfSURFTlRJ
RklDQVRJT05fRkFYLAogIF9OTF9JREVOVElGSUNBVElPTl9MQU5HVUFHRSwKICBfTkxfSURFTlRJ
RklDQVRJT05fVEVSUklUT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9BVURJRU5DRSwKICBfTkxf
SURFTlRJRklDQVRJT05fQVBQTElDQVRJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0FCQlJFVklB
VElPTiwKICBfTkxfSURFTlRJRklDQVRJT05fUkVWSVNJT04sCiAgX05MX0lERU5USUZJQ0FUSU9O
X0RBVEUsCiAgX05MX0lERU5USUZJQ0FUSU9OX0NBVEVHT1JZLAogIF9OTF9JREVOVElGSUNBVElP
Tl9DT0RFU0VULAogIF9OTF9OVU1fTENfSURFTlRJRklDQVRJT04sCgoKICBfTkxfTlVNCn07CiMg
NTc1ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwpleHRlcm4gY2hhciAqbmxfbGFuZ2luZm8g
KG5sX2l0ZW0gX19pdGVtKSB0aHJvdyAoKTsKIyA1ODYgIi91c3IvaW5jbHVkZS9sYW5naW5mby5o
IiAzCmV4dGVybiBjaGFyICpubF9sYW5naW5mb19sIChubF9pdGVtIF9faXRlbSwgX19sb2NhbGVf
dCBsKTsKCgp9CiMgMzggIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jKyts
b2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDEgMwojIDI0ICIvdXNyL2lu
Y2x1ZGUvaWNvbnYuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDIgMwoKCmV4
dGVybiAiQyIgewoKCnR5cGVkZWYgdm9pZCAqaWNvbnZfdDsKCgoKCmV4dGVybiBpY29udl90IGlj
b252X29wZW4gKF9fY29uc3QgY2hhciAqX190b2NvZGUsIF9fY29uc3QgY2hhciAqX19mcm9tY29k
ZSkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgaWNvbnYgKGljb252X3QgX19jZCwg
Y2hhciAqKl9fcmVzdHJpY3QgX19pbmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpf
X3Jlc3RyaWN0IF9faW5ieXRlc2xlZnQsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fb3V0YnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3Qg
X19vdXRieXRlc2xlZnQpOwoKCmV4dGVybiBpbnQgaWNvbnZfY2xvc2UgKGljb252X3QgX19jZCkg
dGhyb3cgKCk7Cgp9CiMgMzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9j
Kytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMSAzCiMgMzUgIi91
c3IvaW5jbHVkZS9saWJpbnRsLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgpleHRlcm4gY2hhciAqZ2V0
dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmRn
ZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lk
KQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAoX19jb25zdCBjaGFyICpf
X2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZCkKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSk7CgoKCmV4dGVybiBjaGFyICpkY2dldHRleHQg
KF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIg
Kl9fZGNnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKCmV4dGVybiBj
aGFyICpuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkMSwgX19jb25zdCBjaGFyICpfX21z
Z2lkMiwKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgxKSkpIF9fYXR0cmlidXRl
X18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIgKmRuZ2V0dGV4dCAoX19j
b25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50
IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSkg
X19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgpleHRlcm4gY2hhciAqZGNu
Z2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dp
ZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNp
Z25lZCBsb25nIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jYXRlZ29y
eSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSkgX19h
dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgoKCmV4dGVybiBjaGFyICp0ZXh0
ZG9tYWluIChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBj
aGFyICpiaW5kdGV4dGRvbWFpbiAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Rpcm5hbWUpIHRocm93ICgpOwoK
CgpleHRlcm4gY2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKF9fY29uc3QgY2hhciAqX19k
b21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19jb2Rlc2V0KSB0aHJvdyAoKTsKIyAxMjAgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgi
IDMKfQojIDQwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxl
LmgiIDIgMwoKCgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICBleHRlcm4gIkMiIF9fdHlwZW9m
KHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7Cn0KCgpuYW1lc3BhY2Ugc3RkCnsKICB0eXBlZGVmIF9f
bG9jYWxlX3QgX19jX2xvY2FsZTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgogICAgaW50CiAg
ICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCBjb25zdCBpbnQgX19zaXplLCBjb25zdCBj
aGFyKiBfX2ZtdCwKCiAgICAgICAgICAgICAgICAgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2Nh
bGUmIF9fY2xvYywgaW50IF9fcHJlYyA9IC0xKQogICAgewogICAgICBfX2NfbG9jYWxlIF9fb2xk
ID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOwojIDczICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDMKICAgICAgaW50IF9fcmV0OwoKICAg
ICAgaWYgKF9fcHJlYyA+PSAwKQogICAgICAgIF9fcmV0ID0gc25wcmludGYoX19vdXQsIF9fc2l6
ZSwgX19mbXQsIF9fcHJlYywgX192KTsKICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gc25wcmlu
dGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fdik7CiMgODcgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2kzODYtbGludXgvYml0cy9jKytsb2NhbGUuaCIgMwogICAgICBfX2dudV9jeHg6Ol9fdXNlbG9j
YWxlKF9fb2xkKTsKCgoKCiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KfQojIDQ3ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9jbGltaXRzIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2xpbWl0cyIgMwoK
IyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9saW1pdHMuaCIg
MSAzCiMgNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NsaW1pdHMiIDIgMwojIDQ4ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9jY3R5cGUiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jY3R5cGUiIDMKCgoj
IDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi
IDMKZXh0ZXJuICJDIiB7CiMgNDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFu
LmgiIDIgMwojIDQyICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCgoKCgoKCmVudW0KewogIF9J
U3VwcGVyID0gKCgwKSA8IDggPyAoKDEgPDwgKDApKSA8PCA4KSA6ICgoMSA8PCAoMCkpID4+IDgp
KSwKICBfSVNsb3dlciA9ICgoMSkgPCA4ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAoKDEgPDwgKDEp
KSA+PiA4KSksCiAgX0lTYWxwaGEgPSAoKDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8IDgpIDogKCgx
IDw8ICgyKSkgPj4gOCkpLAogIF9JU2RpZ2l0ID0gKCgzKSA8IDggPyAoKDEgPDwgKDMpKSA8PCA4
KSA6ICgoMSA8PCAoMykpID4+IDgpKSwKICBfSVN4ZGlnaXQgPSAoKDQpIDwgOCA/ICgoMSA8PCAo
NCkpIDw8IDgpIDogKCgxIDw8ICg0KSkgPj4gOCkpLAogIF9JU3NwYWNlID0gKCg1KSA8IDggPyAo
KDEgPDwgKDUpKSA8PCA4KSA6ICgoMSA8PCAoNSkpID4+IDgpKSwKICBfSVNwcmludCA9ICgoNikg
PCA4ID8gKCgxIDw8ICg2KSkgPDwgOCkgOiAoKDEgPDwgKDYpKSA+PiA4KSksCiAgX0lTZ3JhcGgg
PSAoKDcpIDwgOCA/ICgoMSA8PCAoNykpIDw8IDgpIDogKCgxIDw8ICg3KSkgPj4gOCkpLAogIF9J
U2JsYW5rID0gKCg4KSA8IDggPyAoKDEgPDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAoOCkpID4+IDgp
KSwKICBfSVNjbnRybCA9ICgoOSkgPCA4ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAoKDEgPDwgKDkp
KSA+PiA4KSksCiAgX0lTcHVuY3QgPSAoKDEwKSA8IDggPyAoKDEgPDwgKDEwKSkgPDwgOCkgOiAo
KDEgPDwgKDEwKSkgPj4gOCkpLAogIF9JU2FsbnVtID0gKCgxMSkgPCA4ID8gKCgxIDw8ICgxMSkp
IDw8IDgpIDogKCgxIDw8ICgxMSkpID4+IDgpKQp9OwojIDgxICIvdXNyL2luY2x1ZGUvY3R5cGUu
aCIgMwpleHRlcm4gX19jb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKipfX2N0eXBlX2JfbG9jICh2
b2lkKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0KSk7CmV4dGVybiBfX2NvbnN0IF9faW50
MzJfdCAqKl9fY3R5cGVfdG9sb3dlcl9sb2MgKHZvaWQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3QpKTsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICoqX19jdHlwZV90b3VwcGVyX2xvYyAo
dm9pZCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdCkpOwojIDk2ICIvdXNyL2luY2x1ZGUv
Y3R5cGUuaCIgMwoKCgoKCgpleHRlcm4gaW50IGlzYWxudW0gKGludCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgaXNhbHBoYSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2NudHJsIChpbnQpIHRo
cm93ICgpOwpleHRlcm4gaW50IGlzZGlnaXQgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNs
b3dlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2dyYXBoIChpbnQpIHRocm93ICgpOwpl
eHRlcm4gaW50IGlzcHJpbnQgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwdW5jdCAoaW50
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3NwYWNlIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50
IGlzdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN4ZGlnaXQgKGludCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgdG9sb3dlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCB0b3VwcGVyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IGlzYmxhbmsg
KGludCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgaXNjdHlwZSAoaW50IF9fYywgaW50IF9f
bWFzaykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAoaW50IF9fYykgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX3RvbG93ZXIgKGludCkgdGhy
b3cgKCk7CiMgMjQ3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IGlzYWxudW1f
bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhX2wgKGludCwg
X19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNjbnRybF9sIChpbnQsIF9fbG9jYWxl
X3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgaXNncmFwaF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50
IGlzcHJpbnRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0
X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNzcGFjZV9sIChpbnQs
IF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzdXBwZXJfbCAoaW50LCBfX2xvY2Fs
ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBpc2JsYW5rX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgX190b2xvd2VyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCB0b2xvd2VyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgdG91cHBlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkg
dGhyb3cgKCk7CiMgMzIzICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwp9CiMgNTAgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2NjdHlwZSIgMiAzCiMgNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NjdHlw
ZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmlzYWxudW07CiAgdXNpbmcgOjppc2FscGhh
OwogIHVzaW5nIDo6aXNjbnRybDsKICB1c2luZyA6OmlzZGlnaXQ7CiAgdXNpbmcgOjppc2dyYXBo
OwogIHVzaW5nIDo6aXNsb3dlcjsKICB1c2luZyA6OmlzcHJpbnQ7CiAgdXNpbmcgOjppc3B1bmN0
OwogIHVzaW5nIDo6aXNzcGFjZTsKICB1c2luZyA6OmlzdXBwZXI7CiAgdXNpbmcgOjppc3hkaWdp
dDsKICB1c2luZyA6OnRvbG93ZXI7CiAgdXNpbmcgOjp0b3VwcGVyOwp9CiMgNDkgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysv
My4yL3N0cmluZyIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMwoKCgoK
IyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDEgMwojIDUzICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9tZW1vcnkiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkbGliIiAxIDMKIyA0OCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDEgMwojIDMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy93YWl0ZmxhZ3MuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2Jp
dHMvd2FpdHN0YXR1cy5oIiAzCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBz
dHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAg
ICB1bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19y
ZXRjb2RlOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRf
dGVybWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3df
c3RvcHZhbDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVu
c2lnbmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDkzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK
Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90
OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCBy
ZW07CiAgfSBsZGl2X3Q7CgoKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAgewog
ICAgbG9uZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRpdl90
OwoKCiMgMTM3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBl
X2dldF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgYXRvZiAo
X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFy
ICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCl9fZXh0
ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRy
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBk
b3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBmbG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4
dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGlu
dCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh
c2UpCiAgICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50
IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhy
b3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRv
dXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl
KQogICAgIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQg
c3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRo
cm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0
b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i
YXNlKQogICAgIHRocm93ICgpOwoKIyAyMjkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRl
cm4gbG9uZyBpbnQgc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg
KCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9f
CmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91
YmxlIHN0cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xv
YykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3Vi
bGUgc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3Ry
dG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19n
cm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5h
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVy
biBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl
LCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0
cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
X19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBs
b25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18K
ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25z
dCBjaGFyICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19n
cm91cCkKICAgICB0aHJvdyAoKTsKIyA0MDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRl
cm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQg
YTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNs
dWRlL3N5cy90eXBlcy5oIiAzCmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgX191X2NoYXIgdV9j
aGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5
cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBf
X3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYg
X19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYg
X19pbm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVm
IF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYg
X19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRl
ZiBfX29mZl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwojIDEwNSAi
L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBl
ZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5
cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEz
NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNv
bmRzX3Q7CgoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoKCgojIDEgIi91
c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAx
NDggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgdWludDsKIyAxOTEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBl
ZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVk
ZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVk
ZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVk
ZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7CgoKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJ
X18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDY0
X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIGludCByZWdp
c3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CiMgMjE2ICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAx
IDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3NlbGVjdC5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDIgMwojIDQ2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2JpdHMvdGlt
ZS5oIiAzCnN0cnVjdCB0aW1ldmFsCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNl
Y29uZHNfdCB0dl91c2VjOwogIH07CiMgNDcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIg
MwojIDU1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgX19m
ZF9tYXNrOwojIDY3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCnR5cGVkZWYgc3RydWN0
CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9t
YXNrKSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7
CiMgOTkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuICJDIiB7CgoKCgoKCmV4
dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRz
LAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAg
ICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9f
cmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZk
cywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0IF9fdGlt
ZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9f
c2lnbWFzaykgdGhyb3cgKCk7CgoKfQojIDIxNyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAy
IDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDIyMCAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCnR5cGVkZWYgX19ibGtzaXplX3QgYmxrc2l6ZV90
OwoKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2Jsa2Nu
dF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7CiMgMjU4
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250
NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2Zp
bGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVh
ZHR5cGVzLmgiIDEgMwojIDI2NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgp9CiMg
NDE1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFu
ZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQg
X19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBp
bnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAq
X19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBp
bnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAg
aW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGlu
dDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21f
ZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqX19y
ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWdu
ZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRl
cm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0
IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAog
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19i
dWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9f
c3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jl
c3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJv
dyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoK
CgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91Ymxl
IGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRl
cm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFu
ZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv
bmcgaW50IG1yYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAo
dW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNy
YW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9y
dCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7
CmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJv
dyAoKTsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50
IF9feFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQg
c2hvcnQgaW50IF9fYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgaW50IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3Qg
ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg
ZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4
X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwK
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i
dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3Vs
dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19y
ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25n
IGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4
X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAg
ICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19z
ZWVkMTZ2WzNdLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1
ZmZlcikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50
IF9fcGFyYW1bN10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X2J1ZmZlcikgdGhyb3cgKCk7CgoKCgoKCgoKCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBf
X3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9p
ZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2Mg
KHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19t
YWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYWxsb2NhLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4g
dm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTc3ICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9f
c2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBp
bnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxpZ25tZW50LCBz
aXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7
CgoKCgpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
bm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQp
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQg
X19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fbm9yZXR1cm5fXykpOwoKCgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVzKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKCmV4dGVybiBjaGFy
ICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFy
ICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBp
bnQgX19yZXBsYWNlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29u
c3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9p
ZCkgdGhyb3cgKCk7CiMgNjYxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIg
Km1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1r
c3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY3OCAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAzCmV4dGVybiBpbnQgbWtzdGVtcDY0IChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAo
KTsKIyA2ODggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWtkdGVtcCAo
Y2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29u
c3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjYW5vbmlj
YWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMgNzEyICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz
dHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJf
Zm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBh
cl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgoKZXh0ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29u
c3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIp
OwoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6
ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoK
CgpleHRlcm4gaW50IGFicyAoaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBp
bnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4
dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpfX2V4dGVuc2lvbl9f
IGV4dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9fbnVtZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgojIDc3NiAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0
cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAg
ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq
Z2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln
aXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19y
ZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp
Y3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFy
ICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1Zikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9f
cmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAg
ICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAg
ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHFlY3Z0
X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAg
ICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAg
ICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93
ICgpOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jl
c3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
LCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25z
dCBjaGFyICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3Rv
bWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVf
dCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgp
OwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVf
dCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0
IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDg1OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAzCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAog
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgp
OwoKCgoKCmV4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7
CgoKCgoKCgpleHRlcm4gaW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIHRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgdW5sb2NrcHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1l
IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19m
ZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBn
ZXRwdCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91Ymxl
IF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQojIDUzICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9jc3RkbGliIiAyIDMKIyA4NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0
ZGxpYiIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmRpdl90OwogIHVzaW5nIDo6bGRpdl90
OwoKICB1c2luZyA6OmFib3J0OwogIHVzaW5nIDo6YWJzOwogIHVzaW5nIDo6YXRleGl0OwogIHVz
aW5nIDo6YXRvZjsKICB1c2luZyA6OmF0b2k7CiAgdXNpbmcgOjphdG9sOwogIHVzaW5nIDo6YnNl
YXJjaDsKICB1c2luZyA6OmNhbGxvYzsKICB1c2luZyA6OmRpdjsKICB1c2luZyA6OmV4aXQ7CiAg
dXNpbmcgOjpmcmVlOwogIHVzaW5nIDo6Z2V0ZW52OwogIHVzaW5nIDo6bGFiczsKICB1c2luZyA6
OmxkaXY7CiAgdXNpbmcgOjptYWxsb2M7CiAgdXNpbmcgOjptYmxlbjsKICB1c2luZyA6Om1ic3Rv
d2NzOwogIHVzaW5nIDo6bWJ0b3djOwogIHVzaW5nIDo6cXNvcnQ7CiAgdXNpbmcgOjpyYW5kOwog
IHVzaW5nIDo6cmVhbGxvYzsKICB1c2luZyA6OnNyYW5kOwogIHVzaW5nIDo6c3RydG9kOwogIHVz
aW5nIDo6c3RydG9sOwogIHVzaW5nIDo6c3RydG91bDsKICB1c2luZyA6OnN5c3RlbTsKICB1c2lu
ZyA6Ondjc3RvbWJzOwogIHVzaW5nIDo6d2N0b21iOwoKICBpbmxpbmUgbG9uZwogIGFicyhsb25n
IF9faSkgeyByZXR1cm4gbGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2X3QKICBkaXYobG9uZyBf
X2ksIGxvbmcgX19qKSB7IHJldHVybiBsZGl2KF9faSwgX19qKTsgfQp9CiMgMTM2ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9jc3RkbGliIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6
bGxkaXZfdDsKICB1c2luZyA6Ol9FeGl0OwoKICBpbmxpbmUgbG9uZyBsb25nCiAgYWJzKGxvbmcg
bG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbG9u
ZyBsb25nCiAgbGxhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAt
X194OyB9CgogIGlubGluZSBsbGRpdl90CiAgZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBf
X2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24g
JSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBsbGRpdihsb25nIGxvbmcg
X19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19k
OyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CgogIHVzaW5nIDo6YXRvbGw7CiAg
dXNpbmcgOjpzdHJ0b2Y7CiAgdXNpbmcgOjpzdHJ0b2xsOwogIHVzaW5nIDo6c3RydG91bGw7CiAg
dXNpbmcgOjpzdHJ0b2xkOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6Omxs
ZGl2X3Q7CiAgdXNpbmcgX19nbnVfY3h4OjpfRXhpdDsKICB1c2luZyBfX2dudV9jeHg6OmFiczsK
ICB1c2luZyBfX2dudV9jeHg6OmxsYWJzOwogIHVzaW5nIF9fZ251X2N4eDo6ZGl2OwogIHVzaW5n
IF9fZ251X2N4eDo6bGxkaXY7CiAgdXNpbmcgX19nbnVfY3h4OjphdG9sbDsKICB1c2luZyBfX2du
dV9jeHg6OnN0cnRvZjsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGw7CiAgdXNpbmcgX19nbnVf
Y3h4OjpzdHJ0b3VsbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGQ7Cn0KIyA2OCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL25ldyIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL25ldyIgMwpleHRl
cm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMg
ZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9CgoKICAg
IHZpcnR1YWwgfmJhZF9hbGxvYygpIHRocm93KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7
IH07CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwoKCiAgdHlwZWRlZiB2b2lkICgq
bmV3X2hhbmRsZXIpKCk7CgogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxl
cikgdGhyb3coKTsKfQojIDc5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9uZXciIDMKdm9pZCogb3Bl
cmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkKiBvcGVy
YXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVy
YXRvciBkZWxldGUodm9pZCopIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCop
IHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Ro
cm93X3QmKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qg
c3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29u
c3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQq
LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgoKaW5saW5lIHZvaWQqIG9wZXJhdG9y
IG5ldyhzdGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQppbmxp
bmUgdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7
IHJldHVybiBfX3A7IH0KCgppbmxpbmUgdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQqLCB2b2lk
KikgdGhyb3coKSB7IH07CmlubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCB2b2lk
KikgdGhyb3coKSB7IH07Cgp9CiMgNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs
Z29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWlyLmgi
IDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNw
YWNlIHN0ZAp7CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7
CiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAg
X1QxIGZpcnN0OwogIF9UMiBzZWNvbmQ7CgoKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgp
IHt9CgoKCgogIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9f
YSksIHNlY29uZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAg
cGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29u
ZChfX3Auc2Vjb25kKSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWly
PF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194
LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1Qy
PgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3Qg
cGFpcjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwK
ICAgICAgICAgKCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNl
Y29uZCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m
IF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwg
Y2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9f
eCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29u
c3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJl
dHVybiAhKF9feSA8IF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+Cmlu
bGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFp
cjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KIyAxNDAgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3BhaXIuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj
bGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIg
X195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsKfQoKfQojIDcyICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDUzICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKIyA5MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy90eXBlX3RyYWl0cy5oIiAzCnN0cnVjdCBfX3RydWVfdHlwZSB7fTsKc3RydWN0IF9fZmFs
c2VfdHlwZSB7fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0Owoj
IDExMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy90eXBlX3RyYWl0cy5oIiAzCiAgIHR5cGVk
ZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X19mYWxzZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxi
b29sPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90
cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf
X3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9E
X3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaG9y
dD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZz4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVk
IGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl
X3RyYWl0czxsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv
cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90
eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4g
ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz
PGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs
dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK
CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7CiAgdHlwZWRlZiBf
X2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8
Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs
Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRl
Z2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu
dGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl
cjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRl
bXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxv
bmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25n
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5
cGUgX05vcm1hbDsKfTsKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+IGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9y
Owp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CnN0
cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsK
fTsKIyA3MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoK
CgoKbmFtZXNwYWNlIHN0ZAp7CiMgOTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs
Z29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIyPgogICAgaW5saW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIx
IF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVf
dHlwZSBfVmFsdWVUeXBlMjsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVl
VHlwZTEgX190bXAgPSAqX19hOwogICAgICAqX19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1w
OwogICAgfQojIDExOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9UcCYg
X19hLCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBfVHAgX190bXAgPSBfX2E7CiAgICAg
IF9fYSA9IF9fYjsKICAgICAgX19iID0gX190bXA7CiAgICB9CiMgMTQ2ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBf
X2IpCiAgICB7CgogICAgIAoKICAgICAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJu
IF9fYTsKICAgIH0KIyAxNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAg
bWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBp
ZiAoX19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE4NiAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWluKGNv
bnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAg
ICAgaWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMg
MjA0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAm
CiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9f
YTsKICAgIH0KIyAyMjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4K
ICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg
ICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7
CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVy
CiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAg
X0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBf
X24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICsr
X19maXJzdDsKICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3Vs
dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9f
Y29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCog
X19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihf
VHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFz
dCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl
bmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIo
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19m
aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAg
ICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg
X190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBf
X2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsg
cmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2NvcHlfYXV4Mihjb25z
dCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LAogICAgICAgICAgICAgICAgX1RwKiBf
X3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0
eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25p
MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBf
VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlw
ZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwog
ICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQuYmFzZSgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSkpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu
ZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90
eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9fY29weV9hdXgyKF9fZmly
c3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAg
ICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1h
bCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdC5iYXNlKCksIF9fbGFz
dC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0
ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6
X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiMgMzM5ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIGNvcHkoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQp
CiAgICB7CgogICAgIAogICAgIAoKCiAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxf
aXRlcmF0b3I8X0lucHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgICByZXR1cm4gX19j
b3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyMj4KICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICBfX2NvcHlf
YmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIx
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewog
ICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1f
X2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGlu
ZSBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uOwogICAgICBmb3IgKF9fbiA9
IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgICAgICotLV9fcmVzdWx0ID0g
Ki0tX19sYXN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl
cjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jvb2xUeXBlPgogICAgc3RydWN0IF9fY29weV9iYWNr
d2FyZF9kaXNwYXRjaAogICAgewogICAgICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVyMgogICAg
ICBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBf
X2xhc3QsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkKICAgICAgewog
ICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgICAgfQogICAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxf
VHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29w
eShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQog
ICAgICB7CiAgICAgICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0Owog
ICAgICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIF9O
dW0pOwogICAgICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgICAgIH0KICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8
Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICB7CiAgICAgIHN0YXRpYyBfVHAqCiAg
ICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jl
c3VsdCkKICAgICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1Rw
KiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdCk7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CSTEsIHR5cGVu
YW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2F1eChfQkkxIF9f
Zmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTI+Ojp2YWx1
ZV90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3Bh
dGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAgICAgICA6OmNvcHkoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0
eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRf
bm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkK
ICAgIHsgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f
cmVzdWx0LmJhc2UoKSkpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBf
QkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0
ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJl
dHVybiBfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9Cgog
IHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIK
ICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBf
QkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJ
MiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lz
X25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9f
Y29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QuYmFzZSgpLCBfX2xh
c3QuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
X0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRf
aW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2Vf
dHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9C
STI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1
dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAg
fQojIDQ3NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRl
bXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAg
IGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkK
ICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25v
cm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29w
eV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19O
b3JtYWwoKSk7CiAgICB9CiMgNTA5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+
CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAg
IH0KIyA1MzEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9U
cD4KICAgIF9PdXRwdXRJdGVyCiAgICBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUg
X19uLCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX24g
PiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCiAgaW5saW5lIHZvaWQKICBmaWxsKHVuc2lnbmVkIGNo
YXIqIF9fZmlyc3QsIHVuc2lnbmVkIGNoYXIqIF9fbGFzdCwgY29uc3QgdW5zaWduZWQgY2hhciYg
X19jKQogIHsKICAgIHVuc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJz
dCwgX190bXAsIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKHNp
Z25lZCBjaGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciogX19sYXN0LCBjb25zdCBzaWduZWQgY2hh
ciYgX19jKQogIHsKICAgIHNpZ25lZCBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmly
c3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7
CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0LCBj
b25zdCBjaGFyJiBfX2MpCiAgewogICAgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2Zp
cnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3Qp
OwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgdW5zaWduZWQgY2hh
cioKICAgIGZpbGxfbih1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHVu
c2lnbmVkIGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19u
LCBfX2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgc2lnbmVkIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19m
aXJzdCwgX1NpemUgX19uLCBjb25zdCBzaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxs
KF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19u
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBjaGFyKgogICAg
ZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYgX19jKQogICAgewog
ICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2Zp
cnN0ICsgX19uOwogICAgfQojIDYwNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w
dXRJdGVyMj4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2go
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAg
ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIp
IHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0KICAgICAg
cmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIp
OwogICAgfQojIDY0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg
dHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0
ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgIF9CaW5h
cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmly
c3QyKSkgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgfQog
ICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2Zp
cnN0Mik7CiAgICB9CiMgNjY4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0
ZXIyPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w
dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7Cgog
ICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsr
X19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgaWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0
MikpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQojIDY5
OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0Jp
bmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBib29sCiAgICBlcXVhbChfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LAogICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAK
ICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytf
X2ZpcnN0MikKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIp
KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA3MzIg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBs
ZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoK
ICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIK
ICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKCpfX2Zp
cnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmICgqX19m
aXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAg
cmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0K
IyA3NjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgYm9vbAogICAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgog
ICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mgog
ICAgICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgICAgICBpZiAoX19jb21w
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlm
IChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDI7CiAgICB9CgogIGlubGluZSBib29sCiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29u
c3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIs
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCiAgewogICAgY29uc3Qgc2l6ZV90IF9fbGVu
MSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICAgIGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xhc3Qy
IC0gX19maXJzdDI7CiAgICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9f
Zmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICAgIHJldHVybiBfX3Jlc3VsdCAhPSAwID8g
X19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOwogIH0KCiAgaW5saW5lIGJvb2wKICBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29u
c3QgY2hhciogX19sYXN0MikKICB7CgogICAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJl
KChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7
CgoKCgoKCiAgfQoKfQojIDU1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDIgMwojIDEg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDg4ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvY2Fzc2VydCIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Nhc3NlcnQiIDMKCiMg
MSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2Fzc2VydC5o
IiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hh
ciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lk
IF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlv
bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRl
cm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9f
ZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy
bl9fKSk7CgoKfQojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAyIDMKIyA4OSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhj
ZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVu
Y3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4
Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZv
aWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlk
KHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f
dGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291
dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDkw
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIHN0cnVj
dCBfUmVmY291bnRfQmFzZQogIHsKCiAgICB0eXBlZGVmIHNpemVfdCBfUkNfdDsKCgogICAgdm9s
YXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9yZWZf
Y291bnRfbG9jazsKCiAgICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50
KF9fbikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0gezAsIDAsIDAsIFBU
SFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fTsKICAgICAgX01fcmVmX2NvdW50X2xvY2sg
PSBfX3RtcDsKCgoKCgogICAgfQoKICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAgewogICAgICBf
X2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICArK19NX3JlZl9j
b3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwog
ICAgfQoKICAgIF9SQ190CiAgICBfTV9kZWNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4
X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAt
LV9NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50
X2xvY2spOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsKIyAxMDkgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHRlbXBsYXRlPGludCBfX2R1bW15Pgog
ICAgc3RydWN0IF9Td2FwX2xvY2tfc3RydWN0CiAgICB7IHN0YXRpYyBfX2d0aHJlYWRfbXV0ZXhf
dCBfU19zd2FwX2xvY2s7IH07CgogIHRlbXBsYXRlPGludCBfX2R1bW15PgogICAgX19ndGhyZWFk
X211dGV4X3QKICAgIF9Td2FwX2xvY2tfc3RydWN0PF9fZHVtbXk+OjpfU19zd2FwX2xvY2sgPSB7
MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19OwoKCgogIGlubGluZSB1
bnNpZ25lZCBsb25nCiAgX0F0b21pY19zd2FwKHVuc2lnbmVkIGxvbmcgKiBfX3AsIHVuc2lnbmVk
IGxvbmcgX19xKQogIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfU3dhcF9sb2NrX3N0cnVj
dDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHVuc2lnbmVkIGxvbmcgX19yZXN1bHQgPSAqX19wOwog
ICAgKl9fcCA9IF9fcTsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9Td2FwX2xvY2tfc3Ry
dWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KIyAxNTEgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX211
dGV4X2xvY2sKICB7CgoKCgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAgdm9p
ZAogICAgX01faW5pdGlhbGl6ZSgpCiAgICB7CiMgMTg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF90aHJlYWRzLmgiIDMKICAgIH0KCiAgICB2b2lkCiAgICBfTV9hY3F1aXJlX2xvY2so
KQogICAgewoKCgogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7CiAgICB9Cgog
ICAgdm9pZAogICAgX01fcmVsZWFzZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211
dGV4X3VubG9jaygmX01fbG9jayk7CiAgICB9CiAgfTsKIyAyMjAgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX2F1dG9fbG9jawogIHsKICAg
IF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAgICBfU1RMX2F1dG9fbG9jayhfU1RMX211dGV4
X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykKICAgIHsgX01fbG9jay5fTV9hY3F1aXJl
X2xvY2soKTsgfQoKICAgIH5fU1RMX2F1dG9fbG9jaygpIHsgX01fbG9jay5fTV9yZWxlYXNlX2xv
Y2soKTsgfQoKICBwcml2YXRlOgogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xv
Y2smKTsKICAgIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAgfTsKCn0K
IyA5MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgojIDEgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9hdG9taWNpdHkuaCIgMSAzCiMgOTUg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9hdG9taWNpdHkuaCIgMwp0eXBl
ZGVmIGludCBfQXRvbWljX3dvcmQ7CgpzdGF0aWMgaW5saW5lIF9BdG9taWNfd29yZApfX2F0dHJp
YnV0ZV9fICgoX191bnVzZWRfXykpCl9fZXhjaGFuZ2VfYW5kX2FkZCAodm9sYXRpbGUgX0F0b21p
Y193b3JkICpfX21lbSwgaW50IF9fdmFsKQp7CiAgcmVnaXN0ZXIgX0F0b21pY193b3JkIF9fcmVz
dWx0OwogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgeGFkZGwgJTAsJTIiCiAgICAgICAg
ICAgICAgICAgICAgICAgIDogIj1yIiAoX19yZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgICAg
IDogIjAiIChfX3ZhbCksICJtIiAoKl9fbWVtKQogICAgICAgICAgICAgICAgICAgICAgICA6ICJt
ZW1vcnkiKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApfX2F0dHJp
YnV0ZV9fICgoX191bnVzZWRfXykpCl9fYXRvbWljX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3Jk
KiBfX21lbSwgaW50IF9fdmFsKQp7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRs
ICUwLCUxIgogICAgICAgICAgICAgICAgICAgICAgICA6IDogImlyIiAoX192YWwpLCAibSIgKCpf
X21lbSkgOiAibWVtb3J5Iik7Cn0KIyA5MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxsb2MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyAxMDQgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsbG9jLmgiIDMKICBjbGFzcyBfX25ld19hbGxvYwogIHsKICBwdWJsaWM6CiAg
ICBzdGF0aWMgdm9pZCoKICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiA6Om9w
ZXJhdG9yIG5ldyhfX24pOyB9CgogICAgc3RhdGljIHZvaWQKICAgIGRlYWxsb2NhdGUodm9pZCog
X19wLCBzaXplX3QpCiAgICB7IDo6b3BlcmF0b3IgZGVsZXRlKF9fcCk7IH0KICB9OwojIDEyNyAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGludCBf
X2luc3Q+CiAgICBjbGFzcyBfX21hbGxvY19hbGxvY190ZW1wbGF0ZQogICAgewogICAgcHJpdmF0
ZToKICAgICAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsKCgogICAgICBzdGF0
aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CgogICAgICBzdGF0aWMgdm9p
ZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKCiAgICBwdWJsaWM6CiAgICAgIHN0
YXRpYyB2b2lkKgogICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgdm9p
ZCogX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChf
X3Jlc3VsdCA9PSAwLCAwKSkKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24p
OwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAg
ICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgICAgIHsgZnJlZShfX3ApOyB9CgoK
ICAgICAgc3RhdGljIHZvaWQqCiAgICAgIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgLCBz
aXplX3QgX19uZXdfc3opCiAgICAgIHsKICAgICAgICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2Mo
X19wLCBfX25ld19zeik7CiAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXN1bHQgPT0g
MCwgMCkpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdfc3op
OwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQgKCog
X19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKl9fZikoKSkpKCkKICAgICAgewogICAgICAgIHZv
aWQgKCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBfX21h
bGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAg
IH0KICAgIH07CgoKICB0ZW1wbGF0ZTxpbnQgX19pbnN0PgogICAgdm9pZCAoKiBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7
CgogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19tYWxsb2NfYWxsb2NfdGVt
cGxhdGU8X19pbnN0Pjo6CiAgICBfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCiAgICB7CiAgICAg
IHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCogX19yZXN1bHQ7Cgog
ICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBf
X21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0
KF9fbXlfbWFsbG9jX2hhbmRsZXIgPT0gMCwgMCkpCiAgICAgICAgICAgIF9fdGhyb3dfYmFkX2Fs
bG9jKCk7CiAgICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgICBfX3Jl
c3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgICAgaWYgKF9fcmVzdWx0KQogICAgICAgICAgICBy
ZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8aW50IF9faW5zdD4K
ICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjoKICAgIF9TX29v
bV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBfX215
X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAoOzsp
CiAgICAgICAgewogICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9j
X29vbV9oYW5kbGVyOwogICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19teV9tYWxsb2Nf
aGFuZGxlciA9PSAwLCAwKSkKICAgICAgICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsKICAgICAg
ICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0gcmVhbGxv
YyhfX3AsIF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybiBf
X3Jlc3VsdDsKICAgICAgICB9CiAgICB9CgoKICB0eXBlZGVmIF9fbmV3X2FsbG9jIF9fbWVtX2lu
dGVyZmFjZTsKIyAyMjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIF9fc2lt
cGxlX2FsbG9jCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGFsbG9j
YXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBfVHAqIF9fcmV0ID0gMDsKICAgICAgICBp
ZiAoX19uKQogICAgICAgICAgX19yZXQgPSBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9j
YXRlKF9fbiAqIHNpemVvZihfVHApKSk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9Cgog
ICAgICBzdGF0aWMgX1RwKgogICAgICBhbGxvY2F0ZSgpCiAgICAgIHsgcmV0dXJuIChfVHAqKSBf
QWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAg
IGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsgaWYgKDAgIT0gX19uKSBf
QWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9CgogICAgICBzdGF0
aWMgdm9pZAogICAgICBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgICB7IF9BbGxvYzo6ZGVhbGxv
Y2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0KICAgIH07CiMgMjcwICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAg
Y2xhc3MgX19kZWJ1Z19hbGxvYwogICAgewogICAgcHJpdmF0ZToKCgogICAgICBlbnVtIHtfU19l
eHRyYSA9IDh9OwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRl
KHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxs
b2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgICAqKHNpemVfdCopX19y
ZXN1bHQgPSBfX247CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAg
ICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXpl
X3QgX19uKQogICAgICB7CiAgICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGlu
dCkgX1NfZXh0cmE7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVh
bF9wID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0g
X19uIiwgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiLCAyOTEsIF9fUFJF
VFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxf
cCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgICB9CgoKICAgICAgc3RhdGljIHZvaWQqCiAg
ICAgIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19z
eikKICAgICAgewogICAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9T
X2V4dHJhOwogICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKCooc2l6ZV90KilfX3JlYWxfcCA9
PSBfX29sZF9zeikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0g
X19vbGRfc3oiLCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIsIDMwMCwg
X19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hh
ciopIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2xkX3N6ICsgKGludCkgX1NfZXh0cmEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19z
eiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19z
ejsKICAgICAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICAgICAgfQogICAg
fTsKIyAzNDAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1w
bGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNsYXNzIF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZQogICAgewogICAgcHJpdmF0ZToKICAgICAgZW51bSB7X0FMSUdOID0gOH07CiAg
ICAgIGVudW0ge19NQVhfQllURVMgPSAxMjh9OwogICAgICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9N
QVhfQllURVMgLyBfQUxJR059OwoKICAgICAgdW5pb24gX09iagogICAgICB7CiAgICAgICAgdW5p
b24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsx
XTsKICAgICAgfTsKCiAgICAgIHN0YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xpc3RbX05G
UkVFTElTVFNdOwoKCiAgICAgIHN0YXRpYyBjaGFyKiBfU19zdGFydF9mcmVlOwogICAgICBzdGF0
aWMgY2hhciogX1NfZW5kX2ZyZWU7CiAgICAgIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOwoK
ICAgICAgc3RhdGljIF9TVExfbXV0ZXhfbG9jayBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKICAg
ICAgc3RhdGljIHNpemVfdAogICAgICBfU19yb3VuZF91cChzaXplX3QgX19ieXRlcykKICAgICAg
eyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KSBfQUxJR04tMSkgJiB+KChzaXplX3QpIF9B
TElHTiAtIDEpKTsgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBfU19mcmVlbGlzdF9pbmRl
eChzaXplX3QgX19ieXRlcykKICAgICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KV9B
TElHTiAtIDEpLyhzaXplX3QpX0FMSUdOIC0gMSk7IH0KCgoKICAgICAgc3RhdGljIHZvaWQqCiAg
ICAgIF9TX3JlZmlsbChzaXplX3QgX19uKTsKCgoKICAgICAgc3RhdGljIGNoYXIqCiAgICAgIF9T
X2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgoKCiAgICAgIHN0cnVj
dCBfTG9jawogICAgICB7CiAgICAgICAgX0xvY2soKSB7IGlmIChfX3RocmVhZHMpIF9TX25vZGVf
YWxsb2NhdG9yX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KICAgICAgICB+X0xvY2soKSB7IGlm
IChfX3RocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0K
ICAgICAgfSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwogICAgICBmcmllbmQgc3RydWN0
IF9Mb2NrOwoKICAgICAgc3RhdGljIF9BdG9taWNfd29yZCBfU19mb3JjZV9uZXc7CgogICAgcHVi
bGljOgoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAg
IHsKICAgICAgICB2b2lkKiBfX3JldCA9IDA7CgoKCgogICAgICAgIGlmIChfU19mb3JjZV9uZXcg
PT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKGdldGVudigiR0xJQkNQUF9GT1JDRV9O
RVciKSkKICAgICAgICAgICAgICBfX2F0b21pY19hZGQoJl9TX2ZvcmNlX25ldywgMSk7CiAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX2F0b21pY19hZGQoJl9TX2ZvcmNlX25ldywgLTEp
OwoKICAgICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoX1NfZm9yY2VfbmV3ICE9IDApID8g
MCA6IChfX2Fzc2VydF9mYWlsICgiX1NfZm9yY2VfbmV3ICE9IDAiLCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxsb2MuaCIsIDQwOSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7
CiAgICAgICAgICB9CgogICAgICAgIGlmICgoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgfHwg
KF9TX2ZvcmNlX25ldyA+IDApKQogICAgICAgICAgX19yZXQgPSBfX25ld19hbGxvYzo6YWxsb2Nh
dGUoX19uKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIF9PYmoqIHZvbGF0
aWxlKiBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdAogICAgICAgICAgICAgICsgX1NfZnJl
ZWxpc3RfaW5kZXgoX19uKTsKCgoKICAgICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwog
ICAgICAgICAgICBfT2JqKiBfX3Jlc3RyaWN0X18gX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7
CiAgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcmVzdWx0ID09IDAsIDApKQogICAg
ICAgICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0g
X19yZXN1bHQgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICBfX3JldCA9IF9f
cmVzdWx0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3Qo
X19yZXQgPT0gMCwgMCkpCiAgICAgICAgICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsKICAgICAg
ICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCgogICAgICBzdGF0aWMgdm9pZAog
ICAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIGlm
ICgoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgfHwgKF9TX2ZvcmNlX25ldyA+IDApKQogICAg
ICAgICAgX19uZXdfYWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgICAgIGVsc2UKICAg
ICAgICAgIHsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0gX1Nf
ZnJlZV9saXN0CiAgICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAgICAg
ICAgICBfT2JqKiBfX3EgPSAoX09iaiopX19wOwoKCgoKICAgICAgICAgICAgX0xvY2sgX19sb2Nr
X2luc3RhbmNlOwogICAgICAgICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9m
cmVlX2xpc3Q7CiAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKICAgICAgICAgIH0K
ICAgICAgfQoKCiAgICAgIHN0YXRpYyB2b2lkKgogICAgICByZWFsbG9jYXRlKHZvaWQqIF9fcCwg
c2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwogICAgfTsKCiAgdGVtcGxhdGU8Ym9v
bCBfX3RocmVhZHMsIGludCBfX2luc3Q+IF9BdG9taWNfd29yZAogIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2ZvcmNlX25ldyA9IDA7CgogIHRlbXBsYXRl
PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
PT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+JiwKICAg
ICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2lu
c3Q+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGlu
dCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD4mKQogICAgeyByZXR1cm4g
ZmFsc2U7IH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAg
Y2hhcioKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ogog
ICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKQogICAgewogICAg
ICBjaGFyKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBf
X25vYmpzOwogICAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBfU19zdGFy
dF9mcmVlOwoKICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKQogICAgICAg
IHsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0
X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybiBfX3Jlc3VsdCA7CiAgICAg
ICAgfQogICAgICBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKQogICAgICAgIHsKICAg
ICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsKICAgICAgICAgIF9f
dG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgICAgX19yZXN1bHQgPSBfU19z
dGFydF9mcmVlOwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAg
ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAg
ICAgICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CiAgICAgICAgICAgIDIgKiBfX3RvdGFsX2J5
dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwoKICAgICAgICAgIGlmIChfX2J5
dGVzX2xlZnQgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX09iaiogdm9sYXRpbGUq
IF9fbXlfZnJlZV9saXN0ID0KICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVs
aXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAgICgoX09iaiopX1Nfc3RhcnRf
ZnJlZSkgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAg
ICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopIF9fbmV3X2FsbG9jOjphbGxvY2F0ZShf
X2J5dGVzX3RvX2dldCk7CiAgICAgICAgICBpZiAoX1Nfc3RhcnRfZnJlZSA9PSAwKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgICBfT2JqKiB2b2xh
dGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgX09iaiogX19wOwoKCgogICAgICAg
ICAgICAgIF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICBmb3IgKDsgX19pIDw9IChzaXplX3Qp
IF9NQVhfQllURVM7IF9faSArPSAoc2l6ZV90KSBfQUxJR04pCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxp
c3RfaW5kZXgoX19pKTsKICAgICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0Owog
ICAgICAgICAgICAgICAgICBpZiAoX19wICE9IDApCiAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9s
aW5rOwogICAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAg
ICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2k7CiAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpz
KTsKCgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilf
X25ld19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwoKCiAgICAgICAgICAgIH0KICAg
ICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICAgIF9TX2VuZF9m
cmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgcmV0dXJuIF9T
X2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2Jqcyk7CiAgICAgICAgfQogICAgfQoKCgoKCiAgdGVt
cGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24p
CiAgICB7CiAgICAgIGludCBfX25vYmpzID0gMjA7CiAgICAgIGNoYXIqIF9fY2h1bmsgPSBfU19j
aHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVl
X2xpc3Q7CiAgICAgIF9PYmoqIF9fcmVzdWx0OwogICAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwog
ICAgICBfT2JqKiBfX25leHRfb2JqOwogICAgICBpbnQgX19pOwoKICAgICAgaWYgKDEgPT0gX19u
b2JqcykKICAgICAgICByZXR1cm4gX19jaHVuazsKICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19m
cmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCiAgICAgIF9fcmVzdWx0ID0gKF9P
YmoqKV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiop
KF9fY2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspCiAgICAgICAgewog
ICAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAgICAgICAgICBfX25leHRfb2Jq
ID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAgICAgICBpZiAoX19ub2Jq
cyAtIDEgPT0gX19pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jdXJyZW50X29iaiAt
PiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xp
c3RfbGluayA9IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAg
ICB9CgoKCiAgdGVtcGxhdGU8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4KICAgIHZvaWQqCiAgICBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dGhyZWFkcywgaW5zdD46OgogICAgcmVhbGxvY2F0ZSh2
b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KQogICAgewogICAgICB2
b2lkKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fY29weV9zejsKCiAgICAgIGlmIChfX29sZF9z
eiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVT
KQogICAgICAgIHJldHVybihyZWFsbG9jKF9fcCwgX19uZXdfc3opKTsKICAgICAgaWYgKF9TX3Jv
dW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikpCiAgICAgICAgcmV0dXJu
KF9fcCk7CiAgICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19uZXdfc3opOwogICAgICBfX2NvcHlf
c3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgICBtZW1j
cHkoX19yZXN1bHQsIF9fcCwgX19jb3B5X3N6KTsKICAgICAgZGVhbGxvY2F0ZShfX3AsIF9fb2xk
X3N6KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTxib29sIF9fdGhy
ZWFkcywgaW50IF9faW5zdD4KICAgIF9TVExfbXV0ZXhfbG9jawogICAgX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrCiAgICA9
IHsgezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fSB9OwoKICB0ZW1w
bGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNoYXIqIF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X1Nfc3RhcnRfZnJlZSA9IDA7CgogIHRlbXBs
YXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhciogX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19lbmRfZnJlZSA9IDA7CgogIHRlbXBsYXRl
PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgc2l6ZV90IF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKCiAgdGVtcGxhdGU8
Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB0eXBlbmFtZSBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCiAgICBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46Ol9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNU
U107CgogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsMD4gX19hbGxvYzsK
ICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwwPiBfX3NpbmdsZV9jbGll
bnRfYWxsb2M7CiMgNjQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY2xhc3MgYWxsb2NhdG9yCiAgICB7CiAgICAg
IHR5cGVkZWYgX19hbGxvYyBfQWxsb2M7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgc2l6ZV90
IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAg
ICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3Bv
aW50ZXI7CiAgICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3Qg
X1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7
IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOyB9OwoKICAgICAgYWxsb2NhdG9yKCkgdGhy
b3coKSB7fQogICAgICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQogICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0
b3I8X1RwMT4mKSB0aHJvdygpIHt9CiAgICAgIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogICAg
ICBwb2ludGVyCiAgICAgIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9f
eDsgfQoKICAgICAgY29uc3RfcG9pbnRlcgogICAgICBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBf
X3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICAgICAgX1RwKgogICAgICBhbGxvY2F0ZShz
aXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApCiAgICAgIHsKICAgICAgICBfVHAqIF9fcmV0
ID0gMDsKICAgICAgICBpZiAoX19uKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoX19uIDw9
IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICAgICAgX19yZXQgPSBzdGF0aWNfY2FzdDxfVHAq
PihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSk7CiAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICBfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgfQogICAgICAgIHJl
dHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHZvaWQKICAgICAgZGVhbGxvY2F0ZShwb2ludGVy
IF9fcCwgc2l6ZV90eXBlIF9fbikKICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24g
KiBzaXplb2YoX1RwKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0
IHRocm93KCkgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogICAgICB2b2lk
IGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAo
X192YWwpOyB9CiAgICAgIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsg
fQogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgYWxsb2NhdG9yPHZvaWQ+CiAgICB7CiAg
ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBw
dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAg
ICAgIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2b2lk
IHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVj
dCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOyB9OwogICAg
fTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8
X1QyPiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlw
ZW5hbWUgX1QyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9y
PF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQojIDc0
MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0IF9fYWxsb2NhdG9yCiAgICB7
CiAgICAgIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogICAgICB0eXBlZGVmIHNpemVfdCBz
aXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAg
dHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2lu
dGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIGNvbnN0IF9U
cCYgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5kCiAgICAgICAgeyB0
eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7IH07CgogICAgICBfX2FsbG9j
YXRvcigpIHRocm93KCkge30KICAgICAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9f
YSkgdGhyb3coKQogICAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2Fs
bG9jKSB7fQoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBfX2FsbG9jYXRv
cihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgICAgICA6
IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQoKICAgICAgfl9f
YWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICAgICAgcG9pbnRlcgogICAgICBhZGRyZXNzKHJlZmVy
ZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCiAgICAgIGNvbnN0X3BvaW50ZXIKICAg
ICAgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoK
CiAgICAgIF9UcCoKICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAw
KQogICAgICB7CiAgICAgICAgX1RwKiBfX3JldCA9IDA7CiAgICAgICAgaWYgKF9fbikKICAgICAg
ICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXpl
b2YoX1RwKSkpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHZvaWQKICAg
ICAgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgICAgeyBfX3VuZGVy
bHlpbmdfYWxsb2MuZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICAgICAg
c2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBzaXplX3Qo
LTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgICAgIHZvaWQKICAgICAgY29uc3RydWN0KHBvaW50ZXIg
X19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KCiAgICAgIHZv
aWQKICAgICAgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQogICAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0IF9fYWxsb2NhdG9yPHZvaWQsIF9B
bGxvYz4KICAgIHsKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVm
IHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsK
ICAgICAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIHZv
aWQgdmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3Ry
dWN0IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90
aGVyOyB9OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsX0Fs
bG9jPiYgX19hMSwKICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLF9BbGxvYz4m
IF9fYTIpCiAgICB7IHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyA9PSBfX2EyLl9fdW5k
ZXJseWluZ19hbGxvYzsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwg
X0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxs
b2M+JiBfX2EyKQogICAgeyByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5f
X3VuZGVybHlpbmdfYWxsb2M7IH0KCgoKCgoKCiAgdGVtcGxhdGU8aW50IGluc3Q+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0
PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JikK
ICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8aW50IF9faW5zdD4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4m
LAogICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JikK
ICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsIGNv
bnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0
IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpCiAg
ICB7IHJldHVybiBmYWxzZTsgfQojIDg5NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4K
ICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzCiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9T
X2luc3RhbmNlbGVzcyA9IGZhbHNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6
OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KICAgIGNvbnN0IGJvb2wg
X0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDE+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0
czxfVHAsIGFsbG9jYXRvcjxfVHAxPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9T
X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBf
X2FsbG9jPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0
b3JfdHlwZTsKICAgIH07CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgaW50IF9faW5zdD4K
ICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19p
bnN0PiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRy
dWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1w
bGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw
LCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7CiAgICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgog
ICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHJlYWRzLCBfX2luc3Q+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu
Y2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICBfQWxsb2NfdHlwZTsK
ICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf
X3RocmVhZHMsIF9faW5zdD4gPgogICAgICBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0IF9BbGxvY190cmFp
dHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPgogICAgewogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9j
PF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYg
X19hbGxvY2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsK
ICAgIH07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIGludCBf
X2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4g
PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwog
ICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8
X19pbnN0PiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19p
bnN0PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBfX2Rl
ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+CiAgICB7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1w
bGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAg
ICAgIF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICBhbGxvY2F0b3JfdHlwZTsKICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0Fs
bG9jPgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBfX2Rl
YnVnX2FsbG9jPF9BbGxvYz4gPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2lu
c3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2Rl
YnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRv
cjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCgoK
CgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxvY2F0b3I8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIGFsbG9jYXRvcjx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX19k
ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsMD47Cn0KIyA1NiAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvbWVtb3J5IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9jb25zdHJ1
Y3QuaCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2NvbnN0cnVjdC5o
IiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U
Mj4KICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9f
dmFsdWUpCiAgICB7IG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMShfX3ZhbHVlKTsg
fQoKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgogICAgaW5saW5lIHZvaWQKICAgIF9Db25z
dHJ1Y3QoX1QxKiBfX3ApCiAgICB7IG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMSgp
OyB9CiMgOTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAg
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19k
ZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s
YXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQojIDExMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv
cj4KICAgIGlubGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9G
b3J3YXJkSXRlcmF0b3IsIF9fdHJ1ZV90eXBlKQogICAgeyB9CgoKCgoKCiAgdGVtcGxhdGUgPGNs
YXNzIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikKICAg
IHsgX19wb2ludGVyLT5+X1RwKCk7IH0KIyAxMzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg
ICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgICAgICAgICAg
ICAgICBfVmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9W
YWx1ZV90eXBlPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgICAgICAgICAgICAg
IF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwoKICAgICAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBf
X2xhc3QsIF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yKCkpOwogICAgfQp9CiMgNTcgIi91c3IvaW5j
bHVkZS9jKysvMy4yL21lbW9yeSIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0Zvcndh
cmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAg
ICB7IHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJk
SXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAg
IHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAgICAgIHRyeSB7CiAgICAg
ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3VyKQogICAgICAg
ICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICAgICAgcmV0dXJuIF9fY3VyOwog
ICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jl
c3VsdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDEwNiAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9G
b3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFs
dWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46
OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9h
dXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKICAgIH0KCiAgaW5saW5l
IGNoYXIqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3QsIGNvbnN0IGNo
YXIqIF9fbGFzdCwgY2hhciogX19yZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jlc3VsdCwgX19m
aXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0g
X19maXJzdCk7CiAgfQoKICBpbmxpbmUgd2NoYXJfdCoKICB1bmluaXRpYWxpemVkX2NvcHkoY29u
c3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2Zp
cnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAgcmV0dXJuIF9f
cmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlh
bGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBl
KQogICAgeyBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fdW5pbml0aWFsaXpl
ZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQog
ICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICB0cnkgewogICAg
ICAgIGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVj
dCgmKl9fY3VyLCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAg
ICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9
CiAgICB9CiMgMTY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVk
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAg
IGlubGluZSB2b2lkCiAgICB1bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1
ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6
aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9fZmly
c3QsIF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBf
Rm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
VHAmIF9feCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHJldHVybiBmaWxsX24oX19maXJzdCwg
X19uLCBfX3gpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu
YW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFs
aXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQogICAg
ewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICB0cnkgewogICAgICAg
IGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYq
X19jdXIsIF9feCk7CiAgICAgICAgcmV0dXJuIF9fY3VyOwogICAgICB9CiAgICAgIGNhdGNoKC4u
LikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7CiAgICAgICAg
ICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMgMjEwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAg
ICB1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBj
b25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAg
ICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwg
X0lzX1BPRCgpKTsKICAgIH0KIyAyMjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Vu
aW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt
ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJk
SXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVy
IF9fbWlkID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7
CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0Miwg
X19sYXN0MiwgX19taWQpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAg
ICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAg
fQogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5p
bml0aWFsaXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIg
X19taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0KQogICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBf
X3gpOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJz
dCwgX19sYXN0LCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAg
ICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAgICB0aHJvdzsKICAgICAg
ICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9G
b3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFs
aXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3
YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9feCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29w
eShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIpOwogICAgICB0cnkgewogICAgICAgIHVuaW5p
dGlhbGl6ZWRfZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2go
Li4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOwogICAg
ICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKfQojIDU5ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9tZW1vcnkiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Jhd19zdG9y
YWdlX2l0ZXIuaCIgMSAzCiMgNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Jhd19z
dG9yYWdlX2l0ZXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KICBjbGFzcyByYXdfc3RvcmFnZV9pdGVyYXRvcgog
ICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9p
ZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfTV9p
dGVyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0
b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gpIDogX01faXRlcihfX3gpIHt9CgogICAgICByYXdfc3Rv
cmFnZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAg
IHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX2VsZW1l
bnQpCiAgICAgIHsKICAgICAgICBfQ29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50KTsKICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9G
b3J3YXJkSXRlcmF0b3IsIF9UcD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAg
KytfTV9pdGVyOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3X3N0b3Jh
Z2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgogICAgICBvcGVyYXRvcisrKGludCkK
ICAgICAgewogICAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9U
cD4gX190bXAgPSAqdGhpczsKICAgICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0dXJuIF9fdG1w
OwogICAgICB9CiAgICB9Owp9CiMgNjAgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMiAz
CgoKCgpuYW1lc3BhY2Ugc3RkCnsKIyA3NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAz
CnRlbXBsYXRlIDx0eXBlbmFtZSBfVHA+CnBhaXI8X1RwKiwgcHRyZGlmZl90PgpfX2dldF90ZW1w
b3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKikKewogIGlmIChfX2xlbiA+IHB0cmRp
ZmZfdCgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgX19sZW4gPSAyMTQ3NDgzNjQ3IC8g
c2l6ZW9mKF9UcCk7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9UcCogX190bXAgPSAoX1Rw
Kikgc3RkOjptYWxsb2MoKHN0ZDo6c2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgaWYg
KF9fdG1wICE9IDApCiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9f
bGVuKTsKICAgIF9fbGVuIC89IDI7CiAgfQoKICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+
KChfVHAqKTAsIDApOwp9CiMgMTA2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSBwYWlyPF9UcCoscHRyZGlmZl90PgogIGdldF90
ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikKICB7CiAgICByZXR1cm4gX19nZXRfdGVt
cG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwogIH0KIyAxMjAgIi91c3IvaW5jbHVkZS9j
KysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgdm9pZAogIHJldHVybl90
ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKQogIHsKICAgIHN0ZDo6ZnJlZShfX3ApOwogIH0KIyAx
MzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAx
PgogIHN0cnVjdCBhdXRvX3B0cl9yZWYKewogICBfVHAxKiBfTV9wdHI7CgogICBleHBsaWNpdAog
ICBhdXRvX3B0cl9yZWYoX1RwMSogX19wKQogICA6IF9NX3B0cihfX3ApIHt9Cn07CiMgMTc1ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGNs
YXNzIGF1dG9fcHRyCnsKcHJpdmF0ZToKICBfVHAqIF9NX3B0cjsKCnB1YmxpYzoKCiAgdHlwZWRl
ZiBfVHAgZWxlbWVudF90eXBlOwoKCgoKCgoKICBleHBsaWNpdAogIGF1dG9fcHRyKGVsZW1lbnRf
dHlwZSogX19wID0gMCkgdGhyb3coKQogIDogX01fcHRyKF9fcCkgeyB9CiMgMjAyICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICBhdXRvX3B0cihhdXRvX3B0ciYgX19hKSB0aHJvdygp
CiAgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CiMgMjE0ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgYXV0b19wdHIoYXV0b19w
dHI8X1RwMT4mIF9fYSkgdGhyb3coKQogICAgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CiMg
MjI2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICBhdXRvX3B0ciYKICBvcGVyYXRv
cj0oYXV0b19wdHImIF9fYSkgdGhyb3coKQogICAgewogICAgICByZXNldChfX2EucmVsZWFzZSgp
KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQojIDI0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
bWVtb3J5IiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcDE+CiAgICBhdXRvX3B0ciYKICAgIG9w
ZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpCiAgICB7CiAgICAgIHJlc2V0KF9f
YS5yZWxlYXNlKCkpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMgMjYzICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9tZW1vcnkiIDMKICB+YXV0b19wdHIoKSB7IGRlbGV0ZSBfTV9wdHI7IH0KIyAy
NzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGVsZW1lbnRfdHlwZSYKICBvcGVy
YXRvciooKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICpfTV9wdHI7IH0KCgoKCgoKCiAgZWxlbWVu
dF90eXBlKgogIG9wZXJhdG9yLT4oKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIF9NX3B0cjsgfQoj
IDI5NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgZWxlbWVudF90eXBlKgogIGdl
dCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01fcHRyOyB9CiMgMzA5ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9tZW1vcnkiIDMKICBlbGVtZW50X3R5cGUqCiAgcmVsZWFzZSgpIHRocm93KCkKICAg
IHsKICAgICAgZWxlbWVudF90eXBlKiBfX3RtcCA9IF9NX3B0cjsKICAgICAgX01fcHRyID0gMDsK
ICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQojIDMyNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVt
b3J5IiAzCiAgdm9pZAogIHJlc2V0KGVsZW1lbnRfdHlwZSogX19wID0gMCkgdGhyb3coKQogICAg
ewogICAgICBpZiAoX19wICE9IF9NX3B0cikKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgX01f
cHRyOwogICAgICAgICAgX01fcHRyID0gX19wOwogICAgICAgIH0KICAgIH0KIyAzNDUgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGF1dG9fcHRyKGF1dG9fcHRyX3JlZjxlbGVtZW50
X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX3JlZi5fTV9wdHIpIHt9CgogIGF1
dG9fcHRyJgogIG9wZXJhdG9yPShhdXRvX3B0cl9yZWY8ZWxlbWVudF90eXBlPiBfX3JlZikgdGhy
b3coKQogICAgewogICAgICBpZiAoX19yZWYuX01fcHRyICE9IHRoaXMtPmdldCgpKQogICAgICAg
IHsKICAgICAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgICAgICBfTV9wdHIgPSBfX3JlZi5fTV9w
dHI7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcDE+CiAgICBvcGVyYXRvciBhdXRvX3B0cl9yZWY8X1RwMT4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIGF1dG9fcHRyX3JlZjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcDE+CiAgICBvcGVyYXRvciBhdXRvX3B0cjxfVHAxPigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQoKfTsKCn0K
IyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyAxMDEgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9B
cmcsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCB1bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJn
IGFyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJp
bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5
cGVkZWYgX0FyZzIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3Vs
dF90eXBlOwp9OwojIDEyNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24u
aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf
VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv
bnN0IHsgcmV0dXJuIF9feCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9U
cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1
cm4gX194ICogX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7
IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw
LF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAt
X194OyB9Cn07CiMgMTczICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5o
IiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBlcXVhbF90byA6IHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194
LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID09IF9feTsgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U
cCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f
eSkgY29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IGxlc3MgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv
b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0
dXJuIF9feCA8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVy
X2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf
X3ggPj0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3NfZXF1YWwg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3Io
KShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8PSBf
X3k7IH0KfTsKIyAyMjIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgi
IDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf
X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07CgoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw
LGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJu
ICFfX3g7IH0KfTsKIyAyNzEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9u
LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0ZQogIDog
cHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUs
IGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxp
Y2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9
CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5
cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5v
dDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJl
ZGljYXRlPihfX3ByZWQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIGJp
bmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0
ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5h
bWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgog
IGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQo
X194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJz
dF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9Q
cmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJu
ICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+
CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRpY2F0ZSYg
X19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoj
IDM0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0
ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVu
Y3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJv
dGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJn
dW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBf
X3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50
X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRp
b246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1
ZSwgX194KTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJh
dG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29u
c3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCn07CgoKdGVtcGxhdGUgPGNsYXNz
IF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjFzdDxfT3BlcmF0aW9uPgpiaW5k
MXN0KGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0
dXJuIGJpbmRlcjFzdDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMV90eXBlKF9feCkpOwp9CgoKdGVt
cGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsK
cHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25k
X2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlv
biYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJn
dW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFt
ZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3Ao
X194LCB2YWx1ZSk7CiAgfQoKCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBv
cGVyYXRvcigpKHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkg
Y29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KCn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPgpi
aW5kMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBlOwog
IHJldHVybiBiaW5kZXIybmQ8X09wZXJhdGlvbj4oX19mbiwgX0FyZzJfdHlwZShfX3gpKTsKfQoj
IDQzOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0
ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b191bmFyeV9mdW5j
dGlvbiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiB7CnByb3RlY3RlZDoK
ICBfUmVzdWx0ICgqX01fcHRyKShfQXJnKTsKcHVibGljOgogIHBvaW50ZXJfdG9fdW5hcnlfZnVu
Y3Rpb24oKSB7fQogIGV4cGxpY2l0IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAo
Kl9feCkoX0FyZykpIDogX01fcHRyKF9feCkge30KICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZyBf
X3gpIGNvbnN0IHsgcmV0dXJuIF9NX3B0cihfX3gpOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9B
cmcsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9Bcmcs
IF9SZXN1bHQ+IHB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRl
cl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNs
YXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b19i
aW5hcnlfZnVuY3Rpb24gOgogIHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jl
c3VsdD4gewpwcm90ZWN0ZWQ6CiAgICBfUmVzdWx0ICgqX01fcHRyKShfQXJnMSwgX0FyZzIpOwpw
dWJsaWM6CiAgICBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbigpIHt9CiAgICBleHBsaWNpdCBw
b2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKQog
ICAgICA6IF9NX3B0cihfX3gpIHt9CiAgICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZzEgX194LCBf
QXJnMiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9NX3B0cihfX3gsIF9feSk7CiAgICB9Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KaW5s
aW5lIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+CnB0cl9m
dW4oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgewogIHJldHVybiBwb2ludGVyX3RvX2Jp
bmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1Rw
PiB7CiAgX1RwJiBvcGVyYXRvcigpKF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KICBj
b25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsKICB0eXBl
bmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAg
ICByZXR1cm4gX194LmZpcnN0OwogIH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlw
ZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZp
cnN0OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3QybmQgOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZT4K
ewogIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShfUGFpciYgX194KSBj
b25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6
OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiBfX3guc2Vjb25kOwogIH0KfTsKIyA1MjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3Mg
bWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAg
ZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQog
IF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7
IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5j
dGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5f
dChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJh
dG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnBy
aXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9U
cDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikg
Y29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9N
X2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3Rf
bWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6
CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0
KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0
IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgp
IGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0
PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9Bcmcp
KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBj
b25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6
Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNz
IF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNv
bnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90
KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9w
ZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAgeyByZXR1cm4gKF9f
cC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25z
dDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFz
cyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4g
ewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0Fy
ZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gp
IGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6
OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz
cyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVm
X3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQg
b3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3Iu
Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsK
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1
YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9m
dW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9y
KCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChf
VHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9m
dW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4g
ewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkg
Y29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkg
Y29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkg
Y29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lk
LCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBs
aWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQog
IHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZh
dGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFz
cyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAo
X1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChf
VHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAo
X1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAq
IF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2
b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihf
X3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0
IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJn
KSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1f
ZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U
cCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9U
cDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBf
X3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lk
IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJn
PgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0
X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19w
Zikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7
IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBj
b25zdDsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVt
X2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBt
ZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoq
X19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsg
fQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8
X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1f
ZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg
X1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1Jl
dCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1Jl
dCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoq
X19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0K
CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25z
dF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJn
KSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7
IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBt
ZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2Yp
KF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0K
CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25z
dF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6Oipf
X2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1Rw
LF9Bcmc+KF9fZik7IH0KCgoKfQojIDUzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIg
MwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDEgMwojIDQ0
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCgoKCm5hbWVzcGFj
ZSBzdGQKewojIDg4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBjbGFzcyBiYXNpY19zdHJpbmcKICAgIHsKCiAgICBwdWJsaWM6CiAgICAgIHR5
cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRz
OjpjaGFyX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2Vf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnJlZmVyZW5jZSByZWZlcmVuY2U7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVm
ZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cG9pbnRlciBwb2ludGVyOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVy
OwogICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgYmFz
aWNfc3RyaW5nPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0
ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIGJhc2ljX3N0cmluZz4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CiAg
ICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZl
cnNlX2l0ZXJhdG9yOwoKICAgIHByaXZhdGU6CiMgMTIzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgIHN0cnVjdCBfUmVwCiAgICAgIHsKCiAgICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxjaGFyPjo6b3RoZXIgX1Jh
d19ieXRlc19hbGxvYzsKIyAxNDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3Ry
aW5nLmgiIDMKICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIF9TX21heF9zaXplOwogICAg
ICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVybWluYWw7CgogICAgICAgIHNpemVfdHlwZSBf
TV9sZW5ndGg7CiAgICAgICAgc2l6ZV90eXBlIF9NX2NhcGFjaXR5OwogICAgICAgIF9BdG9taWNf
d29yZCBfTV9yZWZlcmVuY2VzOwoKICAgICAgICBib29sCiAgICAgICAgX01faXNfbGVha2VkKCkg
Y29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzIDwgMDsgfQoKICAgICAgICBib29s
CiAgICAgICAgX01faXNfc2hhcmVkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVu
Y2VzID4gMDsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X2xlYWtlZCgpCiAgICAgICAg
eyBfTV9yZWZlcmVuY2VzID0gLTE7IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX3NldF9zaGFy
YWJsZSgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gMDsgfQoKICAgICAgICBfQ2hhclQqCiAg
ICAgICAgX01fcmVmZGF0YSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiByZWludGVycHJldF9j
YXN0PF9DaGFyVCo+KHRoaXMgKyAxKTsgfQoKICAgICAgICBfQ2hhclQmCiAgICAgICAgb3BlcmF0
b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gX01fcmVmZGF0YSgpIFtf
X3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9ncmFiKGNvbnN0IF9BbGxvYyYgX19h
bGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpCiAgICAgICAgewogICAgICAgICAgcmV0dXJu
ICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19hbGxvYzIpCiAgICAgICAgICAgICAg
ICAgID8gX01fcmVmY29weSgpIDogX01fY2xvbmUoX19hbGxvYzEpOwogICAgICAgIH0KCgogICAg
ICAgIHN0YXRpYyBfUmVwKgogICAgICAgIF9TX2NyZWF0ZShzaXplX3QsIGNvbnN0IF9BbGxvYyYp
OwoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxsb2MmIF9fYSkKICAg
ICAgICB7CiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAt
MSkgPD0gMCkKICAgICAgICAgICAgX01fZGVzdHJveShfX2EpOwogICAgICAgIH0KCiAgICAgICAg
dm9pZAogICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsKCiAgICAgICAg
X0NoYXJUKgogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJvdygpCiAgICAgICAgewogICAgICAgICAg
X19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsKICAgICAgICAgIHJldHVybiBfTV9yZWZk
YXRhKCk7CiAgICAgICAgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fY2xvbmUoY29uc3Qg
X0FsbG9jJiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CiAgICAgIH07CgoKICAgICAgc3RydWN0IF9B
bGxvY19oaWRlciA6IF9BbGxvYwogICAgICB7CiAgICAgICAgX0FsbG9jX2hpZGVyKF9DaGFyVCog
X19kYXQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIDogX0FsbG9jKF9fYSksIF9NX3AoX19k
YXQpIHsgfQoKICAgICAgICBfQ2hhclQqIF9NX3A7CiAgICAgIH07CgogICAgcHVibGljOgoKCgog
ICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+
KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAgbXV0YWJsZSBfQWxsb2NfaGlkZXIgX01fZGF0YXBs
dXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVwX3N0b3JhZ2VbKHNpemVv
ZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yo
c2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoKSBjb25zdAogICAgICB7
IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEo
X0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJuIChfTV9kYXRhcGx1cy5fTV9wID0gX19wKTsgfQoK
ICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkgY29uc3QKICAgICAgeyByZXR1cm4gJigocmVpbnRl
cnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0KCgoKICAgICAgaXRlcmF0b3IK
ICAgICAgX01faWJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsgfQoK
ICAgICAgaXRlcmF0b3IKICAgICAgX01faWVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9N
X2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fbGVhaygpCiAg
ICAgIHsKICAgICAgICBpZiAoIV9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICAgIF9N
X2xlYWtfaGFyZCgpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9jaGVjayhzaXpl
X3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXpl
KCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpfTV9jaGVj
ayIpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgoKICAgICAg
aXRlcmF0b3IKICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX29mZikg
Y29uc3QKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b2ZmID0gX19vZmYgPCB0aGlzLT5zaXpl
KCkgLSBfX3BvczsKICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBfX3Rlc3RvZmYgPyBfX29m
ZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHJldHVybiAoX01faWJlZ2luKCkgKyBf
X3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0
b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19w
LCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9fazIpCiAgICAgICAgewogICAgICAgICAgZm9y
ICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCArK19fcCkKICAgICAgICAgICAgdHJhaXRzX3R5cGU6
OmFzc2lnbigqX19wLCAqX19rMSk7CiAgICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAg
X1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19rMikK
ICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoK
ICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3Rf
aXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2NoYXJz
KF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAg
ICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9fazIp
CiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAg
ICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0IF9D
aGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5
KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX211dGF0ZShz
aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpOwoKICAg
ICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQoKTsKCiAgICAgIHN0YXRpYyBfUmVwJgogICAgICBf
U19lbXB0eV9yZXAoKQogICAgICB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxfUmVwKj4oJl9T
X2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAgIHB1YmxpYzoKCgoKCiAgICAgIGlubGluZQogICAg
ICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZyhjb25z
dCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYg
X19zdHIpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6
ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IG5wb3MpOwog
ICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f
cG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2Ep
OwoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLAog
ICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAgIGJh
c2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2Mo
KSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBf
QWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRl
cmF0b3IgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0Fs
bG9jKCkpOwoKICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAgIHsgX01fcmVwKCktPl9NX2Rpc3Bv
c2UodGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBv
cGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXNzaWdu
KF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgX0No
YXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9CgogICAgICBiYXNpY19zdHJp
bmcmCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oMSwg
X19jKTsgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkKICAgICAgewogICAgICAgIF9N
X2xlYWsoKTsKICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsKICAgICAgfQoKICAg
ICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25z
dF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlbmQoKQogICAg
ICB7CiAgICAgICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEo
KSArIHRoaXMtPnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVu
ZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMt
PnNpemUoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkKICAgICAg
eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IK
ICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4o
KSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAg
ICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9N
X3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg
bWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsgfQoKICAgICAgdm9p
ZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB2b2lkCiAg
ICAgIHJlc2l6ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgpKTsg
fQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gX01fcmVw
KCktPl9NX2NhcGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAgIHJlc2VydmUoc2l6ZV90eXBlIF9f
cmVzX2FyZyA9IDApOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpIHsgX01fbXV0YXRlKDAsIHRo
aXMtPnNpemUoKSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdCB7IHJldHVy
biB0aGlzLT5zaXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBvcGVy
YXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGEoKVtf
X3Bvc107IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX3Bv
cykKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19f
cG9zXTsKICAgICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBf
X24pIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAg
ICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAgcmV0
dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgogICAgICByZWZlcmVuY2UKICAgICAgYXQoc2l6
ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPj0gc2l6ZSgpKQogICAgICAgICAg
X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAgICBfTV9sZWFr
KCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0
dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3Bl
cmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcyk7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShfQ2hhclQgX19jKSB7IHJldHVy
biB0aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcm
CiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChj
b25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXBwZW5k
KF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXBwZW5k
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xh
c3QpOyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhfQ2hhclQgX19jKQogICAgICB7IHRo
aXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7IH0KCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6
ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3MgPiBfX3N0cnNp
emUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphc3NpZ24i
KTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3BvczsK
ICAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdzaXplID0gX190ZXN0biA/IF9fbiA6IF9fc3Ry
c2l6ZSAtIF9fcG9zOwogICAgICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIuX01fZGF0YSgp
ICsgX19wb3MsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg
YXNzaWduKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAg
aWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJv
cigiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3No
YXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAg
ICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSwgX19z
KSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCksIF9NX2llbmQo
KSwgX19zLCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKCiAgICAgICAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX3BvcyA9IF9fcyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAgaWYg
KF9fcG9zID49IF9fbikKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9kYXRhKCks
IF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19wb3MpCiAgICAgICAgICAgICAgdHJh
aXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpLCBfX3MsIF9fbik7CiAgICAgICAgICAgIF9NX3JlcCgp
LT5fTV9sZW5ndGggPSBfX247CiAgICAgICAgICAgIF9NX2RhdGEoKVtfX25dID0gX1JlcDo6X1Nf
dGVybWluYWw7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgIH0KICAgICAgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCiAgICAg
IHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBf
X2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwg
X19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2li
ZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAg
aW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyB0
aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0
SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQogICAgICAgIHsgdGhpcy0+cmVw
bGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAg
ICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIsIDAsIF9fc3RyLnNpemUoKSk7
IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBz
aXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9
IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQogICAgICAgICAg
X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgY29u
c3QgYm9vbCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19wb3MyOwogICAgICAgIGNvbnN0
IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3My
OwogICAgICAgIHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ci5fTV9kYXRhKCkgKyBf
X3BvczIsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5z
ZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAg
ICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg
ICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi
YXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgIGlmIChfX3NpemUgPiB0aGlzLT5tYXhfc2l6
ZSgpIC0gX19uKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6
aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBsZXNzPGNv
bnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8IGxlc3M8Y29uc3Qg
X0NoYXJUKj4oKShfTV9kYXRhKCkgKyBfX3NpemUsIF9fcykpCiAgICAgICAgICByZXR1cm4gX01f
cmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uKTsKICAgICAgICBl
bHNlCiAgICAgICAgICB7CgoKCiAgICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29mZiA9IF9f
cyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAgX01fbXV0YXRlKF9fcG9zLCAwLCBfX24pOwogICAg
ICAgICAgICBfX3MgPSBfTV9kYXRhKCkgKyBfX29mZjsKICAgICAgICAgICAgX0NoYXJUKiBfX3Ag
PSBfTV9kYXRhKCkgKyBfX3BvczsKICAgICAgICAgICAgaWYgKF9fcyArIF9fbiA8PSBfX3ApCiAg
ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9fbik7CiAgICAgICAgICAg
IGVsc2UgaWYgKF9fcyA+PSBfX3ApCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19w
LCBfX3MgKyBfX24sIF9fbik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywgX19wIC0gX19zKTsKICAgICAg
ICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCArIChfX3AgLSBfX3MpLCBfX3AgKyBfX24s
IF9fbiAtIChfX3AgLSBfX3MpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAq
dGhpczsKICAgICAgICAgIH0KICAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5z
ZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRo
aXMtPmluc2VydChfX3BvcywgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24sIF9DaGFyVCBfX2MpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19w
b3MpLCBfX24sIF9fYyk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBpdGVy
YXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfQ2hhclQgX19jID0gX0NoYXJUKCkpCiAg
ICAgIHsKICAgICAgICBzaXplX3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVnaW4oKTsKICAgICAg
ICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBzaXplX3R5cGUoMSksIF9fYyk7CiAgICAg
ICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4gdGhpcy0+X01faWJl
Z2luKCkgKyBfX3BvczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBlcmFzZShz
aXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykKICAgICAgewogICAgICAg
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19u
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAg
ICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAg
ICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19wb3NpdGlvbiAtIF9NX2liZWdpbigpOwog
ICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIDEsIF9NX2RhdGEo
KSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAg
IHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAg
ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgICB7CiAgICAgICAg
c2l6ZV90eXBlIF9faSA9IF9fZmlyc3QgLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5yZXBs
YWNlKF9fZmlyc3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3Jl
cCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7CiAg
ICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3Ms
IHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJu
IHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5zaXplKCkp
OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwg
c2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICAg
c2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFy
VCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKQogICAgICB7CiAgICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBpZiAoX19wb3MgPiBf
X3NpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpyZXBs
YWNlIik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuMSA9IF9fbjEgPCBfX3NpemUgLSBfX3Bv
czsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19mb2xkbjEgPSBfX3Rlc3RuMSA/IF9fbjEgOiBf
X3NpemUgLSBfX3BvczsKICAgICAgICBpZiAoX19zaXplIC0gX19mb2xkbjEgPiB0aGlzLT5tYXhf
c2l6ZSgpIC0gX19uMikKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJp
bmc6OnJlcGxhY2UiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IGxl
c3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAgICAgfHwgbGVzczxj
b25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAgICAgICAgIHJldHVy
biBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX01faWJlZ2luKCkgKyBfX3BvcyArIF9fZm9sZG4xLCBfX3MsIF9fcyAr
IF9fbjIpOwoKICAgICAgICBlbHNlIHJldHVybgogICAgICAgICAgICAgICBfTV9yZXBsYWNlKF9N
X2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3MgKyBfX2ZvbGRuMSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9DaGFyVCo+OjppdGVyYXRvcl9j
YXRlZ29yeSgpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24xLCBfX3MsIHRyYWl0c190eXBlOjpsZW5n
dGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUg
X19wb3MsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAgICAg
eyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9f
bjEpLCBfX24yLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRl
cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAg
ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3N0ci5fTV9kYXRhKCksIF9f
c3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRv
ciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShf
X2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9fbik7IH0KCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25z
dCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBf
X3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg
ICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uLCBf
Q2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9f
aTIsCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRvciBf
X2syKQogICAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwgX19pMiwgX19rMSwgX19rMiwK
ICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0
ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgoKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFj
ZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19r
MikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19p
MiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLCBfX2syIC0gX19r
MSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBp
dGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKICAg
ICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9f
aTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLCBfX2syIC0gX19rMSk7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRv
ciBfX2kyLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIHRo
aXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19rMSk7CiAgICAgICAgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y
IF9faTIsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAgICAgICAg
eyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9fazIgLSBfX2sxKTsK
ICAgICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19p
MSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogICAgICB0ZW1wbGF0
ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBf
TV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVy
YXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2syKTsKCgoK
ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg
ICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3Qg
X0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICAg
ICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0luSXRlcj46
Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KF9f
YmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNz
IF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3RfYXV4
KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAg
ICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgcmV0dXJu
IF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX19lbmQpLCBfX2EpOwog
ICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9D
aGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwg
Y29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
SXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgICAgIHJldHVy
biBfU19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBfSW50ZWdyYWwoKSk7CiAgICAg
ICAgfQoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFy
VCoKICAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNv
bnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn
KTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFy
VCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXIgX19iZWcsIF9Gd2RJdGVyIF9fZW5kLCBj
b25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90
YWcpOwoKICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBf
X3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOwoKICAgIHB1YmxpYzoKCiAgICAg
IHNpemVfdHlwZQogICAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5
cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgc3dhcChiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MpOwoKCiAgICAgIGNvbnN0IF9DaGFyVCoKICAg
ICAgY19zdHIoKSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlzLT5z
aXplKCk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKClbX19uXSwgX1JlcDo6
X1NfdGVybWluYWwpOwogICAgICAgIHJldHVybiBfTV9kYXRhKCk7CiAgICAgIH0KCiAgICAgIGNv
bnN0IF9DaGFyVCoKICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEoKTsgfQoKICAg
ICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9N
X2RhdGFwbHVzOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlw
ZQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9
IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zdHIuZGF0YSgpLCBfX3Bvcywg
X19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZp
bmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7Cgog
ICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6
ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19z
dHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg
IHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p
IGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBz
aXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChf
X3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7Cgog
ICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5k
X2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNp
emVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg
X19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf
Zmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6
Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoX0No
YXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19z
dHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAg
IHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihf
X3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXpl
X3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg
c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJz
dF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5
cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24pIGNvbnN0OwoK
ICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2Zp
cnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAg
ICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBl
IF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9v
Zihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19w
b3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90
X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xh
c3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0
c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rf
bm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OwoKICAgICAg
YmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUg
X19uID0gbnBvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUo
KSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnN1YnN0ciIp
OwogICAgICAgIHJldHVybiBiYXNpY19zdHJpbmcoKnRoaXMsIF9fcG9zLCBfX24pOwogICAgICB9
CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25z
dAogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAg
ICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBzaXplX3R5cGUgX19s
ZW4gPSBtaW4oX19zaXplLCBfX29zaXplKTsKCiAgICAgICAgaW50IF9fciA9IHRyYWl0c190eXBl
Ojpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAgICAgICAgaWYgKCFf
X3IpCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAgICAgIHJldHVybiBfX3I7
CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90
eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7CgogICAgICBpbnQKICAg
ICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUg
X19uMikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykg
Y29uc3Q7CgoKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90
eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21w
YXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAog
ICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsKICB9OwoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJp
bmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCksIF9BbGxv
YygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAg
ICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1Ry
YWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAg
ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRv
cisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j
PiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAg
ewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhz
KTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAg
ICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3N0cmluZ190
eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX3Jo
cyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9DaGFyVCogX19s
aHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPT0gMDsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hh
clQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jo
cy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5j
b21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
IT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg
ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21w
YXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwo
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAg
ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19y
aHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAg
ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJl
dHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK
ICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgX0No
YXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX0NoYXJUKiBfX2xocywKICAg
ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDwgMDsgfQoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21w
YXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0o
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAg
ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJl
KF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29u
c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xo
cykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg
ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg
ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7
IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgIGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1
cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAog
ICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAg
ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7
IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f
aXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBv
cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKICAgICAgICAg
ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIp
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSk7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGlu
ZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKfQojIDU0ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYWxn
b3JpdGhtIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYWxnb3JpdGhtIiAzCgoKCgoj
IDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMSAzCiMgNjQgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2hlYXAuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAg
dm9pZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBf
VHAgX192YWx1ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4
IC0gMSkgLyAyOwogICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmICooX19m
aXJzdCArIF9fcGFyZW50KSA8IF9fdmFsdWUpIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJ
bmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3Bh
cmVudDsKICAgICAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgfQog
ICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgcHVz
aF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
UmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0
b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAg
ICAgCgogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBf
X2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICBfVmFsdWVU
eXBlKCooX19sYXN0IC0gMSkpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcCwKICAgICAgICAg
ICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAg
ICB7CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAg
ICAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBfX2NvbXAoKihfX2ZpcnN0ICsg
X19wYXJlbnQpLCBfX3ZhbHVlKSkgewogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9
ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50Owog
ICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB9CiAgICAgICoo
X19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUg
dm9pZAogICAgcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAg
IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5j
ZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoKICAgICAgX19wdXNoX2hl
YXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3Rh
bmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSwg
X19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
LCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fYWRqdXN0
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRl
eCwKICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSkKICAgIHsK
ICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICAgICAgX0Rpc3RhbmNl
IF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogICAgICB3aGlsZSAoX19zZWNv
bmRDaGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYgKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQp
IDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpCiAgICAgICAgICBfX3NlY29uZENo
aWxkLS07CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19z
ZWNvbmRDaGlsZCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgICAg
IF9fc2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsKICAgICAgfQogICAgICBp
ZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgICAgICooX19maXJzdCArIF9faG9sZUlu
ZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpOwogICAgICAgIF9faG9sZUlu
ZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgICAgIH0KICAgICAgX19wdXNoX2hlYXAoX19maXJz
dCwgX19ob2xlSW5kZXgsIF9fdG9wSW5kZXgsIF9fdmFsdWUpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2
b2lkCiAgICBfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX0Rp
c3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgX19hZGp1c3RfaGVhcChf
X2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1
ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAg
IGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFs
dWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3Qg
LSAxLCBfX2xhc3QgLSAxLCBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpKTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2Us
CiAgICAgICAgICAgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAg
IF9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBf
X2hvbGVJbmRleCwKICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1
ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9f
aG9sZUluZGV4OwogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRl
eCArIDI7CiAgICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgICAgICBpZiAo
X19jb21wKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpLCAqKF9fZmlyc3QgKyAoX19zZWNvbmRD
aGlsZCAtIDEpKSkpCiAgICAgICAgICBfX3NlY29uZENoaWxkLS07CiAgICAgICAgKihfX2ZpcnN0
ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICAgICAgX19o
b2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgICAgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9f
c2Vjb25kQ2hpbGQgKyAxKTsKICAgICAgfQogICAgICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xl
bikgewogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3Nl
Y29uZENoaWxkIC0gMSkpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7
CiAgICAgIH0KICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9fdG9wSW5k
ZXgsIF9fdmFsdWUsIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGlu
ZSB2b2lkCiAgICBfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46
OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog
ICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFz
dCAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fdmFsdWUsIF9fY29tcCk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Nv
bXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29t
cGFyZSBfX2NvbXApCiAgICB7CgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsK
ICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVmFsdWVU
eXBlKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRv
cj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw
ZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2xh
c3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gX19s
YXN0IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX3BhcmVudCA9IChfX2xlbiAtIDIp
LzI7CgogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwg
X19wYXJlbnQsIF9fbGVuLCBfVmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50KSkpOwogICAg
ICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICAgICAgX19wYXJlbnQtLTsKICAgICAg
fQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIG1ha2VfaGVhcChfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9W
YWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsK
CgogICAgIAoKCiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogICAgICBf
RGlzdGFuY2VUeXBlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlVHlw
ZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CgogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
IF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLAogICAgICAgICAgICAgICAg
ICAgICAgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpLCBfX2NvbXApOwogICAgICAg
IGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICAgICAgX19wYXJlbnQtLTsKICAgICAgfQog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICB2b2lk
CiAgICBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CgogICAgIAoKICAgICAKCgogICAgICB3aGlsZSAoX19s
YXN0IC0gX19maXJzdCA+IDEpCiAgICAgICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0pOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgdm9pZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3Qg
PiAxKQogICAgICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tLCBfX2NvbXApOwogICAgfQoK
fQojIDY1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDIgMwojIDEgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMgNjQgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX3RlbXBidWYuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA3NCAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CiAgY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIK
ewoKIAoKICBwdHJkaWZmX3QgX01fb3JpZ2luYWxfbGVuOwogIHB0cmRpZmZfdCBfTV9sZW47CiAg
X1RwKiBfTV9idWZmZXI7CgoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29y
aWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+
IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICAgIF9NX2xlbiA9IDIx
NDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01fbGVuID4gMCkgewogICAgICBf
TV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVvZihfVHApKTsKICAgICAgaWYg
KF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAgX01fbGVuIC89IDI7CiAgICB9CiAgfQoK
ICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQog
IHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkg
ewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoK
cHVibGljOgoKICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQoKICBw
dHJkaWZmX3QgcmVxdWVzdGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47
IH0KCiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQoKICBfVHAqIGVuZCgpIHsg
cmV0dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CgogICAgdHlwZWRl
ZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3IKICAgICAgICAgICAgX1RyaXZpYWw7CgogICAgdHJ5IHsKICAgICAgX01fbGVuID0gZGlz
dGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX01fYWxsb2NhdGVfYnVmZmVyKCk7CiAgICAg
IGlmIChfTV9sZW4gPiAwKQogICAgICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBf
VHJpdmlhbCgpKTsKICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIGZyZWUoX01f
YnVmZmVyKTsKICAgICAgICBfTV9idWZmZXIgPSAwOwogICAgICAgIF9NX2xlbiA9IDA7CiAgICAg
ICAgdGhyb3c7CiAgICAgIH0KICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIF9EZXN0
cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsgX01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsK
ICB9Cgpwcml2YXRlOgoKICBfVGVtcG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZl
ciYpIHt9CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQp9OwoK
fQojIDY2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDIgMwoKCgpuYW1l
c3BhY2Ugc3RkCnsKIyA4NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSBjb25zdCBfVHAmCiAgICBfX21lZGlh
bihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jKQogICAgewoK
ICAgICAKICAgICAgaWYgKF9fYSA8IF9fYikKICAgICAgICBpZiAoX19iIDwgX19jKQogICAgICAg
ICAgcmV0dXJuIF9fYjsKICAgICAgICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgICAgICByZXR1
cm4gX19jOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYg
KF9fYSA8IF9fYykKICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2IgPCBfX2Mp
CiAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfX2I7CiAgICB9
CiMgMTE4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYK
ICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBf
X2MsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2NvbXAoX19hLCBf
X2IpKQogICAgICAgIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYjsK
ICAgICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYzsK
ICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2NvbXAo
X19hLCBfX2MpKQogICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fY29tcChfX2Is
IF9fYykpCiAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfX2I7
CiAgICB9CiMgMTUwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRnVuY3Rpb24+CiAgICBfRnVu
Y3Rpb24KICAgIGZvcl9lYWNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
IF9GdW5jdGlvbiBfX2YpCiAgICB7CgogICAgIAogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpCiAgICAgICAgX19mKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZjsK
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICBpbnB1dF9p
dGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpf
X2ZpcnN0ID09IF9fdmFsKSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0
OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Q
cmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9pZihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwK
ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJz
dCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAg
ICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAg
ICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
Pjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9fZmly
c3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3Vu
dCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAg
ICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2Zp
cnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy
ZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9
PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAg
ICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKCpf
X2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAg
IGNhc2UgMjoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Owog
ICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmICgqX19maXJzdCA9PSBf
X3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRl
PgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9f
cHJlZCwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAg
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSBfX3RyaXBfY291bnQKICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAg
ICAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgICAgICBp
ZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoK
ICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytf
X2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAg
ICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9f
Zmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBzd2l0Y2goX19sYXN0IC0g
X19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJl
dHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlm
IChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAg
ICAgIGNhc2UgMToKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7
CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAg
cmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDI4OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h
bWUgX1RwPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCiAg
ICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAzMDkgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5
cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9pZihfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRl
IF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZF9pZihfX2ZpcnN0
LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMg
MzI5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAog
ICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7
CiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4
dCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAgICAgICAg
IHJldHVybiBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAg
cmV0dXJuIF9fbGFzdDsKICAgIH0KIyAzNTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0Jp
bmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgYWRqYWNlbnRfZmluZChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0Jp
bmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgX0Zvcndh
cmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkg
ewogICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKICAgICAgICAg
IHJldHVybiBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAg
cmV0dXJuIF9fbGFzdDsKICAgIH0KIyAzODcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4K
ICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBl
CiAgICBjb3VudChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBf
VHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKICAgICAgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgqX19maXJz
dCA9PSBfX3ZhbHVlKQogICAgICAgICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMg
NDExICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50X2lmKF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQog
ICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAg
ICsrX19uOwogICAgICByZXR1cm4gX19uOwogICAgfQojIDQ1MCAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwg
dHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIHNlYXJjaChfRm9y
d2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0Zv
cndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAK
ICAgICAKICAgICAKCgoKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3Qy
ID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgICAgIF9Gb3J3YXJkSXRl
cjIgX190bXAoX19maXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBpZiAoX190bXAgPT0gX19s
YXN0MikKICAgICAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsK
CgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogICAgICBfX3AxID0gX19maXJzdDI7
ICsrX19wMTsKCiAgICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogICAg
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgIF9fZmlyc3QxID0gZmluZChf
X2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19s
YXN0MSkKICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAg
ICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwogICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xh
c3QxKQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIHdoaWxlICgqX19jdXJyZW50
ID09ICpfX3ApIHsKICAgICAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgICAgICBy
ZXR1cm4gX19maXJzdDE7CiAgICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAg
ICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgICAgfQoKICAgICAgICArK19fZmlyc3QxOwog
ICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgIH0KIyA1MjIgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0Zv
cndhcmRJdGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRl
cjEgX19sYXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0
ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVkaWNhdGUpCiAgICB7Cgog
ICAgIAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19m
aXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0Zvcndh
cmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9
PSBfX2xhc3QyKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJl
ZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAg
ICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICB9CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwg
X19wOwoKICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIx
IF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEp
IHsKICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgICAgaWYgKF9f
cHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytf
X2ZpcnN0MTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgIHJldHVy
biBfX2xhc3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAgICAgIF9fY3VycmVudCA9IF9fZmly
c3QxOwogICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsK
CiAgICAgICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAgICAg
ICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAg
ICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX2xh
c3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1cm4g
X19maXJzdDE7CiAgICB9CiMgNTk2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2Vy
LCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19j
b3VudCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKICAgICAg
aWYgKF9fY291bnQgPD0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSB7CiAg
ICAgICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50
IC0gMTsKICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICAgICAgKytf
X2k7CiAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAqX19pID09
IF9fdmFsKSB7CiAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICAtLV9fbjsKICAgICAgICAg
IH0KICAgICAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBfX3Zh
bCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2NDMg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcCwKICAgICAg
ICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZD4KICAgIF9Gb3J3YXJkSXRlcgogICAgc2VhcmNoX24o
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBf
SW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgX0JpbmFyeVBy
ZWQgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fY291bnQg
PD0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSB7CiAgICAgICAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJz
dCwgX192YWwpKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgICsrX19maXJzdDsKICAgICAg
ICB9CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBfSW50ZWdl
ciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0
OwogICAgICAgICAgKytfX2k7CiAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24g
IT0gMCAmJiBfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkgewogICAgICAgICAgICArK19faTsK
ICAgICAgICAgICAgLS1fX247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19uID09IDApCiAg
ICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHdo
aWxlIChfX2kgIT0gX19sYXN0KSB7CiAgICAgICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9f
aSwgX192YWwpKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgKytfX2k7CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgX19maXJzdCA9IF9faTsKICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDY5NyAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjIKICAgIHN3
YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAg
IAogICAgIAoKCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytf
X2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3Qy
KTsKICAgICAgcmV0dXJuIF9fZmlyc3QyOwogICAgfQojIDczMiAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw
ZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9VbmFyeU9wZXJhdGlvbj4KICAgIF9PdXRwdXRJ
dGVyCiAgICB0cmFuc2Zvcm0oX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3BlcmF0aW9uIF9fdW5h
cnlfb3ApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gX191bmFyeV9v
cCgqX19maXJzdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3NjUgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAg
ICAgICAgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KICAgIF9PdXRwdXRJdGVyCiAgICB0cmFu
c2Zvcm0oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg
ICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCiAgICB7CgogICAgIAogICAgIAog
ICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsr
X19maXJzdDIsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gX19iaW5hcnlfb3AoKl9f
Zmlyc3QxLCAqX19maXJzdDIpOwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgNzk2ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2UoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgIGNvbnN0IF9U
cCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAg
IAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg
ICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlKQogICAgICAgICAgKl9fZmlyc3QgPSBf
X25ld192YWx1ZTsKICAgIH0KIyA4MjUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRp
Y2F0ZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBf
X3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAK
CgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYg
KF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwogICAg
fQojIDg1NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9U
cD4KICAgIF9PdXRwdXRJdGVyCiAgICByZXBsYWNlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3
X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0ID09IF9fb2xkX3ZhbHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0
dXJuIF9fcmVzdWx0OwogICAgfQojIDg4OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1
dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlwZW5hbWUgX1RwPgogICAg
X091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3Zh
bHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fcHJl
ZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1
bHQ7CiAgICB9CiMgOTE4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAg
ICB2b2lkCiAgICBnZW5lcmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwgX0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgZm9yICgg
OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4o
KTsKICAgIH0KIyA5NDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUg
X0dlbmVyYXRvcj4KICAgIF9PdXRwdXRJdGVyCiAgICBnZW5lcmF0ZV9uKF9PdXRwdXRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCgoKCiAgICAg
IGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICAgICAqX19maXJzdCA9IF9f
Z2VuKCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDk2OSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICBy
ZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsK
CiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCkKICAgICAgICBpZiAoISgqX19maXJzdCA9PSBfX3ZhbHVlKSkgewogICAgICAgICAg
Kl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAg
ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIHJl
bW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAg
ICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0
OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCFfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAg
ICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt
ZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHJlbW92ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7
CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xh
c3QsIF9fdmFsdWUpOwogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0
dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiByZW1vdmVfY29weSgrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ZhbHVlKTsKICAg
IH0KIyAxMDczICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9y
d2FyZEl0ZXIKICAgIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAg
ICAgCgoKICAgICAgX19maXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOwog
ICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3QgPT0g
X19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVf
Y29weV9pZigrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOwogICAgfQoKCgoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9P
dXRwdXRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg
ICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsK
ICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xh
c3QpCiAgICAgICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFs
dWUgPSAqX19maXJzdDsKICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9
CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAg
IF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBm
b3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog
ICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoISgqX19yZXN1bHQg
PT0gKl9fZmlyc3QpKQogICAgICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0
dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTE0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091
dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0
ZXJUeXBlOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAg
ICAgIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9JdGVy
VHlwZSgpKTsKICAgIH0KIyAxMTcwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl
ciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9PdXRwdXRJdGVyCiAgICBfX3VuaXF1
ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJl
ZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgIG91dHB1dF9pdGVyYXRvcl90
YWcpCiAgICB7CgogICAgIAoKCgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcj46OnZhbHVlX3R5cGUgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqX19yZXN1bHQgPSBf
X3ZhbHVlOwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoIV9f
YmluYXJ5X3ByZWQoX192YWx1ZSwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBfX3ZhbHVlID0gKl9f
Zmlyc3Q7CiAgICAgICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgICAgfQogICAgICBy
ZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KIyAxMTk5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIK
ICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgIGZvcndh
cmRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5h
cnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAg
ICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTIzMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h
bWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgX091
dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVy
YXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJl
dHVybiBfX3Jlc3VsdDsKICAgICAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0
LApfX3Jlc3VsdCwgX19iaW5hcnlfcHJlZCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDEyNjMgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgdW5pcXVlKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAgICAgCiAgICAgICAgIAoK
CiAgICAgICAgICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QpOwogICAg
ICAgICAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7CiAgICB9
CiMgMTI5MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAg
X0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAg
ewoKICAgICAKICAgICAKCgoKICAgICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwg
X19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICAgICAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3Qs
IF9fbGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJlZCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAg
ICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwg
X19maXJzdCA9PSAtLV9fbGFzdCkKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7CiAg
ICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9p
ZAogICAgX19yZXZlcnNlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0KQogICAgICAg
ICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7CiAgICB9CiMgMTM0OSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp
ZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJldmVyc2UoX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgICAg
ICAKCiAgICAgICAgICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsKICAgIH0KIyAxMzc0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVu
YW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHJldmVyc2VfY29weShfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAg
ICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgLS1fX2xhc3Q7
CiAgICAgICAgKl9fcmVzdWx0ID0gKl9fbGFzdDsKICAgICAgICArK19fcmVzdWx0OwogICAgICB9
CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAxMzk5ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXVjbGlkZWFuUmluZ0Vs
ZW1lbnQ+CiAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQKICAgIF9fZ2NkKF9FdWNsaWRlYW5SaW5n
RWxlbWVudCBfX20sIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCiAgICB7CiAgICAgIHdoaWxl
IChfX24gIT0gMCkgewogICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX3QgPSBfX20gJSBf
X247CiAgICAgICAgX19tID0gX19uOwogICAgICAgIF9fbiA9IF9fdDsKICAgICAgfQogICAgICBy
ZXR1cm4gX19tOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4K
ICAgIHZvaWQKICAgIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKChfX2Zp
cnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47
CgogICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBfX21pZGRsZTsKICAgICAgZG8gewogICAg
ICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAgIGlmIChfX2ZpcnN0ID09
IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAgICAgfSB3aGlsZSAo
X19maXJzdDIgIT0gX19sYXN0KTsKCiAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CgogICAgICB3
aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KSB7CiAgICAgICAgc3dhcCgqX19maXJzdCsrLCAqX19m
aXJzdDIrKyk7CiAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgICAgICBfX21p
ZGRsZSA9IF9fZmlyc3QyOwogICAgICAgIGVsc2UgaWYgKF9fZmlyc3QyID09IF9fbGFzdCkKICAg
ICAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X21pZGRsZSwKICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlm
ICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAg
cmV0dXJuOwoKICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZygpKTsKICAgICAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwoKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRk
bGUgJiYgX19taWRkbGUgIT0gX19sYXN0KQogICAgICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9f
bGFzdCk7CgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkgewogICAgICAgIF9fcmV2ZXJz
ZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAg
fQogICAgICBlbHNlIHsKICAgICAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRk
bGUsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKChfX2Zp
cnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47
CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoK
ICAgICAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBf
X2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7
CgogICAgICBpZiAoX19rID09IF9fbCkgewogICAgICAgIHN3YXBfcmFuZ2VzKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBfRGlzdGFu
Y2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICAgICAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsg
X19pIDwgX19kOyBfX2krKykgewogICAgICAgIF9WYWx1ZVR5cGUgX190bXAgPSAqX19maXJzdDsK
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0OwoKICAgICAgICBpZiAoX19r
IDwgX19sKSB7CiAgICAgICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19k
OyBfX2orKykgewogICAgICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9fbCkgewogICAgICAg
ICAgICAgICpfX3AgPSAqKF9fcCAtIF9fbCk7CiAgICAgICAgICAgICAgX19wIC09IF9fbDsKICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICAgICAg
X19wICs9IF9fazsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAg
ICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19rL19fZCAtIDE7IF9faiArKykgewog
ICAgICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAgICAgICAgICAgKl9fcCA9
ICooX19wICsgX19rKTsKICAgICAgICAgICAgICBfX3AgKz0gX19rOwogICAgICAgICAgICB9Cgog
ICAgICAgICAgICAqX19wID0gKiAoX19wIC0gX19sKTsKICAgICAgICAgICAgX19wIC09IF9fbDsK
ICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICpfX3AgPSBfX3RtcDsKICAgICAgICArK19f
Zmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNTYxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUg
dm9pZAogICAgcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRk
bGUsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAoKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0
ZXJUeXBlOwogICAgICBfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfSXRlclR5
cGUoKSk7CiAgICB9CiMgMTU4OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl
cj4KICAgIF9PdXRwdXRJdGVyCiAgICByb3RhdGVfY29weShfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFz
dCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHJldHVy
biBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fcmVzdWx0
KSk7CiAgICB9CiMgMTYxMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIF9EaXN0YW5jZQogICAg
X19yYW5kb21fbnVtYmVyKF9EaXN0YW5jZSBfX24pCiAgICB7CgogICAgICByZXR1cm4gbHJhbmQ0
OCgpICUgX19uOwoKCgogICAgfQojIDE2MzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5s
aW5lIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19m
aXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ksIF9f
Zmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQojIDE2
NjAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUmFuZG9tTnVtYmVyR2VuZXJhdG9y
PgogICAgdm9pZAogICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJl
ckdlbmVyYXRvciYgX19yYW5kKQogICAgewoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpIHJldHVybjsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0
ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaXRlcl9zd2FwKF9faSwgX19maXJz
dCArIF9fcmFuZCgoX19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJk
SXRlcgogICAgX19wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAg
IGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
IHJldHVybiBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAg
aWYgKCsrX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICAgICAgX0ZvcndhcmRJ
dGVyIF9fbmV4dCA9IF9fZmlyc3Q7CgogICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQog
ICAgICAgIGlmIChfX3ByZWQoKl9fbmV4dCkpIHsKICAgICAgICAgIHN3YXAoKl9fZmlyc3QsICpf
X25leHQpOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIH0KCiAgICAgIHJldHVybiBfX2Zp
cnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwg
dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcgogICAgX19wYXJ0aXRp
b24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
IHdoaWxlICh0cnVlKQogICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgICAg
ICByZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAg
ICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBp
ZiAoIV9fcHJlZCgqX19sYXN0KSkKICAgICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgICBlbHNl
CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwog
ICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgfQojIDE3NDggIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg
dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHBhcnRpdGlv
bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIF9f
cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f
Zmlyc3QpKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0
eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIK
ICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0
ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbikKICAgIHsKICAgICAgaWYgKF9fbGVuID09IDEpCiAg
ICAgICAgcmV0dXJuIF9fcHJlZCgqX19maXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogICAgICBf
Rm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICBhZHZhbmNlKF9fbWlkZGxlLCBf
X2xlbiAvIDIpOwogICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9faW5wbGFjZV9zdGFibGVf
cGFydGl0aW9uKF9fZmlyc3QsIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIpOwogICAgICBfRm9y
d2FyZEl0ZXIgX19lbmQgPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbGVuIC0gX19sZW4gLyAyKTsKICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxl
LCBfX2VuZCk7CiAgICAgIGFkdmFuY2UoX19iZWdpbiwgZGlzdGFuY2UoX19taWRkbGUsIF9fZW5k
KSk7CiAgICAgIHJldHVybiBfX2JlZ2luOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAg
ICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3N0YWJs
ZV9wYXJ0aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs
IF9EaXN0YW5jZSBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRl
ciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19i
dWZmZXJfc2l6ZSkKICAgIHsKICAgICAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsKICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsKICAgICAgICBfUG9pbnRlciBf
X3Jlc3VsdDIgPSBfX2J1ZmZlcjsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsg
KytfX2ZpcnN0KQogICAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICAg
Kl9fcmVzdWx0MSA9ICpfX2ZpcnN0OwogICAgICAgICAgICArK19fcmVzdWx0MTsKICAgICAgICAg
IH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7CiAg
ICAgICAgICAgICsrX19yZXN1bHQyOwogICAgICAgICAgfQogICAgICAgIGNvcHkoX19idWZmZXIs
IF9fcmVzdWx0MiwgX19yZXN1bHQxKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQxOwogICAgICB9
CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAg
ICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgICAgICBfRm9yd2FyZEl0ZXIg
X19iZWdpbiA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19sZW4gLyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19lbmQgPSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoIF9fbWlk
ZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1
ZmZlcl9zaXplKTsKICAgICAgICByb3RhdGUoX19iZWdpbiwgX19taWRkbGUsIF9fZW5kKTsKICAg
ICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICAg
IHJldHVybiBfX2JlZ2luOwogICAgICB9CiAgICB9CiMgMTg0OCAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0
eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBzdGFibGVfcGFydGl0aW9u
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlCiAg
ICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0
ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7
CgogICAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1ZhbHVlVHlwZT4gX19i
dWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoX19idWYuc2l6ZSgpID4gMCkKICAgICAg
ICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBf
X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNpemUoKSk7CiAgICAg
ICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmly
c3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSkpOwogICAgICB9CiAg
ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l
IF9UcD4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90KQogICAgewogICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3QpCiAgICAgICAgICArK19fZmlyc3Q7
CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fcGl2b3QgPCAqX19sYXN0KQogICAg
ICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgICAg
ICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAg
ICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9S
YW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHdoaWxlICh0
cnVlKSB7CiAgICAgICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkpCiAgICAgICAg
ICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fY29tcChfX3Bp
dm90LCAqX19sYXN0KSkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlmICghKF9fZmlyc3Qg
PCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgaXRlcl9zd2FwKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTkyOSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgZW51bSB7IF9NX3RocmVz
aG9sZCA9IDE2IH07CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs
IHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwpCiAgICB7CiAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAgICAgLS1fX25leHQ7CiAgICAgIHdoaWxlIChfX3Zh
bCA8ICpfX25leHQpIHsKICAgICAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAgICAgICBfX2xhc3Qg
PSBfX25leHQ7CiAgICAgICAgLS1fX25leHQ7CiAgICAgIH0KICAgICAgKl9fbGFzdCA9IF9fdmFs
OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl
bmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX191bmd1YXJkZWRfbGlu
ZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCwgX0NvbXBhcmUg
X19jb21wKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAg
ICAgIC0tX19uZXh0OwogICAgICB3aGlsZSAoX19jb21wKF9fdmFsLCAqX19uZXh0KSkgewogICAg
ICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAgICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgICAgICAt
LV9fbmV4dDsKICAgICAgfQogICAgICAqX19sYXN0ID0gX192YWw7CiAgICB9CgoKCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX2luc2VydGlv
bl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CgogICAgICBmb3Ig
KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19f
aSkKICAgICAgewogICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz
SXRlcj46OnZhbHVlX3R5cGUgX192YWwgPSAqX19pOwogICAgICAgIGlmIChfX3ZhbCA8ICpfX2Zp
cnN0KSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9faSwgX19pICsgMSk7CiAg
ICAgICAgICAqX19maXJzdCA9IF9fdmFsOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAg
ICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX192YWwpOwogICAgICB9CiAgICB9CgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47Cgog
ICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19s
YXN0OyArK19faSkKICAgICAgewogICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX192YWwgPSAqX19pOwogICAgICAgIGlmIChfX2Nv
bXAoX192YWwsICpfX2ZpcnN0KSkgewogICAgICAgICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBf
X2ksIF9faSArIDEpOwogICAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbDsKICAgICAgICB9CiAgICAg
ICAgZWxzZQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9fdmFsLCBf
X2NvbXApOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgX191bmd1YXJkZWRf
bGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSkpOwogICAgfQoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlu
bGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBl
OwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19s
YXN0OyArK19faSkKICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1ZhbHVl
VHlwZSgqX19pKSwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAg
ICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIF9faW5zZXJ0
aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9NX3RocmVzaG9sZCk7CiAgICAgICAgX191bmd1
YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19sYXN0KTsKICAg
ICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qp
OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2xhc3Qg
LSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2Zp
cnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2NvbXApOwogICAgICAgIF9fdW5ndWFyZGVk
X2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCwgX19jb21wKTsK
ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh
c3QsIF9fY29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBp
bmxpbmUgX1NpemUKICAgIF9fbGcoX1NpemUgX19uKQogICAgewogICAgICBfU2l6ZSBfX2s7CiAg
ICAgIGZvciAoX19rID0gMDsgX19uICE9IDE7IF9fbiA+Pj0gMSkgKytfX2s7CiAgICAgIHJldHVy
biBfX2s7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs
IHR5cGVuYW1lIF9TaXplPgogICAgdm9pZAogICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBl
OwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAg
ICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7CiAgICAgICAgICBwYXJ0aWFsX3NvcnQoX19maXJz
dCwgX19sYXN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAt
LV9fZGVwdGhfbGltaXQ7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAg
ICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9f
bGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsKICAgICAgICBfX2ludHJvc29ydF9sb29w
KF9fY3V0LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQpOwogICAgICAgIF9fbGFzdCA9IF9fY3V0Owog
ICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs
IHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW50cm9z
b3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0LCBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgd2hpbGUgKF9fbGFz
dCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBpZiAoX19kZXB0aF9saW1pdCA9
PSAwKSB7CiAgICAgICAgICBwYXJ0aWFsX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QsIF9f
Y29tcCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC0tX19kZXB0aF9saW1p
dDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRl
ZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz
dCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqKF9fbGFzdCAtIDEpLCBfX2NvbXApKSwKICAgICAgICAgICBfX2NvbXApOwogICAgICAgIF9f
aW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgX19kZXB0aF9saW1pdCwgX19jb21wKTsKICAg
ICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgfQojIDIxNjYgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw
ZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAg
IF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3Qp
ICogMik7CiAgICAgICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwog
ICAgICB9CiAgICB9CiMgMjE5NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVf
dHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgIT0gX19s
YXN0KSB7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGcoX19s
YXN0IC0gX19maXJzdCkgKiAyLCBfX2NvbXApOwogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9uX3Nv
cnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9CiAgICB9CgoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19pbnBsYWNlX3N0
YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgICAgIF9f
aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgICByZXR1cm47CiAgICAgIH0K
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9f
Zmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxl
KTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICBf
X21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg
ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgICAgIF9f
aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgIHJldHVybjsK
ICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19s
YXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwg
X19taWRkbGUsIF9fY29tcCk7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwg
X19sYXN0LCBfX2NvbXApOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIyLAog
ICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9s
b29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlz
dGFuY2UgX19zdGVwX3NpemUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAq
IF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3Rl
cCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9z
aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2Zp
cnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0KTsKICAg
ICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KCiAgICAgIF9fc3RlcF9zaXplID0g
bWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwogICAgICBtZXJn
ZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwg
X19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAg
ICAgIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBf
X21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBf
X3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0
ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsK
ICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCAr
IF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19maXJzdCArPSBfX3R3b19zdGVwOwog
ICAgICB9CiAgICAgIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0
KSwgX19zdGVwX3NpemUpOwoKICAgICAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9z
aXplLAogICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICAg
ICAgX19yZXN1bHQsCiAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgogIGVudW0geyBfTV9jaHVu
a19zaXplID0gNyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw
ZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUpCiAgICB7CiAgICAgIHdo
aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5zZXJ0
aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7CiAgICAgICAgX19maXJz
dCArPSBfX2NodW5rX3NpemU7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0
LCBfX2xhc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg
dHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fY2h1
bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVu
a19zaXplLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2Zp
cnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg
X19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsKICAgICAgICBfX2ZpcnN0ICs9IF9fY2h1
bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwg
X19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5
cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcikKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJl
bmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19m
aXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47Cgog
ICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOwogICAgICBfX2NodW5r
X2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUpOwoKICAgICAgd2hp
bGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2Zp
cnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSk7CiAgICAgICAgX19zdGVwX3NpemUg
Kj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwg
X19maXJzdCwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgIH0K
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Q
b2ludGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93aXRo
X2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rp
c3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJf
bGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBf
TV9jaHVua19zaXplOwogICAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFz
dCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xl
bikgewogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIs
IF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgICAg
X19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3Rl
cF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgIH0KICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVy
LCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZl
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1
ZmZlcl9zaXplKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJz
dCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsg
X19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX3N0YWJs
ZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6
ZSk7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1
ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19tZXJn
ZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAg
X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAg
ICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9E
aXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVy
LCB0eXBlbmFtZSBfRGlzdGFuY2UsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2
b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Bv
aW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9
IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21p
ZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkg
ewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21w
KTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21w
KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIo
X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2NvbXApOwogICAgICAgIF9fbWVyZ2Vfc29y
dF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19jb21wKTsKICAgICAg
fQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0
YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAg
ICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMgMjQzMCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+
CiAgICBpbmxpbmUgdm9pZAogICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAg
IF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYoX19m
aXJzdCwgX19sYXN0KTsKICAgICAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19pbnBs
YWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGVsc2UKICAgICAgICBfX3N0
YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksIF9EaXN0YW5j
ZVR5cGUoYnVmLnNpemUoKSkpOwogICAgfQojIDI0NjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0
eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9f
Y29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E
aXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1Jh
bmRvbUFjY2Vzc0l0ZXIsIF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBp
ZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJz
dCwgX19sYXN0LCBfX2NvbXApOwogICAgICBlbHNlCiAgICAgICAgX19zdGFibGVfc29ydF9hZGFw
dGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1Zi5zaXpl
KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KIyAyNTAy
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIHBhcnRpYWxfc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+
Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBtYWtlX2hlYXAo
X19maXJzdCwgX19taWRkbGUpOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f
bWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgICAgIGlmICgqX19pIDwgKl9fZmlyc3Qp
CiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9WYWx1ZVR5cGUo
Kl9faSkpOwogICAgICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgfQojIDI1NDAg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIHBh
cnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs
dWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAgIG1ha2VfaGVhcChfX2Zp
cnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg
PSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgICAgICBpZiAoX19jb21wKCpfX2ks
ICpfX2ZpcnN0KSkKICAgICAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwg
X1ZhbHVlVHlwZSgqX19pKSwgX19jb21wKTsKICAgICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2NvbXApOwogICAgfQojIDI1NzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIHBhcnRpYWxfc29ydF9jb3B5
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9JbnB1dFZh
bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBl
IF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAgICAKCiAgICAgIGlmIChfX3Jl
c3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAg
ICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jl
c3VsdF9sYXN0KSB7CiAgICAgICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAg
ICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAg
ICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgICAgIHdo
aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3Vs
dF9maXJzdCkKICAgICAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5j
ZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRf
cmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRWYWx1ZVR5cGUoKl9fZmlyc3QpKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAg
c29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogICAgICByZXR1
cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQojIDI2MzMgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9SYW5kb21BY2Nl
c3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1
bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3Vs
dF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlw
ZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVUeXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZl
cmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgoKICAg
ICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9s
YXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3Vs
dF9maXJzdDsKICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9s
YXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9f
Zmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgICAgKytfX2ZpcnN0Owog
ICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0
LCBfX2NvbXApOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAo
X19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQogICAgICAgICAgX19hZGp1c3RfaGVh
cChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCksCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAg
IHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwog
ICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQojIDI2ODYgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyPgogICAgdm9pZAogICAgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVl
VHlwZTsKCgogICAgIAogICAgIAoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7
CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRf
cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3Qp
LzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KihfX2xhc3QgLSAxKSkpKTsKICAgICAgICBpZiAoX19jdXQgPD0gX19udGgpCiAgICAgICAgICBf
X2ZpcnN0ID0gX19jdXQ7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAg
ICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQojIDI3
MjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAg
IG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAg
IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAo
X19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9
CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmly
c3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBpZiAoX19jdXQgPD0gX19udGgpCiAg
ICAgICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sYXN0ID0g
X19jdXQ7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f
Y29tcCk7CiAgICB9CiMgMjc2OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBf
Rm9yd2FyZEl0ZXIKICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRp
ZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgoKCgogICAgIAogICAgIAogICAgIAoKICAg
ICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAg
IF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAg
ICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAg
ICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsK
ICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21p
ZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh
bGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsK
ICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODE2ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAg
IGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1
ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAg
ICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0
KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRs
ZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAx
OwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBf
X2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAgICAg
IF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVu
ID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBf
X2xlbiA9IF9faGFsZjsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODU2
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBw
ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0
IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0
YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVu
ID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7
CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsK
ICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsK
ICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX3ZhbCA8ICpf
X21pZGRsZSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAg
ICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19s
ZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBf
X2ZpcnN0OwogICAgfQojIDI5MDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBf
VHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5
cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBl
IF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVu
ID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBf
X2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9f
Y29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAg
IGVsc2UgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0
OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9
CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI5NDggIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw
ZW5hbWUgX1RwPgogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVxdWFs
X3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf
VHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFu
Y2VUeXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwog
ICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgICAgIHdoaWxl
IChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlk
ZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAg
IGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwog
ICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7
CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICAgICAg
X19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2xlZnQgPSBsb3dlcl9i
b3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOwogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0
LCBfX2xlbik7CiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19m
aXJzdCwgX192YWwpOwogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2Fy
ZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBw
YWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsKICAgIH0K
IyAzMDAzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+
CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWws
CiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6
ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKCiAgICAg
IF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBf
RGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQs
IF9fcmlnaHQ7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19s
ZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21p
ZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAg
ICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAg
ICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAo
X19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAg
ICAgZWxzZSB7CiAgICAgICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRs
ZSwgX192YWwsIF9fY29tcCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAg
ICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwg
X19jb21wKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVy
PihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcGFpcjxf
Rm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7CiAgICB9CiMgMzA1
MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBib29sCiAgICBiaW5hcnlfc2Vh
cmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKCiAgICAgCiAgICAgCgogICAgIAoKICAg
ICAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwp
OwogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7CiAgICB9CiMg
MzA4MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgog
ICAgYm9vbAogICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUg
X19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgX0ZvcndhcmRJdGVyIF9f
aSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7CiAgICAgIHJl
dHVybiBfX2kgIT0gX19sYXN0ICYmICFfX2NvbXAoX192YWwsICpfX2kpOwogICAgfQojIDMxMTUg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0
ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl
cjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAK
ICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpf
X2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytf
X2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq
X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICArK19fcmVz
dWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9f
Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQojIDMxNjYgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIx
LCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAg
IAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh
c3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAg
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAg
fQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAg
ICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg
X19yZXN1bHQpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9i
dWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikKICAgIHsKICAgICAgaWYgKF9fbGVu
MSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKF9fbGVuMSAr
IF9fbGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICAg
ICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAg
ICB9CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3Rh
bmNlIF9fbGVuMTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChf
X2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBh
ZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dl
cl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgIF9fbGVuMjIg
PSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgfQogICAgICBlbHNlIHsK
ICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1
dCwgX19sZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBf
X21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmly
c3QsIF9fZmlyc3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlk
ZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxl
ID0gX19maXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0YW5jZShfX21p
ZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJz
dCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xlbjExLCBfX2xlbjIyKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19t
aWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIpOwogICAgfQoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9f
bGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBh
cmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAg
ICAgICAgcmV0dXJuOwogICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgICAgICBp
ZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICAgICAgICAgIGl0ZXJfc3dhcChf
X2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwog
ICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsK
ICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0
LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwg
X19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNl
KF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9f
bGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIy
KTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAq
X19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0
LCBfX2ZpcnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRs
ZSwgX19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9
IF9fZmlyc3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRk
bGUsIF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3Qs
IF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19sZW4xMSwgX19sZW4yMiwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihf
X25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7CiAgICB9
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0
ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4y
LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVu
MiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNv
cHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19m
aXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9f
YnVmZmVyX2VuZCwgX19maXJzdCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19sZW4xIDw9IF9f
YnVmZmVyX3NpemUpIHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgY29weShfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsK
ICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xh
c3QpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sYXN0KTsKICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIGRpc3RhbmNlKF9fbWlkZGxlLCBf
X2xhc3QpKTsKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlv
bmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMz4KICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVy
MSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQp
CiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5
X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0
MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xh
c3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3
aGlsZSAodHJ1ZSkgewogICAgICAgIGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKSB7CiAgICAgICAg
ICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFz
dDEpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIs
IF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7
CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9fZmlyc3Qy
ID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCAr
K19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9CiAgICAg
IH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0
eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaWRpcmVj
dGlvbmFsSXRlcjMsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMwog
ICAgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJl
Y3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkK
ICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQp
OwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNr
d2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICAg
IC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2xh
c3QyLCAqX19sYXN0MSkpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAg
ICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFj
a3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3Qx
OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFz
dDI7CiAgICAgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJu
IGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAgICAg
LS1fX2xhc3QyOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9p
bnRlcj4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwK
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAg
ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQog
ICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVy
X3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0
LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShfX2J1ZmZlciwgX19idWZm
ZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAgICAgIH0KICAgICAgICAg
IGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVy
IF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAg
ICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZm
ZXJfZW5kLCBfX2xhc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAg
ICAgICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4x
MSA9IF9fbGVuMSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9f
bGVuMTEpOwogICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21p
ZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjIyID0g
ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAg
ICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgICAgICAg
ICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29u
ZF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19m
aXJzdF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X25ld19taWRkbGUgPQogICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0
X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21l
cmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVy
X3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNv
bmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAg
ICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwg
dHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlciwKICAgICAgICAgICB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21p
ZGRsZSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAg
ICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9z
aXplLAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgICAg
ICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAg
ICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2J1ZmZlcik7CiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlk
ZGxlLCBfX2xhc3QsIF9fZmlyc3QsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNl
IGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1
ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICAgICAg
X19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2Vu
ZCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbXApOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9f
bGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgICAgICAg
IGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IF9fbGVu
MSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwog
ICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19s
YXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBk
aXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAg
ICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICAgICAgICAg
ICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25k
X2N1dCwgX19jb21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmly
c3QsIF9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgICAgICAgICAgICAgX19yb3RhdGVfYWRhcHRpdmUo
X19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIsIF9fYnVmZmVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAg
ICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBf
X2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBf
X2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3
X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVy
X3NpemUsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICB9CiMgMzUwOCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyPgogICAgdm9pZAogICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90
eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9E
aXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRs
ZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0Rpc3RhbmNl
VHlwZSBfX2xlbjEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9EaXN0YW5j
ZVR5cGUgX19sZW4yID0gZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCk7CgogICAgICBfVGVtcG9y
YXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgICAgIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19tZXJnZV93
aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMik7
CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVn
aW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpKTsKICAgIH0KIyAzNTU5ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgaW5wbGFjZV9t
ZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZh
bHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAg
ICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBf
X21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0Rp
c3RhbmNlVHlwZSBfX2xlbjEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9E
aXN0YW5jZVR5cGUgX19sZW4yID0gZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCk7CgogICAgICBf
VGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19t
ZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9f
bGVuMiwgX19jb21wKTsKICAgICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJz
dCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAgIGluY2x1ZGVz
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAog
ICAgIAogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
X19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQog
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoKl9fZmlyc3QxIDwgKl9fZmly
c3QyKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmly
c3QxLCArK19fZmlyc3QyOwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAog
ICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2Zp
cnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZihfX2NvbXAoKl9f
Zmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAg
ICAgICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09
IF9fbGFzdDI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt
ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAg
c2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAK
CiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikgewog
ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAg
ICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0K
ICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAg
ICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICArK19f
cmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5
KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
LAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF91
bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAK
ICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmly
c3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAg
ICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmly
c3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAg
ICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jl
c3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmly
c3QyOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBj
b3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0
SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9pbnRl
cnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
LAogICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAg
CiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9f
Zmlyc3QyKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlIGlmICgqX19maXJzdDIg
PCAqX19maXJzdDEpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAg
ICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJu
IF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5h
bWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAK
ICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0
MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoX19j
b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmly
c3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAg
fQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBf
T3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlm
ICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0K
ICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICArK19fZmly
c3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19m
aXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y
ZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg
X0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAg
ICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
X19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmly
c3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2Zp
cnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9f
Y29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAg
IGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAg
ICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIs
IHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9zeW1tZXRyaWNf
ZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl
cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBp
ZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9
CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jl
c3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAg
ICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBf
X2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0
ZXIKICAgIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoK
CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy
KQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytf
X3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9f
Zmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytf
X2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2Ugewog
ICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAg
ICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg
X19yZXN1bHQpKTsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgog
ICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0g
X19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCpf
X3Jlc3VsdCA8ICpfX2ZpcnN0KQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICBy
ZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19m
aXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fY29t
cCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4g
X19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9G
b3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmly
c3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgqX19maXJz
dCA8ICpfX3Jlc3VsdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJu
IF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Db21wYXJl
IF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7
CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmIChfX2NvbXAoKl9f
Zmlyc3QsICpfX3Jlc3VsdCkpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJl
dHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyPgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoK
ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAo
X19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsK
ICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUg
KCEoKl9faSA8ICotLV9faikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19p
LCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAg
cmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
IH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIs
IHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09
IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAg
LS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9
IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkgewog
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxl
ICghX19jb21wKCpfX2ksICotLV9faikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3
YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAg
ICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXI+CiAgICBib29sCiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBf
X2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgog
ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChf
X2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0Owog
ICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmICgqX19paSA8ICpfX2kpIHsKICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAo
ISgqLS1fX2ogPCAqX19pKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ks
IF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICBy
ZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
fQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0g
X19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAt
LV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0g
X19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmIChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUg
KCFfX2NvbXAoKi0tX19qLCAqX19pKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dh
cChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAg
ICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgfQogICAgICB9CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihf
SW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpCiAgICB7CgogICAg
IAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19m
aXJzdDEpCiAgICAgICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRl
ciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgICAgIGlmICgqX19maXJzdDEgPT0gKl9faXRl
cikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVy
LCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJz
dF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAg
ICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAgICAK
ICAgICAKCgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19m
aXJzdDEpCiAgICAgICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRl
ciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAq
X19pdGVyKSkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0
MTsKICAgIH0KIyA0MjAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIy
PgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3Qx
LCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m
aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVy
YXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJzdDIg
PT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAg
X0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsKICAg
ICAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNoKF9f
Zmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgICAgICBpZiAoX19uZXdf
cmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAg
X19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFy
eVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVy
MSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGZv
cndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAg
X0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xh
c3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2Fy
ZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAg
X0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19maXJzdDEs
IF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICAgICAgaWYgKF9fbmV3
X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAg
IF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwogICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIF9CaWRpcmVj
dGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwg
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZykKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0Jp
ZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0
b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9fcmxh
c3QxKF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAgICAg
X1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwg
X19ybGFzdDIpOwoKICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICByZXR1
cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jl
c3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3Rh
bmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1l
IF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0
ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJ
dGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz
dDIsCiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXAp
CiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRp
cmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y
PF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0
MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgICAgIF9S
ZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9f
cmxhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CgogICAg
ICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAg
ICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0
LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9f
bGFzdDIpKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAg
aW5saW5lIF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs
IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJz
dDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAg
ICAgIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0
MiwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSks
CiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0Zvcndh
cmRJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5l
IF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3
YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9G
b3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21w
KQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgcmV0dXJuIF9fZmluZF9lbmQoX19m
aXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAg
ICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICAgICAg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MiksCiAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29tcCk7CiAgICB9Cgp9CiMgNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2FsZ29yaXRobSIgMiAz
CiMgNTcgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcudGNjIiAxIDMKIyA0NSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNp
emVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBf
UmVwOjpfU19tYXhfc2l6ZSA9ICgoKG5wb3MgLSBzaXplb2YoX1JlcCkpL3NpemVvZihfQ2hhclQp
KSAtIDEpIC8gNDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCBfQ2hhclQKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfdGVybWluYWwgPSBfQ2hhclQoKTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46Om5wb3M7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46Ol9TX2VtcHR5X3JlcF9zdG9yYWdlWwogICAgKHNpemVvZihfUmVwKSArIHNpemVv
ZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAg
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0
cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAg
ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIGlmIChf
X2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1w
dHlfcmVwKCkuX01fcmVmY29weSgpOwoKICAgICAgICBfQ2hhclQgX19idWZbMTAwXTsKICAgICAg
ICBzaXplX3R5cGUgX19pID0gMDsKICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19p
IDwgc2l6ZW9mKF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgewogICAgICAgICAg
ICBfX2J1ZltfX2krK10gPSAqX19iZWc7CiAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICB9
CiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9faSwgX19hKTsKICAgICAgICB0
cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX19idWYsIF9faSk7CiAgICAgICAg
X19yLT5fTV9sZW5ndGggPSBfX2k7CiAgICAgICAgdHJ5CiAgICAgICAgICB7CgoKCiAgICAgICAg
ICAgIGZvciAoOzspCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX0NoYXJUKiBfX3Ag
PSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fbGVuZ3RoOwogICAgICAgICAgICAgICAgX0No
YXJUKiBfX2xhc3QgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fY2FwYWNpdHk7CiAgICAg
ICAgICAgICAgICBmb3IgKDs7KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwog
ICAgICAgICAgICAgICAgICAgICAgICAqX19wID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoX19wID09IF9fbGFzdCkKICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICpfX3ArKyA9ICpfX2JlZzsK
ICAgICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAg
ICAgICAgICAgICBfUmVwKiBfX2Fub3RoZXIgPSBfUmVwOjpfU19jcmVhdGUoX19sZW4gKyAxLCBf
X2EpOwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19hbm90aGVyLT5fTV9yZWZk
YXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ItPl9NX3JlZmRhdGEo
KSwgX19sZW4pOwogICAgICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAg
ICAgICAgICBfX3IgPSBfX2Fub3RoZXI7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2xlbmd0aCA9
IF9fbGVuOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBjYXRjaCguLi4pCiAg
ICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRl
bXBsYXRlIDxjbGFzcyBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2Jl
ZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICBm
b3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBz
dGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fYmVnLCBfX2VuZCkpOwoKICAgICAgICBp
ZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9T
X2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0
KF9fYmVnID09IF9Jbkl0ZXIoKSwgMCkpCiAgICAgICAgICBfX3Rocm93X2xvZ2ljX2Vycm9yKCJh
dHRlbXB0IHRvIGNyZWF0ZSBzdHJpbmcgd2l0aCBudWxsIHBvaW50ZXIiKTsKCgogICAgICAgIF9S
ZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2RuZXcsIF9fYSk7CiAgICAgICAgdHJ5CiAgICAg
ICAgICB7IF9TX2NvcHlfY2hhcnMoX19yLT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2VuZCk7IH0K
ICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJv
eShfX2EpOwogICAgICAgICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAgICBfX3ItPl9NX2xl
bmd0aCA9IF9fZG5ldzsKCiAgICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9IF9SZXA6
Ol9TX3Rlcm1pbmFsOwogICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9B
bGxvYyYgX19hKQogICAgewogICAgICBpZiAoX19uID09IDAgJiYgX19hID09IF9BbGxvYygpKQog
ICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgX1JlcCog
X19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbiwgX19hKTsKICAgICAgdHJ5CiAgICAgICAgewogICAg
ICAgICAgaWYgKF9fbikKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfX3ItPl9NX3Jl
ZmRhdGEoKSwgX19uLCBfX2MpOwogICAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsK
ICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAg
fQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19u
XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIDogX01fZGF0YXBs
dXMoX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX0FsbG9jKCksIF9fc3RyLmdldF9hbGxvY2F0b3Io
KSksCiAgICAgICAgICAgICAgICAgX19zdHIuZ2V0X2FsbG9jYXRvcigpKQogICAgeyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19z
dHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChz
aXplX3R5cGUoKSwgX0NoYXJUKCksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAg
IDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxv
YygpKSwgX0FsbG9jKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29u
c3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9j
aGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xk
KF9fcG9zLCBfX24pLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVz
KF9TX2NvbnN0cnVjdChfX3MsIF9fcyArIF9fbiwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJp
bmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1
cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgPyBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykg
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zICsgbnBvcywgX19hKSwgX19hKQog
ICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9j
JiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX24sIF9fYywgX19hKSwgX19h
KQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKF9J
bnB1dEl0ZXIgX19iZWcsIF9JbnB1dEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAg
OiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBfX2EpCiAgICB7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5fTV9yZXAo
KSkKICAgICAgICB7CgogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gdGhpcy0+Z2V0X2Fs
bG9jYXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9n
cmFiKF9fYSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9k
aXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJiBf
X2EpIHRocm93ICgpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkg
KyAoX01fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpOwogICAgICBfUmF3X2J5dGVzX2Fs
bG9jKF9fYSkuZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwgX19zaXpl
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpfTV9sZWFrX2hhcmQoKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lz
X3NoYXJlZCgpKQogICAgICAgIF9NX211dGF0ZSgwLCAwLCAwKTsKICAgICAgX01fcmVwKCktPl9N
X3NldF9sZWFrZWQoKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19w
b3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpCiAgICB7CiAgICAgIHNpemVf
dHlwZSBfX29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19u
ZXdfc2l6ZSA9IF9fb2xkX3NpemUgKyBfX2xlbjIgLSBfX2xlbjE7CiAgICAgIGNvbnN0IF9DaGFy
VCogX19zcmMgPSBfTV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMTsKICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9faG93X211Y2ggPSBfX29sZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7CgogICAgICBpZiAo
X01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpKQogICAg
ICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CgoK
ICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgICAgIGNv
bnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsK
CiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlX2NhcGFjaXR5ID0gKF9fcGFnZXNpemUg
LSBfX21hbGxvY19oZWFkZXJfc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICAg
ICAgX1JlcCogX19yOwogICAgICAgICAgaWYgKF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpICYmIF9f
bmV3X3NpemUgPiBfX3BhZ2VfY2FwYWNpdHkpCgogICAgICAgICAgICBfX3IgPSBfUmVwOjpfU19j
cmVhdGUoX19uZXdfc2l6ZSA+IDIqY2FwYWNpdHkoKSA/CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX25ld19zaXplIDogMipjYXBhY2l0eSgpLCBfX2EpOwogICAgICAgICAgZWxz
ZQogICAgICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsKICAg
ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zKQogICAgICAg
ICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX2RhdGEoKSwg
X19wb3MpOwogICAgICAgICAgICAgIGlmIChfX2hvd19tdWNoKQogICAgICAgICAgICAgICAgdHJh
aXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19y
LT5fTV9kaXNwb3NlKGdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBf
TV9kYXRhKF9fci0+X01fcmVmZGF0YSgpKTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2hvd19t
dWNoICYmIF9fbGVuMSAhPSBfX2xlbjIpCiAgICAgICAgewoKICAgICAgICAgIHRyYWl0c190eXBl
Ojptb3ZlKF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVjaCk7CiAg
ICAgICAgfQogICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9NX3JlcCgp
LT5fTV9sZW5ndGggPSBfX25ld19zaXplOwogICAgICBfTV9kYXRhKClbX19uZXdfc2l6ZV0gPSBf
UmVwOjpfU190ZXJtaW5hbDsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpCiAgICB7
CiAgICAgIGlmIChfX3JlcyA+IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3No
YXJlZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9zaXplKCkp
CiAgICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2VydmUi
KTsKCiAgICAgICAgICBpZiAoX19yZXMgPCB0aGlzLT5zaXplKCkpCiAgICAgICAgICAgIF9fcmVz
ID0gdGhpcy0+c2l6ZSgpOwogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9j
YXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9jbG9uZShfX2Es
IF9fcmVzIC0gdGhpcy0+c2l6ZSgpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9f
YSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
dm9pZCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpzd2FwKGJhc2ljX3N0
cmluZyYgX19zKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAg
ICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKF9fcy5fTV9yZXAoKS0+
X01faXNfbGVha2VkKCkpCiAgICAgICAgX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsK
ICAgICAgaWYgKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9jYXRvcigpKQog
ICAgICAgIHsKICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfTV9kYXRhKCk7CiAgICAgICAgICBf
TV9kYXRhKF9fcy5fTV9kYXRhKCkpOwogICAgICAgICAgX19zLl9NX2RhdGEoX190bXApOwogICAg
ICAgIH0KCiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAx
KF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcy5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAg
YmFzaWNfc3RyaW5nIF9fdG1wMihfX3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAg
ICAqdGhpcyA9IF9fdG1wMjsKICAgICAgICAgIF9fcyA9IF9fdG1wMTsKICAgICAgICB9CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6X1JlcCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6
OgogICAgX1NfY3JlYXRlKHNpemVfdCBfX2NhcGFjaXR5LCBjb25zdCBfQWxsb2MmIF9fYWxsb2Mp
CiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiBfX3N0cmluZ190eXBlOwoKCiAgICAgIGlmIChfX2NhcGFjaXR5ID4gX1NfbWF4X3NpemUpCgoK
CiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X1NfY3JlYXRlIik7
CgoKCgogICAgICBzaXplX3QgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hh
clQpICsgc2l6ZW9mKF9SZXApOwojIDQyMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNp
Y19zdHJpbmcudGNjIiAzCiAgICAgIGNvbnN0IHNpemVfdCBfX3BhZ2VzaXplID0gNDA5NjsKICAg
ICAgY29uc3Qgc2l6ZV90IF9fc3VicGFnZXNpemUgPSAxMjg7CiAgICAgIGNvbnN0IHNpemVfdCBf
X21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsKICAgICAgaWYgKChfX3Np
emUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgPiBfX3BhZ2VzaXplKQogICAgICAgIHsKICAgICAg
ICAgIHNpemVfdCBfX2V4dHJhID0KICAgICAgICAgICAgKF9fcGFnZXNpemUgLSAoKF9fc2l6ZSAr
IF9fbWFsbG9jX2hlYWRlcl9zaXplKSAlIF9fcGFnZXNpemUpKQogICAgICAgICAgICAlIF9fcGFn
ZXNpemU7CiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXplb2YoX0NoYXJUKTsK
ICAgICAgICAgIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNp
emVvZihfUmVwKTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fc2l6ZSA+IF9fc3VicGFnZXNp
emUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fZXh0cmEgPQogICAgICAgICAgICAoX19z
dWJwYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpICUgX19zdWJwYWdl
c2l6ZSkpCiAgICAgICAgICAgICUgX19zdWJwYWdlc2l6ZTsKICAgICAgICAgIF9fY2FwYWNpdHkg
Kz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19zaXplID0gKF9fY2FwYWNp
dHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwogICAgICAgIH0KCgoKICAg
ICAgdm9pZCogX19wbGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxvYykuYWxsb2NhdGUoX19z
aXplKTsKICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOwogICAgICBfX3AtPl9N
X2NhcGFjaXR5ID0gX19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRfc2hhcmFibGUoKTsKICAg
ICAgX19wLT5fTV9sZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6
OgogICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19yZXMpCiAg
ICB7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19yZXF1ZXN0ZWRfY2FwID0gX01fbGVuZ3RoICsg
X19yZXM7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlc2l6ZSA9IDQwOTY7CiAgICAgIGNv
bnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsK
CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPQogICAgICAgIChfX3BhZ2Vz
aXplIC0gX19tYWxsb2NfaGVhZGVyX3NpemUgLSBzaXplb2YoX1JlcCkgLSBzaXplb2YoX0NoYXJU
KSkKICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICBfUmVwKiBfX3I7CiAgICAgIGlmIChf
X3JlcXVlc3RlZF9jYXAgPiBfTV9jYXBhY2l0eSAmJiBfX3JlcXVlc3RlZF9jYXAgPiBfX3BhZ2Vf
Y2FwYWNpdHkpCgogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAg
PiAyKl9NX2NhcGFjaXR5ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXF1ZXN0
ZWRfY2FwIDogMipfTV9jYXBhY2l0eSwgX19hbGxvYyk7CiAgICAgIGVsc2UKICAgICAgICBfX3Ig
PSBfUmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwLCBfX2FsbG9jKTsKCiAgICAgIGlmIChf
TV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgdHJhaXRzX3R5
cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEoKSwgX01fbGVuZ3RoKTsgfQog
ICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9k
ZXN0cm95KF9fYWxsb2MpOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9NX2xlbmd0aDsKICAgICAgcmV0dXJuIF9fci0+
X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQog
ICAgewogICAgICBpZiAoX19uID4gbWF4X3NpemUoKSkKICAgICAgICBfX3Rocm93X2xlbmd0aF9l
cnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUiKTsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo
aXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSA8IF9fbikKICAgICAgICB0aGlzLT5hcHBlbmQo
X19uIC0gX19zaXplLCBfX2MpOwogICAgICBlbHNlIGlmIChfX24gPCBfX3NpemUpCiAgICAgICAg
dGhpcy0+ZXJhc2UoX19uKTsKCiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYK
ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3Jl
cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlciBfX2sxLAogICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7
CgogICAgICAgIGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7CiAgICAgICAgcmV0dXJuIF9N
X3JlcGxhY2Vfc2FmZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCkp
OwogICAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgog
ICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZV9zYWZlKGl0
ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJkSXRlciBfX2sxLAogICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fazIpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUg
X19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5jZShfX2sxLCBfX2syKSk7CiAg
ICAgICAgc2l6ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAgICAgIHNpemVfdHlwZSBf
X2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOwoKICAgICAgICBpZiAoX19kbWF4IDw9IF9fZG5ldykK
ICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9NX3JlcGxhY2Ui
KTsKICAgICAgICBzaXplX3R5cGUgX19vZmYgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgICAg
X01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9fZG5ldyk7CgoKICAgICAgICBpZiAoX19kbmV3KQog
ICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwgX19rMSwgX19rMik7Cgog
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNp
emVfdHlwZSBfX24yKQogICAgewogICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19z
dHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQogICAgICAgIF9fdGhyb3df
b3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgY29uc3QgYm9vbCBf
X3Rlc3RuMiA9IF9fbjIgPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgIGNvbnN0IHNpemVfdHlw
ZSBfX2ZvbGRuMiA9IF9fdGVzdG4yID8gX19uMiA6IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAg
cmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MxLCBfX24xLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3N0ci5fTV9kYXRhKCkgKyBfX3BvczIsIF9fZm9sZG4yKTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0cikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsK
ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaXplICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAo
X19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwog
ICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5f
TV9pYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9pZW5kKCkp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p
CiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3N0ci5zaXplKCkgLSBfX3Bv
cywgX19uKSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHko
KSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vf
c2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBfQ2hh
clQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19u
ICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAg
ICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9N
X2llbmQoKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBf
X2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsKICAg
ICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9f
bGVuKTsKICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBf
X24sIF9fYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0
cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlw
ZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjpsZW5ndGgo
X19saHMpOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3N0ci5yZXNlcnZlKF9f
bGVuICsgX19yaHMuc2l6ZSgpKTsKICAgICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9f
bGVuKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9w
ZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUg
X19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOwogICAgICBfX3N0
ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwg
X19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShpdGVy
YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsKICAgICAgc2l6ZV90eXBlIF9f
b2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgaWYgKG1heF9zaXplKCkgLSAodGhpcy0+
c2l6ZSgpIC0gX19uMSkgPD0gX19uMikKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFz
aWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIF9NX211dGF0ZSAoX19vZmYxLCBfX24xLCBfX24y
KTsKCiAgICAgIGlmIChfX24yKQogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgp
ICsgX19vZmYxLCBfX24yLCBfX2MpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90
eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvcHko
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsK
ICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh
bmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlmIChfX24gPiB0aGlzLT5zaXplKCkg
LSBfX3BvcykKICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkgLSBfX3BvczsKCiAgICAgIHRyYWl0
c190eXBlOjpjb3B5KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7CgogICAgICByZXR1cm4g
X19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z
aXplKCk7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgY29uc3QgX0NoYXJUKiBf
X2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgIGZvciAoOyBfX3hwb3MgKyBfX24gPD0gX19zaXplOyAr
K19feHBvcykKICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX194cG9z
LCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBu
cG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBl
IF9fcmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQogICAgICAgIHsKICAgICAg
ICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgc2l6ZV90eXBl
IF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFp
dHNfdHlwZTo6ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOwogICAgICAgICAgaWYgKF9f
cCkKICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiAgICAgICAgfQogICAgICByZXR1
cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g
dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19uIDw9IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAg
ICBfX3BvcyA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fbiwgX19wb3MpOwogICAgICAgICAgY29uc3Qg
X0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3Ms
IF9fbikgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICAgICAgfQog
ICAgICAgICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9z
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7
CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUp
CiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6ZSAtIDE7CiAgICAgICAg
ICBpZiAoX194cG9zID4gX19wb3MpCiAgICAgICAgICAgIF9feHBvcyA9IF9fcG9zOwoKICAgICAg
ICAgIGZvciAoKytfX3hwb3M7IF9feHBvcy0tID4gMDsgKQogICAgICAgICAgICBpZiAodHJhaXRz
X3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgICAgIHJldHVybiBf
X3hwb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBl
bmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9v
Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25z
dAogICAgewogICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+c2l6ZSgpOyArK19fcG9z
KQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZp
bmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10pOwogICAgICAgICAgaWYgKF9fcCkKICAgICAg
ICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
IGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp
OwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3Np
emUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBf
TV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAg
ICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiAgICAgICAgfQogICAgICBy
ZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90
IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19f
eHBvcykKICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClb
X194cG9zXSkpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25z
dAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3Mg
PCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9N
X2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0
dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBl
IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAg
ICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAg
ICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6
ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJu
IF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAg
ICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBf
X2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9
IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAo
LS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBk
bwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0
YSgpW19fc2l6ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAg
ICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJu
IG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
LCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUg
X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNp
emUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh
bmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplPSBt
aW4oX19zaXplIC0gX19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3Jz
aXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2Rh
dGEoKSArIF9fcG9zLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAg
ICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
IGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24y
KSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg
ICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMSA+IF9f
c2l6ZSB8fCBfX3BvczIgPiBfX29zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi
YXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9f
c2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29z
aXplIC0gX19wb3MyLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUs
IF9fcm9zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEo
KSArIF9fcG9zMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmRh
dGEoKSArIF9fcG9zMiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3Jz
aXplIC0gX19yb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKGNv
bnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp
cy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgo
X19zKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fc2l6ZSwgX19vc2l6ZSk7CiAgICAg
IGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19sZW4pOwog
ICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAgICByZXR1
cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg
X19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3Np
emUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Ro
cm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5
cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgc2l6ZV90eXBlIF9f
cnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXplX3R5cGUgX19sZW4g
PSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29t
cGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAg
ICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQq
IF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf
dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAg
ICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAg
ICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fbjIp
OwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAg
ICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9f
ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsK
ICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJl
dHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMs
IGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLAogICAgICAgICAgICAgICAgICAg
X0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgX19idWZzaXopCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAg
ICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19i
eXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7CiAgICAgIF9UcmFpdHM6OmNvcHko
X19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAgIF9fYnVmW19fYnl0ZXNdID0gX0No
YXJUKCk7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmc8Y2hh
cj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0
b3I+PihiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBiYXNpY19vc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXI+
JiwgY29uc3Qgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNo
YXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJiwgY2hhcik7CiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNp
Y19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFz
aWNfc3RyaW5nPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTx3
Y2hhcl90PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcm
KTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX29zdHJlYW08d2NoYXJfdD4mCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08d2NoYXJfdD4mLCBjb25zdCB3c3RyaW5nJik7CiAgZXh0ZXJu
IHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShiYXNpY19p
c3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYsIHdjaGFyX3QpOwogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTx3Y2hh
cl90PiYsIHdzdHJpbmcmKTsKCn0KIyA1OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAy
IDMKIyA1MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhy
b3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lk
KTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19i
YWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19y
dW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19z
KTsKfQojIDUxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCgpu
YW1lc3BhY2Ugc3RkCnsKCiAgY2xhc3MgbG9jYWxlOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQo
X0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
aW5saW5lIGJvb2wKICAgIGlzY250cmwoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0NoYXJULCBj
b25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv
b2wKICAgIGlzbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxwaGEoX0NoYXJULCBjb25zdCBsb2Nh
bGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlz
ZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9D
aGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu
bGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCwgY29u
c3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hh
clQKICAgIHRvdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQsIGNvbnN0IGxv
Y2FsZSYpOwoKCgogIGNsYXNzIGN0eXBlX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgY2xhc3MgY3R5cGU7CiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTxjaGFyPjsKCiAgdGVt
cGxhdGU8PiBjbGFzcyBjdHlwZTx3Y2hhcl90PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgY2xhc3MgY3R5cGVfYnluYW1lOwoKCiAgY2xhc3MgY29kZWN2dF9iYXNlOwogIGNsYXNz
IF9fZW5jX3RyYWl0czsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4
dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0OwogIHRlbXBsYXRlPD4g
Y2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwoKICB0ZW1wbGF0ZTw+IGNsYXNz
IGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3Mg
Y29kZWN2dF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX2dldDsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1
Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51bV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNs
YXNzIG51bXB1bmN0X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs
YXNzIGNvbGxhdGU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcwogICAgY29sbGF0
ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1lX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNs
YXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
ciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5h
bWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJl
YW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX3B1dDsKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxf
Q2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTsKCgogIGNsYXNzIG1vbmV5X2Jhc2U7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1
Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X2dldDsKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJv
b2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFt
ZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3Mg
bWVzc2FnZXNfYnluYW1lOwoKCiAgY2xhc3MgbG9jYWxlCiAgewogIHB1YmxpYzoKCiAgICB0eXBl
ZGVmIHVuc2lnbmVkIGludCBjYXRlZ29yeTsKCgogICAgY2xhc3MgZmFjZXQ7CiAgICBjbGFzcyBp
ZDsKICAgIGNsYXNzIF9JbXBsOwoKICAgIGZyaWVuZCBjbGFzcyBmYWNldDsKICAgIGZyaWVuZCBj
bGFzcyBfSW1wbDsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBj
b25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25z
dCBsb2NhbGUmKSB0aHJvdygpOwoKCgogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUgPSAw
OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGN0eXBlID0gMUwgPDwgMDsKICAgIHN0YXRpYyBj
b25zdCBjYXRlZ29yeSBudW1lcmljID0gMUwgPDwgMTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29y
eSBjb2xsYXRlID0gMUwgPDwgMjsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lID0gMUwg
PDwgMzsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtb25ldGFyeSA9IDFMIDw8IDQ7CiAgICBz
dGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVzc2FnZXMgPSAxTCA8PCA1OwogICAgc3RhdGljIGNvbnN0
IGNhdGVnb3J5IGFsbCA9IChjdHlwZSB8IG51bWVyaWMgfCBjb2xsYXRlIHwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgfCBtb25ldGFyeSB8IG1lc3NhZ2Vz
KTsKCgogICAgbG9jYWxlKCkgdGhyb3coKTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290
aGVyKSB0aHJvdygpOwoKICAgIGV4cGxpY2l0CiAgICBsb2NhbGUoY29uc3QgY2hhciogX19zKTsK
CiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGNoYXIqIF9fcywgY2F0ZWdv
cnkgX19jYXQpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxl
JiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4K
ICAgICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpOwoKICAgIH5s
b2NhbGUoKSB0aHJvdygpOwoKICAgIGNvbnN0IGxvY2FsZSYKICAgIG9wZXJhdG9yPShjb25zdCBs
b2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog
ICAgICBsb2NhbGUKICAgICAgY29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0OwoK
CiAgICBzdHJpbmcKICAgIG5hbWUoKSBjb25zdDsKCiAgICBib29sCiAgICBvcGVyYXRvcj09KGNv
bnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCk7CgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yIT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKQogICAgeyBy
ZXR1cm4gISh0aGlzLT5vcGVyYXRvcj09KF9fb3RoZXIpKTsgfQoKICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyLCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICAgIGJvb2wK
ICAgICAgb3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fczEsCiAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJh
aXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdDsKCgogICAgc3RhdGljIGxvY2FsZQogICAgZ2xvYmFs
KGNvbnN0IGxvY2FsZSYpOwoKICAgIHN0YXRpYyBjb25zdCBsb2NhbGUmCiAgICBjbGFzc2ljKCk7
CgogIHByaXZhdGU6CgogICAgX0ltcGwqIF9NX2ltcGw7CgoKICAgIHN0YXRpYyBfSW1wbCogX1Nf
Y2xhc3NpYzsKCgogICAgc3RhdGljIF9JbXBsKiBfU19nbG9iYWw7CgoKCgoKCiAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IF9TX2NhdGVnb3JpZXNfc2l6ZSA9IDY7CgoKCgoKCiAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IF9TX2V4dHJhX2NhdGVnb3JpZXNfc2l6ZSA9IDY7CgoKCgoKICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBfU19jYXRlZ29yaWVzW19TX2NhdGVnb3JpZXNfc2l6ZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICsgX1NfZXh0cmFfY2F0ZWdvcmllc19zaXplXTsKCiAg
ICBleHBsaWNpdAogICAgbG9jYWxlKF9JbXBsKikgdGhyb3coKTsKCiAgICBzdGF0aWMgaW5saW5l
IHZvaWQKICAgIF9TX2luaXRpYWxpemUoKQogICAgewogICAgICBpZiAoIV9TX2NsYXNzaWMpCiAg
ICAgICAgY2xhc3NpYygpOwogICAgfQoKICAgIHN0YXRpYyBjYXRlZ29yeQogICAgX1Nfbm9ybWFs
aXplX2NhdGVnb3J5KGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9jb2FsZXNjZShjb25zdCBs
b2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwogIH07
CgoKCiAgY2xhc3MgbG9jYWxlOjpfSW1wbAogIHsKICBwdWJsaWM6CgogICAgZnJpZW5kIGNsYXNz
IGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0
KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJp
ZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgogIHByaXZh
dGU6CgogICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CiAgICBmYWNldCoqIF9NX2ZhY2V0
czsKICAgIHNpemVfdCBfTV9mYWNldHNfc2l6ZTsKCiAgICBjaGFyKiBfTV9uYW1lc1tfU19jYXRl
Z29yaWVzX3NpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICsgX1NfZXh0cmFfY2F0ZWdvcmllc19zaXplXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6
OmlkKiBjb25zdCBfU19pZF9jdHlwZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNv
bnN0IF9TX2lkX251bWVyaWNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBf
U19pZF9jb2xsYXRlW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRf
dGltZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5
W107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbWVzc2FnZXNbXTsK
ICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCogY29uc3QgX1NfZmFjZXRfY2F0ZWdv
cmllc1tdOwoKICAgIGlubGluZSB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKQog
ICAgeyBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOyB9CgogICAgaW5saW5lIHZvaWQK
ICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX2V4Y2hh
bmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA9PSAxKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7IGRlbGV0ZSB0aGlzOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAg
ICAgICAgICAgIHsgfQogICAgICAgIH0KICAgIH0KCiAgICBfSW1wbChjb25zdCBfSW1wbCYsIHNp
emVfdCk7CiAgICBfSW1wbChjb25zdCBjaGFyKiwgc2l6ZV90KTsKICAgIF9JbXBsKGZhY2V0Kios
IHNpemVfdCwgYm9vbCk7CgogICB+X0ltcGwoKSB0aHJvdygpOwoKICAgIF9JbXBsKGNvbnN0IF9J
bXBsJik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IF9JbXBsJik7CgogICAgaW5saW5l
IGJvb2wKICAgIF9NX2NoZWNrX3NhbWVfbmFtZSgpCiAgICB7CiAgICAgIGJvb2wgX19yZXQgPSB0
cnVlOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOwogICAgICAgICAgIF9fcmV0ICYmIF9faSA8
IF9TX2NhdGVnb3JpZXNfc2l6ZSArIF9TX2V4dHJhX2NhdGVnb3JpZXNfc2l6ZSAtIDE7CiAgICAg
ICAgICAgKytfX2kpCiAgICAgICAgX19yZXQgJj0gKHN0cmNtcChfTV9uYW1lc1tfX2ldLCBfTV9u
YW1lc1tfX2kgKyAxXSkgPT0gMCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgICB2b2lk
CiAgICBfTV9yZXBsYWNlX2NhdGVnb3JpZXMoY29uc3QgX0ltcGwqLCBjYXRlZ29yeSk7CgogICAg
dm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29yeShjb25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6
aWQqIGNvbnN0Kik7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9mYWNldChjb25zdCBfSW1wbCos
IGNvbnN0IGxvY2FsZTo6aWQqKTsKCiAgICB2b2lkCiAgICBfTV9pbnN0YWxsX2ZhY2V0KGNvbnN0
IGxvY2FsZTo6aWQqLCBmYWNldCopOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg
ICAgaW5saW5lIHZvaWQKICAgICAgX01faW5pdF9mYWNldChfRmFjZXQqIF9fZmFjZXQpCiAgICAg
IHsgX01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0KICB9OwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGU6OmxvY2FsZShjb25zdCBsb2NhbGUmIF9f
b3RoZXIsIF9GYWNldCogX19mKQogICAgewogICAgICBfTV9pbXBsID0gbmV3IF9JbXBsKCpfX290
aGVyLl9NX2ltcGwsIDEpOwogICAgICBfTV9pbXBsLT5fTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6
OmlkLCBfX2YpOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOwogICAgICAgICAgIF9faSA8IF9T
X2NhdGVnb3JpZXNfc2l6ZSArIF9TX2V4dHJhX2NhdGVnb3JpZXNfc2l6ZTsgKytfX2kpCiAgICAg
ICAgewogICAgICAgICAgZGVsZXRlIFtdIF9NX2ltcGwtPl9NX25hbWVzW19faV07CiAgICAgICAg
ICBjaGFyKiBfX25ldyA9IG5ldyBjaGFyWzJdOwogICAgICAgICAgc3RyY3B5KF9fbmV3LCAiKiIp
OwogICAgICAgICAgX01faW1wbC0+X01fbmFtZXNbX19pXSA9IF9fbmV3OwogICAgICAgIH0KICAg
IH0KCgogIGNsYXNzIGxvY2FsZTo6ZmFjZXQKICB7CiAgcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFz
cyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKCiAgICBfQXRvbWljX3dv
cmQgX01fcmVmZXJlbmNlczsKCiAgcHJvdGVjdGVkOgoKCiAgICBzdGF0aWMgX19jX2xvY2FsZSBf
U19jX2xvY2FsZTsKCgogICAgc3RhdGljIGNoYXIgX1NfY19uYW1lWzJdOwoKICAgIGV4cGxpY2l0
CiAgICBmYWNldChzaXplX3QgX19yZWZzID0gMCkgdGhyb3coKTsKCiAgICB2aXJ0dWFsCiAgICB+
ZmFjZXQoKTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2Nh
bGUmIF9fY2xvYywgY29uc3QgY2hhciogX19zLAogICAgICAgICAgICAgICAgICAgICAgIF9fY19s
b2NhbGUgX19vbGQgPSAwKTsKCiAgICBzdGF0aWMgX19jX2xvY2FsZQogICAgX1NfY2xvbmVfY19s
b2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfZGVzdHJv
eV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICBwcml2YXRlOgogICAgdm9pZAogICAg
X01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCk7CgogICAgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVy
ZW5jZSgpIHRocm93KCk7CgogICAgZmFjZXQoY29uc3QgZmFjZXQmKTsKCiAgICB2b2lkCiAgICBv
cGVyYXRvcj0oY29uc3QgZmFjZXQmKTsKICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6aWQKICB7CiAg
cHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxl
OjpfSW1wbDsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0
IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwogICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9j
YWxlJikgdGhyb3cgKCk7CgoKCgogICAgbXV0YWJsZSBzaXplX3QgX01faW5kZXg7CgoKICAgIHN0
YXRpYyBfQXRvbWljX3dvcmQgX1NfaGlnaHdhdGVyOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShj
b25zdCBpZCYpOwoKICAgIGlkKGNvbnN0IGlkJik7CgogIHB1YmxpYzoKCgogICAgaWQoKTsKCiAg
ICBpbmxpbmUgc2l6ZV90CiAgICBfTV9pZCgpIGNvbnN0CiAgICB7CiAgICAgIGlmICghX01faW5k
ZXgpCiAgICAgICAgX01faW5kZXggPSAxICsgX19leGNoYW5nZV9hbmRfYWRkKCZfU19oaWdod2F0
ZXIsIDEpOwogICAgICByZXR1cm4gX01faW5kZXggLSAxOwogICAgfQogIH07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBs
b2NhbGUmIF9fbG9jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAg
aGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCk7Cn0KIyA0OSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvaW9zIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2lvc19i
YXNlLmgiIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2lvc19iYXNlLmgiIDMK
CgoKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIGVudW0gX0lvc19GbXRmbGFncyB7IF9NX2lvc19mbXRm
bGFnc19lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9y
JihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19G
bXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9
CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8KF9Jb3NfRm10ZmxhZ3MgX19hLCBf
SW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGlu
dD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10Zmxh
Z3MKICBvcGVyYXRvcl4oX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsg
cmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8
aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfD0oX0lvc19G
bXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBf
X2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciY9KF9Jb3NfRm10ZmxhZ3Mm
IF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9Cgog
IGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3JePShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9J
b3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUg
X0lvc19GbXRmbGFncwogIG9wZXJhdG9yfihfSW9zX0ZtdGZsYWdzIF9fYSkKICB7IHJldHVybiBf
SW9zX0ZtdGZsYWdzKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9Jb3NfT3Bl
bm1vZGUgeyBfTV9pb3Nfb3Blbm1vZGVfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3Nf
T3Blbm1vZGUKICBvcGVyYXRvciYoX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19i
KQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGlj
X2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfChf
SW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVu
bW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9Cgog
IGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JeKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9z
X09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4o
X19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUK
ICBvcGVyYXRvcnw9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyBy
ZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0
b3ImPShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9f
YSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yXj0oX0lv
c19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2Eg
XiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcn4oX0lvc19PcGVubW9k
ZSBfX2EpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZSh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsg
fQoKCiAgZW51bSBfSW9zX0lvc3RhdGUgeyBfTV9pb3NfaW9zdGF0ZV9lbmQgPSAxTCA8PCAxNiB9
OwoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImKF9Jb3NfSW9zdGF0ZSBfX2EsIF9J
b3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4o
X19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQog
IG9wZXJhdG9yfChfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJu
IF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9f
YikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl4oX0lvc19Jb3N0YXRlIF9f
YSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8
aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0
YXRlCiAgb3BlcmF0b3J8PShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7
IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJh
dG9yJj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19h
ID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl49KF9Jb3Nf
SW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9f
YjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J+KF9Jb3NfSW9zdGF0ZSBfX2Ep
CiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgogIGVu
dW0gX0lvc19TZWVrZGlyIHsgX01faW9zX3NlZWtkaXJfZW5kID0gMUwgPDwgMTYgfTsKCgogIGNs
YXNzIGlvc19iYXNlCiAgewogIHB1YmxpYzoKCgogICAgY2xhc3MgZmFpbHVyZSA6IHB1YmxpYyBl
eGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBleHBsaWNpdAogICAgICBmYWlsdXJl
KGNvbnN0IHN0cmluZyYgX19zdHIpIHRocm93KCk7CgoKCiAgICAgIHZpcnR1YWwKICAgICAgfmZh
aWx1cmUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICB3aGF0KCkg
Y29uc3QgdGhyb3coKTsKCiAgICBwcml2YXRlOgogICAgICBlbnVtIHsgX01fYnVmc2l6ZSA9IDI1
NiB9OwogICAgICBjaGFyIF9NX25hbWVbX01fYnVmc2l6ZV07CgogICAgfTsKCgogICAgdHlwZWRl
ZiBfSW9zX0ZtdGZsYWdzIGZtdGZsYWdzOwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBib29s
YWxwaGEgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhhKTsKICAgIHN0YXRpYyBj
b25zdCBmbXRmbGFncyBkZWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZGVjKTsKICAgIHN0
YXRpYyBjb25zdCBmbXRmbGFncyBmaXhlZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19maXhl
ZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6
Ol9TX2hleCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaW50ZXJuYWwgPSBmbXRmbGFncyhf
X2lvc19mbGFnczo6X1NfaW50ZXJuYWwpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGxlZnQg
PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfbGVmdCk7CiAgICBzdGF0aWMgY29uc3QgZm10Zmxh
Z3Mgb2N0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX29jdCk7CiAgICBzdGF0aWMgY29uc3Qg
Zm10ZmxhZ3MgcmlnaHQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfcmlnaHQpOwogICAgc3Rh
dGljIGNvbnN0IGZtdGZsYWdzIHNjaWVudGlmaWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nf
c2NpZW50aWZpYyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd2Jhc2UgPSBmbXRmbGFn
cyhfX2lvc19mbGFnczo6X1Nfc2hvd2Jhc2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNo
b3dwb2ludCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9pbnQpOwogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIHNob3dwb3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bv
cyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2tpcHdzID0gZm10ZmxhZ3MoX19pb3NfZmxh
Z3M6Ol9TX3NraXB3cyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdW5pdGJ1ZiA9IGZtdGZs
YWdzKF9faW9zX2ZsYWdzOjpfU191bml0YnVmKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1
cHBlcmNhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdXBwZXJjYXNlKTsKICAgIHN0YXRp
YyBjb25zdCBmbXRmbGFncyBhZGp1c3RmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19h
ZGp1c3RmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYmFzZWZpZWxkID0gZm10Zmxh
Z3MoX19pb3NfZmxhZ3M6Ol9TX2Jhc2VmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg
ZmxvYXRmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19mbG9hdGZpZWxkKTsKCgogICAg
dHlwZWRlZiBfSW9zX0lvc3RhdGUgaW9zdGF0ZTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGJh
ZGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2JhZGJpdCk7CiAgICBzdGF0aWMgY29uc3Qg
aW9zdGF0ZSBlb2ZiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19lb2ZiaXQpOwogICAgc3Rh
dGljIGNvbnN0IGlvc3RhdGUgZmFpbGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2ZhaWxi
aXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZ29vZGJpdCA9IGlvc3RhdGUoMCk7CgoKICAg
IHR5cGVkZWYgX0lvc19PcGVubW9kZSBvcGVubW9kZTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9k
ZSBhcHAgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYXBwKTsKICAgIHN0YXRpYyBjb25zdCBv
cGVubW9kZSBhdGUgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYXRlKTsKICAgIHN0YXRpYyBj
b25zdCBvcGVubW9kZSBiaW5hcnkgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsKICAg
IHN0YXRpYyBjb25zdCBvcGVubW9kZSBpbiA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19pbik7
CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgb3V0ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9T
X291dCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19m
bGFnczo6X1NfdHJ1bmMpOwoKCiAgICB0eXBlZGVmIF9Jb3NfU2Vla2RpciBzZWVrZGlyOwogICAg
c3RhdGljIGNvbnN0IHNlZWtkaXIgYmVnID0gc2Vla2RpcigwKTsKICAgIHN0YXRpYyBjb25zdCBz
ZWVrZGlyIGN1ciA9IHNlZWtkaXIoMSk7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBlbmQgPSBz
ZWVrZGlyKDIpOwojIDIyOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9pb3NfYmFzZS5oIiAz
CiAgICBlbnVtIGV2ZW50CiAgICB7CiAgICAgIGVyYXNlX2V2ZW50LAogICAgICBpbWJ1ZV9ldmVu
dCwKICAgICAgY29weWZtdF9ldmVudAogICAgfTsKCiAgICB0eXBlZGVmIHZvaWQgKCpldmVudF9j
YWxsYmFjaykgKGV2ZW50LCBpb3NfYmFzZSYsIGludCk7CgogICAgdm9pZAogICAgcmVnaXN0ZXJf
Y2FsbGJhY2soZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgpOwoKICBwcm90ZWN0ZWQ6
CgogICAgc3RyZWFtc2l6ZSBfTV9wcmVjaXNpb247CiAgICBzdHJlYW1zaXplIF9NX3dpZHRoOwog
ICAgZm10ZmxhZ3MgX01fZmxhZ3M7CiAgICBpb3N0YXRlIF9NX2V4Y2VwdGlvbjsKICAgIGlvc3Rh
dGUgX01fc3RyZWFtYnVmX3N0YXRlOwoKCgogICAgc3RydWN0IF9DYWxsYmFja19saXN0CiAgICB7
CgogICAgICBfQ2FsbGJhY2tfbGlzdCogX01fbmV4dDsKICAgICAgaW9zX2Jhc2U6OmV2ZW50X2Nh
bGxiYWNrIF9NX2ZuOwogICAgICBpbnQgX01faW5kZXg7CiAgICAgIF9BdG9taWNfd29yZCBfTV9y
ZWZjb3VudDsKCiAgICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBf
X2ZuLCBpbnQgX19pbmRleCwKICAgICAgICAgICAgICAgICAgICAgX0NhbGxiYWNrX2xpc3QqIF9f
Y2IpCiAgICAgIDogX01fbmV4dChfX2NiKSwgX01fZm4oX19mbiksIF9NX2luZGV4KF9faW5kZXgp
LCBfTV9yZWZjb3VudCgwKSB7IH0KCiAgICAgIHZvaWQKICAgICAgX01fYWRkX3JlZmVyZW5jZSgp
IHsgX19hdG9taWNfYWRkKCZfTV9yZWZjb3VudCwgMSk7IH0KCgogICAgICBpbnQKICAgICAgX01f
cmVtb3ZlX3JlZmVyZW5jZSgpIHsgcmV0dXJuIF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmY291
bnQsIC0xKTsgfQogICAgfTsKCiAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX2NhbGxiYWNrczsKCiAg
ICB2b2lkCiAgICBfTV9jYWxsX2NhbGxiYWNrcyhldmVudCBfX2V2KSB0aHJvdygpOwoKICAgIHZv
aWQKICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKHZvaWQpOwoKCiAgICBzdHJ1Y3QgX1dvcmRzCiAg
ICB7CiAgICAgIHZvaWQqIF9NX3B3b3JkOwogICAgICBsb25nIF9NX2l3b3JkOwogICAgICBfV29y
ZHMoKSA6IF9NX3B3b3JkKDApLCBfTV9pd29yZCgwKSB7IH0KICAgIH07CgoKICAgIF9Xb3JkcyBf
TV93b3JkX3plcm87CgoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZF9zaXplID0g
ODsKICAgIF9Xb3JkcyBfTV9sb2NhbF93b3JkW19TX2xvY2FsX3dvcmRfc2l6ZV07CgoKICAgIGlu
dCBfTV93b3JkX3NpemU7CiAgICBfV29yZHMqIF9NX3dvcmQ7CgogICAgX1dvcmRzJgogICAgX01f
Z3Jvd193b3JkcyhpbnQgX19pbmRleCk7CgoKICAgIGxvY2FsZSBfTV9pb3NfbG9jYWxlOwoKICAg
IHZvaWQKICAgIF9NX2luaXQoKTsKCiAgcHVibGljOgoKCgoKCiAgICBjbGFzcyBJbml0CiAgICB7
CiAgICAgIGZyaWVuZCBjbGFzcyBpb3NfYmFzZTsKICAgIHB1YmxpYzoKICAgICAgSW5pdCgpOwog
ICAgICB+SW5pdCgpOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2NyZWF0ZShib29s
IF9fc3luYyk7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19pb3NfZGVzdHJveSgpOwoKICAg
IHByaXZhdGU6CiAgICAgIHN0YXRpYyBpbnQgX1NfaW9zX2Jhc2VfaW5pdDsKICAgICAgc3RhdGlj
IGJvb2wgX1Nfc3luY2VkX3dpdGhfc3RkaW87CiAgICB9OwoKCiAgICBpbmxpbmUgZm10ZmxhZ3MK
ICAgIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gX01fZmxhZ3M7IH0KCiAgICBpbmxpbmUgZm10Zmxh
Z3MKICAgIGZsYWdzKGZtdGZsYWdzIF9fZm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xk
ID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzID0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xk
OwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsKQog
ICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyB8PSBf
X2ZtdGZsOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAg
ICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwsIGZtdGZsYWdzIF9fbWFzaykKICAgIHsKICAgICAgZm10
ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgJj0gfl9fbWFzazsKICAgICAg
X01fZmxhZ3MgfD0gKF9fZm10ZmwgJiBfX21hc2spOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9
CgogICAgaW5saW5lIHZvaWQKICAgIHVuc2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZmxhZ3Mg
Jj0gfl9fbWFzazsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICBwcmVjaXNpb24oKSBjb25z
dCB7IHJldHVybiBfTV9wcmVjaXNpb247IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJl
Y2lzaW9uKHN0cmVhbXNpemUgX19wcmVjKQogICAgewogICAgICBzdHJlYW1zaXplIF9fb2xkID0g
X01fcHJlY2lzaW9uOwogICAgICBfTV9wcmVjaXNpb24gPSBfX3ByZWM7CiAgICAgIHJldHVybiBf
X29sZDsKICAgIH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoKSBjb25zdCB7IHJl
dHVybiBfTV93aWR0aDsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3aWR0aChzdHJlYW1z
aXplIF9fd2lkZSkKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3dpZHRoOwogICAg
ICBfTV93aWR0aCA9IF9fd2lkZTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIHN0YXRp
YyBib29sCiAgICBzeW5jX3dpdGhfc3RkaW8oYm9vbCBfX3N5bmMgPSB0cnVlKTsKCgogICAgbG9j
YWxlCiAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICBpbmxpbmUgbG9jYWxlCiAg
ICBnZXRsb2MoKSBjb25zdCB7IHJldHVybiBfTV9pb3NfbG9jYWxlOyB9CgoKICAgIHN0YXRpYyBp
bnQKICAgIHhhbGxvYygpIHRocm93KCk7CgogICAgaW5saW5lIGxvbmcmCiAgICBpd29yZChpbnQg
X19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfc2l6ZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193b3Jkcyhf
X2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9pd29yZDsKICAgIH0KCiAgICBpbmxpbmUgdm9p
ZComCiAgICBwd29yZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19p
eCA8IF9NX3dvcmRfc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93b3JkW19faXhd
IDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9wd29yZDsKICAg
IH0KCgogICAgfmlvc19iYXNlKCk7CgogIHByb3RlY3RlZDoKICAgIGlvc19iYXNlKCk7CgoKCiAg
cHJpdmF0ZToKICAgIGlvc19iYXNlKGNvbnN0IGlvc19iYXNlJik7CgogICAgaW9zX2Jhc2UmCiAg
ICBvcGVyYXRvcj0oY29uc3QgaW9zX2Jhc2UmKTsKCiAgfTsKCgogIGlubGluZSBpb3NfYmFzZSYK
ICBib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFz
ZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2Um
CiAgbm9ib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlv
c19iYXNlOjpib29sYWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf
YmFzZSYKICBzaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlv
c19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19i
YXNlJgogIG5vc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRm
KGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlv
c19iYXNlJgogIHNob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm
KGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp
b3NfYmFzZSYKICBub3Nob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51
bnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5s
aW5lIGlvc19iYXNlJgogIHNob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu
c2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l
IGlvc19iYXNlJgogIG5vc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51
bnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu
ZSBpb3NfYmFzZSYKICBza2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0
Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9z
X2Jhc2UmCiAgbm9za2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRm
KGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf
YmFzZSYKICB1cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihp
b3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9z
X2Jhc2UmCiAgbm91cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5z
ZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu
ZSBpb3NfYmFzZSYKICB1bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5z
ZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l
IGlvc19iYXNlJgogIG5vdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uu
dW5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlu
bGluZSBpb3NfYmFzZSYKICBpbnRlcm5hbChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jh
c2Uuc2V0Zihpb3NfYmFzZTo6aW50ZXJuYWwsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICAg
cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBsZWZ0KGlvc19iYXNlJiBf
X2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1
c3RmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHJp
Z2h0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnJpZ2h0
LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxp
bmUgaW9zX2Jhc2UmCiAgZGVjKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYo
aW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwog
IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIGhleChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9f
YmFzZS5zZXRmKGlvc19iYXNlOjpoZXgsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJu
IF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBvY3QoaW9zX2Jhc2UmIF9fYmFzZSkK
ICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6b2N0LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsK
ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGZpeGVkKGlvc19i
YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmZpeGVkLCBpb3NfYmFz
ZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNl
JgogIHNjaWVudGlmaWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3Nf
YmFzZTo6c2NpZW50aWZpYywgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFz
ZTsKICB9Cgp9CiMgNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
c3RyZWFtYnVmIiAzCgoKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFt
YnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX2lvcywKICAgICAgICAgICAgICAgICAg
ICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sCiAgICAgICAgICAg
ICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCk7CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBi
YXNpY19zdHJlYW1idWYKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgY3R5
cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVm
PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgdHJhaXRzX3R5cGU6OnN0YXRlX3R5cGUgX19zdGF0ZV90eXBlOwoKICAgICAgZnJp
ZW5kIGNsYXNzIGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5k
IGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVu
ZCBjbGFzcyBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmll
bmQgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAg
ICAgZnJpZW5kIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlw
ZT47CgogICAgICBmcmllbmQgc3RyZWFtc2l6ZQogICAgICBfX2NvcHlfc3RyZWFtYnVmczw+KGJh
c2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiYgX19pb3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYmluLF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Jv
dXQpOwoKICAgIHByb3RlY3RlZDoKCgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2J1ZjsKCgogICAg
ICBzaXplX3QgX01fYnVmX3NpemU7CgoKICAgICAgc2l6ZV90IF9NX2J1Zl9zaXplX29wdDsKCgoK
ICAgICAgYm9vbCBfTV9idWZfdW5pZmllZDsKCgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9pbl9i
ZWc7CiAgICAgIGNoYXJfdHlwZSogX01faW5fY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2Vu
ZDsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9j
dXI7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2VuZDsKCgogICAgICBpb3NfYmFzZTo6b3Blbm1v
ZGUgX01fbW9kZTsKCgogICAgICBsb2NhbGUgX01fYnVmX2xvY2FsZTsKCgogICAgICBib29sIF9N
X2J1Zl9sb2NhbGVfaW5pdDsKCgoKCgoKICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19wYmFj
a19zaXplID0gMTsKICAgICAgY2hhcl90eXBlIF9NX3BiYWNrW19TX3BiYWNrX3NpemVdOwogICAg
ICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNr
X2VuZF9zYXZlOwogICAgICBib29sIF9NX3BiYWNrX2luaXQ7CgoKICAgICAgZnBvczxfX3N0YXRl
X3R5cGU+IF9NX3BvczsKCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJhY2tfY3JlYXRlKCkKICAg
ICAgewogICAgICAgIGlmICghX01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsKICAgICAgICAgICAg
c2l6ZV90IF9fZGlzdCA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAgICAgc2l6ZV90
IF9fbGVuID0gbWluKF9TX3BiYWNrX3NpemUsIF9fZGlzdCk7CiAgICAgICAgICAgIHRyYWl0c190
eXBlOjpjb3B5KF9NX3BiYWNrLCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJh
Y2tfY3VyX3NhdmUgPSBfTV9pbl9jdXI7CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0g
X01faW5fZW5kOwogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX3BiYWNrLCBfTV9wYmFjaywgX01f
cGJhY2sgKyBfX2xlbik7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSB0cnVlOwogICAgICAg
ICAgfQogICAgICB9CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKQogICAg
ICB7CiAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7CgogICAgICAgICAgICBz
aXplX3QgX19vZmZfY3VyID0gX01faW5fY3VyIC0gX01fcGJhY2s7CgoKICAgICAgICAgICAgc2l6
ZV90IF9fb2ZmX2VuZCA9IDA7CiAgICAgICAgICAgIHNpemVfdCBfX3BiYWNrX2xlbiA9IF9NX2lu
X2VuZCAtIF9NX3BiYWNrOwogICAgICAgICAgICBzaXplX3QgX19zYXZlX2xlbiA9IF9NX3BiYWNr
X2VuZF9zYXZlIC0gX01fYnVmOwogICAgICAgICAgICBpZiAoX19wYmFja19sZW4gPiBfX3NhdmVf
bGVuKQogICAgICAgICAgICAgIF9fb2ZmX2VuZCA9IF9fcGJhY2tfbGVuIC0gX19zYXZlX2xlbjsK
CiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9wYmFja19jdXJfc2F2ZSArIF9fb2Zm
X2N1ciwKICAgICAgICAgICAgICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSArIF9fb2ZmX2Vu
ZCk7CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX19udWxsOwogICAgICAgICAgICBf
TV9wYmFja19lbmRfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9IGZh
bHNlOwogICAgICAgICAgfQogICAgICB9CgoKCiAgICAgIHZvaWQKICAgICAgX01faW5fY3VyX21v
dmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9vdXRf
Y3VyOwogICAgICAgIF9NX2luX2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVzdG91dCAmJiBf
TV9idWZfdW5pZmllZCkKICAgICAgICAgIF9NX291dF9jdXIgKz0gX19uOwogICAgICB9CiMgMjAy
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDMKICAgICAgdm9pZAogICAgICBfTV9v
dXRfY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9
IF9NX2luX2N1cjsKCiAgICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVz
dGluICYmIF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAg
ICBpZiAoX01fb3V0X2N1ciA+IF9NX291dF9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9N
X291dF9lbmQgPSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAg
ICAgICAgIF9NX2luX2VuZCArPSBfX247CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIG9m
Zl90eXBlCiAgICAgIF9NX291dF9idWZfc2l6ZSgpCiAgICAgIHsKICAgICAgICBvZmZfdHlwZSBf
X3JldCA9IDA7CiAgICAgICAgaWYgKF9NX291dF9jdXIpCiAgICAgICAgICB7CgogICAgICAgICAg
ICBpZiAoX01fb3V0X2JlZyA9PSBfTV9idWYpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRf
YmVnICsgX01fYnVmX3NpemUgLSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgIF9fcmV0ID0gX01fb3V0X2VuZCAtIF9NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAg
ICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogIHB1YmxpYzoKICAgICAgdmlydHVhbAogICAgICB+
YmFzaWNfc3RyZWFtYnVmKCkKICAgICAgewogICAgICAgIF9NX2J1Zl91bmlmaWVkID0gZmFsc2U7
CiAgICAgICAgX01fYnVmX3NpemUgPSAwOwogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7CiAg
ICAgICAgX01fbW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsKICAgICAgfQoKCiAgICAgIGxv
Y2FsZQogICAgICBwdWJpbWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQogICAgICB7CiAgICAgICAg
bG9jYWxlIF9fdG1wKHRoaXMtPmdldGxvYygpKTsKICAgICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7
CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBsb2NhbGUKICAgICAgZ2V0bG9j
KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fYnVmX2xvY2FsZTsgfQoKCiAgICAgIF9fc3RyZWFt
YnVmX3R5cGUqCiAgICAgIHB1YnNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p
CiAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1ZihfX3MsIF9fbik7IH0KCiAgICAgIHBvc190eXBl
CiAgICAgIHB1YnNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5
LAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6
aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBf
X3dheSwgX19tb2RlKTsgfQoKICAgICAgcG9zX3R5cGUKICAgICAgcHVic2Vla3Bvcyhwb3NfdHlw
ZSBfX3NwLAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3Nf
YmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrcG9zKF9f
c3AsIF9fbW9kZSk7IH0KCiAgICAgIGludAogICAgICBwdWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+
c3luYygpOyB9CgoKCiAgICAgIHN0cmVhbXNpemUKICAgICAgaW5fYXZhaWwoKQogICAgICB7CiAg
ICAgICAgc3RyZWFtc2l6ZSBfX3JldDsKICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1
ciA8IF9NX2luX2VuZCkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQp
CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2l6ZV90IF9fc2F2ZV9sZW4gPSBfTV9w
YmFja19lbmRfc2F2ZSAtIF9NX3BiYWNrX2N1cl9zYXZlOwogICAgICAgICAgICAgICAgc2l6ZV90
IF9fcGJhY2tfbGVuID0gX01faW5fY3VyIC0gX01fcGJhY2s7CiAgICAgICAgICAgICAgICBfX3Jl
dCA9IF9fc2F2ZV9sZW4gLSBfX3BiYWNrX2xlbjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPmVncHRyKCkgLSB0aGlzLT5ncHRyKCk7
CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19yZXQgPSB0aGlzLT5zaG93bWFu
eWMoKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIGludF90eXBlCiAgICAg
IHNuZXh0YygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl
b2YoKTsKICAgICAgICByZXR1cm4gKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSh0aGlzLT5zYnVt
cGMoKSwgX19lb2YpCiAgICAgICAgICAgICAgICA/IF9fZW9mIDogdGhpcy0+c2dldGMoKSk7CiAg
ICAgIH0KCiAgICAgIGludF90eXBlCiAgICAgIHNidW1wYygpOwoKICAgICAgaW50X3R5cGUKICAg
ICAgc2dldGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgICAgaWYgKF9N
X2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICBfX3JldCA9IHRyYWl0
c190eXBlOjp0b19pbnRfdHlwZSgqKHRoaXMtPmdwdHIoKSkpOwogICAgICAgIGVsc2UKICAgICAg
ICAgIF9fcmV0ID0gdGhpcy0+dW5kZXJmbG93KCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAg
ICB9CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1z
aXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNnZXRuKF9fcywgX19uKTsgfQoKCiAgICAg
IGludF90eXBlCiAgICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKTsKCiAgICAgIGludF90eXBl
CiAgICAgIHN1bmdldGMoKTsKCgogICAgICBpbnRfdHlwZQogICAgICBzcHV0YyhjaGFyX3R5cGUg
X19jKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAgc3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3Ms
IHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9
CgogICAgcHJvdGVjdGVkOgogICAgICBiYXNpY19zdHJlYW1idWYoKQogICAgICA6IF9NX2J1Zihf
X251bGwpLCBfTV9idWZfc2l6ZSgwKSwgX01fYnVmX3NpemVfb3B0KDgxOTIpLAogICAgICBfTV9i
dWZfdW5pZmllZChmYWxzZSksIF9NX2luX2JlZygwKSwgX01faW5fY3VyKDApLCBfTV9pbl9lbmQo
MCksCiAgICAgIF9NX291dF9iZWcoMCksIF9NX291dF9jdXIoMCksIF9NX291dF9lbmQoMCksCiAg
ICAgIF9NX21vZGUoaW9zX2Jhc2U6Om9wZW5tb2RlKDApKSwgX01fYnVmX2xvY2FsZShsb2NhbGUo
KSksCiAgICAgIF9NX3BiYWNrX2N1cl9zYXZlKDApLCBfTV9wYmFja19lbmRfc2F2ZSgwKSwKICAg
ICAgX01fcGJhY2tfaW5pdChmYWxzZSkKICAgICAgeyB9CgoKICAgICAgY2hhcl90eXBlKgogICAg
ICBlYmFjaygpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgog
ICAgICBncHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fY3VyOyB9CgogICAgICBjaGFyX3R5cGUq
CiAgICAgIGVncHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fZW5kOyB9CgogICAgICB2b2lkCiAg
ICAgIGdidW1wKGludCBfX24pIHsgX01faW5fY3VyICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAg
ICBzZXRnKGNoYXJfdHlwZSogX19nYmVnLCBjaGFyX3R5cGUqIF9fZ25leHQsIGNoYXJfdHlwZSog
X19nZW5kKQogICAgICB7CiAgICAgICAgX01faW5fYmVnID0gX19nYmVnOwogICAgICAgIF9NX2lu
X2N1ciA9IF9fZ25leHQ7CiAgICAgICAgX01faW5fZW5kID0gX19nZW5kOwogICAgICAgIGlmICgh
KF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pICYmIF9fZ2JlZyAmJiBfX2duZXh0ICYmIF9fZ2VuZCkK
ICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6OmluOwogICAgICB9CgoKICAg
ICAgY2hhcl90eXBlKgogICAgICBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9iZWc7IH0K
CiAgICAgIGNoYXJfdHlwZSoKICAgICAgcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9jdXI7
IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZXBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRf
ZW5kOyB9CgogICAgICB2b2lkCiAgICAgIHBidW1wKGludCBfX24pIHsgX01fb3V0X2N1ciArPSBf
X247IH0KCiAgICAgIHZvaWQKICAgICAgc2V0cChjaGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBl
KiBfX3BlbmQpCiAgICAgIHsKICAgICAgICBfTV9vdXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJl
ZzsKICAgICAgICBfTV9vdXRfZW5kID0gX19wZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBp
b3NfYmFzZTo6b3V0KSAmJiBfX3BiZWcgJiYgX19wZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9N
X21vZGUgfCBpb3NfYmFzZTo6b3V0OwogICAgICB9CgoKCiAgICAgIHZpcnR1YWwgdm9pZAogICAg
ICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgICB7CiAgICAgICAgaWYgKF9NX2J1Zl9s
b2NhbGUgIT0gX19sb2MpCiAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7CiAgICAgIH0K
CgogICAgICB2aXJ0dWFsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsX1RyYWl0cz4qCiAgICAg
IHNldGJ1ZihjaGFyX3R5cGUqLCBzdHJlYW1zaXplKQogICAgICB7IHJldHVybiB0aGlzOyB9Cgog
ICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlvc19iYXNlOjpz
ZWVrZGlyLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8
IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0K
CiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSwKICAgICAgICAg
ICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQog
ICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIGlu
dAogICAgICBzeW5jKCkgeyByZXR1cm4gMDsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQog
ICAgICBzaG93bWFueWMoKSB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUK
ICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0
dWFsIGludF90eXBlCiAgICAgIHVuZGVyZmxvdygpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBl
Ojplb2YoKTsgfQoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1ZmxvdygpCiAgICAgIHsK
ICAgICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBib29s
IF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSh0aGlzLT51bmRlcmZsb3coKSwg
X19yZXQpOwogICAgICAgIGJvb2wgX190ZXN0cGVuZGluZyA9IF9NX2luX2N1ciAmJiBfTV9pbl9j
dXIgPCBfTV9pbl9lbmQ7CiAgICAgICAgaWYgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0cGVuZGluZykK
ICAgICAgICAgIHsKICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUo
Kl9NX2luX2N1cik7CiAgICAgICAgICAgICsrX01faW5fY3VyOwogICAgICAgICAgICBpZiAoX01f
YnVmX3VuaWZpZWQgJiYgX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAgICAgICAgKytf
TV9vdXRfY3VyOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAg
ICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlID0gdHJhaXRzX3R5
cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCgogICAgICB2
aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJl
YW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIG92ZXJmbG93KGludF90
eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9m
KCk7IH0KIyA0NzggIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMwogICAgcHJpdmF0
ZToKICAgICAgYmFzaWNfc3RyZWFtYnVmKGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKSB7IH07Cgog
ICAgICBfX3N0cmVhbWJ1Zl90eXBlJgogICAgICBvcGVyYXRvcj0oY29uc3QgX19zdHJlYW1idWZf
dHlwZSYpIHsgcmV0dXJuICp0aGlzOyB9OwoKICAgIH07Cn0KCgoKCgojIDEgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RyZWFtYnVmLnRjYyIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RyZWFtYnVmLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY29uc3Qgc2l6ZV90CiAgICBiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGJhY2tfc2l6ZTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3Ry
ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPjo6CiAgICBzYnVtcGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsK
ICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgewog
ICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICoodGhpcy0+Z3B0cigpKTsKICAgICAgICAgIF9NX2lu
X2N1cl9tb3ZlKDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUo
X19jKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnVmbG93KCk7
CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAg
ICAgIGJvb2wgX190ZXN0cG9zID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsK
ICAgICAgaWYgKCFfX3Rlc3Rwb3MgfHwgIXRyYWl0c190eXBlOjplcShfX2MsIHRoaXMtPmdwdHIo
KVstMV0pKQogICAgICAgIF9fcmV0ID0gdGhpcy0+cGJhY2tmYWlsKHRyYWl0c190eXBlOjp0b19p
bnRfdHlwZShfX2MpKTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2N1cl9t
b3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0aGlz
LT5ncHRyKCkpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIHN1bmdldGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3Jl
dDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXIpCiAgICAgICAg
ewogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNf
dHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg
ICAgX19yZXQgPSB0aGlzLT5wYmFja2ZhaWwoKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5
cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3B1dGMoY2hhcl90eXBlIF9fYykK
ICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9vdXRfYnVmX3NpemUoKSkK
ICAgICAgICB7CiAgICAgICAgICAqX01fb3V0X2N1ciA9IF9fYzsKICAgICAgICAgIF9NX291dF9j
dXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9f
Yyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5vdmVyZmxvdyh0
cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFt
c2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNnZXRuKGNo
YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3Jl
dCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBzaXpl
X3QgX19idWZfbGVuID0gX01faW5fZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgaWYgKF9fYnVm
X2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19yZW1haW5pbmcg
PSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX19idWZfbGVu
LCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9p
bl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAgICAg
ICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01faW5fY3VyX21vdmUoX19sZW4pOwogICAg
ICAgICAgICB9CgogICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+dWZsb3coKTsKICAgICAgICAgICAgICBpZiAo
IXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysr
LCB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAgICArK19f
cmV0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
c3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNw
dXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3Ry
ZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAg
ICAgICAgICBvZmZfdHlwZSBfX2J1Zl9sZW4gPSBfTV9vdXRfYnVmX3NpemUoKTsKICAgICAgICAg
IGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUg
X19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX2xlbiA9
IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6
Y29weShfTV9vdXRfY3VyLCBfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xl
bjsKICAgICAgICAgICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9t
b3ZlKF9fbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93KHRy
YWl0c190eXBlOjp0b19pbnRfdHlwZSgqX19zKSk7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNf
dHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAgICArK19fczsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFt
c2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9f
aW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0
cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+KiBfX3Nib3V0KQogIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpp
bnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwogICAgICBzdHJl
YW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAgICAgc3RyZWFtc2l6ZSBf
X3h0cmN0OwogICAgICBib29sIF9fdGVzdHB1dCA9IF9fc2JvdXQtPl9NX21vZGUgJiBpb3NfYmFz
ZTo6b3V0OwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICB3aGlsZSAoX190ZXN0cHV0ICYm
IF9fYnVmc2l6ZSAhPSAtMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX2J1ZnNp
emUgIT0gMCAmJiBfX3NiaW4tPmdwdHIoKSAhPSBfX251bGwKICAgICAgICAgICAgICAgICAgJiYg
X19zYmluLT5ncHRyKCkgKyBfX2J1ZnNpemUgPD0gX19zYmluLT5lZ3B0cigpKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBfX3h0cmN0ID0gX19zYm91dC0+c3B1dG4oX19zYmlu
LT5ncHRyKCksIF9fYnVmc2l6ZSk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ICs9IF9feHRyY3Q7
CiAgICAgICAgICAgICAgICAgIF9fc2Jpbi0+X01faW5fY3VyX21vdmUoX194dHJjdCk7CiAgICAg
ICAgICAgICAgICAgIGlmIChfX3h0cmN0ICE9IF9fYnVmc2l6ZSkKICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUgPQogICAgICAgICAgICAgICAg
ICAgIF9fc2Jpbi0+X01fYnVmX3NpemVfb3B0ID4gMCA/IF9fc2Jpbi0+X01fYnVmX3NpemVfb3B0
IDogMTsKICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiA9CiAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAq
IF9fc2l6ZSkpOwogICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fY2hhcnNyZWFkID0gX19z
YmluLT5zZ2V0bihfX2J1ZiwgX19zaXplKTsKICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9f
c2JvdXQtPnNwdXRuKF9fYnVmLCBfX2NoYXJzcmVhZCk7CiAgICAgICAgICAgICAgICAgIF9fcmV0
ICs9IF9feHRyY3Q7CiAgICAgICAgICAgICAgICAgIGlmIChfX3h0cmN0ICE9IF9fY2hhcnNyZWFk
KQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX3NiaW4tPnNnZXRjKCksIF9UcmFpdHM6OmVv
ZigpKSkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIF9fYnVmc2l6ZSA9IF9f
c2Jpbi0+aW5fYXZhaWwoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgewogICAgICAgICAgX19pb3Muc2V0c3RhdGUoaW9zX2Jh
c2U6OmZhaWxiaXQpOwogICAgICAgICAgaWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6ZmFpbGJpdCkgIT0gMCkKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICByZXR1
cm4gX19yZXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1i
dWY8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3Ry
ZWFtYnVmcyhiYXNpY19pb3M8Y2hhcj4mLCBiYXNpY19zdHJlYW1idWY8Y2hhcj4qLAogICAgICAg
ICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPGNoYXI+Kik7CgoKICBleHRlcm4gdGVtcGxh
dGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAg
c3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPHdjaGFyX3Q+JiwgYmFz
aWNfc3RyZWFtYnVmPHdjaGFyX3Q+KiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVh
bWJ1Zjx3Y2hhcl90PiopOwoKfQojIDQ5MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVm
IiAyIDMKIyA1MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAyIDMKIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9iYXNpY19pb3MuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
cmVhbWJ1Zl9pdGVyYXRvci5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dHJlYW1idWZfaXRlcmF0b3IuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0
b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzOjpvZmZfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCosIF9D
aGFyVCY+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CgoKCgoK
CgogICAgICBtdXRhYmxlIHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBpbnRfdHlwZSBf
TV9jOwoKICAgIHB1YmxpYzoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcigpIHRocm93KCkKICAg
ICAgOiBfTV9zYnVmKDApLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgogICAgICBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1
ZihfX3MucmRidWYoKSksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KCiAgICAgIGlzdHJl
YW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3coKQogICAgICA6IF9NX3Ni
dWYoX19zKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQoKCiAgICAgIGNoYXJfdHlwZQog
ICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6dG9fY2hh
cl90eXBlKF9NX2dldCgpKTsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3Bl
cmF0b3IrKygpCiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190
eXBlOjplb2YoKTsKICAgICAgICBpZiAoX01fc2J1ZiAmJiB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5
cGUoX01fc2J1Zi0+c2J1bXBjKCksIF9fZW9mKSkKICAgICAgICAgIF9NX3NidWYgPSAwOwogICAg
ICAgIGVsc2UKICAgICAgICAgIF9NX2MgPSBfX2VvZjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgIH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAg
ICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK
ICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yIF9fb2xkID0gKnRoaXM7CiAgICAgICAgaWYgKF9N
X3NidWYKICAgICAgICAgICAgJiYgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChfX29sZC5fTV9j
ID0gX01fc2J1Zi0+c2J1bXBjKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19lb2YpKQogICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAgICAgZWxzZQogICAgICAg
ICAgX01fYyA9IF9fZW9mOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCgoKICAgICAg
Ym9vbAogICAgICBlcXVhbChjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yJiBfX2IpIGNvbnN0CiAg
ICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK
ICAgICAgICBib29sIF9fdGhpc2VvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9nZXQo
KSwgX19lb2YpOwogICAgICAgIGJvb2wgX19iZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl
KF9fYi5fTV9nZXQoKSwgX19lb2YpOwogICAgICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVv
ZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7CiAgICAgIH0KCgogICAgcHJpdmF0ZToKICAg
ICAgaW50X3R5cGUKICAgICAgX01fZ2V0KCkgY29uc3QKICAgICAgewogICAgICAgIGNvbnN0IGlu
dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGludF90eXBlIF9fcmV0
ID0gX19lb2Y7CiAgICAgICAgaWYgKF9NX3NidWYpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlm
ICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX2MsIF9fZW9mKSkKICAgICAgICAgICAgICBf
X3JldCA9IF9NX2M7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5
cGU6OmVxX2ludF90eXBlKChfX3JldCA9IF9NX3NidWYtPnNnZXRjKCkpLCBfX2VvZikpCiAgICAg
ICAgICAgICAgICBfTV9zYnVmID0gMDsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7
CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRl
cmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVh
bChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8
X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0
ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19i
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBj
bGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRl
cmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz
X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3Ry
ZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
IG9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1
ZjsKICAgICAgYm9vbCBfTV9mYWlsZWQ7CgogICAgcHVibGljOgogICAgICBpbmxpbmUKICAgICAg
b3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgdGhyb3cgKCkKICAgICAgOiBf
TV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9zdHJl
YW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3cgKCkKICAgICAgOiBfTV9z
YnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYyk7CgogICAgICBvc3RyZWFtYnVmX2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvciooKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9Cgog
ICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAg
b3BlcmF0b3IrKygpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGJvb2wK
ICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBfTV9mYWlsZWQ7IH0K
ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGlubGluZSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPShfQ2hhclQgX19jKQogICAg
ewogICAgICBpZiAoIV9NX2ZhaWxlZCAmJgogICAgICAgICAgX1RyYWl0czo6ZXFfaW50X3R5cGUo
X01fc2J1Zi0+c3B1dGMoX19jKSwgX1RyYWl0czo6ZW9mKCkpKQogICAgICAgIF9NX2ZhaWxlZCA9
IHRydWU7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KfQojIDQxICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L2xvY2FsZV9mYWNldHMuaCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9j
YWxlX2ZhY2V0cy5oIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAxIDMK
IyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djdHlwZSIgMwoKCgoKIyAxICIvdXNyL2luY2x1
ZGUvd2N0eXBlLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKIyAxICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzYg
Ii91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMiAzCiMgNDUgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIg
MwoKCgojIDY0ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGludCB3Y3R5cGVfdDsKCiMgODYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwplbnVtCnsK
ICBfX0lTd3VwcGVyID0gMCwKICBfX0lTd2xvd2VyID0gMSwKICBfX0lTd2FscGhhID0gMiwKICBf
X0lTd2RpZ2l0ID0gMywKICBfX0lTd3hkaWdpdCA9IDQsCiAgX19JU3dzcGFjZSA9IDUsCiAgX19J
U3dwcmludCA9IDYsCiAgX19JU3dncmFwaCA9IDcsCiAgX19JU3dibGFuayA9IDgsCiAgX19JU3dj
bnRybCA9IDksCiAgX19JU3dwdW5jdCA9IDEwLAogIF9fSVN3YWxudW0gPSAxMSwKCiAgX0lTd3Vw
cGVyID0gKChfX0lTd3VwcGVyKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikpIDw8
IDI0KSA6ICgoX19JU3d1cHBlcikgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkg
PDwgOCkgOiAoKF9fSVN3dXBwZXIpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikp
ID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA+PiAyNCkpKSksCiAgX0lTd2xv
d2VyID0gKChfX0lTd2xvd2VyKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikpIDw8
IDI0KSA6ICgoX19JU3dsb3dlcikgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkg
PDwgOCkgOiAoKF9fSVN3bG93ZXIpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikp
ID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA+PiAyNCkpKSksCiAgX0lTd2Fs
cGhhID0gKChfX0lTd2FscGhhKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkpIDw8
IDI0KSA6ICgoX19JU3dhbHBoYSkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkg
PDwgOCkgOiAoKF9fSVN3YWxwaGEpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkp
ID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA+PiAyNCkpKSksCiAgX0lTd2Rp
Z2l0ID0gKChfX0lTd2RpZ2l0KSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkpIDw8
IDI0KSA6ICgoX19JU3dkaWdpdCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkg
PDwgOCkgOiAoKF9fSVN3ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkp
ID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA+PiAyNCkpKSksCiAgX0lTd3hk
aWdpdCA9ICgoX19JU3d4ZGlnaXQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkp
IDw8IDI0KSA6ICgoX19JU3d4ZGlnaXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d4ZGln
aXQpKSA8PCA4KSA6ICgoX19JU3d4ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d4
ZGlnaXQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDI0KSkpKSwK
ICBfSVN3c3BhY2UgPSAoKF9fSVN3c3BhY2UpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3Nw
YWNlKSkgPDwgMjQpIDogKChfX0lTd3NwYWNlKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3
c3BhY2UpKSA8PCA4KSA6ICgoX19JU3dzcGFjZSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d3NwYWNlKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpID4+IDI0KSkpKSwK
ICBfSVN3cHJpbnQgPSAoKF9fSVN3cHJpbnQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3By
aW50KSkgPDwgMjQpIDogKChfX0lTd3ByaW50KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3
cHJpbnQpKSA8PCA4KSA6ICgoX19JU3dwcmludCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d3ByaW50KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpID4+IDI0KSkpKSwK
ICBfSVN3Z3JhcGggPSAoKF9fSVN3Z3JhcGgpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2dy
YXBoKSkgPDwgMjQpIDogKChfX0lTd2dyYXBoKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3
Z3JhcGgpKSA8PCA4KSA6ICgoX19JU3dncmFwaCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2dyYXBoKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpID4+IDI0KSkpKSwK
ICBfSVN3YmxhbmsgPSAoKF9fSVN3YmxhbmspIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2Js
YW5rKSkgPDwgMjQpIDogKChfX0lTd2JsYW5rKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3
YmxhbmspKSA8PCA4KSA6ICgoX19JU3dibGFuaykgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2JsYW5rKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpID4+IDI0KSkpKSwK
ICBfSVN3Y250cmwgPSAoKF9fSVN3Y250cmwpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2Nu
dHJsKSkgPDwgMjQpIDogKChfX0lTd2NudHJsKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3
Y250cmwpKSA8PCA4KSA6ICgoX19JU3djbnRybCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2NudHJsKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpID4+IDI0KSkpKSwK
ICBfSVN3cHVuY3QgPSAoKF9fSVN3cHVuY3QpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3B1
bmN0KSkgPDwgMjQpIDogKChfX0lTd3B1bmN0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3
cHVuY3QpKSA8PCA4KSA6ICgoX19JU3dwdW5jdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d3B1bmN0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpID4+IDI0KSkpKSwK
ICBfSVN3YWxudW0gPSAoKF9fSVN3YWxudW0pIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2Fs
bnVtKSkgPDwgMjQpIDogKChfX0lTd2FsbnVtKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3
YWxudW0pKSA8PCA4KSA6ICgoX19JU3dhbG51bSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2FsbnVtKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpID4+IDI0KSkpKQp9
OwoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgpleHRlcm4gaW50IGlzd2FsbnVtICh3aW50X3QgX193
YykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBpc3dhbHBoYSAod2ludF90IF9fd2MpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgaXN3Y250cmwgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBpc3dkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlz
d2dyYXBoICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd2xvd2VyICh3
aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc3dwcmludCAod2ludF90IF9fd2Mp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dwdW5jdCAod2ludF90IF9fd2MpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBpc3dzcGFjZSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBpc3d1cHBlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBp
c3d4ZGlnaXQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlzd2JsYW5r
ICh3aW50X3QgX193YykgdGhyb3cgKCk7CiMgMTg2ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMK
ZXh0ZXJuIHdjdHlwZV90IHdjdHlwZSAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5KSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBpc3djdHlwZSAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVzYykg
dGhyb3cgKCk7CgoKCgoKCgoKCgp0eXBlZGVmIF9fY29uc3QgX19pbnQzMl90ICp3Y3RyYW5zX3Q7
CgoKCgoKCgpleHRlcm4gd2ludF90IHRvd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoK
ZXh0ZXJuIHdpbnRfdCB0b3d1cHBlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCn0KIyAyMjgg
Ii91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwpleHRlcm4gIkMiIHsKCgoKCmV4dGVybiB3Y3RyYW5z
X3Qgd2N0cmFucyAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5KSB0aHJvdyAoKTsKCgpleHRlcm4g
d2ludF90IHRvd2N0cmFucyAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MpIHRocm93ICgp
OwoKCgoKCgoKCmV4dGVybiBpbnQgaXN3YWxudW1fbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3Qg
X19sb2NhbGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgaXN3YWxwaGFfbCAod2ludF90IF9f
d2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXN3Y250cmxf
bCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IGlzd2RpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBpc3dncmFwaF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xv
Y2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBf
X2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd3ByaW50X2wgKHdp
bnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
aXN3cHVuY3RfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGludCBpc3dzcGFjZV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2Fs
ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xv
Y2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3eGRpZ2l0X2wgKHdp
bnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
aXN3YmxhbmtfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoK
CgpleHRlcm4gd2N0eXBlX3Qgd2N0eXBlX2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19s
b2NhbGVfdCBfX2xvY2FsZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3djdHlwZV9s
ICh3aW50X3QgX193Yywgd2N0eXBlX3QgX19kZXNjLCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAg
IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHdpbnRfdCB0b3dsb3dlcl9sICh3aW50X3QgX193Yywg
X19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3d1cHBlcl9s
ICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3
Y3RyYW5zX3Qgd2N0cmFuc19sIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3Qg
X19sb2NhbGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3djdHJhbnNfbCAod2lu
dF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgp9CiMgNTMgIi91c3IvaW5jbHVkZS9jKysv
My4yL2N3Y3R5cGUiIDIgMwojIDc3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAzCm5h
bWVzcGFjZSBzdGQKewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6OndjdHlwZV90OwogIHVz
aW5nIDo6d2N0cmFuc190OwoKICB1c2luZyA6Omlzd2FsbnVtOwogIHVzaW5nIDo6aXN3YWxwaGE7
CiAgdXNpbmcgOjppc3dibGFuazsKICB1c2luZyA6Omlzd2NudHJsOwogIHVzaW5nIDo6aXN3ZGln
aXQ7CiAgdXNpbmcgOjppc3dncmFwaDsKICB1c2luZyA6Omlzd2xvd2VyOwogIHVzaW5nIDo6aXN3
cHJpbnQ7CiAgdXNpbmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3B1bmN0OwogIHVzaW5nIDo6
aXN3c3BhY2U7CiAgdXNpbmcgOjppc3d1cHBlcjsKICB1c2luZyA6Omlzd3hkaWdpdDsKICB1c2lu
ZyA6Omlzd2N0eXBlOwogIHVzaW5nIDo6dG93bG93ZXI7CiAgdXNpbmcgOjp0b3d1cHBlcjsKICB1
c2luZyA6OnRvd2N0cmFuczsKICB1c2luZyA6OndjdHJhbnM7CiAgdXNpbmcgOjp3Y3R5cGU7Cn0K
IyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQ7
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2N0eXBlX2Jhc2Uu
aCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jdHlwZV9i
YXNlLmgiIDMKICBzdHJ1Y3QgY3R5cGVfYmFzZQogIHsKCiAgICB0eXBlZGVmIGNvbnN0IGludCog
X190b190eXBlOwoKCgogICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtYXNrOwogICAgc3RhdGlj
IGNvbnN0IG1hc2sgdXBwZXIgPSBfSVN1cHBlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGxvd2Vy
ID0gX0lTbG93ZXI7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbHBoYSA9IF9JU2FscGhhOwogICAg
c3RhdGljIGNvbnN0IG1hc2sgZGlnaXQgPSBfSVNkaWdpdDsKICAgIHN0YXRpYyBjb25zdCBtYXNr
IHhkaWdpdCA9IF9JU3hkaWdpdDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNlID0gX0lTc3Bh
Y2U7CiAgICBzdGF0aWMgY29uc3QgbWFzayBwcmludCA9IF9JU3ByaW50OwogICAgc3RhdGljIGNv
bnN0IG1hc2sgZ3JhcGggPSBfSVNncmFwaDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsID0g
X0lTY250cmw7CiAgICBzdGF0aWMgY29uc3QgbWFzayBwdW5jdCA9IF9JU3B1bmN0OwogICAgc3Rh
dGljIGNvbnN0IG1hc2sgYWxudW0gPSBfSVNhbG51bTsKICB9OwojIDY0ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBjbGFzcyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpm
YWNldCwgcHVibGljIGN0eXBlX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlw
ZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQoKICAg
ICAgY29uc3QgY2hhcl90eXBlKgogICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0
IGNoYXJfdHlwZSAqX19oaSwgbWFzayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAg
ICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8s
IF9faGkpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90KG1hc2sgX19t
LCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAg
Y2hhcl90eXBlCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fdG91cHBlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAg
IHRvdXBwZXIoY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJf
dHlwZQogICAgICB0b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX3RvbG93ZXIoX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b2xv
d2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUK
ICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVu
KF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8s
IGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX190bykgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fd2lkZW4oX19sbywgX19oaSwgX190byk7IH0KCiAgICAgIGNoYXIKICAgICAgbmFy
cm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgog
ICAgICBuYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGks
CiAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciAqX190bykgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsgfQoKICAg
IHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNp
emVfdCBfX3JlZnMgPSAwKTogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVh
bAogICAgICB+X19jdHlwZV9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIGJvb2wK
ICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8s
IGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0ID0g
MDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sg
X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg
ICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs
IGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAg
dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xv
LCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90
eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0
IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg
ICAgZG9fd2lkZW4oY2hhcikgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgog
ICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAogICAgICAg
ICAgICAgICBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFy
CiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0ID0gMDsKCiAg
ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90
eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAgY2hhciBf
X2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9i
YXNlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoKICAgICAgc3Rh
dGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19y
ZWZzID0gMCkgOiBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsgfQoKICAg
cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBi
b29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8s
IGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJf
dHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
Y29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90
eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUgX19j
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVy
KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUq
IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJf
dHlwZQogICAgICBkb193aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGks
IGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19u
YXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29u
c3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25z
dCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBf
X2Rlc3QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9j
YWxlOjppZCBjdHlwZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBl
PGNoYXI+IDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxjaGFyPgogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAg
ICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2N0eXBlOwogICAgICBib29sIF9NX2RlbDsKICAgICAg
X190b190eXBlIF9NX3RvdXBwZXI7CiAgICAgIF9fdG9fdHlwZSBfTV90b2xvd2VyOwogICAgICBj
b25zdCBtYXNrKiBfTV90YWJsZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk
IGlkOwogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAxICsgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oLTEpOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoY29uc3Qg
bWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVmcyA9IDAp
OwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IG1h
c2sqIF9fdGFibGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2UsCiAgICAgICAgICAgIHNpemVfdCBf
X3JlZnMgPSAwKTsKCiAgICAgIGlubGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9f
YykgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3QgY2hhciog
X19sbywgY29uc3QgY2hhciogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgaW5saW5l
IGNvbnN0IGNoYXIqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNv
bnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNj
YW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25z
dDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGNvbnN0IG1hc2sqCiAgICAgIHRhYmxlKCkgY29uc3Qg
dGhyb3coKQogICAgICB7IHJldHVybiBfTV90YWJsZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IG1h
c2sqCiAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICB+
Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90
eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f
aXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9f
dmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2Fu
X2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o
aSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9u
b3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAg
IGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf
X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hh
cl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190
b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25z
dCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNo
YXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlw
ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2Rm
YXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0
IGN0eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxlJiBf
X2xvYyk7CgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8d2NoYXJfdD4gOiBwdWJsaWMg
X19jdHlwZV9hYnN0cmFjdF9iYXNlPHdjaGFyX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0
eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdjdHlwZV90IF9fd21hc2tf
dHlwZTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7
CgogICAgcHVibGljOgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp
dAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAogICAgICBj
dHlwZShfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3Rl
ZDoKICAgICAgX193bWFza190eXBlCiAgICAgIF9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFz
ayBfX20pIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1
YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBf
X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBj
aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNo
YXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBl
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVy
KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl
CiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgog
ICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5
cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNo
YXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90
eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBj
b25zdDsKCiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjdHlwZTx3Y2hhcl90PiYKICAg
IHVzZV9mYWNldDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKCgojIDEg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jdHlwZV9pbmxpbmUuaCIgMSAz
CiMgMzcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jdHlwZV9pbmxpbmUu
aCIgMwogIGJvb2wKICBjdHlwZTxjaGFyPjo6CiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25z
dAogIHsgcmV0dXJuIF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldICYg
X19tOyB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIqIF9f
bG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBjb25zdAogIHsKICAgIHdoaWxl
IChfX2xvdyA8IF9faGlnaCkKICAgICAgKl9fdmVjKysgPSBfTV90YWJsZVtzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPigqX19sb3crKyldOwogICAgcmV0dXJuIF9faGlnaDsKICB9CgogIGNvbnN0
IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9f
bG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19o
aWdoCiAgICAgICAgICAgJiYgIShfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigq
X19sb3cpXSAmIF9fbSkpCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQoKICBj
b25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hh
ciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cg
PCBfX2hpZ2gKICAgICAgICAgICAmJiAoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oKl9fbG93KV0gJiBfX20pICE9IDApCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7
CiAgfQojIDQwMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIg
MwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1lIDog
cHVibGljIGN0eXBlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGVfYnluYW1lKGNvbnN0IGNo
YXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh
bAogICAgICB+Y3R5cGVfYnluYW1lKCkgeyB9OwogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIGN0
eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7
CgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTx3Y2hhcl90Pjo6Y3R5cGVfYnluYW1lKGNv
bnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L2NvZGVjdnQuaCIgMSAzCiMgNDUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY29kZWN2dC5o
IiAzCgoKICBjbGFzcyBjb2RlY3Z0X2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSByZXN1bHQK
ICAgIHsKICAgICAgb2ssCiAgICAgIHBhcnRpYWwsCiAgICAgIGVycm9yLAogICAgICBub2NvbnYK
ICAgIH07CiAgfTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBf
RXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIF9fY29kZWN2dF9hYnN0cmFjdF9i
YXNlCiAgICA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY29kZWN2dF9iYXNlCiAgICB7
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsK
ICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJu
VCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoKICAgICAg
cmVzdWx0CiAgICAgIG91dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSog
X19mcm9tLAogICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGlu
dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0
ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv
bnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJvbSwg
X19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Rv
LCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAgICAgfQoKICAgICAgcmVzdWx0CiAgICAgIHVuc2hp
ZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBf
X3RvX2VuZCwKICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlmdChfX3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9fdG9f
bmV4dCk7IH0KCiAgICAgIHJlc3VsdAogICAgICBpbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z
dCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t
X2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgaW50ZXJuX3R5
cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgaW50ZXJuX3R5cGUqJiBf
X3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9faW4oX19zdGF0
ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIGludAogICAg
ICBlbmNvZGluZygpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZW5jb2Rp
bmcoKTsgfQoKICAgICAgYm9vbAogICAgICBhbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQog
ICAgICB7IHJldHVybiB0aGlzLT5kb19hbHdheXNfbm9jb252KCk7IH0KCiAgICAgIGludAogICAg
ICBsZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f
ZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19sZW5ndGgoX19zdGF0ZSwgX19mcm9tLCBf
X2VuZCwgX19tYXgpOyB9CgogICAgICBpbnQKICAgICAgbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93
KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbWF4X2xlbmd0aCgpOyB9CgogICAgcHJvdGVjdGVk
OgogICAgICBleHBsaWNpdAogICAgICBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZShzaXplX3QgX19y
ZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAg
IH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQKICAg
ICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20s
CiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJu
X3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRl
cm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkg
Y29uc3QgPSAwOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90
eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5f
dHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAg
ICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBl
eHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t
X2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJu
X3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5
cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2Vu
Y29kaW5nKCkgY29uc3QgdGhyb3coKSA9IDA7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9f
YWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAg
ICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t
LAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgp
IGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25z
dCB0aHJvdygpID0gMDsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5
cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dAogICAg
OiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3Rh
dGVUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3Vs
dCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVk
ZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBl
OwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp
dAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0
cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAg
cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0
dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJu
X3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5k
LCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5
cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBl
KiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hp
ZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAg
ICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7
CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBj
b25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSog
X19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAg
aW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50
ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9f
ZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fs
d2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9f
bGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAg
ICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQs
IHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRl
cm5ULCBfU3RhdGVUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNoYXIs
IGNoYXIsIG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNo
YXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hh
ciBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBl
ZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2Fs
ZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAw
KTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKTsKCiAgICAg
IHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBp
bnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJv
bV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRl
cm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJu
X3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9f
dW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAg
ICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3Rh
dGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90
eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAg
ICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAg
ICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAg
ICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAg
ZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAg
ICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20s
CiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhy
b3coKTsKICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hh
ciwgbWJzdGF0ZV90PgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8d2NoYXJf
dCwgY2hhciwgbWJzdGF0ZV90PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiB3Y2hh
cl90IGludGVybl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7CiAgICAgIHR5
cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9j
YWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9
IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpOwoKICAg
ICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0
IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19m
cm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4
dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRl
cm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBk
b191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5
cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgICAgICBleHRlcm5f
dHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19p
bihzdGF0ZV90eXBlJiBfX3N0YXRlLAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9f
ZnJvbSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsCiAgICAgICAgICAgICBjb25zdCBl
eHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8s
IGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19u
ZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwKICAgICAgaW50IGRvX2VuY29kaW5nKCkgY29uc3Qg
dGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgYm9vbCBkb19hbHdheXNfbm9jb252KCkgY29u
c3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgaW50IGRvX2xlbmd0aChjb25zdCBzdGF0
ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgICAgICBj
b25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICAgIH07CgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBf
U3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWUgOiBwdWJsaWMgY29kZWN2dDxfSW50ZXJu
VCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAg
ICAgIGNvZGVjdnRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAg
OiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4oX19yZWZzKSB7IH0KCiAgICBw
cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnRfYnluYW1lKCkgeyB9CiAgICB9
OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvY29kZWN2dF9z
cGVjaWFsaXphdGlvbnMuaCIgMSAzCiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGlu
dXgvYml0cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oIiAzCiAgY2xhc3MgX19lbmNfdHJhaXRz
CiAgewogIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgaWNvbnZfdCBfX2Rlc2NfdHlwZTsKCiAgcHJv
dGVjdGVkOgoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX21heF9zaXplID0gMzI7CgogICAgY2hh
ciBfTV9pbnRfZW5jW19TX21heF9zaXplXTsKCiAgICBjaGFyIF9NX2V4dF9lbmNbX1NfbWF4X3Np
emVdOwoKCiAgICBfX2Rlc2NfdHlwZSBfTV9pbl9kZXNjOwoKICAgIF9fZGVzY190eXBlIF9NX291
dF9kZXNjOwoKCiAgICBpbnQgX01fZXh0X2JvbTsKCgogICAgaW50IF9NX2ludF9ib207CgogIHB1
YmxpYzoKICAgIGV4cGxpY2l0IF9fZW5jX3RyYWl0cygpCiAgICA6IF9NX2luX2Rlc2MoMCksIF9N
X291dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAgICAgIG1l
bXNldChfTV9pbnRfZW5jLCAwLCBfU19tYXhfc2l6ZSk7CiAgICAgIG1lbXNldChfTV9leHRfZW5j
LCAwLCBfU19tYXhfc2l6ZSk7CiAgICB9CgogICAgZXhwbGljaXQgX19lbmNfdHJhaXRzKGNvbnN0
IGNoYXIqIF9faW50LCBjb25zdCBjaGFyKiBfX2V4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19pYm9tID0gMCwgaW50IF9fZWJvbSA9IDApCiAgICA6IF9NX2luX2Rlc2MoMCksIF9N
X291dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAgICAgIHN0
cm5jcHkoX01faW50X2VuYywgX19pbnQsIF9TX21heF9zaXplKTsKICAgICAgc3RybmNweShfTV9l
eHRfZW5jLCBfX2V4dCwgX1NfbWF4X3NpemUpOwogICAgfQoKCgoKCgogICAgX19lbmNfdHJhaXRz
KGNvbnN0IF9fZW5jX3RyYWl0cyYgX19vYmopOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVzYygw
KQogICAgewogICAgICBzdHJuY3B5KF9NX2ludF9lbmMsIF9fb2JqLl9NX2ludF9lbmMsIF9TX21h
eF9zaXplKTsKICAgICAgc3RybmNweShfTV9leHRfZW5jLCBfX29iai5fTV9leHRfZW5jLCBfU19t
YXhfc2l6ZSk7CiAgICAgIF9NX2V4dF9ib20gPSBfX29iai5fTV9leHRfYm9tOwogICAgICBfTV9p
bnRfYm9tID0gX19vYmouX01faW50X2JvbTsKICAgIH0KCgogICAgX19lbmNfdHJhaXRzJgogICAg
b3BlcmF0b3I9KGNvbnN0IF9fZW5jX3RyYWl0cyYgX19vYmopCiAgICB7CiAgICAgIHN0cm5jcHko
X01faW50X2VuYywgX19vYmouX01faW50X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5
KF9NX2V4dF9lbmMsIF9fb2JqLl9NX2V4dF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgX01faW5f
ZGVzYyA9IDA7CiAgICAgIF9NX291dF9kZXNjID0gMDsKICAgICAgX01fZXh0X2JvbSA9IF9fb2Jq
Ll9NX2V4dF9ib207CiAgICAgIF9NX2ludF9ib20gPSBfX29iai5fTV9pbnRfYm9tOwogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogICAgfl9fZW5jX3RyYWl0cygpCiAgICB7CiAgICAgIF9fZGVz
Y190eXBlIF9fZXJyID0gcmVpbnRlcnByZXRfY2FzdDxpY29udl90PigtMSk7CiAgICAgIGlmIChf
TV9pbl9kZXNjICYmIF9NX2luX2Rlc2MgIT0gX19lcnIpCiAgICAgICAgaWNvbnZfY2xvc2UoX01f
aW5fZGVzYyk7CiAgICAgIGlmIChfTV9vdXRfZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2VycikK
ICAgICAgICBpY29udl9jbG9zZShfTV9vdXRfZGVzYyk7CiAgICB9CgogICAgdm9pZAogICAgX01f
aW5pdCgpCiAgICB7CiAgICAgIGNvbnN0IF9fZGVzY190eXBlIF9fZXJyID0gcmVpbnRlcnByZXRf
Y2FzdDxpY29udl90PigtMSk7CiAgICAgIGlmICghX01faW5fZGVzYykKICAgICAgICB7CiAgICAg
ICAgICBfTV9pbl9kZXNjID0gaWNvbnZfb3BlbihfTV9pbnRfZW5jLCBfTV9leHRfZW5jKTsKICAg
ICAgICAgIGlmIChfTV9pbl9kZXNjID09IF9fZXJyKQogICAgICAgICAgICBfX3Rocm93X3J1bnRp
bWVfZXJyb3IoImNyZWF0aW5nIGljb252IGlucHV0IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAg
ICAgIH0KICAgICAgaWYgKCFfTV9vdXRfZGVzYykKICAgICAgICB7CiAgICAgICAgICBfTV9vdXRf
ZGVzYyA9IGljb252X29wZW4oX01fZXh0X2VuYywgX01faW50X2VuYyk7CiAgICAgICAgICBpZiAo
X01fb3V0X2Rlc2MgPT0gX19lcnIpCiAgICAgICAgICAgIF9fdGhyb3dfcnVudGltZV9lcnJvcigi
Y3JlYXRpbmcgaWNvbnYgb3V0cHV0IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAgICAgIH0KICAg
IH0KCiAgICBib29sCiAgICBfTV9nb29kKCkKICAgIHsKICAgICAgY29uc3QgX19kZXNjX3R5cGUg
X19lcnIgPSByZWludGVycHJldF9jYXN0PGljb252X3Q+KC0xKTsKICAgICAgYm9vbCBfX3Rlc3Qg
PSBfTV9pbl9kZXNjICYmIF9NX2luX2Rlc2MgIT0gX19lcnI7CiAgICAgIF9fdGVzdCAmPSBfTV9v
dXRfZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2VycjsKICAgICAgcmV0dXJuIF9fdGVzdDsKICAg
IH0KCiAgICBjb25zdCBfX2Rlc2NfdHlwZSoKICAgIF9NX2dldF9pbl9kZXNjcmlwdG9yKCkKICAg
IHsgcmV0dXJuICZfTV9pbl9kZXNjOyB9CgogICAgY29uc3QgX19kZXNjX3R5cGUqCiAgICBfTV9n
ZXRfb3V0X2Rlc2NyaXB0b3IoKQogICAgeyByZXR1cm4gJl9NX291dF9kZXNjOyB9CgogICAgaW50
CiAgICBfTV9nZXRfZXh0ZXJuYWxfYm9tKCkKICAgIHsgcmV0dXJuIF9NX2V4dF9ib207IH0KCiAg
ICBpbnQKICAgIF9NX2dldF9pbnRlcm5hbF9ib20oKQogICAgeyByZXR1cm4gX01faW50X2JvbTsg
fQoKICAgIGNvbnN0IGNoYXIqCiAgICBfTV9nZXRfaW50ZXJuYWxfZW5jKCkKICAgIHsgcmV0dXJu
IF9NX2ludF9lbmM7IH0KCiAgICBjb25zdCBjaGFyKgogICAgX01fZ2V0X2V4dGVybmFsX2VuYygp
CiAgICB7IHJldHVybiBfTV9leHRfZW5jOyB9CiAgfTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY2xhc3MgY29kZWN2dDxfSW50ZXJuVCwg
X0V4dGVyblQsIF9fZW5jX3RyYWl0cz4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9i
YXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPgogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYg
X0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7
CiAgICAgIHR5cGVkZWYgX19lbmNfdHJhaXRzIHN0YXRlX3R5cGU7CiAgICAgIHR5cGVkZWYgX19l
bmNfdHJhaXRzOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190
cmFpdHMgX19lbmNfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4
cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0
X2Fic3RyYWN0X2Jhc2U8aW50ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3Jl
ZnMpCiAgICAgIHsgfQoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChfX2VuY190eXBlKiBf
X2VuYywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8
aW50ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMpCiAgICAgIHsgfQoK
ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpIHsgfQoKICAgICAg
dmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGlu
dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9t
X2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVy
bl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5f
dHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191
bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAg
ICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv
bnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0
ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5
cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAg
ICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAg
IGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAg
IGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBk
b19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAg
IGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwK
ICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJv
dygpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRl
cm5UPgogICAgbG9jYWxlOjppZAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5j
X3RyYWl0cz46OmlkOwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Q+CiAgICBpbmxpbmUgc2l6
ZV90CiAgICBfX2ljb252X2FkYXB0b3Ioc2l6ZV90KCpfX2Z1bmMpKGljb252X3QsIF9ULCBzaXpl
X3QqLCBjaGFyKiosIHNpemVfdCopLAogICAgICAgICAgICAgICAgICAgIGljb252X3QgX19jZCwg
Y2hhcioqIF9faW5idWYsIHNpemVfdCogX19pbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgIGNo
YXIqKiBfX291dGJ1Ziwgc2l6ZV90KiBfX291dGJ5dGVzKQogICAgeyByZXR1cm4gX19mdW5jKF9f
Y2QsIChfVClfX2luYnVmLCBfX2luYnl0ZXMsIF9fb3V0YnVmLCBfX291dGJ5dGVzKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0
X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0
cz46OgogICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBf
X2Zyb20sCiAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGlu
dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4
dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkg
Y29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gY29kZWN2dF9iYXNlOjplcnJvcjsKICAg
ICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3Rh
dGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2Nf
dHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfb3V0X2Rlc2NyaXB0b3IoKTsKICAgICAgICAg
IGNvbnN0IHNpemVfdCBfX2ZtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAg
ICBzaXplX3QgX19mYnl0ZXMgPSBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKTsK
ICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7
CiAgICAgICAgICBzaXplX3QgX190Ynl0ZXMgPSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9f
dG8pOwoKCgogICAgICAgICAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihf
X3RvKTsKICAgICAgICAgIGNoYXIqIF9fY2Zyb207CiAgICAgICAgICBzaXplX3QgX19jb252OwoK
CgoKCgogICAgICAgICAgaW50IF9faW50X2JvbSA9IF9fc3RhdGUuX01fZ2V0X2ludGVybmFsX2Jv
bSgpOwogICAgICAgICAgaWYgKF9faW50X2JvbSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IHNpemVfdCBfX3NpemUgPSBfX2Zyb21fZW5kIC0gX19mcm9tOwogICAgICAgICAgICAgIGludGVy
bl90eXBlKiBfX2NmaXhlZCA9IHN0YXRpY19jYXN0PGludGVybl90eXBlKj4oX19idWlsdGluX2Fs
bG9jYShzaXplb2YoaW50ZXJuX3R5cGUpICogKF9fc2l6ZSArIDEpKSk7CiAgICAgICAgICAgICAg
X19jZml4ZWRbMF0gPSBzdGF0aWNfY2FzdDxpbnRlcm5fdHlwZT4oX19pbnRfYm9tKTsKICAgICAg
ICAgICAgICBjaGFyX3RyYWl0czxpbnRlcm5fdHlwZT46OmNvcHkoX19jZml4ZWQgKyAxLCBfX2Zy
b20sIF9fc2l6ZSk7CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNv
bnYsICpfX2Rlc2MsICZfX2Nmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJl9fZmJ5dGVzLCAmX19jdG8sICZfX3RieXRlcyk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhl
ZCA9IGNvbnN0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zy
b20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19j
b252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwgJl9fZmJ5dGVz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19jdG8sICZfX3RieXRl
cyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgaW50ZXJuX3R5cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICBfX3RvX25leHQgPSBy
ZWludGVycHJldF9jYXN0PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgIF9fcmV0
ID0gY29kZWN2dF9iYXNlOjpvazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fZmJ5dGVzIDwgX19mbXVsdGlwbGUgKiAoX19mcm9t
X2VuZCAtIF9fZnJvbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJv
bV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwog
ICAgICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGV4dGVybl90eXBl
Kj4oX19jdG8pOwogICAgICAgICAgICAgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6cGFydGlh
bDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBf
X3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVu
YW1lIF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVy
blQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYg
X19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBf
X3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3Vs
dCBfX3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJyb3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2Qo
KSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9f
ZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUu
X01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBs
ZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVs
dGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAgICBzaXplX3QgX19jb252ID0gX19p
Y29udl9hZGFwdG9yKGljb252LCpfX2Rlc2MsIF9fbnVsbCwgX19udWxsLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19jdG8sICZfX3RsZW4pOwoKICAgICAgICAg
IGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9f
dG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAg
ICAgICAgaWYgKF9fdGxlbiA9PSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pKQogICAg
ICAgICAgICAgICAgX19yZXQgPSBjb2RlY3Z0X2Jhc2U6Om5vY29udjsKICAgICAgICAgICAgICBl
bHNlIGlmIChfX3RsZW4gPT0gMCkKICAgICAgICAgICAgICAgIF9fcmV0ID0gY29kZWN2dF9iYXNl
OjpvazsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IGNvZGVjdnRf
YmFzZTo6cGFydGlhbDsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBf
X3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJyb3I7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4K
ICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwg
X19lbmNfdHJhaXRzPjo6CiAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRl
cm5fdHlwZSogX19mcm9tLAogICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQs
IGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICBpbnRlcm5fdHlwZSog
X190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3Rv
X25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJy
b3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBl
ZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3Qg
X19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAg
ICAgICAgIGNvbnN0IHNpemVfdCBfX2ZtdWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7CiAg
ICAgICAgICBzaXplX3QgX19mbGVuID0gX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJv
bSk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190bXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5
cGUpOwogICAgICAgICAgc2l6ZV90IF9fdGxlbiA9IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0g
X190byk7CgoKCiAgICAgICAgICBjaGFyKiBfX2N0byA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KF9fdG8pOwogICAgICAgICAgY2hhciogX19jZnJvbTsKICAgICAgICAgIHNpemVfdCBfX2NvbnY7
CgoKCgoKCiAgICAgICAgICBpbnQgX19leHRfYm9tID0gX19zdGF0ZS5fTV9nZXRfZXh0ZXJuYWxf
Ym9tKCk7CiAgICAgICAgICBpZiAoX19leHRfYm9tKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgc2l6ZV90IF9fc2l6ZSA9IF9fZnJvbV9lbmQgLSBfX2Zyb207CiAgICAgICAgICAgICAgZXh0
ZXJuX3R5cGUqIF9fY2ZpeGVkID0gc3RhdGljX2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2J1aWx0aW5f
YWxsb2NhKHNpemVvZihleHRlcm5fdHlwZSkgKiAoX19zaXplICsgMSkpKTsKICAgICAgICAgICAg
ICBfX2NmaXhlZFswXSA9IHN0YXRpY19jYXN0PGV4dGVybl90eXBlPihfX2V4dF9ib20pOwogICAg
ICAgICAgICAgIGNoYXJfdHJhaXRzPGV4dGVybl90eXBlPjo6Y29weShfX2NmaXhlZCArIDEsIF9f
ZnJvbSwgX19zaXplKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihp
Y29udiwgKl9fZGVzYywgJl9fY2Zyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7CiAgICAgICAgICAgIH0KICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX2NmaXhlZCA9
IGNvbnN0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zyb20g
PSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252
ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAg
ICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
ZXh0ZXJuX3R5cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVy
cHJldF9jYXN0PGludGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgIF9fcmV0ID0gY29k
ZWN2dF9iYXNlOjpvazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaWYgKF9fZmxlbiA8IHN0YXRpY19jYXN0PHNpemVfdD4oX19mcm9tX2Vu
ZCAtIF9fZnJvbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJvbV9u
ZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAg
ICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBlKj4o
X19jdG8pOwogICAgICAgICAgICAgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6cGFydGlhbDsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3Jl
dCA9IGNvZGVjdnRfYmFzZTo6ZXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1l
IF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNf
dHJhaXRzPjo6CiAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKICAgIHsKICAgICAgaW50
IF9fcmV0ID0gMDsKICAgICAgaWYgKHNpemVvZihfRXh0ZXJuVCkgPD0gc2l6ZW9mKF9JbnRlcm5U
KSkKICAgICAgICBfX3JldCA9IHNpemVvZihfSW50ZXJuVCkvc2l6ZW9mKF9FeHRlcm5UKTsKICAg
ICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw
ZW5hbWUgX0V4dGVyblQ+CiAgICBib29sCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwg
X19lbmNfdHJhaXRzPjo6CiAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAg
eyByZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1l
IF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNf
dHJhaXRzPjo6CiAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90
eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXpl
X3QgX19tYXgpIGNvbnN0CiAgICB7IHJldHVybiBtaW4oX19tYXgsIHN0YXRpY19jYXN0PHNpemVf
dD4oX19lbmQgLSBfX2Zyb20pKTsgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0
eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQs
IF9fZW5jX3RyYWl0cz46OgogICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgIHsg
cmV0dXJuIDE7IH0KIyAzMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY29kZWN2dC5oIiAy
IDMKIyA0MjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMK
CgoKICBjbGFzcyBfX251bV9iYXNlCiAgewogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0
IGNoYXIgX1NfYXRvbXNbXTsKCiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3plcm8sCiAgICAgIF9N
X2UgPSBfTV96ZXJvICsgMTAsCiAgICAgIF9NX0UgPSBfTV96ZXJvICsgMTEsCiAgICAgIF9NX3Np
emUgPSAyMSArIDEKICAgIH07CgoKCiAgICBzdGF0aWMgYm9vbAogICAgX1NfZm9ybWF0X2Zsb2F0
KGNvbnN0IGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2QsCiAgICAgICAg
ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMpOwoKCiAgICBzdGF0aWMgdm9pZAogICAgX1Nf
Zm9ybWF0X2ludChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9k
LCBjaGFyIF9fbW9kbCk7CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs
YXNzIG51bXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHBy
aXZhdGU6CiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUg
X01fdGhvdXNhbmRzX3NlcDsKICAgICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7CiAgICAgIGNv
bnN0IGNoYXJfdHlwZSogX01fdHJ1ZW5hbWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fZmFs
c2VuYW1lOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6ZV90
IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6
ZV9udW1wdW5jdCgpOyB9CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChfX2NfbG9jYWxl
IF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAg
IHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAg
ICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxf
cG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwog
ICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7
IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHRydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fdHJ1ZW5hbWUoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgZmFsc2Vu
YW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0KCiAgICBw
cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0KCk7CgogICAgICB2aXJ0dWFs
IGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4g
X01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhv
dXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAg
ICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJ1
ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAgdmlydHVh
bCBzdHJpbmdfdHlwZQogICAgICBkb19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBf
TV9mYWxzZW5hbWU7IH0KCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3Qo
X19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgbG9jYWxlOjppZCBudW1wdW5jdDxfQ2hhclQ+OjppZDsKCiAgdGVtcGxhdGU8
PgogICAgbnVtcHVuY3Q8Y2hhcj46On5udW1wdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lk
CiAgICBudW1wdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9f
Y2xvYyk7CgoKICB0ZW1wbGF0ZTw+CiAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCk7
CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFs
aXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGNsYXNzIG51bXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBudW1wdW5jdDxfQ2hhclQ+
CiAgICB7CgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX251bXB1bmN0OwoKICAgIHB1Ymxp
YzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0
cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Rf
YnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbnVtcHVu
Y3Q8X0NoYXJUPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01f
Y19sb2NhbGVfbnVtcHVuY3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChf
TV9jX2xvY2FsZV9udW1wdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwKICAgICAgfm51bXB1bmN0X2J5bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShf
TV9jX2xvY2FsZV9udW1wdW5jdCk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpm
YWNldCwgcHVibGljIF9fbnVtX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAg
IHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtX2dldChzaXpl
X3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5
cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf
X2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
dik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVy
X3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK
ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5z
aWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBf
X2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRl
cl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK
CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxv
bmcgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf
dHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsg
fQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IGZsb2F0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90
eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVy
X3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
JiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYg
X192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2lu
LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19n
ZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAg
ICB2aXJ0dWFsIH5udW1fZ2V0KCkgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFj
dF9mbG9hdChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0
ZSYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nJiBfX3h0cmMpIGNvbnN0OwoKICAgICAg
aXRlcl90eXBlCiAgICAgIF9NX2V4dHJhY3RfaW50KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3Nf
YmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwKICAgICAgICAgICAgICAgICAgICAgc3RyaW5nJiBf
X3h0cmMsIGludCYgX19iYXNlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0
ZSYsIGJvb2wmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQo
aXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBsb25n
JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBl
LCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAg
ICAgICAgIHVuc2lnbmVkIHNob3J0JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog
ICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5zaWduZWQgaW50JikgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i
YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5
cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAg
ICAgICAgICBsb25nIGxvbmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsCiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcmKSBjb25zdDsKCgogICAg
ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlv
c19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZmxvYXQmKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0
ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAg
ICBkb3VibGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChp
dGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
CiAgICAgICAgICAgICBsb25nIGRvdWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHZvaWQqJikgY29uc3Q7CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6Omlk
IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CiMgNzIxICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBudW1fcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQs
IHB1YmxpYyBfX251bV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy
VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3Rh
dGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fcHV0KHNpemVfdCBf
X3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQog
ICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwg
Ym9vbCBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19m
aWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlv
c19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90
eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19m
aWxsLAogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAg
ICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBs
b25nIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2Ys
IF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19z
LCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQgbG9u
ZyBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBf
X2ZpbGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3Ms
IGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw
ZSBfX2ZpbGwsCiAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUK
ICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGws
CiAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZl
cnRfZmxvYXQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2QsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAg
X01fY29udmVydF9pbnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmls
bCwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCwgX1ZhbHVl
VCBfX3YpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX3dpZGVuX2Zsb2F0KGl0ZXJf
dHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAg
X01fd2lkZW5faW50KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws
IGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAg
aXRlcl90eXBlCiAgICAgIF9NX2luc2VydChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFy
X3R5cGUgX19maWxsLAogICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3dzLCBpbnQg
X19sZW4pIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICB+bnVtX3B1dCgpIHsgfTsKCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hh
cl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25n
IF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90
eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0OwoK
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNl
JiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBf
X2ZpbGwsIHVuc2lnbmVkIGxvbmcgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBk
b3VibGUgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChp
dGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlv
c19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07
CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9j
YWxlOjppZCBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAg
ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3RlZDoKCgog
ICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2NvbGxhdGU7CgogICAgcHVibGljOgogICAgICBz
dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90
IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01fY19s
b2NhbGVfY29sbGF0ZSA9IF9TX2NfbG9jYWxlOyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2xs
YXRlKF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6
OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY2xvbmVfY19s
b2NhbGUoX19jbG9jKTsgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBf
X2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f
bG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19j
b21wYXJlKF9fbG8xLCBfX2hpMSwgX19sbzIsIF9faGkyKTsgfQoKICAgICAgc3RyaW5nX3R5cGUK
ICAgICAgdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFuc2Zvcm0oX19sbywgX19oaSk7IH0KCiAg
ICAgIGxvbmcKICAgICAgaGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19o
aSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQoKCiAg
ICAgIGludAogICAgICBfTV9jb21wYXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNv
bnN0OwoKICAgICAgc2l6ZV90CiAgICAgIF9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hh
clQqLCBzaXplX3QpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNv
bGxhdGUoKQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSk7
IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xv
MSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f
bG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5
cGUKICAgICAgZG9fdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBf
X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgbG9uZwogICAgICBkb19oYXNoKGNvbnN0IF9DaGFy
VCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsKCgogIHRl
bXBsYXRlPD4KICAgIGludAogICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFy
KiwgY29uc3QgY2hhciopIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBzaXplX3QKICAgIGNvbGxh
dGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCkgY29uc3Q7
CgoKICB0ZW1wbGF0ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUo
Y29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAg
c2l6ZV90CiAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCosIGNvbnN0
IHdjaGFyX3QqLCBzaXplX3QpIGNvbnN0OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgY2xhc3MgY29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+CiAgICB7CiAg
ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBi
YXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNv
bGxhdGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDog
Y29sbGF0ZTxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIF9TX2Rlc3Ryb3lfY19sb2Nh
bGUoX01fY19sb2NhbGVfY29sbGF0ZSk7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2Nf
bG9jYWxlX2NvbGxhdGUsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwKICAgICAgfmNvbGxhdGVfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAgY2xhc3MgdGltZV9iYXNl
CiAgewogIHB1YmxpYzoKICAgIGVudW0gZGF0ZW9yZGVyIHsgbm9fb3JkZXIsIGRteSwgbWR5LCB5
bWQsIHlkbSB9OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9f
dGltZXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgX0NoYXJUIF9fY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf
Q2hhclQ+IF9fc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCgogICAg
ICBzdGF0aWMgY29uc3QgX0NoYXJUKiBfU190aW1lem9uZXNbMTRdOwoKICAgIHByb3RlY3RlZDoK
ICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV90aW1lcHVuY3Q7CiAgICAgIGNoYXIqIF9NX25h
bWVfdGltZXB1bmN0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfZm9ybWF0OwogICAgICBj
b25zdCBfQ2hhclQqIF9NX2RhdGVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90
aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAg
IGNvbnN0IF9DaGFyVCogX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBf
TV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbTsKICAgICAg
Y29uc3QgX0NoYXJUKiBfTV9wbTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbV9wbV9mb3JtYXQ7
CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2Rh
eTI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9k
YXk0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f
ZGF5NjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCog
X01fZGF5X2ExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMjsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9kYXlfYTM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E0OwogICAgICBjb25z
dCBfQ2hhclQqIF9NX2RheV9hNTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTY7CiAgICAg
IGNvbnN0IF9DaGFyVCogX01fZGF5X2E3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgw
MTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAyOwogICAgICBjb25zdCBfQ2hhclQqIF9N
X21vbnRoMDM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNDsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9tb250aDA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDY7CiAgICAgIGNv
bnN0IF9DaGFyVCogX01fbW9udGgwNzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA4Owog
ICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDk7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u
dGgxMDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDExOwogICAgICBjb25zdCBfQ2hhclQq
IF9NX21vbnRoMTI7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDE7CiAgICAgIGNv
bnN0IF9DaGFyVCogX01fbW9udGhfYTAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2Ew
MzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDQ7CiAgICAgIGNvbnN0IF9DaGFyVCog
X01fbW9udGhfYTA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNjsKICAgICAgY29u
c3QgX0NoYXJUKiBfTV9tb250aF9hMDc7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA4
OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwOTsKICAgICAgY29uc3QgX0NoYXJUKiBf
TV9tb250aF9hMTA7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTExOwogICAgICBjb25z
dCBfQ2hhclQqIF9NX21vbnRoX2ExMjsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAg
IF9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIF9f
dGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3Jl
ZnMgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgX01fcHV0KF9DaGFyVCogX19zLCBzaXplX3QgX19t
YXhsZW4sIGNvbnN0IF9DaGFyVCogX19mb3JtYXQsCiAgICAgICAgICAgICBjb25zdCB0bSogX190
bSkgY29uc3Q7CgogICAgICB2b2lkCiAgICAgIF9NX2RhdGVfZm9ybWF0cyhjb25zdCBfQ2hhclQq
KiBfX2RhdGUpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX19kYXRlWzBdID0gX01fZGF0ZV9mb3Jt
YXQ7CiAgICAgICAgX19kYXRlWzFdID0gX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICB9CgogICAg
ICB2b2lkCiAgICAgIF9NX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX3RpbWUpIGNvbnN0
CiAgICAgIHsKCiAgICAgICAgX190aW1lWzBdID0gX01fdGltZV9mb3JtYXQ7CiAgICAgICAgX190
aW1lWzFdID0gX01fdGltZV9lcmFfZm9ybWF0OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9N
X2FtcG0oY29uc3QgX0NoYXJUKiogX19hbXBtKSBjb25zdAogICAgICB7CiAgICAgICAgX19hbXBt
WzBdID0gX01fYW07CiAgICAgICAgX19hbXBtWzFdID0gX01fcG07CiAgICAgIH0KCiAgICAgIHZv
aWQKICAgICAgX01fZGF0ZV90aW1lX2Zvcm1hdHMoY29uc3QgX0NoYXJUKiogX19kdCkgY29uc3QK
ICAgICAgewoKICAgICAgICBfX2R0WzBdID0gX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAgICAgICBf
X2R0WzFdID0gX01fZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAg
ICAgX01fZGF5cyhjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CiAgICAgIHsKICAgICAgICBf
X2RheXNbMF0gPSBfTV9kYXkxOwogICAgICAgIF9fZGF5c1sxXSA9IF9NX2RheTI7CiAgICAgICAg
X19kYXlzWzJdID0gX01fZGF5MzsKICAgICAgICBfX2RheXNbM10gPSBfTV9kYXk0OwogICAgICAg
IF9fZGF5c1s0XSA9IF9NX2RheTU7CiAgICAgICAgX19kYXlzWzVdID0gX01fZGF5NjsKICAgICAg
ICBfX2RheXNbNl0gPSBfTV9kYXk3OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2RheXNf
YWJicmV2aWF0ZWQoY29uc3QgX0NoYXJUKiogX19kYXlzKSBjb25zdAogICAgICB7CiAgICAgICAg
X19kYXlzWzBdID0gX01fZGF5X2ExOwogICAgICAgIF9fZGF5c1sxXSA9IF9NX2RheV9hMjsKICAg
ICAgICBfX2RheXNbMl0gPSBfTV9kYXlfYTM7CiAgICAgICAgX19kYXlzWzNdID0gX01fZGF5X2E0
OwogICAgICAgIF9fZGF5c1s0XSA9IF9NX2RheV9hNTsKICAgICAgICBfX2RheXNbNV0gPSBfTV9k
YXlfYTY7CiAgICAgICAgX19kYXlzWzZdID0gX01fZGF5X2E3OwogICAgICB9CgogICAgICB2b2lk
CiAgICAgIF9NX21vbnRocyhjb25zdCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QKICAgICAgewog
ICAgICAgIF9fbW9udGhzWzBdID0gX01fbW9udGgwMTsKICAgICAgICBfX21vbnRoc1sxXSA9IF9N
X21vbnRoMDI7CiAgICAgICAgX19tb250aHNbMl0gPSBfTV9tb250aDAzOwogICAgICAgIF9fbW9u
dGhzWzNdID0gX01fbW9udGgwNDsKICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21vbnRoMDU7CiAg
ICAgICAgX19tb250aHNbNV0gPSBfTV9tb250aDA2OwogICAgICAgIF9fbW9udGhzWzZdID0gX01f
bW9udGgwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoMDg7CiAgICAgICAgX19tb250
aHNbOF0gPSBfTV9tb250aDA5OwogICAgICAgIF9fbW9udGhzWzldID0gX01fbW9udGgxMDsKICAg
ICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aDExOwogICAgICAgIF9fbW9udGhzWzExXSA9IF9N
X21vbnRoMTI7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fbW9udGhzX2FiYnJldmlhdGVk
KGNvbnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdAogICAgICB7CiAgICAgICAgX19tb250aHNb
MF0gPSBfTV9tb250aF9hMDE7CiAgICAgICAgX19tb250aHNbMV0gPSBfTV9tb250aF9hMDI7CiAg
ICAgICAgX19tb250aHNbMl0gPSBfTV9tb250aF9hMDM7CiAgICAgICAgX19tb250aHNbM10gPSBf
TV9tb250aF9hMDQ7CiAgICAgICAgX19tb250aHNbNF0gPSBfTV9tb250aF9hMDU7CiAgICAgICAg
X19tb250aHNbNV0gPSBfTV9tb250aF9hMDY7CiAgICAgICAgX19tb250aHNbNl0gPSBfTV9tb250
aF9hMDc7CiAgICAgICAgX19tb250aHNbN10gPSBfTV9tb250aF9hMDg7CiAgICAgICAgX19tb250
aHNbOF0gPSBfTV9tb250aF9hMDk7CiAgICAgICAgX19tb250aHNbOV0gPSBfTV9tb250aF9hMTA7
CiAgICAgICAgX19tb250aHNbMTBdID0gX01fbW9udGhfYTExOwogICAgICAgIF9fbW9udGhzWzEx
XSA9IF9NX21vbnRoX2ExMjsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAog
ICAgICB+X190aW1lcHVuY3QoKTsKCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfdGlt
ZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgX190aW1lcHVuY3Q8X0NoYXJUPjo6aWQ7CgoK
ICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjaGFyKgogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9TX3Rp
bWV6b25lc1sxNF07CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PGNoYXI+
OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgogIHRlbXBsYXRl
PD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9wdXQoY2hhciosIHNpemVfdCwg
Y29uc3QgY2hhciosIGNvbnN0IHRtKikgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCB3
Y2hhcl90KgogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9TX3RpbWV6b25lc1sxNF07CgogIHRl
bXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXpl
X3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAg
IF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9wdXQod2NoYXJfdCosIHNpemVfdCwgY29uc3Qgd2No
YXJfdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtKikgY29uc3Q7
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY29uc3QgX0NoYXJUKiBfX3RpbWVw
dW5jdDxfQ2hhclQ+OjpfU190aW1lem9uZXNbMTRdOwoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvaTM4Ni1saW51eC9iaXRzL3RpbWVfbWVtYmVycy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL3RpbWVfbWVtYmVycy5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90
IF9fcmVmcykKICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICB7CgoKCiAgICAgIF9NX2lu
aXRpYWxpemVfdGltZXB1bmN0KCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19zLCBzaXpl
X3QgX19yZWZzKQogICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgIHsKCgoKCiAgICAgIF9N
X2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIF9fdGltZXB1bmN0PF9DaGFyVD46On5fX3RpbWVwdW5jdCgpCiAgICB7CgoK
CgogICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CiAgICB9
CiMgMTE1OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0
aW1lX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAg
ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg
X0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19z
dHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK
ICAgICAgdGltZV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldCAo
X19yZWZzKSB7IH0KCiAgICAgIGRhdGVvcmRlcgogICAgICBkYXRlX29yZGVyKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fZGF0ZV9vcmRlcigpOyB9CgogICAgICBpdGVyX3R5cGUKICAg
ICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf
X2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfdGltZShfX2JlZywgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF9kYXRlKGl0ZXJfdHlw
ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fZ2V0X2RhdGUoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAg
ICAgIGl0ZXJfdHlwZQogICAgICBnZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF93
ZWVrZGF5KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5
cGUKICAgICAgZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X21vbnRobmFt
ZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAg
ICAgIGdldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3llYXIoX19iZWcsIF9fZW5kLCBfX2lv
LCBfX2VyciwgX190bSk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRp
bWVfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGRhdGVvcmRlcgogICAgICBkb19kYXRlX29yZGVy
KCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfdGltZShpdGVy
X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAg
dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
CiAgICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
dG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X21v
bnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAg
ICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNv
bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3llYXIoaXRlcl90eXBl
IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCgogICAgICB2b2lk
CiAgICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQs
IGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICAgIGludCBfX21pbiwgaW50IF9fbWF4
LCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4m
IF9fY3R5cGUsCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vycikg
Y29uc3Q7CgoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFjdF9uYW1lKGl0ZXJfdHlwZSYgX19i
ZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAgICAgICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CgoKICAgICAgdm9pZAog
ICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX0NoYXJUKiBfX2Zvcm1hdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVfZ2V0PF9DaGFy
VCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWUgOiBwdWJsaWMgdGltZV9nZXQ8X0NoYXJU
LCBfSW5JdGVyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90
eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAg
ICAgdGltZV9nZXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAg
OiB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+KF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgog
ICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldF9ieW5hbWUoKSB7IH0KICAgIH07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1
dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJs
aWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0
ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp
dAogICAgICB0aW1lX3B1dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0
KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlv
c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSogX190bSwKICAgICAgICAg
IGNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0OwoKICAgICAg
aXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90
eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHRtKiBfX3RtLCBjaGFyIF9fZm9ybWF0LCBjaGFy
IF9fbW9kID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbywg
X19maWxsLCBfX3RtLCBfX2Zvcm1hdCwgX19tb2QpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2
aXJ0dWFsCiAgICAgIH50aW1lX3B1dCgpCiAgICAgIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUg
X19maWxsLCBjb25zdCB0bSogX190bSwKICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQsIGNoYXIg
X19tb2QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Omlk
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xh
c3MgdGltZV9wdXRfYnluYW1lIDogcHVibGljIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+CiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5
cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXRf
YnluYW1lKGNvbnN0IGNoYXIqICwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9wdXQ8
X0NoYXJULCBfT3V0SXRlcj4oX19yZWZzKQogICAgICB7IH07CgogICAgcHJvdGVjdGVkOgogICAg
ICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dF9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFzcyBt
b25leV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gcGFydCB7IG5vbmUsIHNwYWNlLCBzeW1i
b2wsIHNpZ24sIHZhbHVlIH07CiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmllbGRbNF07IH07
CgogICAgc3RhdGljIGNvbnN0IHBhdHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOwoKCgogICAgc3Rh
dGljIHBhdHRlcm4KICAgIF9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hh
ciBfX3NwYWNlLCBjaGFyIF9fcG9zbik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0
LCBwdWJsaWMgbW9uZXlfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190
eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwogICAgICBzdGF0aWMg
bG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBjb25zdCBjaGFyKiBfTV9ncm91cGlu
ZzsKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90
aG91c2FuZHNfc2VwOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX2N1cnJfc3ltYm9sOwogICAg
ICBjb25zdCBjaGFyX3R5cGUqIF9NX3Bvc2l0aXZlX3NpZ247CiAgICAgIGNvbnN0IGNoYXJfdHlw
ZSogX01fbmVnYXRpdmVfc2lnbjsKICAgICAgaW50IF9NX2ZyYWNfZGlnaXRzOwogICAgICBwYXR0
ZXJuIF9NX3Bvc19mb3JtYXQ7CiAgICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsKCiAgICBwdWJs
aWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDog
bG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7
IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNv
bnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChf
X3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY2xvYywgX19zKTsgfQoK
ICAgICAgY2hhcl90eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91
c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgp
OyB9CgogICAgICBzdHJpbmcKICAgICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb19ncm91cGluZygpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBjdXJyX3N5bWJv
bCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0KCiAgICAg
IHN0cmluZ190eXBlCiAgICAgIHBvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb19wb3NpdGl2ZV9zaWduKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIG5lZ2F0
aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7
IH0KCiAgICAgIGludAogICAgICBmcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX2ZyYWNfZGlnaXRzKCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgcG9zX2Zvcm1hdCgp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc19mb3JtYXQoKTsgfQoKICAgICAgcGF0
dGVybgogICAgICBuZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVn
X2Zvcm1hdCgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1
bmN0KCk7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkg
Y29uc3QKICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBj
aGFyX3R5cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N
X3Rob3VzYW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5n
KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3Ry
aW5nX3R5cGUKICAgICAgZG9fY3Vycl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVybiBfTV9j
dXJyX3N5bWJvbDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19wb3NpdGl2
ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQoKICAgICAg
dmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19uZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAg
eyByZXR1cm4gX01fbmVnYXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9f
ZnJhY19kaWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9mcmFjX2RpZ2l0czsgfQoKICAg
ICAgdmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX3Bvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJl
dHVybiBfTV9wb3NfZm9ybWF0OyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fbmVn
X2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0KCgogICAgICAg
dm9pZAogICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0g
X19udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFt
ZSA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0lu
dGw+CiAgICBsb2NhbGU6OmlkIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVu
Y3Q8X0NoYXJULCBfSW50bD46OmludGw7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hh
ciwgdHJ1ZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hh
ciwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25l
eXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwg
Y29uc3QgY2hhciopOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXIs
IGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsIGNvbnN0IGNoYXIq
KTsKCgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1
bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9u
ZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3Qs
IHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKik7
CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojpf
TV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciopOwoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdF9i
eW5hbWUgOiBwdWJsaWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPgogICAgewogICAgICBfX2Nf
bG9jYWxlIF9NX2NfbG9jYWxlX21vbmV5cHVuY3Q7CgogICAgcHVibGljOgogICAgICB0eXBlZGVm
IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry
aW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7CgogICAgICBl
eHBsaWNpdAogICAgICBtb25leXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBf
X3JlZnMgPSAwKQogICAgICA6IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4oX19yZWZzKQogICAg
ICB7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QsIF9f
cyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9NX2NfbG9jYWxlX21vbmV5cHVu
Y3QpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1
bmN0X2J5bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25l
eXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRs
PgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxfQ2hhclQsIF9JbnRsPjo6aW50bDsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3Mg
bW9uZXlfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAg
IHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlfZ2V0KHNp
emVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJf
dHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50
bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxv
bmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19z
LCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmlu
Z190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywg
X19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoK
ICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJf
dHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9f
aW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
CiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRs
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
c3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfZ2V0PF9DaGFy
VCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P
dXRJdGVyPgogICAgY2xhc3MgbW9uZXlfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsK
ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm
IF9PdXRJdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBz
dHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK
ICAgICAgbW9uZXlfcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZz
KSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2lu
dGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3Vi
bGUgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRs
LCBfX2lvLCBfX2ZpbGwsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0
ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGNoYXJf
dHlwZSBfX2ZpbGwsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsg
fQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfcHV0KCkgeyB9Cgog
ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBf
X2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgbG9u
ZyBkb3VibGUgX191bml0cykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBk
b19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5
cGUgX19maWxsLAogICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25z
dDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+
CiAgICBsb2NhbGU6OmlkIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgoKICBzdHJ1
Y3QgbWVzc2FnZXNfYmFzZQogIHsKICAgIHR5cGVkZWYgaW50IGNhdGFsb2c7CiAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXMgOiBwdWJsaWMgbG9jYWxl
OjpmYWNldCwgcHVibGljIG1lc3NhZ2VzX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU
PiBzdHJpbmdfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xv
Y2FsZV9tZXNzYWdlczsKICAgICAgY2hhciogX01fbmFtZV9tZXNzYWdlczsKCiAgICBwdWJsaWM6
CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbWVzc2Fn
ZXMoc2l6ZV90IF9fcmVmcyA9IDApOwoKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKF9f
Y19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAg
ICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29u
c3QgbG9jYWxlJiBfX2xvYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3Ms
IF9fbG9jKTsgfQoKCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8
Y2hhcj4mLCBjb25zdCBsb2NhbGUmLCBjb25zdCBjaGFyKikgY29uc3Q7CgogICAgICBzdHJpbmdf
dHlwZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0
IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2Ms
IF9fc2V0LCBfX21zZ2lkLCBfX3MpOyB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNhdGFsb2cg
X19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jbG9zZShfX2MpOyB9CgogICAgcHJv
dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygpOwoKICAgICAgdmlydHVhbCBj
YXRhbG9nCiAgICAgIGRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9j
YWxlJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2dldChjYXRh
bG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGZhdWx0KSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgdm9pZAogICAgICBkb19jbG9zZShjYXRhbG9nKSBjb25zdDsKCgogICAgICBjaGFy
KgogICAgICBfTV9jb252ZXJ0X3RvX2NoYXIoY29uc3Qgc3RyaW5nX3R5cGUmIF9fbXNnKSBjb25z
dAogICAgICB7CgogICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdF9j
YXN0PF9DaGFyVCo+KF9fbXNnLmNfc3RyKCkpKTsKICAgICAgfQoKCiAgICAgIHN0cmluZ190eXBl
CiAgICAgIF9NX2NvbnZlcnRfZnJvbV9jaGFyKGNoYXIqIF9fbXNnKSBjb25zdAogICAgICB7Cgog
ICAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJfdHJhaXRzPGNoYXI+OjpsZW5ndGgoX19tc2cpIC0g
MTsKIyAxNzAzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwog
ICAgICAgIHJldHVybiBzdHJpbmdfdHlwZSgpOwogICAgICB9CiAgICAgfTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBtZXNzYWdlczxfQ2hhclQ+OjppZDsKCgog
IHRlbXBsYXRlPD4KICAgIHN0cmluZwogICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9n
LCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJikgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICB3c3Ry
aW5nCiAgICBtZXNzYWdlczx3Y2hhcl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25z
dCB3c3RyaW5nJikgY29uc3Q7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz
cyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2FnZXM8X0NoYXJUPgogICAgewogICAgcHVi
bGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdl
c19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVj
dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlc19ieW5hbWUoKQogICAgICB7IH0KICAg
IH07CgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvbWVzc2FnZXNf
bWVtYmVycy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRz
L21lc3NhZ2VzX21lbWJlcnMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgICBt
ZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQogICAgIDogbG9jYWxlOjpm
YWNldChfX3JlZnMpCiAgICAgewoKCgogICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19j
X2xvY2FsZTsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgICBtZXNzYWdl
czxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCiAgICAgOiBsb2Nh
bGU6OmZhY2V0KF9fcmVmcykKICAgICB7CgoKCgogICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMg
PSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2Fn
ZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9j
YWxlJiBfX2xvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19kaXIp
IGNvbnN0CiAgICB7CiAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CiAg
ICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOwogICAgfQoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKICAgIHsK
CgoKCiAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hh
clQ+OjpjYXRhbG9nCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0
cmluZzxjaGFyPiYgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2Nh
bGUmKSBjb25zdAogICAgewoKCiAgICAgIHRleHRkb21haW4oX19zLmNfc3RyKCkpOwogICAgICBy
ZXR1cm4gMDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdm9pZAogICAg
bWVzc2FnZXM8X0NoYXJUPjo6ZG9fY2xvc2UoY2F0YWxvZykgY29uc3QKICAgIHsgfQoKCiAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVz
c2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKICAgICA6IG1lc3Nh
Z2VzPF9DaGFyVD4oX19yZWZzKQogICAgIHsKCgoKCgoKICAgICAgIF9TX2Rlc3Ryb3lfY19sb2Nh
bGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOwogICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2Nf
bG9jYWxlX21lc3NhZ2VzLCBfX3MpOwogICAgIH0KIyAxNzM5ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxl
JiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlz
KGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19s
b2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlw
ZV9iYXNlOjpwcmludCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQog
ICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFz
ZTo6Y250cmwsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l
IGJvb2wKICAgIGlzdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsg
cmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVw
cGVyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29s
IGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVz
ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2Mp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2Fs
cGhhKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFj
ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19jKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChf
Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0
eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYyk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJU
IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf
Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnB1bmN0LCBfX2MpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQgX19j
LCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy
VD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNv
bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+
KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbG51bSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBs
b2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv
YykuaXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2Nh
bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku
dG91cHBlcihfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBf
Q2hhclQKICAgIHRvbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsg
cmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvbG93ZXIoX19jKTsgfQp9
CiMgNDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNw
YWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFzZQogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9U
cmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6
OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90
eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAg
dHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5
cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwog
ICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJl
YW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0
ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+KiBfTV90aWU7CiAgICAgIG11dGFibGUgY2hhcl90eXBlIF9NX2ZpbGw7
CiAgICAgIG11dGFibGUgYm9vbCBfTV9maWxsX2luaXQ7CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+KiBfTV9zdHJlYW1idWY7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBl
KiBfTV9mY3R5cGU7CgogICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoKICAg
ICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CiAgICAgIG9w
ZXJhdG9yIHZvaWQqKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNv
bnN0X2Nhc3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3Ih
KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpOyB9CgogICAgICBpb3N0YXRlCiAg
ICAgIHJkc3RhdGUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0K
CiAgICAgIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCk7CgogICAg
ICB2b2lkCiAgICAgIHNldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkKICAgICAgeyB0aGlzLT5jbGVh
cih0aGlzLT5yZHN0YXRlKCkgfCBfX3N0YXRlKTsgfQoKICAgICAgYm9vbAogICAgICBnb29kKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAgIGJvb2wK
ICAgICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJp
dCkgIT0gMDsgfQoKICAgICAgYm9vbAogICAgICBmYWlsKCkgY29uc3QKICAgICAgeyByZXR1cm4g
KHRoaXMtPnJkc3RhdGUoKSAmIChiYWRiaXQgfCBmYWlsYml0KSkgIT0gMDsgfQoKICAgICAgYm9v
bAogICAgICBiYWQoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgYmFk
Yml0KSAhPSAwOyB9CgogICAgICBpb3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9leGNlcHRpb247IH0KCiAgICAgIHZvaWQKICAgICAgZXhjZXB0aW9ucyhp
b3N0YXRlIF9fZXhjZXB0KQogICAgICB7CiAgICAgICAgX01fZXhjZXB0aW9uID0gX19leGNlcHQ7
CiAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRlKTsKICAgICAgfQoKCiAgICAg
IGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
PiogX19zYikgOiBpb3NfYmFzZSgpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAgICAg
dmlydHVhbAogICAgICB+YmFzaWNfaW9zKCkgeyB9CgoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+KgogICAgICB0aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0K
CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9
IF9fdGllc3RyOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgYmFzaWNfc3Ry
ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fc3RyZWFtYnVmOyB9CgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
PioKICAgICAgcmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoK
ICAgICAgYmFzaWNfaW9zJgogICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpOwoK
ICAgICAgY2hhcl90eXBlCiAgICAgIGZpbGwoKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKCFf
TV9maWxsX2luaXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRl
bignICcpOwogICAgICAgICAgICBfTV9maWxsX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAg
ICAgIHJldHVybiBfTV9maWxsOwogICAgICB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbChj
aGFyX3R5cGUgX19jaCkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IHRoaXMtPmZp
bGwoKTsKICAgICAgICBfTV9maWxsID0gX19jaDsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAg
IH0KCgogICAgICBsb2NhbGUKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAg
ICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsK
CiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgcHJvdGVj
dGVkOgoKICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFzZSgpCiAgICAgIHsgfQoKICAgICAgdm9p
ZAogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAg
ICAgIGJvb2wKICAgICAgX01fY2hlY2tfZmFjZXQoY29uc3QgbG9jYWxlOjpmYWNldCogX19mKSBj
b25zdAogICAgICB7CiAgICAgICAgaWYgKCFfX2YpCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0
KCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2Fj
aGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLnRjYyIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9z
PF9DaGFyVCwgX1RyYWl0cz46OmNsZWFyKGlvc3RhdGUgX19zdGF0ZSkKICAgIHsKICAgICAgaWYg
KHRoaXMtPnJkYnVmKCkpCiAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZTsKICAg
ICAgZWxzZQogICAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsK
ICAgICAgaWYgKCh0aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQogICAgICAg
IF9fdGhyb3dfaW9zX2ZhaWx1cmUoImJhc2ljX2lvczo6Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4
Y2VwdGlvbiIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgIGJhc2ljX2lv
czxfQ2hhclQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
PiogX19zYikKICAgIHsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9f
b2xkID0gX01fc3RyZWFtYnVmOwogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICB0aGlz
LT5jbGVhcigpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3QgYmFzaWNfaW9z
JiBfX3JocykKICAgIHsKCgoKCiAgICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jocy5fTV93b3Jk
X3NpemUgPD0gX1NfbG9jYWxfd29yZF9zaXplKSA/CiAgICAgICAgX01fbG9jYWxfd29yZCA6IG5l
dyBfV29yZHNbX19yaHMuX01fd29yZF9zaXplXTsKCgogICAgICBfQ2FsbGJhY2tfbGlzdCogX19j
YiA9IF9fcmhzLl9NX2NhbGxiYWNrczsKICAgICAgaWYgKF9fY2IpCiAgICAgICAgX19jYi0+X01f
YWRkX3JlZmVyZW5jZSgpOwogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhlcmFzZV9ldmVudCk7CiAg
ICAgIGlmIChfTV93b3JkICE9IF9NX2xvY2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVs
ZXRlIFtdIF9NX3dvcmQ7CiAgICAgICAgICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9N
X2Rpc3Bvc2VfY2FsbGJhY2tzKCk7CgogICAgICBfTV9jYWxsYmFja3MgPSBfX2NiOwogICAgICBm
b3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX3Jocy5fTV93b3JkX3NpemU7ICsrX19pKQogICAgICAg
IF9fd29yZHNbX19pXSA9IF9fcmhzLl9NX3dvcmRbX19pXTsKICAgICAgaWYgKF9NX3dvcmQgIT0g
X01fbG9jYWxfd29yZCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAg
ICAgICAgIF9NX3dvcmQgPSAwOwogICAgICAgIH0KICAgICAgX01fd29yZCA9IF9fd29yZHM7CiAg
ICAgIF9NX3dvcmRfc2l6ZSA9IF9fcmhzLl9NX3dvcmRfc2l6ZTsKCiAgICAgIHRoaXMtPmZsYWdz
KF9fcmhzLmZsYWdzKCkpOwogICAgICB0aGlzLT53aWR0aChfX3Jocy53aWR0aCgpKTsKICAgICAg
dGhpcy0+cHJlY2lzaW9uKF9fcmhzLnByZWNpc2lvbigpKTsKICAgICAgdGhpcy0+dGllKF9fcmhz
LnRpZSgpKTsKICAgICAgdGhpcy0+ZmlsbChfX3Jocy5maWxsKCkpOwoKICAgICAgdGhpcy0+ZXhj
ZXB0aW9ucyhfX3Jocy5leGNlcHRpb25zKCkpOwoKICAgICAgX01fY2FsbF9jYWxsYmFja3MoY29w
eWZtdF9ldmVudCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2hhcgogICAgYmFzaWNfaW9zPF9DaGFy
VCwgX1RyYWl0cz46Om5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAog
ICAgewogICAgICBjaGFyIF9fcmV0ID0gX19kZmF1bHQ7CiAgICAgIGlmIChfTV9jaGVja19mYWNl
dChfTV9mY3R5cGUpKQogICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT5uYXJyb3coX19jLCBfX2Rm
YXVsdCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgX0NoYXJUCiAgICBiYXNpY19pb3M8X0NoYXJULCBf
VHJhaXRzPjo6d2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICB7CiAgICAgIGNoYXJfdHlwZSBfX3Jl
dCA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKICAg
ICAgICBfX3JldCA9IF9NX2ZjdHlwZS0+d2lkZW4oX19jKTsKICAgICAgcmV0dXJuIF9fcmV0Owog
ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
bG9jYWxlCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3QgbG9jYWxl
JiBfX2xvYykKICAgIHsKICAgICAgbG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsKICAgICAg
aW9zX2Jhc2U6OmltYnVlKF9fbG9jKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9fbG9jKTsKICAg
ICAgaWYgKHRoaXMtPnJkYnVmKCkgIT0gMCkKICAgICAgICB0aGlzLT5yZGJ1ZigpLT5wdWJpbWJ1
ZShfX2xvYyk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwg
X1RyYWl0cz46OmluaXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAg
ICB7CgogICAgICBpb3NfYmFzZTo6X01faW5pdCgpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX01f
aW9zX2xvY2FsZSk7CiAgICAgIF9NX3RpZSA9IDA7CiMgMTU5ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKICAgICAgX01fZmlsbCA9IF9DaGFyVCgpOwogICAgICBf
TV9maWxsX2luaXQgPSBmYWxzZTsKCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAg
IF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBn
b29kYml0IDogYmFkYml0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6X01f
Y2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGlmIChoYXNfZmFj
ZXQ8X19jdHlwZV90eXBlPihfX2xvYykpCiAgICAgICAgX01fZmN0eXBlID0gJnVzZV9mYWNldDxf
X2N0eXBlX3R5cGU+KF9fbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9NX2ZjdHlwZSA9IDA7Cgog
ICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVt
cHV0ID0gJnVzZV9mYWNldDxfX251bXB1dF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAg
ICBfTV9mbnVtcHV0ID0gMDsKICAgICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihfX2xv
YykpCiAgICAgICAgX01fZm51bWdldCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2Mp
OwogICAgICBlbHNlCiAgICAgICAgX01fZm51bWdldCA9IDA7CiAgICB9CgoKCgogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3M8Y2hhcj47CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
YmFzaWNfaW9zPHdjaGFyX3Q+OwoKfQojIDIwOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9i
YXNpY19pb3MuaCIgMiAzCiMgNTIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgNDYg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL29zdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2lj
X29zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAg
ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz
X3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBf
X3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+
IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU
LCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFy
VCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8
X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmVh
bShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAg
ICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX29zdHJlYW0oKSB7IH0KCgogICAgICBjbGFzcyBzZW50
cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikp
OwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpf
X3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y
PDwoaW9zX2Jhc2UmICgqX19wZikgKGlvc19iYXNlJikpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcjw8KGJvb2wgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcjw8KHNob3J0IF9fbikKICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBf
X2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChf
X2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAg
cmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4o
X19uKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0
YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAgICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAg
ICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9w
ZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCiAgICAgIF9fb3N0
cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGludCBfX24pCiAgICAgIHsKICAgICAgICBpb3Nf
YmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVs
ZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6
OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMt
Pm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0
cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBfX24pCiAgICAgIHsgcmV0
dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0K
CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIGxvbmcgX19uKTsK
CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9u
ZyBfX24pOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGRvdWJsZSBf
X2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZmxvYXQgX19mKQog
ICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7
IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9f
Zik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChjb25zdCB2b2lkKiBf
X3ApOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZf
dHlwZSogX19zYik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHB1dChjaGFyX3R5cGUg
X19jKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUq
IF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIGZsdXNo
KCk7CgoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbHAoKTsKCiAgICAgIF9fb3N0cmVhbV90eXBl
JgogICAgICBzZWVrcChwb3NfdHlwZSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vl
a3Aob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgoKICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjpzZW50cnkKICAgIHsKCiAgICAgIGJvb2wgX01fb2s7CiAgICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfTV9vczsKCiAgICBwdWJsaWM6CiAgICAgIGV4
cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7
CgogICAgICB+c2VudHJ5KCkKICAgICAgewoKICAgICAgICBpZiAoX01fb3MuZmxhZ3MoKSAmIGlv
c19iYXNlOjp1bml0YnVmICYmICF1bmNhdWdodF9leGNlcHRpb24oKSkKICAgICAgICAgIHsKCiAg
ICAgICAgICAgIGlmIChfTV9vcy5yZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMoKSA9
PSAtMSkKICAgICAgICAgICAgICBfTV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgIH0KICAgICAgfQoKICAgICAgb3BlcmF0b3IgYm9vbCgpCiAgICAgIHsgcmV0dXJuIF9N
X29rOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0Lndp
ZGVuKF9fYykpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry
YWl0cz4mIF9fb3V0LCBjaGFyIF9fYyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAg
YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVh
bTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChf
X291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHVuc2lnbmVkIGNoYXIgX19jKQogICAg
eyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g
JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBj
b25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwg
X1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1Ry
YWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJh
c2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBzaWduZWQgY2hhciogX19z
KQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9f
cykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIs
IF9UcmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYg
X19vdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8PCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgZW5kbChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAg
ICB7IHJldHVybiBmbHVzaChfX29zLnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
IF9fb3MpCiAgICB7IHJldHVybiBfX29zLnB1dChfQ2hhclQoKSk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgZmx1c2goYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29z
KQogICAgeyByZXR1cm4gX19vcy5mbHVzaCgpOyB9Cgp9CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL29zdHJlYW0udGNjIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9vc3RyZWFtLnRjYyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9sb2NhbGUiIDEg
MwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9sb2NhbGUiIDMKCgoKIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9jZXJybm8iIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jZXJybm8iIDMKCiMg
MSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZXJybm8uaCIg
MwpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAxIDMKIyAy
NSAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9l
cnJuby5oIiAxIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEgMwojIDUgIi91
c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAyIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJy
bm8uaCIgMiAzCiMgMzggIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKZXh0ZXJuIGludCAq
X19lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwojIDM3ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9l
cnJuby5oIiAzCmV4dGVybiBjaGFyICpwcm9ncmFtX2ludm9jYXRpb25fbmFtZSwgKnByb2dyYW1f
aW52b2NhdGlvbl9zaG9ydF9uYW1lOwoKCgp9CiMgNjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAz
CnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NlcnJubyIg
MiAzCiMgMzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIg
MwoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDEgMwojIDQ4ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9jbWF0aCIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDEgMwojIDI5
ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL2h1Z2VfdmFsLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9uYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9tYXRo
LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAxIDMKIyAyOSAiL3Vz
ci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBkb3VibGUgZmxvYXRfdDsK
CnR5cGVkZWYgbG9uZyBkb3VibGUgZG91YmxlX3Q7CiMgNDEgIi91c3IvaW5jbHVkZS9tYXRoLmgi
IDIgMwojIDY1ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
bWF0aGNhbGxzLmgiIDEgMwojIDUzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwoK
CmV4dGVybiBkb3VibGUgYWNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X19hY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbiAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19hdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbjIgKGRv
dWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbjIgKGRv
dWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgY29zIChkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcyAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19zaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBkb3VibGUgY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19jb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgc2luaCAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW5oIChkb3VibGUgX194KSB0
aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX190YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNp
bmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAo
KTsgZXh0ZXJuIHZvaWQgX19zaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3Vi
bGUgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgYWNvc2ggKGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYWNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKZXh0ZXJuIGRvdWJsZSBhc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19hc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW5oIChk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW5oIChkb3VibGUgX194KSB0
aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX2V4cCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs
ZSBmcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2ZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4
dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX2xkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fbG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzEwIChk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzEwIChkb3VibGUgX194KSB0
aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRy
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX21vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19p
cHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgZXhwMTAgKGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGRvdWJsZSBwb3cxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19wb3cx
MCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBleHBtMSAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19sb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2di
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZ2IgKGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGV4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fZXhwMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRv
dWJsZSBsb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzIgKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBkb3VibGUgcG93IChkb3VibGUgX194
LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3BvdyAoZG91YmxlIF9feCwg
ZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBzcXJ0IChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9faHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gZG91YmxlIGNicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fY2JydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBj
ZWlsIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4
dGVybiBkb3VibGUgX19jZWlsIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mYWJzIChkb3VibGUg
X194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJs
ZSBmbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OyBleHRlcm4gZG91YmxlIF9fZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1vZCAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0
ZSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZHJl
bSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19kcmVt
IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzaWdu
aWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaWduaWZpY2Fu
ZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbiAoZG91
YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OyBleHRlcm4gZG91YmxlIF9fY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4g
KF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX2lzbmFuIChkb3Vi
bGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRl
cm4gaW50IGlzbmFuIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgajAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19qMCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBqMSAoZG91YmxlKSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2oxIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91
YmxlIGpuIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qbiAoaW50LCBk
b3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHkwIChkb3VibGUpIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9feTAgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTEgKGRvdWJs
ZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195MSAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJu
IGRvdWJsZSB5biAoaW50LCBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feW4gKGlu
dCwgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBlcmYgKGRvdWJsZSkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmYgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3Vi
bGUgZXJmYyAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZmMgKGRvdWJsZSkg
dGhyb3cgKCk7CmV4dGVybiBkb3VibGUgbGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fbGdhbW1hIChkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIHRn
YW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RnYW1tYSAoZG91YmxlKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUg
bGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCgpl
eHRlcm4gZG91YmxlIHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
cmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIgKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsgZXh0ZXJuIGRvdWJsZSBfX25leHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGRvdWJsZSBuZXh0dG93
YXJkIChkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpl
eHRlcm4gZG91YmxlIHJlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19yZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93
ICgpOwoKCgpleHRlcm4gZG91YmxlIHNjYWxibiAoZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19zY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGlsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBf
X2lsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGJsbiAo
ZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxi
bG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUg
bmVhcmJ5aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX25lYXJieWlu
dCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgcm91bmQgKGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCgpleHRlcm4gZG91YmxlIHRydW5jIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX190cnVuYyAoZG91YmxlIF9feCkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSByZW1x
dW8gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9u
ZyBsb25nIGludCBsbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25n
IGludCBfX2xscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBs
cm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmQgKGRv
dWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kIChkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kIChkb3VibGUgX194
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBmZGltIChkb3VibGUgX194LCBkb3VibGUgX195
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZkaW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp
IHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWF4IChkb3VibGUgX194LCBkb3VibGUgX195KSB0
aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1pbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5IChkb3VibGUgX192YWx1ZSkgdGhyb3cg
KCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25i
aXQgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBmbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJs
ZSBfX3opIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1hIChkb3VibGUgX194LCBkb3VibGUg
X195LCBkb3VibGUgX196KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOwojIDY2ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAy
IDMKIyA4OCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21h
dGhjYWxscy5oIiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKCgpl
eHRlcm4gZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fj
b3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4
dGVybiBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRh
bmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ks
IGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW4yZiAoZmxvYXQgX195LCBm
bG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19jb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZs
b2F0IHNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9h
dCBjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX3NpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0
IHRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQg
Kl9fc2lueCwgZmxvYXQgKl9fY29zeCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2luY29zZiAo
ZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
YWNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fYXRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGZsb2F0IGV4cGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cGYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9u
ZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4
cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGRleHBmIChmbG9hdCBfX3gsIGludCBf
X2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g
ZmxvYXQgbG9nMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cxMGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IG1vZGZmIChmbG9hdCBfX3gsIGZs
b2F0ICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19tb2RmZiAoZmxvYXQgX194LCBm
bG9hdCAqX19pcHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBleHAxMGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK
CmV4dGVybiBmbG9hdCBwb3cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X3BvdzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChm
bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2di
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBleHAyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0
IGxvZzJmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cyZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gZmxvYXQgcG93ZiAoZmxvYXQgX194LCBmbG9h
dCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19zcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxv
YXQgaHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X2h5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxv
YXQgY2JydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBmbG9hdCBjZWlsZiAoZmxvYXQgX194KSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2NlaWxm
IChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl
cm4gZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOyBleHRlcm4gZmxvYXQgX19mYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2Zsb29y
ZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0
ZXJuIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX2Ztb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IF9faXNpbmZmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxv
YXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy
biBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93
ICgpOwoKCgpleHRlcm4gZmxvYXQgc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGZsb2F0IGNvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK
CgpleHRlcm4gZmxvYXQgbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFy
ICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRl
cm4gaW50IF9faXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qMGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZs
b2F0IGoxZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KSB0aHJv
dyAoKTsKZXh0ZXJuIGZsb2F0IGpuZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2puZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feTBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9h
dCB5MWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkgdGhyb3cg
KCk7CmV4dGVybiBmbG9hdCB5bmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X195bmYgKGludCwgZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgZXJmZiAoZmxv
YXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVy
biBmbG9hdCBlcmZjZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoZmxv
YXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgbGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19sZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCB0
Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3RnYW1tYWYgKGZsb2F0KSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgbGdh
bW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
bGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy
biBmbG9hdCByaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmludGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IF9f
eCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy
biBmbG9hdCBfX25leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0
IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7IGV4dGVybiBmbG9hdCBfX25leHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9f
eSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQg
cmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19yZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBm
bG9hdCBzY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19zY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGls
b2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGlu
dCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmxuZiAoZmxvYXQgX194LCBsb25n
IGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGZsb2F0IHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fcm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdHJ1bmNm
IChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu
IGZsb2F0IF9fdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgoKCmV4dGVybiBmbG9hdCByZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwg
aW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JlbXF1b2YgKGZsb2F0IF9feCwg
ZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxy
aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRmIChmbG9h
dCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRmIChmbG9hdCBfX3gp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBpbnQgX19scm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9u
ZyBsb25nIGludCBsbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgX19sbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZk
aW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZkaW1m
IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtYXhmIChm
bG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtYXhmIChmbG9h
dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtaW5mIChmbG9hdCBfX3gs
IGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5ZiAoZmxvYXQg
X192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0
ZXJuIGludCBfX3NpZ25iaXRmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0IGZtYWYgKGZsb2F0IF9feCwgZmxv
YXQgX195LCBmbG9hdCBfX3opIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWFmIChmbG9hdCBf
X3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2Fs
YmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJm
IChmbG9hdCBfX3gsIGZsb2F0IF9fbikgdGhyb3cgKCk7CiMgODkgIi91c3IvaW5jbHVkZS9tYXRo
LmgiIDIgMwojIDEwOSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL21hdGhjYWxscy5oIiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgi
IDMKCgpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19hc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy
biBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9u
ZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7Cgpl
eHRlcm4gbG9uZyBkb3VibGUgc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX3NpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX190YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2
b2lkIHNpbmNvc2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBk
b3VibGUgKl9fY29zeCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2luY29zbCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25l
bnQpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mcmV4cGwgKGxvbmcgZG91YmxlIF9f
eCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbGRleHBs
IChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fbGRleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAo
KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpl
eHRlcm4gbG9uZyBkb3VibGUgbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19sb2cxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGxvbmcgZG91YmxlIG1vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lw
dHIpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19tb2RmbCAobG9uZyBkb3VibGUgX194
LCBsb25nIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBl
eHAxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4
cDEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBwb3cx
MGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3BvdzEw
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhw
bTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBt
MWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzFw
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nYmwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHAybCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMmwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzJsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cybCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcG93bCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19wb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIHNxcnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19zcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90bCAobG9uZyBkb3VibGUgX194
LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2Jy
dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NicnRs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBj
ZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmFic2wg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZsb29ybCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2Zsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2Ztb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IF9faXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxvbmcgZG91Ymxl
IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRl
cm4gaW50IGlzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1
ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRv
dWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19kcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2lnbmlmaWNhbmRsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaWduaWZpY2FuZGwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvcHlzaWdu
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29weXNpZ25sIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmFubCAoX19jb25zdCBjaGFyICpfX3Rh
Z2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fbmFubCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IF9faXNuYW5sIChsb25nIGRvdWJsZSBfX3Zh
bHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQg
aXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGowbCAobG9uZyBkb3VibGUpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19qMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJu
IGxvbmcgZG91YmxlIGoxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19qMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGpubCAo
aW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2pubCAoaW50
LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MGwgKGxvbmcgZG91
YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTBsIChsb25nIGRvdWJsZSkgdGhy
b3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9feTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25n
IGRvdWJsZSB5bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX195bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBk
b3VibGUgZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19l
cmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAobG9u
ZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3Vi
bGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSB0Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2dhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1w
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbF9yIChsb25nIGRvdWJsZSwg
aW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByaW50
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmludGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHRhZnRl
cmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHRhZnRlcmwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgpleHRlcm4gbG9uZyBkb3VibGUgbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg
ZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRl
cm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1haW5kZXJsIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBz
Y2FsYm5sIChsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19zY2FsYm5sIChsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IGlsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBf
X2lsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJs
ZSBzY2FsYmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19zY2FsYmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24p
IHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmVhcmJ5aW50bCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmVhcmJ5aW50bCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJvdW5kbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcm91bmRsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fdHJ1bmNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1xdW9sIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX3JlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQg
Kl9fcXVvKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50bCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kbCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZkaW1sIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZkaW1s
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtaW5sIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Zt
aW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgX19mcGNsYXNzaWZ5bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRsIChsb25n
IGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195LCBsb25nIGRvdWJsZSBfX3opIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19m
bWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYmwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgdGhyb3cgKCk7CiMgMTEwICIvdXNyL2lu
Y2x1ZGUvbWF0aC5oIiAyIDMKIyAxMjUgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuIGlu
dCBzaWduZ2FtOwojIDE2NiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwplbnVtCiAgewogICAgRlBf
TkFOLAoKICAgIEZQX0lORklOSVRFLAoKICAgIEZQX1pFUk8sCgogICAgRlBfU1VCTk9STUFMLAoK
ICAgIEZQX05PUk1BTAoKICB9OwojIDI1MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0eXBlZGVm
IGVudW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJWF8sCiAg
X0lTT0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUg
X0xJQl9WRVJTSU9OOwojIDI3NSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3QgX19leGNl
cHRpb24KCgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJn
MTsKICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVybiBpbnQg
bWF0aGVyciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgNDIzICIvdXNy
L2luY2x1ZGUvbWF0aC5oIiAzCn0KIyA1MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDIg
MwojIDc5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fY21hdGhfcG93ZXIoX1RwLCB1bnNpZ25lZCBp
bnQpOwoKICBpbmxpbmUgZG91YmxlCiAgYWJzKGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWls
dGluX2ZhYnMoX194KTsgfQoKICBpbmxpbmUgZmxvYXQKICBhYnMoZmxvYXQgX194KQogIHsgcmV0
dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGFicyhs
b25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7IH0KCgogIGlu
bGluZSBmbG9hdAogIGFjb3MoZmxvYXQgX194KSB7IHJldHVybiA6OmFjb3NmKF9feCk7IH0KCgoK
CgogIHVzaW5nIDo6YWNvczsKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGFjb3MobG9uZyBkb3Vi
bGUgX194KSB7IHJldHVybiA6OmFjb3NsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YXNpbjsKCgog
IGlubGluZSBmbG9hdAogIGFzaW4oZmxvYXQgX194KSB7IHJldHVybiA6OmFzaW5mKF9feCk7IH0K
CgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhc2luKGxvbmcgZG91YmxlIF9feCkgeyByZXR1
cm4gOjphc2lubChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmF0YW47CgoKICBpbmxpbmUgZmxvYXQK
ICBhdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjphdGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5l
IGxvbmcgZG91YmxlCiAgYXRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbmwoX194
KTsgfQoKCgoKCiAgdXNpbmcgOjphdGFuMjsKCgogIGlubGluZSBmbG9hdAogIGF0YW4yKGZsb2F0
IF9feSwgZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW4yZihfX3ksIF9feCk7IH0KCgoKCgoKCiAg
aW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbjIobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBf
X3gpIHsgcmV0dXJuIDo6YXRhbjJsKF9feSwgX194KTsgfQoKCgoKCgogIHVzaW5nIDo6Y2VpbDsK
CgogIGlubGluZSBmbG9hdAogIGNlaWwoZmxvYXQgX194KSB7IHJldHVybiA6OmNlaWxmKF9feCk7
IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjZWlsKGxvbmcgZG91YmxlIF9feCkgeyBy
ZXR1cm4gOjpjZWlsbChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmNvczsKCiAgaW5saW5lIGZsb2F0
CiAgY29zKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fY29zZihfX3gpOyB9CgogIGlu
bGluZSBsb25nIGRvdWJsZQogIGNvcyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWls
dGluX2Nvc2woX194KTsgfQoKICB1c2luZyA6OmNvc2g7CgoKICBpbmxpbmUgZmxvYXQKICBjb3No
KGZsb2F0IF9feCkgeyByZXR1cm4gOjpjb3NoZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcg
ZG91YmxlCiAgY29zaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y29zaGwoX194KTsgfQoK
CgoKCiAgdXNpbmcgOjpleHA7CgoKICBpbmxpbmUgZmxvYXQKICBleHAoZmxvYXQgX194KSB7IHJl
dHVybiA6OmV4cGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGV4cChsb25n
IGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6ZXhwbChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmZhYnM7
CgogIGlubGluZSBmbG9hdAogIGZhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9m
YWJzZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGZhYnMobG9uZyBkb3VibGUgX194
KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9CgogIHVzaW5nIDo6Zmxvb3I7CgoK
ICBpbmxpbmUgZmxvYXQKICBmbG9vcihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JmKF9feCk7
IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmbG9vcihsb25nIGRvdWJsZSBfX3gpIHsg
cmV0dXJuIDo6Zmxvb3JsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6Zm1vZDsKCgogIGlubGluZSBm
bG9hdAogIGZtb2QoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6Zm1vZGYoX194LCBf
X3kpOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZtb2QobG9uZyBkb3VibGUgX194
LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6Zm1vZGwoX194LCBfX3kpOyB9CgoKCgoKCiAg
dXNpbmcgOjpmcmV4cDsKCgogIGlubGluZSBmbG9hdAogIGZyZXhwKGZsb2F0IF9feCwgaW50KiBf
X2V4cCkgeyByZXR1cm4gOjpmcmV4cGYoX194LCBfX2V4cCk7IH0KCgoKCgoKICBpbmxpbmUgbG9u
ZyBkb3VibGUKICBmcmV4cChsb25nIGRvdWJsZSBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6
ZnJleHBsKF9feCwgX19leHApOyB9CgoKCgoKCiAgdXNpbmcgOjpsZGV4cDsKCgogIGlubGluZSBm
bG9hdAogIGxkZXhwKGZsb2F0IF9feCwgaW50IF9fZXhwKSB7IHJldHVybiA6OmxkZXhwZihfX3gs
IF9fZXhwKTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsZGV4cChsb25nIGRvdWJs
ZSBfX3gsIGludCBfX2V4cCkgeyByZXR1cm4gOjpsZGV4cGwoX194LCBfX2V4cCk7IH0KCgoKCgoK
ICB1c2luZyA6OmxvZzsKCgogIGlubGluZSBmbG9hdAogIGxvZyhmbG9hdCBfX3gpIHsgcmV0dXJu
IDo6bG9nZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbG9nKGxvbmcgZG91
YmxlIF9feCkgeyByZXR1cm4gOjpsb2dsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6bG9nMTA7CgoK
ICBpbmxpbmUgZmxvYXQKICBsb2cxMChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nMTBmKF9feCk7
IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsb2cxMChsb25nIGRvdWJsZSBfX3gpIHsg
cmV0dXJuIDo6bG9nMTBsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6bW9kZjsKCgogIGlubGluZSBm
bG9hdAogIG1vZGYoZmxvYXQgX194LCBmbG9hdCogX19pcHRyKSB7IHJldHVybiA6Om1vZGZmKF9f
eCwgX19pcHRyKTsgfQojIDM3NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKICBpbmxp
bmUgbG9uZyBkb3VibGUKICBtb2RmKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUqIF9faXB0
cikgeyByZXR1cm4gOjptb2RmbChfX3gsIF9faXB0cik7IH0KIyAzODggIi91c3IvaW5jbHVkZS9j
KysvMy4yL2NtYXRoIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcAog
ICAgX19wb3dfaGVscGVyKF9UcCBfX3gsIGludCBfX24pCiAgICB7CiAgICAgIHJldHVybiBfX24g
PCAwCiAgICAgICAgPyBfVHAoMSkvX19jbWF0aF9wb3dlcihfX3gsIC1fX24pCiAgICAgICAgOiBf
X2NtYXRoX3Bvd2VyKF9feCwgX19uKTsKICAgIH0KCiAgdXNpbmcgOjpwb3c7CgoKICBpbmxpbmUg
ZmxvYXQKICBwb3coZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6cG93ZihfX3gsIF9f
eSk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgcG93KGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSB7IHJldHVybiA6OnBvd2woX194LCBfX3kpOyB9CgoKCgoKCiAgaW5s
aW5lIGRvdWJsZQogIHBvdyhkb3VibGUgX194LCBpbnQgX19pKQogIHsgcmV0dXJuIF9fcG93X2hl
bHBlcihfX3gsIF9faSk7IH0KCiAgaW5saW5lIGZsb2F0CiAgcG93KGZsb2F0IF9feCwgaW50IF9f
bikKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX24pOyB9CgogIGlubGluZSBsb25nIGRv
dWJsZQogIHBvdyhsb25nIGRvdWJsZSBfX3gsIGludCBfX24pCiAgeyByZXR1cm4gX19wb3dfaGVs
cGVyKF9feCwgX19uKTsgfQoKICB1c2luZyA6OnNpbjsKCiAgaW5saW5lIGZsb2F0CiAgc2luKGZs
b2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc2luZihfX3gpOyB9CgogIGlubGluZSBsb25n
IGRvdWJsZQogIHNpbihsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3Npbmwo
X194KTsgfQoKICB1c2luZyA6OnNpbmg7CgoKICBpbmxpbmUgZmxvYXQKICBzaW5oKGZsb2F0IF9f
eCkgeyByZXR1cm4gOjpzaW5oZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg
c2luaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6c2luaGwoX194KTsgfQoKCgoKCiAgdXNp
bmcgOjpzcXJ0OwoKICBpbmxpbmUgZmxvYXQKICBzcXJ0KGZsb2F0IF9feCkKICB7IHJldHVybiBf
X2J1aWx0aW5fc3FydGYoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzcXJ0KGxvbmcg
ZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc3FydGwoX194KTsgfQoKICB1c2luZyA6
OnRhbjsKCgogIGlubGluZSBmbG9hdAogIHRhbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFuZihf
X3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgdGFuKGxvbmcgZG91YmxlIF9feCkg
eyByZXR1cm4gOjp0YW5sKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6dGFuaDsKCgogIGlubGluZSBm
bG9hdAogIHRhbmgoZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmhmKF9feCk7IH0KCgoKCgoKICBp
bmxpbmUgbG9uZyBkb3VibGUKICB0YW5oKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjp0YW5o
bChfX3gpOyB9CgoKCgp9CgoKCgoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2ZwY2xhc3NpZnkoX1RwIF9fZikgeyBy
ZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9f
ZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX2Yp
IDogX19mcGNsYXNzaWZ5bCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
aW50CiAgICBfX2NhcHR1cmVfaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19m
KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZmluaXRlZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBz
aXplb2YgKGRvdWJsZSkgPyBfX2Zpbml0ZSAoX19mKSA6IF9fZmluaXRlbCAoX19mKSk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNpbmYoX1RwIF9f
ZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9faXNpbmZmIChf
X2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9faXNpbmYgKF9fZikgOiBf
X2lzaW5mbCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBf
X2NhcHR1cmVfaXNuYW4oX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2Yg
KGZsb2F0KSA/IF9faXNuYW5mIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91Ymxl
KSA/IF9faXNuYW4gKF9fZikgOiBfX2lzbmFubCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNub3JtYWwoX1RwIF9fZikgeyByZXR1cm4g
KChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX2YpIDog
c2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX19mKSA6IF9f
ZnBjbGFzc2lmeWwgKF9fZikpID09IEZQX05PUk1BTCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfc2lnbmJpdChfVHAgX19mKSB7IHJldHVybiAoc2l6
ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19zaWduYml0ZiAoX19mKSA6IHNpemVvZiAo
X19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX3NpZ25iaXQgKF9fZikgOiBfX3NpZ25iaXRsIChf
X2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9p
c2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18g
KHsgX190eXBlb2ZfXyhfX2YxKSBfX3ggPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX195ID0g
KF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gpOyBf
X3R5cGVvZl9fKF9feSkgX192ID0gKF9feSk7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9h
dCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91Ymxl
KSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05BTiB8
fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6
IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBf
X2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKSAmJiBfX3ggPiBfX3k7IH0pKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzZ3JlYXRl
cmVxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAo
eyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAo
X19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9f
dHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0
KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUp
ID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8
IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDog
c2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9f
ZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIF9feCA+PSBfX3k7IH0pKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzcyhf
VHAgX19mMSwgX1RwIF9fZjIpIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18o
X19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4
dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kp
IF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNz
aWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3Np
ZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192
KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikg
PT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAo
X192KSkgPT0gRlBfTkFOOyB9KSkgJiYgX194IDwgX195OyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2xlc3NlcXVhbChfVHAgX19mMSwg
X1RwIF9fZjIpCiAgICAgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2Yx
KSBfX3ggPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5z
aW9uX18gKHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192
ID0gKF9feSk7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlm
IChfX3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAo
X191KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09
IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBz
aXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3Yp
KSA9PSBGUF9OQU47IH0pKSAmJiBfX3ggPD0gX195OyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2xlc3NncmVhdGVyKF9UcCBfX2YxLCBf
VHAgX19mMikKICAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEp
IF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNp
b25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3Yg
PSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYg
KF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChf
X3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0g
c2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNp
emVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikp
ID09IEZQX05BTjsgfSkpICYmIChfX3ggPCBfX3kgfHwgX195IDwgX194KTsgfSkpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXN1bm9yZGVyZWQo
X1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlw
ZW9mX18oX19mMSkgX191ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9fdiA9IChfX2YyKTsg
KHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBz
aXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19m
cGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChm
bG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91
YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05B
TjsgfSkpOyB9Cn0KIyA1ODAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCm5hbWVzcGFj
ZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgZnBjbGFz
c2lmeShfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfZnBjbGFzc2lmeShfX2YpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1
cm4gX19jYXB0dXJlX2lzZmluaXRlKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgaW50CiAgICBpc2luZihfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNpbmYoX19mKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbmFuKF9UcCBfX2YpIHsg
cmV0dXJuIF9fY2FwdHVyZV9pc25hbihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICAgIGludAogICAgaXNub3JtYWwoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbm9ybWFs
KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBzaWduYml0KF9U
cCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9zaWduYml0KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJl
dHVybiBfX2NhcHR1cmVfaXNncmVhdGVyKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIGludAogICAgaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQog
ICAgeyByZXR1cm4gX19jYXB0dXJlX2lzZ3JlYXRlcmVxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19m
MikgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzcyhfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikK
ICAgIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2xlc3NlcXVhbChfX2YxLCBfX2YyKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9U
cCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwgX19mMik7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc3Vub3JkZXJlZChfVHAg
X19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX19mMSwg
X19mMik7IH0KfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpmcGNsYXNzaWZ5
OwogIHVzaW5nIF9fZ251X2N4eDo6aXNmaW5pdGU7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2luZjsK
ICB1c2luZyBfX2dudV9jeHg6OmlzbmFuOwogIHVzaW5nIF9fZ251X2N4eDo6aXNub3JtYWw7CiAg
dXNpbmcgX19nbnVfY3h4OjpzaWduYml0OwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyOwog
IHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xl
c3M7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3NlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6Omlz
bGVzc2dyZWF0ZXI7CiAgdXNpbmcgX19nbnVfY3h4Ojppc3Vub3JkZXJlZDsKfQoKCgoKIyAxICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NtYXRoLnRjYyIgMSAzCiMgMzUgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvY21hdGgudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIF9UcAogICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1bnNpZ25lZCBp
bnQgX19uKQogICAgewogICAgICBfVHAgX195ID0gX19uICUgMiA/IF9feCA6IDE7CgogICAgICB3
aGlsZSAoX19uID4+PSAxKQogICAgICAgIHsKICAgICAgICAgIF9feCA9IF9feCAqIF9feDsKICAg
ICAgICAgIGlmIChfX24gJSAyKQogICAgICAgICAgICBfX3kgPSBfX3kgKiBfX3g7CiAgICAgICAg
fQoKICAgICAgcmV0dXJuIF9feTsKICAgIH0KfQojIDY1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Y21hdGgiIDIgMwojIDQyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMu
dGNjIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAxIDMKIyA0NyAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kz
ODYtbGludXgvYml0cy9jcHVfbGltaXRzLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9saW1pdHMiIDIgMwojIDg4NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCm5hbWVz
cGFjZSBzdGQKewogIGVudW0gZmxvYXRfcm91bmRfc3R5bGUKICB7CiAgICByb3VuZF9pbmRldGVy
bWluYXRlID0gLTEsCiAgICByb3VuZF90b3dhcmRfemVybyA9IDAsCiAgICByb3VuZF90b19uZWFy
ZXN0ID0gMSwKICAgIHJvdW5kX3Rvd2FyZF9pbmZpbml0eSA9IDIsCiAgICByb3VuZF90b3dhcmRf
bmVnX2luZmluaXR5ID0gMwogIH07CgogIGVudW0gZmxvYXRfZGVub3JtX3N0eWxlCiAgewogICAg
ZGVub3JtX2luZGV0ZXJtaW5hdGUgPSAtMSwKICAgIGRlbm9ybV9hYnNlbnQgPSAwLAogICAgZGVu
b3JtX3ByZXNlbnQgPSAxCiAgfTsKCgoKCiAgc3RydWN0IF9fbnVtZXJpY19saW1pdHNfYmFzZQog
IHsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gZmFsc2U7CgogICAgc3Rh
dGljIGNvbnN0IGludCBkaWdpdHMgPSAwOwogICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9
IDA7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4
YWN0ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMDsKCiAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudDEwID0gMDsKICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h
TiA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz
ZTsKICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9y
bV9hYnNlbnQ7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsK
CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2JvdW5kZWQgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVs
byA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICBzdGF0
aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogIH07Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0cyA6IHB1Ymxp
YyBfX251bWVyaWNfbGltaXRzX2Jhc2UKICAgIHsKICAgICAgc3RhdGljIF9UcCBtaW4oKSB0aHJv
dygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBtYXgo
KSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9U
cCBlcHNpbG9uKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAg
IHN0YXRpYyBfVHAgcm91bmRfZXJyb3IoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9U
cD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBpbmZpbml0eSgpIHRocm93KCkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHF1aWV0X05hTigpIHRocm93KCkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHNpZ25hbGlu
Z19OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3Rh
dGljIF9UcCBkZW5vcm1fbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDAp
OyB9CiAgICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxib29s
PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7Cgog
ICAgICBzdGF0aWMgYm9vbCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9Cgog
ICAgICBzdGF0aWMgYm9vbCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRydWU7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g
MjsKICAgICAgc3RhdGljIGJvb2wgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFs
c2U7IH0KICAgICAgc3RhdGljIGJvb2wgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMg
Ym9vbCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3Rh
dGljIGJvb2wgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAg
ICBzdGF0aWMgYm9vbCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxz
ZTsgfQogICAgICBzdGF0aWMgYm9vbCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCgoKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy
YXBzID0gdHJ1ZQogICAgICAgICAgICAgICB8fCB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5k
X3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgogIHRlbXBs
YXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxjaGFyPgogICAgewogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgY2hhciBtaW4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChjaGFyKSgtMTI3IC0gMSk7IH0KICAgICAgc3RhdGlj
IGNoYXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoY2hhcikxMjc7IH0KCiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMx
MCA9IDI7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAg
ICBzdGF0aWMgY2hhciBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0K
ICAgICAgc3RhdGljIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNo
YXIoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEw
ID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNoYXIg
aW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMg
Y2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBz
dGF0aWMgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7
IH0KICAgICAgc3RhdGljIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1
OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm
b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z
dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMDcxICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2ln
bmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0g
dHJ1ZTsKCiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuICgtMTI3IC0gMSk7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2Vy
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGVwc2ls
b24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFy
IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4
cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGlu
Z19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNf
ZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y
bV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBz
dGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFy
PigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
Ym91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
cm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTEy
OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0
IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1p
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hh
ciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgxMjcgKiAyICsgMSk7IH0KCiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gODsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMx
MCA9IDI7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAg
ICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3Rh
dGljIHVuc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1
aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAg
c3RhdGljIHVuc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu
eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls
ZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0
ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8d2NoYXJfdD4KICAgIHsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHdjaGFyX3Qg
bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2NoYXJfdCkoLTIxNDc0ODM2NDdMIC0gMSk7
IH0KICAgICAgc3RhdGljIHdjaGFyX3QgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2No
YXJfdCkyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgd2NoYXJfdCBlcHNpbG9uKCkg
dGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHJvdW5kX2Vy
cm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50
IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAg
PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O
YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g
ZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g
ZmFsc2U7CgogICAgICBzdGF0aWMgd2NoYXJfdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHF1aWV0X05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0
aWMgd2NoYXJfdCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96
ZXJvOwogICAgfTsKIyAxMjQxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1w
bGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2hvcnQ+CiAgICB7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBt
aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtMzI3NjcgLSAxKTsgfQogICAgICBzdGF0aWMg
c2hvcnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAzMjc2NzsgfQoKICAgICAgc3RhdGlj
IGNvbnN0IGludCBkaWdpdHMgPSAxNTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9
IDQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBz
dGF0aWMgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz
dGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt
X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBpbmZpbml0eSgp
IHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgcXVp
ZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBz
aG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAg
ICAgIHN0YXRpYyBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9y
dCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2Fy
ZF96ZXJvOwogICAgfTsKIyAxMjk4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0
ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+CiAgICB7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAg
ICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDMy
NzY3ICogMiArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE2OwogICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXBzaWxv
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hv
cnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
ZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFs
aW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhh
c19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVu
b3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0eSgp
IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9
CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5z
aWduZWQgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBk
ZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBz
aG9ydD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRf
dG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmlj
X2xpbWl0czxpbnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVk
ID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBpbnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAo
aW50KSgtMjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMgaW50IG1heCgpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gKGludCkyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgaW50
IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGludCBy
b3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
cXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf
TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl
bm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f
bG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHF1aWV0X05h
TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBz
dGF0aWMgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu
eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls
ZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNDEwICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19s
aW1pdHM8dW5zaWduZWQgaW50PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVj
aWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuICh1bnNpZ25lZCkoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9
CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFk
aXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp
bml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h
YnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoK
ICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQg
aW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAg
ICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu
eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls
ZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0
ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgbWluKCkg
dGhyb3coKQogICAgICB7IHJldHVybiAoLTIxNDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGlj
IGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp
dHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog
ICAgICBzdGF0aWMgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAg
ICAgIHN0YXRpYyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9
CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rl
bm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBpbmZpbml0
eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAg
c3RhdGljIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBk
ZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy
bzsKICAgIH07CiMgMTUyMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxh
dGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+CiAgICB7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1
bnNpZ25lZCBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0
aWMgdW5zaWduZWQgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgyMTQ3NDgzNjQ3
TCAqIDJVICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVwc2lsb24o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg
cm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k
ZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt
X2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmluaXR5KCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAg
ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBs
b25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9taW4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
bW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv
OwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9u
ZyBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy
dWU7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
KC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgLSAxKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIG1h
eCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gOTIyMzM3MjAzNjg1NDc3NTgwN0xMOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDYzOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0czEwID0gMTg7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy
OwogICAgICBzdGF0aWMgbG9uZyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IDA7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGlj
IGxvbmcgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIHF1aWV0X05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0
aWMgbG9uZyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBkZW5vcm1fbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
dWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog
ICAgfTsKIyAxNjM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+
CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZyBsb25nPgogICAgewogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMg
dW5zaWduZWQgbG9uZyBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAg
ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4g
KDkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAqIDJVTEwgKyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMgPSA2NDsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE5Owog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4
YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRp
YyB1bnNpZ25lZCBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg
fQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9
IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBz
dGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNp
Z25lZCBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25n
IGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25n
IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g
cm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBu
dW1lcmljX2xpbWl0czxmbG9hdD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl
Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGZsb2F0IG1pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMS4xNzU0OTQzNWUtMzhGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBtYXgoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDMuNDAyODIzNDdlKzM4RjsgfQoKICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMgPSAyNDsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDY7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh
Y3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRp
YyBmbG9hdCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjE5MjA5MjkwZS0wN0Y7
IH0KICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAxLjBGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xMjU7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzc7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTI4OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudDEwID0gMzg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Owog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0
YXRpYyBmbG9hdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAg
ICBzdGF0aWMgZmxvYXQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9
CiAgICAgIHN0YXRpYyBmbG9hdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAwLjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAwLjBGOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9
IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNzY1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9s
aW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZG91YmxlPgog
ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg
ICBzdGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4yMjUwNzM4NTg1
MDcyMDE0ZS0zMDg7IH0KICAgICAgc3RhdGljIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0cyA9IDUzOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBk
b3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4yMjA0NDYwNDkyNTAzMTMx
ZS0xNjsgfQogICAgICBzdGF0aWMgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAxLjA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTEw
MjE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzA3OwogICAgICBz
dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50MTAgPSAzMDg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5m
aW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQogICAgICAg
ICAgICAgIGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f
bG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBzaWduYWxpbmdfTmFO
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBkZW5v
cm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3Vu
ZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7Cgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3Jv
dW5kX3N0eWxlIHJvdW5kX3N0eWxlID0KICAgICAgICAgICAgICByb3VuZF90b3dhcmRfemVybzsK
ICAgIH07CiMgMTg0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8
PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPgogICAgewogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgbG9uZyBk
b3VibGUgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAzLjM2MjEwMzE0MzExMjA5MzUwNjI2
ZS00OTMyTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbWF4KCkgdGhyb3coKQogICAgICB7
IHJldHVybiAxLjE4OTczMTQ5NTM1NzIzMTc2NTAyZSs0OTMyTDsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGludCBkaWdpdHMgPSA2NDsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE4
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBz
dGF0aWMgbG9uZyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wODQy
MDIxNzI0ODU1MDQ0MzQwMWUtMTlMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSByb3VuZF9l
cnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wTDsgfQoKICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQgPSAtMTYzODE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4
cG9uZW50MTAgPSAtNDkzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAx
NjM4NDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDQ5MzI7CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfc2lnbmFsaW5nX05hTiA9CiAgICAgICAgICAgICAgICBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0KICAgICAgICAgICAgICAgIGRlbm9y
bV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9CiAgICAg
ICAgICAgICAgICBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBpbmZpbml0eSgpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcXVp
ZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CiAgICAgIHN0YXRpYyBsb25n
IGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CiAg
ICAgIHN0YXRpYyBsb25nIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAwLjBMOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9CiAgICAg
ICAgcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE5MjQgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2xpbWl0cyIgMwp9CiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0
cy50Y2MiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMSAzCiMgNDAg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL3R5cGVpbmZvIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3Bh
Y2UgX19jeHhhYml2MQp7CiAgY2xhc3MgX19jbGFzc190eXBlX2luZm87Cn0KIyA1NSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvdHlwZWluZm8iIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgY2xhc3MgdHlw
ZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAgICB2aXJ0dWFsIH50eXBlX2luZm8oKTsKCiAgcHJp
dmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsKICAgIHR5
cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKCiAgcHJvdGVjdGVkOgogICAgY29uc3QgY2hhciAq
X19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdCB0eXBlX2luZm8oY29uc3QgY2hhciAq
X19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1YmxpYzoKCgoKICAgIGNvbnN0IGNoYXIqIG5hbWUo
KSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lOyB9CiMgOTggIi91c3IvaW5jbHVkZS9jKysvMy4y
L3R5cGVpbmZvIiAzCiAgICBib29sIGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25z
dAogICAgeyByZXR1cm4gX19uYW1lIDwgX19hcmcuX19uYW1lOyB9CiAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA9PSBf
X2FyZy5fX25hbWU7IH0KCiAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2Fy
ZykgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj09KF9fYXJnKTsgfQoKCiAgcHVibGljOgoK
ICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgYm9v
bCBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb19j
YXRjaChjb25zdCB0eXBlX2luZm8gKl9fdGhyX3R5cGUsIHZvaWQgKipfX3Rocl9vYmosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKCgogICAgdmly
dHVhbCBib29sIF9fZG9fdXBjYXN0KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlwZV9pbmZv
ICpfX3RhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19vYmpfcHRy
KSBjb25zdDsKICB9OwoKCgogIGNsYXNzIGJhZF9jYXN0IDogcHVibGljIGV4Y2VwdGlvbgogIHsK
ICBwdWJsaWM6CiAgICBiYWRfY2FzdCgpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9j
YXN0KCkgdGhyb3coKTsKICB9OwoKCiAgY2xhc3MgYmFkX3R5cGVpZCA6IHB1YmxpYyBleGNlcHRp
b24KICB7CiAgcHVibGljOgogICAgYmFkX3R5cGVpZCAoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0
dWFsIH5iYWRfdHlwZWlkKCkgdGhyb3coKTsKICB9Owp9Cgp9CiMgNDYgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxlCiAgICBsb2NhbGU6OmNvbWJpbmUoY29u
c3QgbG9jYWxlJiBfX290aGVyKSBjb25zdAogICAgewogICAgICBfSW1wbCogX190bXAgPSBuZXcg
X0ltcGwoKl9NX2ltcGwsIDEpOwogICAgICBfX3RtcC0+X01fcmVwbGFjZV9mYWNldChfX290aGVy
Ll9NX2ltcGwsICZfRmFjZXQ6OmlkKTsKICAgICAgcmV0dXJuIGxvY2FsZShfX3RtcCk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYm9vbAogICAgbG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3QK
ICAgIHsKICAgICAgdHlwZWRlZiBzdGQ6OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsK
ICAgICAgY29uc3QgX19jb2xsYXRlX3R5cGUmIF9fY29sbGF0ZSA9IHVzZV9mYWNldDxfX2NvbGxh
dGVfdHlwZT4oKnRoaXMpOwogICAgICByZXR1cm4gKF9fY29sbGF0ZS5jb21wYXJlKF9fczEuZGF0
YSgpLCBfX3MxLmRhdGEoKSArIF9fczEubGVuZ3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19zMi5kYXRhKCksIF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAg
dXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSBf
RmFjZXQ6OmlkLl9NX2lkKCk7CiAgICAgIGxvY2FsZTo6ZmFjZXQqKiBfX2ZhY2V0cyA9IF9fbG9j
Ll9NX2ltcGwtPl9NX2ZhY2V0czsKICAgICAgaWYgKCEoX19pIDwgX19sb2MuX01faW1wbC0+X01f
ZmFjZXRzX3NpemUgJiYgX19mYWNldHNbX19pXSkpCiAgICAgICAgX190aHJvd19iYWRfY2FzdCgp
OwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgX0ZhY2V0Jj4oKl9fZmFjZXRzW19faV0p
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFj
ZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKQogICAgewogICAgICBzaXplX3QgX19pID0g
X0ZhY2V0OjppZC5fTV9pZCgpOwogICAgICBsb2NhbGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xv
Yy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIHJldHVybiAoX19pIDwgX19sb2MuX01faW1wbC0+
X01fZmFjZXRzX3NpemUgJiYgX19mYWNldHNbX19pXSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxf
Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfZmxvYXQoX0luSXRlciBfX2JlZywgX0lu
SXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3h0cmMpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVk
ZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBjb25zdCBsb2NhbGUg
X19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBl
ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IG51bXB1bmN0
PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgog
ICAgICBjb25zdCBjaGFyX3R5cGUgX19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwogICAgICBj
b25zdCBjaGFyX3R5cGUgX19taW51cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKICAgICAgaW50IF9f
cG9zID0gMDsKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgaWYgKChfX3RyYWl0
c190eXBlOjplcShfX2MsIF9fcGx1cykgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21pbnVz
KSkKICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIF9feHRy
YyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICArK19fcG9zOwogICAg
ICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICB9CgoKICAgICAgY29uc3QgY2hhcl90eXBl
IF9femVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRvbXNbX01femVyb10pOwogICAgICBib29sIF9f
Zm91bmRfemVybyA9IGZhbHNlOwogICAgICB3aGlsZSAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBf
X3plcm8pICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIF9fYyA9ICooKytf
X2JlZyk7CiAgICAgICAgICBfX2ZvdW5kX3plcm8gPSB0cnVlOwogICAgICAgIH0KICAgICAgaWYg
KF9fZm91bmRfemVybykKICAgICAgICB7CiAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01f
emVyb107CiAgICAgICAgICArK19fcG9zOwogICAgICAgIH0KCgogICAgICBjb25zdCBzaXplX3Qg
X19sZW4gPSBfTV9FIC0gX01femVybyArIDE7CiAgICAgIGNoYXJfdHlwZSBfX3dhdG9tc1tfX2xl
bl07CiAgICAgIF9fY3R5cGUud2lkZW4oX1NfYXRvbXMsIF9TX2F0b21zICsgX19sZW4sIF9fd2F0
b21zKTsKICAgICAgYm9vbCBfX2ZvdW5kX2RlYyA9IGZhbHNlOwogICAgICBib29sIF9fZm91bmRf
c2NpID0gZmFsc2U7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX2RlYyA9IF9fbnAuZGVjaW1hbF9w
b2ludCgpOwoKICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAgIGNvbnN0IHN0cmlu
ZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBib29sIF9fY2hlY2tfZ3JvdXBp
bmcgPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7CiAgICAgIGNv
bnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwoKICAgICAgd2hpbGUg
KF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f
cCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193YXRvbXMsIDEwLCBfX2MpOwoKCiAgICAgICAgICBp
ZiAoX19wICYmICFfX3RyYWl0c190eXBlOjplcShfX2MsIGNoYXJfdHlwZSgpKSkKICAgICAgICAg
ICAgewoKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSBfU19h
dG9tc1tfX3AgLSBfX3dhdG9tc107CiAgICAgICAgICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAg
ICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAo
X190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3NlcCkKICAgICAgICAgICAgICAgICAgICYmIF9fY2hl
Y2tfZ3JvdXBpbmcgJiYgIV9fZm91bmRfZGVjKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICBpZiAoX19zZXBfcG9zKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2Zv
dW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAg
ICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVs
c2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19kZWMpICYmICFfX2ZvdW5kX2RlYykKICAg
ICAgICAgICAgewoKCgogICAgICAgICAgICAgIGlmIChfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkK
ICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19z
ZXBfcG9zKTsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSAn
Lic7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBfX2ZvdW5k
X2RlYyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKChfX3RyYWl0c190
eXBlOjplcShfX2MsIF9fd2F0b21zW19NX2VdKQogICAgICAgICAgICAgICAgICAgIHx8IF9fdHJh
aXRzX3R5cGU6OmVxKF9fYywgX193YXRvbXNbX01fRV0pKQogICAgICAgICAgICAgICAgICAgJiYg
IV9fZm91bmRfc2NpICYmIF9fcG9zKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICsrX19w
b3M7CiAgICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsK
ICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwoKCiAgICAgICAgICAgICAgaWYgKF9fdHJh
aXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKQogICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190
eXBlOjplcShfX2MsIF9fbWludXMpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICArK19fcG9zOwogICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19j
LCBjaGFyKCkpOwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIF9fZm91bmRfc2NpID0gdHJ1ZTsKICAgICAgICAgICAgfQog
ICAgICAgICAgZWxzZQoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKCgogICAgICBpZiAo
X19jaGVja19ncm91cGluZyAmJiBfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7Cgog
ICAgICAgICAgaWYgKCFfX2ZvdW5kX2RlYykKICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyAr
PSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9n
cm91cGluZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBjaGFyKCk7
CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9m
Yml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0lu
SXRlcj46OgogICAgX01fZXh0cmFjdF9pbnQoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIHN0cmluZyYgX194dHJjLCBpbnQmIF9fYmFzZSkgY29uc3QKICAgIHsKICAgICAgdHlwZWRl
ZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGNvbnN0IGxvY2FsZSBf
X2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUg
PSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgbnVtcHVuY3Q8
X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCiAg
ICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19i
YXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQog
ICAgICAgIF9fYmFzZSA9IDg7CiAgICAgIGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNl
OjpoZXgpCiAgICAgICAgX19iYXNlID0gMTY7CiAgICAgIGVsc2UKICAgICAgICBfX2Jhc2UgPSAx
MDsKCgogICAgICBpbnQgX19wb3MgPSAwOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwog
ICAgICBjb25zdCBjaGFyX3R5cGUgX19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwogICAgICBj
b25zdCBjaGFyX3R5cGUgX19taW51cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKCiAgICAgIGlmICgo
X190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywg
X19taW51cykpCiAgICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAg
ICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgKytfX3Bv
czsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgfQoKCiAgICAgIGNvbnN0IGNo
YXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKF9TX2F0b21zW19NX3plcm9dKTsKICAgICAg
Y29uc3QgY2hhcl90eXBlIF9feCA9IF9fY3R5cGUud2lkZW4oJ3gnKTsKICAgICAgY29uc3QgY2hh
cl90eXBlIF9fWCA9IF9fY3R5cGUud2lkZW4oJ1gnKTsKICAgICAgaWYgKF9fYmFzZSA9PSAxMCkK
ICAgICAgICB7CiAgICAgICAgICBib29sIF9fZm91bmRfemVybyA9IGZhbHNlOwogICAgICAgICAg
d2hpbGUgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAg
ICAgX19mb3VuZF96ZXJvID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fZm91
bmRfemVybykKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tf
TV96ZXJvXTsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2Jhc2Vm
aWVsZCA9PSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoKF9fdHJh
aXRzX3R5cGU6OmVxKF9fYywgX194KQogICAgICAgICAgICAgICAgICAgICAgIHx8IF9fdHJhaXRz
X3R5cGU6OmVxKF9fYywgX19YKSkKICAgICAgICAgICAgICAgICAgICAgICYmIF9fYmVnICE9IF9f
ZW5kKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9feHRyYyAr
PSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgICAgICArK19f
cG9zOwogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAg
ICAgICAgICAgIF9fYmFzZSA9IDE2OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fYmFzZSA9IDg7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYmFzZSA9PSAxNikK
ICAgICAgICB7CiAgICAgICAgICBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYm
IF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX194dHJjICs9IF9T
X2F0b21zW19NX3plcm9dOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX19j
ID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywg
X194KSB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fWCkpCiAgICAgICAgICAgICAgICAgICYm
IF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3h0
cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgICAgICAgICArK19f
cG9zOwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CiAgICAgICAgfQoKCgogICAgICBzaXplX3QgX19sZW47CiAgICAgIGlm
IChfX2Jhc2UgPT0gMTYpCiAgICAgICAgX19sZW4gPSBfTV9zaXplOwogICAgICBlbHNlCiAgICAg
ICAgX19sZW4gPSBfX2Jhc2U7CgoKICAgICAgY2hhcl90eXBlIF9fd2F0b21zW19NX3NpemVdOwog
ICAgICBfX2N0eXBlLndpZGVuKF9TX2F0b21zLCBfU19hdG9tcyArIF9fbGVuLCBfX3dhdG9tcyk7
CiAgICAgIHN0cmluZyBfX2ZvdW5kX2dyb3VwaW5nOwogICAgICBjb25zdCBzdHJpbmcgX19ncm91
cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5nID0gX19n
cm91cGluZy5zaXplKCk7CiAgICAgIGludCBfX3NlcF9wb3MgPSAwOwogICAgICBjb25zdCBjaGFy
X3R5cGUgX19zZXAgPSBfX25wLnRob3VzYW5kc19zZXAoKTsKICAgICAgd2hpbGUgKF9fYmVnICE9
IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0gX190cmFp
dHNfdHlwZTo6ZmluZChfX3dhdG9tcywgX19sZW4sIF9fYyk7CgoKICAgICAgICAgIGlmIChfX3Ag
JiYgIV9fdHJhaXRzX3R5cGU6OmVxKF9fYywgY2hhcl90eXBlKCkpKQogICAgICAgICAgICB7Cgog
ICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107CiAgICAgICAg
ICAgICAgKytfX3BvczsKICAgICAgICAgICAgICArK19fc2VwX3BvczsKICAgICAgICAgICAgICBf
X2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3RyYWl0
c190eXBlOjplcShfX2MsIF9fc2VwKSAmJiBfX2NoZWNrX2dyb3VwaW5nKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICBpZiAoX19zZXBfcG9zKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bv
cyk7CiAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgIF9f
YyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp
dDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0KICAgICAgICAgIGVsc2UKCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCgoKICAgICAg
aWYgKF9fY2hlY2tfZ3JvdXBpbmcgJiYgX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAg
ewoKICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBf
cG9zKTsKICAgICAgICAgIGlmICghX192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19mb3Vu
ZF9ncm91cGluZykpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg
ICAgIH0KCgogICAgICBfX3h0cmMgKz0gY2hhcigpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQp
CiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwog
ICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAg
IF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90
eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdAogICAgewoKICAgICAgaWYg
KCEoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkpCiAgICAgICAgewoKCiAgICAg
ICAgICBzdHJpbmcgX194dHJjOwogICAgICAgICAgaW50IF9fYmFzZTsKICAgICAgICAgIF9fYmVn
ID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jh
c2UpOwoKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgICAgIF9fY29udmVydF90
b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAg
ICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX3VsIDw9IDEpCiAg
ICAgICAgICAgIF9fdiA9IF9fdWw7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZXJyIHw9
IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgogICAgICBlbHNlCiAgICAgICAgewogICAg
ICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgICAg
ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CgogICAgICAgICAg
bG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9D
aGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAg
ICAgIGNvbnN0IF9fc3RyaW5nX3R5cGUgX190cnVlID0gX19ucC50cnVlbmFtZSgpOwogICAgICAg
ICAgY29uc3QgX19zdHJpbmdfdHlwZSBfX2ZhbHNlID0gX19ucC5mYWxzZW5hbWUoKTsKICAgICAg
ICAgIGNvbnN0IGNoYXJfdHlwZSogX190cnVlcyA9IF9fdHJ1ZS5jX3N0cigpOwogICAgICAgICAg
Y29uc3QgY2hhcl90eXBlKiBfX2ZhbHNlcyA9IF9fZmFsc2UuY19zdHIoKTsKICAgICAgICAgIGNv
bnN0IHNpemVfdCBfX3RydWVuID0gX190cnVlLnNpemUoKSAtIDE7CiAgICAgICAgICBjb25zdCBz
aXplX3QgX19mYWxzZW4gPSBfX2ZhbHNlLnNpemUoKSAtIDE7CgogICAgICAgICAgZm9yIChzaXpl
X3QgX19uID0gMDsgX19iZWcgIT0gX19lbmQ7ICsrX19uKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZysrOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0
ZiA9IF9fbiA8PSBfX2ZhbHNlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX190cmFp
dHNfdHlwZTo6ZXEoX19jLCBfX2ZhbHNlc1tfX25dKSA6IGZhbHNlOwogICAgICAgICAgICAgIGJv
b2wgX190ZXN0dCA9IF9fbiA8PSBfX3RydWVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PyBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fdHJ1ZXNbX19uXSkgOiBmYWxzZTsKICAgICAgICAg
ICAgICBpZiAoIShfX3Rlc3RmIHx8IF9fdGVzdHQpKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZiAm
JiBfX24gPT0gX19mYWxzZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9f
diA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgIGVsc2UgaWYgKF9fdGVzdHQgJiYgX19uID09IF9fdHJ1ZW4pCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19iZWcgPT0gX19l
bmQpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgICAgfQogICAg
ICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Ogog
ICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p
bywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QK
ICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcg
PSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFz
ZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19j
X2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0
PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7
CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICB1bnNpZ25lZCBsb25nIF9f
dWw7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1Nf
Y19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQp
CiAgICAgICAgICAmJiBfX3VsIDw9IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4
KCkpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fdWwpOwogICAg
ICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBf
X2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
PgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChp
dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAg
IHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBf
TV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7
CiAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNf
c3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19l
cnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1p
dHM8dW5zaWduZWQgaW50Pjo6bWF4KCkpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls
Yml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQg
bG9uZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19i
YXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19l
cnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCks
IF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAg
ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf
SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlw
ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewogICAgICBz
dHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3Rf
aW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19j
b252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jh
c2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQg
bG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGlu
dCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lv
LCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19z
dHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2Jl
ZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRl
cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgIHsKICAgICAg
c3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9IF9N
X2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAgICAg
X19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlKTsK
ICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46
OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBj
b25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7
CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy
LCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2Vy
ciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8
X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAg
ICAgX194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19i
ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194
dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVn
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg
ICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJf
dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICB7CgogICAgICB0
eXBlZGVmIGlvc19iYXNlOjpmbXRmbGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQg
PSBfX2lvLmZsYWdzKCk7CiAgICAgIGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNo
b3dwb3MgfCBpb3NfYmFzZTo6YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBpb3NfYmFzZTo6dXBwZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5m
bGFncyhfX2ZtdCAmIF9fZm10bWFzayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3di
YXNlKSk7CgogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2Jl
ZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19i
YXNlKTsKCgogICAgICBfX2lvLmZsYWdzKF9fZm10KTsKCiAgICAgIHVuc2lnbmVkIGxvbmcgX191
bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19j
X2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkp
CiAgICAgICAgX192ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX191bCk7CiAgICAgIGVsc2UK
ICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwog
ICAgfQojIDYxOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICBfT3V0SXRlcgogICAgICBudW1fcHV0PF9DaGFy
VCwgX091dEl0ZXI+OjoKICAgICAgX01fY29udmVydF9mbG9hdChfT3V0SXRlciBfX3MsIGlvc19i
YXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAg
ICAgIF9WYWx1ZVQgX192KSBjb25zdAogICAgICB7CgoKCgoKCgogICAgICAgIGNvbnN0IGludCBf
X21heF9kaWdpdHMgPSBudW1lcmljX2xpbWl0czxfVmFsdWVUPjo6ZGlnaXRzMTAgKyAyOwogICAg
ICAgIHN0cmVhbXNpemUgX19wcmVjID0gX19pby5wcmVjaXNpb24oKTsKCiAgICAgICAgaWYgKF9f
cHJlYyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbWF4X2RpZ2l0cykpCiAgICAgICAgICBf
X3ByZWMgPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX21heF9kaWdpdHMpOwoKCiAgICAgICAg
Y2hhciBfX2ZidWZbMTZdOwoKCiAgICAgICAgaW50IF9fbGVuOwoKCgogICAgICAgIGludCBfX2Nz
X3NpemUgPSBfX21heF9kaWdpdHMgKiAzOwogICAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKCiAgICAgICAgY29uc3QgYm9v
bCBfX2ZwID0gX1NfZm9ybWF0X2Zsb2F0KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fcHJlYyk7CiAg
ICAgICAgaWYgKF9fZnApCiAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywg
X19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfU19jX2xvY2FsZSwgX19wcmVjKTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9f
Y29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwgX1NfY19sb2NhbGUp
OwoKCiAgICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKICAgICAgICAgIHsKICAgICAgICAg
ICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAgICBfX2NzID0gc3RhdGljX2Nhc3Q8
Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgICAgICAgIGlmIChfX2Zw
KQogICAgICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUs
IF9fZmJ1ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19j
X2xvY2FsZSwgX19wcmVjKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fbGVuID0g
X19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CiAgICAgICAgICB9CiMg
Njg2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgICAg
ICAgcmV0dXJuIF9NX3dpZGVuX2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBfX2NzLCBfX2xlbik7
CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4K
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgIF9PdXRJdGVyCiAgICAgIG51bV9w
dXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgICBfTV9jb252ZXJ0X2ludChfT3V0SXRlciBfX3Ms
IGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAg
ICAgICAgICBjaGFyIF9fbW9kbCwgX1ZhbHVlVCBfX3YpIGNvbnN0CiAgICAgIHsKCgoKICAgICAg
ICBjaGFyIF9fZmJ1ZlsxNl07CiAgICAgICAgX1NfZm9ybWF0X2ludChfX2lvLCBfX2ZidWYsIF9f
bW9kLCBfX21vZGwpOwoKCiAgICAgICAgaW50IF9fY3Nfc2l6ZSA9IDY0OwogICAgICAgIGNoYXIq
IF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsK
ICAgICAgICBpbnQgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19m
YnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2Fs
ZSk7CgogICAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCiAgICAgICAgICB7CiAgICAgICAg
ICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsgMTsKICAgICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0
PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgICAgICBfX2xlbiA9
IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKICAgICAgICAgIH0KCgoK
CgoKICAgICAgICByZXR1cm4gX01fd2lkZW5faW50KF9fcywgX19pbywgX19maWxsLCBfX2NzLCBf
X2xlbik7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9N
X3dpZGVuX2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGws
IGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CiAg
ICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwoKCiAgICAgIGNv
bnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFy
VD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX0No
YXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yo
X0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICogX19sZW4pKTsKCgogICAgICBfQ2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8
X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9fbGVuICogMikp
OwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CgoKICAgICAg
Y29uc3QgX0NoYXJUKiBfX3A7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1
c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgaWYgKF9fcCA9IF9fdHJh
aXRzX3R5cGU6OmZpbmQoX193cywgX19sZW4sIF9fY3R5cGUud2lkZW4oJy4nKSkpCiAgICAgICAg
X193c1tfX3AgLSBfX3dzXSA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOwoKCgoKICAgICAgY29uc3Qg
c3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGlvc19iYXNlOjpmbXRm
bGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAg
ICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hhclQqIF9f
cDI7CiAgICAgICAgICBpbnQgX19kZWNsZW4gPSBfX3AgPyBfX3AgLSBfX3dzIDogX19sZW47CiAg
ICAgICAgICBfX3AyID0gX19hZGRfZ3JvdXBpbmcoX193czIsIF9fbnAudGhvdXNhbmRzX3NlcCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3Vw
aW5nLnNpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dzLCBfX3dzICsg
X19kZWNsZW4pOwogICAgICAgICAgaW50IF9fbmV3bGVuID0gX19wMiAtIF9fd3MyOwoKCiAgICAg
ICAgICBpZiAoX19wKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX190cmFpdHNfdHlwZTo6
Y29weShfX3AyLCBfX3AsIF9fbGVuIC0gX19kZWNsZW4pOwogICAgICAgICAgICAgIF9fbmV3bGVu
ICs9IF9fbGVuIC0gX19kZWNsZW47CiAgICAgICAgICAgIH0KCgogICAgICAgICAgX193cyA9IF9f
d3MyOwogICAgICAgICAgX19sZW4gPSBfX25ld2xlbjsKICAgICAgICB9CgogICAgICByZXR1cm4g
X01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX3dzLCBfX2xlbik7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg
bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV93aWRlbl9pbnQoX091dEl0ZXIgX19z
LCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAg
ICAgICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CgoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0g
X19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9m
YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNf
Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbikp
OwoKCiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5f
YWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4gKiAyKSk7CiAgICAgIF9fY3R5cGUud2lk
ZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsKCgogICAgICBjb25zdCBudW1wdW5jdDxfQ2hh
clQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNv
bnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBjb25zdCBpb3Nf
YmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFz
ZWZpZWxkOwogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKCgoKCiAgICAg
ICAgICBzdHJlYW1zaXplIF9fb2ZmID0gMDsKICAgICAgICAgIGlmICgoX19pby5mbGFncygpICYg
aW9zX2Jhc2U6OnNob3diYXNlKSAmJiBfX2xlbiA+IDEpCiAgICAgICAgICAgIGlmIChfX2Jhc2Vm
aWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9f
b2ZmID0gMTsKICAgICAgICAgICAgICAgICpfX3dzMiA9ICpfX3dzOwogICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBfX29mZiA9IDI7CiAgICAgICAgICAgICAgICAqX193
czIgPSAqX193czsKICAgICAgICAgICAgICAgICooX193czIgKyAxKSA9ICooX193cyArIDEpOwog
ICAgICAgICAgICAgIH0KICAgICAgICAgIF9DaGFyVCogX19wOwogICAgICAgICAgX19wID0gX19h
ZGRfZ3JvdXBpbmcoX193czIgKyBfX29mZiwgX19ucC50aG91c2FuZHNfc2VwKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MgKyBfX29mZiwgX193cyArIF9fbGVu
KTsKICAgICAgICAgIF9fbGVuID0gX19wIC0gX193czI7CgogICAgICAgICAgX193cyA9IF9fd3My
OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193
cywgX19sZW4pOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAg
ICBfTV9pbnNlcnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwg
Y29uc3QgX0NoYXJUKiBfX3dzLAogICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsK
ICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgogICAgICBz
dHJlYW1zaXplIF9fdyA9IF9faW8ud2lkdGgoKTsKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRp
Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX3cp
KTsKICAgICAgaWYgKF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKICAgICAg
ICB7CiAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9fdHJhaXRzX3R5cGU+OjpfU19wYWQoX19pbywg
X19maWxsLCBfX3dzMiwgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3csIF9fbGVuLCB0cnVlKTsKICAgICAgICAgIF9fbGVuID0gc3RhdGljX2Nh
c3Q8aW50PihfX3cpOwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAgIF9f
aW8ud2lkdGgoMCk7CgoKCiAgICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19f
aiwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fd3NbX19qXTsKICAgICAgcmV0dXJuIF9fczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9P
dXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5
cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0
CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwog
ICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAgICAgIHsK
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAgICAgIF9fcyA9IF9NX2Nv
bnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScsIGNoYXIoKSwgX191dik7CiAgICAgICAg
fQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No
YXJUPiBfX3N0cmluZ190eXBlOwogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2Mo
KTsKICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVt
cHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIF9fc3RyaW5nX3R5cGUgX19uYW1lOwog
ICAgICAgICAgaWYgKF9fdikKICAgICAgICAgICAgX19uYW1lID0gX19ucC50cnVlbmFtZSgpOwog
ICAgICAgICAgZWxzZQogICAgICAgICAgICBfX25hbWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICAg
ICAgICAgX19zID0gX01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX25hbWUuY19zdHIoKSwg
X19uYW1lLnNpemUoKSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAg
IG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlv
c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0
dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAnZCcsIGNoYXIoKSwgX192KTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091
dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlw
ZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2ln
bmVkIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lv
LCBfX2ZpbGwsICd1JywgY2hhcigpLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBf
T3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJf
dHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0
X2ludChfX3MsIF9fYiwgX19maWxsLCAnZCcsICdsJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8
X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf
X2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3Yp
IGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3Un
LCAnbCcsIF9fdik7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091
dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBk
b19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRv
dWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywg
X19maWxsLCBjaGFyKCksIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+
OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f
ZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9j
b252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1f
cHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz
ZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNv
bnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygp
OwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwg
aW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
aW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxh
Z3MoX19mbGFncyAmIF9fZm10IHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2Up
KTsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgX19zID0gX01fY29udmVydF9pbnQoX19z
LCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICAgIF9faW8u
ZmxhZ3MoX19mbGFncyk7CiAgICAgICAgfQogICAgICBjYXRjaCAoLi4uKQogICAgICAgIHsKICAg
ICAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAg
ICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6
CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRs
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxv
bmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdAogICAgewogICAgICBzdHJpbmdfdHlwZSBfX3N0cjsK
ICAgICAgX19iZWcgPSB0aGlzLT5kb19nZXQoX19iZWcsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9f
ZXJyLCBfX3N0cik7CgogICAgICBjb25zdCBpbnQgX19uID0gbnVtZXJpY19saW1pdHM8bG9uZyBk
b3VibGU+OjpkaWdpdHMxMDsKICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihf
X2J1aWx0aW5fYWxsb2NhKF9fbikpOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdl
dGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0
eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IF9DaGFyVCogX193Y3MgPSBfX3N0ci5j
X3N0cigpOwogICAgICBfX2N0eXBlLm5hcnJvdyhfX3djcywgX193Y3MgKyBfX3N0ci5zaXplKCkg
KyAxLCBjaGFyKCksIF9fY3MpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX2NzLCBfX3VuaXRzLCBf
X2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7Cgog
ICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJULCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAg
IHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICB0
eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdHJp
bmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9
IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFj
ZXQ8X19tb25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBm
ID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0No
YXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKICAgICAg
Y29uc3QgbW9uZXlfYmFzZTo6cGF0dGVybiBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0
KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5u
ZWdfZm9ybWF0KCk7CgogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3Bvc19zaWduID1fX2ludGwg
PyBfX21wdC5wb3NpdGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogX19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICBjb25zdCBzdHJpbmdfdHlw
ZSBfX25lZ19zaWduID1fX2ludGwgPyBfX21wdC5uZWdhdGl2ZV9zaWduKCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwog
ICAgICBjb25zdCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50
KCk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5k
c19zZXAoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi50aG91
c2FuZHNfc2VwKCk7CgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9f
bXB0Lmdyb3VwaW5nKCkgOiBfX21wZi5ncm91cGluZygpOwoKCiAgICAgIHN0cmluZ190eXBlIF9f
c2lnbjsKCiAgICAgIHN0cmluZyBfX2dyb3VwaW5nX3RtcDsKCiAgICAgIGludCBfX3NlcF9wb3Mg
PSAwOwoKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CgogICAgICBib29sIF9fdGVzdGRl
Y2ZvdW5kID0gZmFsc2U7CgoKICAgICAgc3RyaW5nX3R5cGUgX190ZW1wX3VuaXRzOwoKICAgICAg
Y2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgY2hhcl90eXBlIF9fZW9mID0gc3RhdGljX2Nh
c3Q8Y2hhcl90eXBlPihjaGFyX3RyYWl0czxjaGFyX3R5cGU+Ojplb2YoKSk7CiAgICAgIGZvciAo
aW50IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IDQgJiYgX190ZXN0dmFsaWQ7ICsr
X19pKQogICAgICAgIHsKICAgICAgICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+
KF9fcC5maWVsZFtfX2ldKTsKICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAg
ICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAg
ICAgICAgICAgICB8fCBfX2kgPCAyIHx8IF9fc2lnbi5zaXplKCkgPiAxCiAgICAgICAgICAgICAg
ICAgICAgICB8fCAoKHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFszXSkgIT0gbW9uZXlfYmFz
ZTo6bm9uZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2kgPT0gMikpCiAgICAgICAg
ICAgICAgICAgICAgewoKCgoKCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlw
ZSBfX3N5bWJvbCA9IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5
bWJvbCgpOwogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zeW1ib2wu
c2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9faiA9IDA7CiAgICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmJiBfX2ogPCBfX2xlbiAmJiBfX3N5bWJvbFtfX2pdID09IF9fYykKICAgICAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2Jl
Zyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgKytfX2o7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCgogICAgICAgICAgICAgICAgICAgICAgaWYgKF9faiAhPSBfX2xlbiAmJiAoX19pby5m
bGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSkKICAgICAgICAgICAgICAgICAgICAgICAgX190
ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgoKICAgICAgICAg
ICAgICAgICAgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fbmVnX3NpZ24uc2l6ZSgpKQogICAg
ICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19wb3Nfc2ln
blswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19z
aWduID0gX19wb3Nfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVn
KTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChf
X2MgPT0gX19uZWdfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAg
X19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zX3NpZ24uc2l6
ZSgpICYmIF9fYyA9PSBfX3Bvc19zaWduWzBdKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fcG9zX3NpZ247CiAgICAgICAgICAgICAgICAgICAg
ICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoX19uZWdfc2lnbi5zaXplKCkgJiYgX19jID09IF9fbmVnX3NpZ25bMF0pCiAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19uZWdf
c2lnbjsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug
bW9uZXlfYmFzZTo6dmFsdWU6CgoKICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9f
ZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpk
aWdpdCwgX19jKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChfX2MgPT0gX19kICYm
ICFfX3Rlc3RkZWNmb3VuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0g
X19zZXApKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChf
X2MgPT0gX19kKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fdGVzdGRlY2ZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fc2VwKQogICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6
ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVz
dHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3RlbXBfdW5pdHMgKz0gX19jOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNl
OgogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpub25lOgoKICAgICAgICAgICAgICAg
ICAgaWYgKF9faSAhPSAzKQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2Vu
ZAogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNw
YWNlLCBfX2MpKQogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICAgIGlm
IChfX3NpZ24uc2l6ZSgpID4gMSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4g
PSBfX3NpZ24uc2l6ZSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9faSA9IDE7CiAgICAgICAgICBm
b3IgKDsgX19jICE9IF9fZW9mICYmIF9faSA8IF9fbGVuOyArK19faSkKICAgICAgICAgICAgd2hp
bGUgKF9fYmVnICE9IF9fZW5kICYmIF9fYyAhPSBfX3NpZ25bX19pXSkKICAgICAgICAgICAgICBf
X2MgPSAqKCsrX19iZWcpOwoKICAgICAgICAgIGlmIChfX2kgIT0gX19sZW4pCiAgICAgICAgICAg
IF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIHdoaWxlIChfX3RlbXBfdW5p
dHNbMF0gPT0gX19jdHlwZS53aWRlbignMCcpKQogICAgICAgIF9fdGVtcF91bml0cy5lcmFzZShf
X3RlbXBfdW5pdHMuYmVnaW4oKSk7CgogICAgICBpZiAoX19zaWduLnNpemUoKSAmJiBfX3NpZ24g
PT0gX19uZWdfc2lnbikKICAgICAgICBfX3RlbXBfdW5pdHMuaW5zZXJ0KF9fdGVtcF91bml0cy5i
ZWdpbigpLCBfX2N0eXBlLndpZGVuKCctJykpOwoKCiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUo
KSAmJiBfX2dyb3VwaW5nX3RtcC5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3Zl
cmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2dyb3VwaW5nX3RtcCkpCiAgICAgICAgICAgIF9f
dGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAg
ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKCgogICAgICBpZiAoIV9fdGVzdHZhbGlk
IHx8ICFfX3RlbXBfdW5pdHMuc2l6ZSgpKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls
Yml0OwogICAgICBlbHNlCgogICAgICAgIF9fdGVtcF91bml0cy5zd2FwKF9fdW5pdHMpOwoKICAg
ICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVy
Pjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lv
LCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0
CiAgICB7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNv
bnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f
bG9jKTsKCgogICAgICBpbnQgX19jc19zaXplID0gNjQ7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0
aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgaW50IF9f
bGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsICIlLjAxTGYiLCBfX3VuaXRz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAg
IGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19jc19zaXplID0g
X19sZW4gKyAxOwogICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5f
YWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9f
Y3MsIF9fY3Nfc2l6ZSwgIiUuMDFMZiIsIF9fdW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1NfY19sb2NhbGUpOwogICAgICAgIH0KCgoKCgoKCiAgICAgIF9DaGFyVCog
X193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFy
VCkgKiBfX2NzX3NpemUpKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4s
IF9fd3MpOwogICAgICBzdHJpbmdfdHlwZSBfX2RpZ2l0cyhfX3dzKTsKICAgICAgcmV0dXJuIHRo
aXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRl
cgogICAgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUg
X19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAg
ICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBl
ZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9f
aW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3dpZHRoID0gc3RhdGljX2Nhc3Q8
c2l6ZV90eXBlPihfX2lvLndpZHRoKCkpOwoKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hh
clQsIHRydWU+IF9fbW9uZXlfdHJ1ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwg
ZmFsc2U+IF9fbW9uZXlfZmFsc2U7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1
c2VfZmFjZXQ8X19tb25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2Um
IF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5
cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoK
CgogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fYmVnID0gX19kaWdpdHMuZGF0YSgpOwogICAgICBj
b25zdCBjaGFyX3R5cGUqIF9fZW5kID0gX19iZWcgKyBfX2RpZ2l0cy5zaXplKCk7CiAgICAgIG1v
bmV5X2Jhc2U6OnBhdHRlcm4gX19wOwogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247CiAgICAgIGlm
ICgqX19iZWcgIT0gX19jdHlwZS53aWRlbignLScpKQogICAgICAgIHsKICAgICAgICAgIF9fcCA9
IF9faW50bCA/IF9fbXB0LnBvc19mb3JtYXQoKSA6IF9fbXBmLnBvc19mb3JtYXQoKTsKICAgICAg
ICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQucG9zaXRpdmVfc2lnbigpIDogX19tcGYucG9zaXRp
dmVfc2lnbigpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9fcCA9
IF9faW50bCA/IF9fbXB0Lm5lZ19mb3JtYXQoKSA6IF9fbXBmLm5lZ19mb3JtYXQoKTsKICAgICAg
ICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpIDogX19tcGYubmVnYXRp
dmVfc2lnbigpOwogICAgICAgICAgKytfX2JlZzsKICAgICAgICB9CgoKICAgICAgX19lbmQgPSBf
X2N0eXBlLnNjYW5fbm90KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2JlZywgX19lbmQpOwogICAgICBp
ZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewoKCgogICAgICAgICAgc3RyaW5nX3R5cGUgX19y
ZXM7CiAgICAgICAgICBzdHJpbmdfdHlwZSBfX3ZhbHVlOwogICAgICAgICAgY29uc3Qgc3RyaW5n
X3R5cGUgX19zeW1ib2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmN1cnJfc3ltYm9sKCk7
CgoKICAgICAgICAgIGNvbnN0IGludCBfX2ZyYWMgPSBfX2ludGwgPyBfX21wdC5mcmFjX2RpZ2l0
cygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZnJhY19kaWdp
dHMoKTsKICAgICAgICAgIGlmIChfX2ZyYWMgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgY29uc3QgY2hhcl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFs
X3BvaW50KCk7CiAgICAgICAgICAgICAgaWYgKF9fZW5kIC0gX19iZWcgPj0gX19mcmFjKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19l
bmQgLSBfX2ZyYWMsIF9fZW5kKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192
YWx1ZS5iZWdpbigpLCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2VuZCAtPSBfX2ZyYWM7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAg
ICAgICAgICAgICAgICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCk7CiAgICAg
ICAgICAgICAgICAgIGludCBfX3BhZGRlYyA9IF9fZnJhYyAtIChfX2VuZCAtIF9fYmVnKTsKICAg
ICAgICAgICAgICAgICAgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAnKTsKICAg
ICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX3BhZGRlYywg
X196ZXJvKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigp
LCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2JlZyA9IF9fZW5kOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CgoKCiAgICAgICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9f
bXB0Lmdyb3VwaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IF9fbXBmLmdyb3VwaW5nKCk7CiAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6
ZSgpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUg
X19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3NlcCgpOwog
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2diZWcgPSBfX2dyb3VwaW5nLmNfc3RyKCk7
CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2VuZCA9IF9fZ2JlZyArIF9fZ3JvdXBp
bmcuc2l6ZSgpOwogICAgICAgICAgICAgICAgICBjb25zdCBpbnQgX19uID0gKF9fZW5kIC0gX19i
ZWcpICogMjsKICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzMiA9CiAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJU
KSAqIF9fbikpOwogICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fd3NfZW5kID0gX19hZGRfZ3Jv
dXBpbmcoX193czIsIF9fc2VwLCBfX2diZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2dlbmQsIF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAg
ICAgICAgIF9fdmFsdWUuaW5zZXJ0KDAsIF9fd3MyLCBfX3dzX2VuZCAtIF9fd3MyKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3ZhbHVlLmlu
c2VydCgwLCBzdHJpbmdfdHlwZShfX2JlZywgX19lbmQpKTsKICAgICAgICAgICAgfQoKCiAgICAg
ICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFk
anVzdGZpZWxkOwogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX192YWx1ZS5zaXplKCkgKyBf
X3NpZ24uc2l6ZSgpOwogICAgICAgICAgX19sZW4gKz0gKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNl
OjpzaG93YmFzZSkgPyBfX3N5bWJvbC5zaXplKCkgOiAwOwogICAgICAgICAgYm9vbCBfX3Rlc3Rp
cGFkID0gX19mID09IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX2xlbiA8IF9fd2lkdGg7CgoKICAg
ICAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDQ7ICsrX19pKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgcGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19f
aV0pOwogICAgICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBp
ZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICAgICAgICAg
IF9fcmVzICs9IF9fc3ltYm9sOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fc2ln
bi5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19zaWduWzBdOwogICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6
CiAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fdmFsdWU7CiAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKCgoKICAgICAgICAg
ICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3Ry
aW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19jdHlwZS53aWRlbihfX2ZpbGwpOwogICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9u
ZToKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAg
X19yZXMgKz0gc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCiAgICAgICAg
ICBpZiAoX19zaWduLnNpemUoKSA+IDEpCiAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBl
KF9fc2lnbi5iZWdpbigpICsgMSwgX19zaWduLmVuZCgpKTsKCgogICAgICAgICAgX19sZW4gPSBf
X3Jlcy5zaXplKCk7CiAgICAgICAgICBpZiAoX193aWR0aCA+IF9fbGVuKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaWYgKF9fZiA9PSBpb3NfYmFzZTo6bGVmdCkKCiAgICAgICAgICAgICAg
ICBfX3Jlcy5hcHBlbmQoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgIGVs
c2UKCiAgICAgICAgICAgICAgICBfX3Jlcy5pbnNlcnQoMCwgc3RyaW5nX3R5cGUoX193aWR0aCAt
IF9fbGVuLCBfX2ZpbGwpKTsKICAgICAgICAgICAgICBfX2xlbiA9IF9fd2lkdGg7CiAgICAgICAg
ICAgIH0KCgogICAgICAgICAgZm9yIChzaXplX3R5cGUgX19qID0gMDsgX19qIDwgX19sZW47ICsr
X19qLCArK19fcykKICAgICAgICAgICAgKl9fcyA9IF9fcmVzW19fal07CiAgICAgICAgfQogICAg
ICBfX2lvLndpZHRoKDApOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdGltZV9iYXNlOjpkYXRlb3Jk
ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmRvX2RhdGVfb3JkZXIoKSBjb25zdAog
ICAgeyByZXR1cm4gdGltZV9iYXNlOjpub19vcmRlcjsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9J
bkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVy
X3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9DaGFyVCogX19mb3JtYXQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xv
YyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAg
PSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5
cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwog
ICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19mb3JtYXQp
OwoKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19s
ZW4gJiYgIV9fZXJyOyArK19faSkKICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fZm9y
bWF0W19faV07CiAgICAgICAgICBpZiAoX19jID09ICclJykKICAgICAgICAgICAgewoKICAgICAg
ICAgICAgICBfX2MgPSBfX2Zvcm1hdFsrK19faV07CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9
IDA7CiAgICAgICAgICAgICAgaW50IF9fbWVtID0gMDsKICAgICAgICAgICAgICBpZiAoX19jID09
ICdFJyB8fCBfX2MgPT0gJ08nKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBf
X21vZCA9IF9fYzsKICAgICAgICAgICAgICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgIHN3aXRjaCAoX19jKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2NzOwogICAgICAgICAgICAgICAgICBf
Q2hhclQgX193Y3NbMTBdOwogICAgICAgICAgICAgICAgY2FzZSAnYSc6CgogICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5czFbN107CiAgICAgICAgICAgICAgICAgIF9fdHAu
X01fZGF5c19hYmJyZXZpYXRlZChfX2RheXMxKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFj
dF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fd2RheSwgX19kYXlzMSwgNywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICBjYXNlICdBJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJf
dHlwZSogX19kYXlzMls3XTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXlzKF9fZGF5czIp
OwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50
bV93ZGF5LCBfX2RheXMyLCA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19l
cnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgog
ICAgICAgICAgICAgICAgY2FzZSAnYic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5
cGUqIF9fbW9udGhzMVsxMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJl
dmlhdGVkKF9fbW9udGhzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2Jl
ZywgX19lbmQsIF9fdG0tPnRtX21vbiwgX19tb250aHMxLCAxMiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICBjYXNlICdCJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19t
b250aHMyWzEyXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMyKTsK
ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1f
bW9uLCBfX21vbnRoczIsIDEyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19l
cnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgoK
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2R0WzJdOwogICAgICAgICAgICAg
ICAgICBfX3RwLl9NX2RhdGVfdGltZV9mb3JtYXRzKF9fZHQpOwogICAgICAgICAgICAgICAgICBf
TV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZHRbMF0pOwogICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgoKICAgICAgICAgICAgICAg
ICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5LCAxLCAzMSwgMiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0QnOgoKICAgICAgICAgICAg
ICAgICAgX19jcyA9ICIlbS8lZC8leSI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4o
X19jcywgX19jcyArIDksIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFf
Zm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgY2FzZSAnSCc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251
bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgY2FzZSAnSSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0
X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDEsIDEyLCAyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRy
YWN0X251bShfX2JlZywgX19lbmQsIF9fbWVtLCAxLCAxMiwgMiwgX19jdHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBpZiAoIV9f
ZXJyKQogICAgICAgICAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fbWVtIC0gMTsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdNJzoKCiAgICAgICAgICAg
ICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWluLCAwLCA1OSwg
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAg
ICAgICAgICBpZiAoX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXG4nKQogICAgICAgICAg
ICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICBjYXNlICdSJzoKCiAgICAgICAgICAgICAgICAgIF9fY3MgPSAiJUg6
JU0iOwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA2LCBfX3dj
cyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug
J1MnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3Rt
LT50bV9zZWMsIDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0
eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz
ZSAndCc6CiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09
ICdcdCcpCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnVCc6CgogICAgICAgICAgICAgICAg
ICBfX2NzID0gIiVIOiVNOiVTIjsKICAgICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2Nz
LCBfX2NzICsgOSwgX193Y3MpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3Jt
YXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICBjYXNlICd4JzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X19kYXRlc1syXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXRlX2Zvcm1hdHMoX19kYXRl
cyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19kYXRlc1swXSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
Y2FzZSAnWCc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdGltZXNbMl07
CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fdGltZV9mb3JtYXRzKF9fdGltZXMpOwogICAgICAg
ICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vy
ciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGltZXNb
MF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3knOgoK
ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV95
ZWFyLCAwLCA5OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwg
X19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1kn
OgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwg
MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCksIDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJy
KTsKICAgICAgICAgICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgICAgICAgICBfX3Rt
LT50bV95ZWFyID0gX19tZW0gLSAxOTAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgIGNhc2UgJ1onOgoKICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUuaXMoY3R5
cGVfYmFzZTo6dXBwZXIsICpfX2JlZykpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fdG1wOwogICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9u
YW1lKF9fYmVnLCBfX2VuZCwgX190bXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDE0LCBfX2Vycik7CgoKICAgICAgICAgICAgICAgICAgICAg
IGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9fZXJy
ICYmIF9fdG1wID09IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jID09IF9fY3R5
cGUud2lkZW4oJy0nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19j
dHlwZS53aWRlbignKycpKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDIzLCAy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vy
cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5k
LCBfX3RtcCwgMCwgNTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgoKICAgICAgICAgICAgICAg
ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7Cgog
ICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkpCiAg
ICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAg
fQogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
SW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9l
eHRyYWN0X251bShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVt
YmVyLAogICAgICAgICAgICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xl
biwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAg
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAg
IHNpemVfdCBfX2kgPSAwOwogICAgICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIGJvb2wgX190ZXN0
dmFsaWQgPSB0cnVlOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICB3aGlsZSAo
X19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4KICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMo
Y3R5cGVfYmFzZTo6ZGlnaXQsIF9fYykpCiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMgKz0g
X19jdHlwZS5uYXJyb3coX19jLCAwKTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAg
ICAgICArK19faTsKICAgICAgICB9CiAgICAgIGlmIChfX2kgPT0gX19sZW4pCiAgICAgICAgewog
ICAgICAgICAgaW50IF9fdmFsdWUgPSBhdG9pKF9fZGlnaXRzLmNfc3RyKCkpOwogICAgICAgICAg
aWYgKF9fbWluIDw9IF9fdmFsdWUgJiYgX192YWx1ZSA8PSBfX21heCkKICAgICAgICAgICAgX19t
ZW1iZXIgPSBfX3ZhbHVlOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9
IGZhbHNlOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7
CiAgICAgIGlmICghX190ZXN0dmFsaWQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi
aXQ7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
PgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0
X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwK
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRl
eGxlbiwKICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0
CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwog
ICAgICBpbnQqIF9fbWF0Y2hlcyA9IHN0YXRpY19jYXN0PGludCo+KF9fYnVpbHRpbl9hbGxvY2Eo
c2l6ZW9mKGludCkgKiBfX2luZGV4bGVuKSk7CiAgICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsK
ICAgICAgc2l6ZV90IF9fcG9zID0gMDsKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAg
ICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2Jl
ZzsKCiAgICAgIGZvciAoc2l6ZV90IF9faTEgPSAwOyBfX2kxIDwgX19pbmRleGxlbjsgKytfX2kx
KQogICAgICAgIGlmIChfX2MgPT0gX19uYW1lc1tfX2kxXVswXSkKICAgICAgICAgIF9fbWF0Y2hl
c1tfX25tYXRjaGVzKytdID0gX19pMTsKCiAgICAgIHdoaWxlKF9fbm1hdGNoZXMgPiAxKQogICAg
ICAgIHsKCiAgICAgICAgICBzaXplX3QgX19taW5sZW4gPSAxMDsKICAgICAgICAgIGZvciAoc2l6
ZV90IF9faTIgPSAwOyBfX2kyIDwgX19ubWF0Y2hlczsgKytfX2kyKQogICAgICAgICAgICBfX21p
bmxlbiA9IG1pbihfX21pbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cmFpdHNf
dHlwZTo6bGVuZ3RoKF9fbmFtZXNbX19tYXRjaGVzW19faTJdXSkpOwoKICAgICAgICAgIGlmIChf
X3BvcyA8IF9fbWlubGVuICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IF9faTMgPSAwOyBfX2kzIDwgX19ubWF0Y2hlczsgKytfX2kzKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hl
c1tfX2kzXV07CiAgICAgICAgICAgICAgICAgIGlmIChfX25hbWVbX19wb3NdICE9IF9fYykKICAg
ICAgICAgICAgICAgICAgICBfX21hdGNoZXNbX19pM10gPSBfX21hdGNoZXNbLS1fX25tYXRjaGVz
XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAg
ICAgICBicmVhazsKICAgICAgICB9CgogICAgICBpZiAoX19ubWF0Y2hlcyA9PSAxKQogICAgICAg
IHsKCiAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1swXV07CiAgICAgICAgICBj
b25zdCBzaXplX3QgX19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAg
ICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kICYmIF9fbmFtZVtfX3Bv
c10gPT0gKl9fYmVnKQogICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwoKICAgICAgICAgIGlm
IChfX2xlbiA9PSBfX3BvcykKICAgICAgICAgICAgX19tZW1iZXIgPSBfX21hdGNoZXNbMF07CiAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQog
ICAgICBlbHNlCiAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2
YWxpZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGlt
ZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcs
IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193
Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJVgiOwogICAgICBsb2NhbGUgX19sb2Mg
PSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNl
X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywg
X19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQog
ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu
SXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfZGF0ZShpdGVy
X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAg
ICBfQ2hhclQgX193Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJXgiOwogICAgICBs
b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBf
X2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUu
d2lkZW4oX19jcywgX19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0
KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVn
ID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVy
biBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19n
ZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3Rt
KSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNf
dHlwZTsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVu
Y3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4o
X19sb2MpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5c1s3XTsKICAgICAgX190cC5fTV9k
YXlzX2FiYnJldmlhdGVkKF9fZGF5cyk7CiAgICAgIGludCBfX3RtcHdkYXk7CiAgICAgIF9NX2V4
dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1wd2RheSwgX19kYXlzLCA3LCBfX2Vycik7CgoK
CgoKCgogICAgICBpZiAoIV9fZXJyKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3BvcyA9
IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX2RheXNbX190bXB3ZGF5XSk7CiAgICAgICAgICBfX3Rw
Ll9NX2RheXMoX19kYXlzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19k
YXlzW19fdG1wd2RheV07CiAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAg
ICAgICAgICAgIHsKCiAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNf
dHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4g
JiYgX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9
PSAqX19iZWcpCiAgICAgICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAg
IGlmIChfX2xlbiAhPSBfX3BvcykKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm
YWlsYml0OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBf
X3RtLT50bV93ZGF5ID0gX190bXB3ZGF5OwogICAgICAgIH0KICAgICAgaWYgKF9fYmVnID09IF9f
ZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2Jl
ZzsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X21v
bnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAg
ICAgICAgaW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0p
IGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190
eXBlOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBfX3RpbWVwdW5j
dDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihf
X2xvYyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHNbMTJdOwogICAgICBfX3RwLl9N
X21vbnRoc19hYmJyZXZpYXRlZChfX21vbnRocyk7CiAgICAgIGludCBfX3RtcG1vbjsKICAgICAg
X01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXBtb24sIF9fbW9udGhzLCAxMiwgX19l
cnIpOwoKCgoKCgoKICAgICAgaWYgKCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3Qg
X19wb3MgPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19tb250aHNbX190bXBtb25dKTsKICAgICAg
ICAgIF9fdHAuX01fbW9udGhzKF9fbW9udGhzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X19uYW1lID0gX19tb250aHNbX190bXBtb25dOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10g
PT0gKl9fYmVnKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xl
biA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChf
X3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9f
bmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsK
ICAgICAgICAgICAgICBpZiAoX19sZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8
PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikK
ICAgICAgICAgICAgX190bS0+dG1fbW9uID0gX190bXBtb247CiAgICAgICAgfQoKICAgICAgaWYg
KF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAg
IHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg
ICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3Rt
KSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBj
b25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf
X2xvYyk7CgogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBzaXplX3QgX19pID0g
MDsKICAgICAgc3RyaW5nIF9fZGlnaXRzOwogICAgICB3aGlsZSAoX19pIDwgNCAmJiBfX2JlZyAh
PSBfX2VuZCAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsK
ICAgICAgICAgIF9fZGlnaXRzICs9IF9fY3R5cGUubmFycm93KF9fYywgMCk7CiAgICAgICAgICBf
X2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgKytfX2k7CiAgICAgICAgfQogICAgICBpZiAoX19p
ID09IDIgfHwgX19pID09IDQpCiAgICAgICAgewogICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAg
ICBfX2NvbnZlcnRfdG9fdihfX2RpZ2l0cy5jX3N0cigpLCBfX2wsIF9fZXJyLCBfU19jX2xvY2Fs
ZSk7CiAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX2wgPD0g
MjE0NzQ4MzY0NykKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbCA9IF9faSA9PSAyID8g
X19sIDogX19sIC0gMTkwMDsKICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gc3RhdGljX2Nh
c3Q8aW50PihfX2wpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg
X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAg
ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0
SXRlcgogICAgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgcHV0KGl0ZXJfdHlwZSBf
X3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgIGNv
bnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0CiAgICB7CiAgICAg
IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3Qm
IF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgd2hpbGUg
KF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgX19jID0gX19jdHlwZS5u
YXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICBpZiAoX19jID09
ICclJykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQ7CiAgICAgICAg
ICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gMTsKICAg
ICAgICAgICAgICBfX2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgICAg
ICsrX19iZWc7CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19tb2QgPSBfX2M7CiAgICAgICAgICAg
ICAgICAgIF9fZm9ybWF0ID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAg
ICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICBfX2Zvcm1hdCA9IF9fYzsKICAgICAgICAgICAgICBfX3MgPSB0aGlzLT5kb19w
dXQoX19zLCBfX2lvLCBjaGFyX3R5cGUoKSwgX190bSwgX19mb3JtYXQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9fcyA9IF9fYzsKICAgICAgICAgICAgICArK19f
czsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAg
ICB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg
aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICAgY2hh
ciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0g
X19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9m
YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNv
bnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKCiAg
ICAgIGNvbnN0IHNpemVfdCBfX21heGxlbiA9IDY0OwogICAgICBjaGFyX3R5cGUqIF9fcmVzID0K
ICAgICAgICBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihj
aGFyX3R5cGUpICogX19tYXhsZW4pKTsKCgoKCgoKICAgICAgY2hhcl90eXBlIF9fZm10WzRdOwog
ICAgICBfX2ZtdFswXSA9IF9fY3R5cGUud2lkZW4oJyUnKTsKICAgICAgaWYgKCFfX21vZCkKICAg
ICAgICB7CiAgICAgICAgICBfX2ZtdFsxXSA9IF9fZm9ybWF0OwogICAgICAgICAgX19mbXRbMl0g
PSBjaGFyX3R5cGUoKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBf
X2ZtdFsxXSA9IF9fbW9kOwogICAgICAgICAgX19mbXRbMl0gPSBfX2Zvcm1hdDsKICAgICAgICAg
IF9fZm10WzNdID0gY2hhcl90eXBlKCk7CiAgICAgICAgfQoKICAgICAgX190cC5fTV9wdXQoX19y
ZXMsIF9fbWF4bGVuLCBfX2ZtdCwgX190bSk7CgoKICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90
cmFpdHM8Y2hhcl90eXBlPjo6bGVuZ3RoKF9fcmVzKTsKICAgICAgZm9yIChzaXplX3QgX19pID0g
MDsgX19pIDwgX19sZW47ICsrX19pLCArK19fcykKICAgICAgICAqX19zID0gX19yZXNbX19pXTsK
ICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBpbnQKICAgIGNvbGxhdGU8X0NoYXJUPjo6X01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25z
dCBfQ2hhclQqKSBjb25zdAogICAgeyByZXR1cm4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgc2l6ZV90CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hh
clQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAg
IGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAg
ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29u
c3QKICAgIHsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19vbmUoX19sbzEsIF9faGkxKTsKICAg
ICAgY29uc3Qgc3RyaW5nX3R5cGUgX190d28oX19sbzIsIF9faGkyKTsKICAgICAgcmV0dXJuIF9N
X2NvbXBhcmUoX19vbmUuY19zdHIoKSwgX190d28uY19zdHIoKSk7CiAgICB9CgogdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgY29sbGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlw
ZQogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9f
bG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9fbGVuID0g
KF9faGkgLSBfX2xvKSAqIDI7CgogICAgICBfQ2hhclQqIF9fYyA9CiAgICAgICAgc3RhdGljX2Nh
c3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbGVuKSk7CiAg
ICAgIHNpemVfdCBfX3JlcyA9IF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fbGVuKTsKCiAgICAg
IGlmIChfX3JlcyA+PSBfX2xlbikKICAgICAgICB7CiAgICAgICAgICBfX2MgPQogICAgICAgICAg
ICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICog
KF9fcmVzICsgMSkpKTsKICAgICAgICAgIF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fcmVzICsg
MSk7CiAgICAgICAgfQogICAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19jKTsKICAgIH0KCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb25nCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAg
ZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAg
IHsKICAgICAgdW5zaWduZWQgbG9uZyBfX3ZhbCA9IDA7CiAgICAgIGZvciAoOyBfX2xvIDwgX19o
aTsgKytfX2xvKQogICAgICAgIF9fdmFsID0gKl9fbG8gKyAoKF9fdmFsIDw8IDcpIHwKICAgICAg
ICAgICAgICAgICAgICAgICAoX192YWwgPj4gKG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+
OjpkaWdpdHMgLSA3KSkpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oX192YWwpOwog
ICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICB2b2lkCiAgICBfX2NvbnZlcnRf
dG9fdihjb25zdCBjaGFyKiBfX2luLCBfVHYmIF9fb3V0LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX2Jh
c2UgPSAxMCk7CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KICAgIGludAogICAgX19jb252
ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwgY29uc3QgaW50IF9fc2l6ZSwgY29uc3QgY2hhciogX19m
bXQsCiAgICAgICAgICAgICAgICAgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQg
X19wcmVjID0gLTEpOwojIDE5OTUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2Zh
Y2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBzdHJ1Y3QgX19wYWQKICAgIHsKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfcGFkKGlv
c19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBfQ2hhclQqIF9fbmV3cywKICAgICAgICAgICAg
IGNvbnN0IF9DaGFyVCogX19vbGRzLCBjb25zdCBzdHJlYW1zaXplIF9fbmV3bGVuLAogICAgICAg
ICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbiwgY29uc3QgYm9vbCBfX251bSk7CiAgICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lk
CiAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoaW9zX2Jhc2UmIF9faW8sIF9DaGFy
VCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX25l
d3MsIGNvbnN0IF9DaGFyVCogX19vbGRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbiwgY29uc3QgYm9vbCBfX251bSkKICAg
IHsKICAgICAgc2l6ZV90IF9fcGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXdsZW4gLSBf
X29sZGxlbik7CiAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19i
dWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fcGxlbikpOwogICAgICBfVHJhaXRzOjph
c3NpZ24oX19wYWRzLCBfX3BsZW4sIF9fZmlsbCk7CgogICAgICBfQ2hhclQqIF9fYmVnOwogICAg
ICBfQ2hhclQqIF9fZW5kOwogICAgICBzaXplX3QgX19tb2QgPSAwOwogICAgICBzaXplX3QgX19i
ZWdsZW47CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2FkanVzdCA9IF9faW8uZmxhZ3MoKSAm
IGlvc19iYXNlOjphZGp1c3RmaWVsZDsKCiAgICAgIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6
bGVmdCkKICAgICAgICB7CgogICAgICAgICAgX19iZWcgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9f
b2xkcyk7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVuOwogICAgICAgICAgX19lbmQgPSBf
X3BhZHM7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6aW50
ZXJuYWwgJiYgX19udW0pCiAgICAgICAgewoKCgogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19p
by5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2Vf
ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCBfX21p
bnVzID0gX19jdHlwZS53aWRlbignLScpOwogICAgICAgICAgY29uc3QgX0NoYXJUIF9fcGx1cyA9
IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgICAgIGJvb2wgX190ZXN0c2lnbiA9IF9UcmFpdHM6
OmVxKF9fb2xkc1swXSwgX19taW51cykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9U
cmFpdHM6OmVxKF9fb2xkc1swXSwgX19wbHVzKTsKCiAgICAgICAgICBib29sIF9fdGVzdGhleCA9
IF9UcmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJzAnKSwgX19vbGRzWzBdKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiAoX1RyYWl0czo6ZXEoX19jdHlwZS53aWRlbigneCcpLCBfX29sZHNb
MV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfVHJhaXRzOjplcShfX2N0eXBl
LndpZGVuKCdYJyksIF9fb2xkc1sxXSkpOwogICAgICAgICAgaWYgKF9fdGVzdGhleCkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIF9fbmV3c1swXSA9IF9fb2xkc1swXTsKICAgICAgICAgICAg
ICBfX25ld3NbMV0gPSBfX29sZHNbMV07CiAgICAgICAgICAgICAgX19tb2QgKz0gMjsKICAgICAg
ICAgICAgICBfX25ld3MgKz0gMjsKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAg
ICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nh
c3Q8X0NoYXJUKj4oX19vbGRzICsgX19tb2QpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNl
IGlmIChfX3Rlc3RzaWduKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX1RyYWl0czo6ZXEo
KF9fbmV3c1swXSA9IF9fb2xkc1swXSksIF9fcGx1cykgPyBfX3BsdXMgOiBfX21pbnVzOwogICAg
ICAgICAgICAgICsrX19tb2Q7CiAgICAgICAgICAgICAgKytfX25ld3M7CiAgICAgICAgICAgICAg
X19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAg
ICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9fYmVn
ID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAg
IF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMpOwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAg
ICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0No
YXJUKj4oX19vbGRzKTsKICAgICAgICB9CiAgICAgIF9UcmFpdHM6OmNvcHkoX19uZXdzLCBfX2Jl
ZywgX19iZWdsZW4pOwogICAgICBfVHJhaXRzOjpjb3B5KF9fbmV3cyArIF9fYmVnbGVuLCBfX2Vu
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld2xlbiAtIF9fYmVnbGVuIC0gX19tb2Qp
OwogICAgfQojIDIwOTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50
Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBib29sCiAgICBfX3ZlcmlmeV9n
cm91cGluZyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiYgX19ncm91cGluZywKICAgICAgICAg
ICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBfX2dyb3VwaW5nX3RtcCkKICAgIHsK
ICAgICAgaW50IF9faSA9IDA7CiAgICAgIGludCBfX2ogPSAwOwogICAgICBjb25zdCBpbnQgX19s
ZW4gPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgY29uc3QgaW50IF9fbiA9IF9fZ3JvdXBpbmdf
dG1wLnNpemUoKTsKICAgICAgYm9vbCBfX3Rlc3QgPSB0cnVlOwoKCgoKICAgICAgd2hpbGUgKF9f
dGVzdCAmJiBfX2kgPCBfX24gLSAxKQogICAgICAgIGZvciAoX19qID0gMDsgX190ZXN0ICYmIF9f
aiA8IF9fbGVuICYmIF9faSA8IF9fbiAtIDE7ICsrX19qLCsrX19pKQogICAgICAgICAgX190ZXN0
ICY9IF9fZ3JvdXBpbmdbX19qXSA9PSBfX2dyb3VwaW5nX3RtcFtfX24gLSBfX2kgLSAxXTsKCgog
ICAgICBfX2ogPT0gX19sZW4gPyBfX2ogPSAwIDogX19qOwogICAgICBfX3Rlc3QgJj0gX19ncm91
cGluZ1tfX2pdID49IF9fZ3JvdXBpbmdfdG1wW19fbiAtIF9faSAtIDFdOwogICAgICByZXR1cm4g
X190ZXN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFy
VCoKICAgIF9fYWRkX2dyb3VwaW5nKF9DaGFyVCogX19zLCBfQ2hhclQgX19zZXAsCiAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBfX2diZWcsIGNvbnN0IGNoYXIqIF9fZ2VuZCwKICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19maXJzdCwgY29uc3QgX0NoYXJUKiBfX2xhc3Qp
CiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gKl9fZ2JlZykKICAgICAgICB7CiAg
ICAgICAgICBfX3MgPSBfX2FkZF9ncm91cGluZyhfX3MsIF9fc2VwLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKF9fZ2JlZyArIDEgPT0gX19nZW5kID8gX19nYmVnIDogX19nYmVnICsg
MSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dlbmQsIF9fZmlyc3QsIF9fbGFz
dCAtICpfX2diZWcpOwogICAgICAgICAgX19maXJzdCA9IF9fbGFzdCAtICpfX2diZWc7CiAgICAg
ICAgICAqX19zKysgPSBfX3NlcDsKICAgICAgICB9CiAgICAgIGRvCiAgICAgICAgKl9fcysrID0g
Kl9fZmlyc3QrKzsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsKICAgICAgcmV0dXJu
IF9fczsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwg
ZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIHRydWU+Owog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCBmYWxzZT47CiAg
ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIHRydWU+OwogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIG1vbmV5X3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Q8Y2hh
cj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTxjaGFyPjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgbnVtX2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
bnVtX3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX190aW1lcHVuY3Q8Y2hhcj47
CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0
ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRp
bWVfZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldF9ieW5hbWU8Y2hh
cj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzPGNoYXI+OwogIGV4dGVybiB0ZW1w
bGF0ZSBjbGFzcyBtZXNzYWdlc19ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz
IGN0eXBlX2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5h
bWU8Y2hhciwgY2hhciwgbWJzdGF0ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0
ZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8Y2hhcj47Cgog
IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+
JgogICAgdXNlX2ZhY2V0PGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxv
Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvbGxhdGU8Y2hhcj4mCiAgICB1
c2VfZmFjZXQ8Y29sbGF0ZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGNvbnN0IG51bXB1bmN0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bXB1bmN0PGNoYXI+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX3B1dDxj
aGFyPiYKICAgIHVzZV9mYWNldDxudW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4
dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1f
Z2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3Qg
bW9uZXlwdW5jdDxjaGFyLCB0cnVlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIHRy
dWU+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlw
dW5jdDxjaGFyLCBmYWxzZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4g
Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9wdXQ8
Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7Cgog
IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0
PG1vbmV5X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGNvbnN0IF9fdGltZXB1bmN0PGNoYXI+JgogICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PGNoYXI+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9wdXQ8
Y2hhcj4mCiAgICB1c2VfZmFjZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDx0
aW1lX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNv
bnN0IG1lc3NhZ2VzPGNoYXI+JgogICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3Qg
bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBl
PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAg
aGFzX2ZhY2V0PGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYp
OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2xsYXRlPGNoYXI+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh
Y2V0PG51bXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxt
b25leXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg
Ym9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihj
b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8
X190aW1lcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihj
b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8
bWVzc2FnZXM8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz
cyBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9u
ZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5j
dF9ieW5hbWU8d2NoYXJfdCwgZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1
bmN0X2J5bmFtZTx3Y2hhcl90LCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlf
Z2V0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8d2NoYXJfdD47
CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1w
bGF0ZSBjbGFzcyBudW1wdW5jdF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIG51bV9nZXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8d2No
YXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PHdjaGFyX3Q+OwogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgdGltZV9wdXRfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0
aW1lX2dldDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXRfYnluYW1l
PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlczx3Y2hhcl90PjsKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXNfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBjdHlwZV9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIGNvZGVjdnRfYnluYW1lPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD47CiAgZXh0ZXJuIHRl
bXBsYXRlIGNsYXNzIGNvbGxhdGU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNv
bGxhdGVfYnluYW1lPHdjaGFyX3Q+OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvZGVj
dnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiYKICAgIHVzZV9mYWNldDxjb2RlY3Z0PHdjaGFy
X3QsIGNoYXIsIG1ic3RhdGVfdD4gPihsb2NhbGUgY29uc3QmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl
CiAgICBjb25zdCBjb2xsYXRlPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PGNvbGxhdGU8d2NoYXJf
dD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1wdW5j
dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1wdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2Fs
ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9wdXQ8d2NoYXJfdD4mCiAgICB1
c2VfZmFjZXQ8bnVtX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVt
cGxhdGUKICAgIGNvbnN0IG51bV9nZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtX2dldDx3
Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1v
bmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90
LCB0cnVlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1v
bmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJf
dCwgZmFsc2U+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3Qg
bW9uZXlfcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X2dldDx3Y2hh
cl90PiYKICAgIHVzZV9mYWNldDxtb25leV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsK
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBfX3RpbWVwdW5jdDx3Y2hhcl90PiYKICAgIHVz
ZV9mYWNldDxfX3RpbWVwdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g
dGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PHRpbWVf
cHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29u
c3QgdGltZV9nZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8dGltZV9nZXQ8d2NoYXJfdD4gPihj
b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtZXNzYWdlczx3Y2hh
cl90PiYKICAgIHVzZV9mYWNldDxtZXNzYWdlczx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoK
IGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4o
Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0
PGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4o
Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0
PG51bXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsK
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDx3Y2hhcl90
PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19m
YWNldDxtb25leXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1w
bGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxv
Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9n
ZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29s
CiAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4g
Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj
ZXQ8dGltZV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl
CiAgICBib29sCiAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUm
KTsKCn0KIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbG9jYWxlIiAyIDMKIyAzOCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9vc3RyZWFtLnRjYyIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6CiAgICBzZW50cnkoYmFzaWNfb3N0cmVhbTxf
Q2hhclQsX1RyYWl0cz4mIF9fb3MpCiAgICA6IF9NX29rKF9fb3MuZ29vZCgpKSwgX01fb3MoX19v
cykKICAgIHsKCiAgICAgIGlmIChfTV9vayAmJiBfX29zLnRpZSgpKQogICAgICAgIF9fb3MudGll
KCktPmZsdXNoKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAo
Kl9fcGYpKF9fb3N0cmVhbV90eXBlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMp
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYg
KCpfX3BmKShfX2lvc190eXBlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwog
ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9f
cGYoKnRoaXMpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19w
ZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhp
cyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYmluKQog
ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3Ni
aW4pCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
ZiAoIV9fY29weV9zdHJlYW1idWZzKCp0aGlzLCBfX3NiaW4sIHRoaXMtPnJkYnVmKCkpKQogICAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAg
ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYg
KCFfX3NiaW4pCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGJvb2wgX19uKQogICAgewogICAg
ICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf
TV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0
aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpv
cGVyYXRvcjw8KGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9z
X2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmll
bGQ7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgICBpZiAoKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYgaW9zX2Jhc2U6
OmhleCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbG9uZyBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pOwogICAgICAgICAg
ICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wp
LmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9f
YywgX19uKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIF9f
bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01f
Y2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+
cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgp
OwogICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkg
JiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf
TV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgYm9vbCBfX2Ig
PSBmYWxzZTsKICAgICAgICAgICAgICAgICAgaWYgKChfX2ZtdCAmIGlvc19iYXNlOjpvY3QpIHx8
IChfX2ZtdCAmIGlvc19iYXNlOjpoZXgpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2w7CiAgICAgICAgICAgICAgICAgICAg
ICBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KF9fbik7CiAgICAgICAgICAg
ICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCku
ZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19j
LCBfX24pLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9u
ZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1w
dXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1w
dXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRo
aXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9y
PDwobG9uZyBkb3VibGUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAg
IGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFp
bGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fbikK
ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hl
Y2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0
KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6cHV0KGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGludF90eXBlIF9fcHV0
ID0gcmRidWYoKS0+c3B1dGMoX19jKTsKICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50
X3R5cGUoX19wdXQsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OndyaXRlKGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAg
ICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgc3RyZWFtc2l6ZSBfX3B1dCA9IHRoaXMtPnJkYnVmKCktPnNwdXRuKF9fcywgX19uKTsK
ICAgICAgICAgIGlmICggX19wdXQgIT0gX19uKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjpmbHVzaCgpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19j
ZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICYmIHRoaXMtPnJkYnVm
KCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6dGVsbHAoKQogICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBl
KC0xKTsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1
ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjpvdXQpOwogICAgICBy
ZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlZWtwKHBvc190eXBlIF9fcG9zKQogICAgewogICAg
ICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJy
ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6Om91dCk7CgoKICAg
ICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpz
ZWVrZGlyIF9fZCkKICAgIHsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgewoKCiAg
ICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYs
IF9fZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpb3NfYmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90
eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19v
dXQsIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6
c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0
LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hh
clQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fdyArIDEpKSk7CiAgICAg
ICAgICAgICAgX19wYWRzWzBdID0gX19jOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4g
PSAxOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291
dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19s
ZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19w
YWRzLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0
OwogICAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNo
YXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+
JiBfX291dCwgY2hhciBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFy
LCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6
OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291
dC53aWR0aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIq
PihfX2J1aWx0aW5fYWxsb2NhKF9fdyArIDEpKTsKICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBf
X2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgaWYg
KF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxj
aGFyLCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19jLCBfX3csIF9fbGVu
LCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4pOwogICAgICAgICAgICAg
IF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf
X291dCwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJl
YW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQog
ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFt
c2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0g
c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9f
dykpOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1z
aXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVu
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFp
dHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3csIF9fbGVuLCBmYWxzZSk7
CiAgICAgICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4g
PSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBf
X2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9f
b3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fcykKICAg
ICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuIF9fb3V0
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAg
ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7
CgoKCiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8Y2hhcj4gX190cmFpdHNfdHlwZTsKCiAgICAg
IHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYg
KF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fY2xlbiA9IF9fdHJh
aXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nh
c3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX2NsZW4gKyAx
KSkpOwogICAgICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19jbGVuOyArK19faSkK
ICAgICAgICAgICAgX193c1tfX2ldID0gX19vdXQud2lkZW4oX19zW19faV0pOwogICAgICAgICAg
X0NoYXJUKiBfX3N0ciA9IF9fd3M7CgogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19jbGVu
KTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAg
ICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxs
b2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CgogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xl
bikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJh
aXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MsIF9fdywgX19sZW4sIGZhbHNl
KTsKICAgICAgICAgICAgICAgICAgX19zdHIgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9f
bGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9f
c3RyLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9f
cykKICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJu
IF9fb3V0OwogICAgfQoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry
YWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNf
b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19v
c3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9f
cykKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0
cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMg
PSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cpKTsKICAgICAgICAgICAg
ICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVu
Z3RoKF9fcykpOwoKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPGNoYXIsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQs
IF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19zLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAg
IF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBfX2xlbik7CiAgICAgICAgICAg
ICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fcykKICAgICAgICBfX291dC5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBl
ZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAg
dHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zID0gX19zdHIuZGF0
YSgpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAg
X0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNp
emVvZihfQ2hhclQpICogX193KSk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGlj
X2Nhc3Q8c3RyZWFtc2l6ZT4oX19zdHIuc2l6ZSgpKTsKCgoKICAgICAgICAgIGlmIChfX3cgPiBf
X2xlbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46
Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsIF9fcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAg
ICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAg
ICAgfQogICAgICAgICAgc3RyZWFtc2l6ZSBfX3JlcyA9IF9fb3V0LnJkYnVmKCktPnNwdXRuKF9f
cywgX19sZW4pOwogICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICBpZiAoX19yZXMg
IT0gX19sZW4pCiAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK
ICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRl
IGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGVu
ZGwob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRzKG9zdHJlYW0mKTsK
ICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1w
bGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjaGFyKTsKICBleHRlcm4gdGVtcGxh
dGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgdW5zaWduZWQgY2hhcik7CiAgZXh0ZXJu
IHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIHNpZ25lZCBjaGFyKTsKICBl
eHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgY2hhciop
OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCB1
bnNpZ25lZCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0
cmVhbSYsIGNvbnN0IHNpZ25lZCBjaGFyKik7CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFz
aWNfb3N0cmVhbTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZGwod29z
dHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZHMod29zdHJlYW0mKTsKICBl
eHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGZsdXNoKHdvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBs
YXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRl
bXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRl
bXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3Qgd2NoYXJfdCopOwog
IGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IGNo
YXIqKTsKCn0KIyAyNzYgIi91c3IvaW5jbHVkZS9jKysvMy4yL29zdHJlYW0iIDIgMwojIDcxICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9pdGVyYXRvciIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvaXN0cmVhbSIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lzdHJlYW0iIDMKCgoK
Cm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9z
PF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAg
dHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp
Y19pb3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAg
IHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBl
OwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3Rl
ZDoKCiAgICAgIHN0cmVhbXNpemUgX01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxp
Y2l0CiAgICAgIGJhc2ljX2lzdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgewog
ICAgICAgIHRoaXMtPmluaXQoX19zYik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgw
KTsKICAgICAgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAgIHsg
X01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAg
ZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBf
X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9z
X3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFz
ZSYgKCpfX3BmKShpb3NfYmFzZSYpKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3Bl
cmF0b3I+Pihib29sJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y
Pj4oc2hvcnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1
bnNpZ25lZCBzaG9ydCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cj4+KGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVu
c2lnbmVkIGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+
KGxvbmcmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNp
Z25lZCBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+
KGxvbmcgbG9uZyYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+
KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I+PihmbG9hdCYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVy
YXRvcj4+KGRvdWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cj4+KGxvbmcgZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPj4odm9pZComIF9fcCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+
PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAg
ICBnY291bnQodm9pZCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CgogICAgICBp
bnRfdHlwZQogICAgICBnZXQodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0
KGNoYXJfdHlwZSYgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxp
bmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
X24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykp
OyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9f
c2IsIGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAg
ICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChf
X3NiLCB0aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBn
ZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0p
OwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0bGluZShfX3MsIF9f
biwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdu
b3JlKHN0cmVhbXNpemUgX19uID0gMSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjpl
b2YoKSk7CgogICAgICBpbnRfdHlwZQogICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFt
X3R5cGUmCiAgICAgIHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAg
IHN0cmVhbXNpemUKICAgICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoK
ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAg
IHN5bmModm9pZCk7CgogICAgICBwb3NfdHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9f
aXN0cmVhbV90eXBlJgogICAgICBzZWVrZyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlw
ZSYKICAgICAgc2Vla2cob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CiAgICAg
IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhw
bGljaXQKICAgICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywg
Ym9vbCBfX25vc2tpcHdzID0gZmFsc2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJu
IF9NX29rOyB9CgogICAgcHJpdmF0ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0
cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1
cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8
Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVy
YXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBf
X2MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBf
VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+Pihi
YXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAg
IHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRl
bXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAg
ICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNo
YXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9f
cykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBjbGFzcyBiYXNpY19pb3N0cmVhbQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+LAogICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAg
ICB7CiAgICBwdWJsaWM6CgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRy
YWl0c190eXBlOwoKCgogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4gX19vc3RyZWFtX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVh
bShiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJl
YW1fdHlwZShfX3NiKSwgX19vc3RyZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0
dWFsCiAgICAgIH5iYXNpY19pb3N0cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cn0K
CgoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvaXN0cmVhbS50Y2MiIDEgMwojIDM2
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2lzdHJlYW0udGNjIiAzCgoKCgpuYW1lc3BhY2Ug
c3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6CiAgICBzZW50cnkoYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBib29sIF9fbm9za2lwd3MpCiAgICB7CiAg
ICAgIGlmIChfX2luLmdvb2QoKSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19pbi50aWUoKSkK
ICAgICAgICAgICAgX19pbi50aWUoKS0+Zmx1c2goKTsKICAgICAgICAgIGlmICghX19ub3NraXB3
cyAmJiAoX19pbi5mbGFncygpICYgaW9zX2Jhc2U6OnNraXB3cykpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog
ICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAg
ICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICBp
ZiAoX19pbi5fTV9jaGVja19mYWNldChfX2luLl9NX2ZjdHlwZSkpCiAgICAgICAgICAgICAgICB3
aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAg
ICAgICAgICAgICYmIF9faW4uX01fZmN0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OnRvX2No
YXJfdHlwZShfX2MpKSkKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CgoK
CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkK
ICAgICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICAg
ICAgICB9CiAgICAgICAgfQoKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIF9NX29rID0g
dHJ1ZTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9NX29rID0gZmFsc2U7CiAgICAg
ICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBl
JikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQogICAg
ewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg
b3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQogICAgewogICAgICBfX3Bm
KCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihi
b29sJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jh
c2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0
KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJy
LCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAg
fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
IF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAg
ICAgIGxvbmcgX19sOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0
KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJy
LCBfX2wpOwoKCiAgICAgICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkK
ICAgICAgICAgICAgICAgICAgJiYgKG51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWluKCkgPD0gX19s
CiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8c2hvcnQ+Ojpt
YXgoKSkpCiAgICAgICAgICAgICAgICBfX24gPSBfX2w7CiAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVy
YXRvcj4+KHVuc2lnbmVkIHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jh
c2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVj
a19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhp
cywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9f
ZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGludCYgX19u
KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k
Yml0KTsKICAgICAgICAgICAgICBsb25nIF9fbDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf
ZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMs
IDAsICp0aGlzLCBfX2VyciwgX19sKTsKCgogICAgICAgICAgICAgIGlmICghKF9fZXJyICYgaW9z
X2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgICAgICYmIChudW1lcmljX2xpbWl0czxpbnQ+
OjptaW4oKSA8PSBfX2wKICAgICAgICAgICAgICAgICAgICAgICYmIF9fbCA8PSBudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSkpCiAgICAgICAgICAgICAgICBfX24gPSBfX2w7CiAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKQogICAgewogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy
ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBp
ZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0
LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+
Pihsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9z
X2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt
Z2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9f
ZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg
ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbikKICAg
IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQog
ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAg
ICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg
dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9
IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAo
X01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5n
ZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5z
aWduZWQgbG9uZyBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh
bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlv
c3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl
dChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwg
KnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihmbG9hdCYgX19uKQog
ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0
KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAg
ICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt
PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBp
b3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9N
X2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0
KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9u
ZyBkb3VibGUmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwog
ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShp
b3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu
dW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywg
X19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odm9pZComIF9fbikKICAgIHsKICAg
ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAg
X01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYm91dCkKICAgIHsKICAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgIHsKICAg
ICAgICAgICB0cnkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3h0
cmN0ID0gMDsKICAgICAgICAgICAgICAgaWYgKF9fc2JvdXQpCiAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYmluID0gdGhpcy0+cmRidWYo
KTsKICAgICAgICAgICAgICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywg
X19zYmluLCBfX3Nib3V0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGlmICgh
X19zYm91dCB8fCAhX194dHJjdCkKICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpCiAgICAgICAgICAgICB7CgoKICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgZ2V0KHZvaWQpCiAgICB7CiAgICAgIGNvbnN0IGludF90eXBlIF9f
ZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBpbnRfdHlwZSBfX2MgPSBfX2VvZjsKICAg
ICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYg
KCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICBf
TV9nY291bnQgPSAxOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9f
YzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIGdldChjaGFyX3R5cGUmIF9fYykKICAgIHsKICAgICAgX01fZ2Nv
dW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBj
b25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBp
bnRfdHlwZSBfX2J1ZnZhbCA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAgICAgICAgICAg
ICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2J1ZnZhbCwgX19lb2YpKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICBfTV9nY291bnQgPSAxOwogICAgICAgICAgICAg
ICAgICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYnVmdmFsKTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJf
dHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0g
dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGlu
dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFt
YnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9f
YyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgKyAxIDwg
X19uCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19j
LCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlw
ZShfX2MsIF9faWRlbGltKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9f
cysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICBf
X2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShf
X2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2Zi
aXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6CiAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYiwgY2hhcl90eXBlIF9fZGVs
aW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs
IHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlw
ZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19l
b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSog
X190aGlzX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBf
X3RoaXNfc2ItPnNnZXRjKCk7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYzIgPSB0cmFpdHNf
dHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CgogICAgICAgICAgICAgIHdoaWxlICghdHJhaXRzX3R5
cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFp
dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkKICAgICAgICAgICAgICAgICAgICAg
JiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLnNwdXRjKF9fYzIpLCBfX2VvZikpCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAg
ICAgICAgICBfX2MgPSBfX3RoaXNfc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICBfX2My
ID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAg
fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoIV9NX2dj
b3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVh
bXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRf
dHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAg
ICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAg
ICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAg
ICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAo
X01fZ2NvdW50ICsgMSA8IF9fbgogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6
OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNf
dHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAg
ICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICAgICsr
X01fZ2NvdW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlw
ZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lk
ZWxpbSkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zYi0+
c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9
IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01f
Z2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChf
X2NlcmIgJiYgX19uID4gMCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog
ICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAg
ICAgICAgICAgIGludF90eXBlIF9fYzsKCiAgICAgICAgICAgICAgX19uID0gbWluKF9fbiwgbnVt
ZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCgpKTsKICAgICAgICAgICAgICB3aGlsZSAoX01f
Z2NvdW50IDwgX19uCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50
X3R5cGUoX19jID0gX19zYi0+c2J1bXBjKCksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIGlmICh0cmFpdHNf
dHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2RlbGltKSkKICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2lu
dF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OgogICAgcGVlayh2b2lkKQogICAgewogICAgICBpbnRfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6
ZW9mKCk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRy
dWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg
ICB7IF9fYyA9IHRoaXMtPnJkYnVmKCktPnNnZXRjKCk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYzsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHJlYWQo
Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBfTV9nY291bnQgPSAw
OwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAg
ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX2djb3Vu
dCA9IHRoaXMtPnJkYnVmKCktPnNnZXRuKF9fcywgX19uKTsKICAgICAgICAgICAgICBpZiAoX01f
Z2NvdW50ICE9IF9fbikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpl
b2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVhZHNvbWUoY2hhcl90eXBlKiBf
X3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50
cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0g
dGhpcy0+cmRidWYoKS0+aW5fYXZhaWwoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gPj0gMCkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19udW0gPSBtaW4oX19udW0sIF9f
bik7CiAgICAgICAgICAgICAgICAgIGlmIChfX251bSkKICAgICAgICAgICAgICAgICAgICBfTV9n
Y291bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZh
aWxiaXQpOwogICAgICByZXR1cm4gX01fZ2NvdW50OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcHV0YmFjayhj
aGFyX3R5cGUgX19jKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAg
ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAg
ICAgICAgIGlmICghX19zYgogICAgICAgICAgICAgICAgICB8fCB0cmFpdHNfdHlwZTo6ZXFfaW50
X3R5cGUoX19zYi0+c3B1dGJhY2tjKF9fYyksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IHVuZ2V0KHZvaWQpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFp
dHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRo
aXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiCiAgICAgICAgICAgICAgICAgIHx8
IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLT5zdW5nZXRjKCksIF9fZW9mKSkKICAgICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
aW50CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3luYyh2b2lkKQog
ICAgewogICAgICBpbnQgX19yZXQgPSAtMTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBf
X3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoX19zYikKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9fc2ItPnB1YnN5bmMoKSA9PSAtMSkKICAgICAg
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fcmV0ID0gMDsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB0
ZWxsZyh2b2lkKQogICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAg
ICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJz
ZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjppbik7CiAgICAgIHJldHVybiBfX3Jl
dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhwb3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAgX01f
Z2NvdW50ID0gMDsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAg
ICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19i
YXNlOjppbik7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkp
KQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla2cob2ZmX3R5cGUgX19v
ZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZGlyKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwog
ICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9f
ZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kaXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6OmluKTsK
CgogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRv
cj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpCiAg
ICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVh
bV90eXBlOwogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2lu
LCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsgX19pbi5nZXQoX19jKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgZWxzZQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp
OwogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
b3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCog
X19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBf
X2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19z
dHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9U
cmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAgICAgIHN0cmVhbXNp
emUgX19leHRyYWN0ZWQgPSAwOwoKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRy
eSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSBf
X2luLndpZHRoKCk7CiAgICAgICAgICAgICAgaWYgKF9fbnVtID09IDApCiAgICAgICAgICAgICAg
ICBfX251bSA9IG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKTsKCiAgICAgICAgICAg
ICAgY29uc3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4o
X19pbi5nZXRsb2MoKSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSBfVHJh
aXRzOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5y
ZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAg
ICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbnVtIC0gMQogICAgICAgICAgICAgICAg
ICAgICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAg
ICAgICAgJiYgIV9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IF9fYzsKICAgICAgICAgICAgICAgICAg
KytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9f
YywgX19lb2YpKQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0
KTsKCgoKICAgICAgICAgICAgICAqX19zID0gY2hhcl90eXBlKCk7CgogICAgICAgICAgICAgIF9f
aW4ud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
X1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19pbikKICAg
IHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFt
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVm
X3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1f
dHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKCiAgICAgIGNvbnN0IF9fY3R5cGVf
dHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwog
ICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgIF9fc3Ry
ZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgIF9faW50X3R5cGUgX19jID0g
X19zYi0+c2dldGMoKTsKCiAgICAgIHdoaWxlICghX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBf
X2VvZikKICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykp
CiAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CgogICAgICAgaWYgKF9UcmFpdHM6OmVxX2lu
dF90eXBlKF9fYywgX19lb2YpKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJp
dCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mIF9faW4sCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJl
YW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lz
dHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwog
ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJp
bmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUg
X19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5
cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAg
c3RyZWFtc2l6ZSBfX3cgPSBfX2luLndpZHRoKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX247
CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+KF9fdykg
OiBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlw
ZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgY29u
c3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX19zdHJlYW1i
dWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0g
X19zYi0+c2dldGMoKTsKCiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX24KICAgICAg
ICAgICAgICAgICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAg
ICAgICAgICAmJiAhX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIF9fc3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwog
ICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c25l
eHRjKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShf
X2MsIF9fZW9mKSkKICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsK
ICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAgfQoKCiAgICAgIGlmICghX19leHRyYWN0
ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZSAoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgcmV0
dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAg
ICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hh
clQgX19kZWxpbSkKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5
cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFt
X3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAg
dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6
ZV90eXBlOwoKICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOwogICAgICBib29sIF9f
dGVzdGRlbGltID0gZmFsc2U7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkg
X19jZXJiKF9faW4sIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IF9fc3RyLmVyYXNlKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6
ZSgpOwoKICAgICAgICAgIF9faW50X3R5cGUgX19pZGVsaW0gPSBfVHJhaXRzOjp0b19pbnRfdHlw
ZShfX2RlbGltKTsKICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVm
KCk7CiAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAg
Y29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX190ZXN0
ZGVsaW0gPSBfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKTsKCiAgICAgICAgICB3
aGlsZSAoX19leHRyYWN0ZWQgPD0gX19uCiAgICAgICAgICAgICAgICAgJiYgIV9UcmFpdHM6OmVx
X2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAgJiYgIV9fdGVzdGRlbGltKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBl
KF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICBfX2MgPSBf
X3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9UcmFpdHM6OmVxX2lu
dF90eXBlKF9fYywgX19pZGVsaW0pOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX1RyYWl0
czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9z
X2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgfQogICAgICBpZiAoIV9fZXh0cmFjdGVkICYmICFfX3Rl
c3RkZWxpbSkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAg
cmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0
cywgY2xhc3MgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+
JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAg
ICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3N0cikKICAgIHsg
cmV0dXJuIGdldGxpbmUoX19pbiwgX19zdHIsIF9faW4ud2lkZW4oJ1xuJykpOyB9CgoKCgogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0
ZSBpc3RyZWFtJiB3cyhpc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJh
dG9yPj4oaXN0cmVhbSYsIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0
b3I+Pihpc3RyZWFtJiwgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRv
cj4+KGlzdHJlYW0mLCB1bnNpZ25lZCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0m
IG9wZXJhdG9yPj4oaXN0cmVhbSYsIHNpZ25lZCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlz
dHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHVuc2lnbmVkIGNoYXIqKTsKICBleHRlcm4gdGVt
cGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXIqKTsKCgogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1w
bGF0ZSB3aXN0cmVhbSYgd3Mod2lzdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0m
IG9wZXJhdG9yPj4od2lzdHJlYW0mLCB3Y2hhcl90Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3Ry
ZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgd2NoYXJfdCopOwoKfQojIDI5OCAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvaXN0cmVhbSIgMiAzCiMgNzIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2l0ZXJh
dG9yIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmVhbV9pdGVyYXRvci5o
IiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJlYW1faXRlcmF0b3IuaCIg
MwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hh
clQgPSBjaGFyLAogICAgICAgICAgIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh
clQ+LCB0eXBlbmFtZSBfRGlzdCA9IHB0cmRpZmZfdD4KICAgIGNsYXNzIGlzdHJlYW1faXRlcmF0
b3IKICAgICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfVHAsIF9EaXN0
LCBjb25zdCBfVHAqLCBjb25zdCBfVHAmPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVm
IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAg
ICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoK
ICAgIHByaXZhdGU6CiAgICAgIGlzdHJlYW1fdHlwZSogX01fc3RyZWFtOwogICAgICBfVHAgX01f
dmFsdWU7CiAgICAgIGJvb2wgX01fb2s7CgogICAgcHVibGljOgogICAgICBpc3RyZWFtX2l0ZXJh
dG9yKCkgOiBfTV9zdHJlYW0oMCksIF9NX29rKGZhbHNlKSB7fQoKICAgICAgaXN0cmVhbV9pdGVy
YXRvcihpc3RyZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0oJl9fcykgeyBfTV9yZWFkKCk7IH0K
CiAgICAgIGlzdHJlYW1faXRlcmF0b3IoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYgX19vYmopCiAg
ICAgIDogX01fc3RyZWFtKF9fb2JqLl9NX3N0cmVhbSksIF9NX3ZhbHVlKF9fb2JqLl9NX3ZhbHVl
KSwKICAgICAgICBfTV9vayhfX29iai5fTV9vaykKICAgICAgeyB9CgogICAgICBjb25zdCBfVHAm
CiAgICAgIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbHVlOyB9CgogICAgICBjb25z
dCBfVHAqCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsg
fQoKICAgICAgaXN0cmVhbV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsgX01f
cmVhZCgpOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGlzdHJlYW1faXRlcmF0b3IKICAgICAgb3Bl
cmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICBpc3RyZWFtX2l0ZXJhdG9yIF9fdG1wID0gKnRo
aXM7CiAgICAgICAgX01fcmVhZCgpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAg
ICAgYm9vbAogICAgICBfTV9lcXVhbChjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJiBfX3gpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIChfTV9vayA9PSBfX3guX01fb2spICYmICghX01fb2sgfHwgX01fc3Ry
ZWFtID09IF9feC5fTV9zdHJlYW0pO30KCiAgICBwcml2YXRlOgogICAgICB2b2lkCiAgICAgIF9N
X3JlYWQoKQogICAgICB7CiAgICAgICAgX01fb2sgPSAoX01fc3RyZWFtICYmICpfTV9zdHJlYW0p
ID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgIGlmIChfTV9vaykKICAgICAgICAgIHsKICAgICAgICAg
ICAgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsKICAgICAgICAgICAgX01fb2sgPSAqX01fc3RyZWFt
ID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgICAgfQogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0Rpc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJh
dG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feCwKICAgICAgICAgICAgICAgY29u
c3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpCiAg
ICB7IHJldHVybiBfX3guX01fZXF1YWwoX195KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9EaXN0PgogICAgaW5saW5lIGJvb2wK
ICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0
cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1Rw
LCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195KQogICAgeyByZXR1cm4gIV9feC5fTV9lcXVh
bChfX3kpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCA9IGNo
YXIsCiAgICAgICAgICAgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog
ICAgY2xhc3Mgb3N0cmVhbV9pdGVyYXRvcgogICAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRf
aXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHVibGljOgog
ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFp
dHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0
cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIG9zdHJlYW1fdHlwZSogX01fc3RyZWFtOwog
ICAgICBjb25zdCBfQ2hhclQqIF9NX3N0cmluZzsKCiAgICBwdWJsaWM6CiAgICAgIG9zdHJlYW1f
aXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmco
MCkge30KCiAgICAgIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MsIGNvbnN0IF9D
aGFyVCogX19jKQogICAgICA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKF9fYykgeyB9Cgog
ICAgICBvc3RyZWFtX2l0ZXJhdG9yKGNvbnN0IG9zdHJlYW1faXRlcmF0b3ImIF9fb2JqKQogICAg
ICA6IF9NX3N0cmVhbShfX29iai5fTV9zdHJlYW0pLCBfTV9zdHJpbmcoX19vYmouX01fc3RyaW5n
KSB7IH0KCiAgICAgIG9zdHJlYW1faXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAm
IF9fdmFsdWUpCiAgICAgIHsKICAgICAgICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICAgICAg
aWYgKF9NX3N0cmluZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICB9CgogICAgICBvc3RyZWFtX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7
IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Ir
KygpIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtX2l0ZXJhdG9yJgogICAgICBvcGVy
YXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07Cn0KIyA3MyAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvaXRlcmF0b3IiIDIgMwojIDQ5ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42
L2luY2x1ZGUvcXZhbHVlbGlzdC5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGlzdCIg
MSAzCiMgNjUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2xpc3QiIDMKCiMgMSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0
aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3Rl
eGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2Vw
dGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQK
ICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZv
aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9v
Zl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
CiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDY3ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9saXN0IiAyIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfbGlzdC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfbGlzdC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKICBzdHJ1Y3QgX0xpc3Rfbm9kZV9iYXNlCiAg
ewogICAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9uZXh0OwogICAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9w
cmV2OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfTGlzdF9ub2Rl
IDogcHVibGljIF9MaXN0X25vZGVfYmFzZQogICAgewogICAgICBfVHAgX01fZGF0YTsKICAgIH07
CgogIHN0cnVjdCBfTGlzdF9pdGVyYXRvcl9iYXNlCiAgewogICAgdHlwZWRlZiBzaXplX3Qgc2l6
ZV90eXBlOwogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRl
ZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKCiAgICBfTGlz
dF9ub2RlX2Jhc2UqIF9NX25vZGU7CgogICAgX0xpc3RfaXRlcmF0b3JfYmFzZShfTGlzdF9ub2Rl
X2Jhc2UqIF9feCkKICAgIDogX01fbm9kZShfX3gpCiAgICB7IH0KCiAgICBfTGlzdF9pdGVyYXRv
cl9iYXNlKCkKICAgIHsgfQoKICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAgeyBfTV9ub2RlID0g
X01fbm9kZS0+X01fbmV4dDsgfQoKICAgIHZvaWQKICAgIF9NX2RlY3IoKQogICAgeyBfTV9ub2Rl
ID0gX01fbm9kZS0+X01fcHJldjsgfQoKICAgIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX0xp
c3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gX01fbm9kZSA9PSBfX3gu
X01fbm9kZTsgfQoKICAgIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0xpc3RfaXRlcmF0b3Jf
YmFzZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsgfQog
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0
cj4KICAgIHN0cnVjdCBfTGlzdF9pdGVyYXRvciA6IHB1YmxpYyBfTGlzdF9pdGVyYXRvcl9iYXNl
CiAgICB7CiAgICAgIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9UcCYsX1RwKj4gaXRlcmF0
b3I7CiAgICAgIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLGNvbnN0IF9UcCYsY29uc3QgX1Rw
Kj4gY29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9SZWYs
X1B0cj4gX1NlbGY7CgogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVm
IF9QdHIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfUmVmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRl
ZiBfTGlzdF9ub2RlPF9UcD4gX05vZGU7CgogICAgICBfTGlzdF9pdGVyYXRvcihfTm9kZSogX194
KQogICAgICA6IF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX194KQogICAgICB7IH0KCiAgICAgIF9MaXN0
X2l0ZXJhdG9yKCkKICAgICAgeyB9CgogICAgICBfTGlzdF9pdGVyYXRvcihjb25zdCBpdGVyYXRv
ciYgX194KQogICAgICA6IF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX25vZGUpCiAgICAgIHsg
fQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsgcmV0dXJu
ICgoX05vZGUqKSBfTV9ub2RlKS0+X01fZGF0YTsgfQoKICAgICAgcG9pbnRlcgogICAgICBvcGVy
YXRvci0+KCkgY29uc3QKICAgICAgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgICAgIF9T
ZWxmJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIHRoaXMtPl9NX2luY3IoKTsK
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIF9TZWxmCiAgICAgIG9wZXJhdG9y
KysoaW50KQogICAgICB7CiAgICAgICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICAgICB0aGlz
LT5fTV9pbmNyKCk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBfU2VsZiYK
ICAgICAgb3BlcmF0b3ItLSgpCiAgICAgIHsKICAgICAgICB0aGlzLT5fTV9kZWNyKCk7CiAgICAg
ICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBfU2VsZgogICAgICBvcGVyYXRvci0tKGlu
dCkKICAgICAgewogICAgICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAgICAgdGhpcy0+X01f
ZGVjcigpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQogICAgfTsKIyAxODUgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2xpc3QuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0aWM+CiAgICBjbGFzcyBfTGlzdF9h
bGxvY19iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j
X3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgICAgIGFs
bG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9Ob2RlX2FsbG9jYXRvcjsgfQoKICAgICAgX0xpc3RfYWxs
b2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgICA6IF9Ob2RlX2FsbG9jYXRv
cihfX2EpCiAgICAgIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgX0xpc3Rfbm9kZTxfVHA+Kgog
ICAgICBfTV9nZXRfbm9kZSgpCiAgICAgIHsgcmV0dXJuIF9Ob2RlX2FsbG9jYXRvci5hbGxvY2F0
ZSgxKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9f
cCkKICAgICAgeyBfTm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9CgogICAgcHJv
dGVjdGVkOgogICAgICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9MaXN0X25vZGU8X1RwPiwgX0Fs
bG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICAgICAgIF9Ob2RlX2FsbG9jYXRvcjsK
CiAgICAgIF9MaXN0X25vZGU8X1RwPiogX01fbm9kZTsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgogICAgY2xhc3MgX0xpc3RfYWxsb2NfYmFz
ZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQog
ICAgICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAg
Z2V0X2FsbG9jYXRvcigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0K
CiAgICAgIF9MaXN0X2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgICB7IH0K
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfTGlz
dF9ub2RlPF9UcD4sIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgICAgIF9BbGxv
Y190eXBlOwoKICAgICAgX0xpc3Rfbm9kZTxfVHA+KgogICAgICBfTV9nZXRfbm9kZSgpCiAgICAg
IHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQoKICAgICAgdm9pZAogICAgICBf
TV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9fcCkKICAgICAgeyBfQWxsb2NfdHlwZTo6ZGVh
bGxvY2F0ZShfX3AsIDEpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBfTGlzdF9ub2RlPF9UcD4q
IF9NX25vZGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGNsYXNzIF9MaXN0X2Jhc2UKICAgICAgOiBwdWJsaWMgX0xpc3RfYWxsb2NfYmFzZTxf
VHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRz
PF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgewogICAgcHVibGljOgogICAgICB0
eXBlZGVmIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgog
ICAgICAgICAgICAgIF9CYXNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0
b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIF9MaXN0X2Jhc2UoY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSkKICAgICAgOiBfQmFzZShfX2EpCiAgICAgIHsKICAgICAgICBfTV9ub2RlID0g
X01fZ2V0X25vZGUoKTsKICAgICAgICBfTV9ub2RlLT5fTV9uZXh0ID0gX01fbm9kZTsKICAgICAg
ICBfTV9ub2RlLT5fTV9wcmV2ID0gX01fbm9kZTsKICAgICAgfQoKICAgICAgfl9MaXN0X2Jhc2Uo
KQogICAgICB7CiAgICAgICAgY2xlYXIoKTsKICAgICAgICBfTV9wdXRfbm9kZShfTV9ub2RlKTsK
ICAgICAgfQoKICAgICAgdm9pZCBjbGVhcigpOwogICAgfTsKIyAyODkgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2xpc3QuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgogICAgY2xhc3MgbGlzdCA6IHByb3RlY3RlZCBf
TGlzdF9iYXNlPF9UcCwgX0FsbG9jPgogICAgewoKICAgICAKCiAgICAgIHR5cGVkZWYgX0xpc3Rf
YmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHR5cGVkZWYgdm9p
ZCogX1ZvaWRfcG9pbnRlcjsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5
cGU7CiAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25z
dCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJl
ZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7
CiAgICAgIHR5cGVkZWYgX0xpc3Rfbm9kZTxfVHA+IF9Ob2RlOwogICAgICB0eXBlZGVmIHNpemVf
dCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBl
OwoKICAgICAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1RwJixfVHAqPiBpdGVyYXRvcjsK
ICAgICAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsY29uc3QgX1RwJixjb25zdCBfVHAqPiBj
b25zdF9pdGVyYXRvcjsKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVy
YXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh
dG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHByb3RlY3RlZDoKICAgICAgdXNp
bmcgX0Jhc2U6Ol9NX25vZGU7CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9wdXRfbm9kZTsKICAgICAg
dXNpbmcgX0Jhc2U6Ol9NX2dldF9ub2RlOwoKICAgIHByb3RlY3RlZDoKICAgICAgX05vZGUqCiAg
ICAgIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IF9UcCYgX194KQogICAgICB7CiAgICAgICAgX05vZGUq
IF9fcCA9IF9NX2dldF9ub2RlKCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9Db25zdHJ1Y3Qo
Jl9fcC0+X01fZGF0YSwgX194KTsKICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAg
IHsKICAgICAgICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9
CiAgICAgICAgcmV0dXJuIF9fcDsKICAgICAgfQoKICAgICAgX05vZGUqCiAgICAgIF9NX2NyZWF0
ZV9ub2RlKCkKICAgICAgewogICAgICAgIF9Ob2RlKiBfX3AgPSBfTV9nZXRfbm9kZSgpOwogICAg
ICAgIHRyeSB7CiAgICAgICAgICBfQ29uc3RydWN0KCZfX3AtPl9NX2RhdGEpOwogICAgICAgIH0K
ICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX01fcHV0X25vZGUoX19wKTsK
ICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgICByZXR1cm4gX19wOwogICAgICB9Cgog
ICAgcHVibGljOgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29u
c3QKICAgICAgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKICAgICAgZXhwbGlj
aXQKICAgICAgbGlzdChjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo
KSkKICAgICAgOiBfQmFzZShfX2EpCiAgICAgIHsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgYmVn
aW4oKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfTm9kZSo+KF9NX25vZGUtPl9NX25leHQp
OyB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PF9Ob2RlKj4oX01fbm9kZS0+X01fbmV4dCk7IH0KCiAgICAgIGl0ZXJh
dG9yCiAgICAgIGVuZCgpCiAgICAgIHsgcmV0dXJuIF9NX25vZGU7IH0KCiAgICAgIGNvbnN0X2l0
ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25vZGU7IH0KCiAgICAg
IHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9p
dGVyYXRvcihlbmQoKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJl
Z2luKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7
IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJl
dmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IK
ICAgICAgcmVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io
YmVnaW4oKSk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdAogICAgICB7IHJldHVy
biBfTV9ub2RlLT5fTV9uZXh0ID09IF9NX25vZGU7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBz
aXplKCkgY29uc3QKICAgICAgeyByZXR1cm4gZGlzdGFuY2UoYmVnaW4oKSwgZW5kKCkpOyB9Cgog
ICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdAogICAgICB7IHJldHVybiBzaXpl
X3R5cGUoLTEpOyB9CgogICAgICByZWZlcmVuY2UKICAgICAgZnJvbnQoKQogICAgICB7IHJldHVy
biAqYmVnaW4oKTsgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGZyb250KCkgY29uc3QK
ICAgICAgeyByZXR1cm4gKmJlZ2luKCk7IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBiYWNrKCkK
ICAgICAgeyByZXR1cm4gKigtLWVuZCgpKTsgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAg
IGJhY2soKSBjb25zdAogICAgICB7IHJldHVybiAqKC0tZW5kKCkpOyB9CgogICAgICB2b2lkCiAg
ICAgIHN3YXAobGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKICAgICAgeyBzdGQ6OnN3YXAoX01fbm9k
ZSwgX194Ll9NX25vZGUpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3Ig
X19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCiAgICAgIHsKICAgICAgICBfTm9kZSogX190bXAg
PSBfTV9jcmVhdGVfbm9kZShfX3gpOwogICAgICAgIF9fdG1wLT5fTV9uZXh0ID0gX19wb3NpdGlv
bi5fTV9ub2RlOwogICAgICAgIF9fdG1wLT5fTV9wcmV2ID0gX19wb3NpdGlvbi5fTV9ub2RlLT5f
TV9wcmV2OwogICAgICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9f
dG1wOwogICAgICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAgICAg
IHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0KGl0ZXJh
dG9yIF9fcG9zaXRpb24pCiAgICAgIHsgcmV0dXJuIGluc2VydChfX3Bvc2l0aW9uLCBfVHAoKSk7
IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdlcj4KICAgICAgICB2b2lkCiAgICAg
ICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRl
Z2VyIF9feCwgX190cnVlX3R5cGUpCiAgICAgICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgKHNp
emVfdHlwZSkgX19uLCAoX1RwKSBfX3gpOyB9CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyYXRvcj4KICAgICAgICB2b2lkCiAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJh
dG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2Zp
cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
ZmFsc2VfdHlwZSk7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAg
ICAgICB2b2lkCiAgICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBf
X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgewogICAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdy
YWw7CiAgICAgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwg
X0ludGVncmFsKCkpOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9y
IF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgICAgeyBfTV9maWxsX2lu
c2VydChfX3BvcywgX19uLCBfX3gpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX2ZpbGxfaW5zZXJ0
KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7CgogICAgICB2
b2lkCiAgICAgIHB1c2hfZnJvbnQoY29uc3QgX1RwJiBfX3gpCiAgICAgIHsgaW5zZXJ0KGJlZ2lu
KCksIF9feCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9mcm9udCgpCiAgICAgIHsgaW5zZXJ0
KGJlZ2luKCkpOyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkK
ICAgICAgeyBpbnNlcnQoZW5kKCksIF9feCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNr
KCkKICAgICAgeyBpbnNlcnQoZW5kKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShp
dGVyYXRvciBfX3Bvc2l0aW9uKQogICAgICB7CiAgICAgICAgX0xpc3Rfbm9kZV9iYXNlKiBfX25l
eHRfbm9kZSA9IF9fcG9zaXRpb24uX01fbm9kZS0+X01fbmV4dDsKICAgICAgICBfTGlzdF9ub2Rl
X2Jhc2UqIF9fcHJldl9ub2RlID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICAg
IF9Ob2RlKiBfX24gPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fcG9zaXRpb24uX01fbm9kZSk7CiAg
ICAgICAgX19wcmV2X25vZGUtPl9NX25leHQgPSBfX25leHRfbm9kZTsKICAgICAgICBfX25leHRf
bm9kZS0+X01fcHJldiA9IF9fcHJldl9ub2RlOwogICAgICAgIF9EZXN0cm95KCZfX24tPl9NX2Rh
dGEpOwogICAgICAgIF9NX3B1dF9ub2RlKF9fbik7CiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHN0
YXRpY19jYXN0PF9Ob2RlKj4oX19uZXh0X25vZGUpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IK
ICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKCiAgICAgIHZv
aWQKICAgICAgY2xlYXIoKQogICAgICB7IF9CYXNlOjpjbGVhcigpOyB9CgogICAgICB2b2lkCiAg
ICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpOwoKICAgICAg
dm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpCiAgICAgIHsgdGhpcy0+cmVz
aXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQoKICAgICAgdm9pZAogICAgICBwb3BfZnJvbnQoKQog
ICAgICB7IGVyYXNlKGJlZ2luKCkpOyB9CgogICAgICB2b2lkCiAgICAgIHBvcF9iYWNrKCkKICAg
ICAgewogICAgICAgIGl0ZXJhdG9yIF9fdG1wID0gZW5kKCk7CiAgICAgICAgZXJhc2UoLS1fX3Rt
cCk7CiAgICAgIH0KCiAgICAgIGxpc3Qoc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVl
LAogICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp
KQogICAgICA6IF9CYXNlKF9fYSkKICAgICAgeyBpbnNlcnQoYmVnaW4oKSwgX19uLCBfX3ZhbHVl
KTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbGlzdChzaXplX3R5cGUgX19uKQogICAgICA6IF9C
YXNlKGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9fbiwgX1RwKCkp
OyB9CgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICBsaXN0
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBf
QmFzZShfX2EpCiAgICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAg
ICAgIGxpc3QoY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKICAgICAgOiBfQmFzZShfX3gu
Z2V0X2FsbG9jYXRvcigpKQogICAgICB7IGluc2VydChiZWdpbigpLCBfX3guYmVnaW4oKSwgX194
LmVuZCgpKTsgfQoKICAgICAgfmxpc3QoKQogICAgICB7IH0KCiAgICAgIGxpc3Q8X1RwLCBfQWxs
b2M+JgogICAgICBvcGVyYXRvcj0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCk7CgogICAg
cHVibGljOgoKCgoKCiAgICAgIHZvaWQKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0
IF9UcCYgX192YWwpCiAgICAgIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KCiAgICAg
IHZvaWQKICAgICAgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3Zh
bCk7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lk
CiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9J
bnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgICAgIF9NX2Fzc2lnbl9k
aXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgogICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdlcj4KICAgICAgICB2b2lkCiAgICAgICAgX01fYXNzaWdu
X2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAg
ICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQKICAgICAg
ICBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpOwoKICAg
IHByb3RlY3RlZDoKICAgICAgdm9pZAogICAgICBfTV90cmFuc2ZlcihpdGVyYXRvciBfX3Bvc2l0
aW9uLCBpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAgICBp
ZiAoX19wb3NpdGlvbiAhPSBfX2xhc3QpIHsKCiAgICAgICAgICBfX2xhc3QuX01fbm9kZS0+X01f
cHJldi0+X01fbmV4dCA9IF9fcG9zaXRpb24uX01fbm9kZTsKICAgICAgICAgIF9fZmlyc3QuX01f
bm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fbGFzdC5fTV9ub2RlOwogICAgICAgICAgX19wb3Np
dGlvbi5fTV9ub2RlLT5fTV9wcmV2LT5fTV9uZXh0ID0gX19maXJzdC5fTV9ub2RlOwoKCiAgICAg
ICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fdG1wID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2
OwogICAgICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2ID0gX19sYXN0Ll9NX25vZGUt
Pl9NX3ByZXY7CiAgICAgICAgICBfX2xhc3QuX01fbm9kZS0+X01fcHJldiA9IF9fZmlyc3QuX01f
bm9kZS0+X01fcHJldjsKICAgICAgICAgIF9fZmlyc3QuX01fbm9kZS0+X01fcHJldiA9IF9fdG1w
OwogICAgICAgIH0KICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgdm9pZAogICAgICBzcGxpY2Uo
aXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYgX194KQogICAgICB7CiAgICAgICAgaWYgKCFfX3gu
ZW1wdHkoKSkKICAgICAgICAgIHRoaXMtPl9NX3RyYW5zZmVyKF9fcG9zaXRpb24sIF9feC5iZWdp
bigpLCBfX3guZW5kKCkpOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIHNwbGljZShpdGVyYXRv
ciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0b3IgX19pKQogICAgICB7CiAgICAgICAgaXRlcmF0
b3IgX19qID0gX19pOwogICAgICAgICsrX19qOwogICAgICAgIGlmIChfX3Bvc2l0aW9uID09IF9f
aSB8fCBfX3Bvc2l0aW9uID09IF9faikgcmV0dXJuOwogICAgICAgIHRoaXMtPl9NX3RyYW5zZmVy
KF9fcG9zaXRpb24sIF9faSwgX19qKTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBzcGxpY2Uo
aXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYsIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9f
bGFzdCkKICAgICAgewogICAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICAgIHRo
aXMtPl9NX3RyYW5zZmVyKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIH0KCiAg
ICAgIHZvaWQKICAgICAgcmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSk7CgogICAgICB2b2lkCiAg
ICAgIHVuaXF1ZSgpOwoKICAgICAgdm9pZAogICAgICBtZXJnZShsaXN0JiBfX3gpOwoKICAgICAg
dm9pZAogICAgICByZXZlcnNlKCk7CgogICAgICB2b2lkCiAgICAgIHNvcnQoKTsKCiAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICAgICAgdm9pZAogICAgICAgIHJlbW92ZV9p
ZihfUHJlZGljYXRlKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+
CiAgICAgICAgdm9pZAogICAgICAgIHVuaXF1ZShfQmluYXJ5UHJlZGljYXRlKTsKCiAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAgICAgICAgdm9pZAogICAgICAg
IG1lcmdlKGxpc3QmLCBfU3RyaWN0V2Vha09yZGVyaW5nKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAgICAgICAgdm9pZAogICAgICAgIHNvcnQoX1N0cmlj
dFdlYWtPcmRlcmluZyk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGxpc3Q8X1RwLF9B
bGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGxpc3Q8X1RwLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJh
dG9yOwogICAgICBjb25zdF9pdGVyYXRvciBfX2VuZDEgPSBfX3guZW5kKCk7CiAgICAgIGNvbnN0
X2l0ZXJhdG9yIF9fZW5kMiA9IF9feS5lbmQoKTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yIF9faTEg
PSBfX3guYmVnaW4oKTsKICAgICAgY29uc3RfaXRlcmF0b3IgX19pMiA9IF9feS5iZWdpbigpOwog
ICAgICB3aGlsZSAoX19pMSAhPSBfX2VuZDEgJiYgX19pMiAhPSBfX2VuZDIgJiYgKl9faTEgPT0g
Kl9faTIpIHsKICAgICAgICArK19faTE7CiAgICAgICAgKytfX2kyOwogICAgICB9CiAgICAgIHJl
dHVybiBfX2kxID09IF9fZW5kMSAmJiBfX2kyID09IF9fZW5kMjsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3I8KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYg
X195KQogICAgewogICAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2lu
KCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5i
ZWdpbigpLCBfX3kuZW5kKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGxpc3Q8X1Rw
LF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4g
IShfX3ggPT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYg
X194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I8PShjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gsIGNvbnN0IGxp
c3Q8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcj49KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0Fs
bG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAobGlzdDxf
VHAsIF9BbGxvYz4mIF9feCwgbGlzdDxfVHAsIF9BbGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAo
X195KTsgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAg
dm9pZCBfTGlzdF9iYXNlPF9UcCxfQWxsb2M+OjoKICAgIGNsZWFyKCkKICAgIHsKICAgICAgX0xp
c3Rfbm9kZTxfVHA+KiBfX2N1ciA9IHN0YXRpY19jYXN0PF9MaXN0X25vZGU8X1RwPio+KF9NX25v
ZGUtPl9NX25leHQpOwogICAgICB3aGlsZSAoX19jdXIgIT0gX01fbm9kZSkgewogICAgICAgIF9M
aXN0X25vZGU8X1RwPiogX190bXAgPSBfX2N1cjsKICAgICAgICBfX2N1ciA9IHN0YXRpY19jYXN0
PF9MaXN0X25vZGU8X1RwPio+KF9fY3VyLT5fTV9uZXh0KTsKICAgICAgICBfRGVzdHJveSgmX190
bXAtPl9NX2RhdGEpOwogICAgICAgIF9NX3B1dF9ub2RlKF9fdG1wKTsKICAgICAgfQogICAgICBf
TV9ub2RlLT5fTV9uZXh0ID0gX01fbm9kZTsKICAgICAgX01fbm9kZS0+X01fcHJldiA9IF9NX25v
ZGU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxv
Yz46OgogICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3NpdGlvbiwgX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICAgIHsKICAgICAgICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgICBpbnNlcnQoX19wb3NpdGlv
biwgKl9fZmlyc3QpOwoKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgX01fZmlsbF9pbnNlcnQo
aXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7
CiAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24pCiAgICAgICAgaW5zZXJ0KF9fcG9zaXRpb24s
IF9feCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdHlwZW5hbWUgbGlzdDxfVHAsX0FsbG9jPjo6aXRlcmF0b3IgbGlzdDxfVHAsIF9BbGxvYz46
OgogICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgewogICAg
ICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgZXJhc2UoX19maXJzdCsrKTsKICAg
ICAgcmV0dXJuIF9fbGFzdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgIHJlc2l6ZShzaXplX3R5
cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9faSA9
IGJlZ2luKCk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgICAgIGZvciAoIDsgX19pICE9
IGVuZCgpICYmIF9fbGVuIDwgX19uZXdfc2l6ZTsgKytfX2ksICsrX19sZW4pCiAgICAgICAgOwog
ICAgICBpZiAoX19sZW4gPT0gX19uZXdfc2l6ZSkKICAgICAgICBlcmFzZShfX2ksIGVuZCgpKTsK
ICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIF9fbGVuLCBfX3gp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGxp
c3Q8X1RwLCBfQWxsb2M+JiBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICBvcGVyYXRvcj0oY29uc3Qg
bGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKICAgIHsKICAgICAgaWYgKHRoaXMgIT0gJl9feCkgewog
ICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xh
c3QxID0gZW5kKCk7CiAgICAgICAgY29uc3RfaXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4o
KTsKICAgICAgICBjb25zdF9pdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwogICAgICAgIHdo
aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAg
ICAqX19maXJzdDErKyA9ICpfX2ZpcnN0MisrOwogICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xh
c3QyKQogICAgICAgICAgZXJhc2UoX19maXJzdDEsIF9fbGFzdDEpOwogICAgICAgIGVsc2UKICAg
ICAgICAgIGluc2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgIH0KICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgX01fZmlsbF9hc3NpZ24oc2l6
ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgewogICAgICBpdGVyYXRvciBfX2kgPSBiZWdp
bigpOwogICAgICBmb3IgKCA7IF9faSAhPSBlbmQoKSAmJiBfX24gPiAwOyArK19faSwgLS1fX24p
CiAgICAgICAgKl9faSA9IF9fdmFsOwogICAgICBpZiAoX19uID4gMCkKICAgICAgICBpbnNlcnQo
ZW5kKCksIF9fbiwgX192YWwpOwogICAgICBlbHNlCiAgICAgICAgZXJhc2UoX19pLCBlbmQoKSk7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVt
cGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46
OgogICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0MiwgX0lucHV0SXRl
ciBfX2xhc3QyLCBfX2ZhbHNlX3R5cGUpCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0
MSA9IGJlZ2luKCk7CiAgICAgICAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogICAgICAgIGZv
ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOyArK19fZmly
c3QxLCArK19fZmlyc3QyKQogICAgICAgICAgKl9fZmlyc3QxID0gKl9fZmlyc3QyOwogICAgICAg
IGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgICAgZXJhc2UoX19maXJzdDEsIF9fbGFz
dDEpOwogICAgICAgIGVsc2UKICAgICAgICAgIGluc2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19s
YXN0Mik7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgIHJlbW92ZShjb25zdCBfVHAmIF9fdmFs
dWUpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogICAgICBpdGVyYXRv
ciBfX2xhc3QgPSBlbmQoKTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAg
ICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAgICArK19fbmV4dDsKICAgICAgICBp
ZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkgZXJhc2UoX19maXJzdCk7CiAgICAgICAgX19maXJzdCA9
IF9fbmV4dDsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgdW5pcXVlKCkKICAgIHsK
ICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9
IGVuZCgpOwogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICAgICAgaXRlcmF0
b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkgewog
ICAgICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICAgICAgZXJhc2UoX19uZXh0KTsK
ICAgICAgICBlbHNlCiAgICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICAgIF9fbmV4dCA9
IF9fZmlyc3Q7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgIG1lcmdlKGxpc3Q8X1Rw
LCBfQWxsb2M+JiBfX3gpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsK
ICAgICAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogICAgICBpdGVyYXRvciBfX2ZpcnN0MiA9
IF9feC5iZWdpbigpOwogICAgICBpdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwogICAgICB3
aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAg
IGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9
IF9fZmlyc3QyOwogICAgICAgICAgX01fdHJhbnNmZXIoX19maXJzdDEsIF9fZmlyc3QyLCArK19f
bmV4dCk7CiAgICAgICAgICBfX2ZpcnN0MiA9IF9fbmV4dDsKICAgICAgICB9CiAgICAgICAgZWxz
ZQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIpIF9N
X3RyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgIH0KCiAgaW5saW5lIHZv
aWQKICBfX0xpc3RfYmFzZV9yZXZlcnNlKF9MaXN0X25vZGVfYmFzZSogX19wKQogIHsKICAgIF9M
aXN0X25vZGVfYmFzZSogX190bXAgPSBfX3A7CiAgICBkbyB7CiAgICAgIHN0ZDo6c3dhcChfX3Rt
cC0+X01fbmV4dCwgX190bXAtPl9NX3ByZXYpOwogICAgICBfX3RtcCA9IF9fdG1wLT5fTV9wcmV2
OwogICAgfSB3aGlsZSAoX190bXAgIT0gX19wKTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0FsbG9jPgogIGlubGluZSB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICBy
ZXZlcnNlKCkKICB7IF9fTGlzdF9iYXNlX3JldmVyc2UodGhpcy0+X01fbm9kZSk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGxpc3Q8X1RwLCBf
QWxsb2M+OjoKICAgIHNvcnQoKQogICAgewoKICAgICAgaWYgKF9NX25vZGUtPl9NX25leHQgIT0g
X01fbm9kZSAmJiBfTV9ub2RlLT5fTV9uZXh0LT5fTV9uZXh0ICE9IF9NX25vZGUpIHsKICAgICAg
ICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5OwogICAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9f
Y291bnRlcls2NF07CiAgICAgICAgaW50IF9fZmlsbCA9IDA7CiAgICAgICAgd2hpbGUgKCFlbXB0
eSgpKSB7CiAgICAgICAgICBfX2NhcnJ5LnNwbGljZShfX2NhcnJ5LmJlZ2luKCksICp0aGlzLCBi
ZWdpbigpKTsKICAgICAgICAgIGludCBfX2kgPSAwOwogICAgICAgICAgd2hpbGUoX19pIDwgX19m
aWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAgICAgICAgIF9fY291bnRlcltf
X2ldLm1lcmdlKF9fY2FycnkpOwogICAgICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19f
aSsrXSk7CiAgICAgICAgICB9CiAgICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0p
OwogICAgICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpICsrX19maWxsOwogICAgICAgIH0KCiAgICAg
ICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19maWxsOyArK19faSkKICAgICAgICAgIF9fY291
bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltfX2ktMV0pOwogICAgICAgIHN3YXAoX19jb3VudGVy
W19fZmlsbC0xXSk7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgICAgdm9p
ZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICAgIHJlbW92ZV9pZihfUHJlZGljYXRlIF9fcHJlZCkK
ICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogICAgICAgIGl0ZXJh
dG9yIF9fbGFzdCA9IGVuZCgpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog
ICAgICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAgICAgICsrX19uZXh0Owog
ICAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIGVyYXNlKF9fZmlyc3QpOwogICAgICAgICAg
X19maXJzdCA9IF9fbmV4dDsKICAgICAgICB9CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JpbmFyeVByZWRp
Y2F0ZT4KICAgICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICAgIHVuaXF1ZShfQmluYXJ5
UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0
ID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICAgICAgICBpZiAo
X19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2Zp
cnN0OwogICAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgICAgICAgIGlmIChf
X2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKICAgICAgICAgICAgZXJhc2UoX19uZXh0
KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgICAg
IF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgICAgfQogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9TdHJpY3RXZWFr
T3JkZXJpbmc+CiAgICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgICBtZXJnZShsaXN0
PF9UcCwgX0FsbG9jPiYgX194LCBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKICAgICAgewog
ICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xh
c3QxID0gZW5kKCk7CiAgICAgICAgaXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsKICAg
ICAgICBpdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgICBpZiAoX19jb21w
KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgICBpdGVyYXRvciBfX25leHQgPSBf
X2ZpcnN0MjsKICAgICAgICAgICAgX01fdHJhbnNmZXIoX19maXJzdDEsIF9fZmlyc3QyLCArK19f
bmV4dCk7CiAgICAgICAgICAgIF9fZmlyc3QyID0gX19uZXh0OwogICAgICAgICAgfQogICAgICAg
ICAgZWxzZQogICAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGlmIChfX2ZpcnN0MiAhPSBf
X2xhc3QyKSBfTV90cmFuc2ZlcihfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmluZz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46
OgogICAgc29ydChfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKICAgIHsKCiAgICAgIGlmIChf
TV9ub2RlLT5fTV9uZXh0ICE9IF9NX25vZGUgJiYgX01fbm9kZS0+X01fbmV4dC0+X01fbmV4dCAh
PSBfTV9ub2RlKSB7CiAgICAgICAgbGlzdDxfVHAsIF9BbGxvYz4gX19jYXJyeTsKICAgICAgICBs
aXN0PF9UcCwgX0FsbG9jPiBfX2NvdW50ZXJbNjRdOwogICAgICAgIGludCBfX2ZpbGwgPSAwOwog
ICAgICAgIHdoaWxlICghZW1wdHkoKSkgewogICAgICAgICAgX19jYXJyeS5zcGxpY2UoX19jYXJy
eS5iZWdpbigpLCAqdGhpcywgYmVnaW4oKSk7CiAgICAgICAgICBpbnQgX19pID0gMDsKICAgICAg
ICAgIHdoaWxlKF9faSA8IF9fZmlsbCAmJiAhX19jb3VudGVyW19faV0uZW1wdHkoKSkgewogICAg
ICAgICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NhcnJ5LCBfX2NvbXApOwogICAgICAgICAg
ICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faSsrXSk7CiAgICAgICAgICB9CiAgICAgICAgICBf
X2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0pOwogICAgICAgICAgaWYgKF9faSA9PSBfX2ZpbGwp
ICsrX19maWxsOwogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19m
aWxsOyArK19faSkKICAgICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltfX2kt
MV0sIF9fY29tcCk7CiAgICAgICAgc3dhcChfX2NvdW50ZXJbX19maWxsLTFdKTsKICAgICAgfQog
ICAgfQoKfQojIDcyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saXN0IiAyIDMKIyA1MCAiL3Vzci9s
b2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3F2YWx1ZWxpc3QuaCIgMgojIDU4ICIvdXNy
L2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXZhbHVlbGlzdC5oIgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4KY2xhc3MgUVZhbHVlTGlzdE5vZGUKewpwdWJsaWM6CiAgICBRVmFsdWVMaXN0Tm9k
ZSggY29uc3QgVCYgdCApIDogZGF0YSggdCApIHsgfQogICAgUVZhbHVlTGlzdE5vZGUoKSB7IH0K
CgoKCgogICAgUVZhbHVlTGlzdE5vZGU8VD4qIG5leHQ7CiAgICBRVmFsdWVMaXN0Tm9kZTxUPiog
cHJldjsKICAgIFQgZGF0YTsKfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIFFWYWx1ZUxpc3RJ
dGVyYXRvcgp7CiBwdWJsaWM6CgoKCiAgICB0eXBlZGVmIFFWYWx1ZUxpc3ROb2RlPFQ+KiBOb2Rl
UHRyOwoKICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRv
cl9jYXRlZ29yeTsKCiAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgc2l6ZV90
IHNpemVfdHlwZTsKCiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgoKCiAg
ICB0eXBlZGVmIFQqIHBvaW50ZXI7CiAgICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKCgoKCiAgICBO
b2RlUHRyIG5vZGU7CgoKCgogICAgUVZhbHVlTGlzdEl0ZXJhdG9yKCkgOiBub2RlKCAwICkge30K
ICAgIFFWYWx1ZUxpc3RJdGVyYXRvciggTm9kZVB0ciBwICkgOiBub2RlKCBwICkge30KICAgIFFW
YWx1ZUxpc3RJdGVyYXRvciggY29uc3QgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBpdCApIDogbm9k
ZSggaXQubm9kZSApIHt9CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRVmFsdWVMaXN0SXRl
cmF0b3I8VD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9kZSA9PSBpdC5ub2RlOyB9CiAgICBib29s
IG9wZXJhdG9yIT0oIGNvbnN0IFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgaXQgKSBjb25zdCB7IHJl
dHVybiBub2RlICE9IGl0Lm5vZGU7IH0KICAgIGNvbnN0IFQmIG9wZXJhdG9yKigpIGNvbnN0IHsg
cmV0dXJuIG5vZGUtPmRhdGE7IH0KICAgIFQmIG9wZXJhdG9yKigpIHsgcmV0dXJuIG5vZGUtPmRh
dGE7IH0KCgoKICAgIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgb3BlcmF0b3IrKygpIHsKICAgICAg
ICBub2RlID0gbm9kZS0+bmV4dDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZh
bHVlTGlzdEl0ZXJhdG9yPFQ+IG9wZXJhdG9yKysoaW50KSB7CiAgICAgICAgUVZhbHVlTGlzdEl0
ZXJhdG9yPFQ+IHRtcCA9ICp0aGlzOwogICAgICAgIG5vZGUgPSBub2RlLT5uZXh0OwogICAgICAg
IHJldHVybiB0bXA7CiAgICB9CgogICAgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBvcGVyYXRvci0t
KCkgewogICAgICAgIG5vZGUgPSBub2RlLT5wcmV2OwogICAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgICBRVmFsdWVMaXN0SXRlcmF0b3I8VD4gb3BlcmF0b3ItLShpbnQpIHsKICAgICAgICBR
VmFsdWVMaXN0SXRlcmF0b3I8VD4gdG1wID0gKnRoaXM7CiAgICAgICAgbm9kZSA9IG5vZGUtPnBy
ZXY7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgIH0KfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNz
IFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yCnsKIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgUVZhbHVl
TGlzdE5vZGU8VD4qIE5vZGVQdHI7CgogICAgdHlwZWRlZiBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwog
ICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwoKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl
cmVuY2VfdHlwZTsKCgoKICAgIHR5cGVkZWYgY29uc3QgVCogcG9pbnRlcjsKICAgIHR5cGVkZWYg
Y29uc3QgVCYgcmVmZXJlbmNlOwoKCgoKICAgIE5vZGVQdHIgbm9kZTsKCgoKCiAgICBRVmFsdWVM
aXN0Q29uc3RJdGVyYXRvcigpIDogbm9kZSggMCApIHt9CiAgICBRVmFsdWVMaXN0Q29uc3RJdGVy
YXRvciggTm9kZVB0ciBwICkgOiBub2RlKCBwICkge30KICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJh
dG9yKCBjb25zdCBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiYgaXQgKSA6IG5vZGUoIGl0Lm5v
ZGUgKSB7fQogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3IoIGNvbnN0IFFWYWx1ZUxpc3RJdGVy
YXRvcjxUPiYgaXQgKSA6IG5vZGUoIGl0Lm5vZGUgKSB7fQoKICAgIGJvb2wgb3BlcmF0b3I9PSgg
Y29uc3QgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9k
ZSA9PSBpdC5ub2RlOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFWYWx1ZUxpc3RDb25z
dEl0ZXJhdG9yPFQ+JiBpdCApIGNvbnN0IHsgcmV0dXJuIG5vZGUgIT0gaXQubm9kZTsgfQogICAg
Y29uc3QgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbm9kZS0+ZGF0YTsgfQoKCgogICAg
UVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4mIG9wZXJhdG9yKysoKSB7CiAgICAgICAgbm9kZSA9
IG5vZGUtPm5leHQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFWYWx1ZUxpc3RD
b25zdEl0ZXJhdG9yPFQ+IG9wZXJhdG9yKysoaW50KSB7CiAgICAgICAgUVZhbHVlTGlzdENvbnN0
SXRlcmF0b3I8VD4gdG1wID0gKnRoaXM7CiAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7CiAgICAg
ICAgcmV0dXJuIHRtcDsKICAgIH0KCiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiYgb3Bl
cmF0b3ItLSgpIHsKICAgICAgICBub2RlID0gbm9kZS0+cHJldjsKICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gb3BlcmF0b3ItLShpbnQp
IHsKICAgICAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiB0bXAgPSAqdGhpczsKICAgICAg
ICBub2RlID0gbm9kZS0+cHJldjsKICAgICAgICByZXR1cm4gdG1wOwogICAgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIFQ+CmNsYXNzIFFWYWx1ZUxpc3RQcml2YXRlCiAgICA6IHB1YmxpYyBRU2hhcmVk
CnsKcHVibGljOgoKCgogICAgdHlwZWRlZiBRVmFsdWVMaXN0SXRlcmF0b3I8VD4gSXRlcmF0b3I7
CiAgICB0eXBlZGVmIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+IENvbnN0SXRlcmF0b3I7CiAg
ICB0eXBlZGVmIFFWYWx1ZUxpc3ROb2RlPFQ+IE5vZGU7CiAgICB0eXBlZGVmIFFWYWx1ZUxpc3RO
b2RlPFQ+KiBOb2RlUHRyOwogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwoKCgoKICAgIFFW
YWx1ZUxpc3RQcml2YXRlKCk7CiAgICBRVmFsdWVMaXN0UHJpdmF0ZSggY29uc3QgUVZhbHVlTGlz
dFByaXZhdGU8VD4mIF9wICk7CgogICAgdm9pZCBkZXJlZkFuZERlbGV0ZSgpCiAgICB7CiAgICAg
ICAgaWYgKCBkZXJlZigpICkKICAgICAgICAgICAgZGVsZXRlIHRoaXM7CiAgICB9CgoKCgoKICAg
IH5RVmFsdWVMaXN0UHJpdmF0ZSgpOwoKICAgIEl0ZXJhdG9yIGluc2VydCggSXRlcmF0b3IgaXQs
IGNvbnN0IFQmIHggKTsKICAgIEl0ZXJhdG9yIHJlbW92ZSggSXRlcmF0b3IgaXQgKTsKICAgIE5v
ZGVQdHIgZmluZCggTm9kZVB0ciBzdGFydCwgY29uc3QgVCYgeCApIGNvbnN0OwogICAgaW50IGZp
bmRJbmRleCggTm9kZVB0ciBzdGFydCwgY29uc3QgVCYgeCApIGNvbnN0OwogICAgdWludCBjb250
YWlucyggY29uc3QgVCYgeCApIGNvbnN0OwogICAgdWludCByZW1vdmUoIGNvbnN0IFQmIHggKTsK
ICAgIE5vZGVQdHIgYXQoIHNpemVfdHlwZSBpICkgY29uc3Q7CiAgICB2b2lkIGNsZWFyKCk7Cgog
ICAgTm9kZVB0ciBub2RlOwogICAgc2l6ZV90eXBlIG5vZGVzOwp9OwoKdGVtcGxhdGUgPGNsYXNz
IFQ+CiBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6UVZhbHVlTGlzdFByaXZhdGUoKQp7CiAgICBub2Rl
ID0gbmV3IE5vZGU7IG5vZGUtPm5leHQgPSBub2RlLT5wcmV2ID0gbm9kZTsgbm9kZXMgPSAwOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpRVmFsdWVMaXN0UHJp
dmF0ZSggY29uc3QgUVZhbHVlTGlzdFByaXZhdGU8VD4mIF9wICkKICAgIDogUVNoYXJlZCgpCnsK
ICAgIG5vZGUgPSBuZXcgTm9kZTsgbm9kZS0+bmV4dCA9IG5vZGUtPnByZXYgPSBub2RlOyBub2Rl
cyA9IDA7CiAgICBJdGVyYXRvciBiKCBfcC5ub2RlLT5uZXh0ICk7CiAgICBJdGVyYXRvciBlKCBf
cC5ub2RlICk7CiAgICBJdGVyYXRvciBpKCBub2RlICk7CiAgICB3aGlsZSggYiAhPSBlICkKICAg
ICAgICBpbnNlcnQoIGksICpiKysgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiBRVmFsdWVMaXN0
UHJpdmF0ZTxUPjo6flFWYWx1ZUxpc3RQcml2YXRlKCkgewogICAgTm9kZVB0ciBwID0gbm9kZS0+
bmV4dDsKICAgIHdoaWxlKCBwICE9IG5vZGUgKSB7CiAgICAgICAgTm9kZVB0ciB4ID0gcC0+bmV4
dDsKICAgICAgICBkZWxldGUgcDsKICAgICAgICBwID0geDsKICAgIH0KICAgIGRlbGV0ZSBub2Rl
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHR5cGVuYW1lIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpJ
dGVyYXRvciBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6aW5zZXJ0KCB0eXBlbmFtZSBRVmFsdWVMaXN0
UHJpdmF0ZTxUPjo6SXRlcmF0b3IgaXQsIGNvbnN0IFQmIHggKQp7CiAgICBOb2RlUHRyIHAgPSBu
ZXcgTm9kZSggeCApOwogICAgcC0+bmV4dCA9IGl0Lm5vZGU7CiAgICBwLT5wcmV2ID0gaXQubm9k
ZS0+cHJldjsKICAgIGl0Lm5vZGUtPnByZXYtPm5leHQgPSBwOwogICAgaXQubm9kZS0+cHJldiA9
IHA7CiAgICBub2RlcysrOwogICAgcmV0dXJuIHA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogdHlw
ZW5hbWUgUVZhbHVlTGlzdFByaXZhdGU8VD46Okl0ZXJhdG9yIFFWYWx1ZUxpc3RQcml2YXRlPFQ+
OjpyZW1vdmUoIHR5cGVuYW1lIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpJdGVyYXRvciBpdCApCnsK
ICAgICgoaXQubm9kZSAhPSBub2RlKSA/ICh2b2lkKTAgOiBxV2FybmluZygiQVNTRVJUOiBcIiVz
XCIgaW4gJXMgKCVkKSIsIml0Lm5vZGUgIT0gbm9kZSIsIi91c3IvbG9jYWwvcXQteDExLWZyZWUt
My4wLjYvaW5jbHVkZS9xdmFsdWVsaXN0LmgiLDI4OSkpOwogICAgTm9kZVB0ciBuZXh0ID0gaXQu
bm9kZS0+bmV4dDsKICAgIE5vZGVQdHIgcHJldiA9IGl0Lm5vZGUtPnByZXY7CiAgICBwcmV2LT5u
ZXh0ID0gbmV4dDsKICAgIG5leHQtPnByZXYgPSBwcmV2OwogICAgZGVsZXRlIGl0Lm5vZGU7CiAg
ICBub2Rlcy0tOwogICAgcmV0dXJuIEl0ZXJhdG9yKCBuZXh0ICk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBUPgogdHlwZW5hbWUgUVZhbHVlTGlzdFByaXZhdGU8VD46Ok5vZGVQdHIgUVZhbHVlTGlzdFBy
aXZhdGU8VD46OmZpbmQoIHR5cGVuYW1lIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpOb2RlUHRyIHN0
YXJ0LCBjb25zdCBUJiB4ICkgY29uc3QKewogICAgQ29uc3RJdGVyYXRvciBmaXJzdCggc3RhcnQg
KTsKICAgIENvbnN0SXRlcmF0b3IgbGFzdCggbm9kZSApOwogICAgd2hpbGUoIGZpcnN0ICE9IGxh
c3QpIHsKICAgICAgICBpZiAoICpmaXJzdCA9PSB4ICkKICAgICAgICAgICAgcmV0dXJuIGZpcnN0
Lm5vZGU7CiAgICAgICAgKytmaXJzdDsKICAgIH0KICAgIHJldHVybiBsYXN0Lm5vZGU7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBUPgogaW50IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpmaW5kSW5kZXgoIHR5
cGVuYW1lIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpOb2RlUHRyIHN0YXJ0LCBjb25zdCBUJiB4ICkg
Y29uc3QKewogICAgQ29uc3RJdGVyYXRvciBmaXJzdCggc3RhcnQgKTsKICAgIENvbnN0SXRlcmF0
b3IgbGFzdCggbm9kZSApOwogICAgaW50IHBvcyA9IDA7CiAgICB3aGlsZSggZmlyc3QgIT0gbGFz
dCkgewogICAgICAgIGlmICggKmZpcnN0ID09IHggKQogICAgICAgICAgICByZXR1cm4gcG9zOwog
ICAgICAgICsrZmlyc3Q7CiAgICAgICAgKytwb3M7CiAgICB9CiAgICByZXR1cm4gLTE7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBUPgogdWludCBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6Y29udGFpbnMoIGNv
bnN0IFQmIHggKSBjb25zdAp7CiAgICB1aW50IHJlc3VsdCA9IDA7CiAgICBJdGVyYXRvciBmaXJz
dCA9IEl0ZXJhdG9yKCBub2RlLT5uZXh0ICk7CiAgICBJdGVyYXRvciBsYXN0ID0gSXRlcmF0b3Io
IG5vZGUgKTsKICAgIHdoaWxlKCBmaXJzdCAhPSBsYXN0KSB7CiAgICAgICAgaWYgKCAqZmlyc3Qg
PT0geCApCiAgICAgICAgICAgICsrcmVzdWx0OwogICAgICAgICsrZmlyc3Q7CiAgICB9CiAgICBy
ZXR1cm4gcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHVpbnQgUVZhbHVlTGlzdFByaXZh
dGU8VD46OnJlbW92ZSggY29uc3QgVCYgeCApCnsKICAgIHVpbnQgcmVzdWx0ID0gMDsKICAgIEl0
ZXJhdG9yIGZpcnN0ID0gSXRlcmF0b3IoIG5vZGUtPm5leHQgKTsKICAgIEl0ZXJhdG9yIGxhc3Qg
PSBJdGVyYXRvciggbm9kZSApOwogICAgd2hpbGUoIGZpcnN0ICE9IGxhc3QpIHsKICAgICAgICBp
ZiAoICpmaXJzdCA9PSB4ICkgewogICAgICAgICAgICBmaXJzdCA9IHJlbW92ZSggZmlyc3QgKTsK
ICAgICAgICAgICAgKytyZXN1bHQ7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICsrZmlyc3Q7
CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHR5cGVuYW1l
IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpOb2RlUHRyIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjphdCgg
c2l6ZV90eXBlIGkgKSBjb25zdAp7CiAgICAoKGkgPD0gbm9kZXMpID8gKHZvaWQpMCA6IHFXYXJu
aW5nKCJBU1NFUlQ6IFwiJXNcIiBpbiAlcyAoJWQpIiwiaSA8PSBub2RlcyIsIi91c3IvbG9jYWwv
cXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xdmFsdWVsaXN0LmgiLDM2MCkpOwogICAgTm9kZVB0
ciBwID0gbm9kZS0+bmV4dDsKICAgIGZvciggc2l6ZV90eXBlIHggPSAwOyB4IDwgaTsgKyt4ICkK
ICAgICAgICBwID0gcC0+bmV4dDsKICAgIHJldHVybiBwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4K
IHZvaWQgUVZhbHVlTGlzdFByaXZhdGU8VD46OmNsZWFyKCkKewogICAgbm9kZXMgPSAwOwogICAg
Tm9kZVB0ciBwID0gbm9kZS0+bmV4dDsKICAgIHdoaWxlKCBwICE9IG5vZGUgKSB7CiAgICAgICAg
Tm9kZVB0ciBuZXh0ID0gcC0+bmV4dDsKICAgICAgICBkZWxldGUgcDsKICAgICAgICBwID0gbmV4
dDsKICAgIH0KICAgIG5vZGUtPm5leHQgPSBub2RlLT5wcmV2ID0gbm9kZTsKfQojIDM5MyAiL3Vz
ci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3F2YWx1ZWxpc3QuaCIKdGVtcGxhdGUg
PGNsYXNzIFQ+CmNsYXNzIFFWYWx1ZUxpc3QKewpwdWJsaWM6CgoKCiAgICB0eXBlZGVmIFFWYWx1
ZUxpc3RJdGVyYXRvcjxUPiBpdGVyYXRvcjsKICAgIHR5cGVkZWYgUVZhbHVlTGlzdENvbnN0SXRl
cmF0b3I8VD4gY29uc3RfaXRlcmF0b3I7CiAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKICAgIHR5
cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSog
Y29uc3RfcG9pbnRlcjsKICAgIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogICAgdHlw
ZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgICB0eXBlZGVmIHNpemVf
dCBzaXplX3R5cGU7CgogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKCgoK
CgoKICAgIFFWYWx1ZUxpc3QoKSB7IHNoID0gbmV3IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OyB9CiAg
ICBRVmFsdWVMaXN0KCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBsICkgeyBzaCA9IGwuc2g7IHNoLT5y
ZWYoKTsgfQoKCgoKCiAgICBRVmFsdWVMaXN0KCBjb25zdCB0eXBlbmFtZSBzdGQ6Omxpc3Q8VD4m
IGwgKQogICAgewogICAgICAgIHNoID0gbmV3IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OwogICAgICAg
IHFDb3B5KCBsLmJlZ2luKCksIGwuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlciggKnRoaXMgKSAp
OwogICAgfQoKICAgIH5RVmFsdWVMaXN0KCkgeyBzaC0+ZGVyZWZBbmREZWxldGUoKTsgfQoKICAg
IFFWYWx1ZUxpc3Q8VD4mIG9wZXJhdG9yPSAoIGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKQogICAg
ewogICAgICAgIGwuc2gtPnJlZigpOwogICAgICAgIHNoLT5kZXJlZkFuZERlbGV0ZSgpOwogICAg
ICAgIHNoID0gbC5zaDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlz
dDxUPiYgb3BlcmF0b3I9ICggY29uc3QgdHlwZW5hbWUgc3RkOjpsaXN0PFQ+JiBsICkKICAgIHsK
ICAgICAgICBkZXRhY2goKTsKICAgICAgICBxQ29weSggbC5iZWdpbigpLCBsLmVuZCgpLCBzdGQ6
OmJhY2tfaW5zZXJ0ZXIoICp0aGlzICkgKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAg
ICBib29sIG9wZXJhdG9yPT0gKCBjb25zdCB0eXBlbmFtZSBzdGQ6Omxpc3Q8VD4mIGwgKSBjb25z
dAogICAgewogICAgICAgIGlmICggc2l6ZSgpICE9IGwuc2l6ZSgpICkKICAgICAgICAgICAgcmV0
dXJuIEZBTFNFOwogICAgICAgIGNvbnN0X2l0ZXJhdG9yIGl0MiA9IGJlZ2luKCk7CgogICAgICAg
IHR5cGVuYW1lCgogICAgICAgIHN0ZDo6bGlzdDxUPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsLmJl
Z2luKCk7CiAgICAgICAgZm9yICggOyBpdDIgIT0gZW5kKCk7ICsraXQyLCArK2l0ICkKICAgICAg
ICBpZiAoICEoKCppdDIpID09ICgqaXQpKSApCiAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAg
ICAgICByZXR1cm4gVFJVRTsKICAgIH0KCgoKCgogICAgYm9vbCBvcGVyYXRvcj09ICggY29uc3Qg
UVZhbHVlTGlzdDxUPiYgbCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9ICggY29uc3QgUVZh
bHVlTGlzdDxUPiYgbCApIGNvbnN0IHsgcmV0dXJuICEoICp0aGlzID09IGwgKTsgfQogICAgaXRl
cmF0b3IgYmVnaW4oKSB7IGRldGFjaCgpOyByZXR1cm4gaXRlcmF0b3IoIHNoLT5ub2RlLT5uZXh0
ICk7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRl
cmF0b3IoIHNoLT5ub2RlLT5uZXh0ICk7IH0KICAgIGl0ZXJhdG9yIGVuZCgpIHsgZGV0YWNoKCk7
IHJldHVybiBpdGVyYXRvciggc2gtPm5vZGUgKTsgfQogICAgY29uc3RfaXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoIHNoLT5ub2RlICk7IH0KICAgIGl0ZXJhdG9y
IGluc2VydCggaXRlcmF0b3IgaXQsIGNvbnN0IFQmIHggKSB7IGRldGFjaCgpOyByZXR1cm4gc2gt
Pmluc2VydCggaXQsIHggKTsgfQogICAgdWludCByZW1vdmUoIGNvbnN0IFQmIHggKSB7IGRldGFj
aCgpOyByZXR1cm4gc2gtPnJlbW92ZSggeCApOyB9CiAgICB2b2lkIGNsZWFyKCk7CgogICAgUVZh
bHVlTGlzdDxUPiYgb3BlcmF0b3I8PCAoIGNvbnN0IFQmIHggKQogICAgewogICAgICAgIGFwcGVu
ZCggeCApOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBzaXplX3R5cGUgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIHNoLT5ub2RlczsgfQogICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIHNoLT5ub2RlcyA9PSAwOyB9CiAgICB2b2lkIHB1c2hfZnJvbnQoIGNvbnN0IFQmIHggKSB7
IGRldGFjaCgpOyBzaC0+aW5zZXJ0KCBiZWdpbigpLCB4ICk7IH0KICAgIHZvaWQgcHVzaF9iYWNr
KCBjb25zdCBUJiB4ICkgeyBkZXRhY2goKTsgc2gtPmluc2VydCggZW5kKCksIHggKTsgfQogICAg
aXRlcmF0b3IgZXJhc2UoIGl0ZXJhdG9yIHBvcyApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+cmVt
b3ZlKCBwb3MgKTsgfQogICAgaXRlcmF0b3IgZXJhc2UoIGl0ZXJhdG9yIGZpcnN0LCBpdGVyYXRv
ciBsYXN0ICk7CiAgICByZWZlcmVuY2UgZnJvbnQoKSB7IDsgcmV0dXJuICpiZWdpbigpOyB9CiAg
ICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IDsgcmV0dXJuICpiZWdpbigpOyB9CiAg
ICByZWZlcmVuY2UgYmFjaygpIHsgOyByZXR1cm4gKigtLWVuZCgpKTsgfQogICAgY29uc3RfcmVm
ZXJlbmNlIGJhY2soKSBjb25zdCB7IDsgcmV0dXJuICooLS1lbmQoKSk7IH0KICAgIHZvaWQgcG9w
X2Zyb250KCkgeyA7IGVyYXNlKCBiZWdpbigpICk7IH0KICAgIHZvaWQgcG9wX2JhY2soKSB7CiAg
ICAgICAgOwogICAgICAgIGl0ZXJhdG9yIHRtcCA9IGVuZCgpOwogICAgICAgIGVyYXNlKCAtLXRt
cCApOwogICAgfQogICAgdm9pZCBpbnNlcnQoIGl0ZXJhdG9yIHBvcywgc2l6ZV90eXBlIG4sIGNv
bnN0IFQmIHggKTsKIyA1MDggIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9x
dmFsdWVsaXN0LmgiCiAgICBRVmFsdWVMaXN0PFQ+IG9wZXJhdG9yKyAoIGNvbnN0IFFWYWx1ZUxp
c3Q8VD4mIGwgKSBjb25zdDsKICAgIFFWYWx1ZUxpc3Q8VD4mIG9wZXJhdG9yKz0gKCBjb25zdCBR
VmFsdWVMaXN0PFQ+JiBsICk7CgogICAgaXRlcmF0b3IgZnJvbUxhc3QoKSB7IGRldGFjaCgpOyBy
ZXR1cm4gaXRlcmF0b3IoIHNoLT5ub2RlLT5wcmV2ICk7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGZy
b21MYXN0KCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoIHNoLT5ub2RlLT5wcmV2ICk7
IH0KCiAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAoIHNoLT5ub2RlcyA9PSAwICk7
IH0KCiAgICBpdGVyYXRvciBhcHBlbmQoIGNvbnN0IFQmIHggKSB7IGRldGFjaCgpOyByZXR1cm4g
c2gtPmluc2VydCggZW5kKCksIHggKTsgfQogICAgaXRlcmF0b3IgcHJlcGVuZCggY29uc3QgVCYg
eCApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+aW5zZXJ0KCBiZWdpbigpLCB4ICk7IH0KCiAgICBp
dGVyYXRvciByZW1vdmUoIGl0ZXJhdG9yIGl0ICkgeyBkZXRhY2goKTsgcmV0dXJuIHNoLT5yZW1v
dmUoIGl0ICk7IH0KCiAgICBUJiBmaXJzdCgpIHsgOyBkZXRhY2goKTsgcmV0dXJuIHNoLT5ub2Rl
LT5uZXh0LT5kYXRhOyB9CiAgICBjb25zdCBUJiBmaXJzdCgpIGNvbnN0IHsgOyByZXR1cm4gc2gt
Pm5vZGUtPm5leHQtPmRhdGE7IH0KICAgIFQmIGxhc3QoKSB7IDsgZGV0YWNoKCk7IHJldHVybiBz
aC0+bm9kZS0+cHJldi0+ZGF0YTsgfQogICAgY29uc3QgVCYgbGFzdCgpIGNvbnN0IHsgOyByZXR1
cm4gc2gtPm5vZGUtPnByZXYtPmRhdGE7IH0KCiAgICBUJiBvcGVyYXRvcltdICggc2l6ZV90eXBl
IGkgKSB7IDsgZGV0YWNoKCk7IHJldHVybiBzaC0+YXQoaSktPmRhdGE7IH0KICAgIGNvbnN0IFQm
IG9wZXJhdG9yW10gKCBzaXplX3R5cGUgaSApIGNvbnN0IHsgOyByZXR1cm4gc2gtPmF0KGkpLT5k
YXRhOyB9CiAgICBpdGVyYXRvciBhdCggc2l6ZV90eXBlIGkgKSB7IDsgZGV0YWNoKCk7IHJldHVy
biBpdGVyYXRvciggc2gtPmF0KGkpICk7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGF0KCBzaXplX3R5
cGUgaSApIGNvbnN0IHsgOyByZXR1cm4gY29uc3RfaXRlcmF0b3IoIHNoLT5hdChpKSApOyB9CiAg
ICBpdGVyYXRvciBmaW5kICggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJldHVybiBpdGVyYXRv
ciggc2gtPmZpbmQoIHNoLT5ub2RlLT5uZXh0LCB4KSApOyB9CiAgICBjb25zdF9pdGVyYXRvciBm
aW5kICggY29uc3QgVCYgeCApIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKCBzaC0+Zmlu
ZCggc2gtPm5vZGUtPm5leHQsIHgpICk7IH0KICAgIGl0ZXJhdG9yIGZpbmQgKCBpdGVyYXRvciBp
dCwgY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJldHVybiBpdGVyYXRvciggc2gtPmZpbmQoIGl0
Lm5vZGUsIHggKSApOyB9CiAgICBjb25zdF9pdGVyYXRvciBmaW5kICggY29uc3RfaXRlcmF0b3Ig
aXQsIGNvbnN0IFQmIHggKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvciggc2gtPmZpbmQo
IGl0Lm5vZGUsIHggKSApOyB9CiAgICBpbnQgZmluZEluZGV4KCBjb25zdCBUJiB4ICkgY29uc3Qg
eyByZXR1cm4gc2gtPmZpbmRJbmRleCggc2gtPm5vZGUtPm5leHQsIHgpIDsgfQogICAgc2l6ZV90
eXBlIGNvbnRhaW5zKCBjb25zdCBUJiB4ICkgY29uc3QgeyByZXR1cm4gc2gtPmNvbnRhaW5zKCB4
ICk7IH0KCiAgICBzaXplX3R5cGUgY291bnQoKSBjb25zdCB7IHJldHVybiBzaC0+bm9kZXM7IH0K
CiAgICBRVmFsdWVMaXN0PFQ+JiBvcGVyYXRvcis9ICggY29uc3QgVCYgeCApCiAgICB7CiAgICAg
ICAgYXBwZW5kKCB4ICk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogICAgdHlwZWRlZiBR
VmFsdWVMaXN0SXRlcmF0b3I8VD4gSXRlcmF0b3I7CiAgICB0eXBlZGVmIFFWYWx1ZUxpc3RDb25z
dEl0ZXJhdG9yPFQ+IENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOwoKcHJv
dGVjdGVkOgoKCgogICAgdm9pZCBkZXRhY2goKSB7IGlmICggc2gtPmNvdW50ID4gMSApIGRldGFj
aEludGVybmFsKCk7IH0KCgoKCiAgICBRVmFsdWVMaXN0UHJpdmF0ZTxUPiogc2g7Cgpwcml2YXRl
OgogICAgdm9pZCBkZXRhY2hJbnRlcm5hbCgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CiBib29s
IFFWYWx1ZUxpc3Q8VD46Om9wZXJhdG9yPT0gKCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBsICkgY29u
c3QKewogICAgaWYgKCBzaXplKCkgIT0gbC5zaXplKCkgKQogICAgICAgIHJldHVybiBGQUxTRTsK
ICAgIGNvbnN0X2l0ZXJhdG9yIGl0MiA9IGJlZ2luKCk7CiAgICBjb25zdF9pdGVyYXRvciBpdCA9
IGwuYmVnaW4oKTsKICAgIGZvciggOyBpdCAhPSBsLmVuZCgpOyArK2l0LCArK2l0MiApCiAgICAg
ICAgaWYgKCAhKCAqaXQgPT0gKml0MiApICkKICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAg
cmV0dXJuIFRSVUU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogdm9pZCBRVmFsdWVMaXN0PFQ+Ojpj
bGVhcigpCnsKICAgIGlmICggc2gtPmNvdW50ID09IDEgKSBzaC0+Y2xlYXIoKTsgZWxzZSB7IHNo
LT5kZXJlZigpOyBzaCA9IG5ldyBRVmFsdWVMaXN0UHJpdmF0ZTxUPjsgfQp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4KIHR5cGVuYW1lIFFWYWx1ZUxpc3Q8VD46Oml0ZXJhdG9yIFFWYWx1ZUxpc3Q8VD46
OmVyYXNlKCB0eXBlbmFtZSBRVmFsdWVMaXN0PFQ+OjppdGVyYXRvciBmaXJzdCwgdHlwZW5hbWUg
UVZhbHVlTGlzdDxUPjo6aXRlcmF0b3IgbGFzdCApCnsKICAgIHdoaWxlICggZmlyc3QgIT0gbGFz
dCApCiAgICAgICAgZXJhc2UoIGZpcnN0KysgKTsKICAgIHJldHVybiBsYXN0Owp9CgoKdGVtcGxh
dGUgPGNsYXNzIFQ+CiB2b2lkIFFWYWx1ZUxpc3Q8VD46Omluc2VydCggdHlwZW5hbWUgUVZhbHVl
TGlzdDxUPjo6aXRlcmF0b3IgcG9zLCBzaXplX3R5cGUgbiwgY29uc3QgVCYgeCApCnsKICAgIGZv
ciAoIDsgbiA+IDA7IC0tbiApCiAgICAgICAgaW5zZXJ0KCBwb3MsIHggKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIFQ+CiBRVmFsdWVMaXN0PFQ+IFFWYWx1ZUxpc3Q8VD46Om9wZXJhdG9yKyAoIGNvbnN0
IFFWYWx1ZUxpc3Q8VD4mIGwgKSBjb25zdAp7CiAgICBRVmFsdWVMaXN0PFQ+IGwyKCAqdGhpcyAp
OwogICAgZm9yKCBjb25zdF9pdGVyYXRvciBpdCA9IGwuYmVnaW4oKTsgaXQgIT0gbC5lbmQoKTsg
KytpdCApCiAgICAgICAgbDIuYXBwZW5kKCAqaXQgKTsKICAgIHJldHVybiBsMjsKfQoKdGVtcGxh
dGUgPGNsYXNzIFQ+CiBRVmFsdWVMaXN0PFQ+JiBRVmFsdWVMaXN0PFQ+OjpvcGVyYXRvcis9ICgg
Y29uc3QgUVZhbHVlTGlzdDxUPiYgbCApCnsKICAgIGZvciggY29uc3RfaXRlcmF0b3IgaXQgPSBs
LmJlZ2luKCk7IGl0ICE9IGwuZW5kKCk7ICsraXQgKQogICAgICAgIGFwcGVuZCggKml0ICk7CiAg
ICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogdm9pZCBRVmFsdWVMaXN0PFQ+
OjpkZXRhY2hJbnRlcm5hbCgpCnsKICAgIHNoLT5kZXJlZigpOyBzaCA9IG5ldyBRVmFsdWVMaXN0
UHJpdmF0ZTxUPiggKnNoICk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIFFEYXRhU3RyZWFtJiBv
cGVyYXRvcj4+KCBRRGF0YVN0cmVhbSYgcywgUVZhbHVlTGlzdDxUPiYgbCApCnsKICAgIGwuY2xl
YXIoKTsKICAgIFFfVUlOVDMyIGM7CiAgICBzID4+IGM7CiAgICBmb3IoIFFfVUlOVDMyIGkgPSAw
OyBpIDwgYzsgKytpICkKICAgIHsKICAgICAgICBUIHQ7CiAgICAgICAgcyA+PiB0OwogICAgICAg
IGwuYXBwZW5kKCB0ICk7CiAgICAgICAgaWYgKCBzLmF0RW5kKCkgKQogICAgICAgICAgICBicmVh
azsKICAgIH0KICAgIHJldHVybiBzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIFFEYXRhU3RyZWFt
JiBvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSYgcywgY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApCnsK
ICAgIHMgPDwgKFFfVUlOVDMyKWwuc2l6ZSgpOwogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8
VD4gaXQgPSBsLmJlZ2luKCk7CiAgICBmb3IoIDsgaXQgIT0gbC5lbmQoKTsgKytpdCApCiAgICAg
ICAgcyA8PCAqaXQ7CiAgICByZXR1cm4gczsKfQojIDQ4ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVl
LTMuMC42L2luY2x1ZGUvcW1hcC5oIiAyCgoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL21h
cCIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9jKysvMy4yL21hcCIgMwoKIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF90cmVlLmgiIDEgMwojIDkxICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF90cmVlLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgZW51bSBfUmJfdHJlZV9jb2xv
ciB7IF9NX3JlZCA9IGZhbHNlLCBfTV9ibGFjayA9IHRydWUgfTsKCiAgc3RydWN0IF9SYl90cmVl
X25vZGVfYmFzZQogIHsKICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9wdHI7
CgogICAgX1JiX3RyZWVfY29sb3IgX01fY29sb3I7CiAgICBfQmFzZV9wdHIgX01fcGFyZW50Owog
ICAgX0Jhc2VfcHRyIF9NX2xlZnQ7CiAgICBfQmFzZV9wdHIgX01fcmlnaHQ7CgogICAgc3RhdGlj
IF9CYXNlX3B0cgogICAgX1NfbWluaW11bShfQmFzZV9wdHIgX194KQogICAgewogICAgICB3aGls
ZSAoX194LT5fTV9sZWZ0ICE9IDApIF9feCA9IF9feC0+X01fbGVmdDsKICAgICAgcmV0dXJuIF9f
eDsKICAgIH0KCiAgICBzdGF0aWMgX0Jhc2VfcHRyCiAgICBfU19tYXhpbXVtKF9CYXNlX3B0ciBf
X3gpCiAgICB7CiAgICAgIHdoaWxlIChfX3gtPl9NX3JpZ2h0ICE9IDApIF9feCA9IF9feC0+X01f
cmlnaHQ7CiAgICAgIHJldHVybiBfX3g7CiAgICB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1ZhbD4KICAgIHN0cnVjdCBfUmJfdHJlZV9ub2RlIDogcHVibGljIF9SYl90cmVlX25vZGVfYmFz
ZQogICAgewogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4qIF9MaW5rX3R5cGU7CiAg
ICAgIF9WYWwgX01fdmFsdWVfZmllbGQ7CiAgICB9OwoKICBzdHJ1Y3QgX1JiX3RyZWVfYmFzZV9p
dGVyYXRvcgogIHsKICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlOjpfQmFzZV9wdHIgX0Jh
c2VfcHRyOwogICAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgICBfQmFz
ZV9wdHIgX01fbm9kZTsKCiAgICB2b2lkCiAgICBfTV9pbmNyZW1lbnQoKQogICAgewogICAgICBp
ZiAoX01fbm9kZS0+X01fcmlnaHQgIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfTV9ub2RlID0g
X01fbm9kZS0+X01fcmlnaHQ7CiAgICAgICAgICB3aGlsZSAoX01fbm9kZS0+X01fbGVmdCAhPSAw
KQogICAgICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbGVmdDsKICAgICAgICB9CiAgICAg
IGVsc2UKICAgICAgICB7CiAgICAgICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFy
ZW50OwogICAgICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5fTV9yaWdodCkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgICAgICAgX195ID0gX195
LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfTV9ub2RlLT5fTV9yaWdo
dCAhPSBfX3kpCiAgICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgfQogICAgfQoKICAg
IHZvaWQKICAgIF9NX2RlY3JlbWVudCgpCiAgICB7CiAgICAgIGlmIChfTV9ub2RlLT5fTV9jb2xv
ciA9PSBfTV9yZWQKICAgICAgICAgICYmIF9NX25vZGUtPl9NX3BhcmVudC0+X01fcGFyZW50ID09
IF9NX25vZGUpCiAgICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgICBlbHNl
IGlmIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApCiAgICAgICAgewogICAgICAgICAgX0Jhc2VfcHRy
IF9feSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICAgICAgICB3aGlsZSAoX195LT5fTV9yaWdodCAh
PSAwKQogICAgICAgICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICAgICAgX01fbm9kZSA9
IF9feTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfQmFzZV9wdHIg
X195ID0gX01fbm9kZS0+X01fcGFyZW50OwogICAgICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195
LT5fTV9sZWZ0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fbm9kZSA9IF9feTsKICAg
ICAgICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICAgICAgfQogICAgICAgICAg
X01fbm9kZSA9IF9feTsKICAgICAgICB9CiAgICB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1ZhbCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAgIHN0cnVjdCBfUmJfdHJlZV9p
dGVyYXRvciA6IHB1YmxpYyBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCiAgICB7CiAgICAgIHR5cGVk
ZWYgX1ZhbCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNlOwogICAgICB0
eXBlZGVmIF9QdHIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFs
LCBfVmFsJiwgX1ZhbCo+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9y
PF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4KICAgICAgY29uc3RfaXRlcmF0b3I7CiAg
ICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0cj4gX1NlbGY7CiAg
ICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsPiogX0xpbmtfdHlwZTsKCiAgICAgIF9SYl90
cmVlX2l0ZXJhdG9yKCkge30KICAgICAgX1JiX3RyZWVfaXRlcmF0b3IoX0xpbmtfdHlwZSBfX3gp
IHsgX01fbm9kZSA9IF9feDsgfQogICAgICBfUmJfdHJlZV9pdGVyYXRvcihjb25zdCBpdGVyYXRv
ciYgX19pdCkgeyBfTV9ub2RlID0gX19pdC5fTV9ub2RlOyB9CgogICAgICByZWZlcmVuY2UKICAg
ICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX0xpbmtfdHlwZShfTV9ub2RlKS0+X01fdmFs
dWVfZmllbGQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0
dXJuICYob3BlcmF0b3IqKCkpOyB9CgogICAgICBfU2VsZiYKICAgICAgb3BlcmF0b3IrKygpCiAg
ICAgIHsKICAgICAgICBfTV9pbmNyZW1lbnQoKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
IH0KCiAgICAgIF9TZWxmCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgX1Nl
bGYgX190bXAgPSAqdGhpczsKICAgICAgICBfTV9pbmNyZW1lbnQoKTsKICAgICAgICByZXR1cm4g
X190bXA7CiAgICAgIH0KCiAgICAgIF9TZWxmJgogICAgICBvcGVyYXRvci0tKCkgeyBfTV9kZWNy
ZW1lbnQoKTsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfU2VsZgogICAgICBvcGVyYXRvci0tKGlu
dCkKICAgICAgewogICAgICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAgICAgX01fZGVjcmVt
ZW50KCk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CiAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+
JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYs
IF9QdHI+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0o
Y29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9WYWwqPiYg
X194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwg
X1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0o
Y29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwqPiYgX194LAogICAgICAg
ICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwgY29uc3Qg
X1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgog
ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1Zh
bCwgX1JlZiwgX1B0cj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0
b3I8X1ZhbCwgX1JlZiwgX1B0cj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9f
eS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwg
Y29uc3QgX1ZhbCo+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9y
PF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9f
eS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwgX1ZhbCo+
JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0
IF9WYWwmLCBjb25zdCBfVmFsKj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9f
eS5fTV9ub2RlOyB9CgogIGlubGluZSB2b2lkCiAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX1JiX3Ry
ZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBf
UmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcmlnaHQ7CiAgICBfX3gtPl9NX3JpZ2h0
ID0gX195LT5fTV9sZWZ0OwogICAgaWYgKF9feS0+X01fbGVmdCAhPTApCiAgICAgIF9feS0+X01f
bGVmdC0+X01fcGFyZW50ID0gX194OwogICAgX195LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVu
dDsKCiAgICBpZiAoX194ID09IF9fcm9vdCkKICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBp
ZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KQogICAgICBfX3gtPl9NX3BhcmVudC0+
X01fbGVmdCA9IF9feTsKICAgIGVsc2UKICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0g
X195OwogICAgX195LT5fTV9sZWZ0ID0gX194OwogICAgX194LT5fTV9wYXJlbnQgPSBfX3k7CiAg
fQoKICBpbmxpbmUgdm9pZAogIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfUmJfdHJlZV9ub2RlX2Jh
c2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQogIHsKICAgIF9SYl90cmVlX25v
ZGVfYmFzZSogX195ID0gX194LT5fTV9sZWZ0OwogICAgX194LT5fTV9sZWZ0ID0gX195LT5fTV9y
aWdodDsKICAgIGlmIChfX3ktPl9NX3JpZ2h0ICE9IDApCiAgICAgIF9feS0+X01fcmlnaHQtPl9N
X3BhcmVudCA9IF9feDsKICAgIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7CgogICAg
aWYgKF9feCA9PSBfX3Jvb3QpCiAgICAgIF9fcm9vdCA9IF9feTsKICAgIGVsc2UgaWYgKF9feCA9
PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdo
dCA9IF9feTsKICAgIGVsc2UKICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAg
ICBfX3ktPl9NX3JpZ2h0ID0gX194OwogICAgX194LT5fTV9wYXJlbnQgPSBfX3k7CiAgfQoKICBp
bmxpbmUgdm9pZAogIF9SYl90cmVlX3JlYmFsYW5jZShfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwg
X1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQogIHsKICAgIF9feC0+X01fY29sb3IgPSBfTV9y
ZWQ7CiAgICB3aGlsZSAoX194ICE9IF9fcm9vdAogICAgICAgICAgICYmIF9feC0+X01fcGFyZW50
LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgIHsKICAgICAgICBpZiAoX194LT5fTV9wYXJlbnQg
PT0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdCkKICAgICAgICAgIHsKICAgICAg
ICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50
LT5fTV9yaWdodDsKICAgICAgICAgICAgaWYgKF9feSAmJiBfX3ktPl9NX2NvbG9yID09IF9NX3Jl
ZCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29s
b3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feS0+X01fY29sb3IgPSBfTV9ibGFjazsK
ICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01f
cmVkOwogICAgICAgICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9yaWdodCkKICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50OwogICAgICAgICAg
ICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feCwgX19yb290KTsKICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxh
Y2s7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9
IF9NX3JlZDsKICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gtPl9NX3Bh
cmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAg
ICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195
ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgICAgaWYgKF9f
eSAmJiBfX3ktPl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAg
IF9feS0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50
LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgX194ID0gX194
LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoX194ID09IF9feC0+X01fcGFyZW50
LT5fTV9sZWZ0KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgX194ID0g
X194LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0
KF9feCwgX19yb290KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX194LT5f
TV9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3Bh
cmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgIF9SYl90
cmVlX3JvdGF0ZV9sZWZ0KF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAg
ICAgICAgICAgfQogICAgICAgICAgfQogICAgICB9CiAgICBfX3Jvb3QtPl9NX2NvbG9yID0gX01f
YmxhY2s7CiAgfQoKICBpbmxpbmUgX1JiX3RyZWVfbm9kZV9iYXNlKgogIF9SYl90cmVlX3JlYmFs
YW5jZV9mb3JfZXJhc2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3osCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX2xlZnRtb3N0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yaWdodG1vc3Qp
CiAgewogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3o7CiAgICBfUmJfdHJlZV9ub2Rl
X2Jhc2UqIF9feCA9IDA7CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feF9wYXJlbnQgPSAwOwog
ICAgaWYgKF9feS0+X01fbGVmdCA9PSAwKQogICAgICBfX3ggPSBfX3ktPl9NX3JpZ2h0OwogICAg
ZWxzZQogICAgICBpZiAoX195LT5fTV9yaWdodCA9PSAwKQogICAgICAgIF9feCA9IF9feS0+X01f
bGVmdDsKICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0
OwogICAgICAgICAgd2hpbGUgKF9feS0+X01fbGVmdCAhPSAwKQogICAgICAgICAgICBfX3kgPSBf
X3ktPl9NX2xlZnQ7CiAgICAgICAgICBfX3ggPSBfX3ktPl9NX3JpZ2h0OwogICAgICAgIH0KICAg
IGlmIChfX3kgIT0gX196KQogICAgICB7CgogICAgICAgIF9fei0+X01fbGVmdC0+X01fcGFyZW50
ID0gX195OwogICAgICAgIF9feS0+X01fbGVmdCA9IF9fei0+X01fbGVmdDsKICAgICAgICBpZiAo
X195ICE9IF9fei0+X01fcmlnaHQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9feF9wYXJlbnQg
PSBfX3ktPl9NX3BhcmVudDsKICAgICAgICAgICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBf
X3ktPl9NX3BhcmVudDsKICAgICAgICAgICAgX195LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7
CiAgICAgICAgICAgIF9feS0+X01fcmlnaHQgPSBfX3otPl9NX3JpZ2h0OwogICAgICAgICAgICBf
X3otPl9NX3JpZ2h0LT5fTV9wYXJlbnQgPSBfX3k7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQog
ICAgICAgICAgX194X3BhcmVudCA9IF9feTsKICAgICAgICBpZiAoX19yb290ID09IF9feikKICAg
ICAgICAgIF9fcm9vdCA9IF9feTsKICAgICAgICBlbHNlIGlmIChfX3otPl9NX3BhcmVudC0+X01f
bGVmdCA9PSBfX3opCiAgICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsKICAg
ICAgICBlbHNlCiAgICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7CiAgICAg
ICAgX195LT5fTV9wYXJlbnQgPSBfX3otPl9NX3BhcmVudDsKICAgICAgICBzdGQ6OnN3YXAoX195
LT5fTV9jb2xvciwgX196LT5fTV9jb2xvcik7CiAgICAgICAgX195ID0gX196OwoKICAgICAgfQog
ICAgZWxzZQogICAgICB7CiAgICAgICAgX194X3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAg
ICAgIGlmIChfX3gpCiAgICAgICAgICBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50Owog
ICAgICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICAgICAgX19yb290ID0gX194OwogICAgICAg
IGVsc2UKICAgICAgICAgIGlmIChfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAg
ICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX194OwogICAgICAgICAgZWxzZQogICAg
ICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3g7CiAgICAgICAgaWYgKF9fbGVm
dG1vc3QgPT0gX196KQogICAgICAgICAgaWYgKF9fei0+X01fcmlnaHQgPT0gMCkKICAgICAgICAg
ICAgX19sZWZ0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgX19sZWZ0bW9zdCA9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOwogICAg
ICAgIGlmIChfX3JpZ2h0bW9zdCA9PSBfX3opCiAgICAgICAgICBpZiAoX196LT5fTV9sZWZ0ID09
IDApCiAgICAgICAgICAgIF9fcmlnaHRtb3N0ID0gX196LT5fTV9wYXJlbnQ7CgogICAgICAgICAg
ZWxzZQogICAgICAgICAgICBfX3JpZ2h0bW9zdCA9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4
aW11bShfX3gpOwogICAgICB9CiAgICBpZiAoX195LT5fTV9jb2xvciAhPSBfTV9yZWQpCiAgICAg
IHsKICAgICAgICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiAoX194ID09IDAgfHwgX194LT5fTV9j
b2xvciA9PSBfTV9ibGFjaykpCiAgICAgICAgICBpZiAoX194ID09IF9feF9wYXJlbnQtPl9NX2xl
ZnQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9
IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgICAgICAgIGlmIChfX3ctPl9NX2NvbG9yID09
IF9NX3JlZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xv
ciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9N
X3JlZDsKICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194X3BhcmVudCwg
X19yb290KTsKICAgICAgICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKChfX3ctPl9NX2xlZnQgPT0gMCB8fAog
ICAgICAgICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykgJiYK
ICAgICAgICAgICAgICAgICAgKF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAgICAgICAg
ICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX01fYmxhY2spKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAg
ICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50ID0gX194
X3BhcmVudC0+X01fcGFyZW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fcmlnaHQgPT0g
MAogICAgICAgICAgICAgICAgICAgICAgfHwgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX01f
YmxhY2spCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgaWYgKF9f
dy0+X01fbGVmdCkgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAg
ICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgICAg
IF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3csIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgICAg
ICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsKICAgICAg
ICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAg
ICAgICAgaWYgKF9fdy0+X01fcmlnaHQpCiAgICAgICAgICAgICAgICAgICAgX193LT5fTV9yaWdo
dC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRl
X2xlZnQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewoK
ICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xl
ZnQ7CiAgICAgICAgICAgICAgaWYgKF9fdy0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAg
ICAgICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAg
ICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAg
ICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICBpZiAoKF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAgICAgICAgICAg
X193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX01fYmxhY2spICYmCiAgICAgICAgICAgICAgICAg
IChfX3ctPl9NX2xlZnQgPT0gMCB8fAogICAgICAgICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5f
TV9jb2xvciA9PSBfTV9ibGFjaykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
IF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAgIF9feCA9IF9feF9wYXJl
bnQ7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hfcGFyZW50LT5fTV9wYXJlbnQ7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0ID09IDAgfHwgX193LT5fTV9sZWZ0LT5f
TV9jb2xvciA9PSBfTV9ibGFjaykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICBpZiAoX193LT5fTV9yaWdodCkgX193LT5fTV9yaWdodC0+X01fY29sb3IgPSBfTV9i
bGFjazsKICAgICAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAg
ICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3csIF9fcm9vdCk7CiAgICAg
ICAgICAgICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9N
X2NvbG9yOwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNr
OwogICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0KQogICAgICAgICAgICAgICAgICAg
IF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgX1Ji
X3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgaWYgKF9feCkg
X194LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICB9CiAgICByZXR1cm4gX195OwogIH0KCgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MsIGJvb2wgX1NfaW5z
dGFuY2VsZXNzPgogICAgY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFzZQogICAgewogICAgcHVibGlj
OgogICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6YWxsb2Nh
dG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRf
YWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAgICAgIF9S
Yl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBfTV9u
b2RlX2FsbG9jYXRvcihfX2EpLCBfTV9oZWFkZXIoMCkge30KCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjphbGxv
Y2F0b3JfdHlwZQogICAgICBfTV9ub2RlX2FsbG9jYXRvcjsKCiAgICAgIF9SYl90cmVlX25vZGU8
X1RwPiogX01faGVhZGVyOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+KgogICAgICBfTV9nZXRf
bm9kZSgpIHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOyB9CgogICAgICB2
b2lkCiAgICAgIF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKQogICAgICB7IF9N
X25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCAxKTsgfQogICAgfTsKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgX1JiX3RyZWVfYWxsb2Nf
YmFzZTxfVHAsIF9BbGxvYywgdHJ1ZT4KICAgIHsKICAgIHB1YmxpYzoKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRv
cl90eXBlOwogICAgICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1
cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICAgICAgX1JiX3RyZWVfYWxsb2NfYmFzZShjb25zdCBh
bGxvY2F0b3JfdHlwZSYpIDogX01faGVhZGVyKDApIHt9CgogICAgcHJvdGVjdGVkOgogICAgICBf
UmJfdHJlZV9ub2RlPF9UcD4qIF9NX2hlYWRlcjsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Fs
bG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46Ol9BbGxvY190eXBlCiAgICAg
IF9BbGxvY190eXBlOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+KgogICAgICBfTV9nZXRfbm9k
ZSgpIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQoKICAgICAgdm9pZAogICAg
ICBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkgeyBfQWxsb2NfdHlwZTo6ZGVh
bGxvY2F0ZShfX3AsIDEpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfUmJfdHJlZV9iYXNlIDogcHVibGljIF9SYl90cmVlX2Fs
bG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
QWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgewogICAgICB0
eXBlZGVmIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLAogICAgICAgIF9BbGxvYywgX0FsbG9jX3Ry
YWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4gX0Jhc2U7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAgICAgX1Ji
X3RyZWVfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgICA6IF9CYXNlKF9fYSkg
eyBfTV9oZWFkZXIgPSBfTV9nZXRfbm9kZSgpOyB9CiAgICAgIH5fUmJfdHJlZV9iYXNlKCkgeyBf
TV9wdXRfbm9kZShfTV9oZWFkZXIpOyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tl
eSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5h
bWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfVmFsPiA+CiAgICBjbGFz
cyBfUmJfdHJlZSA6IHByb3RlY3RlZCBfUmJfdHJlZV9iYXNlPF9WYWwsIF9BbGxvYz4KICAgIHsK
ICAgICAgdHlwZWRlZiBfUmJfdHJlZV9iYXNlPF9WYWwsIF9BbGxvYz4gX0Jhc2U7CgogICAgcHJv
dGVjdGVkOgogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSogX0Jhc2VfcHRyOwogICAg
ICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4gX1JiX3RyZWVfbm9kZTsKCiAgICBwdWJsaWM6
CiAgICAgIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICAgICAgdHlwZWRlZiBfVmFsIHZhbHVlX3R5
cGU7CiAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25z
dCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJl
ZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7
CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZSogX0xpbmtfdHlwZTsKICAgICAgdHlwZWRlZiBz
aXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7
CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3Jf
dHlwZTsKICAgICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
IF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHVzaW5nIF9C
YXNlOjpfTV9nZXRfbm9kZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX3B1dF9ub2RlOwogICAgICB1
c2luZyBfQmFzZTo6X01faGVhZGVyOwoKICAgICAgX0xpbmtfdHlwZQogICAgICBfTV9jcmVhdGVf
bm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICAgIHsKICAgICAgICBfTGlua190eXBlIF9f
dG1wID0gX01fZ2V0X25vZGUoKTsKICAgICAgICB0cnkKICAgICAgICAgIHsgX0NvbnN0cnVjdCgm
X190bXAtPl9NX3ZhbHVlX2ZpZWxkLCBfX3gpOyB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAg
ICAgewogICAgICAgICAgX01fcHV0X25vZGUoX190bXApOwogICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICB9CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBfTGlua190eXBlCiAg
ICAgIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgICAgIHsKICAgICAgICBfTGlua190
eXBlIF9fdG1wID0gX01fY3JlYXRlX25vZGUoX194LT5fTV92YWx1ZV9maWVsZCk7CiAgICAgICAg
X190bXAtPl9NX2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgICAgICBfX3RtcC0+X01fbGVmdCA9
IDA7CiAgICAgICAgX190bXAtPl9NX3JpZ2h0ID0gMDsKICAgICAgICByZXR1cm4gX190bXA7CiAg
ICAgIH0KCiAgICAgIHZvaWQKICAgICAgZGVzdHJveV9ub2RlKF9MaW5rX3R5cGUgX19wKQogICAg
ICB7CiAgICAgICAgX0Rlc3Ryb3koJl9fcC0+X01fdmFsdWVfZmllbGQpOwogICAgICAgIF9NX3B1
dF9ub2RlKF9fcCk7CiAgICAgIH0KCiAgICAgIHNpemVfdHlwZSBfTV9ub2RlX2NvdW50OwogICAg
ICBfQ29tcGFyZSBfTV9rZXlfY29tcGFyZTsKCiAgICAgIF9MaW5rX3R5cGUmCiAgICAgIF9NX3Jv
b3QoKSBjb25zdCB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fcGFyZW50OyB9
CgogICAgICBfTGlua190eXBlJgogICAgICBfTV9sZWZ0bW9zdCgpIGNvbnN0IHsgcmV0dXJuIChf
TGlua190eXBlJikgX01faGVhZGVyLT5fTV9sZWZ0OyB9CgogICAgICBfTGlua190eXBlJgogICAg
ICBfTV9yaWdodG1vc3QoKSBjb25zdCB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+
X01fcmlnaHQ7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19sZWZ0KF9MaW5r
X3R5cGUgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KCiAgICAg
IHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19yaWdodChfTGlua190eXBlIF9feCkgeyByZXR1
cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5
cGUmCiAgICAgIF9TX3BhcmVudChfTGlua190eXBlIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUm
KShfX3gtPl9NX3BhcmVudCk7IH0KCiAgICAgIHN0YXRpYyByZWZlcmVuY2UKICAgICAgX1NfdmFs
dWUoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIF9feC0+X01fdmFsdWVfZmllbGQ7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBfS2V5JgogICAgICBfU19rZXkoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJu
IF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX194KSk7IH0KCiAgICAgIHN0YXRpYyBfUmJfdHJlZV9j
b2xvciYKICAgICAgX1NfY29sb3IoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIF9feC0+X01fY29s
b3I7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19sZWZ0KF9CYXNlX3B0ciBf
X3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0KTsgfQoKICAgICAgc3RhdGlj
IF9MaW5rX3R5cGUmCiAgICAgIF9TX3JpZ2h0KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlu
a190eXBlJikoX194LT5fTV9yaWdodCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAg
ICBfU19wYXJlbnQoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9N
X3BhcmVudCk7IH0KCiAgICAgIHN0YXRpYyByZWZlcmVuY2UKICAgICAgX1NfdmFsdWUoX0Jhc2Vf
cHRyIF9feCkgeyByZXR1cm4gKChfTGlua190eXBlKV9feCktPl9NX3ZhbHVlX2ZpZWxkOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgX0tleSYKICAgICAgX1Nfa2V5KF9CYXNlX3B0ciBfX3gpIHsgcmV0
dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX0xpbmtfdHlwZShfX3gpKSk7fQoKICAgICAgc3Rh
dGljIF9SYl90cmVlX2NvbG9yJgogICAgICBfU19jb2xvcihfQmFzZV9wdHIgX194KSB7IHJldHVy
biAoX0xpbmtfdHlwZShfX3gpLT5fTV9jb2xvcik7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBl
CiAgICAgIF9TX21pbmltdW0oX0xpbmtfdHlwZSBfX3gpCiAgICAgIHsgcmV0dXJuIChfTGlua190
eXBlKSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsgfQoKICAgICAgc3RhdGlj
IF9MaW5rX3R5cGUKICAgICAgX1NfbWF4aW11bShfTGlua190eXBlIF9feCkKICAgICAgeyByZXR1
cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOyB9Cgog
ICAgcHVibGljOgogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIHJl
ZmVyZW5jZSwgcG9pbnRlcj4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0
b3I8dmFsdWVfdHlwZSwgY29uc3RfcmVmZXJlbmNlLCBjb25zdF9wb2ludGVyPgogICAgICBjb25z
dF9pdGVyYXRvcjsKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRv
cj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y
PGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHByaXZhdGU6CiAgICAgIGl0ZXJhdG9y
CiAgICAgIF9NX2luc2VydChfQmFzZV9wdHIgX194LCBfQmFzZV9wdHIgX195LCBjb25zdCB2YWx1
ZV90eXBlJiBfX3YpOwoKICAgICAgX0xpbmtfdHlwZQogICAgICBfTV9jb3B5KF9MaW5rX3R5cGUg
X194LCBfTGlua190eXBlIF9fcCk7CgogICAgICB2b2lkCiAgICAgIF9NX2VyYXNlKF9MaW5rX3R5
cGUgX194KTsKCiAgICBwdWJsaWM6CgogICAgICBfUmJfdHJlZSgpCiAgICAgICAgOiBfQmFzZShh
bGxvY2F0b3JfdHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoKQogICAg
ICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICAgICAgX1JiX3RyZWUoY29uc3QgX0NvbXBh
cmUmIF9fY29tcCkKICAgICAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2RlX2Nv
dW50KDApLCBfTV9rZXlfY29tcGFyZShfX2NvbXApCiAgICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6
ZSgpOyB9CgogICAgICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wLCBjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hKQogICAgICAgIDogX0Jhc2UoX19hKSwgX01fbm9kZV9jb3VudCgwKSwg
X01fa2V5X2NvbXBhcmUoX19jb21wKQogICAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoK
ICAgICAgX1JiX3RyZWUoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz4mIF9feCkKICAgICAgICA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpLCBf
TV9ub2RlX2NvdW50KDApLAogICAgICAgICAgICAgICAgIF9NX2tleV9jb21wYXJlKF9feC5fTV9r
ZXlfY29tcGFyZSkKICAgICAgewogICAgICAgIGlmIChfX3guX01fcm9vdCgpID09IDApCiAgICAg
ICAgICBfTV9lbXB0eV9pbml0aWFsaXplKCk7CiAgICAgICAgZWxzZQogICAgICAgICAgewogICAg
ICAgICAgICBfU19jb2xvcihfTV9oZWFkZXIpID0gX01fcmVkOwogICAgICAgICAgICBfTV9yb290
KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9NX2hlYWRlcik7CiAgICAgICAgICAgIF9NX2xl
ZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAgICAgICAgICAgIF9NX3JpZ2h0bW9z
dCgpID0gX1NfbWF4aW11bShfTV9yb290KCkpOwogICAgICAgICAgfQogICAgICAgIF9NX25vZGVf
Y291bnQgPSBfX3guX01fbm9kZV9jb3VudDsKICAgICAgfQoKICAgICAgfl9SYl90cmVlKCkgeyBj
bGVhcigpOyB9CgogICAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPiYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpOwoKICAgIHByaXZhdGU6CiAgICAgIHZvaWQgX01f
ZW1wdHlfaW5pdGlhbGl6ZSgpCiAgICAgIHsKICAgICAgICBfU19jb2xvcihfTV9oZWFkZXIpID0g
X01fcmVkOwoKICAgICAgICBfTV9yb290KCkgPSAwOwogICAgICAgIF9NX2xlZnRtb3N0KCkgPSBf
TV9oZWFkZXI7CiAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgIH0KCiAg
ICBwdWJsaWM6CgogICAgICBfQ29tcGFyZQogICAgICBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJu
IF9NX2tleV9jb21wYXJlOyB9CgogICAgICBpdGVyYXRvcgogICAgICBiZWdpbigpIHsgcmV0dXJu
IF9NX2xlZnRtb3N0KCk7IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZW5kKCkg
eyByZXR1cm4gX01faGVhZGVyOyB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBlbmQoKSBj
b25zdCB7IHJldHVybiBfTV9oZWFkZXI7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAg
cmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCiAgICAgIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVu
ZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdCB7IHJl
dHVybiBfTV9ub2RlX2NvdW50ID09IDA7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkg
Y29uc3QgeyByZXR1cm4gX01fbm9kZV9jb3VudDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1h
eF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQoKICAgICAgdm9pZAogICAg
ICBzd2FwKF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBf
X3QpCiAgICAgIHsKICAgICAgICBzdGQ6OnN3YXAoX01faGVhZGVyLCBfX3QuX01faGVhZGVyKTsK
ICAgICAgICBzdGQ6OnN3YXAoX01fbm9kZV9jb3VudCwgX190Ll9NX25vZGVfY291bnQpOwogICAg
ICAgIHN0ZDo6c3dhcChfTV9rZXlfY29tcGFyZSwgX190Ll9NX2tleV9jb21wYXJlKTsKICAgICAg
fQoKCiAgICAgIHBhaXI8aXRlcmF0b3IsYm9vbD4KICAgICAgaW5zZXJ0X3VuaXF1ZShjb25zdCB2
YWx1ZV90eXBlJiBfX3gpOwoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0X2VxdWFsKGNvbnN0
IHZhbHVlX3R5cGUmIF9feCk7CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnRfdW5pcXVlKGl0
ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogICAgICBpdGVyYXRv
cgogICAgICBpbnNlcnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlw
ZSYgX194KTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICB2
b2lkCiAgICAgIGluc2VydF91bmlxdWUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0KTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgog
ICAgICB2b2lkCiAgICAgIGluc2VydF9lcXVhbChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QpOwoKICAgICAgdm9pZAogICAgICBlcmFzZShpdGVyYXRvciBfX3Bv
c2l0aW9uKTsKCiAgICAgIHNpemVfdHlwZQogICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194
KTsKCiAgICAgIHZvaWQKICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19s
YXN0KTsKCiAgICAgIHZvaWQKICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNv
bnN0IGtleV90eXBlKiBfX2xhc3QpOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpCiAgICAgIHsK
ICAgICAgICBpZiAoX01fbm9kZV9jb3VudCAhPSAwKQogICAgICAgICAgewogICAgICAgICAgICBf
TV9lcmFzZShfTV9yb290KCkpOwogICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVy
OwogICAgICAgICAgICBfTV9yb290KCkgPSAwOwogICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9
IF9NX2hlYWRlcjsKICAgICAgICAgICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICAgICAgICB9CiAg
ICAgIH0KCgogICAgICBpdGVyYXRvcgogICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwoK
ICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25z
dDsKCiAgICAgIHNpemVfdHlwZQogICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25z
dDsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gp
OwoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUm
IF9feCkgY29uc3Q7CgogICAgICBpdGVyYXRvcgogICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlf
dHlwZSYgX194KTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIHVwcGVyX2JvdW5kKGNvbnN0
IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKICAgICAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4KICAg
ICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAgICBwYWlyPGNvbnN0X2l0
ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4KICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUm
IF9feCkgY29uc3Q7CgoKICAgICAgYm9vbAogICAgICBfX3JiX3ZlcmlmeSgpIGNvbnN0OwogICAg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tl
eU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9S
Yl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7
CiAgICAgIHJldHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICBlcXVhbChf
X3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAg
ICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3I8KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsKICAgICAgcmV0dXJuIGxleGlj
b2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFs
dWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVl
PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVy
biAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9W
YWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IF9SYl90
cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAg
ICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz4mIF9feSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
S2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBl
bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPD0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFs
dWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVl
PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgeyByZXR1cm4g
IShfX3ggPCBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWws
IHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChfUmJfdHJlZTxfS2V5LF9WYWws
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICBfUmJfdHJlZTxfS2V5
LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyBfX3guc3dhcChf
X3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l
IF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYK
ICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAg
IG9wZXJhdG9yPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPiYgX194KQogICAgewogICAgICBpZiAodGhpcyAhPSAmX194KQogICAgICAgIHsKCiAg
ICAgICAgICBjbGVhcigpOwogICAgICAgICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICAgICAgICBf
TV9rZXlfY29tcGFyZSA9IF9feC5fTV9rZXlfY29tcGFyZTsKICAgICAgICAgIGlmIChfX3guX01f
cm9vdCgpID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9yb290KCkgPSAwOwog
ICAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgICAgICAgICAgX01f
cmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3Qo
KSwgX01faGVhZGVyKTsKICAgICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShf
TV9yb290KCkpOwogICAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX1NfbWF4aW11bShfTV9y
b290KCkpOwogICAgICAgICAgICAgIF9NX25vZGVfY291bnQgPSBfX3guX01fbm9kZV9jb3VudDsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwK
ICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5h
bWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJh
dG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6
CiAgICBfTV9pbnNlcnQoX0Jhc2VfcHRyIF9feF8sIF9CYXNlX3B0ciBfX3lfLCBjb25zdCBfVmFs
JiBfX3YpCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9feF87CiAg
ICAgIF9MaW5rX3R5cGUgX195ID0gKF9MaW5rX3R5cGUpIF9feV87CiAgICAgIF9MaW5rX3R5cGUg
X196OwoKICAgICAgaWYgKF9feSA9PSBfTV9oZWFkZXIgfHwgX194ICE9IDAgfHwKICAgICAgICAg
IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feSkpKQogICAgICAg
IHsKICAgICAgICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICAgICAgICBfU19sZWZ0
KF9feSkgPSBfX3o7CgogICAgICAgICAgaWYgKF9feSA9PSBfTV9oZWFkZXIpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBfTV9yb290KCkgPSBfX3o7CiAgICAgICAgICAgICAgX01fcmlnaHRt
b3N0KCkgPSBfX3o7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9feSA9PSBfTV9s
ZWZ0bW9zdCgpKQogICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX196OwogICAgICAgIH0KICAg
ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAg
ICAgICAgICBfU19yaWdodChfX3kpID0gX196OwoKICAgICAgICAgIGlmIChfX3kgPT0gX01fcmln
aHRtb3N0KCkpCiAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OwogICAgICAgIH0KICAg
ICAgX1NfcGFyZW50KF9feikgPSBfX3k7CiAgICAgIF9TX2xlZnQoX196KSA9IDA7CiAgICAgIF9T
X3JpZ2h0KF9feikgPSAwOwogICAgICBfUmJfdHJlZV9yZWJhbGFuY2UoX196LCBfTV9oZWFkZXIt
Pl9NX3BhcmVudCk7CiAgICAgICsrX01fbm9kZV9jb3VudDsKICAgICAgcmV0dXJuIGl0ZXJhdG9y
KF9feik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5
cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGluc2VydF9lcXVhbChjb25zdCBfVmFsJiBfX3YpCiAg
ICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9f
eCA9IF9NX3Jvb3QoKTsKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIHsKICAgICAgICAg
IF9feSA9IF9feDsKICAgICAgICAgIF9feCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCko
X192KSwgX1Nfa2V5KF9feCkpID8KICAgICAgICAgICAgX1NfbGVmdChfX3gpIDogX1NfcmlnaHQo
X194KTsKICAgICAgICB9CiAgICAgIHJldHVybiBfTV9pbnNlcnQoX194LCBfX3ksIF9fdik7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9L
ZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+OjppdGVyYXRvciwKICAgIGJvb2w+CiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNlcnRfdW5pcXVlKGNvbnN0IF9WYWwm
IF9fdikKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5r
X3R5cGUgX194ID0gX01fcm9vdCgpOwogICAgICBib29sIF9fY29tcCA9IHRydWU7CiAgICAgIHdo
aWxlIChfX3ggIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfX3kgPSBfX3g7CiAgICAgICAgICBf
X2NvbXAgPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKTsK
ICAgICAgICAgIF9feCA9IF9fY29tcCA/IF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAg
ICAgICAgfQogICAgICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOwogICAgICBpZiAoX19j
b21wKQogICAgICAgIGlmIChfX2ogPT0gYmVnaW4oKSkKICAgICAgICAgIHJldHVybiBwYWlyPGl0
ZXJhdG9yLGJvb2w+KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgICAgICAgZWxz
ZQogICAgICAgICAgLS1fX2o7CiAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX19qLl9N
X25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9y
LGJvb2w+KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgICAgIHJldHVybiBwYWly
PGl0ZXJhdG9yLGJvb2w+KF9faiwgZmFsc2UpOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlw
ZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9L
ZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9S
Yl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CiAgICBp
bnNlcnRfdW5pcXVlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKICAgIHsK
ICAgICAgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXItPl9NX2xlZnQpCiAgICAg
ICAgewoKICAgICAgICAgIGlmIChzaXplKCkgPiAwICYmCiAgICAgICAgICAgICAgX01fa2V5X2Nv
bXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpCiAg
ICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9u
Ll9NX25vZGUsIF9fdik7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0
X3VuaXF1ZShfX3YpLmZpcnN0OwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19wb3NpdGlvbi5f
TV9ub2RlID09IF9NX2hlYWRlcikKICAgICAgICB7CgogICAgICAgICAgaWYgKF9NX2tleV9jb21w
YXJlKF9TX2tleShfTV9yaWdodG1vc3QoKSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAg
ICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICAgICAgICBl
bHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgICAgICAg
fQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bv
c2l0aW9uOwogICAgICAgICAgLS1fX2JlZm9yZTsKICAgICAgICAgIGlmIChfTV9rZXlfY29tcGFy
ZShfU19rZXkoX19iZWZvcmUuX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkKICAgICAgICAg
ICAgICAmJiBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksX1Nfa2V5KF9fcG9zaXRp
b24uX01fbm9kZSkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9TX3JpZ2h0KF9f
YmVmb3JlLl9NX25vZGUpID09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KDAs
IF9fYmVmb3JlLl9NX25vZGUsIF9fdik7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9k
ZSwgX192KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJu
IGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAg
ICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJf
dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAg
IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGlu
c2VydF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAg
ICAgIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0KQogICAgICAg
IHsKCiAgICAgICAgICBpZiAoc2l6ZSgpID4gMCAmJgogICAgICAgICAgICAgICFfTV9rZXlfY29t
cGFyZShfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAg
ICAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24u
X01fbm9kZSwgX192KTsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRf
ZXF1YWwoX192KTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9
PSBfTV9oZWFkZXIpCiAgICAgICAgewoKICAgICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tl
eU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX01fcmlnaHRtb3N0KCkpKSkKICAgICAgICAgICAgcmV0
dXJuIF9NX2luc2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogICAgICAgIH0KICAgICAgZWxzZQog
ICAgICAgIHsKICAgICAgICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlvbjsKICAgICAg
ICAgIC0tX19iZWZvcmU7CiAgICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVl
KCkoX192KSwgX1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpKQogICAgICAgICAgICAgICYmICFfTV9r
ZXlfY29tcGFyZShfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgICAgICAg
ICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBfX3YpOwogICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9u
b2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgICAgICAgICB9CiAgICAgICAgICBl
bHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICAgICAgICB9CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1Ys
CiAgICAgICAgICAgdHlwZW5hbWUgX0NtcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8
Y2xhc3MgX0lJPgogICAgICB2b2lkCiAgICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAs
X0FsbG9jPjo6CiAgICAgIGluc2VydF9lcXVhbChfSUkgX19maXJzdCwgX0lJIF9fbGFzdCkKICAg
ICAgewogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAg
ICAgIGluc2VydF9lcXVhbCgqX19maXJzdCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAgICAgICB0eXBlbmFtZSBf
Q21wLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTxjbGFzcyBfSUk+CiAgICB2b2lkCiAg
ICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz46OgogICAgaW5zZXJ0X3VuaXF1
ZShfSUkgX19maXJzdCwgX0lJIF9fbGFzdCkKICAgIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGluc2VydF91bmlxdWUoKl9fZmlyc3QpOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5
T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgog
ICAgaW5saW5lIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+OjplcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQogICAgewogICAgICBfTGlua190
eXBlIF9feSA9CiAgICAgICAgKF9MaW5rX3R5cGUpIF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJh
c2UoX19wb3NpdGlvbi5fTV9ub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+X01fcGFyZW50LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+X01fbGVmdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9N
X3JpZ2h0KTsKICAgICAgZGVzdHJveV9ub2RlKF9feSk7CiAgICAgIC0tX01fbm9kZV9jb3VudDsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUg
X0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf
QWxsb2M+OjpzaXplX3R5cGUKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+OjplcmFzZShjb25zdCBfS2V5JiBfX3gpCiAgICB7CiAgICAgIHBhaXI8aXRl
cmF0b3IsaXRlcmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9feCk7CiAgICAgIHNpemVfdHlwZSBf
X24gPSBkaXN0YW5jZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwogICAgICBlcmFzZShfX3AuZmly
c3QsIF9fcC5zZWNvbmQpOwogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVu
YW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5
LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6X0xpbmtfdHlwZQogICAgX1JiX3RyZWU8
X0tleSxfVmFsLF9Lb1YsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBfTV9jb3B5KF9MaW5rX3R5cGUg
X194LCBfTGlua190eXBlIF9fcCkKICAgIHsKCiAgICAgIF9MaW5rX3R5cGUgX190b3AgPSBfTV9j
bG9uZV9ub2RlKF9feCk7CiAgICAgIF9fdG9wLT5fTV9wYXJlbnQgPSBfX3A7CgogICAgICB0cnkK
ICAgICAgICB7CiAgICAgICAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAgICAgICAgX190b3At
Pl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3RvcCk7CiAgICAgICAgICBfX3Ag
PSBfX3RvcDsKICAgICAgICAgIF9feCA9IF9TX2xlZnQoX194KTsKCiAgICAgICAgICB3aGlsZSAo
X194ICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTGlua190eXBlIF9feSA9IF9N
X2Nsb25lX25vZGUoX194KTsKICAgICAgICAgICAgICBfX3AtPl9NX2xlZnQgPSBfX3k7CiAgICAg
ICAgICAgICAgX195LT5fTV9wYXJlbnQgPSBfX3A7CiAgICAgICAgICAgICAgaWYgKF9feC0+X01f
cmlnaHQpCiAgICAgICAgICAgICAgICBfX3ktPl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChf
X3gpLCBfX3kpOwogICAgICAgICAgICAgIF9fcCA9IF9feTsKICAgICAgICAgICAgICBfX3ggPSBf
U19sZWZ0KF9feCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAg
ICAgICB7CiAgICAgICAgICBfTV9lcmFzZShfX3RvcCk7CiAgICAgICAgICB0aHJvdzsKICAgICAg
ICB9CiAgICAgIHJldHVybiBfX3RvcDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwg
dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUg
X0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1Zh
bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpfTV9lcmFzZShfTGlua190eXBlIF9feCkK
ICAgIHsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfTV9lcmFz
ZShfU19yaWdodChfX3gpKTsKICAgICAgICAgIF9MaW5rX3R5cGUgX195ID0gX1NfbGVmdChfX3gp
OwogICAgICAgICAgZGVzdHJveV9ub2RlKF9feCk7CiAgICAgICAgICBfX3ggPSBfX3k7CiAgICAg
ICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBl
bmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUg
X0FsbG9jPgogICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz46OgogICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0
KQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBiZWdpbigpICYmIF9fbGFzdCA9PSBlbmQoKSkK
ICAgICAgICBjbGVhcigpOwogICAgICBlbHNlCiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KSBlcmFzZShfX2ZpcnN0KyspOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0
eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBf
Q29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFs
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZXJhc2UoY29uc3QgX0tleSogX19m
aXJzdCwgY29uc3QgX0tleSogX19sYXN0KQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBf
X2xhc3QpCiAgICAgICAgZXJhc2UoKl9fZmlyc3QrKyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAg
IHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJl
ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9S
Yl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpmaW5kKGNvbnN0
IF9LZXkmIF9faykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAg
IF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAg
ICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgICAgICBfX3kg
PSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBf
U19yaWdodChfX3gpOwoKICAgICAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICAgICAg
cmV0dXJuIChfX2ogPT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9N
X25vZGUpKSkgPwogICAgICAgIGVuZCgpIDogX19qOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0
eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8
X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAg
ICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBm
aW5kKGNvbnN0IF9LZXkmIF9faykgY29uc3QKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBf
TV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICB3aGlsZSAo
X194ICE9IDApCiAgICAgICB7CiAgICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9f
eCksIF9faykpCiAgICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwogICAgICAgfQogICAgIGNv
bnN0X2l0ZXJhdG9yIF9faiA9IGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICAgcmV0dXJuIChfX2og
PT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkgPwog
ICAgICAgZW5kKCkgOiBfX2o7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVu
YW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w
YXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBfUmJfdHJlZTxfS2V5LF9W
YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBjb3VudChjb25zdCBfS2V5JiBf
X2spIGNvbnN0CiAgICB7CiAgICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9y
PiBfX3AgPSBlcXVhbF9yYW5nZShfX2spOwogICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2Uo
X19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAg
ICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1l
IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRv
cgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Ogog
ICAgbG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQogICAgewogICAgICBfTGlua190eXBlIF9f
eSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3
aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwg
X19rKSkKICAgICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVs
c2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICAgICByZXR1cm4gaXRlcmF0b3Io
X195KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlw
ZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgbG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19r
KSBjb25zdAogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xp
bmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAg
aWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgICAgIF9feSA9IF9f
eCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3Jp
Z2h0KF9feCk7CgogICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUs
CiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVu
YW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVy
YXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46
OgogICAgdXBwZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQogICAgewogICAgICBfTGlua190eXBl
IF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAg
ICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5
KF9feCkpKQogICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAg
ZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIHJldHVybiBpdGVyYXRv
cihfX3kpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0
eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5h
bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICB1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBf
X2spIGNvbnN0CiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBf
TGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAg
ICBpZiAoX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAgICAgICBfX3kgPSBf
X3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19y
aWdodChfX3gpOwoKICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVl
LAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUKICAgIHBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz46Oml0ZXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxf
VmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yPgogICAgX1JiX3RyZWU8
X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZXF1YWxfcmFuZ2Uo
Y29uc3QgX0tleSYgX19rKQogICAgeyByZXR1cm4gcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+KGxv
d2VyX2JvdW5kKF9fayksIHVwcGVyX2JvdW5kKF9faykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAgdHlwZW5hbWUg
X0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICBpbmxpbmUKICBwYWlyPHR5cGVuYW1lIF9SYl90
cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxs
b2M+Ojpjb25zdF9pdGVyYXRvcj4KICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFy
ZSwgX0FsbG9jPgogIDo6ZXF1YWxfcmFuZ2UoY29uc3QgX0tleSYgX19rKSBjb25zdAogIHsKICAg
IHJldHVybiBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPihsb3dlcl9ib3VuZChf
X2spLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVy
X2JvdW5kKF9faykpOwogIH0KCiAgaW5saW5lIGludAogIF9fYmxhY2tfY291bnQoX1JiX3RyZWVf
bm9kZV9iYXNlKiBfX25vZGUsIF9SYl90cmVlX25vZGVfYmFzZSogX19yb290KQogIHsKICAgIGlm
IChfX25vZGUgPT0gMCkKICAgICAgcmV0dXJuIDA7CiAgICBpbnQgX19zdW0gPSAwOwogICAgZG8K
ICAgICAgewogICAgICAgIGlmIChfX25vZGUtPl9NX2NvbG9yID09IF9NX2JsYWNrKQogICAgICAg
ICAgKytfX3N1bTsKICAgICAgICBpZiAoX19ub2RlID09IF9fcm9vdCkKICAgICAgICAgIGJyZWFr
OwogICAgICAgIF9fbm9kZSA9IF9fbm9kZS0+X01fcGFyZW50OwogICAgICB9CiAgICB3aGlsZSAo
MSk7CiAgICByZXR1cm4gX19zdW07CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBl
bmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t
cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgYm9vbAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Ol9fcmJfdmVyaWZ5KCkgY29uc3QKICAgIHsKICAg
IGlmIChfTV9ub2RlX2NvdW50ID09IDAgfHwgYmVnaW4oKSA9PSBlbmQoKSkKICAgICAgcmV0dXJu
IF9NX25vZGVfY291bnQgPT0gMCAmJiBiZWdpbigpID09IGVuZCgpICYmCiAgICAgICAgX01faGVh
ZGVyLT5fTV9sZWZ0ID09IF9NX2hlYWRlciAmJiBfTV9oZWFkZXItPl9NX3JpZ2h0ID09IF9NX2hl
YWRlcjsKCiAgICBpbnQgX19sZW4gPSBfX2JsYWNrX2NvdW50KF9NX2xlZnRtb3N0KCksIF9NX3Jv
b3QoKSk7CiAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIF9faXQgPSBiZWdpbigpOyBfX2l0ICE9IGVu
ZCgpOyArK19faXQpCiAgICAgIHsKICAgICAgICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBl
KSBfX2l0Ll9NX25vZGU7CiAgICAgICAgX0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0KF9feCk7CiAg
ICAgICAgX0xpbmtfdHlwZSBfX1IgPSBfU19yaWdodChfX3gpOwoKICAgICAgICBpZiAoX194LT5f
TV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICBpZiAoKF9fTCAmJiBfX0wtPl9NX2NvbG9yID09
IF9NX3JlZCkKICAgICAgICAgICAgICB8fCAoX19SICYmIF9fUi0+X01fY29sb3IgPT0gX01fcmVk
KSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBpZiAoX19MICYmIF9NX2tleV9j
b21wYXJlKF9TX2tleShfX3gpLCBfU19rZXkoX19MKSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgaWYgKF9fUiAmJiBfTV9rZXlfY29tcGFyZShfU19rZXkoX19SKSwgX1Nfa2V5KF9f
eCkpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBpZiAoIV9fTCAmJiAhX19SICYm
IF9fYmxhY2tfY291bnQoX194LCBfTV9yb290KCkpICE9IF9fbGVuKQogICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICB9CgogICAgaWYgKF9NX2xlZnRtb3N0KCkgIT0gX1JiX3RyZWVfbm9kZV9i
YXNlOjpfU19taW5pbXVtKF9NX3Jvb3QoKSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChf
TV9yaWdodG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX01fcm9vdCgp
KSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgICB9Cn0KIyA2NyAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvbWFwIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9tYXAuaCIgMSAzCiMgNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5o
IiAzCm5hbWVzcGFjZSBzdGQKewojIDc3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9t
YXAuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSA9
IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8cGFpcjxjb25z
dCBfS2V5LCBfVHA+ID4gPgpjbGFzcyBtYXAKewoKIAogIDsKCnB1YmxpYzoKCiAgdHlwZWRlZiBf
S2V5IGtleV90eXBlOwogIHR5cGVkZWYgX1RwIGRhdGFfdHlwZTsKICB0eXBlZGVmIF9UcCBtYXBw
ZWRfdHlwZTsKICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tleSwgX1RwPiB2YWx1ZV90eXBlOwogIHR5
cGVkZWYgX0NvbXBhcmUga2V5X2NvbXBhcmU7CgogIGNsYXNzIHZhbHVlX2NvbXBhcmUKICAgIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPiB7CiAg
ZnJpZW5kIGNsYXNzIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogIHByb3RlY3RlZCA6
CiAgICBfQ29tcGFyZSBjb21wOwogICAgdmFsdWVfY29tcGFyZShfQ29tcGFyZSBfX2MpIDogY29t
cChfX2MpIHt9CiAgcHVibGljOgogICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHZhbHVlX3R5cGUm
IF9feCwgY29uc3QgdmFsdWVfdHlwZSYgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBjb21wKF9f
eC5maXJzdCwgX195LmZpcnN0KTsKICAgIH0KICB9OwoKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90
cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2
YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBf
TV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRl
cjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2lu
dGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwog
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJl
bmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0
eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9p
dGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVy
YXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl
OjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZm
ZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl
OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtYXAoKSA6IF9NX3QoX0NvbXBh
cmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBtYXAoY29uc3QgX0NvbXBhcmUm
IF9fY29tcCwKICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9j
YXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0KQogICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAg
ICB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0
SXRlcmF0b3IgX19sYXN0LCBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICBjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9f
YSkgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQogIG1hcChjb25zdCBt
YXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHt9Cgog
IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtYXA8X0tl
eSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194KQogIHsKICAgIF9NX3QgPSBfX3guX01fdDsK
ICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7
IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBj
b25zdCB7IHJldHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0
b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9y
KCk7IH0KCgoKCgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CgoK
CgoKICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsg
fQoKCgoKCiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCgogIGNv
bnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgogIHJl
dmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoKCgoKCgog
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVn
aW4oKTsgfQoKCgoKCgogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIF9NX3QucmVu
ZCgpOyB9CgoKCgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1
cm4gX01fdC5yZW5kKCk7IH0KCgogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV90LmVt
cHR5KCk7IH0KCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsg
fQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7
IH0KIyAyMjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgX1RwJiBv
cGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2spIHsKICAgIGl0ZXJhdG9yIF9faSA9IGxvd2Vy
X2JvdW5kKF9fayk7CgogICAgaWYgKF9faSA9PSBlbmQoKSB8fCBrZXlfY29tcCgpKF9faywgKCpf
X2kpLmZpcnN0KSkKICAgICAgX19pID0gaW5zZXJ0KF9faSwgdmFsdWVfdHlwZShfX2ssIF9UcCgp
KSk7CiAgICByZXR1cm4gKCpfX2kpLnNlY29uZDsKICB9CgogIHZvaWQgc3dhcChtYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KIyAyNDQg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgcGFpcjxpdGVyYXRvcixi
b29sPiBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgeyByZXR1cm4gX01fdC5pbnNl
cnRfdW5pcXVlKF9feCk7IH0KIyAyNjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21h
cC5oIiAzCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90
eXBlJiBfX3gpCiAgICB7IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7
IH0KCgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01f
dC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQojIDI4NCAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfbWFwLmgiIDMKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRp
b24pIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQojIDI5NyAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfbWFwLmgiIDMKICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9f
eCkgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiMgMzA5ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9tYXAuaCIgMwogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0
b3IgX19sYXN0KQogICAgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCgoKCgoKICB2
b2lkIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KIyAzMzIgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX21hcC5oIiAzCiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7
IHJldHVybiBfTV90LmZpbmQoX194KTsgfQojIDM0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfbWFwLmgiIDMKICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gp
IGNvbnN0IHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiMgMzU0ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYg
X194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5maW5kKF9feCkgPT0gX01fdC5lbmQoKSA/IDAg
OiAxOwogIH0KIyAzNjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAg
aXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90Lmxv
d2VyX2JvdW5kKF9feCk7IH0KIyAzODIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21h
cC5oIiAzCiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkg
Y29uc3QgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiMgMzkzICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIGl0ZXJhdG9yIHVwcGVyX2JvdW5k
KGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9CiMg
NDAzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIGNvbnN0X2l0ZXJh
dG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf
TV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQojIDQyMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfbWFwLmgiIDMKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25z
dCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0K
IyA0NDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgcGFpcjxjb25z
dF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9f
eCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CgogIHRlbXBs
YXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5k
IGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7CiAgdGVt
cGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX1QxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmll
bmQgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs
bG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9D
b21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0Nv
bXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0Nv
bXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIG9wZXJhdG9yPihjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg
X194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5
LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9w
ZXJhdG9yPD0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195
KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz
IF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+
PShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICBy
ZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBj
bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKG1hcDxfS2V5LF9U
cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgbWFwPF9LZXksX1RwLF9D
b21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0KIyA2OCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvbWFwIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9tdWx0aW1hcC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVs
dGltYXAuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VHAsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFz
cyBfQWxsb2MgPSBhbGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgpjbGFzcyBtdWx0
aW1hcDsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11
bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSk7Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v
bCBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194
LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUs
X0FsbG9jPiYgX195KTsKIyA5MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGlt
YXAuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwg
Y2xhc3MgX0FsbG9jPgpjbGFzcyBtdWx0aW1hcAp7CgogCiAgOwoKcHVibGljOgoKCgogIHR5cGVk
ZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7CiAgdHlwZWRlZiBfVHAg
bWFwcGVkX3R5cGU7CiAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXksIF9UcD4gdmFsdWVfdHlwZTsK
ICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwoKICBjbGFzcyB2YWx1ZV9jb21wYXJlIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPiB7CiAg
ZnJpZW5kIGNsYXNzIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVj
dGVkOgogICAgX0NvbXBhcmUgY29tcDsKICAgIHZhbHVlX2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6
IGNvbXAoX19jKSB7fQogIHB1YmxpYzoKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90
eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QgewogICAgICByZXR1cm4gY29t
cChfX3guZmlyc3QsIF9feS5maXJzdCk7CiAgICB9CiAgfTsKCnByaXZhdGU6CiAgdHlwZWRlZiBf
UmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgX1NlbGVjdDFz
dDx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlw
ZSBfTV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9p
bnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9w
b2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNl
OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVm
ZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0
b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJz
ZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9p
dGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpk
aWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtdWx0aW1hcCgpIDogX01f
dChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7IH0KICBleHBsaWNpdCBtdWx0aW1hcChj
b25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7
IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIG11bHRpbWFwKF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFy
ZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBf
X2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aW1hcChf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
Y29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyBfTV90Lmlu
c2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgbXVsdGltYXAoY29uc3QgbXVsdGltYXA8
X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHsgfQoKICBt
dWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtdWx0
aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsKICAgIF9NX3QgPSBfX3guX01f
dDsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25z
dCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAo
KSBjb25zdCB7IHJldHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxv
Y2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2Nh
dG9yKCk7IH0KCgoKCgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9
CgoKCgoKCiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2lu
KCk7IH0KCgoKCgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgoK
ICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoK
CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CgoK
CgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90
LnJiZWdpbigpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gX01f
dC5yZW5kKCk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7
IHJldHVybiBfTV90LnJlbmQoKTsgfQoKCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9N
X3QuZW1wdHkoKTsgfQoKCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNp
emUoKTsgfQoKCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhf
c2l6ZSgpOyB9CgogIHZvaWQgc3dhcChtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQojIDI0MiAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIGl0ZXJhdG9yIGluc2VydChjb25zdCB2YWx1ZV90
eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9feCk7IH0KIyAyNTkgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBpdGVyYXRvciBpbnNlcnQo
aXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICByZXR1cm4g
X01fdC5pbnNlcnRfZXF1YWwoX19wb3NpdGlvbiwgX194KTsKICB9CiMgMjcwICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsK
ICB9CiMgMjg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAg
dm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3QuZXJhc2UoX19wb3NpdGlvbik7
IH0KIyAyOTcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBz
aXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5lcmFzZShf
X3gpOyB9CiMgMzA5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAz
CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9N
X3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQoKCgoKCgogIHZvaWQgY2xlYXIoKSB7IF9NX3Qu
Y2xlYXIoKTsgfQojIDMzMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAu
aCIgMwogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5m
aW5kKF9feCk7IH0KIyAzNDUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFw
LmgiIDMKICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsg
cmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CgoKCgoKCiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtl
eV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuY291bnQoX194KTsgfQojIDM2NSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIGl0ZXJhdG9yIGxvd2Vy
X2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gp
OyB9CiMgMzc4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAg
Y29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qgewog
ICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CgoKCgoKCiAgaXRlcmF0b3IgdXBw
ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90LnVwcGVyX2JvdW5kKF9f
eCk7IH0KCgoKCgoKCiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUm
IF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9CiMgNDEz
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgcGFpcjxpdGVy
YXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0
dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiMgNDMxICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVy
YXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJu
IF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNz
IF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29u
c3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBsYXRlIDxjbGFz
cyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3Bl
cmF0b3I8IChjb25zdCBtdWx0aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKfTsKCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBh
cmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9L
ZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3ku
X01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUs
IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXks
X1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11
bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01f
dCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IG11bHRp
bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1
cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG11
bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJl
dHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgbXVs
dGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJl
dHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNs
YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3Qg
bXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewog
IHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAs
IGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAobXVsdGltYXA8
X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgIG11bHRpbWFw
PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0K
IyA2OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWFwIiAyIDMKIyA1MyAiL3Vzci9sb2NhbC9xdC14
MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FtYXAuaCIgMgoKCgoKc3RydWN0IFFNYXBOb2RlQmFzZQp7
CiAgICBlbnVtIENvbG9yIHsgUmVkLCBCbGFjayB9OwoKICAgIFFNYXBOb2RlQmFzZSogbGVmdDsK
ICAgIFFNYXBOb2RlQmFzZSogcmlnaHQ7CiAgICBRTWFwTm9kZUJhc2UqIHBhcmVudDsKCiAgICBD
b2xvciBjb2xvcjsKCiAgICBRTWFwTm9kZUJhc2UqIG1pbmltdW0oKSB7CiAgICAgICAgUU1hcE5v
ZGVCYXNlKiB4ID0gdGhpczsKICAgICAgICB3aGlsZSAoIHgtPmxlZnQgKQogICAgICAgICAgICB4
ID0geC0+bGVmdDsKICAgICAgICByZXR1cm4geDsKICAgIH0KCiAgICBRTWFwTm9kZUJhc2UqIG1h
eGltdW0oKSB7CiAgICAgICAgUU1hcE5vZGVCYXNlKiB4ID0gdGhpczsKICAgICAgICB3aGlsZSAo
IHgtPnJpZ2h0ICkKICAgICAgICAgICAgeCA9IHgtPnJpZ2h0OwogICAgICAgIHJldHVybiB4Owog
ICAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBLLCBjbGFzcyBUPgpzdHJ1Y3QgUU1hcE5vZGUgOiBw
dWJsaWMgUU1hcE5vZGVCYXNlCnsKICAgIFFNYXBOb2RlKCBjb25zdCBLJiBfa2V5LCBjb25zdCBU
JiBfZGF0YSApIHsgZGF0YSA9IF9kYXRhOyBrZXkgPSBfa2V5OyB9CiAgICBRTWFwTm9kZSggY29u
c3QgSyYgX2tleSApIHsga2V5ID0gX2tleTsgfQogICAgUU1hcE5vZGUoIGNvbnN0IFFNYXBOb2Rl
PEssVD4mIF9uICkgeyBrZXkgPSBfbi5rZXk7IGRhdGEgPSBfbi5kYXRhOyB9CiAgICBRTWFwTm9k
ZSgpIHsgfQogICAgVCBkYXRhOwogICAgSyBrZXk7Cn07CgoKdGVtcGxhdGU8Y2xhc3MgSywgY2xh
c3MgVD4KY2xhc3MgUU1hcEl0ZXJhdG9yCnsKIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgUU1hcE5v
ZGU8IEssIFQgPiogTm9kZVB0cjsKCiAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7Cgog
ICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKCgogICAgdHlwZWRlZiBUKiBw
b2ludGVyOwogICAgdHlwZWRlZiBUJiByZWZlcmVuY2U7CgoKCgogICAgUU1hcE5vZGU8SyxUPiog
bm9kZTsKCgoKCiAgICBRTWFwSXRlcmF0b3IoKSA6IG5vZGUoIDAgKSB7fQogICAgUU1hcEl0ZXJh
dG9yKCBRTWFwTm9kZTxLLFQ+KiBwICkgOiBub2RlKCBwICkge30KICAgIFFNYXBJdGVyYXRvcigg
Y29uc3QgUU1hcEl0ZXJhdG9yPEssVD4mIGl0ICkgOiBub2RlKCBpdC5ub2RlICkge30KCiAgICBi
b29sIG9wZXJhdG9yPT0oIGNvbnN0IFFNYXBJdGVyYXRvcjxLLFQ+JiBpdCApIGNvbnN0IHsgcmV0
dXJuIG5vZGUgPT0gaXQubm9kZTsgfQogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRTWFwSXRl
cmF0b3I8SyxUPiYgaXQgKSBjb25zdCB7IHJldHVybiBub2RlICE9IGl0Lm5vZGU7IH0KICAgIFQm
IG9wZXJhdG9yKigpIHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KICAgIGNvbnN0IFQmIG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KCgoKICAgIGNvbnN0IEsmIGtleSgpIGNv
bnN0IHsgcmV0dXJuIG5vZGUtPmtleTsgfQogICAgVCYgZGF0YSgpIHsgcmV0dXJuIG5vZGUtPmRh
dGE7IH0KICAgIGNvbnN0IFQmIGRhdGEoKSBjb25zdCB7IHJldHVybiBub2RlLT5kYXRhOyB9Cgpw
cml2YXRlOgogICAgaW50IGluYygpOwogICAgaW50IGRlYygpOwoKcHVibGljOgogICAgUU1hcEl0
ZXJhdG9yPEssVD4mIG9wZXJhdG9yKysoKSB7CiAgICAgICAgaW5jKCk7CiAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICAgIFFNYXBJdGVyYXRvcjxLLFQ+IG9wZXJhdG9yKysoaW50KSB7CiAg
ICAgICAgUU1hcEl0ZXJhdG9yPEssVD4gdG1wID0gKnRoaXM7CiAgICAgICAgaW5jKCk7CiAgICAg
ICAgcmV0dXJuIHRtcDsKICAgIH0KCiAgICBRTWFwSXRlcmF0b3I8SyxUPiYgb3BlcmF0b3ItLSgp
IHsKICAgICAgICBkZWMoKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUU1hcEl0
ZXJhdG9yPEssVD4gb3BlcmF0b3ItLShpbnQpIHsKICAgICAgICBRTWFwSXRlcmF0b3I8SyxUPiB0
bXAgPSAqdGhpczsKICAgICAgICBkZWMoKTsKICAgICAgICByZXR1cm4gdG1wOwogICAgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIEssIGNsYXNzIFQ+CiBpbnQgUU1hcEl0ZXJhdG9yPEssVD46OmluYygp
CnsKICAgIFFNYXBOb2RlQmFzZSogdG1wID0gbm9kZTsKICAgIGlmICggdG1wLT5yaWdodCApIHsK
ICAgICAgICB0bXAgPSB0bXAtPnJpZ2h0OwogICAgICAgIHdoaWxlICggdG1wLT5sZWZ0ICkKICAg
ICAgICAgICAgdG1wID0gdG1wLT5sZWZ0OwogICAgfSBlbHNlIHsKICAgICAgICBRTWFwTm9kZUJh
c2UqIHkgPSB0bXAtPnBhcmVudDsKICAgICAgICB3aGlsZSAodG1wID09IHktPnJpZ2h0KSB7CiAg
ICAgICAgICAgIHRtcCA9IHk7CiAgICAgICAgICAgIHkgPSB5LT5wYXJlbnQ7CiAgICAgICAgfQog
ICAgICAgIGlmICh0bXAtPnJpZ2h0ICE9IHkpCiAgICAgICAgICAgIHRtcCA9IHk7CiAgICB9CiAg
ICBub2RlID0gKE5vZGVQdHIpdG1wOwogICAgcmV0dXJuIDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBL
LCBjbGFzcyBUPgogaW50IFFNYXBJdGVyYXRvcjxLLFQ+OjpkZWMoKQp7CiAgICBRTWFwTm9kZUJh
c2UqIHRtcCA9IG5vZGU7CiAgICBpZiAodG1wLT5jb2xvciA9PSBRTWFwTm9kZUJhc2U6OlJlZCAm
JgogICAgICAgIHRtcC0+cGFyZW50LT5wYXJlbnQgPT0gdG1wICkgewogICAgICAgIHRtcCA9IHRt
cC0+cmlnaHQ7CiAgICB9IGVsc2UgaWYgKHRtcC0+bGVmdCAhPSAwKSB7CiAgICAgICAgUU1hcE5v
ZGVCYXNlKiB5ID0gdG1wLT5sZWZ0OwogICAgICAgIHdoaWxlICggeS0+cmlnaHQgKQogICAgICAg
ICAgICB5ID0geS0+cmlnaHQ7CiAgICAgICAgdG1wID0geTsKICAgIH0gZWxzZSB7CiAgICAgICAg
UU1hcE5vZGVCYXNlKiB5ID0gdG1wLT5wYXJlbnQ7CiAgICAgICAgd2hpbGUgKHRtcCA9PSB5LT5s
ZWZ0KSB7CiAgICAgICAgICAgIHRtcCA9IHk7CiAgICAgICAgICAgIHkgPSB5LT5wYXJlbnQ7CiAg
ICAgICAgfQogICAgICAgIHRtcCA9IHk7CiAgICB9CiAgICBub2RlID0gKE5vZGVQdHIpdG1wOwog
ICAgcmV0dXJuIDA7Cn0KCnRlbXBsYXRlPGNsYXNzIEssIGNsYXNzIFQ+CmNsYXNzIFFNYXBDb25z
dEl0ZXJhdG9yCnsKIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgUU1hcE5vZGU8IEssIFQgPiogTm9k
ZVB0cjsKCiAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0
b3JfY2F0ZWdvcnk7CgogICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CgogICAgdHlwZWRlZiBwdHJk
aWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKCgogICAgdHlwZWRlZiBjb25zdCBUKiBwb2ludGVyOwog
ICAgdHlwZWRlZiBjb25zdCBUJiByZWZlcmVuY2U7CgoKCgoKICAgIFFNYXBOb2RlPEssVD4qIG5v
ZGU7CgoKCgogICAgUU1hcENvbnN0SXRlcmF0b3IoKSA6IG5vZGUoIDAgKSB7fQogICAgUU1hcENv
bnN0SXRlcmF0b3IoIFFNYXBOb2RlPEssVD4qIHAgKSA6IG5vZGUoIHAgKSB7fQogICAgUU1hcENv
bnN0SXRlcmF0b3IoIGNvbnN0IFFNYXBDb25zdEl0ZXJhdG9yPEssVD4mIGl0ICkgOiBub2RlKCBp
dC5ub2RlICkge30KICAgIFFNYXBDb25zdEl0ZXJhdG9yKCBjb25zdCBRTWFwSXRlcmF0b3I8SyxU
PiYgaXQgKSA6IG5vZGUoIGl0Lm5vZGUgKSB7fQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3Qg
UU1hcENvbnN0SXRlcmF0b3I8SyxUPiYgaXQgKSBjb25zdCB7IHJldHVybiBub2RlID09IGl0Lm5v
ZGU7IH0KICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUU1hcENvbnN0SXRlcmF0b3I8SyxUPiYg
aXQgKSBjb25zdCB7IHJldHVybiBub2RlICE9IGl0Lm5vZGU7IH0KICAgIGNvbnN0IFQmIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KCgoKICAgIGNvbnN0IEsmIGtleSgp
IGNvbnN0IHsgcmV0dXJuIG5vZGUtPmtleTsgfQogICAgY29uc3QgVCYgZGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG5vZGUtPmRhdGE7IH0KCnByaXZhdGU6CiAgICBpbnQgaW5jKCk7CiAgICBpbnQgZGVj
KCk7CgpwdWJsaWM6CiAgICBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+JiBvcGVyYXRvcisrKCkgewog
ICAgICAgIGluYygpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBRTWFwQ29uc3RJ
dGVyYXRvcjxLLFQ+IG9wZXJhdG9yKysoaW50KSB7CiAgICAgICAgUU1hcENvbnN0SXRlcmF0b3I8
SyxUPiB0bXAgPSAqdGhpczsKICAgICAgICBpbmMoKTsKICAgICAgICByZXR1cm4gdG1wOwogICAg
fQoKICAgIFFNYXBDb25zdEl0ZXJhdG9yPEssVD4mIG9wZXJhdG9yLS0oKSB7CiAgICAgICAgZGVj
KCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFNYXBDb25zdEl0ZXJhdG9yPEss
VD4gb3BlcmF0b3ItLShpbnQpIHsKICAgICAgICBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+IHRtcCA9
ICp0aGlzOwogICAgICAgIGRlYygpOwogICAgICAgIHJldHVybiB0bXA7CiAgICB9Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgSywgY2xhc3MgVD4KIGludCBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+OjppbmMo
KQp7CiAgICBRTWFwTm9kZUJhc2UqIHRtcCA9IG5vZGU7CiAgICBpZiAoIHRtcC0+cmlnaHQgKSB7
CiAgICAgICAgdG1wID0gdG1wLT5yaWdodDsKICAgICAgICB3aGlsZSAoIHRtcC0+bGVmdCApCiAg
ICAgICAgICAgIHRtcCA9IHRtcC0+bGVmdDsKICAgIH0gZWxzZSB7CiAgICAgICAgUU1hcE5vZGVC
YXNlKiB5ID0gdG1wLT5wYXJlbnQ7CiAgICAgICAgd2hpbGUgKHRtcCA9PSB5LT5yaWdodCkgewog
ICAgICAgICAgICB0bXAgPSB5OwogICAgICAgICAgICB5ID0geS0+cGFyZW50OwogICAgICAgIH0K
ICAgICAgICBpZiAodG1wLT5yaWdodCAhPSB5KQogICAgICAgICAgICB0bXAgPSB5OwogICAgfQog
ICAgbm9kZSA9IChOb2RlUHRyKXRtcDsKICAgIHJldHVybiAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
SywgY2xhc3MgVD4KIGludCBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+OjpkZWMoKQp7CiAgICBRTWFw
Tm9kZUJhc2UqIHRtcCA9IG5vZGU7CiAgICBpZiAodG1wLT5jb2xvciA9PSBRTWFwTm9kZUJhc2U6
OlJlZCAmJgogICAgICAgIHRtcC0+cGFyZW50LT5wYXJlbnQgPT0gdG1wICkgewogICAgICAgIHRt
cCA9IHRtcC0+cmlnaHQ7CiAgICB9IGVsc2UgaWYgKHRtcC0+bGVmdCAhPSAwKSB7CiAgICAgICAg
UU1hcE5vZGVCYXNlKiB5ID0gdG1wLT5sZWZ0OwogICAgICAgIHdoaWxlICggeS0+cmlnaHQgKQog
ICAgICAgICAgICB5ID0geS0+cmlnaHQ7CiAgICAgICAgdG1wID0geTsKICAgIH0gZWxzZSB7CiAg
ICAgICAgUU1hcE5vZGVCYXNlKiB5ID0gdG1wLT5wYXJlbnQ7CiAgICAgICAgd2hpbGUgKHRtcCA9
PSB5LT5sZWZ0KSB7CiAgICAgICAgICAgIHRtcCA9IHk7CiAgICAgICAgICAgIHkgPSB5LT5wYXJl
bnQ7CiAgICAgICAgfQogICAgICAgIHRtcCA9IHk7CiAgICB9CiAgICBub2RlID0gKE5vZGVQdHIp
dG1wOwogICAgcmV0dXJuIDA7Cn0KCmNsYXNzIFFNYXBQcml2YXRlQmFzZSA6IHB1YmxpYyBRU2hh
cmVkCnsKcHVibGljOgogICAgUU1hcFByaXZhdGVCYXNlKCkgewogICAgICAgIG5vZGVfY291bnQg
PSAwOwogICAgfQogICAgUU1hcFByaXZhdGVCYXNlKCBjb25zdCBRTWFwUHJpdmF0ZUJhc2UqIF9t
YXApIHsKICAgICAgICBub2RlX2NvdW50ID0gX21hcC0+bm9kZV9jb3VudDsKICAgIH0KCgoKCiAg
ICB2b2lkIHJvdGF0ZUxlZnQoIFFNYXBOb2RlQmFzZSogeCwgUU1hcE5vZGVCYXNlKiYgcm9vdCk7
CiAgICB2b2lkIHJvdGF0ZVJpZ2h0KCBRTWFwTm9kZUJhc2UqIHgsIFFNYXBOb2RlQmFzZSomIHJv
b3QgKTsKICAgIHZvaWQgcmViYWxhbmNlKCBRTWFwTm9kZUJhc2UqIHgsIFFNYXBOb2RlQmFzZSom
IHJvb3QgKTsKICAgIFFNYXBOb2RlQmFzZSogcmVtb3ZlQW5kUmViYWxhbmNlKCBRTWFwTm9kZUJh
c2UqIHosIFFNYXBOb2RlQmFzZSomIHJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUU1hcE5vZGVCYXNlKiYgbGVmdG1vc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUU1hcE5vZGVCYXNlKiYgcmlnaHRtb3N0ICk7CgoKCgogICAgaW50IG5v
ZGVfY291bnQ7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KY2xhc3MgUU1hcFBy
aXZhdGUgOiBwdWJsaWMgUU1hcFByaXZhdGVCYXNlCnsKcHVibGljOgoKCgogICAgdHlwZWRlZiBR
TWFwSXRlcmF0b3I8IEtleSwgVCA+IEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRTWFwQ29uc3RJdGVy
YXRvcjwgS2V5LCBUID4gQ29uc3RJdGVyYXRvcjsKICAgIHR5cGVkZWYgUU1hcE5vZGU8IEtleSwg
VCA+IE5vZGU7CiAgICB0eXBlZGVmIFFNYXBOb2RlPCBLZXksIFQgPiogTm9kZVB0cjsKCgoKCiAg
ICBRTWFwUHJpdmF0ZSgpOwogICAgUU1hcFByaXZhdGUoIGNvbnN0IFFNYXBQcml2YXRlPCBLZXks
IFQgPiogX21hcCApOwogICAgflFNYXBQcml2YXRlKCkgeyBjbGVhcigpOyBkZWxldGUgaGVhZGVy
OyB9CgogICAgTm9kZVB0ciBjb3B5KCBOb2RlUHRyIHAgKTsKICAgIHZvaWQgY2xlYXIoKTsKICAg
IHZvaWQgY2xlYXIoIE5vZGVQdHIgcCApOwoKICAgIEl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4g
SXRlcmF0b3IoIChOb2RlUHRyKShoZWFkZXItPmxlZnQgKSApOyB9CiAgICBJdGVyYXRvciBlbmQo
KSB7IHJldHVybiBJdGVyYXRvciggaGVhZGVyICk7IH0KICAgIENvbnN0SXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9yKCAoTm9kZVB0cikoaGVhZGVyLT5sZWZ0ICkg
KTsgfQogICAgQ29uc3RJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9y
KCBoZWFkZXIgKTsgfQoKICAgIENvbnN0SXRlcmF0b3IgZmluZChjb25zdCBLZXkmIGspIGNvbnN0
OwoKICAgIHZvaWQgcmVtb3ZlKCBJdGVyYXRvciBpdCApIHsKICAgICAgICBOb2RlUHRyIGRlbCA9
IChOb2RlUHRyKSByZW1vdmVBbmRSZWJhbGFuY2UoIGl0Lm5vZGUsIGhlYWRlci0+cGFyZW50LCBo
ZWFkZXItPmxlZnQsIGhlYWRlci0+cmlnaHQgKTsKICAgICAgICBkZWxldGUgZGVsOwogICAgICAg
IC0tbm9kZV9jb3VudDsKICAgIH0KIyA0MTQgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYv
aW5jbHVkZS9xbWFwLmgiCiAgICBJdGVyYXRvciBpbnNlcnRTaW5nbGUoIGNvbnN0IEtleSYgayAp
OwogICAgSXRlcmF0b3IgaW5zZXJ0KCBRTWFwTm9kZUJhc2UqIHgsIFFNYXBOb2RlQmFzZSogeSwg
Y29uc3QgS2V5JiBrICk7Cgpwcm90ZWN0ZWQ6CgoKCiAgICBjb25zdCBLZXkmIGtleSggUU1hcE5v
ZGVCYXNlKiBiICkgY29uc3QgeyByZXR1cm4gKChOb2RlUHRyKWIpLT5rZXk7IH0KCgoKCiAgICBO
b2RlUHRyIGhlYWRlcjsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPgogUU1hcFBy
aXZhdGU8S2V5LFQ+OjpRTWFwUHJpdmF0ZSgpIHsKICAgIGhlYWRlciA9IG5ldyBOb2RlOwogICAg
aGVhZGVyLT5jb2xvciA9IFFNYXBOb2RlQmFzZTo6UmVkOwogICAgaGVhZGVyLT5wYXJlbnQgPSAw
OwogICAgaGVhZGVyLT5sZWZ0ID0gaGVhZGVyLT5yaWdodCA9IGhlYWRlcjsKfQp0ZW1wbGF0ZSA8
Y2xhc3MgS2V5LCBjbGFzcyBUPgogUU1hcFByaXZhdGU8S2V5LFQ+OjpRTWFwUHJpdmF0ZSggY29u
c3QgUU1hcFByaXZhdGU8IEtleSwgVCA+KiBfbWFwICkgOiBRTWFwUHJpdmF0ZUJhc2UoIF9tYXAg
KSB7CiAgICBoZWFkZXIgPSBuZXcgTm9kZTsKICAgIGhlYWRlci0+Y29sb3IgPSBRTWFwTm9kZUJh
c2U6OlJlZDsKICAgIGlmICggX21hcC0+aGVhZGVyLT5wYXJlbnQgPT0gMCApIHsKICAgICAgICBo
ZWFkZXItPnBhcmVudCA9IDA7CiAgICAgICAgaGVhZGVyLT5sZWZ0ID0gaGVhZGVyLT5yaWdodCA9
IGhlYWRlcjsKICAgIH0gZWxzZSB7CiAgICAgICAgaGVhZGVyLT5wYXJlbnQgPSBjb3B5KCAoTm9k
ZVB0cikoX21hcC0+aGVhZGVyLT5wYXJlbnQpICk7CiAgICAgICAgaGVhZGVyLT5wYXJlbnQtPnBh
cmVudCA9IGhlYWRlcjsKICAgICAgICBoZWFkZXItPmxlZnQgPSBoZWFkZXItPnBhcmVudC0+bWlu
aW11bSgpOwogICAgICAgIGhlYWRlci0+cmlnaHQgPSBoZWFkZXItPnBhcmVudC0+bWF4aW11bSgp
OwogICAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPgogdHlwZW5hbWUgUU1hcFBy
aXZhdGU8S2V5LFQ+OjpOb2RlUHRyIFFNYXBQcml2YXRlPEtleSxUPjo6Y29weSggdHlwZW5hbWUg
UU1hcFByaXZhdGU8S2V5LFQ+OjpOb2RlUHRyIHAgKQp7CiAgICBpZiAoICFwICkKICAgICAgICBy
ZXR1cm4gMDsKICAgIE5vZGVQdHIgbiA9IG5ldyBOb2RlKCAqcCApOwogICAgbi0+Y29sb3IgPSBw
LT5jb2xvcjsKICAgIGlmICggcC0+bGVmdCApIHsKICAgICAgICBuLT5sZWZ0ID0gY29weSggKE5v
ZGVQdHIpKHAtPmxlZnQpICk7CiAgICAgICAgbi0+bGVmdC0+cGFyZW50ID0gbjsKICAgIH0gZWxz
ZSB7CiAgICAgICAgbi0+bGVmdCA9IDA7CiAgICB9CiAgICBpZiAoIHAtPnJpZ2h0ICkgewogICAg
ICAgIG4tPnJpZ2h0ID0gY29weSggKE5vZGVQdHIpKHAtPnJpZ2h0KSApOwogICAgICAgIG4tPnJp
Z2h0LT5wYXJlbnQgPSBuOwogICAgfSBlbHNlIHsKICAgICAgICBuLT5yaWdodCA9IDA7CiAgICB9
CiAgICByZXR1cm4gbjsKfQoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KIHZvaWQgUU1h
cFByaXZhdGU8S2V5LFQ+OjpjbGVhcigpCnsKICAgIGNsZWFyKCAoTm9kZVB0cikoaGVhZGVyLT5w
YXJlbnQpICk7CiAgICBoZWFkZXItPmNvbG9yID0gUU1hcE5vZGVCYXNlOjpSZWQ7CiAgICBoZWFk
ZXItPnBhcmVudCA9IDA7CiAgICBoZWFkZXItPmxlZnQgPSBoZWFkZXItPnJpZ2h0ID0gaGVhZGVy
OwogICAgbm9kZV9jb3VudCA9IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFQ+CiB2
b2lkIFFNYXBQcml2YXRlPEtleSxUPjo6Y2xlYXIoIHR5cGVuYW1lIFFNYXBQcml2YXRlPEtleSxU
Pjo6Tm9kZVB0ciBwICkKewogICAgd2hpbGUgKCBwICE9IDAgKSB7CiAgICAgICAgY2xlYXIoIChO
b2RlUHRyKXAtPnJpZ2h0ICk7CiAgICAgICAgTm9kZVB0ciB5ID0gKE5vZGVQdHIpcC0+bGVmdDsK
ICAgICAgICBkZWxldGUgcDsKICAgICAgICBwID0geTsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNz
IEtleSwgY2xhc3MgVD4KIHR5cGVuYW1lIFFNYXBQcml2YXRlPEtleSxUPjo6Q29uc3RJdGVyYXRv
ciBRTWFwUHJpdmF0ZTxLZXksVD46OmZpbmQoY29uc3QgS2V5JiBrKSBjb25zdAp7CiAgICBRTWFw
Tm9kZUJhc2UqIHkgPSBoZWFkZXI7CiAgICBRTWFwTm9kZUJhc2UqIHggPSBoZWFkZXItPnBhcmVu
dDsKCiAgICB3aGlsZSAoIHggIT0gMCApIHsKCiAgICAgICAgaWYgKCAhKCBrZXkoeCkgPCBrICkg
KSB7CiAgICAgICAgICAgIHkgPSB4OwogICAgICAgICAgICB4ID0geC0+bGVmdDsKICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICB4ID0geC0+cmlnaHQ7CiAgICAgICAgfQogICAgfQoKCgogICAg
aWYgKCB5ID09IGhlYWRlciB8fCBrIDwga2V5KHkpICkKICAgICAgICByZXR1cm4gQ29uc3RJdGVy
YXRvciggaGVhZGVyICk7CiAgICByZXR1cm4gQ29uc3RJdGVyYXRvciggKE5vZGVQdHIpeSApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPgogdHlwZW5hbWUgUU1hcFByaXZhdGU8S2V5
LFQ+OjpJdGVyYXRvciBRTWFwUHJpdmF0ZTxLZXksVD46Omluc2VydFNpbmdsZSggY29uc3QgS2V5
JiBrICkKewoKICAgIFFNYXBOb2RlQmFzZSogeSA9IGhlYWRlcjsKICAgIFFNYXBOb2RlQmFzZSog
eCA9IGhlYWRlci0+cGFyZW50OwogICAgYm9vbCByZXN1bHQgPSBUUlVFOwogICAgd2hpbGUgKCB4
ICE9IDAgKSB7CiAgICAgICAgcmVzdWx0ID0gKCBrIDwga2V5KHgpICk7CiAgICAgICAgeSA9IHg7
CiAgICAgICAgeCA9IHJlc3VsdCA/IHgtPmxlZnQgOiB4LT5yaWdodDsKICAgIH0KCiAgICBJdGVy
YXRvciBqKCAoTm9kZVB0cil5ICk7CiAgICBpZiAoIHJlc3VsdCApIHsKCiAgICAgICAgaWYgKCBq
ID09IGJlZ2luKCkgKSB7CiAgICAgICAgICAgIHJldHVybiBpbnNlcnQoeCwgeSwgayApOwogICAg
ICAgIH0gZWxzZSB7CgogICAgICAgICAgICAtLWo7CiAgICAgICAgfQogICAgfQoKICAgIGlmICgg
KGoubm9kZS0+a2V5KSA8IGsgKQogICAgICAgIHJldHVybiBpbnNlcnQoeCwgeSwgayApOwoKICAg
IHJldHVybiBqOwp9CgoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KIHR5cGVuYW1lIFFN
YXBQcml2YXRlPEtleSxUPjo6SXRlcmF0b3IgUU1hcFByaXZhdGU8S2V5LFQ+OjppbnNlcnQoIFFN
YXBOb2RlQmFzZSogeCwgUU1hcE5vZGVCYXNlKiB5LCBjb25zdCBLZXkmIGsgKQp7CiAgICBOb2Rl
UHRyIHogPSBuZXcgTm9kZSggayApOwogICAgaWYgKHkgPT0gaGVhZGVyIHx8IHggIT0gMCB8fCBr
IDwga2V5KHkpICkgewogICAgICAgIHktPmxlZnQgPSB6OwogICAgICAgIGlmICggeSA9PSBoZWFk
ZXIgKSB7CiAgICAgICAgICAgIGhlYWRlci0+cGFyZW50ID0gejsKICAgICAgICAgICAgaGVhZGVy
LT5yaWdodCA9IHo7CiAgICAgICAgfSBlbHNlIGlmICggeSA9PSBoZWFkZXItPmxlZnQgKQogICAg
ICAgICAgICBoZWFkZXItPmxlZnQgPSB6OwogICAgfSBlbHNlIHsKICAgICAgICB5LT5yaWdodCA9
IHo7CiAgICAgICAgaWYgKCB5ID09IGhlYWRlci0+cmlnaHQgKQogICAgICAgICAgICBoZWFkZXIt
PnJpZ2h0ID0gejsKICAgIH0KICAgIHotPnBhcmVudCA9IHk7CiAgICB6LT5sZWZ0ID0gMDsKICAg
IHotPnJpZ2h0ID0gMDsKICAgIHJlYmFsYW5jZSggeiwgaGVhZGVyLT5wYXJlbnQgKTsKICAgICsr
bm9kZV9jb3VudDsKICAgIHJldHVybiBJdGVyYXRvcih6KTsKfQojIDU4NyAiL3Vzci9sb2NhbC9x
dC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FtYXAuaCIKdGVtcGxhdGU8Y2xhc3MgS2V5LCBjbGFz
cyBUPgpjbGFzcyBRTWFwCnsKcHVibGljOgoKCgogICAgdHlwZWRlZiBLZXkga2V5X3R5cGU7CiAg
ICB0eXBlZGVmIFQgbWFwcGVkX3R5cGU7CiAgICB0eXBlZGVmIFFQYWlyPGNvbnN0IGtleV90eXBl
LCBtYXBwZWRfdHlwZT4gdmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRl
cjsKICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICAgIHR5cGVk
ZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBj
b25zdF9yZWZlcmVuY2U7CgogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoK
CgogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgdHlwZWRlZiBRTWFwSXRlcmF0b3I8
S2V5LFQ+IGl0ZXJhdG9yOwogICAgdHlwZWRlZiBRTWFwQ29uc3RJdGVyYXRvcjxLZXksVD4gY29u
c3RfaXRlcmF0b3I7CiAgICB0eXBlZGVmIFFQYWlyPGl0ZXJhdG9yLGJvb2w+IGluc2VydF9wYWly
OwoKICAgIHR5cGVkZWYgUU1hcEl0ZXJhdG9yPCBLZXksIFQgPiBJdGVyYXRvcjsKICAgIHR5cGVk
ZWYgUU1hcENvbnN0SXRlcmF0b3I8IEtleSwgVCA+IENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVm
IFQgVmFsdWVUeXBlOwogICAgdHlwZWRlZiBRTWFwUHJpdmF0ZTwgS2V5LCBUID4gUHJpdjsKCgoK
CiAgICBRTWFwKCkKICAgIHsKICAgICAgICBzaCA9IG5ldyBRTWFwUHJpdmF0ZTwgS2V5LCBUID47
CiAgICB9CiAgICBRTWFwKCBjb25zdCBRTWFwPEtleSxUPiYgbSApCiAgICB7CiAgICAgICAgc2gg
PSBtLnNoOyBzaC0+cmVmKCk7CiAgICB9CgoKCgoKCiAgICBRTWFwKCBjb25zdCB0eXBlbmFtZSBz
dGQ6Om1hcDxLZXksVD4mIG0gKQogICAgewogICAgICAgIHNoID0gbmV3IFFNYXBQcml2YXRlPEtl
eSxUPjsKCgoKICAgICAgICBRTWFwQ29uc3RJdGVyYXRvcjxLZXksVD4gaXQgPSBtLmJlZ2luKCk7
CgogICAgICAgIGZvciAoIDsgaXQgIT0gbS5lbmQoKTsgKytpdCApIHsKICAgICAgICAgICAgdmFs
dWVfdHlwZSBwKCAoKml0KS5maXJzdCwgKCppdCkuc2Vjb25kICk7CiAgICAgICAgICAgIGluc2Vy
dCggcCApOwogICAgICAgIH0KICAgIH0KCiAgICB+UU1hcCgpCiAgICB7CiAgICAgICAgaWYgKCBz
aC0+ZGVyZWYoKSApCiAgICAgICAgICAgIGRlbGV0ZSBzaDsKICAgIH0KICAgIFFNYXA8S2V5LFQ+
JiBvcGVyYXRvcj0gKCBjb25zdCBRTWFwPEtleSxUPiYgbSApOwoKICAgIFFNYXA8S2V5LFQ+JiBv
cGVyYXRvcj0gKCBjb25zdCB0eXBlbmFtZSBzdGQ6Om1hcDxLZXksVD4mIG0gKQogICAgewogICAg
ICAgIGNsZWFyKCk7CgoKCiAgICAgICAgUU1hcENvbnN0SXRlcmF0b3I8S2V5LFQ+IGl0ID0gbS5i
ZWdpbigpOwoKICAgICAgICBmb3IgKCA7IGl0ICE9IG0uZW5kKCk7ICsraXQgKSB7CiAgICAgICAg
ICAgIHZhbHVlX3R5cGUgcCggKCppdCkuZmlyc3QsICgqaXQpLnNlY29uZCApOwogICAgICAgICAg
ICBpbnNlcnQoIHAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgoK
CgogICAgaXRlcmF0b3IgYmVnaW4oKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPmJlZ2luKCk7IH0K
ICAgIGl0ZXJhdG9yIGVuZCgpIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+ZW5kKCk7IH0KICAgIGNv
bnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gKChjb25zdCBQcml2KilzaCktPmJl
Z2luKCk7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuICgoY29uc3Qg
UHJpdiopc2gpLT5lbmQoKTsgfQogICAgaXRlcmF0b3IgcmVwbGFjZSggY29uc3QgS2V5JiBrLCBj
b25zdCBUJiB2ICkKICAgIHsKICAgICAgICByZW1vdmUoIGsgKTsKICAgICAgICByZXR1cm4gaW5z
ZXJ0KCBrLCB2ICk7CiAgICB9CgogICAgc2l6ZV90eXBlIHNpemUoKSBjb25zdAogICAgewogICAg
ICAgIHJldHVybiBzaC0+bm9kZV9jb3VudDsKICAgIH0KICAgIGJvb2wgZW1wdHkoKSBjb25zdAog
ICAgewogICAgICAgIHJldHVybiBzaC0+bm9kZV9jb3VudCA9PSAwOwogICAgfQogICAgUVBhaXI8
aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KCBjb25zdCB2YWx1ZV90eXBlJiB4ICk7CgogICAgdm9pZCBl
cmFzZSggaXRlcmF0b3IgaXQgKQogICAgewogICAgICAgIGRldGFjaCgpOwogICAgICAgIHNoLT5y
ZW1vdmUoIGl0ICk7CiAgICB9CiAgICB2b2lkIGVyYXNlKCBjb25zdCBrZXlfdHlwZSYgayApOwog
ICAgc2l6ZV90eXBlIGNvdW50KCBjb25zdCBrZXlfdHlwZSYgayApIGNvbnN0OwogICAgVCYgb3Bl
cmF0b3JbXSAoIGNvbnN0IEtleSYgayApOwogICAgdm9pZCBjbGVhcigpOwoKICAgIGl0ZXJhdG9y
IGZpbmQgKCBjb25zdCBLZXkmIGsgKQogICAgewogICAgICAgIGRldGFjaCgpOwogICAgICAgIHJl
dHVybiBpdGVyYXRvciggc2gtPmZpbmQoIGsgKS5ub2RlICk7CiAgICB9CiAgICBjb25zdF9pdGVy
YXRvciBmaW5kICggY29uc3QgS2V5JiBrICkgY29uc3QgeyByZXR1cm4gc2gtPmZpbmQoIGsgKTsg
fQoKICAgIGNvbnN0IFQmIG9wZXJhdG9yW10gKCBjb25zdCBLZXkmIGsgKSBjb25zdAogICAgICAg
IHsgOyByZXR1cm4gc2gtPmZpbmQoIGsgKS5kYXRhKCk7IH0KICAgIGJvb2wgY29udGFpbnMgKCBj
b25zdCBLZXkmIGsgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGZpbmQoIGsgKSAhPSBlbmQoKTsg
fQoKCiAgICBzaXplX3R5cGUgY291bnQoKSBjb25zdCB7IHJldHVybiBzaC0+bm9kZV9jb3VudDsg
fQoKICAgIFFWYWx1ZUxpc3Q8S2V5PiBrZXlzKCkgY29uc3QgewogICAgICAgIFFWYWx1ZUxpc3Q8
S2V5PiByOwogICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaT1iZWdpbigpOyBpIT1lbmQoKTsg
KytpKQogICAgICAgICAgICByLmFwcGVuZChpLmtleSgpKTsKICAgICAgICByZXR1cm4gcjsKICAg
IH0KCiAgICBRVmFsdWVMaXN0PFQ+IHZhbHVlcygpIGNvbnN0IHsKICAgICAgICBRVmFsdWVMaXN0
PFQ+IHI7CiAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpPWJlZ2luKCk7IGkhPWVuZCgpOyAr
K2kpCiAgICAgICAgICAgIHIuYXBwZW5kKCppKTsKICAgICAgICByZXR1cm4gcjsKICAgIH0KCiAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBzaC0+bm9kZV9jb3VudCA9PSAwOyB9Cgog
ICAgaXRlcmF0b3IgaW5zZXJ0KCBjb25zdCBLZXkmIGtleSwgY29uc3QgVCYgdmFsdWUsIGJvb2wg
b3ZlcndyaXRlID0gVFJVRSApOwogICAgdm9pZCByZW1vdmUoIGl0ZXJhdG9yIGl0ICkgeyBkZXRh
Y2goKTsgc2gtPnJlbW92ZSggaXQgKTsgfQogICAgdm9pZCByZW1vdmUoIGNvbnN0IEtleSYgayAp
OwojIDc0NiAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FtYXAuaCIKcHJv
dGVjdGVkOgoKCgogICAgdm9pZCBkZXRhY2goKSB7IGlmICggc2gtPmNvdW50ID4gMSApIGRldGFj
aEludGVybmFsKCk7IH0KCiAgICBQcml2KiBzaDsKcHJpdmF0ZToKICAgIHZvaWQgZGV0YWNoSW50
ZXJuYWwoKTsKfTsKCnRlbXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KIFFNYXA8S2V5LFQ+JiBR
TWFwPEtleSxUPjo6b3BlcmF0b3I9ICggY29uc3QgUU1hcDxLZXksVD4mIG0gKQp7CiAgICBtLnNo
LT5yZWYoKTsKICAgIGlmICggc2gtPmRlcmVmKCkgKQogICAgICAgIGRlbGV0ZSBzaDsKICAgIHNo
ID0gbS5zaDsKICAgIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGU8Y2xhc3MgS2V5LCBjbGFzcyBU
PgogdHlwZW5hbWUgUU1hcDxLZXksVD46Omluc2VydF9wYWlyIFFNYXA8S2V5LFQ+OjppbnNlcnQo
IGNvbnN0IHR5cGVuYW1lIFFNYXA8S2V5LFQ+Ojp2YWx1ZV90eXBlJiB4ICkKewogICAgZGV0YWNo
KCk7CiAgICBzaXplX3R5cGUgbiA9IHNpemUoKTsKICAgIGl0ZXJhdG9yIGl0ID0gc2gtPmluc2Vy
dFNpbmdsZSggeC5maXJzdCApOwogICAgYm9vbCBpbnNlcnRlZCA9IEZBTFNFOwogICAgaWYgKCBu
IDwgc2l6ZSgpICkgewogICAgICAgIGluc2VydGVkID0gVFJVRTsKICAgICAgICBpdC5kYXRhKCkg
PSB4LnNlY29uZDsKICAgIH0KICAgIHJldHVybiBRUGFpcjxpdGVyYXRvcixib29sPiggaXQsIGlu
c2VydGVkICk7Cn0KCnRlbXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KIHZvaWQgUU1hcDxLZXks
VD46OmVyYXNlKCBjb25zdCBLZXkmIGsgKQp7CiAgICBkZXRhY2goKTsKICAgIGl0ZXJhdG9yIGl0
KCBzaC0+ZmluZCggayApLm5vZGUgKTsKICAgIGlmICggaXQgIT0gZW5kKCkgKQogICAgICAgIHNo
LT5yZW1vdmUoIGl0ICk7Cn0KCnRlbXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KIHR5cGVuYW1l
IFFNYXA8S2V5LFQ+OjpzaXplX3R5cGUgUU1hcDxLZXksVD46OmNvdW50KCBjb25zdCBLZXkmIGsg
KSBjb25zdAp7CiAgICBjb25zdF9pdGVyYXRvciBpdCggc2gtPmZpbmQoIGsgKS5ub2RlICk7CiAg
ICBpZiAoIGl0ICE9IGVuZCgpICkgewogICAgICAgIHNpemVfdHlwZSBjID0gMDsKICAgICAgICB3
aGlsZSAoIGl0ICE9IGVuZCgpICkgewogICAgICAgICAgICArK2l0OwogICAgICAgICAgICArK2M7
CiAgICAgICAgfQogICAgICAgIHJldHVybiBjOwogICAgfQogICAgcmV0dXJuIDA7Cn0KCnRlbXBs
YXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KIFQmIFFNYXA8S2V5LFQ+OjpvcGVyYXRvcltdICggY29u
c3QgS2V5JiBrICkKewogICAgZGV0YWNoKCk7CiAgICBRTWFwTm9kZTxLZXksVD4qIHAgPSBzaC0+
ZmluZCggayApLm5vZGU7CiAgICBpZiAoIHAgIT0gc2gtPmVuZCgpLm5vZGUgKQogICAgICAgIHJl
dHVybiBwLT5kYXRhOwogICAgcmV0dXJuIGluc2VydCggaywgVCgpICkuZGF0YSgpOwp9Cgp0ZW1w
bGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiB2b2lkIFFNYXA8S2V5LFQ+OjpjbGVhcigpCnsKICAg
IGlmICggc2gtPmNvdW50ID09IDEgKQogICAgICAgIHNoLT5jbGVhcigpOwogICAgZWxzZSB7CiAg
ICAgICAgc2gtPmRlcmVmKCk7CiAgICAgICAgc2ggPSBuZXcgUU1hcFByaXZhdGU8S2V5LFQ+Owog
ICAgfQp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiB0eXBlbmFtZSBRTWFwPEtleSxU
Pjo6aXRlcmF0b3IgUU1hcDxLZXksVD46Omluc2VydCggY29uc3QgS2V5JiBrZXksIGNvbnN0IFQm
IHZhbHVlLCBib29sIG92ZXJ3cml0ZSApCnsKICAgIGRldGFjaCgpOwogICAgc2l6ZV90eXBlIG4g
PSBzaXplKCk7CiAgICBpdGVyYXRvciBpdCA9IHNoLT5pbnNlcnRTaW5nbGUoIGtleSApOwogICAg
aWYgKCBvdmVyd3JpdGUgfHwgbiA8IHNpemUoKSApCiAgICAgICAgaXQuZGF0YSgpID0gdmFsdWU7
CiAgICByZXR1cm4gaXQ7Cn0KCnRlbXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KIHZvaWQgUU1h
cDxLZXksVD46OnJlbW92ZSggY29uc3QgS2V5JiBrICkKewogICAgZGV0YWNoKCk7CiAgICBpdGVy
YXRvciBpdCggc2gtPmZpbmQoIGsgKS5ub2RlICk7CiAgICBpZiAoIGl0ICE9IGVuZCgpICkKICAg
ICAgICBzaC0+cmVtb3ZlKCBpdCApOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiB2
b2lkIFFNYXA8S2V5LFQ+OjpkZXRhY2hJbnRlcm5hbCgpCnsKICAgIHNoLT5kZXJlZigpOyBzaCA9
IG5ldyBRTWFwUHJpdmF0ZTxLZXksVD4oIHNoICk7Cn0KCgoKdGVtcGxhdGU8Y2xhc3MgS2V5LCBj
bGFzcyBUPgogUURhdGFTdHJlYW0mIG9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtJiBzLCBRTWFwPEtl
eSxUPiYgbSApIHsKICAgIG0uY2xlYXIoKTsKICAgIFFfVUlOVDMyIGM7CiAgICBzID4+IGM7CiAg
ICBmb3IoIFFfVUlOVDMyIGkgPSAwOyBpIDwgYzsgKytpICkgewogICAgICAgIEtleSBrOyBUIHQ7
CiAgICAgICAgcyA+PiBrID4+IHQ7CiAgICAgICAgbS5pbnNlcnQoIGssIHQgKTsKICAgICAgICBp
ZiAoIHMuYXRFbmQoKSApCiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIHM7Cn0K
Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiBRRGF0YVN0cmVhbSYgb3BlcmF0b3I8PCgg
UURhdGFTdHJlYW0mIHMsIGNvbnN0IFFNYXA8S2V5LFQ+JiBtICkgewogICAgcyA8PCAoUV9VSU5U
MzIpbS5zaXplKCk7CiAgICBRTWFwQ29uc3RJdGVyYXRvcjxLZXksVD4gaXQgPSBtLmJlZ2luKCk7
CiAgICBmb3IoIDsgaXQgIT0gbS5lbmQoKTsgKytpdCApCiAgICAgICAgcyA8PCBpdC5rZXkoKSA8
PCBpdC5kYXRhKCk7CiAgICByZXR1cm4gczsKfQojIDQ0ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVl
LTMuMC42L2luY2x1ZGUvcW1pbWUuaCIgMgoKCgoKY2xhc3MgUUltYWdlRHJhZzsKY2xhc3MgUVRl
eHREcmFnOwoKY2xhc3MgUU1pbWVTb3VyY2UKewogICAgZnJpZW5kIGNsYXNzIFFDbGlwYm9hcmRE
YXRhOwoKcHVibGljOgogICAgUU1pbWVTb3VyY2UoKTsKICAgIHZpcnR1YWwgflFNaW1lU291cmNl
KCk7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZvcm1hdCggaW50IG4gPSAwICkgY29uc3QgPSAw
OwogICAgdmlydHVhbCBib29sIHByb3ZpZGVzKCBjb25zdCBjaGFyKiApIGNvbnN0OwogICAgdmly
dHVhbCBRQnl0ZUFycmF5IGVuY29kZWREYXRhKCBjb25zdCBjaGFyKiApIGNvbnN0ID0gMDsKICAg
IGludCBzZXJpYWxOdW1iZXIoKSBjb25zdDsKCnByaXZhdGU6CiAgICBpbnQgc2VyX25vOwogICAg
ZW51bSB7IE5vQ2FjaGUsIFRleHQsIEdyYXBoaWNzIH0gY2FjaGVUeXBlOwogICAgdW5pb24KICAg
IHsKICAgICAgICBzdHJ1Y3QKICAgICAgICB7CiAgICAgICAgICAgIFFTdHJpbmcgKnN0cjsKICAg
ICAgICAgICAgUUNTdHJpbmcgKnN1YnR5cGU7CiAgICAgICAgfSB0eHQ7CiAgICAgICAgc3RydWN0
CiAgICAgICAgewogICAgICAgICAgICBRSW1hZ2UgKmltZzsKICAgICAgICAgICAgUVBpeG1hcCAq
cGl4OwogICAgICAgIH0gZ2Z4OwogICAgfSBjYWNoZTsKICAgIHZvaWQgY2xlYXJDYWNoZSgpOwoK
CiAgICBmcmllbmQgY2xhc3MgUUltYWdlRHJhZzsKICAgIGZyaWVuZCBjbGFzcyBRVGV4dERyYWc7
Cgp9OwoKaW5saW5lIGludCBRTWltZVNvdXJjZTo6c2VyaWFsTnVtYmVyKCkgY29uc3QKeyByZXR1
cm4gc2VyX25vOyB9CgpjbGFzcyBRU3RyaW5nTGlzdDsKY2xhc3MgUU1pbWVTb3VyY2VGYWN0b3J5
RGF0YTsKCmNsYXNzIFFNaW1lU291cmNlRmFjdG9yeSB7CnB1YmxpYzoKICAgIFFNaW1lU291cmNl
RmFjdG9yeSgpOwogICAgdmlydHVhbCB+UU1pbWVTb3VyY2VGYWN0b3J5KCk7CgogICAgc3RhdGlj
IFFNaW1lU291cmNlRmFjdG9yeSogZGVmYXVsdEZhY3RvcnkoKTsKICAgIHN0YXRpYyB2b2lkIHNl
dERlZmF1bHRGYWN0b3J5KCBRTWltZVNvdXJjZUZhY3RvcnkqICk7CiAgICBzdGF0aWMgUU1pbWVT
b3VyY2VGYWN0b3J5KiB0YWtlRGVmYXVsdEZhY3RvcnkoKTsKICAgIHN0YXRpYyB2b2lkIGFkZEZh
Y3RvcnkoIFFNaW1lU291cmNlRmFjdG9yeSAqZiApOwogICAgc3RhdGljIHZvaWQgcmVtb3ZlRmFj
dG9yeSggUU1pbWVTb3VyY2VGYWN0b3J5ICpmICk7CgogICAgdmlydHVhbCBjb25zdCBRTWltZVNv
dXJjZSogZGF0YShjb25zdCBRU3RyaW5nJiBhYnNfbmFtZSkgY29uc3Q7CiAgICB2aXJ0dWFsIFFT
dHJpbmcgbWFrZUFic29sdXRlKGNvbnN0IFFTdHJpbmcmIGFic19vcl9yZWxfbmFtZSwgY29uc3Qg
UVN0cmluZyYgY29udGV4dCkgY29uc3Q7CiAgICBjb25zdCBRTWltZVNvdXJjZSogZGF0YShjb25z
dCBRU3RyaW5nJiBhYnNfb3JfcmVsX25hbWUsIGNvbnN0IFFTdHJpbmcmIGNvbnRleHQpIGNvbnN0
OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0KCBjb25zdCBRU3RyaW5nJiBhYnNfbmFtZSwgY29u
c3QgUVN0cmluZyYgdGV4dCApOwogICAgdmlydHVhbCB2b2lkIHNldEltYWdlKCBjb25zdCBRU3Ry
aW5nJiBhYnNfbmFtZSwgY29uc3QgUUltYWdlJiBpbSApOwogICAgdmlydHVhbCB2b2lkIHNldFBp
eG1hcCggY29uc3QgUVN0cmluZyYgYWJzX25hbWUsIGNvbnN0IFFQaXhtYXAmIHBtICk7CiAgICB2
aXJ0dWFsIHZvaWQgc2V0RGF0YSggY29uc3QgUVN0cmluZyYgYWJzX25hbWUsIFFNaW1lU291cmNl
KiBkYXRhICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZVBhdGgoIGNvbnN0IFFTdHJpbmdMaXN0
JiApOwogICAgdmlydHVhbCBRU3RyaW5nTGlzdCBmaWxlUGF0aCgpIGNvbnN0OwogICAgdm9pZCBh
ZGRGaWxlUGF0aCggY29uc3QgUVN0cmluZyYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRFeHRlbnNp
b25UeXBlKCBjb25zdCBRU3RyaW5nJiBleHQsIGNvbnN0IGNoYXIqIG1pbWV0eXBlICk7Cgpwcml2
YXRlOgogICAgUU1pbWVTb3VyY2UgKmRhdGFJbnRlcm5hbChjb25zdCBRU3RyaW5nJiBhYnNfbmFt
ZSwgY29uc3QgUU1hcDxRU3RyaW5nLCBRU3RyaW5nPiAmZXh0ZW5zaW9ucyApIGNvbnN0OwogICAg
UU1pbWVTb3VyY2VGYWN0b3J5RGF0YSogZDsKfTsKIyA0NiAiL3Vzci9sb2NhbC9xdC14MTEtZnJl
ZS0zLjAuNi9pbmNsdWRlL3FldmVudC5oIiAyCgoKCmNsYXNzIFFFdmVudDogcHVibGljIFF0CnsK
cHVibGljOgogICAgZW51bSBUeXBlIHsKCgoKCgoKICAgICAgICBOb25lID0gMCwKCgogICAgICAg
IFRpbWVyID0gMSwKICAgICAgICBNb3VzZUJ1dHRvblByZXNzID0gMiwKICAgICAgICBNb3VzZUJ1
dHRvblJlbGVhc2UgPSAzLAogICAgICAgIE1vdXNlQnV0dG9uRGJsQ2xpY2s9IDQsCiAgICAgICAg
TW91c2VNb3ZlID0gNSwKICAgICAgICBLZXlQcmVzcyA9IDYsCiAgICAgICAgS2V5UmVsZWFzZSA9
IDcsCiAgICAgICAgRm9jdXNJbiA9IDgsCiAgICAgICAgRm9jdXNPdXQgPSA5LAogICAgICAgIEVu
dGVyID0gMTAsCiAgICAgICAgTGVhdmUgPSAxMSwKICAgICAgICBQYWludCA9IDEyLAogICAgICAg
IE1vdmUgPSAxMywKICAgICAgICBSZXNpemUgPSAxNCwKICAgICAgICBDcmVhdGUgPSAxNSwKICAg
ICAgICBEZXN0cm95ID0gMTYsCiAgICAgICAgU2hvdyA9IDE3LAogICAgICAgIEhpZGUgPSAxOCwK
ICAgICAgICBDbG9zZSA9IDE5LAogICAgICAgIFF1aXQgPSAyMCwKICAgICAgICBSZXBhcmVudCA9
IDIxLAogICAgICAgIFNob3dNaW5pbWl6ZWQgPSAyMiwKICAgICAgICBTaG93Tm9ybWFsID0gMjMs
CiAgICAgICAgV2luZG93QWN0aXZhdGUgPSAyNCwKICAgICAgICBXaW5kb3dEZWFjdGl2YXRlID0g
MjUsCiAgICAgICAgU2hvd1RvUGFyZW50ID0gMjYsCiAgICAgICAgSGlkZVRvUGFyZW50ID0gMjcs
CiAgICAgICAgU2hvd01heGltaXplZCA9IDI4LAogICAgICAgIFNob3dGdWxsU2NyZWVuID0gMjks
CiAgICAgICAgQWNjZWwgPSAzMCwKICAgICAgICBXaGVlbCA9IDMxLAogICAgICAgIEFjY2VsQXZh
aWxhYmxlID0gMzIsCiAgICAgICAgQ2FwdGlvbkNoYW5nZSA9IDMzLAogICAgICAgIEljb25DaGFu
Z2UgPSAzNCwKICAgICAgICBQYXJlbnRGb250Q2hhbmdlID0gMzUsCiAgICAgICAgQXBwbGljYXRp
b25Gb250Q2hhbmdlID0gMzYsCiAgICAgICAgUGFyZW50UGFsZXR0ZUNoYW5nZSA9IDM3LAogICAg
ICAgIEFwcGxpY2F0aW9uUGFsZXR0ZUNoYW5nZSA9IDM4LAogICAgICAgIFBhbGV0dGVDaGFuZ2Ug
PSAzOSwKICAgICAgICBDbGlwYm9hcmQgPSA0MCwKICAgICAgICBTcGVlY2ggPSA0MiwKICAgICAg
ICBTb2NrQWN0ID0gNTAsCiAgICAgICAgQWNjZWxPdmVycmlkZSA9IDUxLAogICAgICAgIERlZmVy
cmVkRGVsZXRlID0gNTIsCiAgICAgICAgRHJhZ0VudGVyID0gNjAsCiAgICAgICAgRHJhZ01vdmUg
PSA2MSwKICAgICAgICBEcmFnTGVhdmUgPSA2MiwKICAgICAgICBEcm9wID0gNjMsCiAgICAgICAg
RHJhZ1Jlc3BvbnNlID0gNjQsCiAgICAgICAgQ2hpbGRJbnNlcnRlZCA9IDcwLAogICAgICAgIENo
aWxkUmVtb3ZlZCA9IDcxLAogICAgICAgIExheW91dEhpbnQgPSA3MiwKICAgICAgICBTaG93V2lu
ZG93UmVxdWVzdCA9IDczLAogICAgICAgIEFjdGl2YXRlQ29udHJvbCA9IDgwLAogICAgICAgIERl
YWN0aXZhdGVDb250cm9sID0gODEsCiAgICAgICAgQ29udGV4dE1lbnUgPSA4MiwKICAgICAgICBJ
TVN0YXJ0ID0gODMsCiAgICAgICAgSU1Db21wb3NlID0gODQsCiAgICAgICAgSU1FbmQgPSA4NSwK
ICAgICAgICBBY2Nlc3NpYmlsaXR5ID0gODYsCiAgICAgICAgVGFibGV0ID0gODcsCiAgICAgICAg
VXNlciA9IDEwMDAsCiAgICAgICAgTWF4VXNlciA9IDY1NTM1CiAgICB9OwoKCiAgICBRRXZlbnQo
IFR5cGUgdHlwZSApIDogdCh0eXBlKSwgcG9zdGVkKEZBTFNFKSwgc3BvbnQoRkFMU0UpIHt9CiAg
ICB2aXJ0dWFsIH5RRXZlbnQoKTsKICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHQ7IH0K
ICAgIGJvb2wgc3BvbnRhbmVvdXMoKSBjb25zdCB7IHJldHVybiBzcG9udDsgfQpwcm90ZWN0ZWQ6
CiAgICBUeXBlIHQ7CnByaXZhdGU6CiAgICB1aW50IHBvc3RlZCA6IDE7CiAgICB1aW50IHNwb250
IDogMTsKCgogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBR
QmFzZUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFFVFdpZGdldDsKfTsKCgpjbGFzcyBR
VGltZXJFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRVGltZXJFdmVudCggaW50
IHRpbWVySWQgKQogICAgICAgIDogUUV2ZW50KFRpbWVyKSwgaWQodGltZXJJZCkge30KICAgIGlu
dCB0aW1lcklkKCkgY29uc3QgeyByZXR1cm4gaWQ7IH0KcHJvdGVjdGVkOgogICAgaW50IGlkOwp9
OwoKCmNsYXNzIFFNb3VzZUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFNb3Vz
ZUV2ZW50KCBUeXBlIHR5cGUsIGNvbnN0IFFQb2ludCAmcG9zLCBpbnQgYnV0dG9uLCBpbnQgc3Rh
dGUgKTsKCiAgICBRTW91c2VFdmVudCggVHlwZSB0eXBlLCBjb25zdCBRUG9pbnQgJnBvcywgY29u
c3QgUVBvaW50Jmdsb2JhbFBvcywKICAgICAgICAgICAgICAgICBpbnQgYnV0dG9uLCBpbnQgc3Rh
dGUgKQogICAgICAgIDogUUV2ZW50KHR5cGUpLCBwKHBvcyksIGcoZ2xvYmFsUG9zKSwgYigodXNo
b3J0KWJ1dHRvbikscygodXNob3J0KXN0YXRlKSxhY2NwdChUUlVFKSB7fTsKCiAgICBjb25zdCBR
UG9pbnQgJnBvcygpIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgIGNvbnN0IFFQb2ludCAmZ2xvYmFs
UG9zKCkgY29uc3QgeyByZXR1cm4gZzsgfQogICAgaW50IHgoKSBjb25zdCB7IHJldHVybiBwLngo
KTsgfQogICAgaW50IHkoKSBjb25zdCB7IHJldHVybiBwLnkoKTsgfQogICAgaW50IGdsb2JhbFgo
KSBjb25zdCB7IHJldHVybiBnLngoKTsgfQogICAgaW50IGdsb2JhbFkoKSBjb25zdCB7IHJldHVy
biBnLnkoKTsgfQogICAgQnV0dG9uU3RhdGUgYnV0dG9uKCkgY29uc3QgeyByZXR1cm4gKEJ1dHRv
blN0YXRlKSBiOyB9CiAgICBCdXR0b25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIChCdXR0
b25TdGF0ZSkgczsgfQogICAgQnV0dG9uU3RhdGUgc3RhdGVBZnRlcigpIGNvbnN0OwogICAgYm9v
bCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYWNjcHQ7IH0KICAgIHZvaWQgYWNjZXB0KCkg
eyBhY2NwdCA9IFRSVUU7IH0KICAgIHZvaWQgaWdub3JlKCkgeyBhY2NwdCA9IEZBTFNFOyB9CnBy
b3RlY3RlZDoKICAgIFFQb2ludCBwOwogICAgUVBvaW50IGc7CiAgICB1c2hvcnQgYjsKICAgIHVz
aG9ydCBzOwogICAgdWludCBhY2NwdDoxOwp9OwoKCgpjbGFzcyBRV2hlZWxFdmVudCA6IHB1Ymxp
YyBRRXZlbnQKewpwdWJsaWM6CiAgICBRV2hlZWxFdmVudCggY29uc3QgUVBvaW50ICZwb3MsIGlu
dCBkZWx0YSwgaW50IHN0YXRlLCBPcmllbnRhdGlvbiBvcmllbnQgPSBWZXJ0aWNhbCApOwogICAg
UVdoZWVsRXZlbnQoIGNvbnN0IFFQb2ludCAmcG9zLCBjb25zdCBRUG9pbnQmIGdsb2JhbFBvcywg
aW50IGRlbHRhLCBpbnQgc3RhdGUsIE9yaWVudGF0aW9uIG9yaWVudCA9IFZlcnRpY2FsICkKICAg
ICAgICA6IFFFdmVudChXaGVlbCksIHAocG9zKSwgZyhnbG9iYWxQb3MpLCBkKGRlbHRhKSwgcygo
dXNob3J0KXN0YXRlKSwKICAgICAgICAgIGFjY3B0KFRSVUUpLCBvKG9yaWVudCkge30KICAgIGlu
dCBkZWx0YSgpIGNvbnN0IHsgcmV0dXJuIGQ7IH0KICAgIGNvbnN0IFFQb2ludCAmcG9zKCkgY29u
c3QgeyByZXR1cm4gcDsgfQogICAgY29uc3QgUVBvaW50ICZnbG9iYWxQb3MoKSBjb25zdCB7IHJl
dHVybiBnOyB9CiAgICBpbnQgeCgpIGNvbnN0IHsgcmV0dXJuIHAueCgpOyB9CiAgICBpbnQgeSgp
IGNvbnN0IHsgcmV0dXJuIHAueSgpOyB9CiAgICBpbnQgZ2xvYmFsWCgpIGNvbnN0IHsgcmV0dXJu
IGcueCgpOyB9CiAgICBpbnQgZ2xvYmFsWSgpIGNvbnN0IHsgcmV0dXJuIGcueSgpOyB9CiAgICBC
dXR0b25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIEJ1dHRvblN0YXRlKHMpOyB9CiAgICBP
cmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG87IH0KICAgIGJvb2wgaXNB
Y2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGFjY3B0OyB9CiAgICB2b2lkIGFjY2VwdCgpIHsgYWNj
cHQgPSBUUlVFOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgYWNjcHQgPSBGQUxTRTsgfQpwcm90ZWN0
ZWQ6CiAgICBRUG9pbnQgcDsKICAgIFFQb2ludCBnOwogICAgaW50IGQ7CiAgICB1c2hvcnQgczsK
ICAgIGJvb2wgYWNjcHQ7CiAgICBPcmllbnRhdGlvbiBvOwp9OwoKCmNsYXNzIFFUYWJsZXRFdmVu
dCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBlbnVtIFRhYmxldERldmljZSB7IE5vRGV2
aWNlID0gLTEsIFB1Y2ssIFN0eWx1cywgRXJhc2VyIH07CiAgICBRVGFibGV0RXZlbnQoIGNvbnN0
IFFQb2ludCAmcG9zLCBpbnQgZGV2aWNlLCBpbnQgcHJlc3N1cmUsIGludCB4VGlsdCwKICAgICAg
ICAgICAgICAgICAgaW50IHlUaWx0LCBjb25zdCBRUGFpcjxpbnQsaW50PiAmdUlkICkKICAgICAg
ICA6IFFFdmVudCggVGFibGV0ICksIG1Qb3MoIHBvcyApLCBtRGV2KCBkZXZpY2UgKSwgbVByZXNz
KCBwcmVzc3VyZSApLAogICAgICAgICAgbVhUKCB4VGlsdCApLCBtWVQoIHlUaWx0ICksIG1UeXBl
KCB1SWQuZmlyc3QgKSwgbVBoeSggdUlkLnNlY29uZCApCiAgICB7fQogICAgUVRhYmxldEV2ZW50
KCBjb25zdCBRUG9pbnQgJnBvcywgY29uc3QgUVBvaW50ICZnbG9iYWxQb3MsIGludCBkZXZpY2Us
CiAgICAgICAgICAgICAgICAgIGludCBwcmVzc3VyZSwgaW50IHhUaWx0LCBpbnQgeVRpbHQsIGNv
bnN0IFFQYWlyPGludCxpbnQ+ICZ1SWQgKQogICAgICAgIDogUUV2ZW50KCBUYWJsZXQgKSwgbVBv
cyggcG9zICksIG1HUG9zKCBnbG9iYWxQb3MgKSwgbURldiggZGV2aWNlICksCiAgICAgICAgICBt
UHJlc3MoIHByZXNzdXJlICksIG1YVCggeFRpbHQgKSwgbVlUKCB5VGlsdCApLCBtVHlwZSggdUlk
LmZpcnN0ICksCiAgICAgICAgICBtUGh5KCB1SWQuc2Vjb25kICkKICAgIHt9CiAgICBpbnQgcHJl
c3N1cmUoKSBjb25zdCB7IHJldHVybiBtUHJlc3M7IH0KICAgIGludCB4VGlsdCgpIGNvbnN0IHsg
cmV0dXJuIG1YVDsgfQogICAgaW50IHlUaWx0KCkgY29uc3QgeyByZXR1cm4gbVlUOyB9CiAgICBj
b25zdCBRUG9pbnQgJnBvcygpIGNvbnN0IHsgcmV0dXJuIG1Qb3M7IH0KICAgIGNvbnN0IFFQb2lu
dCAmZ2xvYmFsUG9zKCkgY29uc3QgeyByZXR1cm4gbUdQb3M7IH0KICAgIGludCB4KCkgY29uc3Qg
eyByZXR1cm4gbVBvcy54KCk7IH0KICAgIGludCB5KCkgY29uc3QgeyByZXR1cm4gbVBvcy55KCk7
IH0KICAgIGludCBnbG9iYWxYKCkgY29uc3QgeyByZXR1cm4gbUdQb3MueCgpOyB9CiAgICBpbnQg
Z2xvYmFsWSgpIGNvbnN0IHsgcmV0dXJuIG1HUG9zLnkoKTsgfQogICAgVGFibGV0RGV2aWNlIGRl
dmljZSgpIGNvbnN0IHsgcmV0dXJuIFRhYmxldERldmljZShtRGV2KTsgfQogICAgaW50IGlzQWNj
ZXB0ZWQoKSBjb25zdCB7IHJldHVybiBtYkFjYzsgfQogICAgdm9pZCBhY2NlcHQoKSB7IG1iQWNj
ID0gVFJVRTsgfQogICAgdm9pZCBpZ25vcmUoKSB7IG1iQWNjID0gRkFMU0U7IH0KICAgIFFQYWly
PGludCxpbnQ+IHVuaXF1ZUlkKCkgeyByZXR1cm4gUVBhaXI8aW50LGludD4oIG1UeXBlLCBtUGh5
KTsgfQpwcm90ZWN0ZWQ6CiAgICBRUG9pbnQgbVBvczsKICAgIFFQb2ludCBtR1BvczsKICAgIGlu
dCBtRGV2LAogICAgICAgIG1QcmVzcywKICAgICAgICBtWFQsCiAgICAgICAgbVlULAogICAgICAg
IG1UeXBlLAogICAgICAgIG1QaHk7CiAgICBib29sIG1iQWNjOwoKfTsKCmNsYXNzIFFLZXlFdmVu
dCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRS2V5RXZlbnQoIFR5cGUgdHlwZSwgaW50
IGtleSwgaW50IGFzY2lpLCBpbnQgc3RhdGUsCiAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5n
JiB0ZXh0PVFTdHJpbmc6Om51bGwsIGJvb2wgYXV0b3JlcD1GQUxTRSwgdXNob3J0IGNvdW50PTEg
KQogICAgICAgIDogUUV2ZW50KHR5cGUpLCB0eHQodGV4dCksIGsoKHVzaG9ydClrZXkpLCBzKCh1
c2hvcnQpc3RhdGUpLAogICAgICAgICAgICBhKCh1Y2hhcilhc2NpaSksIGFjY3B0KFRSVUUpLCBh
dXRvcihhdXRvcmVwKSwgYyhjb3VudCkge30KICAgIGludCBrZXkoKSBjb25zdCB7IHJldHVybiBr
OyB9CiAgICBpbnQgYXNjaWkoKSBjb25zdCB7IHJldHVybiBhOyB9CiAgICBCdXR0b25TdGF0ZSBz
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIEJ1dHRvblN0YXRlKHMpOyB9CiAgICBCdXR0b25TdGF0ZSBz
dGF0ZUFmdGVyKCkgY29uc3Q7CiAgICBib29sIGlzQWNjZXB0ZWQoKSBjb25zdCB7IHJldHVybiBh
Y2NwdDsgfQogICAgUVN0cmluZyB0ZXh0KCkgY29uc3QgeyByZXR1cm4gdHh0OyB9CiAgICBib29s
IGlzQXV0b1JlcGVhdCgpIGNvbnN0IHsgcmV0dXJuIGF1dG9yOyB9CiAgICBpbnQgY291bnQoKSBj
b25zdCB7IHJldHVybiBpbnQoYyk7IH0KICAgIHZvaWQgYWNjZXB0KCkgeyBhY2NwdCA9IFRSVUU7
IH0KICAgIHZvaWQgaWdub3JlKCkgeyBhY2NwdCA9IEZBTFNFOyB9Cgpwcm90ZWN0ZWQ6CiAgICBR
U3RyaW5nIHR4dDsKICAgIHVzaG9ydCBrLCBzOwogICAgdWNoYXIgYTsKICAgIHVpbnQgYWNjcHQ6
MTsKICAgIHVpbnQgYXV0b3I6MTsKICAgIHVzaG9ydCBjOwp9OwoKCmNsYXNzIFFGb2N1c0V2ZW50
IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKCiAgICBRRm9jdXNFdmVudCggVHlwZSB0eXBlICkK
ICAgICAgICA6IFFFdmVudCh0eXBlKSB7fQoKICAgIGJvb2wgZ290Rm9jdXMoKSBjb25zdCB7IHJl
dHVybiB0eXBlKCkgPT0gRm9jdXNJbjsgfQogICAgYm9vbCBsb3N0Rm9jdXMoKSBjb25zdCB7IHJl
dHVybiB0eXBlKCkgPT0gRm9jdXNPdXQ7IH0KCiAgICBlbnVtIFJlYXNvbiB7IE1vdXNlLCBUYWIs
IEJhY2t0YWIsIEFjdGl2ZVdpbmRvdywgUG9wdXAsIFNob3J0Y3V0LCBPdGhlciB9OwogICAgc3Rh
dGljIFJlYXNvbiByZWFzb24oKTsKICAgIHN0YXRpYyB2b2lkIHNldFJlYXNvbiggUmVhc29uIHJl
YXNvbiApOwogICAgc3RhdGljIHZvaWQgcmVzZXRSZWFzb24oKTsKCnByaXZhdGU6CiAgICBzdGF0
aWMgUmVhc29uIG1fcmVhc29uOwogICAgc3RhdGljIFJlYXNvbiBwcmV2X3JlYXNvbjsKfTsKCgpj
bGFzcyBRUGFpbnRFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRUGFpbnRFdmVu
dCggY29uc3QgUVJlZ2lvbiYgcGFpbnRSZWdpb24sIGJvb2wgZXJhc2VkID0gVFJVRSkKICAgICAg
ICA6IFFFdmVudChQYWludCksCiAgICAgICAgICByZWMocGFpbnRSZWdpb24uYm91bmRpbmdSZWN0
KCkpLAogICAgICAgICAgcmVnKHBhaW50UmVnaW9uKSwKICAgICAgICAgIGVyYXNlKGVyYXNlZCl7
fQogICAgUVBhaW50RXZlbnQoIGNvbnN0IFFSZWN0ICZwYWludFJlY3QsIGJvb2wgZXJhc2VkID0g
VFJVRSApCiAgICAgICAgOiBRRXZlbnQoUGFpbnQpLAogICAgICAgICAgcmVjKHBhaW50UmVjdCks
CiAgICAgICAgICByZWcocGFpbnRSZWN0KSwKICAgICAgICAgIGVyYXNlKGVyYXNlZCl7fQogICAg
Y29uc3QgUVJlY3QgJnJlY3QoKSBjb25zdCB7IHJldHVybiByZWM7IH0KICAgIGNvbnN0IFFSZWdp
b24gJnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIHJlZzsgfQogICAgYm9vbCBlcmFzZWQoKSBjb25z
dCB7IHJldHVybiBlcmFzZTsgfQpwcm90ZWN0ZWQ6CiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0
aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247CiAgICBRUmVjdCByZWM7CiAg
ICBRUmVnaW9uIHJlZzsKICAgIGJvb2wgZXJhc2U7Cn07CgoKY2xhc3MgUU1vdmVFdmVudCA6IHB1
YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRTW92ZUV2ZW50KCBjb25zdCBRUG9pbnQgJnBvcywg
Y29uc3QgUVBvaW50ICZvbGRQb3MgKQogICAgICAgIDogUUV2ZW50KE1vdmUpLCBwKHBvcyksIG9s
ZHAob2xkUG9zKSB7fQogICAgY29uc3QgUVBvaW50ICZwb3MoKSBjb25zdCB7IHJldHVybiBwOyB9
CiAgICBjb25zdCBRUG9pbnQgJm9sZFBvcygpY29uc3QgeyByZXR1cm4gb2xkcDt9CnByb3RlY3Rl
ZDoKICAgIFFQb2ludCBwLCBvbGRwOwogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlvbjsKICAg
IGZyaWVuZCBjbGFzcyBRQmFzZUFwcGxpY2F0aW9uOwp9OwoKCmNsYXNzIFFSZXNpemVFdmVudCA6
IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRUmVzaXplRXZlbnQoIGNvbnN0IFFTaXplICZz
aXplLCBjb25zdCBRU2l6ZSAmb2xkU2l6ZSApCiAgICAgICAgOiBRRXZlbnQoUmVzaXplKSwgcyhz
aXplKSwgb2xkcyhvbGRTaXplKSB7fQogICAgY29uc3QgUVNpemUgJnNpemUoKSBjb25zdCB7IHJl
dHVybiBzOyB9CiAgICBjb25zdCBRU2l6ZSAmb2xkU2l6ZSgpY29uc3QgeyByZXR1cm4gb2xkczt9
CnByb3RlY3RlZDoKICAgIFFTaXplIHMsIG9sZHM7CiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0
aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247Cn07CgoKY2xhc3MgUUNsb3Nl
RXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUUNsb3NlRXZlbnQoKQogICAgICAg
IDogUUV2ZW50KENsb3NlKSwgYWNjcHQoRkFMU0UpIHt9CiAgICBib29sIGlzQWNjZXB0ZWQoKSBj
b25zdCB7IHJldHVybiBhY2NwdDsgfQogICAgdm9pZCBhY2NlcHQoKSB7IGFjY3B0ID0gVFJVRTsg
fQogICAgdm9pZCBpZ25vcmUoKSB7IGFjY3B0ID0gRkFMU0U7IH0KcHJvdGVjdGVkOgogICAgYm9v
bCBhY2NwdDsKfTsKCgpjbGFzcyBRU2hvd0V2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoK
ICAgIFFTaG93RXZlbnQoKQogICAgICAgIDogUUV2ZW50KFNob3cpIHt9Cn07CgoKY2xhc3MgUUhp
ZGVFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRSGlkZUV2ZW50KCkKICAgICAg
ICA6IFFFdmVudChIaWRlKSB7fQp9OwoKY2xhc3MgUUNvbnRleHRNZW51RXZlbnQgOiBwdWJsaWMg
UUV2ZW50CnsKcHVibGljOgogICAgZW51bSBSZWFzb24geyBNb3VzZSwgS2V5Ym9hcmQsIE90aGVy
IH07CiAgICBRQ29udGV4dE1lbnVFdmVudCggUmVhc29uIHJlYXNvbiwgY29uc3QgUVBvaW50ICZw
b3MsIGNvbnN0IFFQb2ludCAmZ2xvYmFsUG9zLCBpbnQgc3RhdGUgKQogICAgICAgIDogUUV2ZW50
KCBDb250ZXh0TWVudSApLCBwKCBwb3MgKSwgZ3AoIGdsb2JhbFBvcyApLCBhY2NwdCggRkFMU0Ug
KSwgY29uc3VtKEZBTFNFKSwKICAgICAgICByZWFzKCByZWFzb24gKSwgcygodXNob3J0KXN0YXRl
KSB7fQogICAgUUNvbnRleHRNZW51RXZlbnQoIFJlYXNvbiByZWFzb24sIGNvbnN0IFFQb2ludCAm
cG9zLCBpbnQgc3RhdGUgKTsKCiAgICBpbnQgeCgpIGNvbnN0IHsgcmV0dXJuIHAueCgpOyB9CiAg
ICBpbnQgeSgpIGNvbnN0IHsgcmV0dXJuIHAueSgpOyB9CiAgICBpbnQgZ2xvYmFsWCgpIGNvbnN0
IHsgcmV0dXJuIGdwLngoKTsgfQogICAgaW50IGdsb2JhbFkoKSBjb25zdCB7IHJldHVybiBncC55
KCk7IH0KCiAgICBjb25zdCBRUG9pbnQmIHBvcygpIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgIGNv
bnN0IFFQb2ludCYgZ2xvYmFsUG9zKCkgY29uc3QgeyByZXR1cm4gZ3A7IH0KCiAgICBCdXR0b25T
dGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIChCdXR0b25TdGF0ZSkgczsgfQogICAgYm9vbCBp
c0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYWNjcHQ7IH0KICAgIGJvb2wgaXNDb25zdW1lZCgp
IGNvbnN0IHsgcmV0dXJuIGNvbnN1bTsgfQogICAgdm9pZCBjb25zdW1lKCkgeyBjb25zdW0gPSBU
UlVFOyB9CiAgICB2b2lkIGFjY2VwdCgpIHsgYWNjcHQgPSBUUlVFOyBjb25zdW0gPSBUUlVFOyB9
CiAgICB2b2lkIGlnbm9yZSgpIHsgYWNjcHQgPSBGQUxTRTsgY29uc3VtID0gRkFMU0U7IH0KCiAg
ICBSZWFzb24gcmVhc29uKCkgY29uc3QgeyByZXR1cm4gUmVhc29uKCByZWFzICk7IH0KCnByb3Rl
Y3RlZDoKICAgIFFQb2ludCBwOwogICAgUVBvaW50IGdwOwogICAgYm9vbCBhY2NwdDsKICAgIGJv
b2wgY29uc3VtOwogICAgdWludCByZWFzOjg7CiAgICB1c2hvcnQgczsKfTsKCgpjbGFzcyBRSU1F
dmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRSU1FdmVudCggVHlwZSB0eXBlLCBj
b25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgY3Vyc29yUG9zaXRpb24gKQogICAgICAgIDogUUV2ZW50
KHR5cGUpLCB0eHQodGV4dCksIGNwb3MoY3Vyc29yUG9zaXRpb24pLCBhKEZBTFNFKSB7fQogICAg
Y29uc3QgUVN0cmluZyAmdGV4dCgpIGNvbnN0IHsgcmV0dXJuIHR4dDsgfQogICAgaW50IGN1cnNv
clBvcygpIGNvbnN0IHsgcmV0dXJuIGNwb3M7IH0KICAgIGJvb2wgaXNBY2NlcHRlZCgpIGNvbnN0
IHsgcmV0dXJuIGE7IH0KICAgIHZvaWQgYWNjZXB0KCkgeyBhID0gVFJVRTsgfQogICAgdm9pZCBp
Z25vcmUoKSB7IGEgPSBGQUxTRTsgfQpwcml2YXRlOgogICAgUVN0cmluZyB0eHQ7CiAgICBpbnQg
Y3BvczsKICAgIGJvb2wgYTsKfTsKIyA0NDcgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYv
aW5jbHVkZS9xZXZlbnQuaCIKY2xhc3MgUURyb3BFdmVudCA6IHB1YmxpYyBRRXZlbnQsIHB1Ymxp
YyBRTWltZVNvdXJjZQp7CnB1YmxpYzoKICAgIFFEcm9wRXZlbnQoIGNvbnN0IFFQb2ludCYgcG9z
LCBUeXBlIHR5cD1Ecm9wICkKICAgICAgICA6IFFFdmVudCh0eXApLCBwKHBvcyksCiAgICAgICAg
ICBhY3QoMCksIGFjY3B0KDApLCBhY2NwdGFjdCgwKSwgcmVzdigwKSwKICAgICAgICAgIGQoMCkK
ICAgICAgICB7fQogICAgY29uc3QgUVBvaW50ICZwb3MoKSBjb25zdCB7IHJldHVybiBwOyB9CiAg
ICBib29sIGlzQWNjZXB0ZWQoKSBjb25zdCB7IHJldHVybiBhY2NwdCB8fCBhY2NwdGFjdDsgfQog
ICAgdm9pZCBhY2NlcHQoYm9vbCB5PVRSVUUpIHsgYWNjcHQgPSB5OyB9CiAgICB2b2lkIGlnbm9y
ZSgpIHsgYWNjcHQgPSBGQUxTRTsgfQoKICAgIGJvb2wgaXNBY3Rpb25BY2NlcHRlZCgpIGNvbnN0
IHsgcmV0dXJuIGFjY3B0YWN0OyB9CiAgICB2b2lkIGFjY2VwdEFjdGlvbihib29sIHk9VFJVRSkg
eyBhY2NwdGFjdCA9IHk7IH0KICAgIGVudW0gQWN0aW9uIHsgQ29weSwgTGluaywgTW92ZSwgUHJp
dmF0ZSwgVXNlckFjdGlvbj0xMDAgfTsKICAgIHZvaWQgc2V0QWN0aW9uKCBBY3Rpb24gYSApIHsg
YWN0ID0gKHVpbnQpYTsgfQogICAgQWN0aW9uIGFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIEFjdGlv
bihhY3QpOyB9CgogICAgUVdpZGdldCogc291cmNlKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyKiBm
b3JtYXQoIGludCBuID0gMCApIGNvbnN0OwogICAgUUJ5dGVBcnJheSBlbmNvZGVkRGF0YSggY29u
c3QgY2hhciogKSBjb25zdDsKICAgIGJvb2wgcHJvdmlkZXMoIGNvbnN0IGNoYXIqICkgY29uc3Q7
CgogICAgUUJ5dGVBcnJheSBkYXRhKGNvbnN0IGNoYXIqIGYpIGNvbnN0IHsgcmV0dXJuIGVuY29k
ZWREYXRhKGYpOyB9CgogICAgdm9pZCBzZXRQb2ludCggY29uc3QgUVBvaW50JiBucCApIHsgcCA9
IG5wOyB9Cgpwcm90ZWN0ZWQ6CiAgICBRUG9pbnQgcDsKICAgIHVpbnQgYWN0Ojg7CiAgICB1aW50
IGFjY3B0OjE7CiAgICB1aW50IGFjY3B0YWN0OjE7CiAgICB1aW50IHJlc3Y6NTsKICAgIHZvaWQg
KiBkOwp9OwoKCgpjbGFzcyBRRHJhZ01vdmVFdmVudCA6IHB1YmxpYyBRRHJvcEV2ZW50CnsKcHVi
bGljOgogICAgUURyYWdNb3ZlRXZlbnQoIGNvbnN0IFFQb2ludCYgcG9zLCBUeXBlIHR5cD1EcmFn
TW92ZSApCiAgICAgICAgOiBRRHJvcEV2ZW50KHBvcyx0eXApLAogICAgICAgICAgcmVjdCggcG9z
LCBRU2l6ZSggMSwgMSApICkge30KICAgIFFSZWN0IGFuc3dlclJlY3QoKSBjb25zdCB7IHJldHVy
biByZWN0OyB9CiAgICB2b2lkIGFjY2VwdCggYm9vbCB5PVRSVUUgKSB7IFFEcm9wRXZlbnQ6OmFj
Y2VwdCh5KTsgfQogICAgdm9pZCBhY2NlcHQoIGNvbnN0IFFSZWN0ICYgcikgeyBhY2NwdCA9IFRS
VUU7IHJlY3QgPSByOyB9CiAgICB2b2lkIGlnbm9yZSggY29uc3QgUVJlY3QgJiByKSB7IGFjY3B0
ID1GQUxTRTsgcmVjdCA9IHI7IH0KICAgIHZvaWQgaWdub3JlKCkgeyBRRHJvcEV2ZW50OjppZ25v
cmUoKTsgfQoKcHJvdGVjdGVkOgogICAgUVJlY3QgcmVjdDsKfTsKCgpjbGFzcyBRRHJhZ0VudGVy
RXZlbnQgOiBwdWJsaWMgUURyYWdNb3ZlRXZlbnQKewpwdWJsaWM6CiAgICBRRHJhZ0VudGVyRXZl
bnQoIGNvbnN0IFFQb2ludCYgcG9zICkgOgogICAgICAgIFFEcmFnTW92ZUV2ZW50KHBvcywgRHJh
Z0VudGVyKSB7IH0KfTsKCgoKY2xhc3MgUURyYWdSZXNwb25zZUV2ZW50IDogcHVibGljIFFFdmVu
dAp7CnB1YmxpYzoKICAgIFFEcmFnUmVzcG9uc2VFdmVudCggYm9vbCBhY2NlcHRlZCApCiAgICAg
ICAgOiBRRXZlbnQoRHJhZ1Jlc3BvbnNlKSwgYShhY2NlcHRlZCkge30KICAgIGJvb2wgZHJhZ0Fj
Y2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYTsgfQpwcm90ZWN0ZWQ6CiAgICBib29sIGE7Cn07CgoK
Y2xhc3MgUURyYWdMZWF2ZUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFEcmFn
TGVhdmVFdmVudCgpCiAgICAgICAgOiBRRXZlbnQoRHJhZ0xlYXZlKSB7fQp9OwoKCgpjbGFzcyBR
Q2hpbGRFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRQ2hpbGRFdmVudCggVHlw
ZSB0eXBlLCBRT2JqZWN0ICpjaGlsZCApCiAgICAgICAgOiBRRXZlbnQodHlwZSksIGMoY2hpbGQp
IHt9CiAgICBRT2JqZWN0ICpjaGlsZCgpIGNvbnN0IHsgcmV0dXJuIGM7IH0KICAgIGJvb2wgaW5z
ZXJ0ZWQoKSBjb25zdCB7IHJldHVybiB0ID09IENoaWxkSW5zZXJ0ZWQ7IH0KICAgIGJvb2wgcmVt
b3ZlZCgpIGNvbnN0IHsgcmV0dXJuIHQgPT0gQ2hpbGRSZW1vdmVkOyB9CnByb3RlY3RlZDoKICAg
IFFPYmplY3QgKmM7Cn07CgoKY2xhc3MgUUN1c3RvbUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1
YmxpYzoKICAgIFFDdXN0b21FdmVudCggaW50IHR5cGUgKTsKICAgIFFDdXN0b21FdmVudCggVHlw
ZSB0eXBlLCB2b2lkICpkYXRhICkKICAgICAgICA6IFFFdmVudCh0eXBlKSwgZChkYXRhKSB7fTsK
ICAgIHZvaWQgKmRhdGEoKSBjb25zdCB7IHJldHVybiBkOyB9CiAgICB2b2lkIHNldERhdGEoIHZv
aWQqIGRhdGEgKSB7IGQgPSBkYXRhOyB9CnByaXZhdGU6CiAgICB2b2lkICpkOwp9OwojIDQ2ICIv
dXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcW9iamVjdC5oIiAyCgoKCgoKCmNs
YXNzIFFNZXRhT2JqZWN0OwpjbGFzcyBRVmFyaWFudDsKY2xhc3MgUU1ldGFQcm9wZXJ0eTsKY2xh
c3MgUVBvc3RFdmVudExpc3Q7CmNsYXNzIFFPYmplY3RQcml2YXRlOwpzdHJ1Y3QgUVVPYmplY3Q7
CgpjbGFzcyBRT2JqZWN0OiBwdWJsaWMgUXQKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2Jq
ZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZp
cnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2Fz
dCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCog
KTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBx
dF9wcm9wZXJ0eSggaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0
YXRpY01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0
aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAg
KTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAg
KTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwogICAKCnB1YmxpYzoKICAg
IFFPYmplY3QoIFFPYmplY3QgKnBhcmVudD0wLCBjb25zdCBjaGFyICpuYW1lPTAgKTsKICAgIHZp
cnR1YWwgflFPYmplY3QoKTsKIyA3NSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNs
dWRlL3FvYmplY3QuaCIKICAgIHZpcnR1YWwgYm9vbCBldmVudCggUUV2ZW50ICogKTsKICAgIHZp
cnR1YWwgYm9vbCBldmVudEZpbHRlciggUU9iamVjdCAqLCBRRXZlbnQgKiApOwoKICAgIGJvb2wg
aXNBKCBjb25zdCBjaGFyICogKSBjb25zdDsKICAgIGJvb2wgaW5oZXJpdHMoIGNvbnN0IGNoYXIg
KiApIGNvbnN0OwoKICAgIGNvbnN0IGNoYXIgKm5hbWUoKSBjb25zdDsKICAgIGNvbnN0IGNoYXIg
Km5hbWUoIGNvbnN0IGNoYXIgKiBkZWZhdWx0TmFtZSApIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9p
ZCBzZXROYW1lKCBjb25zdCBjaGFyICpuYW1lICk7CiAgICBib29sIGlzV2lkZ2V0VHlwZSgpIGNv
bnN0IHsgcmV0dXJuIGlzV2lkZ2V0OyB9CiAgICBib29sIGhpZ2hQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIEZBTFNFOyB9CgogICAgYm9vbCBzaWduYWxzQmxvY2tlZCgpIGNvbnN0IHsgcmV0dXJu
IGJsb2NrU2lnOyB9CiAgICB2b2lkIGJsb2NrU2lnbmFscyggYm9vbCBiICk7CgogICAgaW50IHN0
YXJ0VGltZXIoIGludCBpbnRlcnZhbCApOwogICAgdm9pZCBraWxsVGltZXIoIGludCBpZCApOwog
ICAgdm9pZCBraWxsVGltZXJzKCk7CgogICAgUU9iamVjdCAqY2hpbGQoIGNvbnN0IGNoYXIgKm9i
ak5hbWUsIGNvbnN0IGNoYXIgKmluaGVyaXRzQ2xhc3MgPSAwLCBib29sIHJlY3Vyc2l2ZVNlYXJj
aCA9IFRSVUUgKTsKICAgIGNvbnN0IFFPYmplY3RMaXN0ICpjaGlsZHJlbigpIGNvbnN0IHsgcmV0
dXJuIGNoaWxkT2JqZWN0czsgfQoKICAgIHN0YXRpYyBjb25zdCBRT2JqZWN0TGlzdCAqb2JqZWN0
VHJlZXMoKTsKCiAgICBRT2JqZWN0TGlzdCAqcXVlcnlMaXN0KCBjb25zdCBjaGFyICppbmhlcml0
c0NsYXNzID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
Km9iak5hbWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWdl
eHBNYXRjaCA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJl
Y3Vyc2l2ZVNlYXJjaCA9IFRSVUUgKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0Q2hp
bGQoIFFPYmplY3QgKiApOwogICAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKCBRT2JqZWN0ICog
KTsKCiAgICB2b2lkIGluc3RhbGxFdmVudEZpbHRlciggY29uc3QgUU9iamVjdCAqICk7CiAgICB2
b2lkIHJlbW92ZUV2ZW50RmlsdGVyKCBjb25zdCBRT2JqZWN0ICogKTsKCiAgICBzdGF0aWMgYm9v
bCBjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpzZW5kZXIsIGNvbnN0IGNoYXIgKnNpZ25hbCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hh
ciAqbWVtYmVyICk7CiAgICBib29sIGNvbm5lY3QoIGNvbnN0IFFPYmplY3QgKnNlbmRlciwgY29u
c3QgY2hhciAqc2lnbmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1l
bWJlciApIGNvbnN0OwogICAgc3RhdGljIGJvb2wgZGlzY29ubmVjdCggY29uc3QgUU9iamVjdCAq
c2VuZGVyLCBjb25zdCBjaGFyICpzaWduYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1lbWJlciApOwogICAgYm9vbCBk
aXNjb25uZWN0KCBjb25zdCBjaGFyICpzaWduYWw9MCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBRT2JqZWN0ICpyZWNlaXZlcj0wLCBjb25zdCBjaGFyICptZW1iZXI9MCApOwog
ICAgYm9vbCBkaXNjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAq
bWVtYmVyPTAgKTsKICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RJbnRlcm5hbCggY29uc3QgUU9iamVj
dCAqc2VuZGVyLCBpbnQgc2lnbmFsX2luZGV4LCBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZW1iY29kZSwgaW50IG1lbWJlcl9p
bmRleCApOwoKICAgIHZvaWQgZHVtcE9iamVjdFRyZWUoKTsKICAgIHZvaWQgZHVtcE9iamVjdElu
Zm8oKTsKCgogICAgdmlydHVhbCBib29sIHNldFByb3BlcnR5KCBjb25zdCBjaGFyICpuYW1lLCBj
b25zdCBRVmFyaWFudCYgdmFsdWUgKTsKICAgIHZpcnR1YWwgUVZhcmlhbnQgcHJvcGVydHkoIGNv
bnN0IGNoYXIgKm5hbWUgKSBjb25zdDsKIyAxMzcgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4w
LjYvaW5jbHVkZS9xb2JqZWN0LmgiCnByb3RlY3RlZDoKICAgIHZvaWQgZGVzdHJveWVkKCk7CiAg
ICB2b2lkIGRlc3Ryb3llZCggUU9iamVjdCogb2JqICk7CgpwdWJsaWM6CiAgICBRT2JqZWN0ICpw
YXJlbnQoKSBjb25zdCB7IHJldHVybiBwYXJlbnRPYmo7IH0KCnB1YmxpYyA6CiAgICB2b2lkIGRl
bGV0ZUxhdGVyKCk7Cgpwcml2YXRlIDoKICAgIHZvaWQgY2xlYW51cEV2ZW50RmlsdGVyKCBRT2Jq
ZWN0KiApOwoKcHJvdGVjdGVkOgogICAgYm9vbCBhY3RpdmF0ZV9maWx0ZXJzKCBRRXZlbnQgKiAp
OwogICAgUUNvbm5lY3Rpb25MaXN0ICpyZWNlaXZlcnMoIGNvbnN0IGNoYXIqIHNpZ25hbCApIGNv
bnN0OwogICAgUUNvbm5lY3Rpb25MaXN0ICpyZWNlaXZlcnMoIGludCBzaWduYWwgKSBjb25zdDsK
ICAgIHZvaWQgYWN0aXZhdGVfc2lnbmFsKCBpbnQgc2lnbmFsICk7CiAgICB2b2lkIGFjdGl2YXRl
X3NpZ25hbCggaW50IHNpZ25hbCwgaW50ICk7CiAgICB2b2lkIGFjdGl2YXRlX3NpZ25hbCggaW50
IHNpZ25hbCwgZG91YmxlICk7CiAgICB2b2lkIGFjdGl2YXRlX3NpZ25hbCggaW50IHNpZ25hbCwg
UVN0cmluZyApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWxfYm9vbCggaW50IHNpZ25hbCwgYm9v
bCApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWwoIFFDb25uZWN0aW9uTGlzdCAqY2xpc3QsIFFV
T2JqZWN0ICpvICk7CgogICAgY29uc3QgUU9iamVjdCAqc2VuZGVyKCk7CgogICAgdmlydHVhbCB2
b2lkIHRpbWVyRXZlbnQoIFFUaW1lckV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBjaGlsZEV2
ZW50KCBRQ2hpbGRFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgY3VzdG9tRXZlbnQoIFFDdXN0
b21FdmVudCAqICk7CgogICAgdmlydHVhbCB2b2lkIGNvbm5lY3ROb3RpZnkoIGNvbnN0IGNoYXIg
KnNpZ25hbCApOwogICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3ROb3RpZnkoIGNvbnN0IGNoYXIg
KnNpZ25hbCApOwogICAgdmlydHVhbCBib29sIGNoZWNrQ29ubmVjdEFyZ3MoIGNvbnN0IGNoYXIg
KnNpZ25hbCwgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqbWVtYmVyICk7CiAgICBzdGF0aWMgUUNTdHJpbmcgbm9y
bWFsaXplU2lnbmFsU2xvdCggY29uc3QgY2hhciAqc2lnbmFsU2xvdCApOwoKcHJpdmF0ZToKICAg
IHVpbnQgaXNTaWduYWwgOiAxOwogICAgdWludCBpc1dpZGdldCA6IDE7CiAgICB1aW50IHBlbmRU
aW1lciA6IDE7CiAgICB1aW50IGJsb2NrU2lnIDogMTsKICAgIHVpbnQgd2FzRGVsZXRlZCA6IDE7
CiAgICB1aW50IGlzVHJlZSA6IDE7CgogICAgY29uc3QgY2hhciAqb2JqbmFtZTsKICAgIFFPYmpl
Y3QgKnBhcmVudE9iajsKICAgIFFPYmplY3RMaXN0ICpjaGlsZE9iamVjdHM7CiAgICBRU2lnbmFs
VmVjICpjb25uZWN0aW9uczsKICAgIFFPYmplY3RMaXN0ICpzZW5kZXJPYmplY3RzOwogICAgUU9i
amVjdExpc3QgKmV2ZW50RmlsdGVyczsKICAgIFFQb3N0RXZlbnRMaXN0ICpwb3N0ZWRFdmVudHM7
CiAgICBRT2JqZWN0UHJpdmF0ZSogZDsKCiAgICBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY1F0
TWV0YU9iamVjdCgpOwoKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmllbmQg
Y2xhc3MgUUJhc2VBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRV2lkZ2V0OwogICAgZnJp
ZW5kIGNsYXNzIFFTaWduYWw7CiAgICBmcmllbmQgY2xhc3MgUVNlbmRlck9iamVjdDsKCnByaXZh
dGU6CgogICAgUU9iamVjdCggY29uc3QgUU9iamVjdCAmICk7CiAgICBRT2JqZWN0ICZvcGVyYXRv
cj0oIGNvbnN0IFFPYmplY3QgJiApOwoKfTsKCgppbmxpbmUgYm9vbCBRT2JqZWN0Ojpjb25uZWN0
KCBjb25zdCBRT2JqZWN0ICpzZW5kZXIsIGNvbnN0IGNoYXIgKnNpZ25hbCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWVtYmVyICkgY29uc3QKewogICAgcmV0dXJu
IGNvbm5lY3QoIHNlbmRlciwgc2lnbmFsLCB0aGlzLCBtZW1iZXIgKTsKfQoKCmlubGluZSBib29s
IFFPYmplY3Q6OmRpc2Nvbm5lY3QoIGNvbnN0IGNoYXIgKnNpZ25hbCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1l
bWJlciApCnsKICAgIHJldHVybiBkaXNjb25uZWN0KCB0aGlzLCBzaWduYWwsIHJlY2VpdmVyLCBt
ZW1iZXIgKTsKfQoKCmlubGluZSBib29sIFFPYmplY3Q6OmRpc2Nvbm5lY3QoIGNvbnN0IFFPYmpl
Y3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyICptZW1iZXIgKQp7CiAgICByZXR1cm4gZGlzY29ubmVj
dCggdGhpcywgMCwgcmVjZWl2ZXIsIG1lbWJlciApOwp9CgoKY2xhc3MgUVNlbmRlck9iamVjdCA6
IHB1YmxpYyBRT2JqZWN0CnsKcHVibGljOgogICAgdm9pZCBzZXRTZW5kZXIoIFFPYmplY3QgKnMg
KTsKfTsKIyA0NCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3F3aWRnZXQu
aCIgMgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xcGFpbnRkZXZp
Y2UuaCIgMQojIDUxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXBhaW50
ZGV2aWNlLmgiCmNsYXNzIFFJT0RldmljZTsKY2xhc3MgUVN0cmluZzsKCgoKc3RydWN0IFFQYWlu
dERldmljZVgxMURhdGE7CgoKdW5pb24gUVBEZXZDbWRQYXJhbSB7CiAgICBpbnQgaXZhbDsKICAg
IGludCAqaXZlYzsKICAgIFFTdHJpbmcgKnN0cjsKICAgIGNvbnN0IFFQb2ludCAqcG9pbnQ7CiAg
ICBjb25zdCBRUmVjdCAqcmVjdDsKICAgIGNvbnN0IFFQb2ludEFycmF5ICpwdGFycjsKICAgIGNv
bnN0IFFQaXhtYXAgKnBpeG1hcDsKICAgIGNvbnN0IFFJbWFnZSAqaW1hZ2U7CiAgICBjb25zdCBR
Q29sb3IgKmNvbG9yOwogICAgY29uc3QgUUZvbnQgKmZvbnQ7CiAgICBjb25zdCBRUGVuICpwZW47
CiAgICBjb25zdCBRQnJ1c2ggKmJydXNoOwogICAgY29uc3QgUVJlZ2lvbiAqcmduOwogICAgY29u
c3QgUVdNYXRyaXggKm1hdHJpeDsKICAgIFFJT0RldmljZSAqZGV2aWNlOwp9OwoKCgpjbGFzcyBR
UGFpbnREZXZpY2UKewpwdWJsaWM6CiAgICB2aXJ0dWFsIH5RUGFpbnREZXZpY2UoKTsKCiAgICBp
bnQgZGV2VHlwZSgpIGNvbnN0OwogICAgYm9vbCBpc0V4dERldigpIGNvbnN0OwogICAgYm9vbCBw
YWludGluZ0FjdGl2ZSgpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRSZXNvbHV0aW9uKCBp
bnQgKTsKICAgIHZpcnR1YWwgaW50IHJlc29sdXRpb24oKSBjb25zdDsKCgoKCgoKICAgIHZpcnR1
YWwgUXQ6OkhBTkRMRSBoYW5kbGUoKSBjb25zdDsKICAgIHZpcnR1YWwgUXQ6OkhBTkRMRSB4MTFS
ZW5kZXJIYW5kbGUoKSBjb25zdDsKCgoKCgoKCiAgICBEaXNwbGF5ICp4MTFEaXNwbGF5KCkgY29u
c3Q7CiAgICBpbnQgeDExU2NyZWVuKCkgY29uc3Q7CiAgICBpbnQgeDExRGVwdGgoKSBjb25zdDsK
ICAgIGludCB4MTFDZWxscygpIGNvbnN0OwogICAgUXQ6OkhBTkRMRSB4MTFDb2xvcm1hcCgpIGNv
bnN0OwogICAgYm9vbCB4MTFEZWZhdWx0Q29sb3JtYXAoKSBjb25zdDsKICAgIHZvaWQgKngxMVZp
c3VhbCgpIGNvbnN0OwogICAgYm9vbCB4MTFEZWZhdWx0VmlzdWFsKCkgY29uc3Q7CgogICAgc3Rh
dGljIERpc3BsYXkgKngxMUFwcERpc3BsYXkoKTsKICAgIHN0YXRpYyBpbnQgeDExQXBwU2NyZWVu
KCk7CiAgICBzdGF0aWMgaW50IHgxMUFwcERlcHRoKCk7CiAgICBzdGF0aWMgaW50IHgxMUFwcENl
bGxzKCk7CiAgICBzdGF0aWMgaW50IHgxMUFwcERwaVgoKTsKICAgIHN0YXRpYyBpbnQgeDExQXBw
RHBpWSgpOwogICAgc3RhdGljIFF0OjpIQU5ETEUgeDExQXBwQ29sb3JtYXAoKTsKICAgIHN0YXRp
YyBib29sIHgxMUFwcERlZmF1bHRDb2xvcm1hcCgpOwogICAgc3RhdGljIHZvaWQgKngxMUFwcFZp
c3VhbCgpOwogICAgc3RhdGljIGJvb2wgeDExQXBwRGVmYXVsdFZpc3VhbCgpOwogICAgc3RhdGlj
IHZvaWQgeDExU2V0QXBwRHBpWChpbnQpOwogICAgc3RhdGljIHZvaWQgeDExU2V0QXBwRHBpWShp
bnQpOwojIDEzNSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FwYWludGRl
dmljZS5oIgogICAgZW51bSBQRGV2Q21kIHsKICAgICAgICBQZGNOT1AgPSAwLAogICAgICAgIFBk
Y0RyYXdQb2ludCA9IDEsCiAgICAgICAgUGRjRHJhd0ZpcnN0ID0gUGRjRHJhd1BvaW50LAogICAg
ICAgIFBkY01vdmVUbyA9IDIsCiAgICAgICAgUGRjTGluZVRvID0gMywKICAgICAgICBQZGNEcmF3
TGluZSA9IDQsCiAgICAgICAgUGRjRHJhd1JlY3QgPSA1LAogICAgICAgIFBkY0RyYXdSb3VuZFJl
Y3QgPSA2LAogICAgICAgIFBkY0RyYXdFbGxpcHNlID0gNywKICAgICAgICBQZGNEcmF3QXJjID0g
OCwKICAgICAgICBQZGNEcmF3UGllID0gOSwKICAgICAgICBQZGNEcmF3Q2hvcmQgPSAxMCwKICAg
ICAgICBQZGNEcmF3TGluZVNlZ21lbnRzID0gMTEsCiAgICAgICAgUGRjRHJhd1BvbHlsaW5lID0g
MTIsCiAgICAgICAgUGRjRHJhd1BvbHlnb24gPSAxMywKICAgICAgICBQZGNEcmF3Q3ViaWNCZXpp
ZXIgPSAxNCwKICAgICAgICBQZGNEcmF3VGV4dCA9IDE1LAogICAgICAgIFBkY0RyYXdUZXh0Rm9y
bWF0dGVkID0gMTYsCiAgICAgICAgUGRjRHJhd1BpeG1hcCA9IDE3LAogICAgICAgIFBkY0RyYXdJ
bWFnZSA9IDE4LAogICAgICAgIFBkY0RyYXdUZXh0MiA9IDE5LAogICAgICAgIFBkY0RyYXdUZXh0
MkZvcm1hdHRlZCA9IDIwLAogICAgICAgIFBkY0RyYXdMYXN0ID0gUGRjRHJhd1RleHQyRm9ybWF0
dGVkLAoKCgogICAgICAgIFBkY0JlZ2luID0gMzAsCiAgICAgICAgUGRjRW5kID0gMzEsCiAgICAg
ICAgUGRjU2F2ZSA9IDMyLAogICAgICAgIFBkY1Jlc3RvcmUgPSAzMywKICAgICAgICBQZGNTZXRk
ZXYgPSAzNCwKICAgICAgICBQZGNTZXRCa0NvbG9yID0gNDAsCiAgICAgICAgUGRjU2V0QmtNb2Rl
ID0gNDEsCiAgICAgICAgUGRjU2V0Uk9QID0gNDIsCiAgICAgICAgUGRjU2V0QnJ1c2hPcmlnaW4g
PSA0MywKICAgICAgICBQZGNTZXRGb250ID0gNDUsCiAgICAgICAgUGRjU2V0UGVuID0gNDYsCiAg
ICAgICAgUGRjU2V0QnJ1c2ggPSA0NywKICAgICAgICBQZGNTZXRUYWJTdG9wcyA9IDQ4LAogICAg
ICAgIFBkY1NldFRhYkFycmF5ID0gNDksCiAgICAgICAgUGRjU2V0VW5pdCA9IDUwLAogICAgICAg
IFBkY1NldFZYZm9ybSA9IDUxLAogICAgICAgIFBkY1NldFdpbmRvdyA9IDUyLAogICAgICAgIFBk
Y1NldFZpZXdwb3J0ID0gNTMsCiAgICAgICAgUGRjU2V0V1hmb3JtID0gNTQsCiAgICAgICAgUGRj
U2V0V01hdHJpeCA9IDU1LAogICAgICAgIFBkY1NhdmVXTWF0cml4ID0gNTYsCiAgICAgICAgUGRj
UmVzdG9yZVdNYXRyaXggPSA1NywKICAgICAgICBQZGNTZXRDbGlwID0gNjAsCiAgICAgICAgUGRj
U2V0Q2xpcFJlZ2lvbiA9IDYxLAoKICAgICAgICBQZGNSZXNlcnZlZFN0YXJ0ID0gMCwKICAgICAg
ICBQZGNSZXNlcnZlZFN0b3AgPSAxOTkKICAgIH07Cgpwcm90ZWN0ZWQ6CiAgICBRUGFpbnREZXZp
Y2UoIHVpbnQgZGV2ZmxhZ3MgKTsKCgoKCiAgICBRdDo6SEFORExFIGhkOwogICAgUXQ6OkhBTkRM
RSByZW5kaGQ7CgogICAgdm9pZCBjb3B5WDExRGF0YSggY29uc3QgUVBhaW50RGV2aWNlICogKTsK
ICAgIHZvaWQgY2xvbmVYMTFEYXRhKCBjb25zdCBRUGFpbnREZXZpY2UgKiApOwogICAgdmlydHVh
bCB2b2lkIHNldFgxMURhdGEoIGNvbnN0IFFQYWludERldmljZVgxMURhdGEqICk7CiAgICBRUGFp
bnREZXZpY2VYMTFEYXRhKiBnZXRYMTFEYXRhKCBib29sIGRlZj1GQUxTRSApIGNvbnN0OwojIDIx
MyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FwYWludGRldmljZS5oIgog
ICAgdmlydHVhbCBib29sIGNtZCggaW50LCBRUGFpbnRlciAqLCBRUERldkNtZFBhcmFtICogKTsK
ICAgIHZpcnR1YWwgaW50IG1ldHJpYyggaW50ICkgY29uc3Q7CiAgICB2aXJ0dWFsIGludCBmb250
TWV0KCBRRm9udCAqLCBpbnQsIGNvbnN0IGNoYXIgKiA9IDAsIGludCA9IDAgKSBjb25zdDsKICAg
IHZpcnR1YWwgaW50IGZvbnRJbmYoIFFGb250ICosIGludCApIGNvbnN0OwoKICAgIHVzaG9ydCBk
ZXZGbGFnczsKICAgIHVzaG9ydCBwYWludGVyczsKCiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7
CiAgICBmcmllbmQgY2xhc3MgUVBhaW50RGV2aWNlTWV0cmljczsKCgoKCgoKCiAgICBmcmllbmQg
dm9pZCBiaXRCbHQoIFFQYWludERldmljZSAqLCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUVBhaW50RGV2aWNlICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCwgaW50LCBpbnQsIGludCwgUXQ6OlJhc3Rlck9wLCBib29sICk7CgoK
ICAgIGZyaWVuZCB2b2lkIHF0X2luaXRfaW50ZXJuYWwoIGludCAqLCBjaGFyICoqLCBEaXNwbGF5
ICosIFF0OjpIQU5ETEUsIFF0OjpIQU5ETEUgKTsKCgpwcml2YXRlOgoKICAgIHN0YXRpYyBEaXNw
bGF5ICp4X2FwcGRpc3BsYXk7CiAgICBzdGF0aWMgaW50IHhfYXBwc2NyZWVuOwogICAgc3RhdGlj
IGludCB4X2FwcGRlcHRoOwogICAgc3RhdGljIGludCB4X2FwcGNlbGxzOwogICAgc3RhdGljIFF0
OjpIQU5ETEUgeF9hcHBjb2xvcm1hcDsKICAgIHN0YXRpYyBib29sIHhfYXBwZGVmY29sb3JtYXA7
CiAgICBzdGF0aWMgdm9pZCAqeF9hcHB2aXN1YWw7CiAgICBzdGF0aWMgYm9vbCB4X2FwcGRlZnZp
c3VhbDsKCiAgICBRUGFpbnREZXZpY2VYMTFEYXRhKiB4MTFEYXRhOwoKCnByaXZhdGU6CgogICAg
UVBhaW50RGV2aWNlKCBjb25zdCBRUGFpbnREZXZpY2UgJiApOwogICAgUVBhaW50RGV2aWNlICZv
cGVyYXRvcj0oIGNvbnN0IFFQYWludERldmljZSAmICk7Cgp9OwoKCgp2b2lkIGJpdEJsdCggUVBh
aW50RGV2aWNlICpkc3QsIGludCBkeCwgaW50IGR5LAogICAgICAgICAgICAgY29uc3QgUVBhaW50
RGV2aWNlICpzcmMsIGludCBzeD0wLCBpbnQgc3k9MCwgaW50IHN3PS0xLCBpbnQgc2g9LTEsCiAg
ICAgICAgICAgICBRdDo6UmFzdGVyT3AgPSBRdDo6Q29weVJPUCwgYm9vbCBpZ25vcmVNYXNrPUZB
TFNFICk7CgoKdm9pZCBiaXRCbHQoIFFQYWludERldmljZSAqZHN0LCBpbnQgZHgsIGludCBkeSwK
ICAgICAgICAgICAgIGNvbnN0IFFJbWFnZSAqc3JjLCBpbnQgc3g9MCwgaW50IHN5PTAsIGludCBz
dz0tMSwgaW50IHNoPS0xLAogICAgICAgICAgICAgaW50IGNvbnZlcnNpb25fZmxhZ3M9MCApOwoK
CgoKc3RydWN0IFFQYWludERldmljZVgxMURhdGEgOiBwdWJsaWMgUVNoYXJlZCB7CiAgICBEaXNw
bGF5KiB4X2Rpc3BsYXk7CiAgICBpbnQgeF9zY3JlZW47CiAgICBpbnQgeF9kZXB0aDsKICAgIGlu
dCB4X2NlbGxzOwogICAgUXQ6OkhBTkRMRSB4X2NvbG9ybWFwOwogICAgYm9vbCB4X2RlZmNvbG9y
bWFwOwogICAgdm9pZCogeF92aXN1YWw7CiAgICBib29sIHhfZGVmdmlzdWFsOwp9OwoKCgoKCgoK
aW5saW5lIGludCBRUGFpbnREZXZpY2U6OmRldlR5cGUoKSBjb25zdAp7IHJldHVybiBkZXZGbGFn
cyAmIFFJbnRlcm5hbDo6RGV2aWNlVHlwZU1hc2s7IH0KCmlubGluZSBib29sIFFQYWludERldmlj
ZTo6aXNFeHREZXYoKSBjb25zdAp7IHJldHVybiAoZGV2RmxhZ3MgJiBRSW50ZXJuYWw6OkV4dGVy
bmFsRGV2aWNlKSAhPSAwOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6OnBhaW50aW5nQWN0
aXZlKCkgY29uc3QKeyByZXR1cm4gcGFpbnRlcnMgIT0gMDsgfQoKCmlubGluZSBEaXNwbGF5ICpR
UGFpbnREZXZpY2U6OngxMURpc3BsYXkoKSBjb25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0
YS0+eF9kaXNwbGF5IDogeF9hcHBkaXNwbGF5OyB9CgppbmxpbmUgaW50IFFQYWludERldmljZTo6
eDExU2NyZWVuKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEtPnhfc2NyZWVuIDog
eF9hcHBzY3JlZW47IH0KCmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjp4MTFEZXB0aCgpIGNvbnN0
CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2RlcHRoIDogeF9hcHBkZXB0aDsgfQoKaW5s
aW5lIGludCBRUGFpbnREZXZpY2U6OngxMUNlbGxzKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/
IHgxMURhdGEtPnhfY2VsbHMgOiB4X2FwcGNlbGxzOyB9CgppbmxpbmUgUXQ6OkhBTkRMRSBRUGFp
bnREZXZpY2U6OngxMUNvbG9ybWFwKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEt
PnhfY29sb3JtYXAgOiB4X2FwcGNvbG9ybWFwOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6
OngxMURlZmF1bHRDb2xvcm1hcCgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54
X2RlZmNvbG9ybWFwIDogeF9hcHBkZWZjb2xvcm1hcDsgfQoKaW5saW5lIHZvaWQgKlFQYWludERl
dmljZTo6eDExVmlzdWFsKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEtPnhfdmlz
dWFsIDogeF9hcHB2aXN1YWw7IH0KCmlubGluZSBib29sIFFQYWludERldmljZTo6eDExRGVmYXVs
dFZpc3VhbCgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2RlZnZpc3VhbCA6
IHhfYXBwZGVmdmlzdWFsOyB9CgppbmxpbmUgRGlzcGxheSAqUVBhaW50RGV2aWNlOjp4MTFBcHBE
aXNwbGF5KCkKeyByZXR1cm4geF9hcHBkaXNwbGF5OyB9CgppbmxpbmUgaW50IFFQYWludERldmlj
ZTo6eDExQXBwU2NyZWVuKCkKeyByZXR1cm4geF9hcHBzY3JlZW47IH0KCmlubGluZSBpbnQgUVBh
aW50RGV2aWNlOjp4MTFBcHBEZXB0aCgpCnsgcmV0dXJuIHhfYXBwZGVwdGg7IH0KCmlubGluZSBp
bnQgUVBhaW50RGV2aWNlOjp4MTFBcHBDZWxscygpCnsgcmV0dXJuIHhfYXBwY2VsbHM7IH0KCmlu
bGluZSBRdDo6SEFORExFIFFQYWludERldmljZTo6eDExQXBwQ29sb3JtYXAoKQp7IHJldHVybiB4
X2FwcGNvbG9ybWFwOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6OngxMUFwcERlZmF1bHRD
b2xvcm1hcCgpCnsgcmV0dXJuIHhfYXBwZGVmY29sb3JtYXA7IH0KCmlubGluZSB2b2lkICpRUGFp
bnREZXZpY2U6OngxMUFwcFZpc3VhbCgpCnsgcmV0dXJuIHhfYXBwdmlzdWFsOyB9CgppbmxpbmUg
Ym9vbCBRUGFpbnREZXZpY2U6OngxMUFwcERlZmF1bHRWaXN1YWwoKQp7IHJldHVybiB4X2FwcGRl
ZnZpc3VhbDsgfQoKCgoKCmlubGluZSB2b2lkIGJpdEJsdCggUVBhaW50RGV2aWNlICpkc3QsIGNv
bnN0IFFQb2ludCAmZHAsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgUVBhaW50RGV2aWNlICpz
cmMsIGNvbnN0IFFSZWN0ICZzciA9UVJlY3QoMCwwLC0xLC0xKSwKICAgICAgICAgICAgICAgICAg
ICBRdDo6UmFzdGVyT3Agcm9wPVF0OjpDb3B5Uk9QLCBib29sIGlnbm9yZU1hc2s9RkFMU0UgKQp7
CiAgICBiaXRCbHQoIGRzdCwgZHAueCgpLCBkcC55KCksIHNyYywgc3IueCgpLCBzci55KCksIHNy
LndpZHRoKCksIHNyLmhlaWdodCgpLAogICAgICAgICAgICByb3AsIGlnbm9yZU1hc2sgKTsKfQoj
IDQ1ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXdpZGdldC5oIiAyCiMg
MSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FwYWxldHRlLmgiIDEKIyA0
MyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FwYWxldHRlLmgiCiMgMSAi
L3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3Fjb2xvci5oIiAxCiMgNDUgIi91
c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xY29sb3IuaCIKY29uc3QgUVJnYiBS
R0JfTUFTSyA9IDB4MDBmZmZmZmY7CgogaW5saW5lIGludCBxUmVkKCBRUmdiIHJnYiApCnsgcmV0
dXJuIChpbnQpKChyZ2IgPj4gMTYpICYgMHhmZik7IH0KCiBpbmxpbmUgaW50IHFHcmVlbiggUVJn
YiByZ2IgKQp7IHJldHVybiAoaW50KSgocmdiID4+IDgpICYgMHhmZik7IH0KCiBpbmxpbmUgaW50
IHFCbHVlKCBRUmdiIHJnYiApCnsgcmV0dXJuIChpbnQpKHJnYiAmIDB4ZmYpOyB9CgogaW5saW5l
IGludCBxQWxwaGEoIFFSZ2IgcmdiICkKeyByZXR1cm4gKGludCkoKHJnYiA+PiAyNCkgJiAweGZm
KTsgfQoKIGlubGluZSBRUmdiIHFSZ2IoIGludCByLCBpbnQgZywgaW50IGIgKQp7IHJldHVybiAo
MHhmZiA8PCAyNCkgfCAoKHIgJiAweGZmKSA8PCAxNikgfCAoKGcgJiAweGZmKSA8PCA4KSB8IChi
ICYgMHhmZik7IH0KCiBpbmxpbmUgUVJnYiBxUmdiYSggaW50IHIsIGludCBnLCBpbnQgYiwgaW50
IGEgKQp7IHJldHVybiAoKGEgJiAweGZmKSA8PCAyNCkgfCAoKHIgJiAweGZmKSA8PCAxNikgfCAo
KGcgJiAweGZmKSA8PCA4KSB8IChiICYgMHhmZik7IH0KCiBpbmxpbmUgaW50IHFHcmF5KCBpbnQg
ciwgaW50IGcsIGludCBiICkKeyByZXR1cm4gKHIqMTErZyoxNitiKjUpLzMyOyB9CgogaW5saW5l
IGludCBxR3JheSggUVJnYiByZ2IgKQp7IHJldHVybiBxR3JheSggcVJlZChyZ2IpLCBxR3JlZW4o
cmdiKSwgcUJsdWUocmdiKSApOyB9CgoKY2xhc3MgUUNvbG9yCnsKcHVibGljOgogICAgZW51bSBT
cGVjIHsgUmdiLCBIc3YgfTsKCiAgICBRQ29sb3IoKTsKICAgIFFDb2xvciggaW50IHIsIGludCBn
LCBpbnQgYiApOwogICAgUUNvbG9yKCBpbnQgeCwgaW50IHksIGludCB6LCBTcGVjICk7CiAgICBR
Q29sb3IoIFFSZ2IgcmdiLCB1aW50IHBpeGVsPTB4ZmZmZmZmZmYpOwogICAgUUNvbG9yKCBjb25z
dCBRU3RyaW5nJiBuYW1lICk7CiAgICBRQ29sb3IoIGNvbnN0IGNoYXIgKm5hbWUgKTsKICAgIFFD
b2xvciggY29uc3QgUUNvbG9yICYgKTsKICAgIFFDb2xvciAmb3BlcmF0b3I9KCBjb25zdCBRQ29s
b3IgJiApOwoKICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogICAgYm9vbCBpc0RpcnR5KCkgY29u
c3Q7CgogICAgUVN0cmluZyBuYW1lKCkgY29uc3Q7CgogICAgdm9pZCBzZXROYW1lZENvbG9yKCBj
b25zdCBRU3RyaW5nJiBuYW1lICk7CgogICAgdm9pZCByZ2IoIGludCAqciwgaW50ICpnLCBpbnQg
KmIgKSBjb25zdDsKICAgIFFSZ2IgcmdiKCkgY29uc3Q7CiAgICB2b2lkIHNldFJnYiggaW50IHIs
IGludCBnLCBpbnQgYiApOwogICAgdm9pZCBzZXRSZ2IoIFFSZ2IgcmdiICk7CgogICAgaW50IHJl
ZCgpIGNvbnN0OwogICAgaW50IGdyZWVuKCkgY29uc3Q7CiAgICBpbnQgYmx1ZSgpIGNvbnN0OwoK
ICAgIHZvaWQgaHN2KCBpbnQgKmgsIGludCAqcywgaW50ICp2ICkgY29uc3Q7CiAgICB2b2lkIGdl
dEhzdiggaW50ICZoLCBpbnQgJnMsIGludCAmdiApIGNvbnN0IHsgaHN2KCAmaCwgJnMsICZ2ICk7
IH0KICAgIHZvaWQgc2V0SHN2KCBpbnQgaCwgaW50IHMsIGludCB2ICk7CgogICAgUUNvbG9yIGxp
Z2h0KCBpbnQgZiA9IDE1MCApIGNvbnN0OwogICAgUUNvbG9yIGRhcmsoIGludCBmID0gMjAwICkg
Y29uc3Q7CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRQ29sb3IgJmMgKSBjb25zdDsKICAg
IGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUNvbG9yICZjICkgY29uc3Q7CgogICAgdWludCBhbGxv
YygpOwogICAgdWludCBwaXhlbCgpIGNvbnN0OwoKICAgIHN0YXRpYyBpbnQgbWF4Q29sb3JzKCk7
CiAgICBzdGF0aWMgaW50IG51bUJpdFBsYW5lcygpOwoKICAgIHN0YXRpYyBpbnQgZW50ZXJBbGxv
Y0NvbnRleHQoKTsKICAgIHN0YXRpYyB2b2lkIGxlYXZlQWxsb2NDb250ZXh0KCk7CiAgICBzdGF0
aWMgaW50IGN1cnJlbnRBbGxvY0NvbnRleHQoKTsKICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lBbGxv
Y0NvbnRleHQoIGludCApOwojIDEzMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNs
dWRlL3Fjb2xvci5oIgogICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgc3RhdGljIHZv
aWQgY2xlYW51cCgpOwoKICAgIGVudW0geyBEaXJ0ID0gMHg0NDQ5NTI1NCwgSW52YWxpZCA9IDB4
NDkwMDAwMDAgfTsKCnByaXZhdGU6CiAgICB2b2lkIHNldFN5c3RlbU5hbWVkQ29sb3IoIGNvbnN0
IFFTdHJpbmcmIG5hbWUgKTsKICAgIHZvaWQgc2V0UGl4ZWwoIHVpbnQgcGl4ZWwgKTsKICAgIHN0
YXRpYyB2b2lkIGluaXRHbG9iYWxDb2xvcnMoKTsKICAgIHN0YXRpYyB1aW50IGFyZ2JUb1BpeDMy
KFFSZ2IpOwogICAgc3RhdGljIFFDb2xvciogZ2xvYmFsQ29sb3JzKCk7CiAgICBzdGF0aWMgYm9v
bCBjb2xvcl9pbml0OwogICAgc3RhdGljIGJvb2wgZ2xvYmFsc19pbml0OwoKCgogICAgc3RhdGlj
IGVudW0gQ29sb3JNb2RlbCB7IGQ4LCBkMzIgfSBjb2xvcm1vZGVsOwogICAgdW5pb24gewogICAg
ICAgIFFSZ2IgYXJnYjsKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICBRUmdiIGFyZ2I7CiAg
ICAgICAgICAgIHVjaGFyIHBpeDsKICAgICAgICAgICAgdWNoYXIgaW52YWxpZDsKICAgICAgICAg
ICAgdWNoYXIgZGlydHk7CiAgICAgICAgICAgIHVjaGFyIGRpcmVjdDsKICAgICAgICB9IGQ4Owog
ICAgICAgIHN0cnVjdCBEMzIgewogICAgICAgICAgICBRUmdiIGFyZ2I7CiAgICAgICAgICAgIHVp
bnQgcGl4OwogICAgICAgICAgICBib29sIGludmFsaWQoKSBjb25zdCB7IHJldHVybiBhcmdiID09
IFFDb2xvcjo6SW52YWxpZCAmJiBwaXggPT0gUUNvbG9yOjpEaXJ0OyB9CiAgICAgICAgICAgIGJv
b2wgcHJvYmFibHlEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIHBpeCA9PSBRQ29sb3I6OkRpcnQ7IH0K
ICAgICAgICB9IGQzMjsKICAgIH0gZDsKfTsKCgppbmxpbmUgUUNvbG9yOjpRQ29sb3IoKQp7IGQu
ZDMyLmFyZ2IgPSBJbnZhbGlkOyBkLmQzMi5waXggPSBEaXJ0OyB9CgppbmxpbmUgUUNvbG9yOjpR
Q29sb3IoIGludCByLCBpbnQgZywgaW50IGIgKQp7IHNldFJnYiggciwgZywgYiApOyB9Cgppbmxp
bmUgUVJnYiBRQ29sb3I6OnJnYigpIGNvbnN0CnsgcmV0dXJuIGQuYXJnYjsgfQoKaW5saW5lIGlu
dCBRQ29sb3I6OnJlZCgpIGNvbnN0CnsgcmV0dXJuIHFSZWQoZC5hcmdiKTsgfQoKaW5saW5lIGlu
dCBRQ29sb3I6OmdyZWVuKCkgY29uc3QKeyByZXR1cm4gcUdyZWVuKGQuYXJnYik7IH0KCmlubGlu
ZSBpbnQgUUNvbG9yOjpibHVlKCkgY29uc3QKeyByZXR1cm4gcUJsdWUoZC5hcmdiKTsgfQoKaW5s
aW5lIGJvb2wgUUNvbG9yOjppc1ZhbGlkKCkgY29uc3QKewogICAgaWYgKCBjb2xvcm1vZGVsID09
IGQ4ICkKICAgICAgICByZXR1cm4gIWQuZDguaW52YWxpZDsKICAgIGVsc2UKICAgICAgICByZXR1
cm4gIWQuZDMyLmludmFsaWQoKTsKfQoKaW5saW5lIGJvb2wgUUNvbG9yOjpvcGVyYXRvcj09KCBj
b25zdCBRQ29sb3IgJmMgKSBjb25zdAp7CiAgICByZXR1cm4gZC5hcmdiID09IGMuZC5hcmdiICYm
IGlzVmFsaWQoKSA9PSBjLmlzVmFsaWQoKTsKfQoKaW5saW5lIGJvb2wgUUNvbG9yOjpvcGVyYXRv
ciE9KCBjb25zdCBRQ29sb3IgJmMgKSBjb25zdAp7CiAgICByZXR1cm4gIW9wZXJhdG9yPT0oYyk7
Cn0KCgoKCgoKCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3Qg
UUNvbG9yICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRQ29s
b3IgJiApOwojIDQ0ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXBhbGV0
dGUuaCIgMgoKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWJydXNo
LmgiIDEKIyA0NyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FicnVzaC5o
IgpjbGFzcyBRQnJ1c2g6IHB1YmxpYyBRdAp7CmZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKcHVibGlj
OgogICAgUUJydXNoKCk7CiAgICBRQnJ1c2goIEJydXNoU3R5bGUgKTsKICAgIFFCcnVzaCggY29u
c3QgUUNvbG9yICYsIEJydXNoU3R5bGU9U29saWRQYXR0ZXJuICk7CiAgICBRQnJ1c2goIGNvbnN0
IFFDb2xvciAmLCBjb25zdCBRUGl4bWFwICYgKTsKICAgIFFCcnVzaCggY29uc3QgUUJydXNoICYg
KTsKICAgflFCcnVzaCgpOwogICAgUUJydXNoICZvcGVyYXRvcj0oIGNvbnN0IFFCcnVzaCAmICk7
CgogICAgQnJ1c2hTdHlsZSBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0eWxlOyB9CiAg
ICB2b2lkIHNldFN0eWxlKCBCcnVzaFN0eWxlICk7CiAgICBjb25zdCBRQ29sb3IgJmNvbG9yKClj
b25zdCB7IHJldHVybiBkYXRhLT5jb2xvcjsgfQogICAgdm9pZCBzZXRDb2xvciggY29uc3QgUUNv
bG9yICYgKTsKICAgIFFQaXhtYXAgKnBpeG1hcCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnBpeG1h
cDsgfQogICAgdm9pZCBzZXRQaXhtYXAoIGNvbnN0IFFQaXhtYXAgJiApOwoKICAgIGJvb2wgb3Bl
cmF0b3I9PSggY29uc3QgUUJydXNoICZwICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yIT0oIGNv
bnN0IFFCcnVzaCAmYiApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7IHJldHVybiAhKG9wZXJhdG9yPT0oYikpOyB9Cgpwcml2YXRlOgogICAgUUJydXNoIGNv
cHkoKSBjb25zdDsKICAgIHZvaWQgZGV0YWNoKCk7CiAgICB2b2lkIGluaXQoIGNvbnN0IFFDb2xv
ciAmLCBCcnVzaFN0eWxlICk7CiAgICBzdHJ1Y3QgUUJydXNoRGF0YSA6IHB1YmxpYyBRU2hhcmVk
IHsKICAgICAgICBCcnVzaFN0eWxlIHN0eWxlOwogICAgICAgIFFDb2xvciBjb2xvcjsKICAgICAg
ICBRUGl4bWFwICpwaXhtYXA7CiAgICB9ICpkYXRhOwp9OwoKCgoKCgoKIFFEYXRhU3RyZWFtICZv
cGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQnJ1c2ggJiApOwogUURhdGFTdHJlYW0g
Jm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFCcnVzaCAmICk7CiMgNDYgIi91c3IvbG9jYWwv
cXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xcGFsZXR0ZS5oIiAyCgoKCgpjbGFzcyBRQ29sb3JH
cm91cFByaXZhdGU7CgpjbGFzcyBRQ29sb3JHcm91cAp7CnB1YmxpYzoKICAgIFFDb2xvckdyb3Vw
KCk7CiAgICBRQ29sb3JHcm91cCggY29uc3QgUUNvbG9yICZmb3JlZ3JvdW5kLCBjb25zdCBRQ29s
b3IgJmJ1dHRvbiwKICAgICAgICAgICAgICAgICBjb25zdCBRQ29sb3IgJmxpZ2h0LCBjb25zdCBR
Q29sb3IgJmRhcmssIGNvbnN0IFFDb2xvciAmbWlkLAogICAgICAgICAgICAgICAgIGNvbnN0IFFD
b2xvciAmdGV4dCwgY29uc3QgUUNvbG9yICZiYXNlICk7CiAgICBRQ29sb3JHcm91cCggY29uc3Qg
UUJydXNoICZmb3JlZ3JvdW5kLCBjb25zdCBRQnJ1c2ggJmJ1dHRvbiwKICAgICAgICAgICAgICAg
ICBjb25zdCBRQnJ1c2ggJmxpZ2h0LCBjb25zdCBRQnJ1c2ggJmRhcmssIGNvbnN0IFFCcnVzaCAm
bWlkLAogICAgICAgICAgICAgICAgIGNvbnN0IFFCcnVzaCAmdGV4dCwgY29uc3QgUUJydXNoICZi
cmlnaHRfdGV4dCwKICAgICAgICAgICAgICAgICBjb25zdCBRQnJ1c2ggJmJhc2UsIGNvbnN0IFFC
cnVzaCAmYmFja2dyb3VuZCk7CiAgICBRQ29sb3JHcm91cCggY29uc3QgUUNvbG9yR3JvdXAgJiAp
OwoKICAgflFDb2xvckdyb3VwKCk7CgogICAgUUNvbG9yR3JvdXAmIG9wZXJhdG9yID0oY29uc3Qg
UUNvbG9yR3JvdXAmKTsKCgogICAgZW51bSBDb2xvclJvbGUgeyBGb3JlZ3JvdW5kLCBCdXR0b24s
IExpZ2h0LCBNaWRsaWdodCwgRGFyaywgTWlkLAogICAgICAgICAgICAgICAgICAgICBUZXh0LCBC
cmlnaHRUZXh0LCBCdXR0b25UZXh0LCBCYXNlLCBCYWNrZ3JvdW5kLCBTaGFkb3csCiAgICAgICAg
ICAgICAgICAgICAgIEhpZ2hsaWdodCwgSGlnaGxpZ2h0ZWRUZXh0LCBMaW5rLCBMaW5rVmlzaXRl
ZCwKICAgICAgICAgICAgICAgICAgICAgTkNvbG9yUm9sZXMgfTsKCiAgICBjb25zdCBRQ29sb3Ig
JmNvbG9yKCBDb2xvclJvbGUgKSBjb25zdDsKICAgIGNvbnN0IFFCcnVzaCAmYnJ1c2goIENvbG9y
Um9sZSApIGNvbnN0OwogICAgdm9pZCBzZXRDb2xvciggQ29sb3JSb2xlLCBjb25zdCBRQ29sb3Ig
JiApOwogICAgdm9pZCBzZXRCcnVzaCggQ29sb3JSb2xlLCBjb25zdCBRQnJ1c2ggJiApOwoKICAg
IGNvbnN0IFFDb2xvciAmZm9yZWdyb3VuZCgpIGNvbnN0IHsgcmV0dXJuIGJyW0ZvcmVncm91bmRd
LmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmYnV0dG9uKCkgY29uc3QgeyByZXR1cm4gYnJb
QnV0dG9uXS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmxpZ2h0KCkgY29uc3QgeyByZXR1
cm4gYnJbTGlnaHRdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmZGFyaygpIGNvbnN0IHsg
cmV0dXJuIGJyW0RhcmtdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmbWlkKCkgY29uc3Qg
eyByZXR1cm4gYnJbTWlkXS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJnRleHQoKSBjb25z
dCB7IHJldHVybiBicltUZXh0XS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmJhc2UoKSBj
b25zdCB7IHJldHVybiBicltCYXNlXS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmJhY2tn
cm91bmQoKSBjb25zdCB7IHJldHVybiBicltCYWNrZ3JvdW5kXS5jb2xvcigpOyB9CgogICAgY29u
c3QgUUNvbG9yICZtaWRsaWdodCgpIGNvbnN0IHsgcmV0dXJuIGJyW01pZGxpZ2h0XS5jb2xvcigp
OyB9CiAgICBjb25zdCBRQ29sb3IgJmJyaWdodFRleHQoKSBjb25zdCB7IHJldHVybiBicltCcmln
aHRUZXh0XS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmJ1dHRvblRleHQoKSBjb25zdCB7
IHJldHVybiBicltCdXR0b25UZXh0XS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJnNoYWRv
dygpIGNvbnN0IHsgcmV0dXJuIGJyW1NoYWRvd10uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9y
ICZoaWdobGlnaHQoKSBjb25zdCB7IHJldHVybiBicltIaWdobGlnaHRdLmNvbG9yKCk7IH0KICAg
IGNvbnN0IFFDb2xvciAmaGlnaGxpZ2h0ZWRUZXh0KCkgY29uc3R7cmV0dXJuIGJyW0hpZ2hsaWdo
dGVkVGV4dF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZsaW5rKCkgY29uc3QgeyByZXR1
cm4gYnJbTGlua10uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZsaW5rVmlzaXRlZCgpIGNv
bnN0IHsgcmV0dXJuIGJyW0xpbmtWaXNpdGVkXS5jb2xvcigpOyB9CgogICAgYm9vbCBvcGVyYXRv
cj09KCBjb25zdCBRQ29sb3JHcm91cCAmZyApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBj
b25zdCBRQ29sb3JHcm91cCAmZyApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gIShvcGVyYXRvcj09
KGcpKTsgfQoKcHJpdmF0ZToKICAgIFFCcnVzaCAqYnI7CiAgICBRQ29sb3JHcm91cFByaXZhdGUg
KiBkOwoKICAgIGZyaWVuZCBjbGFzcyBRUGFsZXR0ZTsKfTsKCgpjbGFzcyBRUGFsZXR0ZQp7CnB1
YmxpYzoKICAgIFFQYWxldHRlKCk7CiAgICBRUGFsZXR0ZSggY29uc3QgUUNvbG9yICZidXR0b24g
KTsKICAgIFFQYWxldHRlKCBjb25zdCBRQ29sb3IgJmJ1dHRvbiwgY29uc3QgUUNvbG9yICZiYWNr
Z3JvdW5kICk7CiAgICBRUGFsZXR0ZSggY29uc3QgUUNvbG9yR3JvdXAgJmFjdGl2ZSwgY29uc3Qg
UUNvbG9yR3JvdXAgJmRpc2FibGVkLAogICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZp
bmFjdGl2ZSApOwogICAgUVBhbGV0dGUoIGNvbnN0IFFQYWxldHRlICYgKTsKICAgIH5RUGFsZXR0
ZSgpOwogICAgUVBhbGV0dGUgJm9wZXJhdG9yPSggY29uc3QgUVBhbGV0dGUgJiApOwoKICAgIGVu
dW0gQ29sb3JHcm91cCB7IERpc2FibGVkLCBBY3RpdmUsIEluYWN0aXZlLCBOQ29sb3JHcm91cHMs
IE5vcm1hbD1BY3RpdmUgfTsKCiAgICBjb25zdCBRQ29sb3IgJmNvbG9yKCBDb2xvckdyb3VwLCBR
Q29sb3JHcm91cDo6Q29sb3JSb2xlICkgY29uc3Q7CiAgICBjb25zdCBRQnJ1c2ggJmJydXNoKCBD
b2xvckdyb3VwLCBRQ29sb3JHcm91cDo6Q29sb3JSb2xlICkgY29uc3Q7CiAgICB2b2lkIHNldENv
bG9yKCBDb2xvckdyb3VwLCBRQ29sb3JHcm91cDo6Q29sb3JSb2xlLCBjb25zdCBRQ29sb3IgJiAp
OwogICAgdm9pZCBzZXRCcnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSwg
Y29uc3QgUUJydXNoICYgKTsKCiAgICB2b2lkIHNldENvbG9yKCBRQ29sb3JHcm91cDo6Q29sb3JS
b2xlLCBjb25zdCBRQ29sb3IgJiApOwogICAgdm9pZCBzZXRCcnVzaCggUUNvbG9yR3JvdXA6OkNv
bG9yUm9sZSwgY29uc3QgUUJydXNoICYgKTsKCiAgICBRUGFsZXR0ZSBjb3B5KCkgY29uc3Q7Cgog
ICAgY29uc3QgUUNvbG9yR3JvdXAgJmFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPmFjdGl2
ZTsgfQogICAgY29uc3QgUUNvbG9yR3JvdXAgJmRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gZGF0
YS0+ZGlzYWJsZWQ7IH0KICAgIGNvbnN0IFFDb2xvckdyb3VwICZpbmFjdGl2ZSgpIGNvbnN0IHsg
cmV0dXJuIGRhdGEtPmluYWN0aXZlOyB9CgogICAgY29uc3QgUUNvbG9yR3JvdXAgJm5vcm1hbCgp
IGNvbnN0IHsgcmV0dXJuIGFjdGl2ZSgpOyB9CgoKICAgIHZvaWQgc2V0QWN0aXZlKCBjb25zdCBR
Q29sb3JHcm91cCAmICk7CiAgICB2b2lkIHNldERpc2FibGVkKCBjb25zdCBRQ29sb3JHcm91cCAm
ICk7CiAgICB2b2lkIHNldEluYWN0aXZlKCBjb25zdCBRQ29sb3JHcm91cCAmICk7CgogICAgdm9p
ZCBzZXROb3JtYWwoIGNvbnN0IFFDb2xvckdyb3VwICYgY2cgKSB7IHNldEFjdGl2ZShjZyk7IH0K
CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRUGFsZXR0ZSAmcCApIGNvbnN0OwogICAgYm9v
bCBvcGVyYXRvciE9KCBjb25zdCBRUGFsZXR0ZSAmcCApIGNvbnN0CiAgICAgICAgICAgICAgeyBy
ZXR1cm4gIShvcGVyYXRvcj09KHApKTsgfQogICAgYm9vbCBpc0NvcHlPZiggY29uc3QgUVBhbGV0
dGUgJiApOwoKICAgIGludCBzZXJpYWxOdW1iZXIoKSBjb25zdCB7IHJldHVybiBkYXRhLT5zZXJf
bm87IH0KCgogICAgc3RhdGljIFFDb2xvckdyb3VwOjpDb2xvclJvbGUgZm9yZWdyb3VuZFJvbGVG
cm9tTW9kZSggUXQ6OkJhY2tncm91bmRNb2RlIG1vZGUgKTsKICAgIHN0YXRpYyBRQ29sb3JHcm91
cDo6Q29sb3JSb2xlIGJhY2tncm91bmRSb2xlRnJvbU1vZGUoIFF0OjpCYWNrZ3JvdW5kTW9kZSBt
b2RlKTsKCnByaXZhdGU6CiAgICB2b2lkIGRldGFjaCgpOwogICAgY29uc3QgUUJydXNoICZkaXJl
Y3RCcnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSApIGNvbnN0OwogICAg
dm9pZCBkaXJlY3RTZXRCcnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSwg
Y29uc3QgUUJydXNoJiApOwoKICAgIHN0cnVjdCBRUGFsRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsK
ICAgICAgICBRQ29sb3JHcm91cCBkaXNhYmxlZDsKICAgICAgICBRQ29sb3JHcm91cCBhY3RpdmU7
CiAgICAgICAgaW50IHNlcl9ubzsKICAgICAgICBRQ29sb3JHcm91cCBpbmFjdGl2ZTsKICAgIH0g
KmRhdGE7Cn07CgoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYs
IGNvbnN0IFFDb2xvckdyb3VwICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0
cmVhbSAmLCBRQ29sb3JHcm91cCAmICk7CgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRh
U3RyZWFtICYsIGNvbnN0IFFQYWxldHRlICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBR
RGF0YVN0cmVhbSAmLCBRUGFsZXR0ZSAmICk7CiMgNDYgIi91c3IvbG9jYWwvcXQteDExLWZyZWUt
My4wLjYvaW5jbHVkZS9xd2lkZ2V0LmgiIDIKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMu
MC42L2luY2x1ZGUvcWZvbnQuaCIgMQojIDQ3ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42
L2luY2x1ZGUvcWZvbnQuaCIKY2xhc3MgUUZvbnRQcml2YXRlOwpjbGFzcyBRU3RyaW5nTGlzdDsK
CmNsYXNzIFFGb250CnsKcHVibGljOgogICAgZW51bSBTdHlsZUhpbnQgewogICAgICAgIEhlbHZl
dGljYSwgU2Fuc1NlcmlmID0gSGVsdmV0aWNhLAogICAgICAgIFRpbWVzLCBTZXJpZiA9IFRpbWVz
LAogICAgICAgIENvdXJpZXIsIFR5cGVXcml0ZXIgPSBDb3VyaWVyLAogICAgICAgIE9sZEVuZ2xp
c2gsIERlY29yYXRpdmUgPSBPbGRFbmdsaXNoLAogICAgICAgIFN5c3RlbSwKICAgICAgICBBbnlT
dHlsZQogICAgfTsKCiAgICBlbnVtIFN0eWxlU3RyYXRlZ3kgewogICAgICAgIFByZWZlckRlZmF1
bHQgPSAweDAwMDEsCiAgICAgICAgUHJlZmVyQml0bWFwID0gMHgwMDAyLAogICAgICAgIFByZWZl
ckRldmljZSA9IDB4MDAwNCwKICAgICAgICBQcmVmZXJPdXRsaW5lID0gMHgwMDA4LAogICAgICAg
IEZvcmNlT3V0bGluZSA9IDB4MDAxMCwKICAgICAgICBQcmVmZXJNYXRjaCA9IDB4MDAyMCwKICAg
ICAgICBQcmVmZXJRdWFsaXR5ID0gMHgwMDQwLAogICAgICAgIFByZWZlckFudGlhbGlhcyA9IDB4
MDA4MCwKICAgICAgICBOb0FudGlhbGlhcyA9IDB4MDEwMAogICAgfTsKCiAgICBlbnVtIFdlaWdo
dCB7CiAgICAgICAgTGlnaHQgPSAyNSwKICAgICAgICBOb3JtYWwgPSA1MCwKICAgICAgICBEZW1p
Qm9sZCA9IDYzLAogICAgICAgIEJvbGQgPSA3NSwKICAgICAgICBCbGFjayA9IDg3CiAgICB9OwoK
CiAgICBRRm9udCgpOwoKICAgIFFGb250KCBjb25zdCBRU3RyaW5nICZmYW1pbHksIGludCBwb2lu
dFNpemUgPSAxMiwgaW50IHdlaWdodCA9IE5vcm1hbCwKICAgICAgICAgICBib29sIGl0YWxpYyA9
IEZBTFNFICk7CgogICAgUUZvbnQoIGNvbnN0IFFGb250ICYgKTsKCiAgICB+UUZvbnQoKTsKCiAg
ICBRU3RyaW5nIGZhbWlseSgpIGNvbnN0OwogICAgdm9pZCBzZXRGYW1pbHkoIGNvbnN0IFFTdHJp
bmcgJik7CgogICAgaW50IHBvaW50U2l6ZSgpIGNvbnN0OwogICAgZmxvYXQgcG9pbnRTaXplRmxv
YXQoKSBjb25zdDsKICAgIHZvaWQgc2V0UG9pbnRTaXplKCBpbnQgKTsKICAgIHZvaWQgc2V0UG9p
bnRTaXplRmxvYXQoIGZsb2F0ICk7CgogICAgaW50IHBpeGVsU2l6ZSgpIGNvbnN0OwogICAgdm9p
ZCBzZXRQaXhlbFNpemUoIGludCApOwogICAgdm9pZCBzZXRQaXhlbFNpemVGbG9hdCggZmxvYXQg
KTsKCiAgICBpbnQgd2VpZ2h0KCkgY29uc3Q7CiAgICB2b2lkIHNldFdlaWdodCggaW50ICk7Cgog
ICAgYm9vbCBib2xkKCkgY29uc3Q7CiAgICB2b2lkIHNldEJvbGQoIGJvb2wgKTsKCiAgICBib29s
IGl0YWxpYygpIGNvbnN0OwogICAgdm9pZCBzZXRJdGFsaWMoIGJvb2wgKTsKCiAgICBib29sIHVu
ZGVybGluZSgpIGNvbnN0OwogICAgdm9pZCBzZXRVbmRlcmxpbmUoIGJvb2wgKTsKCiAgICBib29s
IHN0cmlrZU91dCgpIGNvbnN0OwogICAgdm9pZCBzZXRTdHJpa2VPdXQoIGJvb2wgKTsKCiAgICBi
b29sIGZpeGVkUGl0Y2goKSBjb25zdDsKICAgIHZvaWQgc2V0Rml4ZWRQaXRjaCggYm9vbCApOwoK
ICAgIFN0eWxlSGludCBzdHlsZUhpbnQoKSBjb25zdDsKICAgIFN0eWxlU3RyYXRlZ3kgc3R5bGVT
dHJhdGVneSgpIGNvbnN0OwogICAgdm9pZCBzZXRTdHlsZUhpbnQoIFN0eWxlSGludCwgU3R5bGVT
dHJhdGVneSA9IFByZWZlckRlZmF1bHQgKTsKICAgIHZvaWQgc2V0U3R5bGVTdHJhdGVneSggU3R5
bGVTdHJhdGVneSBzICk7CgoKICAgIGJvb2wgcmF3TW9kZSgpIGNvbnN0OwogICAgdm9pZCBzZXRS
YXdNb2RlKCBib29sICk7CgoKICAgIGJvb2wgZXhhY3RNYXRjaCgpIGNvbnN0OwoKICAgIFFGb250
ICZvcGVyYXRvcj0oIGNvbnN0IFFGb250ICYgKTsKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3Qg
UUZvbnQgJiApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRRm9udCAmICkgY29u
c3Q7CiAgICBib29sIGlzQ29weU9mKCBjb25zdCBRRm9udCAmICkgY29uc3Q7CgoKCgoKICAgIFF0
OjpIQU5ETEUgaGFuZGxlKCkgY29uc3Q7CgoKCgogICAgdm9pZCBzZXRSYXdOYW1lKCBjb25zdCBR
U3RyaW5nICYgKTsKICAgIFFTdHJpbmcgcmF3TmFtZSgpIGNvbnN0OwoKICAgIFFTdHJpbmcga2V5
KCkgY29uc3Q7CgoKICAgIFFTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKICAgIGJvb2wgZnJvbVN0
cmluZyhjb25zdCBRU3RyaW5nICYpOwoKICAgIHN0YXRpYyBRU3RyaW5nIHN1YnN0aXR1dGUoY29u
c3QgUVN0cmluZyAmKTsKICAgIHN0YXRpYyBRU3RyaW5nTGlzdCBzdWJzdGl0dXRlcyhjb25zdCBR
U3RyaW5nICYpOwogICAgc3RhdGljIFFTdHJpbmdMaXN0IHN1YnN0aXR1dGlvbnMoKTsKICAgIHN0
YXRpYyB2b2lkIGluc2VydFN1YnN0aXR1dGlvbihjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmlu
ZyAmKTsKICAgIHN0YXRpYyB2b2lkIGluc2VydFN1YnN0aXR1dGlvbnMoY29uc3QgUVN0cmluZyYs
IGNvbnN0IFFTdHJpbmdMaXN0ICYpOwogICAgc3RhdGljIHZvaWQgcmVtb3ZlU3Vic3RpdHV0aW9u
KGNvbnN0IFFTdHJpbmcgJik7CgogICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgc3Rh
dGljIHZvaWQgY2xlYW51cCgpOwogICAgc3RhdGljIHZvaWQgY2FjaGVTdGF0aXN0aWNzKCk7CgoK
CgoKCgogICAgZW51bSBTY3JpcHQgewoKICAgICAgICBMYXRpbiwKICAgICAgICBHcmVlaywKICAg
ICAgICBDeXJpbGxpYywKICAgICAgICBBcm1lbmlhbiwKICAgICAgICBHZW9yZ2lhbiwKICAgICAg
ICBSdW5pYywKICAgICAgICBPZ2hhbSwKICAgICAgICBTcGFjaW5nTW9kaWZpZXJzLAogICAgICAg
IENvbWJpbmluZ01hcmtzLAoKCiAgICAgICAgSGVicmV3LAogICAgICAgIEFyYWJpYywKICAgICAg
ICBTeXJpYWMsCiAgICAgICAgVGhhYW5hLAoKCiAgICAgICAgRGV2YW5hZ2FyaSwKICAgICAgICBC
ZW5nYWxpLAogICAgICAgIEd1cm11a2hpLAogICAgICAgIEd1amFyYXRpLAogICAgICAgIE9yaXlh
LAogICAgICAgIFRhbWlsLAogICAgICAgIFRlbHVndSwKICAgICAgICBLYW5uYWRhLAogICAgICAg
IE1hbGF5YWxhbSwKICAgICAgICBTaW5oYWxhLAogICAgICAgIFRoYWksCiAgICAgICAgTGFvLAog
ICAgICAgIFRpYmV0YW4sCiAgICAgICAgTXlhbm1hciwKICAgICAgICBLaG1lciwKCgogICAgICAg
IEhhbiwKICAgICAgICBIaXJhZ2FuYSwKICAgICAgICBLYXRha2FuYSwKICAgICAgICBIYW5ndWws
CiAgICAgICAgQm9wb21vZm8sCiAgICAgICAgWWksCgoKICAgICAgICBFdGhpb3BpYywKICAgICAg
ICBDaGVyb2tlZSwKICAgICAgICBDYW5hZGlhbkFib3JpZ2luYWwsCiAgICAgICAgTW9uZ29saWFu
LAoKCiAgICAgICAgQ3VycmVuY3lTeW1ib2xzLAogICAgICAgIExldHRlcmxpa2VTeW1ib2xzLAog
ICAgICAgIE51bWJlckZvcm1zLAogICAgICAgIE1hdGhlbWF0aWNhbE9wZXJhdG9ycywKICAgICAg
ICBUZWNobmljYWxTeW1ib2xzLAogICAgICAgIEdlb21ldHJpY1N5bWJvbHMsCiAgICAgICAgTWlz
Y2VsbGFuZW91c1N5bWJvbHMsCiAgICAgICAgRW5jbG9zZWRBbmRTcXVhcmUsCiAgICAgICAgQnJh
aWxsZSwKCiAgICAgICAgVW5pY29kZSwKCgogICAgICAgIE5TY3JpcHRzLAogICAgICAgIFVua25v
d25TY3JpcHQgPSBOU2NyaXB0cywKCiAgICAgICAgTm9TY3JpcHQsCgoKCgoKCiAgICAgICAgSGFu
WDExLAoKICAgICAgICBMYXRpbkJhc2ljID0gTGF0aW4sCiAgICAgICAgTGF0aW5FeHRlbmRlZEFf
MiA9IEhhblgxMSArIDEsCiAgICAgICAgTGF0aW5FeHRlbmRlZEFfMywKICAgICAgICBMYXRpbkV4
dGVuZGVkQV80LAogICAgICAgIExhdGluRXh0ZW5kZWRBXzE0LAogICAgICAgIExhdGluRXh0ZW5k
ZWRBXzE1LAogICAgICAgIEthdGFrYW5hSGFsZldpZHRoLAoKICAgICAgICBMYXN0UHJpdmF0ZVNj
cmlwdAogICAgfTsKCiAgICBRU3RyaW5nIGRlZmF1bHRGYW1pbHkoKSBjb25zdDsKICAgIFFTdHJp
bmcgbGFzdFJlc29ydEZhbWlseSgpIGNvbnN0OwogICAgUVN0cmluZyBsYXN0UmVzb3J0Rm9udCgp
IGNvbnN0OwoKCgogICAgc3RhdGljIFFGb250IGRlZmF1bHRGb250KCk7CiAgICBzdGF0aWMgdm9p
ZCBzZXREZWZhdWx0Rm9udCggY29uc3QgUUZvbnQgJiApOwoKCgoKcHJvdGVjdGVkOgoKICAgIGJv
b2wgZGlydHkoKSBjb25zdDsKICAgIGludCBkZWNpUG9pbnRTaXplKCkgY29uc3Q7CgoKcHJpdmF0
ZToKICAgIFFGb250KCBRRm9udFByaXZhdGUgKiwgYm9vbCBkZWVwID0gVFJVRSApOwogICAgUUZv
bnQoIFFGb250UHJpdmF0ZSAqLCBRUGFpbnREZXZpY2UgKnBkICk7CgogICAgdm9pZCBkZXRhY2go
KTsKIyAyOTQgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZm9udC5oIgog
ICAgZnJpZW5kIGNsYXNzIFFGb250TWV0cmljczsKICAgIGZyaWVuZCBjbGFzcyBRRm9udEluZm87
CiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7CiAgICBmcmllbmQgY2xhc3MgUVBTUHJpbnRlckZv
bnQ7CgoKICAgIGZyaWVuZCBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwg
Y29uc3QgUUZvbnQgJiApOwogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0
YVN0cmVhbSAmLCBRRm9udCAmICk7CgoKICAgIFFGb250UHJpdmF0ZSAqZDsKfTsKCgppbmxpbmUg
Ym9vbCBRRm9udDo6Ym9sZCgpIGNvbnN0CnsgcmV0dXJuIHdlaWdodCgpID4gTm9ybWFsOyB9CgoK
aW5saW5lIHZvaWQgUUZvbnQ6OnNldEJvbGQoIGJvb2wgZW5hYmxlICkKeyBzZXRXZWlnaHQoIGVu
YWJsZSA/IEJvbGQgOiBOb3JtYWwgKTsgfQojIDMyMyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0z
LjAuNi9pbmNsdWRlL3Fmb250LmgiCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJl
YW0gJiwgY29uc3QgUUZvbnQgJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3Ry
ZWFtICYsIFFGb250ICYgKTsKIyA0NyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNs
dWRlL3F3aWRnZXQuaCIgMgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVk
ZS9xZm9udG1ldHJpY3MuaCIgMQojIDQ2ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2lu
Y2x1ZGUvcWZvbnRtZXRyaWNzLmgiCmNsYXNzIFFGb250U3RydWN0OwpjbGFzcyBRVGV4dENvZGVj
OwpjbGFzcyBRVGV4dFBhcmFnOwoKY2xhc3MgUUZvbnRNZXRyaWNzCnsKcHVibGljOgogICAgUUZv
bnRNZXRyaWNzKCBjb25zdCBRRm9udCAmICk7CiAgICBRRm9udE1ldHJpY3MoIGNvbnN0IFFGb250
TWV0cmljcyAmICk7CiAgICB+UUZvbnRNZXRyaWNzKCk7CgogICAgUUZvbnRNZXRyaWNzICZvcGVy
YXRvcj0oIGNvbnN0IFFGb250TWV0cmljcyAmICk7CgogICAgaW50IGFzY2VudCgpIGNvbnN0Owog
ICAgaW50IGRlc2NlbnQoKSBjb25zdDsKICAgIGludCBoZWlnaHQoKSBjb25zdDsKICAgIGludCBs
ZWFkaW5nKCkgY29uc3Q7CiAgICBpbnQgbGluZVNwYWNpbmcoKSBjb25zdDsKICAgIGludCBtaW5M
ZWZ0QmVhcmluZygpIGNvbnN0OwogICAgaW50IG1pblJpZ2h0QmVhcmluZygpIGNvbnN0OwogICAg
aW50IG1heFdpZHRoKCkgY29uc3Q7CgogICAgYm9vbCBpbkZvbnQoUUNoYXIpIGNvbnN0OwoKICAg
IGludCBsZWZ0QmVhcmluZyhRQ2hhcikgY29uc3Q7CiAgICBpbnQgcmlnaHRCZWFyaW5nKFFDaGFy
KSBjb25zdDsKICAgIGludCB3aWR0aCggY29uc3QgUVN0cmluZyAmLCBpbnQgbGVuID0gLTEgKSBj
b25zdDsKCiAgICBpbnQgd2lkdGgoIFFDaGFyICkgY29uc3Q7CgogICAgaW50IHdpZHRoKCBjaGFy
IGMgKSBjb25zdCB7IHJldHVybiB3aWR0aCggKFFDaGFyKSBjICk7IH0KCgogICAgaW50IGNoYXJX
aWR0aCggY29uc3QgUVN0cmluZyAmc3RyLCBpbnQgcG9zICkgY29uc3Q7CiAgICBRUmVjdCBib3Vu
ZGluZ1JlY3QoIGNvbnN0IFFTdHJpbmcgJiwgaW50IGxlbiA9IC0xICkgY29uc3Q7CiAgICBRUmVj
dCBib3VuZGluZ1JlY3QoIFFDaGFyICkgY29uc3Q7CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIGlu
dCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIHN0ciwgaW50IGxlbj0tMSwgaW50IHRhYnN0b3BzPTAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqdGFiYXJyYXk9MCwgUVRleHRQYXJh
ZyAqKmludGVybj0wICkgY29uc3Q7CiAgICBRU2l6ZSBzaXplKCBpbnQgZmxhZ3MsCiAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBzdHIsIGludCBsZW49LTEsIGludCB0YWJzdG9w
cz0wLAogICAgICAgICAgICAgICAgICAgICAgaW50ICp0YWJhcnJheT0wLCBRVGV4dFBhcmFnICoq
aW50ZXJuPTAgKSBjb25zdDsKCiAgICBpbnQgdW5kZXJsaW5lUG9zKCkgY29uc3Q7CiAgICBpbnQg
c3RyaWtlT3V0UG9zKCkgY29uc3Q7CiAgICBpbnQgbGluZVdpZHRoKCkgY29uc3Q7Cgpwcml2YXRl
OgogICAgUUZvbnRNZXRyaWNzKCBjb25zdCBRUGFpbnRlciAqICk7CiAgICBzdGF0aWMgdm9pZCBy
ZXNldCggY29uc3QgUVBhaW50ZXIgKiApOwojIDEwNCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0z
LjAuNi9pbmNsdWRlL3Fmb250bWV0cmljcy5oIgogICAgZnJpZW5kIGNsYXNzIFFXaWRnZXQ7CiAg
ICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7CiAgICBmcmllbmQgY2xhc3MgUVRleHRGb3JtYXQ7CgoK
CgogICAgUUZvbnRQcml2YXRlICpkOwogICAgUVBhaW50ZXIgKnBhaW50ZXI7CiAgICBpbnQgZmxh
Z3M7CgogICAgYm9vbCB1bmRlcmxpbmVGbGFnKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgMHgx
KSAhPSAwOyB9CiAgICBib29sIHN0cmlrZU91dEZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxhZ3Mg
JiAweDIpICE9IDA7IH0KICAgIHZvaWQgc2V0VW5kZXJsaW5lRmxhZygpIHsgZmxhZ3MgfD0gMHgx
OyB9CiAgICB2b2lkIHNldFN0cmlrZU91dEZsYWcoKSB7IGZsYWdzIHw9IDB4MjsgfQp9OwojIDQ4
ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXdpZGdldC5oIiAyCiMgMSAi
L3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3Fmb250aW5mby5oIiAxCiMgNDYg
Ii91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZm9udGluZm8uaCIKY2xhc3Mg
UUZvbnRJbmZvCnsKcHVibGljOgogICAgUUZvbnRJbmZvKCBjb25zdCBRRm9udCAmICk7CiAgICBR
Rm9udEluZm8oIGNvbnN0IFFGb250SW5mbyAmICk7CiAgICB+UUZvbnRJbmZvKCk7CgogICAgUUZv
bnRJbmZvICZvcGVyYXRvcj0oIGNvbnN0IFFGb250SW5mbyAmICk7CgogICAgUVN0cmluZyBmYW1p
bHkoKSBjb25zdDsKICAgIGludCBwaXhlbFNpemUoKSBjb25zdDsKICAgIGludCBwb2ludFNpemUo
KSBjb25zdDsKICAgIGJvb2wgaXRhbGljKCkgY29uc3Q7CiAgICBpbnQgd2VpZ2h0KCkgY29uc3Q7
CiAgICBib29sIGJvbGQoKSBjb25zdDsKICAgIGJvb2wgdW5kZXJsaW5lKCkgY29uc3Q7CiAgICBi
b29sIHN0cmlrZU91dCgpIGNvbnN0OwogICAgYm9vbCBmaXhlZFBpdGNoKCkgY29uc3Q7CiAgICBR
Rm9udDo6U3R5bGVIaW50IHN0eWxlSGludCgpIGNvbnN0OwogICAgYm9vbCByYXdNb2RlKCkgY29u
c3Q7CgogICAgYm9vbCBleGFjdE1hdGNoKCkgY29uc3Q7CgoKcHJpdmF0ZToKICAgIFFGb250SW5m
byggY29uc3QgUVBhaW50ZXIgKiApOwogICAgc3RhdGljIHZvaWQgcmVzZXQoIGNvbnN0IFFQYWlu
dGVyICogKTsKCiAgICBRRm9udFByaXZhdGUgKmQ7CiAgICBRUGFpbnRlciAqcGFpbnRlcjsKICAg
IGludCBmbGFnczsKCiAgICBib29sIHVuZGVybGluZUZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxh
Z3MgJiAweDEpICE9IDA7IH0KICAgIGJvb2wgc3RyaWtlT3V0RmxhZygpIGNvbnN0IHsgcmV0dXJu
IChmbGFncyAmIDB4MikgIT0gMDsgfQogICAgYm9vbCBleGFjdE1hdGNoRmxhZygpIGNvbnN0IHsg
cmV0dXJuIChmbGFncyAmIDB4NCkgIT0gMDsgfQogICAgdm9pZCBzZXRVbmRlcmxpbmVGbGFnKCkg
eyBmbGFncyB8PSAweDE7IH0KICAgIHZvaWQgc2V0U3RyaWtlT3V0RmxhZygpIHsgZmxhZ3MgfD0g
MHgyOyB9CiAgICB2b2lkIHNldEV4YWN0TWF0Y2hGbGFnKCkgeyBmbGFncyB8PSAweDQ7IH0KCiAg
ICBmcmllbmQgY2xhc3MgUVdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKfTsKCgpp
bmxpbmUgYm9vbCBRRm9udEluZm86OmJvbGQoKSBjb25zdAp7IHJldHVybiB3ZWlnaHQoKSA+IFFG
b250OjpOb3JtYWw7IH0KIyA0OSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRl
L3F3aWRnZXQuaCIgMgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9x
c2l6ZXBvbGljeS5oIiAxCiMgNDUgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVk
ZS9xc2l6ZXBvbGljeS5oIgpjbGFzcyBRU2l6ZVBvbGljeQp7CnByaXZhdGU6CiAgICBlbnVtIHsg
SFNpemUgPSA2LCBITWFzayA9IDB4M2YsIFZNYXNrID0gSE1hc2sgPDwgSFNpemUsCiAgICAgICAg
ICAgTWF5R3JvdyA9IDEsIEV4cE1hc2sgPSAyLCBNYXlTaHJpbmsgPSA0IH07CnB1YmxpYzoKICAg
IGVudW0gU2l6ZVR5cGUgeyBGaXhlZCA9IDAsCiAgICAgICAgICAgICAgICAgICAgTWluaW11bSA9
IE1heUdyb3csCiAgICAgICAgICAgICAgICAgICAgTWF4aW11bSA9IE1heVNocmluaywKICAgICAg
ICAgICAgICAgICAgICBQcmVmZXJyZWQgPSBNYXlHcm93fE1heVNocmluayAsCiAgICAgICAgICAg
ICAgICAgICAgTWluaW11bUV4cGFuZGluZyA9IE1heUdyb3d8RXhwTWFzaywKICAgICAgICAgICAg
ICAgICAgICBFeHBhbmRpbmcgPSBNYXlHcm93fE1heVNocmlua3xFeHBNYXNrLAogICAgICAgICAg
ICAgICAgICAgIElnbm9yZWQgPSBFeHBNYXNrCiAgICB9OwoKICAgIGVudW0gRXhwYW5kRGF0YSB7
IE5vRGlyZWN0aW9uID0gMCwKICAgICAgICAgICAgICAgICAgICAgIEhvcml6b250YWxseSA9IDEs
CiAgICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbGx5ID0gMiwKICAgICAgICAgICAgICAgICAg
ICAgIEJvdGhEaXJlY3Rpb25zID0gSG9yaXpvbnRhbGx5IHwgVmVydGljYWxseQoKICAgICAgICAg
ICAgICAgICAgICAgICxIb3Jpem9udGFsID0gSG9yaXpvbnRhbGx5LAogICAgICAgICAgICAgICAg
ICAgICAgVmVydGljYWwgPSBWZXJ0aWNhbGx5CgogICAgfTsKCiAgICBRU2l6ZVBvbGljeSgpIDog
ZGF0YSggMCApIHt9CgogICAgUVNpemVQb2xpY3koIFNpemVUeXBlIGhvciwgU2l6ZVR5cGUgdmVy
LCBib29sIGhmdyA9IEZBTFNFICkKICAgICAgICA6IGRhdGEoIGhvciB8ICh2ZXI8PEhTaXplKSB8
IChoZncgPyAoUV9VSU5UMzIpKDE8PDIqSFNpemUpIDogMCkgKSB7fQogICAgUVNpemVQb2xpY3ko
IFNpemVUeXBlIGhvciwgU2l6ZVR5cGUgdmVyLCB1Y2hhciBob3JzLCB1Y2hhciB2ZXJzLCBib29s
IGhmdyA9IEZBTFNFICk7CgogICAgU2l6ZVR5cGUgaG9yRGF0YSgpIGNvbnN0IHsgcmV0dXJuIChT
aXplVHlwZSkoIGRhdGEgJiBITWFzayApOyB9CiAgICBTaXplVHlwZSB2ZXJEYXRhKCkgY29uc3Qg
eyByZXR1cm4gKFNpemVUeXBlKSgoIGRhdGEgJiBWTWFzayApID4+IEhTaXplKTsgfQoKICAgIGJv
b2wgbWF5U2hyaW5rSG9yaXpvbnRhbGx5KCkgY29uc3QgeyByZXR1cm4gaG9yRGF0YSgpICYgTWF5
U2hyaW5rIHx8IGhvckRhdGEoKSA9PSBJZ25vcmVkOyB9CiAgICBib29sIG1heVNocmlua1ZlcnRp
Y2FsbHkoKSBjb25zdCB7IHJldHVybiB2ZXJEYXRhKCkgJiBNYXlTaHJpbmsgfHwgdmVyRGF0YSgp
ID09IElnbm9yZWQ7IH0KICAgIGJvb2wgbWF5R3Jvd0hvcml6b250YWxseSgpIGNvbnN0IHsgcmV0
dXJuIGhvckRhdGEoKSAmIE1heUdyb3cgfHwgaG9yRGF0YSgpID09IElnbm9yZWQ7IH0KICAgIGJv
b2wgbWF5R3Jvd1ZlcnRpY2FsbHkoKSBjb25zdCB7IHJldHVybiB2ZXJEYXRhKCkgJiBNYXlHcm93
IHx8IHZlckRhdGEoKSA9PSBJZ25vcmVkOyB9CgogICAgRXhwYW5kRGF0YSBleHBhbmRpbmcoKSBj
b25zdAogICAgewogICAgICAgIHJldHVybiAoRXhwYW5kRGF0YSkoIChpbnQpKHZlckRhdGEoKSZF
eHBNYXNrID8gVmVydGljYWxseSA6IDApKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChp
bnQpKGhvckRhdGEoKSZFeHBNYXNrID8gSG9yaXpvbnRhbGx5IDogMCkgKTsKICAgIH0KCiAgICB2
b2lkIHNldEhvckRhdGEoIFNpemVUeXBlIGQgKSB7IGRhdGEgPSAoUV9VSU5UMzIpKGRhdGEgJiB+
SE1hc2spIHwgZDsgfQogICAgdm9pZCBzZXRWZXJEYXRhKCBTaXplVHlwZSBkICkgeyBkYXRhID0g
KFFfVUlOVDMyKShkYXRhICYgfihITWFzazw8SFNpemUpKSB8CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoZDw8SFNpemUpOyB9CgogICAgdm9pZCBzZXRIZWlnaHRG
b3JXaWR0aCggYm9vbCBiICkgeyBkYXRhID0gYiA/IChRX1VJTlQzMikoIGRhdGEgfCAoIDEgPDwg
MipIU2l6ZSApICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogKFFfVUlOVDMyKSggZGF0YSAmIH4oIDEgPDwgMipIU2l6ZSApICk7IH0KICAgIGJvb2wgaGFz
SGVpZ2h0Rm9yV2lkdGgoKSBjb25zdCB7IHJldHVybiBkYXRhICYgKCAxIDw8IDIqSFNpemUgKTsg
fQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVNpemVQb2xpY3kmIHMgKSBjb25zdCB7IHJl
dHVybiBkYXRhID09IHMuZGF0YTsgfQogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRU2l6ZVBv
bGljeSYgcyApIGNvbnN0IHsgcmV0dXJuIGRhdGEgIT0gcy5kYXRhOyB9CgoKICAgIHVpbnQgaG9y
U3RyZXRjaCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEgPj4gMjQ7IH0KICAgIHVpbnQgdmVyU3RyZXRj
aCgpIGNvbnN0IHsgcmV0dXJuIChkYXRhID4+IDE2KSAmIDB4ZmY7IH0KICAgIHZvaWQgc2V0SG9y
U3RyZXRjaCggdWNoYXIgc2YgKSB7IGRhdGEgPSAoZGF0YSYweDAwZmZmZmZmKSB8ICh1aW50KHNm
KTw8MjQpOyB9CiAgICB2b2lkIHNldFZlclN0cmV0Y2goIHVjaGFyIHNmICkgeyBkYXRhID0gKGRh
dGEmMHhmZjAwZmZmZikgfCAodWludChzZik8PDE2KTsgfQoKcHJpdmF0ZToKICAgIFFTaXplUG9s
aWN5KCBpbnQgaSApOiBkYXRhKCAoUV9VSU5UMzIpaSApIHt9CgogICAgUV9VSU5UMzIgZGF0YTsK
fTsKCmlubGluZSBRU2l6ZVBvbGljeTo6UVNpemVQb2xpY3koIFNpemVUeXBlIGhvciwgU2l6ZVR5
cGUgdmVyLCB1Y2hhciBob3JzLCB1Y2hhciB2ZXJzLCBib29sIGhmdyApCiAgICA6IGRhdGEoIGhv
ciB8ICh2ZXI8PEhTaXplKSB8IChoZncgPyAoUV9VSU5UMzIpKDE8PDIqSFNpemUpIDogMCkgKSB7
CiAgICAgICAgc2V0SG9yU3RyZXRjaCggaG9ycyApOwogICAgICAgIHNldFZlclN0cmV0Y2goIHZl
cnMgKTsKfQojIDUwICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXdpZGdl
dC5oIiAyCgoKY2xhc3MgUUxheW91dDsKc3RydWN0IFFXRXh0cmE7CnN0cnVjdCBRVExXRXh0cmE7
CmNsYXNzIFFGb2N1c0RhdGE7CmNsYXNzIFFDdXJzb3I7CmNsYXNzIFFXU1JlZ2lvbk1hbmFnZXI7
CmNsYXNzIFFTdHlsZTsKCmNsYXNzIFFXaWRnZXQgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFQ
YWludERldmljZQp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3Qo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFy
ICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiAp
OyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wg
cXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQs
IGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgp
OyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFT
dHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmlu
ZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0
aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK
ICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAog
ICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAg
IAogICAKICAgCgogICAKICAgCgoKICAgCiAgIAogICAKCiAgIAogICAKICAgCiAgIAogICAKICAg
CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKCnB1YmxpYzoKICAg
IFFXaWRnZXQoIFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAsIFdGbGFncyBm
PTAgKTsKICAgIH5RV2lkZ2V0KCk7CgogICAgV0lkIHdpbklkKCkgY29uc3Q7CiAgICB2b2lkIHNl
dE5hbWUoIGNvbnN0IGNoYXIgKm5hbWUgKTsKCgoKICAgIFFTdHlsZSAmc3R5bGUoKSBjb25zdDsK
ICAgIHZvaWQgc2V0U3R5bGUoIFFTdHlsZSAqICk7CiAgICBRU3R5bGUqIHNldFN0eWxlKCBjb25z
dCBRU3RyaW5nJiApOwoKCgogICAgYm9vbCBpc1RvcExldmVsKCkgY29uc3Q7CiAgICBib29sIGlz
RGlhbG9nKCkgY29uc3Q7CiAgICBib29sIGlzUG9wdXAoKSBjb25zdDsKICAgIGJvb2wgaXNEZXNr
dG9wKCkgY29uc3Q7CiAgICBib29sIGlzTW9kYWwoKSBjb25zdDsKCiAgICBib29sIGlzRW5hYmxl
ZCgpIGNvbnN0OwogICAgYm9vbCBpc0VuYWJsZWRUbyhRV2lkZ2V0KikgY29uc3Q7CiAgICBib29s
IGlzRW5hYmxlZFRvVExXKCkgY29uc3Q7CgpwdWJsaWMgOgogICAgdmlydHVhbCB2b2lkIHNldEVu
YWJsZWQoIGJvb2wgKTsKICAgIHZvaWQgc2V0RGlzYWJsZWQoIGJvb2wgKTsKCgoKcHVibGljOgog
ICAgUVJlY3QgZnJhbWVHZW9tZXRyeSgpIGNvbnN0OwogICAgY29uc3QgUVJlY3QgJmdlb21ldHJ5
KCkgY29uc3Q7CiAgICBpbnQgeCgpIGNvbnN0OwogICAgaW50IHkoKSBjb25zdDsKICAgIFFQb2lu
dCBwb3MoKSBjb25zdDsKICAgIFFTaXplIGZyYW1lU2l6ZSgpIGNvbnN0OwogICAgUVNpemUgc2l6
ZSgpIGNvbnN0OwogICAgaW50IHdpZHRoKCkgY29uc3Q7CiAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7
CiAgICBRUmVjdCByZWN0KCkgY29uc3Q7CiAgICBRUmVjdCBjaGlsZHJlblJlY3QoKSBjb25zdDsK
ICAgIFFSZWdpb24gY2hpbGRyZW5SZWdpb24oKSBjb25zdDsKCiAgICBRU2l6ZSBtaW5pbXVtU2l6
ZSgpIGNvbnN0OwogICAgUVNpemUgbWF4aW11bVNpemUoKSBjb25zdDsKICAgIGludCBtaW5pbXVt
V2lkdGgoKSBjb25zdDsKICAgIGludCBtaW5pbXVtSGVpZ2h0KCkgY29uc3Q7CiAgICBpbnQgbWF4
aW11bVdpZHRoKCkgY29uc3Q7CiAgICBpbnQgbWF4aW11bUhlaWdodCgpIGNvbnN0OwogICAgdm9p
ZCBzZXRNaW5pbXVtU2l6ZSggY29uc3QgUVNpemUgJiApOwogICAgdmlydHVhbCB2b2lkIHNldE1p
bmltdW1TaXplKCBpbnQgbWludywgaW50IG1pbmggKTsKICAgIHZvaWQgc2V0TWF4aW11bVNpemUo
IGNvbnN0IFFTaXplICYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXhpbXVtU2l6ZSggaW50IG1h
eHcsIGludCBtYXhoICk7CiAgICB2b2lkIHNldE1pbmltdW1XaWR0aCggaW50IG1pbncgKTsKICAg
IHZvaWQgc2V0TWluaW11bUhlaWdodCggaW50IG1pbmggKTsKICAgIHZvaWQgc2V0TWF4aW11bVdp
ZHRoKCBpbnQgbWF4dyApOwogICAgdm9pZCBzZXRNYXhpbXVtSGVpZ2h0KCBpbnQgbWF4aCApOwoK
ICAgIFFTaXplIHNpemVJbmNyZW1lbnQoKSBjb25zdDsKICAgIHZvaWQgc2V0U2l6ZUluY3JlbWVu
dCggY29uc3QgUVNpemUgJiApOwogICAgdmlydHVhbCB2b2lkIHNldFNpemVJbmNyZW1lbnQoIGlu
dCB3LCBpbnQgaCApOwogICAgUVNpemUgYmFzZVNpemUoKSBjb25zdDsKICAgIHZvaWQgc2V0QmFz
ZVNpemUoIGNvbnN0IFFTaXplICYgKTsKICAgIHZvaWQgc2V0QmFzZVNpemUoIGludCBiYXNldywg
aW50IGJhc2VoICk7CgogICAgdm9pZCBzZXRGaXhlZFNpemUoIGNvbnN0IFFTaXplICYgKTsKICAg
IHZvaWQgc2V0Rml4ZWRTaXplKCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgc2V0Rml4ZWRXaWR0
aCggaW50IHcgKTsKICAgIHZvaWQgc2V0Rml4ZWRIZWlnaHQoIGludCBoICk7CgoKCiAgICBRUG9p
bnQgbWFwVG9HbG9iYWwoIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAgICBRUG9pbnQgbWFwRnJv
bUdsb2JhbCggY29uc3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFQb2ludCBtYXBUb1BhcmVudCgg
Y29uc3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFQb2ludCBtYXBGcm9tUGFyZW50KCBjb25zdCBR
UG9pbnQgJiApIGNvbnN0OwogICAgUVBvaW50IG1hcFRvKCBRV2lkZ2V0ICosIGNvbnN0IFFQb2lu
dCAmICkgY29uc3Q7CiAgICBRUG9pbnQgbWFwRnJvbSggUVdpZGdldCAqLCBjb25zdCBRUG9pbnQg
JiApIGNvbnN0OwoKICAgIFFXaWRnZXQgKnRvcExldmVsV2lkZ2V0KCkgY29uc3Q7CgoKCiAgICBC
YWNrZ3JvdW5kTW9kZSBiYWNrZ3JvdW5kTW9kZSgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNl
dEJhY2tncm91bmRNb2RlKCBCYWNrZ3JvdW5kTW9kZSApOwogICAgdm9pZCBzZXRCYWNrZ3JvdW5k
TW9kZSggQmFja2dyb3VuZE1vZGUsIEJhY2tncm91bmRNb2RlICk7CgogICAgY29uc3QgUUNvbG9y
ICYgZm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CgogICAgY29uc3QgUUNvbG9yICYgZXJhc2VDb2xv
cigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEVyYXNlQ29sb3IoIGNvbnN0IFFDb2xvciAm
ICk7CgogICAgY29uc3QgUVBpeG1hcCAqIGVyYXNlUGl4bWFwKCkgY29uc3Q7CiAgICB2aXJ0dWFs
IHZvaWQgc2V0RXJhc2VQaXhtYXAoIGNvbnN0IFFQaXhtYXAgJiApOwoKCiAgICBjb25zdCBRQ29s
b3JHcm91cCAmIGNvbG9yR3JvdXAoKSBjb25zdDsKICAgIGNvbnN0IFFQYWxldHRlICYgcGFsZXR0
ZSgpIGNvbnN0OwogICAgYm9vbCBvd25QYWxldHRlKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQg
c2V0UGFsZXR0ZSggY29uc3QgUVBhbGV0dGUgJiApOwogICAgdm9pZCB1bnNldFBhbGV0dGUoKTsK
CgogICAgY29uc3QgUUNvbG9yICYgcGFsZXR0ZUZvcmVncm91bmRDb2xvcigpIGNvbnN0OwogICAg
dm9pZCBzZXRQYWxldHRlRm9yZWdyb3VuZENvbG9yKCBjb25zdCBRQ29sb3IgJiApOwoKICAgIGNv
bnN0IFFDb2xvciAmIHBhbGV0dGVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAgIHZpcnR1YWwg
dm9pZCBzZXRQYWxldHRlQmFja2dyb3VuZENvbG9yKCBjb25zdCBRQ29sb3IgJiApOwoKICAgIGNv
bnN0IFFQaXhtYXAgKiBwYWxldHRlQmFja2dyb3VuZFBpeG1hcCgpIGNvbnN0OwogICAgdmlydHVh
bCB2b2lkIHNldFBhbGV0dGVCYWNrZ3JvdW5kUGl4bWFwKCBjb25zdCBRUGl4bWFwICYgKTsKCiAg
ICBjb25zdCBRQnJ1c2gmIGJhY2tncm91bmRCcnVzaCgpIGNvbnN0OwoKICAgIFFGb250IGZvbnQo
KSBjb25zdDsKICAgIGJvb2wgb3duRm9udCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEZv
bnQoIGNvbnN0IFFGb250ICYgKTsKICAgIHZvaWQgdW5zZXRGb250KCk7CiAgICBRRm9udE1ldHJp
Y3MgZm9udE1ldHJpY3MoKSBjb25zdDsKICAgIFFGb250SW5mbyBmb250SW5mbygpIGNvbnN0OwoK
CiAgICBjb25zdCBRQ3Vyc29yICZjdXJzb3IoKSBjb25zdDsKICAgIGJvb2wgb3duQ3Vyc29yKCkg
Y29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKCBjb25zdCBRQ3Vyc29yICYgKTsKICAg
IHZpcnR1YWwgdm9pZCB1bnNldEN1cnNvcigpOwoKCiAgICBRU3RyaW5nIGNhcHRpb24oKSBjb25z
dDsKICAgIGNvbnN0IFFQaXhtYXAgKmljb24oKSBjb25zdDsKICAgIFFTdHJpbmcgaWNvblRleHQo
KSBjb25zdDsKCiAgICBib29sIGhhc01vdXNlVHJhY2tpbmcoKSBjb25zdDsKICAgIGJvb2wgaGFz
TW91c2UoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0TWFzayggY29uc3QgUUJpdG1hcCAm
ICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0TWFzayggY29uc3QgUVJlZ2lvbiAmICk7CiAgICB2b2lk
IGNsZWFyTWFzaygpOwoKICAgIGNvbnN0IFFDb2xvciAmIGJhY2tncm91bmRDb2xvcigpIGNvbnN0
OwogICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvciggY29uc3QgUUNvbG9yICYgKTsK
ICAgIGNvbnN0IFFQaXhtYXAgKiBiYWNrZ3JvdW5kUGl4bWFwKCkgY29uc3Q7CiAgICB2aXJ0dWFs
IHZvaWQgc2V0QmFja2dyb3VuZFBpeG1hcCggY29uc3QgUVBpeG1hcCAmICk7CgpwdWJsaWMgOgoK
ICAgIHZpcnR1YWwgdm9pZCBzZXRDYXB0aW9uKCBjb25zdCBRU3RyaW5nICYpOwogICAgdmlydHVh
bCB2b2lkIHNldEljb24oIGNvbnN0IFFQaXhtYXAgJiApOwogICAgdmlydHVhbCB2b2lkIHNldElj
b25UZXh0KCBjb25zdCBRU3RyaW5nICYpOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRNb3VzZVRyYWNr
aW5nKCBib29sIGVuYWJsZSApOwoKCgogICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKCk7CiAgICB2
b2lkIGNsZWFyRm9jdXMoKTsKCnB1YmxpYzoKICAgIGVudW0gRm9jdXNQb2xpY3kgewogICAgICAg
IE5vRm9jdXMgPSAwLAogICAgICAgIFRhYkZvY3VzID0gMHgxLAogICAgICAgIENsaWNrRm9jdXMg
PSAweDIsCiAgICAgICAgU3Ryb25nRm9jdXMgPSAweDMsCiAgICAgICAgV2hlZWxGb2N1cyA9IDB4
NwogICAgfTsKCiAgICBib29sIGlzQWN0aXZlV2luZG93KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZv
aWQgc2V0QWN0aXZlV2luZG93KCk7CiAgICBib29sIGlzRm9jdXNFbmFibGVkKCkgY29uc3Q7Cgog
ICAgRm9jdXNQb2xpY3kgZm9jdXNQb2xpY3koKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRG
b2N1c1BvbGljeSggRm9jdXNQb2xpY3kgKTsKICAgIGJvb2wgaGFzRm9jdXMoKSBjb25zdDsKICAg
IHN0YXRpYyB2b2lkIHNldFRhYk9yZGVyKCBRV2lkZ2V0ICosIFFXaWRnZXQgKiApOwogICAgdmly
dHVhbCB2b2lkIHNldEZvY3VzUHJveHkoIFFXaWRnZXQgKiApOwogICAgUVdpZGdldCAqIGZvY3Vz
UHJveHkoKSBjb25zdDsKCgoKICAgIHZvaWQgZ3JhYk1vdXNlKCk7CgogICAgdm9pZCBncmFiTW91
c2UoIGNvbnN0IFFDdXJzb3IgJiApOwoKICAgIHZvaWQgcmVsZWFzZU1vdXNlKCk7CiAgICB2b2lk
IGdyYWJLZXlib2FyZCgpOwogICAgdm9pZCByZWxlYXNlS2V5Ym9hcmQoKTsKICAgIHN0YXRpYyBR
V2lkZ2V0ICogbW91c2VHcmFiYmVyKCk7CiAgICBzdGF0aWMgUVdpZGdldCAqIGtleWJvYXJkR3Jh
YmJlcigpOwoKCgogICAgYm9vbCBpc1VwZGF0ZXNFbmFibGVkKCkgY29uc3Q7CgoKCgpwdWJsaWMg
OgogICAgdmlydHVhbCB2b2lkIHNldFVwZGF0ZXNFbmFibGVkKCBib29sIGVuYWJsZSApOwogICAg
dm9pZCB1cGRhdGUoKTsKICAgIHZvaWQgdXBkYXRlKCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQg
aCApOwogICAgdm9pZCB1cGRhdGUoIGNvbnN0IFFSZWN0JiApOwogICAgdm9pZCByZXBhaW50KCk7
CiAgICB2b2lkIHJlcGFpbnQoIGJvb2wgZXJhc2UgKTsKICAgIHZvaWQgcmVwYWludCggaW50IHgs
IGludCB5LCBpbnQgdywgaW50IGgsIGJvb2wgZXJhc2U9VFJVRSApOwogICAgdm9pZCByZXBhaW50
KCBjb25zdCBRUmVjdCAmLCBib29sIGVyYXNlID0gVFJVRSApOwogICAgdm9pZCByZXBhaW50KCBj
b25zdCBRUmVnaW9uICYsIGJvb2wgZXJhc2UgPSBUUlVFICk7CgoKCiAgICB2aXJ0dWFsIHZvaWQg
c2hvdygpOwogICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKCiAgICB2b2lkIGljb25pZnkoKSB7IHNo
b3dNaW5pbWl6ZWQoKTsgfQoKICAgIHZpcnR1YWwgdm9pZCBzaG93TWluaW1pemVkKCk7CiAgICB2
aXJ0dWFsIHZvaWQgc2hvd01heGltaXplZCgpOwogICAgdm9pZCBzaG93RnVsbFNjcmVlbigpOwog
ICAgdmlydHVhbCB2b2lkIHNob3dOb3JtYWwoKTsKICAgIHZpcnR1YWwgdm9pZCBwb2xpc2goKTsK
ICAgIHZvaWQgY29uc3RQb2xpc2goKSBjb25zdDsKICAgIGJvb2wgY2xvc2UoKTsKCiAgICB2b2lk
IHJhaXNlKCk7CiAgICB2b2lkIGxvd2VyKCk7CiAgICB2b2lkIHN0YWNrVW5kZXIoIFFXaWRnZXQq
ICk7CiAgICB2aXJ0dWFsIHZvaWQgbW92ZSggaW50IHgsIGludCB5ICk7CiAgICB2b2lkIG1vdmUo
IGNvbnN0IFFQb2ludCAmICk7CiAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKCBpbnQgdywgaW50IGgg
KTsKICAgIHZvaWQgcmVzaXplKCBjb25zdCBRU2l6ZSAmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0
R2VvbWV0cnkoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoICk7CiAgICB2aXJ0dWFsIHZvaWQg
c2V0R2VvbWV0cnkoIGNvbnN0IFFSZWN0ICYgKTsKCnB1YmxpYzoKICAgIHZpcnR1YWwgYm9vbCBj
bG9zZSggYm9vbCBhbHNvRGVsZXRlICk7CiAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0OwogICAg
Ym9vbCBpc1Zpc2libGVUbyhRV2lkZ2V0KikgY29uc3Q7CiAgICBib29sIGlzVmlzaWJsZVRvVExX
KCkgY29uc3Q7CiAgICBRUmVjdCB2aXNpYmxlUmVjdCgpIGNvbnN0OwogICAgYm9vbCBpc0hpZGRl
bigpIGNvbnN0OwogICAgYm9vbCBpc01pbmltaXplZCgpIGNvbnN0OwogICAgYm9vbCBpc01heGlt
aXplZCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgUVNpemUgc2l6ZUhpbnQoKSBjb25zdDsKICAgIHZp
cnR1YWwgUVNpemUgbWluaW11bVNpemVIaW50KCkgY29uc3Q7CiAgICB2aXJ0dWFsIFFTaXplUG9s
aWN5IHNpemVQb2xpY3koKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplUG9saWN5KCBR
U2l6ZVBvbGljeSApOwogICAgdmlydHVhbCBpbnQgaGVpZ2h0Rm9yV2lkdGgoaW50KSBjb25zdDsK
CiAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2l6ZSgpOwoKICAgIFFMYXlvdXQgKiBsYXlvdXQoKSBj
b25zdCB7IHJldHVybiBsYXlfb3V0OyB9CgogICAgdm9pZCB1cGRhdGVHZW9tZXRyeSgpOwogICAg
dmlydHVhbCB2b2lkIHJlcGFyZW50KCBRV2lkZ2V0ICpwYXJlbnQsIFdGbGFncywgY29uc3QgUVBv
aW50ICYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNob3dJdD1GQUxT
RSApOwogICAgdm9pZCByZXBhcmVudCggUVdpZGdldCAqcGFyZW50LCBjb25zdCBRUG9pbnQgJiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hvd0l0PUZBTFNFICk7Cgog
ICAgdm9pZCByZWNyZWF0ZSggUVdpZGdldCAqcGFyZW50LCBXRmxhZ3MgZiwgY29uc3QgUVBvaW50
ICYgcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hvd0l0PUZBTFNF
ICkgeyByZXBhcmVudChwYXJlbnQsZixwLHNob3dJdCk7IH0KCgogICAgdm9pZCBlcmFzZSgpOwog
ICAgdm9pZCBlcmFzZSggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgZXJh
c2UoIGNvbnN0IFFSZWN0ICYgKTsKICAgIHZvaWQgZXJhc2UoIGNvbnN0IFFSZWdpb24gJiApOwog
ICAgdm9pZCBzY3JvbGwoIGludCBkeCwgaW50IGR5ICk7CiAgICB2b2lkIHNjcm9sbCggaW50IGR4
LCBpbnQgZHksIGNvbnN0IFFSZWN0JiApOwoKICAgIHZvaWQgZHJhd1RleHQoIGludCB4LCBpbnQg
eSwgY29uc3QgUVN0cmluZyAmKTsKICAgIHZvaWQgZHJhd1RleHQoIGNvbnN0IFFQb2ludCAmLCBj
b25zdCBRU3RyaW5nICYpOwoKCgogICAgUVdpZGdldCAqIGZvY3VzV2lkZ2V0KCkgY29uc3Q7CiAg
ICBRUmVjdCBtaWNyb0ZvY3VzSGludCgpIGNvbnN0OwoKCgogICAgYm9vbCBhY2NlcHREcm9wcygp
IGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEFjY2VwdERyb3BzKCBib29sIG9uICk7CgoKCiAg
ICB2aXJ0dWFsIHZvaWQgc2V0QXV0b01hc2soYm9vbCk7CiAgICBib29sIGF1dG9NYXNrKCkgY29u
c3Q7CgogICAgZW51bSBCYWNrZ3JvdW5kT3JpZ2luIHsgV2lkZ2V0T3JpZ2luLCBQYXJlbnRPcmln
aW4sIFdpbmRvd09yaWdpbiB9OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kT3JpZ2lu
KCBCYWNrZ3JvdW5kT3JpZ2luICk7CiAgICBCYWNrZ3JvdW5kT3JpZ2luIGJhY2tncm91bmRPcmln
aW4oKSBjb25zdDsKCgoKICAgIHZpcnR1YWwgYm9vbCBjdXN0b21XaGF0c1RoaXMoKSBjb25zdDsK
CiAgICBRV2lkZ2V0ICogcGFyZW50V2lkZ2V0KCBib29sIHNhbWVXaW5kb3cgPSBGQUxTRSApIGNv
bnN0OwogICAgV1N0YXRlIHRlc3RXU3RhdGUoIFdTdGF0ZSBzICkgY29uc3Q7CiAgICBXRmxhZ3Mg
dGVzdFdGbGFncyggV0ZsYWdzIGYgKSBjb25zdDsKICAgIHN0YXRpYyBRV2lkZ2V0ICogZmluZCgg
V0lkICk7CiAgICBzdGF0aWMgUVdpZGdldE1hcHBlciAqd21hcHBlcigpOwoKICAgIFFXaWRnZXQg
KmNoaWxkQXQoIGludCB4LCBpbnQgeSwgYm9vbCBpbmNsdWRlVGhpcyA9IEZBTFNFICkgY29uc3Q7
CiAgICBRV2lkZ2V0ICpjaGlsZEF0KCBjb25zdCBRUG9pbnQgJiwgYm9vbCBpbmNsdWRlVGhpcyA9
IEZBTFNFICkgY29uc3Q7CiMgNDQ3ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1
ZGUvcXdpZGdldC5oIgpwcm90ZWN0ZWQ6CgogICAgYm9vbCBldmVudCggUUV2ZW50ICogKTsKICAg
IHZpcnR1YWwgdm9pZCBtb3VzZVByZXNzRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsKICAgIHZpcnR1
YWwgdm9pZCBtb3VzZVJlbGVhc2VFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdmlydHVhbCB2
b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdmlydHVhbCB2
b2lkIG1vdXNlTW92ZUV2ZW50KCBRTW91c2VFdmVudCAqICk7CgogICAgdmlydHVhbCB2b2lkIHdo
ZWVsRXZlbnQoIFFXaGVlbEV2ZW50ICogKTsKCiAgICB2aXJ0dWFsIHZvaWQga2V5UHJlc3NFdmVu
dCggUUtleUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBrZXlSZWxlYXNlRXZlbnQoIFFLZXlF
dmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZm9jdXNJbkV2ZW50KCBRRm9jdXNFdmVudCAqICk7
CiAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPdXRFdmVudCggUUZvY3VzRXZlbnQgKiApOwogICAgdmly
dHVhbCB2b2lkIGVudGVyRXZlbnQoIFFFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgbGVhdmVF
dmVudCggUUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVu
dCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgbW92ZUV2ZW50KCBRTW92ZUV2ZW50ICogKTsKICAgIHZp
cnR1YWwgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZUV2ZW50KCBRQ2xvc2VFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1l
bnVFdmVudCggUUNvbnRleHRNZW51RXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGltU3RhcnRF
dmVudCggUUlNRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGltQ29tcG9zZUV2ZW50KCBRSU1F
dmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgaW1FbmRFdmVudCggUUlNRXZlbnQgKiApOwogICAg
dmlydHVhbCB2b2lkIHRhYmxldEV2ZW50KCBRVGFibGV0RXZlbnQgKiApOwoKCiAgICB2aXJ0dWFs
IHZvaWQgZHJhZ0VudGVyRXZlbnQoIFFEcmFnRW50ZXJFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZv
aWQgZHJhZ01vdmVFdmVudCggUURyYWdNb3ZlRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGRy
YWdMZWF2ZUV2ZW50KCBRRHJhZ0xlYXZlRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGRyb3BF
dmVudCggUURyb3BFdmVudCAqICk7CgoKICAgIHZpcnR1YWwgdm9pZCBzaG93RXZlbnQoIFFTaG93
RXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGhpZGVFdmVudCggUUhpZGVFdmVudCAqICk7CiMg
NDkwICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXdpZGdldC5oIgogICAg
dmlydHVhbCBib29sIHgxMUV2ZW50KCBYRXZlbnQgKiApOwoKCgoKCgoKICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVNYXNrKCk7CgoKCgogICAgdmlydHVhbCB2b2lkIHN0eWxlQ2hhbmdlKCBRU3R5bGUm
ICk7CgogICAgdmlydHVhbCB2b2lkIGVuYWJsZWRDaGFuZ2UoIGJvb2wgb2xkRW5hYmxlZCApOwoK
ICAgIHZpcnR1YWwgdm9pZCBwYWxldHRlQ2hhbmdlKCBjb25zdCBRUGFsZXR0ZSAmICk7CgogICAg
dmlydHVhbCB2b2lkIGZvbnRDaGFuZ2UoIGNvbnN0IFFGb250ICYgKTsKICAgIHZpcnR1YWwgdm9p
ZCB3aW5kb3dBY3RpdmF0aW9uQ2hhbmdlKCBib29sIG9sZEFjdGl2ZSApOwoKICAgIGludCBtZXRy
aWMoIGludCApIGNvbnN0OwoKICAgIHZvaWQgcmVzZXRJbnB1dENvbnRleHQoKTsKCiAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlKCBXSWQgPSAwLCBib29sIGluaXRpYWxpemVXaW5kb3cgPSBUUlVFLAog
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXN0cm95T2xkV2luZG93ID0gVFJVRSApOwog
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koIGJvb2wgZGVzdHJveVdpbmRvdyA9IFRSVUUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXN0cm95U3ViV2luZG93cyA9IFRSVUUgKTsKICAg
IHVpbnQgZ2V0V1N0YXRlKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0V1N0YXRlKCB1aW50
ICk7CiAgICB2b2lkIGNsZWFyV1N0YXRlKCB1aW50IG4gKTsKICAgIFdGbGFncyBnZXRXRmxhZ3Mo
KSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRXRmxhZ3MoIFdGbGFncyApOwogICAgdm9pZCBj
bGVhcldGbGFncyggV0ZsYWdzIG4gKTsKCiAgICB2aXJ0dWFsIGJvb2wgZm9jdXNOZXh0UHJldkNo
aWxkKCBib29sIG5leHQgKTsKCiAgICBRV0V4dHJhICpleHRyYURhdGEoKTsKICAgIFFUTFdFeHRy
YSAqdG9wRGF0YSgpOwogICAgUUZvY3VzRGF0YSAqZm9jdXNEYXRhKCk7CgogICAgdmlydHVhbCB2
b2lkIHNldEtleUNvbXByZXNzaW9uKGJvb2wpOwogICAgdmlydHVhbCB2b2lkIHNldE1pY3JvRm9j
dXNIaW50KGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBib29sIHRleHQ9VFJVRSwgUUZvbnQg
KmYgPSAwKTsKCgoKCgoKcHJpdmF0ZSA6CiAgICB2b2lkIGZvY3VzUHJveHlEZXN0cm95ZWQoKTsK
CnByaXZhdGU6CiAgICB2b2lkIHNldEZvbnRTeXMoIFFGb250ICpmID0gMCApOwoKICAgIHZvaWQg
Y3JlYXRlSW5wdXRDb250ZXh0KCk7CiAgICB2b2lkIGRlc3Ryb3lJbnB1dENvbnRleHQoKTsKICAg
IHZvaWQgZm9jdXNJbnB1dENvbnRleHQoKTsKICAgIHZvaWQgY2hlY2tDaGlsZHJlbkRuZCgpOwoj
IDU2OSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3F3aWRnZXQuaCIKICAg
IHZvaWQgc2V0TGF5b3V0KCBRTGF5b3V0ICpsICk7CgogICAgdm9pZCBzZXRXaW5JZCggV0lkICk7
CiAgICB2b2lkIHNob3dXaW5kb3coKTsKICAgIHZvaWQgaGlkZVdpbmRvdygpOwogICAgdm9pZCBz
ZW5kU2hvd0V2ZW50c1RvQ2hpbGRyZW4oIGJvb2wgc3BvbnRhbmVvdXMgKTsKICAgIHZvaWQgc2Vu
ZEhpZGVFdmVudHNUb0NoaWxkcmVuKCBib29sIHNwb250YW5lb3VzICk7CiAgICB2b2lkIHJlcGFy
ZW50U3lzKCBRV2lkZ2V0ICpwYXJlbnQsIFdGbGFncywgY29uc3QgUVBvaW50ICYsIGJvb2wgc2hv
d0l0KTsKICAgIHZvaWQgY3JlYXRlVExFeHRyYSgpOwogICAgdm9pZCBjcmVhdGVFeHRyYSgpOwog
ICAgdm9pZCBkZWxldGVFeHRyYSgpOwogICAgdm9pZCBjcmVhdGVTeXNFeHRyYSgpOwogICAgdm9p
ZCBkZWxldGVTeXNFeHRyYSgpOwogICAgdm9pZCBjcmVhdGVUTFN5c0V4dHJhKCk7CiAgICB2b2lk
IGRlbGV0ZVRMU3lzRXh0cmEoKTsKICAgIHZvaWQgZGVhY3RpdmF0ZVdpZGdldENsZWFudXAoKTsK
ICAgIHZvaWQgaW50ZXJuYWxTZXRHZW9tZXRyeSggaW50LCBpbnQsIGludCwgaW50LCBib29sICk7
CiAgICB2b2lkIHJlcGFyZW50Rm9jdXNXaWRnZXRzKCBRV2lkZ2V0ICogKTsKICAgIFFGb2N1c0Rh
dGEgKmZvY3VzRGF0YSggYm9vbCBjcmVhdGUgKTsKICAgIHZvaWQgc2V0QmFja2dyb3VuZEZyb21N
b2RlKCk7CiAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvckRpcmVjdCggY29uc3QgUUNvbG9yICYg
KTsKICAgIHZvaWQgc2V0QmFja2dyb3VuZFBpeG1hcERpcmVjdCggY29uc3QgUVBpeG1hcCAmICk7
CiAgICB2b2lkIHNldEJhY2tncm91bmRNb2RlRGlyZWN0KCBCYWNrZ3JvdW5kTW9kZSApOwogICAg
dm9pZCBzZXRCYWNrZ3JvdW5kRW1wdHkoKTsKICAgIHZvaWQgdXBkYXRlRnJhbWVTdHJ1dCgpIGNv
bnN0OwoKICAgIHZvaWQgc2V0QmFja2dyb3VuZFgxMVJlbGF0aXZlKCk7CgoKICAgIFdJZCB3aW5p
ZDsKICAgIHVpbnQgd2lkZ2V0X3N0YXRlOwogICAgdWludCB3aWRnZXRfZmxhZ3M7CiAgICB1aW50
IGZvY3VzX3BvbGljeSA6IDQ7CiAgICB1aW50IG93bl9mb250IDoxOwogICAgdWludCBvd25fcGFs
ZXR0ZSA6MTsKICAgIHVpbnQgc2l6ZWhpbnRfZm9yY2VkIDoxOwogICAgdWludCBpc19jbG9zaW5n
IDoxOwogICAgdWludCBpbl9zaG93IDogMTsKICAgIHVpbnQgaW5fc2hvd19tYXhpbWl6ZWQgOiAx
OwogICAgdWludCBmc3RydXRfZGlydHkgOiAxOwogICAgUVJlY3QgY3JlY3Q7CiAgICBRQ29sb3Ig
YmdfY29sOwoKICAgIFFQYWxldHRlIHBhbDsKCiAgICBRRm9udCBmbnQ7CgogICAgUUxheW91dCAq
bGF5X291dDsKCiAgICBRV0V4dHJhICpleHRyYTsKIyA2NDMgIi91c3IvbG9jYWwvcXQteDExLWZy
ZWUtMy4wLjYvaW5jbHVkZS9xd2lkZ2V0LmgiCiAgICBzdGF0aWMgdm9pZCBjcmVhdGVNYXBwZXIo
KTsKICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lNYXBwZXIoKTsKICAgIHN0YXRpYyBRV2lkZ2V0TGlz
dCAqd0xpc3QoKTsKICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqdGx3TGlzdCgpOwogICAgc3RhdGlj
IFFXaWRnZXRNYXBwZXIgKm1hcHBlcjsKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAg
ICBmcmllbmQgY2xhc3MgUUJhc2VBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRl
cjsKICAgIGZyaWVuZCBjbGFzcyBRRm9udE1ldHJpY3M7CiAgICBmcmllbmQgY2xhc3MgUUZvbnRJ
bmZvOwogICAgZnJpZW5kIGNsYXNzIFFFVFdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRTGF5b3V0
OwoKcHJpdmF0ZToKCiAgICBRV2lkZ2V0KCBjb25zdCBRV2lkZ2V0ICYgKTsKICAgIFFXaWRnZXQg
Jm9wZXJhdG9yPSggY29uc3QgUVdpZGdldCAmICk7CgoKcHVibGljOgoKICAgIHZvaWQgc2V0UGFs
ZXR0ZSggY29uc3QgUVBhbGV0dGUgJnAsIGJvb2wgKSB7IHNldFBhbGV0dGUoIHAgKTsgfQoKICAg
IHZvaWQgc2V0Rm9udCggY29uc3QgUUZvbnQgJmYsIGJvb2wgKSB7IHNldEZvbnQoIGYgKTsgfQp9
OwoKCmlubGluZSBRdDo6V1N0YXRlIFFXaWRnZXQ6OnRlc3RXU3RhdGUoIFdTdGF0ZSBzICkgY29u
c3QKeyByZXR1cm4gKHdpZGdldF9zdGF0ZSAmIHMpOyB9CgppbmxpbmUgUXQ6OldGbGFncyBRV2lk
Z2V0Ojp0ZXN0V0ZsYWdzKCBXRmxhZ3MgZiApIGNvbnN0CnsgcmV0dXJuICh3aWRnZXRfZmxhZ3Mg
JiBmKTsgfQoKCmlubGluZSBXSWQgUVdpZGdldDo6d2luSWQoKSBjb25zdAp7IHJldHVybiB3aW5p
ZDsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNUb3BMZXZlbCgpIGNvbnN0CnsgcmV0dXJuIHRl
c3RXRmxhZ3MoV1R5cGVfVG9wTGV2ZWwpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc0RpYWxv
ZygpIGNvbnN0CnsgcmV0dXJuIHRlc3RXRmxhZ3MoV1R5cGVfRGlhbG9nKTsgfQoKaW5saW5lIGJv
b2wgUVdpZGdldDo6aXNQb3B1cCgpIGNvbnN0CnsgcmV0dXJuIHRlc3RXRmxhZ3MoV1R5cGVfUG9w
dXApOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc0Rlc2t0b3AoKSBjb25zdAp7IHJldHVybiB0
ZXN0V0ZsYWdzKFdUeXBlX0Rlc2t0b3ApOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc0VuYWJs
ZWQoKSBjb25zdAp7IHJldHVybiAhdGVzdFdTdGF0ZShXU3RhdGVfRGlzYWJsZWQpOyB9Cgppbmxp
bmUgYm9vbCBRV2lkZ2V0Ojppc01vZGFsKCkgY29uc3QKeyByZXR1cm4gdGVzdFdGbGFncyhXU2hv
d01vZGFsKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNFbmFibGVkVG9UTFcoKSBjb25zdAp7
IHJldHVybiBpc0VuYWJsZWQoKTsgfQoKaW5saW5lIGNvbnN0IFFSZWN0ICZRV2lkZ2V0OjpnZW9t
ZXRyeSgpIGNvbnN0CnsgcmV0dXJuIGNyZWN0OyB9CgppbmxpbmUgUVNpemUgUVdpZGdldDo6c2l6
ZSgpIGNvbnN0CnsgcmV0dXJuIGNyZWN0LnNpemUoKTsgfQoKaW5saW5lIGludCBRV2lkZ2V0Ojp3
aWR0aCgpIGNvbnN0CnsgcmV0dXJuIGNyZWN0LndpZHRoKCk7IH0KCmlubGluZSBpbnQgUVdpZGdl
dDo6aGVpZ2h0KCkgY29uc3QKeyByZXR1cm4gY3JlY3QuaGVpZ2h0KCk7IH0KCmlubGluZSBRUmVj
dCBRV2lkZ2V0OjpyZWN0KCkgY29uc3QKeyByZXR1cm4gUVJlY3QoMCwwLGNyZWN0LndpZHRoKCks
Y3JlY3QuaGVpZ2h0KCkpOyB9CgppbmxpbmUgaW50IFFXaWRnZXQ6Om1pbmltdW1XaWR0aCgpIGNv
bnN0CnsgcmV0dXJuIG1pbmltdW1TaXplKCkud2lkdGgoKTsgfQoKaW5saW5lIGludCBRV2lkZ2V0
OjptaW5pbXVtSGVpZ2h0KCkgY29uc3QKeyByZXR1cm4gbWluaW11bVNpemUoKS5oZWlnaHQoKTsg
fQoKaW5saW5lIGludCBRV2lkZ2V0OjptYXhpbXVtV2lkdGgoKSBjb25zdAp7IHJldHVybiBtYXhp
bXVtU2l6ZSgpLndpZHRoKCk7IH0KCmlubGluZSBpbnQgUVdpZGdldDo6bWF4aW11bUhlaWdodCgp
IGNvbnN0CnsgcmV0dXJuIG1heGltdW1TaXplKCkuaGVpZ2h0KCk7IH0KCmlubGluZSB2b2lkIFFX
aWRnZXQ6OnNldE1pbmltdW1TaXplKCBjb25zdCBRU2l6ZSAmcyApCnsgc2V0TWluaW11bVNpemUo
cy53aWR0aCgpLHMuaGVpZ2h0KCkpOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRNYXhpbXVt
U2l6ZSggY29uc3QgUVNpemUgJnMgKQp7IHNldE1heGltdW1TaXplKHMud2lkdGgoKSxzLmhlaWdo
dCgpKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0U2l6ZUluY3JlbWVudCggY29uc3QgUVNp
emUgJnMgKQp7IHNldFNpemVJbmNyZW1lbnQocy53aWR0aCgpLHMuaGVpZ2h0KCkpOyB9Cgppbmxp
bmUgdm9pZCBRV2lkZ2V0OjpzZXRCYXNlU2l6ZSggY29uc3QgUVNpemUgJnMgKQp7IHNldEJhc2VT
aXplKHMud2lkdGgoKSxzLmhlaWdodCgpKTsgfQoKaW5saW5lIGNvbnN0IFFDb2xvciAmUVdpZGdl
dDo6ZXJhc2VDb2xvcigpIGNvbnN0CnsgcmV0dXJuIGJnX2NvbDsgfQoKCmlubGluZSBjb25zdCBR
UGFsZXR0ZSAmUVdpZGdldDo6cGFsZXR0ZSgpIGNvbnN0CnsgcmV0dXJuIHBhbDsgfQoKCmlubGlu
ZSBRRm9udCBRV2lkZ2V0Ojpmb250KCkgY29uc3QKeyByZXR1cm4gZm50OyB9CgppbmxpbmUgUUZv
bnRNZXRyaWNzIFFXaWRnZXQ6OmZvbnRNZXRyaWNzKCkgY29uc3QKeyByZXR1cm4gUUZvbnRNZXRy
aWNzKGZvbnQoKSk7IH0KCmlubGluZSBRRm9udEluZm8gUVdpZGdldDo6Zm9udEluZm8oKSBjb25z
dAp7IHJldHVybiBRRm9udEluZm8oZm9udCgpKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aGFz
TW91c2VUcmFja2luZygpIGNvbnN0CnsgcmV0dXJuIHRlc3RXU3RhdGUoV1N0YXRlX01vdXNlVHJh
Y2tpbmcpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0OjpoYXNNb3VzZSgpIGNvbnN0CnsgcmV0dXJu
IHRlc3RXU3RhdGUoV1N0YXRlX0hhc01vdXNlKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNG
b2N1c0VuYWJsZWQoKSBjb25zdAp7IHJldHVybiAoRm9jdXNQb2xpY3kpZm9jdXNfcG9saWN5ICE9
IE5vRm9jdXM7IH0KCmlubGluZSBRV2lkZ2V0OjpGb2N1c1BvbGljeSBRV2lkZ2V0Ojpmb2N1c1Bv
bGljeSgpIGNvbnN0CnsgcmV0dXJuIChGb2N1c1BvbGljeSlmb2N1c19wb2xpY3k7IH0KCmlubGlu
ZSBib29sIFFXaWRnZXQ6OmlzVXBkYXRlc0VuYWJsZWQoKSBjb25zdAp7IHJldHVybiAhdGVzdFdT
dGF0ZShXU3RhdGVfQmxvY2tVcGRhdGVzKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6dXBkYXRl
KCBjb25zdCBRUmVjdCAmciApCnsgdXBkYXRlKCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5o
ZWlnaHQoKSApOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpyZXBhaW50KCkKeyByZXBhaW50KCAw
LCAwLCBjcmVjdC53aWR0aCgpLCBjcmVjdC5oZWlnaHQoKSwgVFJVRSApOyB9CgppbmxpbmUgdm9p
ZCBRV2lkZ2V0OjpyZXBhaW50KCBib29sIGVyYXNlICkKeyByZXBhaW50KCAwLCAwLCBjcmVjdC53
aWR0aCgpLCBjcmVjdC5oZWlnaHQoKSwgZXJhc2UgKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6
cmVwYWludCggY29uc3QgUVJlY3QgJnIsIGJvb2wgZXJhc2UgKQp7IHJlcGFpbnQoIHIueCgpLCBy
LnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpLCBlcmFzZSApOyB9CgppbmxpbmUgdm9pZCBRV2lk
Z2V0OjplcmFzZSgpCnsgZXJhc2UoIDAsIDAsIGNyZWN0LndpZHRoKCksIGNyZWN0LmhlaWdodCgp
ICk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OmVyYXNlKCBjb25zdCBRUmVjdCAmciApCnsgZXJh
c2UoIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpICk7IH0KCmlubGluZSBib29s
IFFXaWRnZXQ6OmNsb3NlKCkKeyByZXR1cm4gY2xvc2UoIEZBTFNFICk7IH0KCmlubGluZSBib29s
IFFXaWRnZXQ6OmlzVmlzaWJsZSgpIGNvbnN0CnsgcmV0dXJuIHRlc3RXU3RhdGUoV1N0YXRlX1Zp
c2libGUpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc1Zpc2libGVUb1RMVygpIGNvbnN0Cnsg
cmV0dXJuIGlzVmlzaWJsZSgpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc0hpZGRlbigpIGNv
bnN0CnsgcmV0dXJuIHRlc3RXU3RhdGUoV1N0YXRlX0ZvcmNlSGlkZSk7IH0KCmlubGluZSB2b2lk
IFFXaWRnZXQ6Om1vdmUoIGNvbnN0IFFQb2ludCAmcCApCnsgbW92ZSggcC54KCksIHAueSgpICk7
IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnJlc2l6ZSggY29uc3QgUVNpemUgJnMgKQp7IHJlc2l6
ZSggcy53aWR0aCgpLCBzLmhlaWdodCgpKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0R2Vv
bWV0cnkoIGNvbnN0IFFSZWN0ICZyICkKeyBzZXRHZW9tZXRyeSggci5sZWZ0KCksIHIudG9wKCks
IHIud2lkdGgoKSwgci5oZWlnaHQoKSApOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpkcmF3VGV4
dCggY29uc3QgUVBvaW50ICZwLCBjb25zdCBRU3RyaW5nICZzICkKeyBkcmF3VGV4dCggcC54KCks
IHAueSgpLCBzICk7IH0KCmlubGluZSBRV2lkZ2V0ICpRV2lkZ2V0OjpwYXJlbnRXaWRnZXQoIGJv
b2wgc2FtZVdpbmRvdyApIGNvbnN0CnsKICAgIGlmICggc2FtZVdpbmRvdyApCiAgICAgICAgcmV0
dXJuIGlzVG9wTGV2ZWwoKSA/IDAgOiAoUVdpZGdldCAqKVFPYmplY3Q6OnBhcmVudCgpOwogICAg
cmV0dXJuIChRV2lkZ2V0ICopUU9iamVjdDo6cGFyZW50KCk7Cn0KCmlubGluZSBRV2lkZ2V0TWFw
cGVyICpRV2lkZ2V0Ojp3bWFwcGVyKCkKeyByZXR1cm4gbWFwcGVyOyB9CgppbmxpbmUgdWludCBR
V2lkZ2V0OjpnZXRXU3RhdGUoKSBjb25zdAp7IHJldHVybiB3aWRnZXRfc3RhdGU7IH0KCmlubGlu
ZSB2b2lkIFFXaWRnZXQ6OnNldFdTdGF0ZSggdWludCBmICkKeyB3aWRnZXRfc3RhdGUgfD0gZjsg
fQoKaW5saW5lIHZvaWQgUVdpZGdldDo6Y2xlYXJXU3RhdGUoIHVpbnQgZiApCnsgd2lkZ2V0X3N0
YXRlICY9IH5mOyB9CgppbmxpbmUgUXQ6OldGbGFncyBRV2lkZ2V0OjpnZXRXRmxhZ3MoKSBjb25z
dAp7IHJldHVybiB3aWRnZXRfZmxhZ3M7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldFdGbGFn
cyggV0ZsYWdzIGYgKQp7IHdpZGdldF9mbGFncyB8PSBmOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0
OjpjbGVhcldGbGFncyggV0ZsYWdzIGYgKQp7IHdpZGdldF9mbGFncyAmPSB+ZjsgfQoKaW5saW5l
IHZvaWQgUVdpZGdldDo6Y29uc3RQb2xpc2goKSBjb25zdAp7CiAgICBpZiAoICF0ZXN0V1N0YXRl
KFdTdGF0ZV9Qb2xpc2hlZCkgKSB7CiAgICAgICAgUVdpZGdldCogdGhhdCA9IChRV2lkZ2V0Kikg
dGhpczsKICAgICAgICB0aGF0LT5wb2xpc2goKTsKICAgICAgICB0aGF0LT5zZXRXU3RhdGUoV1N0
YXRlX1BvbGlzaGVkKTsKICAgIH0KfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6b3duQ3Vyc29yKCkg
Y29uc3QKewogICAgcmV0dXJuIHRlc3RXU3RhdGUoIFdTdGF0ZV9Pd25DdXJzb3IgKTsKfQoKaW5s
aW5lIGJvb2wgUVdpZGdldDo6b3duRm9udCgpIGNvbnN0CnsKICAgIHJldHVybiBvd25fZm9udDsK
fQoKaW5saW5lIGJvb2wgUVdpZGdldDo6b3duUGFsZXR0ZSgpIGNvbnN0CnsKICAgIHJldHVybiBv
d25fcGFsZXR0ZTsKfQoKCgoKCgpjbGFzcyBRRm9jdXNEYXRhOwpjbGFzcyBRV1NNYW5hZ2VyOwoK
CgoKCgoKc3RydWN0IFFUTFdFeHRyYSB7CgogICAgUVN0cmluZyBjYXB0aW9uOwogICAgUVN0cmlu
ZyBpY29uVGV4dDsKICAgIFFQaXhtYXAgKmljb247CgogICAgUUZvY3VzRGF0YSAqZm9jdXNEYXRh
OwogICAgc2hvcnQgaW5jdywgaW5jaDsKCiAgICB1bG9uZyBmbGVmdCwgZnJpZ2h0LCBmdG9wLCBm
Ym90dG9tOwogICAgdWludCBpY29uaWM6IDE7CiAgICB1aW50IGZ1bGxzY3JlZW4gOiAxOwogICAg
dWludCBzaG93TW9kZTogMjsKICAgIHVpbnQgc2F2ZWRGbGFnczsKICAgIHNob3J0IGJhc2V3LCBi
YXNlaDsKCiAgICBXSWQgcGFyZW50V2luSWQ7CiAgICB1aW50IGVtYmVkZGVkIDogMTsKICAgIHVp
bnQgcmVzZXJ2ZWQ6IDI7CiAgICB1aW50IGRuZCA6IDE7CiAgICB1aW50IHVzcG9zIDogMTsKICAg
IHVpbnQgdXNzaXplIDogMTsKICAgIHZvaWQgKnhpYzsKIyA5MTQgIi91c3IvbG9jYWwvcXQteDEx
LWZyZWUtMy4wLjYvaW5jbHVkZS9xd2lkZ2V0LmgiCiAgICBRUmVjdCBub3JtYWxHZW9tZXRyeTsK
fTsKCgoKCgoKc3RydWN0IFFXRXh0cmEgewogICAgUV9JTlQxNiBtaW53LCBtaW5oOwogICAgUV9J
TlQxNiBtYXh3LCBtYXhoOwogICAgUVBpeG1hcCAqYmdfcGl4OwogICAgUVdpZGdldCAqZm9jdXNf
cHJveHk7CgogICAgUUN1cnNvciAqY3VyczsKCiAgICBRVExXRXh0cmEgKnRvcGV4dHJhOwoKCgoK
ICAgIFdJZCB4RG5kUHJveHk7CiMgOTQ4ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2lu
Y2x1ZGUvcXdpZGdldC5oIgogICAgdWludCBiZ19vcmlnaW4gOiAyOwoKICAgIHVpbnQgY2hpbGRy
ZW5fdXNlX2RuZCA6IDE7CgoKCgogICAgY2hhciBiZ19tb2RlOwogICAgY2hhciBiZ19tb2RlX3Zp
c3VhbDsKCiAgICBRU3R5bGUqIHN0eWxlOwoKICAgIFFSZWN0IG1pY3JvX2ZvY3VzX2hpbnQ7CiAg
ICBRU2l6ZVBvbGljeSBzaXplX3BvbGljeTsKfTsKIyA0MCAiL3Vzci9sb2NhbC9xdC14MTEtZnJl
ZS0zLjAuNi9pbmNsdWRlL3FoYm94LmgiIDIKCgoKCiMgMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJl
ZS0zLjAuNi9pbmNsdWRlL3FmcmFtZS5oIiAxCiMgNDcgIi91c3IvbG9jYWwvcXQteDExLWZyZWUt
My4wLjYvaW5jbHVkZS9xZnJhbWUuaCIKY2xhc3MgUUZyYW1lIDogcHVibGljIFFXaWRnZXQKewog
ICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkg
Y29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29s
IHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwg
UVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50LCBpbnQsIFFWYXJpYW50
KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9i
amVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0
ICptZXRhT2JqOwogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoKcHVibGljOgog
ICAgUUZyYW1lKCBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0wLCBXRmxhZ3Mg
Zj0wICk7CgogICAgaW50IGZyYW1lU3R5bGUoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRG
cmFtZVN0eWxlKCBpbnQgKTsKCiAgICBpbnQgZnJhbWVXaWR0aCgpIGNvbnN0OwogICAgUVJlY3Qg
Y29udGVudHNSZWN0KCkgY29uc3Q7CgoKICAgIGJvb2wgbGluZVNoYXBlc09rKCkgY29uc3QgeyBy
ZXR1cm4gVFJVRTsgfQoKCiAgICBRU2l6ZSBzaXplSGludCgpIGNvbnN0OwoKICAgIGVudW0gU2hh
cGUgeyBOb0ZyYW1lID0gMCwKICAgICAgICAgICAgICAgICBCb3ggPSAweDAwMDEsCiAgICAgICAg
ICAgICAgICAgUGFuZWwgPSAweDAwMDIsCiAgICAgICAgICAgICAgICAgV2luUGFuZWwgPSAweDAw
MDMsCiAgICAgICAgICAgICAgICAgSExpbmUgPSAweDAwMDQsCiAgICAgICAgICAgICAgICAgVkxp
bmUgPSAweDAwMDUsCiAgICAgICAgICAgICAgICAgU3R5bGVkUGFuZWwgPSAweDAwMDYsCiAgICAg
ICAgICAgICAgICAgUG9wdXBQYW5lbCA9IDB4MDAwNywKICAgICAgICAgICAgICAgICBNZW51QmFy
UGFuZWwgPSAweDAwMDgsCiAgICAgICAgICAgICAgICAgVG9vbEJhclBhbmVsID0gMHgwMDA5LAog
ICAgICAgICAgICAgICAgIExpbmVFZGl0UGFuZWwgPSAweDAwMGEsCiAgICAgICAgICAgICAgICAg
VGFiV2lkZ2V0UGFuZWwgPSAweDAwMGIsCiAgICAgICAgICAgICAgICAgTVNoYXBlID0gMHgwMDBm
CiAgICB9OwogICAgZW51bSBTaGFkb3cgeyBQbGFpbiA9IDB4MDAxMCwKICAgICAgICAgICAgICAg
ICAgUmFpc2VkID0gMHgwMDIwLAogICAgICAgICAgICAgICAgICBTdW5rZW4gPSAweDAwMzAsCiAg
ICAgICAgICAgICAgICAgIE1TaGFkb3cgPSAweDAwZjAgfTsKCiAgICBTaGFwZSBmcmFtZVNoYXBl
KCkgY29uc3Q7CiAgICB2b2lkIHNldEZyYW1lU2hhcGUoIFNoYXBlICk7CiAgICBTaGFkb3cgZnJh
bWVTaGFkb3coKSBjb25zdDsKICAgIHZvaWQgc2V0RnJhbWVTaGFkb3coIFNoYWRvdyApOwoKICAg
IGludCBsaW5lV2lkdGgoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lV2lkdGgoIGlu
dCApOwoKICAgIGludCBtYXJnaW4oKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXJnaW4o
IGludCApOwoKICAgIGludCBtaWRMaW5lV2lkdGgoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBz
ZXRNaWRMaW5lV2lkdGgoIGludCApOwoKICAgIFFSZWN0IGZyYW1lUmVjdCgpIGNvbnN0OwogICAg
dmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdCggY29uc3QgUVJlY3QgJiApOwoKcHJvdGVjdGVkOgog
ICAgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVudCAqICk7CiAgICB2b2lkIHJlc2l6ZUV2ZW50
KCBRUmVzaXplRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZSggUVBhaW50ZXIg
KiApOwogICAgdmlydHVhbCB2b2lkIGRyYXdDb250ZW50cyggUVBhaW50ZXIgKiApOwogICAgdmly
dHVhbCB2b2lkIGZyYW1lQ2hhbmdlZCgpOwoKcHJpdmF0ZToKICAgIHZvaWQgdXBkYXRlRnJhbWVX
aWR0aCgpOwogICAgUVJlY3QgZnJlY3Q7CiAgICBpbnQgZnN0eWxlOwogICAgc2hvcnQgbHdpZHRo
OwogICAgc2hvcnQgbXdpZHRoOwogICAgc2hvcnQgbWx3aWR0aDsKICAgIHNob3J0IGZ3aWR0aDsK
CiAgICB2b2lkICogZDsKcHJpdmF0ZToKCiAgICBRRnJhbWUoIGNvbnN0IFFGcmFtZSAmICk7CiAg
ICBRRnJhbWUgJm9wZXJhdG9yPSggY29uc3QgUUZyYW1lICYgKTsKCn07CgoKaW5saW5lIGludCBR
RnJhbWU6OmZyYW1lU3R5bGUoKSBjb25zdAp7IHJldHVybiBmc3R5bGU7IH0KCmlubGluZSBRRnJh
bWU6OlNoYXBlIFFGcmFtZTo6ZnJhbWVTaGFwZSgpIGNvbnN0CnsgcmV0dXJuIChTaGFwZSkgKCBm
c3R5bGUgJiBNU2hhcGUgKTsgfQoKaW5saW5lIFFGcmFtZTo6U2hhZG93IFFGcmFtZTo6ZnJhbWVT
aGFkb3coKSBjb25zdAp7IHJldHVybiAoU2hhZG93KSAoIGZzdHlsZSAmIE1TaGFkb3cgKTsgfQoK
aW5saW5lIHZvaWQgUUZyYW1lOjpzZXRGcmFtZVNoYXBlKCBRRnJhbWU6OlNoYXBlIHMgKQp7IHNl
dEZyYW1lU3R5bGUoICggZnN0eWxlICYgTVNoYWRvdyApIHwgcyApOyB9CgppbmxpbmUgdm9pZCBR
RnJhbWU6OnNldEZyYW1lU2hhZG93KCBRRnJhbWU6OlNoYWRvdyBzICkKeyBzZXRGcmFtZVN0eWxl
KCAoIGZzdHlsZSAmIE1TaGFwZSApIHwgcyApOyB9CgppbmxpbmUgaW50IFFGcmFtZTo6bGluZVdp
ZHRoKCkgY29uc3QKeyByZXR1cm4gbHdpZHRoOyB9CgppbmxpbmUgaW50IFFGcmFtZTo6bWlkTGlu
ZVdpZHRoKCkgY29uc3QKeyByZXR1cm4gbWx3aWR0aDsgfQoKaW5saW5lIGludCBRRnJhbWU6Om1h
cmdpbigpIGNvbnN0CnsgcmV0dXJuIG13aWR0aDsgfQoKaW5saW5lIGludCBRRnJhbWU6OmZyYW1l
V2lkdGgoKSBjb25zdAp7IHJldHVybiBmd2lkdGg7IH0KIyA0NSAiL3Vzci9sb2NhbC9xdC14MTEt
ZnJlZS0zLjAuNi9pbmNsdWRlL3FoYm94LmgiIDIKCmNsYXNzIFFCb3hMYXlvdXQ7CgpjbGFzcyBR
SEJveCA6IHB1YmxpYyBRRnJhbWUKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICpt
ZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwg
Y29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29u
c3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmly
dHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9w
ZXJ0eSggaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01l
dGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9
IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3Rh
dGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJp
dmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwpwdWJsaWM6CiAgICBRSEJveCggUVdp
ZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCwgV0ZsYWdzIGY9MCApOwoKICAgIHZv
aWQgc2V0U3BhY2luZyggaW50ICk7CiAgICBib29sIHNldFN0cmV0Y2hGYWN0b3IoIFFXaWRnZXQq
LCBpbnQgc3RyZXRjaCApOwogICAgUVNpemUgc2l6ZUhpbnQoKSBjb25zdDsKCnByb3RlY3RlZDoK
ICAgIFFIQm94KCBib29sIGhvcml6b250YWwsIFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFy
KiBuYW1lPTAsIFdGbGFncyBmPTAgKTsKICAgIHZvaWQgZnJhbWVDaGFuZ2VkKCk7Cgpwcml2YXRl
OgogICAgUUJveExheW91dCAqbGF5Owp9OwojIDE5ICIvaG9tZS93aWxsaWFzcC9wYXlsb2FkL2dl
bmVyaWMtc3cvc3JjL2dzdGFjaS1mcmFtZXdvcmsvaW5jbHVkZS90aW1lbGFiZWwuaCIgMgoKY2xh
c3MgUURhdGVUaW1lOwpjbGFzcyBRTGFiZWw7CgpjbGFzcyBUaW1lTGFiZWwgOiBwdWJsaWMgUUhC
b3gKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NO
YW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVh
bCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQo
IGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50LCBpbnQsIFFW
YXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVj
dCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRy
KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4
KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRh
T2JqZWN0ICptZXRhT2JqOwoKcHVibGljOgogICAgVGltZUxhYmVsKCBjb25zdCBjaGFyICogbGFi
ZWwsIFFXaWRnZXQgKiBwYXJlbnQgPSAwLCBjb25zdCBjaGFyICogbmFtZSA9IDAsIFdGbGFncyBm
ID0gMCApOwoKcHVibGljIDoKICAgIHZvaWQgc2xvdFVwZGF0ZSggUURhdGVUaW1lICk7Cgpwcml2
YXRlOgogICAgUUxhYmVsKiBfdGltZXpvbmVMYWJlbDsKICAgIFFMYWJlbCogX3RpbWU7Cn07CiMg
MTIgIm1vY190aW1lbGFiZWwuY3BwIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAu
Ni9pbmNsdWRlL3FtZXRhb2JqZWN0LmgiIDEKIyA0MiAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0z
LjAuNi9pbmNsdWRlL3FtZXRhb2JqZWN0LmgiCiMgMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0z
LjAuNi9pbmNsdWRlL3Fjb25uZWN0aW9uLmgiIDEKIyA0NSAiL3Vzci9sb2NhbC9xdC14MTEtZnJl
ZS0zLjAuNi9pbmNsdWRlL3Fjb25uZWN0aW9uLmgiCmNsYXNzIFFDb25uZWN0aW9uCnsKcHVibGlj
OgogICAgUUNvbm5lY3Rpb24oIGNvbnN0IFFPYmplY3QgKiwgaW50LCBjb25zdCBjaGFyICptZW1i
ZXJOYW1lLCBpbnQgbWVtYmVyVHlwZSApOwogICB+UUNvbm5lY3Rpb24oKSB7fQoKICAgIGJvb2wg
aXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiBvYmogIT0gMDsgfQoKICAgIFFPYmplY3QgKm9i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIG9iajsgfQogICAgaW50IG1lbWJlcigpIGNvbnN0IHsgcmV0
dXJuIG1icjsgfQogICAgY29uc3QgY2hhciAqbWVtYmVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1i
cl9uYW1lOyB9CiAgICBpbnQgbWVtYmVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1icl90eXBlOyB9
CiAgICBpbnQgbnVtQXJncygpIGNvbnN0IHsgcmV0dXJuIG5hcmdzOyB9Cgpwcml2YXRlOgogICAg
UU9iamVjdCAqb2JqOwogICAgaW50IG1icjsKICAgIGNvbnN0IGNoYXIgKm1icl9uYW1lOwogICAg
aW50IG1icl90eXBlOwogICAgaW50IG5hcmdzOwoKcHJpdmF0ZToKCiAgICBRQ29ubmVjdGlvbigg
Y29uc3QgUUNvbm5lY3Rpb24gJiApOwogICAgUUNvbm5lY3Rpb24gJm9wZXJhdG9yPSggY29uc3Qg
UUNvbm5lY3Rpb24gJiApOwoKfTsKIyA0MyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9p
bmNsdWRlL3FtZXRhb2JqZWN0LmgiIDIKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42
L2luY2x1ZGUvcXN0cmxpc3QuaCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42
L2luY2x1ZGUvcXN0cmxpc3QuaCIKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2lu
Y2x1ZGUvcXB0cmxpc3QuaCIgMQojIDQyICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2lu
Y2x1ZGUvcXB0cmxpc3QuaCIKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1
ZGUvcWdsaXN0LmgiIDEKIyA0MiAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRl
L3FnbGlzdC5oIgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xcHRy
Y29sbGVjdGlvbi5oIiAxCiMgNDQgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVk
ZS9xcHRyY29sbGVjdGlvbi5oIgpjbGFzcyBRR1ZlY3RvcjsKY2xhc3MgUUdMaXN0OwpjbGFzcyBR
R0RpY3Q7CgoKY2xhc3MgUVB0ckNvbGxlY3Rpb24KewpwdWJsaWM6CiAgICBib29sIGF1dG9EZWxl
dGUoKSBjb25zdCB7IHJldHVybiBkZWxfaXRlbTsgfQogICAgdm9pZCBzZXRBdXRvRGVsZXRlKCBi
b29sIGVuYWJsZSApIHsgZGVsX2l0ZW0gPSBlbmFibGU7IH0KCiAgICB2aXJ0dWFsIHVpbnQgY291
bnQoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7CgogICAgdHlwZWRl
ZiB2b2lkICpJdGVtOwoKcHJvdGVjdGVkOgogICAgUVB0ckNvbGxlY3Rpb24oKSB7IGRlbF9pdGVt
ID0gRkFMU0U7IH0KICAgIFFQdHJDb2xsZWN0aW9uKGNvbnN0IFFQdHJDb2xsZWN0aW9uICYpIHsg
ZGVsX2l0ZW0gPSBGQUxTRTsgfQogICAgdmlydHVhbCB+UVB0ckNvbGxlY3Rpb24oKSB7fQoKICAg
IGJvb2wgZGVsX2l0ZW07CgogICAgdmlydHVhbCBJdGVtIG5ld0l0ZW0oIEl0ZW0gKTsKICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVJdGVtKCBJdGVtICkgPSAwOwp9OwojIDQzICIvdXNyL2xvY2FsL3F0
LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWdsaXN0LmgiIDIKCgpjbGFzcyBRTE5vZGUKewpmcmll
bmQgY2xhc3MgUUdMaXN0OwpmcmllbmQgY2xhc3MgUUdMaXN0SXRlcmF0b3I7CnB1YmxpYzoKICAg
IFFQdHJDb2xsZWN0aW9uOjpJdGVtIGdldERhdGEoKSB7IHJldHVybiBkYXRhOyB9CnByaXZhdGU6
CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBkYXRhOwogICAgUUxOb2RlICpwcmV2OwogICAgUUxO
b2RlICpuZXh0OwogICAgUUxOb2RlKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSBkICkgeyBkYXRhID0g
ZDsgfQp9OwoKY2xhc3MgUUdMaXN0SXRlcmF0b3JMaXN0OwoKY2xhc3MgUUdMaXN0IDogcHVibGlj
IFFQdHJDb2xsZWN0aW9uCnsKZnJpZW5kIGNsYXNzIFFHTGlzdEl0ZXJhdG9yOwpmcmllbmQgY2xh
c3MgUUdMaXN0SXRlcmF0b3JMaXN0OwpmcmllbmQgY2xhc3MgUUdWZWN0b3I7CnB1YmxpYzoKICAg
IHVpbnQgY291bnQoKSBjb25zdDsKCgogICAgUURhdGFTdHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFt
ICYgKTsKICAgIFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiApIGNvbnN0OwoKcHJv
dGVjdGVkOgogICAgUUdMaXN0KCk7CiAgICBRR0xpc3QoIGNvbnN0IFFHTGlzdCAmICk7CiAgICB2
aXJ0dWFsIH5RR0xpc3QoKTsKCiAgICBRR0xpc3QgJm9wZXJhdG9yPSggY29uc3QgUUdMaXN0ICYg
KTsKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUdMaXN0JiApIGNvbnN0OwoKICAgIHZvaWQg
aW5Tb3J0KCBRUHRyQ29sbGVjdGlvbjo6SXRlbSApOwogICAgdm9pZCBhcHBlbmQoIFFQdHJDb2xs
ZWN0aW9uOjpJdGVtICk7CiAgICBib29sIGluc2VydEF0KCB1aW50IGluZGV4LCBRUHRyQ29sbGVj
dGlvbjo6SXRlbSApOwogICAgdm9pZCByZWxpbmtOb2RlKCBRTE5vZGUgKiApOwogICAgYm9vbCBy
ZW1vdmVOb2RlKCBRTE5vZGUgKiApOwogICAgYm9vbCByZW1vdmUoIFFQdHJDb2xsZWN0aW9uOjpJ
dGVtID0gMCApOwogICAgYm9vbCByZW1vdmVSZWYoIFFQdHJDb2xsZWN0aW9uOjpJdGVtID0gMCAp
OwogICAgYm9vbCByZW1vdmVGaXJzdCgpOwogICAgYm9vbCByZW1vdmVMYXN0KCk7CiAgICBib29s
IHJlbW92ZUF0KCB1aW50IGluZGV4ICk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0YWtlTm9k
ZSggUUxOb2RlICogKTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHRha2UoKTsKICAgIFFQdHJD
b2xsZWN0aW9uOjpJdGVtIHRha2VBdCggdWludCBpbmRleCApOwogICAgUVB0ckNvbGxlY3Rpb246
Okl0ZW0gdGFrZUZpcnN0KCk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0YWtlTGFzdCgpOwoK
ICAgIHZvaWQgc29ydCgpOwogICAgdm9pZCBjbGVhcigpOwoKICAgIGludCBmaW5kUmVmKCBRUHRy
Q29sbGVjdGlvbjo6SXRlbSwgYm9vbCA9IFRSVUUgKTsKICAgIGludCBmaW5kKCBRUHRyQ29sbGVj
dGlvbjo6SXRlbSwgYm9vbCA9IFRSVUUgKTsKCiAgICB1aW50IGNvbnRhaW5zUmVmKCBRUHRyQ29s
bGVjdGlvbjo6SXRlbSApIGNvbnN0OwogICAgdWludCBjb250YWlucyggUVB0ckNvbGxlY3Rpb246
Okl0ZW0gKSBjb25zdDsKCiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBhdCggdWludCBpbmRleCAp
OwogICAgaW50IGF0KCkgY29uc3Q7CiAgICBRTE5vZGUgKmN1cnJlbnROb2RlKCkgY29uc3Q7Cgog
ICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZ2V0KCkgY29uc3Q7CgogICAgUVB0ckNvbGxlY3Rpb246
Okl0ZW0gY2ZpcnN0KCkgY29uc3Q7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBjbGFzdCgpIGNv
bnN0OwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZmlyc3QoKTsKICAgIFFQdHJDb2xsZWN0aW9u
OjpJdGVtIGxhc3QoKTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIG5leHQoKTsKICAgIFFQdHJD
b2xsZWN0aW9uOjpJdGVtIHByZXYoKTsKCiAgICB2b2lkIHRvVmVjdG9yKCBRR1ZlY3RvciAqICkg
Y29uc3Q7CgogICAgdmlydHVhbCBpbnQgY29tcGFyZUl0ZW1zKCBRUHRyQ29sbGVjdGlvbjo6SXRl
bSwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gKTsKCgogICAgdmlydHVhbCBRRGF0YVN0cmVhbSAmcmVh
ZCggUURhdGFTdHJlYW0gJiwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gJiApOwogICAgdmlydHVhbCBR
RGF0YVN0cmVhbSAmd3JpdGUoIFFEYXRhU3RyZWFtICYsIFFQdHJDb2xsZWN0aW9uOjpJdGVtICkg
Y29uc3Q7Cgpwcml2YXRlOgogICAgdm9pZCBwcmVwZW5kKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSAp
OwoKICAgIHZvaWQgaGVhcFNvcnRQdXNoRG93biggUVB0ckNvbGxlY3Rpb246Okl0ZW0qIGhlYXAs
IGludCBmaXJzdCwgaW50IGxhc3QgKTsKCiAgICBRTE5vZGUgKmZpcnN0Tm9kZTsKICAgIFFMTm9k
ZSAqbGFzdE5vZGU7CiAgICBRTE5vZGUgKmN1ck5vZGU7CiAgICBpbnQgY3VySW5kZXg7CiAgICB1
aW50IG51bU5vZGVzOwogICAgUUdMaXN0SXRlcmF0b3JMaXN0ICppdGVyYXRvcnM7CgogICAgUUxO
b2RlICpsb2NhdGUoIHVpbnQgKTsKICAgIFFMTm9kZSAqdW5saW5rKCk7Cn07CgoKaW5saW5lIHVp
bnQgUUdMaXN0Ojpjb3VudCgpIGNvbnN0CnsKICAgIHJldHVybiBudW1Ob2RlczsKfQoKaW5saW5l
IGJvb2wgUUdMaXN0OjpyZW1vdmVGaXJzdCgpCnsKICAgIGZpcnN0KCk7CiAgICByZXR1cm4gcmVt
b3ZlKCk7Cn0KCmlubGluZSBib29sIFFHTGlzdDo6cmVtb3ZlTGFzdCgpCnsKICAgIGxhc3QoKTsK
ICAgIHJldHVybiByZW1vdmUoKTsKfQoKaW5saW5lIGludCBRR0xpc3Q6OmF0KCkgY29uc3QKewog
ICAgcmV0dXJuIGN1ckluZGV4Owp9CgppbmxpbmUgUVB0ckNvbGxlY3Rpb246Okl0ZW0gUUdMaXN0
OjphdCggdWludCBpbmRleCApCnsKICAgIFFMTm9kZSAqbiA9IGxvY2F0ZSggaW5kZXggKTsKICAg
IHJldHVybiBuID8gbi0+ZGF0YSA6IDA7Cn0KCmlubGluZSBRTE5vZGUgKlFHTGlzdDo6Y3VycmVu
dE5vZGUoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZTsKfQoKaW5saW5lIFFQdHJDb2xsZWN0
aW9uOjpJdGVtIFFHTGlzdDo6Z2V0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJO
b2RlLT5kYXRhIDogMDsKfQoKaW5saW5lIFFQdHJDb2xsZWN0aW9uOjpJdGVtIFFHTGlzdDo6Y2Zp
cnN0KCkgY29uc3QKewogICAgcmV0dXJuIGZpcnN0Tm9kZSA/IGZpcnN0Tm9kZS0+ZGF0YSA6IDA7
Cn0KCmlubGluZSBRUHRyQ29sbGVjdGlvbjo6SXRlbSBRR0xpc3Q6OmNsYXN0KCkgY29uc3QKewog
ICAgcmV0dXJuIGxhc3ROb2RlID8gbGFzdE5vZGUtPmRhdGEgOiAwOwp9CgoKCgoKCgogUURhdGFT
dHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFHTGlzdCAmICk7CiBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUdMaXN0ICYgKTsKCgoKCgoKY2xh
c3MgUUdMaXN0SXRlcmF0b3IKewpmcmllbmQgY2xhc3MgUUdMaXN0OwpmcmllbmQgY2xhc3MgUUdM
aXN0SXRlcmF0b3JMaXN0Owpwcm90ZWN0ZWQ6CiAgICBRR0xpc3RJdGVyYXRvciggY29uc3QgUUdM
aXN0ICYgKTsKICAgIFFHTGlzdEl0ZXJhdG9yKCBjb25zdCBRR0xpc3RJdGVyYXRvciAmICk7CiAg
ICBRR0xpc3RJdGVyYXRvciAmb3BlcmF0b3I9KCBjb25zdCBRR0xpc3RJdGVyYXRvciAmICk7CiAg
IH5RR0xpc3RJdGVyYXRvcigpOwoKICAgIGJvb2wgYXRGaXJzdCgpIGNvbnN0OwogICAgYm9vbCBh
dExhc3QoKSBjb25zdDsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHRvRmlyc3QoKTsKICAgIFFQ
dHJDb2xsZWN0aW9uOjpJdGVtIHRvTGFzdCgpOwoKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGdl
dCgpIGNvbnN0OwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gb3BlcmF0b3IoKSgpOwogICAgUVB0
ckNvbGxlY3Rpb246Okl0ZW0gb3BlcmF0b3IrKygpOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0g
b3BlcmF0b3IrPSh1aW50KTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIG9wZXJhdG9yLS0oKTsK
ICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIG9wZXJhdG9yLT0odWludCk7Cgpwcm90ZWN0ZWQ6CiAg
ICBRR0xpc3QgKmxpc3Q7Cgpwcml2YXRlOgogICAgUUxOb2RlICpjdXJOb2RlOwp9OwoKCmlubGlu
ZSBib29sIFFHTGlzdEl0ZXJhdG9yOjphdEZpcnN0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5v
ZGUgPT0gbGlzdC0+Zmlyc3ROb2RlOwp9CgppbmxpbmUgYm9vbCBRR0xpc3RJdGVyYXRvcjo6YXRM
YXN0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPT0gbGlzdC0+bGFzdE5vZGU7Cn0KCmlu
bGluZSBRUHRyQ29sbGVjdGlvbjo6SXRlbSBRR0xpc3RJdGVyYXRvcjo6Z2V0KCkgY29uc3QKewog
ICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJOb2RlLT5kYXRhIDogMDsKfQojIDQzICIvdXNyL2xvY2Fs
L3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXB0cmxpc3QuaCIgMgoKCgp0ZW1wbGF0ZTxjbGFz
cyB0eXBlPgpjbGFzcyBRUHRyTGlzdAoKCgogICAgICAgIDogcHVibGljIFFHTGlzdAoKewpwdWJs
aWM6CiAgICBRUHRyTGlzdCgpIHt9CiAgICBRUHRyTGlzdCggY29uc3QgUVB0ckxpc3Q8dHlwZT4g
JmwgKSA6IFFHTGlzdChsKSB7fQogICAgflFQdHJMaXN0KCkgeyBjbGVhcigpOyB9CiAgICBRUHRy
TGlzdDx0eXBlPiAmb3BlcmF0b3I9KGNvbnN0IFFQdHJMaXN0PHR5cGU+ICZsKQogICAgICAgICAg
ICAgICAgICAgICAgICB7IHJldHVybiAoUVB0ckxpc3Q8dHlwZT4mKVFHTGlzdDo6b3BlcmF0b3I9
KGwpOyB9CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQdHJMaXN0PHR5cGU+ICZsaXN0ICkg
Y29uc3QKICAgIHsgcmV0dXJuIFFHTGlzdDo6b3BlcmF0b3I9PSggbGlzdCApOyB9CiAgICB1aW50
IGNvdW50KCkgY29uc3QgeyByZXR1cm4gUUdMaXN0Ojpjb3VudCgpOyB9CiAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBRR0xpc3Q6OmNvdW50KCkgPT0gMDsgfQogICAgYm9vbCBpbnNl
cnQoIHVpbnQgaSwgY29uc3QgdHlwZSAqZCl7IHJldHVybiBRR0xpc3Q6Omluc2VydEF0KGksKFFQ
dHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICB2b2lkIGluU29ydCggY29uc3QgdHlwZSAqZCAp
IHsgUUdMaXN0OjppblNvcnQoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICB2b2lkIHBy
ZXBlbmQoIGNvbnN0IHR5cGUgKmQgKSB7IFFHTGlzdDo6aW5zZXJ0QXQoMCwoUVB0ckNvbGxlY3Rp
b246Okl0ZW0pZCk7IH0KICAgIHZvaWQgYXBwZW5kKCBjb25zdCB0eXBlICpkICkgeyBRR0xpc3Q6
OmFwcGVuZCgoUVB0ckNvbGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIGJvb2wgcmVtb3ZlKCB1aW50
IGkgKSB7IHJldHVybiBRR0xpc3Q6OnJlbW92ZUF0KGkpOyB9CiAgICBib29sIHJlbW92ZSgpIHsg
cmV0dXJuIFFHTGlzdDo6cmVtb3ZlKChRUHRyQ29sbGVjdGlvbjo6SXRlbSkwKTsgfQogICAgYm9v
bCByZW1vdmUoIGNvbnN0IHR5cGUgKmQgKSB7IHJldHVybiBRR0xpc3Q6OnJlbW92ZSgoUVB0ckNv
bGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIGJvb2wgcmVtb3ZlUmVmKCBjb25zdCB0eXBlICpkICkg
eyByZXR1cm4gUUdMaXN0OjpyZW1vdmVSZWYoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAg
ICB2b2lkIHJlbW92ZU5vZGUoIFFMTm9kZSAqbiApIHsgUUdMaXN0OjpyZW1vdmVOb2RlKG4pOyB9
CiAgICBib29sIHJlbW92ZUZpcnN0KCkgeyByZXR1cm4gUUdMaXN0OjpyZW1vdmVGaXJzdCgpOyB9
CiAgICBib29sIHJlbW92ZUxhc3QoKSB7IHJldHVybiBRR0xpc3Q6OnJlbW92ZUxhc3QoKTsgfQog
ICAgdHlwZSAqdGFrZSggdWludCBpICkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OnRha2VBdChp
KTsgfQogICAgdHlwZSAqdGFrZSgpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0Ojp0YWtlKCk7IH0K
ICAgIHR5cGUgKnRha2VOb2RlKCBRTE5vZGUgKm4gKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6
dGFrZU5vZGUobik7IH0KICAgIHZvaWQgY2xlYXIoKSB7IFFHTGlzdDo6Y2xlYXIoKTsgfQogICAg
dm9pZCBzb3J0KCkgeyBRR0xpc3Q6OnNvcnQoKTsgfQogICAgaW50IGZpbmQoIGNvbnN0IHR5cGUg
KmQgKSB7IHJldHVybiBRR0xpc3Q6OmZpbmQoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAg
ICBpbnQgZmluZE5leHQoIGNvbnN0IHR5cGUgKmQgKSB7IHJldHVybiBRR0xpc3Q6OmZpbmQoKFFQ
dHJDb2xsZWN0aW9uOjpJdGVtKWQsRkFMU0UpOyB9CiAgICBpbnQgZmluZFJlZiggY29uc3QgdHlw
ZSAqZCApIHsgcmV0dXJuIFFHTGlzdDo6ZmluZFJlZigoUVB0ckNvbGxlY3Rpb246Okl0ZW0pZCk7
IH0KICAgIGludCBmaW5kTmV4dFJlZiggY29uc3QgdHlwZSAqZCApeyByZXR1cm4gUUdMaXN0Ojpm
aW5kUmVmKChRUHRyQ29sbGVjdGlvbjo6SXRlbSlkLEZBTFNFKTt9CiAgICB1aW50IGNvbnRhaW5z
KCBjb25zdCB0eXBlICpkICkgY29uc3QgeyByZXR1cm4gUUdMaXN0Ojpjb250YWlucygoUVB0ckNv
bGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIHVpbnQgY29udGFpbnNSZWYoIGNvbnN0IHR5cGUgKmQg
KSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4g
UUdMaXN0Ojpjb250YWluc1JlZigoUVB0ckNvbGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIHR5cGUg
KmF0KCB1aW50IGkgKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6YXQoaSk7IH0KICAgIGludCBh
dCgpIGNvbnN0IHsgcmV0dXJuIFFHTGlzdDo6YXQoKTsgfQogICAgdHlwZSAqY3VycmVudCgpIGNv
bnN0IHsgcmV0dXJuICh0eXBlICopUUdMaXN0OjpnZXQoKTsgfQogICAgUUxOb2RlICpjdXJyZW50
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIFFHTGlzdDo6Y3VycmVudE5vZGUoKTsgfQogICAgdHlwZSAq
Z2V0Rmlyc3QoKSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6Y2ZpcnN0KCk7IH0KICAg
IHR5cGUgKmdldExhc3QoKSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6Y2xhc3QoKTsg
fQogICAgdHlwZSAqZmlyc3QoKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6Zmlyc3QoKTsgfQog
ICAgdHlwZSAqbGFzdCgpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0OjpsYXN0KCk7IH0KICAgIHR5
cGUgKm5leHQoKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6bmV4dCgpOyB9CiAgICB0eXBlICpw
cmV2KCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OnByZXYoKTsgfQogICAgdm9pZCB0b1ZlY3Rv
ciggUUdWZWN0b3IgKnZlYyApY29uc3R7IFFHTGlzdDo6dG9WZWN0b3IodmVjKTsgfQojIDEwNiAi
L3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FwdHJsaXN0LmgiCnByaXZhdGU6
CiAgICB2b2lkIGRlbGV0ZUl0ZW0oIEl0ZW0gZCApOwp9OwoKCnRlbXBsYXRlPD4gaW5saW5lIHZv
aWQgUVB0ckxpc3Q8dm9pZD46OmRlbGV0ZUl0ZW0oIFFQdHJDb2xsZWN0aW9uOjpJdGVtICkKewp9
CgoKdGVtcGxhdGU8Y2xhc3MgdHlwZT4gaW5saW5lIHZvaWQgUVB0ckxpc3Q8dHlwZT46OmRlbGV0
ZUl0ZW0oIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQgKQp7CiAgICBpZiAoIGRlbF9pdGVtICkgZGVs
ZXRlICh0eXBlICopZDsKfQoKdGVtcGxhdGU8Y2xhc3MgdHlwZT4KY2xhc3MgUVB0ckxpc3RJdGVy
YXRvcgo6IHB1YmxpYyBRR0xpc3RJdGVyYXRvcgp7CnB1YmxpYzoKICAgIFFQdHJMaXN0SXRlcmF0
b3IoY29uc3QgUVB0ckxpc3Q8dHlwZT4gJmwpIDpRR0xpc3RJdGVyYXRvcigoUUdMaXN0ICYpbCkg
e30KICAgflFQdHJMaXN0SXRlcmF0b3IoKSB7fQogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0
dXJuIGxpc3QtPmNvdW50KCk7IH0KICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGxp
c3QtPmNvdW50KCkgPT0gMDsgfQogICAgYm9vbCBhdEZpcnN0KCkgY29uc3QgeyByZXR1cm4gUUdM
aXN0SXRlcmF0b3I6OmF0Rmlyc3QoKTsgfQogICAgYm9vbCBhdExhc3QoKSBjb25zdCB7IHJldHVy
biBRR0xpc3RJdGVyYXRvcjo6YXRMYXN0KCk7IH0KICAgIHR5cGUgKnRvRmlyc3QoKSB7IHJldHVy
biAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjp0b0ZpcnN0KCk7IH0KICAgIHR5cGUgKnRvTGFzdCgp
IHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6OnRvTGFzdCgpOyB9CiAgICBvcGVyYXRv
ciB0eXBlICooKSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpnZXQoKTsg
fQogICAgdHlwZSAqb3BlcmF0b3IqKCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6
Z2V0KCk7IH0KCgoKCgoKCiAgICB0eXBlICpjdXJyZW50KCkgY29uc3QgeyByZXR1cm4gKHR5cGUg
KilRR0xpc3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKCkoKSB7IHJldHVy
biAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpvcGVyYXRvcigpKCk7fQogICAgdHlwZSAqb3BlcmF0
b3IrKygpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6Om9wZXJhdG9yKysoKTsgfQog
ICAgdHlwZSAqb3BlcmF0b3IrPSh1aW50IGopIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0
b3I6Om9wZXJhdG9yKz0oaik7fQogICAgdHlwZSAqb3BlcmF0b3ItLSgpIHsgcmV0dXJuICh0eXBl
ICopUUdMaXN0SXRlcmF0b3I6Om9wZXJhdG9yLS0oKTsgfQogICAgdHlwZSAqb3BlcmF0b3ItPSh1
aW50IGopIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6Om9wZXJhdG9yLT0oaik7fQog
ICAgUVB0ckxpc3RJdGVyYXRvcjx0eXBlPiYgb3BlcmF0b3I9KGNvbnN0IFFQdHJMaXN0SXRlcmF0
b3I8dHlwZT4maXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUUdMaXN0SXRlcmF0
b3I6Om9wZXJhdG9yPShpdCk7IHJldHVybiAqdGhpczsgfQp9OwojIDQ0ICIvdXNyL2xvY2FsL3F0
LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXN0cmxpc3QuaCIgMgojIDU4ICIvdXNyL2xvY2FsL3F0
LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXN0cmxpc3QuaCIKdHlwZWRlZiBRUHRyTGlzdEl0ZXJh
dG9yPGNoYXI+IFFTdHJMaXN0SXRlcmF0b3I7CgoKY2xhc3MgUVN0ckxpc3QgOiBwdWJsaWMgUVB0
ckxpc3Q8Y2hhcj4KewpwdWJsaWM6CiAgICBRU3RyTGlzdCggYm9vbCBkZWVwQ29waWVzPVRSVUUg
KSB7IGRjID0gZGVlcENvcGllczsgZGVsX2l0ZW0gPSBkZWVwQ29waWVzOyB9CiAgICBRU3RyTGlz
dCggY29uc3QgUVN0ckxpc3QgJiApOwogICAgflFTdHJMaXN0KCkgeyBjbGVhcigpOyB9CiAgICBR
U3RyTGlzdCYgb3BlcmF0b3I9KCBjb25zdCBRU3RyTGlzdCAmICk7Cgpwcml2YXRlOgogICAgUVB0
ckNvbGxlY3Rpb246Okl0ZW0gbmV3SXRlbSggUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCApIHsgcmV0
dXJuIGRjID8gcXN0cmR1cCggKGNvbnN0IGNoYXIqKWQgKSA6IGQ7IH0KICAgIHZvaWQgZGVsZXRl
SXRlbSggUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCApIHsgaWYgKCBkZWxfaXRlbSApIGRlbGV0ZVtd
IChjaGFyKilkOyB9CiAgICBpbnQgY29tcGFyZUl0ZW1zKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSBz
MSwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gczIgKSB7IHJldHVybiBxc3RyY21wKChjb25zdCBjaGFy
KilzMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGNvbnN0IGNoYXIqKXMyKTsgfQoKICAgIFFEYXRhU3RyZWFtICZyZWFkKCBRRGF0YVN0
cmVhbSAmcywgUVB0ckNvbGxlY3Rpb246Okl0ZW0gJmQgKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsgcyA+PiAoY2hhciAqJilkOyByZXR1cm4gczsgfQogICAgUURhdGFTdHJlYW0g
JndyaXRlKCBRRGF0YVN0cmVhbSAmcywgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCApIGNvbnN0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gcyA8PCAoY29uc3QgY2hhciAq
KWQ7IH0KCiAgICBib29sIGRjOwp9OwoKCmNsYXNzIFFTdHJJTGlzdCA6IHB1YmxpYyBRU3RyTGlz
dAp7CnB1YmxpYzoKICAgIFFTdHJJTGlzdCggYm9vbCBkZWVwQ29waWVzPVRSVUUgKSA6IFFTdHJM
aXN0KCBkZWVwQ29waWVzICkge30KICAgIH5RU3RySUxpc3QoKSB7IGNsZWFyKCk7IH0KcHJpdmF0
ZToKICAgIGludCBjb21wYXJlSXRlbXMoIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHMxLCBRUHRyQ29s
bGVjdGlvbjo6SXRlbSBzMiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1
cm4gcXN0cmljbXAoKGNvbnN0IGNoYXIqKXMxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIqKXMyKTsgfQp9OwoKCmlubGluZSBR
U3RyTGlzdCAmIFFTdHJMaXN0OjpvcGVyYXRvcj0oIGNvbnN0IFFTdHJMaXN0ICZzdHJMaXN0ICkK
ewogICAgY2xlYXIoKTsKICAgIGRjID0gc3RyTGlzdC5kYzsKICAgIGRlbF9pdGVtID0gZGM7CiAg
ICBRUHRyTGlzdDxjaGFyPjo6b3BlcmF0b3I9KCBzdHJMaXN0ICk7CiAgICByZXR1cm4gKnRoaXM7
Cn0KCmlubGluZSBRU3RyTGlzdDo6UVN0ckxpc3QoIGNvbnN0IFFTdHJMaXN0ICZzdHJMaXN0ICkK
ICAgIDogUVB0ckxpc3Q8Y2hhcj4oIHN0ckxpc3QgKQp7CiAgICBkYyA9IEZBTFNFOwogICAgb3Bl
cmF0b3I9KCBzdHJMaXN0ICk7Cn0KIyA0NCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9p
bmNsdWRlL3FtZXRhb2JqZWN0LmgiIDIKCgoKCgoKY2xhc3MgUU9iamVjdDsKc3RydWN0IFFVTWV0
aG9kOwpjbGFzcyBRTWV0YU9iamVjdFByaXZhdGU7CgpzdHJ1Y3QgUU1ldGFEYXRhCnsKICAgIGNv
bnN0IGNoYXIgKm5hbWU7CiAgICBjb25zdCBRVU1ldGhvZCogbWV0aG9kOwogICAgZW51bSBBY2Nl
c3MgeyBQcml2YXRlLCBQcm90ZWN0ZWQsIFB1YmxpYyB9OwogICAgQWNjZXNzIGFjY2VzczsKfTsK
CgpzdHJ1Y3QgUU1ldGFFbnVtCnsKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICB1aW50IGNvdW50
OwogICAgc3RydWN0IEl0ZW0KICAgIHsKICAgICAgICBjb25zdCBjaGFyICprZXk7CiAgICAgICAg
aW50IHZhbHVlOwogICAgfTsKICAgIGNvbnN0IEl0ZW0gKml0ZW1zOwogICAgYm9vbCBzZXQ7Cn07
CgoKCgpjbGFzcyBRTWV0YVByb3BlcnR5CnsKcHVibGljOgogICAgY29uc3QgY2hhciogdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIHQ7IH0KICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVy
biBuOyB9CgogICAgYm9vbCB3cml0YWJsZSgpIGNvbnN0OwogICAgYm9vbCBpc1ZhbGlkKCkgY29u
c3Q7CgogICAgYm9vbCBpc1NldFR5cGUoKSBjb25zdDsKICAgIGJvb2wgaXNFbnVtVHlwZSgpIGNv
bnN0OwogICAgUVN0ckxpc3QgZW51bUtleXMoKSBjb25zdDsKCiAgICBpbnQga2V5VG9WYWx1ZSgg
Y29uc3QgY2hhcioga2V5ICkgY29uc3Q7CiAgICBjb25zdCBjaGFyKiB2YWx1ZVRvS2V5KCBpbnQg
dmFsdWUgKSBjb25zdDsKICAgIGludCBrZXlzVG9WYWx1ZSggY29uc3QgUVN0ckxpc3QmIGtleXMg
KSBjb25zdDsKICAgIFFTdHJMaXN0IHZhbHVlVG9LZXlzKCBpbnQgdmFsdWUgKSBjb25zdDsKCiAg
ICBib29sIGRlc2lnbmFibGUoIFFPYmplY3QqICkgY29uc3Q7CiAgICBib29sIHNjcmlwdGFibGUo
IFFPYmplY3QqICkgY29uc3Q7CiAgICBib29sIHN0b3JlZCggUU9iamVjdCogKSBjb25zdDsKCiAg
ICBib29sIHJlc2V0KCBRT2JqZWN0KiApIGNvbnN0OwoKICAgIGNvbnN0IGNoYXIqIHQ7CiAgICBj
b25zdCBjaGFyKiBuOwoKICAgIGVudW0gRmxhZ3MgewogICAgICAgIEludmFsaWQgPSAweDAwMDAw
MDAwLAogICAgICAgIFJlYWRhYmxlID0gMHgwMDAwMDAwMSwKICAgICAgICBXcml0YWJsZSA9IDB4
MDAwMDAwMDIsCiAgICAgICAgRW51bU9yU2V0ID0gMHgwMDAwMDAwNCwKICAgICAgICBTdGRTZXQg
PSAweDAwMDAwMTAwLAogICAgICAgIE92ZXJyaWRlID0gMHgwMDAwMDIwMAogICAgfTsKCiAgICB1
aW50IGZsYWdzOwogICAgYm9vbCB0ZXN0RmxhZ3MoIHVpbnQgZiApIGNvbnN0OwogICAgYm9vbCBz
dGRTZXQoKSBjb25zdDsKICAgIGludCBpZCgpIGNvbnN0OwoKICAgIFFNZXRhT2JqZWN0KiogbWV0
YTsKICAgIGNvbnN0IFFNZXRhRW51bSogZW51bURhdGE7CiAgICBpbnQgX2lkOwogICAgdm9pZCBj
bGVhcigpOwp9OwoKaW5saW5lIGJvb2wgUU1ldGFQcm9wZXJ0eTo6dGVzdEZsYWdzKCB1aW50IGYg
KSBjb25zdAp7IHJldHVybiAoZmxhZ3MgJiAodWludClmKSAhPSAodWludCkwOyB9CgoKCnN0cnVj
dCBRQ2xhc3NJbmZvCnsKICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICBjb25zdCBjaGFyKiB2YWx1
ZTsKfTsKCmNsYXNzIFFNZXRhT2JqZWN0CnsKcHVibGljOgogICAgUU1ldGFPYmplY3QoIGNvbnN0
IGNoYXIgKiBjb25zdCBjbGFzc19uYW1lLCBRTWV0YU9iamVjdCAqc3VwZXJjbGFzcywKICAgICAg
ICAgICAgICAgICBjb25zdCBRTWV0YURhdGEgKiBjb25zdCBzbG90X2RhdGEsIGludCBuX3Nsb3Rz
LAogICAgICAgICAgICAgICAgIGNvbnN0IFFNZXRhRGF0YSAqIGNvbnN0IHNpZ25hbF9kYXRhLCBp
bnQgbl9zaWduYWxzLAoKICAgICAgICAgICAgICAgICBjb25zdCBRTWV0YVByb3BlcnR5ICpjb25z
dCBwcm9wX2RhdGEsIGludCBuX3Byb3BzLAogICAgICAgICAgICAgICAgIGNvbnN0IFFNZXRhRW51
bSAqY29uc3QgZW51bV9kYXRhLCBpbnQgbl9lbnVtcywKCiAgICAgICAgICAgICAgICAgY29uc3Qg
UUNsYXNzSW5mbyAqY29uc3QgY2xhc3NfaW5mbywgaW50IG5faW5mbyApOwoKCiAgICB2aXJ0dWFs
IH5RTWV0YU9iamVjdCgpOwoKICAgIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0IHsgcmV0
dXJuIGNsYXNzbmFtZTsgfQogICAgY29uc3QgY2hhciAqc3VwZXJDbGFzc05hbWUoKSBjb25zdCB7
IHJldHVybiBzdXBlcmNsYXNzbmFtZTsgfQoKICAgIFFNZXRhT2JqZWN0ICpzdXBlckNsYXNzKCkg
Y29uc3QgeyByZXR1cm4gc3VwZXJjbGFzczsgfQoKICAgIGJvb2wgaW5oZXJpdHMoIGNvbnN0IGNo
YXIqIGNsbmFtZSApIGNvbnN0OwoKICAgIGludCBudW1TbG90cyggYm9vbCBzdXBlciA9IEZBTFNF
ICkgY29uc3Q7CiAgICBpbnQgbnVtU2lnbmFscyggYm9vbCBzdXBlciA9IEZBTFNFICkgY29uc3Q7
CgogICAgaW50IGZpbmRTbG90KCBjb25zdCBjaGFyICosIGJvb2wgc3VwZXIgPSBGQUxTRSApIGNv
bnN0OwogICAgaW50IGZpbmRTaWduYWwoIGNvbnN0IGNoYXIgKiwgYm9vbCBzdXBlciA9IEZBTFNF
ICkgY29uc3Q7CgogICAgY29uc3QgUU1ldGFEYXRhICpzbG90KCBpbnQgaW5kZXgsIGJvb2wgc3Vw
ZXIgPSBGQUxTRSApIGNvbnN0OwogICAgY29uc3QgUU1ldGFEYXRhICpzaWduYWwoIGludCBpbmRl
eCwgYm9vbCBzdXBlciA9IEZBTFNFICkgY29uc3Q7CgogICAgUVN0ckxpc3Qgc2xvdE5hbWVzKCBi
b29sIHN1cGVyID0gRkFMU0UgKSBjb25zdDsKICAgIFFTdHJMaXN0IHNpZ25hbE5hbWVzKCBib29s
IHN1cGVyID0gRkFMU0UgKSBjb25zdDsKCiAgICBpbnQgc2xvdE9mZnNldCgpIGNvbnN0OwogICAg
aW50IHNpZ25hbE9mZnNldCgpIGNvbnN0OwogICAgaW50IHByb3BlcnR5T2Zmc2V0KCkgY29uc3Q7
CgogICAgaW50IG51bUNsYXNzSW5mbyggYm9vbCBzdXBlciA9IEZBTFNFICkgY29uc3Q7CiAgICBj
b25zdCBRQ2xhc3NJbmZvICpjbGFzc0luZm8oIGludCBpbmRleCwgYm9vbCBzdXBlciA9IEZBTFNF
ICkgY29uc3Q7CiAgICBjb25zdCBjaGFyICpjbGFzc0luZm8oIGNvbnN0IGNoYXIqIG5hbWUsIGJv
b2wgc3VwZXIgPSBGQUxTRSApIGNvbnN0OwoKCiAgICBjb25zdCBRTWV0YVByb3BlcnR5ICpwcm9w
ZXJ0eSggaW50IGluZGV4LCBib29sIHN1cGVyID0gRkFMU0UgKSBjb25zdDsKICAgIGludCBmaW5k
UHJvcGVydHkoIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgc3VwZXIgPSBGQUxTRSApIGNvbnN0Owog
ICAgaW50IGluZGV4T2ZQcm9wZXJ0eSggY29uc3QgUU1ldGFQcm9wZXJ0eSosIGJvb2wgc3VwZXIg
PSBGQUxTRSApIGNvbnN0OwogICAgY29uc3QgUU1ldGFQcm9wZXJ0eSogcmVzb2x2ZVByb3BlcnR5
KCBjb25zdCBRTWV0YVByb3BlcnR5KiApIGNvbnN0OwogICAgaW50IHJlc29sdmVQcm9wZXJ0eSgg
aW50ICkgY29uc3Q7CiAgICBRU3RyTGlzdCBwcm9wZXJ0eU5hbWVzKCBib29sIHN1cGVyID0gRkFM
U0UgKSBjb25zdDsKICAgIGludCBudW1Qcm9wZXJ0aWVzKCBib29sIHN1cGVyID0gRkFMU0UgKSBj
b25zdDsKCgoKCgogICAgc3RhdGljIFFNZXRhT2JqZWN0ICpuZXdfbWV0YW9iamVjdCggY29uc3Qg
Y2hhciAqLCBRTWV0YU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUU1ldGFEYXRhICpjb25zdCwgaW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUU1ldGFEYXRhICpjb25zdCwgaW50LAoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFNZXRhUHJvcGVydHkgKmNvbnN0
IHByb3BfZGF0YSwgaW50IG5fcHJvcHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBRTWV0YUVudW0gKmNvbnN0IGVudW1fZGF0YSwgaW50IG5fZW51bXMsCgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNsYXNzSW5mbyAq
Y29uc3QgY2xhc3NfaW5mbywgaW50IG5faW5mbyApOwoKICAgIGNvbnN0IFFNZXRhRW51bSAqZW51
bWVyYXRvciggY29uc3QgY2hhciogbmFtZSwgYm9vbCBzdXBlciA9IEZBTFNFICkgY29uc3Q7CgoK
ICAgIHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCggY29uc3QgY2hhciAqY2xhc3NfbmFt
ZSApOwoKcHJpdmF0ZToKICAgIFFNZW1iZXJEaWN0ICppbml0KCBjb25zdCBRTWV0YURhdGEgKiwg
aW50ICk7CgogICAgY29uc3QgY2hhciAqY2xhc3NuYW1lOwogICAgY29uc3QgY2hhciAqc3VwZXJj
bGFzc25hbWU7CiAgICBRTWV0YU9iamVjdCAqc3VwZXJjbGFzczsKICAgIFFNZXRhT2JqZWN0UHJp
dmF0ZSAqZDsKICAgIHZvaWQgKnJlc2VydmVkOwogICAgY29uc3QgUU1ldGFEYXRhICpzbG90RGF0
YTsKICAgIFFNZW1iZXJEaWN0ICpzbG90RGljdDsKICAgIGNvbnN0IFFNZXRhRGF0YSAqc2lnbmFs
RGF0YTsKICAgIFFNZW1iZXJEaWN0ICpzaWduYWxEaWN0OwogICAgaW50IHNpZ25hbG9mZnNldDsK
ICAgIGludCBzbG90b2Zmc2V0OwoKICAgIGludCBwcm9wZXJ0eW9mZnNldDsKCgpwcml2YXRlOgoK
ICAgIFFNZXRhT2JqZWN0KCBjb25zdCBRTWV0YU9iamVjdCAmICk7CiAgICBRTWV0YU9iamVjdCAm
b3BlcmF0b3I9KCBjb25zdCBRTWV0YU9iamVjdCAmICk7Cgp9OwoKaW5saW5lIGludCBRTWV0YU9i
amVjdDo6c2xvdE9mZnNldCgpIGNvbnN0CnsgcmV0dXJuIHNsb3RvZmZzZXQ7IH0KCmlubGluZSBp
bnQgUU1ldGFPYmplY3Q6OnNpZ25hbE9mZnNldCgpIGNvbnN0CnsgcmV0dXJuIHNpZ25hbG9mZnNl
dDsgfQoKCmlubGluZSBpbnQgUU1ldGFPYmplY3Q6OnByb3BlcnR5T2Zmc2V0KCkgY29uc3QKeyBy
ZXR1cm4gcHJvcGVydHlvZmZzZXQ7IH0KCgpjbGFzcyBRTWV0YU9iamVjdENsZWFuVXAKewpwdWJs
aWM6CiAgICBRTWV0YU9iamVjdENsZWFuVXAoKTsKICAgIH5RTWV0YU9iamVjdENsZWFuVXAoKTsK
CiAgICB2b2lkIHNldE1ldGFPYmplY3QoIFFNZXRhT2JqZWN0ICombW8gKTsKCnByaXZhdGU6CiAg
ICBRTWV0YU9iamVjdCAqKm1ldGFPYmplY3Q7Cn07CiMgMTMgIm1vY190aW1lbGFiZWwuY3BwIiAy
CiMgMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FhcHBsaWNhdGlvbi5o
IiAxCiMgNDIgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xYXBwbGljYXRp
b24uaCIKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWRlc2t0b3B3
aWRnZXQuaCIgMQojIDQ1ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWRl
c2t0b3B3aWRnZXQuaCIKY2xhc3MgUURlc2t0b3BXaWRnZXRQcml2YXRlOwoKY2xhc3MgUURlc2t0
b3BXaWRnZXQgOiBwdWJsaWMgUVdpZGdldAp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmpl
Y3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmly
dHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0
KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiAp
OyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0
X3Byb3BlcnR5KCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3Rh
dGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRo
aXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCAp
OyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCAp
OyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CnB1YmxpYzoKICAgIFFEZXNr
dG9wV2lkZ2V0KCk7CiAgICB+UURlc2t0b3BXaWRnZXQoKTsKCiAgICBib29sIGlzVmlydHVhbERl
c2t0b3AoKSBjb25zdDsKCiAgICBpbnQgbnVtU2NyZWVucygpIGNvbnN0OwogICAgaW50IHByaW1h
cnlTY3JlZW4oKSBjb25zdDsKCiAgICBpbnQgc2NyZWVuTnVtYmVyKCBRV2lkZ2V0ICp3aWRnZXQg
PSAwICkgY29uc3Q7CiAgICBpbnQgc2NyZWVuTnVtYmVyKCBjb25zdCBRUG9pbnQgJiApIGNvbnN0
OwoKICAgIFFXaWRnZXQgKnNjcmVlbiggaW50IHNjcmVlbiA9IC0xICk7CgogICAgY29uc3QgUVJl
Y3QmIHNjcmVlbkdlb21ldHJ5KCBpbnQgc2NyZWVuID0gLTEgKSBjb25zdDsKIyA3NCAiL3Vzci9s
b2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FkZXNrdG9wd2lkZ2V0LmgiCnByaXZhdGU6
CiAgICBRRGVza3RvcFdpZGdldFByaXZhdGUgKmQ7Cn07CiMgNDMgIi91c3IvbG9jYWwvcXQteDEx
LWZyZWUtMy4wLjYvaW5jbHVkZS9xYXBwbGljYXRpb24uaCIgMgojIDEgIi91c3IvbG9jYWwvcXQt
eDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xYXNjaWlkaWN0LmgiIDEKIyA0MiAiL3Vzci9sb2NhbC9x
dC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3Fhc2NpaWRpY3QuaCIKIyAxICIvdXNyL2xvY2FsL3F0
LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWdkaWN0LmgiIDEKIyA0NiAiL3Vzci9sb2NhbC9xdC14
MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FnZGljdC5oIgpjbGFzcyBRR0RpY3RJdGVyYXRvcjsKY2xh
c3MgUUdESXRMaXN0OwoKCmNsYXNzIFFCYXNlQnVja2V0CnsKcHVibGljOgogICAgUVB0ckNvbGxl
Y3Rpb246Okl0ZW0gZ2V0RGF0YSgpIHsgcmV0dXJuIGRhdGE7IH0KICAgIFFQdHJDb2xsZWN0aW9u
OjpJdGVtIHNldERhdGEoIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQgKSB7IHJldHVybiBkYXRhID0g
ZDsgfQogICAgUUJhc2VCdWNrZXQgKmdldE5leHQoKSB7IHJldHVybiBuZXh0OyB9CiAgICB2b2lk
IHNldE5leHQoIFFCYXNlQnVja2V0ICpuKSB7IG5leHQgPSBuOyB9CnByb3RlY3RlZDoKICAgIFFC
YXNlQnVja2V0KCBRUHRyQ29sbGVjdGlvbjo6SXRlbSBkLCBRQmFzZUJ1Y2tldCAqbiApIDogZGF0
YShkKSwgbmV4dChuKSB7fQogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZGF0YTsKICAgIFFCYXNl
QnVja2V0ICpuZXh0Owp9OwoKY2xhc3MgUVN0cmluZ0J1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tl
dAp7CnB1YmxpYzoKICAgIFFTdHJpbmdCdWNrZXQoIGNvbnN0IFFTdHJpbmcgJmssIFFQdHJDb2xs
ZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQs
biksIGtleShrKSB7fQogICAgY29uc3QgUVN0cmluZyAmZ2V0S2V5KCkgY29uc3QgeyByZXR1cm4g
a2V5OyB9CnByaXZhdGU6CiAgICBRU3RyaW5nIGtleTsKfTsKCmNsYXNzIFFBc2NpaUJ1Y2tldCA6
IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFBc2NpaUJ1Y2tldCggY29uc3QgY2hh
ciAqaywgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCwgUUJhc2VCdWNrZXQgKm4gKQogICAgICAgIDog
UUJhc2VCdWNrZXQoZCxuKSwga2V5KGspIHt9CiAgICBjb25zdCBjaGFyICpnZXRLZXkoKSBjb25z
dCB7IHJldHVybiBrZXk7IH0KcHJpdmF0ZToKICAgIGNvbnN0IGNoYXIgKmtleTsKfTsKCmNsYXNz
IFFJbnRCdWNrZXQgOiBwdWJsaWMgUUJhc2VCdWNrZXQKewpwdWJsaWM6CiAgICBRSW50QnVja2V0
KCBsb25nIGssIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAg
ICA6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKSB7fQogICAgbG9uZyBnZXRLZXkoKSBjb25zdCB7
IHJldHVybiBrZXk7IH0KcHJpdmF0ZToKICAgIGxvbmcga2V5Owp9OwoKY2xhc3MgUVB0ckJ1Y2tl
dCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFQdHJCdWNrZXQoIHZvaWQgKmss
IFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNl
QnVja2V0KGQsbiksIGtleShrKSB7fQogICAgdm9pZCAqZ2V0S2V5KCkgY29uc3QgeyByZXR1cm4g
a2V5OyB9CnByaXZhdGU6CiAgICB2b2lkICprZXk7Cn07CgoKY2xhc3MgUUdEaWN0IDogcHVibGlj
IFFQdHJDb2xsZWN0aW9uCnsKcHVibGljOgogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG51bUl0ZW1zOyB9CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiB2bGVuOyB9CiAgICBR
UHRyQ29sbGVjdGlvbjo6SXRlbSBsb29rX3N0cmluZyggY29uc3QgUVN0cmluZyYga2V5LCBRUHRy
Q29sbGVjdGlvbjo6SXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
KTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGxvb2tfYXNjaWkoIGNvbnN0IGNoYXIgKmtleSwg
UVB0ckNvbGxlY3Rpb246Okl0ZW0sIGludCApOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gbG9v
a19pbnQoIGxvbmcga2V5LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwgaW50ICk7CiAgICBRUHRyQ29s
bGVjdGlvbjo6SXRlbSBsb29rX3B0ciggdm9pZCAqa2V5LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwg
aW50ICk7CgogICAgUURhdGFTdHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFtICYgKTsKICAgIFFEYXRh
U3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiApIGNvbnN0OwoKcHJvdGVjdGVkOgogICAgZW51
bSBLZXlUeXBlIHsgU3RyaW5nS2V5LCBBc2NpaUtleSwgSW50S2V5LCBQdHJLZXkgfTsKCiAgICBR
R0RpY3QoIHVpbnQgbGVuLCBLZXlUeXBlIGt0LCBib29sIGNzLCBib29sIGNrICk7CiAgICBRR0Rp
Y3QoIGNvbnN0IFFHRGljdCAmICk7CiAgIH5RR0RpY3QoKTsKCiAgICBRR0RpY3QgJm9wZXJhdG9y
PSggY29uc3QgUUdEaWN0ICYgKTsKCiAgICBib29sIHJlbW92ZV9zdHJpbmcoIGNvbnN0IFFTdHJp
bmcgJmtleSwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gaXRlbT0wICk7CiAgICBib29sIHJlbW92ZV9h
c2NpaSggY29uc3QgY2hhciAqa2V5LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSBpdGVtPTAgKTsKICAg
IGJvb2wgcmVtb3ZlX2ludCggbG9uZyBrZXksIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCAp
OwogICAgYm9vbCByZW1vdmVfcHRyKCB2b2lkICprZXksIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0
ZW09MCApOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gdGFrZV9zdHJpbmcoIGNvbnN0IFFTdHJp
bmcgJmtleSApOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gdGFrZV9hc2NpaSggY29uc3QgY2hh
ciAqa2V5ICk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0YWtlX2ludCggbG9uZyBrZXkgKTsK
ICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHRha2VfcHRyKCB2b2lkICprZXkgKTsKCiAgICB2b2lk
IGNsZWFyKCk7CiAgICB2b2lkIHJlc2l6ZSggdWludCApOwoKICAgIGludCBoYXNoS2V5U3RyaW5n
KCBjb25zdCBRU3RyaW5nICYgKTsKICAgIGludCBoYXNoS2V5QXNjaWkoIGNvbnN0IGNoYXIgKiAp
OwoKICAgIHZvaWQgc3RhdGlzdGljcygpIGNvbnN0OwoKCiAgICB2aXJ0dWFsIFFEYXRhU3RyZWFt
ICZyZWFkKCBRRGF0YVN0cmVhbSAmLCBRUHRyQ29sbGVjdGlvbjo6SXRlbSAmICk7CiAgICB2aXJ0
dWFsIFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiwgUVB0ckNvbGxlY3Rpb246Okl0
ZW0gKSBjb25zdDsKCnByaXZhdGU6CiAgICBRQmFzZUJ1Y2tldCAqKnZlYzsKICAgIHVpbnQgdmxl
bjsKICAgIHVpbnQgbnVtSXRlbXM7CiAgICB1aW50IGtleXR5cGUgOiAyOwogICAgdWludCBjYXNl
cyA6IDE7CiAgICB1aW50IGNvcHlrIDogMTsKICAgIFFHREl0TGlzdCAqaXRlcmF0b3JzOwogICAg
dm9pZCB1bmxpbmtfY29tbW9uKCBpbnQsIFFCYXNlQnVja2V0ICosIFFCYXNlQnVja2V0ICogKTsK
ICAgIFFTdHJpbmdCdWNrZXQgKnVubGlua19zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0ZW0gPSAw
ICk7CiAgICBRQXNjaWlCdWNrZXQgKnVubGlua19hc2NpaSggY29uc3QgY2hhciAqLCBRUHRyQ29s
bGVjdGlvbjo6SXRlbSBpdGVtID0gMCApOwogICAgUUludEJ1Y2tldCAqdW5saW5rX2ludCggbG9u
ZywgUVB0ckNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAgIFFQdHJCdWNrZXQgKnVubGlu
a19wdHIoIHZvaWQgKiwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAgIHZvaWQg
aW5pdCggdWludCwgS2V5VHlwZSwgYm9vbCwgYm9vbCApOwogICAgZnJpZW5kIGNsYXNzIFFHRGlj
dEl0ZXJhdG9yOwp9OwoKCmNsYXNzIFFHRGljdEl0ZXJhdG9yCnsKZnJpZW5kIGNsYXNzIFFHRGlj
dDsKcHVibGljOgogICAgUUdEaWN0SXRlcmF0b3IoIGNvbnN0IFFHRGljdCAmICk7CiAgICBRR0Rp
Y3RJdGVyYXRvciggY29uc3QgUUdEaWN0SXRlcmF0b3IgJiApOwogICAgUUdEaWN0SXRlcmF0b3Ig
Jm9wZXJhdG9yPSggY29uc3QgUUdEaWN0SXRlcmF0b3IgJiApOwogICB+UUdEaWN0SXRlcmF0b3Io
KTsKCiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0b0ZpcnN0KCk7CgogICAgUVB0ckNvbGxlY3Rp
b246Okl0ZW0gZ2V0KCkgY29uc3Q7CiAgICBRU3RyaW5nIGdldEtleVN0cmluZygpIGNvbnN0Owog
ICAgY29uc3QgY2hhciAqZ2V0S2V5QXNjaWkoKSBjb25zdDsKICAgIGxvbmcgZ2V0S2V5SW50KCkg
Y29uc3Q7CiAgICB2b2lkICpnZXRLZXlQdHIoKSBjb25zdDsKCiAgICBRUHRyQ29sbGVjdGlvbjo6
SXRlbSBvcGVyYXRvcigpKCk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcisrKCk7
CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcis9KHVpbnQpOwoKcHJvdGVjdGVkOgog
ICAgUUdEaWN0ICpkaWN0OwoKcHJpdmF0ZToKICAgIFFCYXNlQnVja2V0ICpjdXJOb2RlOwogICAg
dWludCBjdXJJbmRleDsKfTsKCmlubGluZSBRUHRyQ29sbGVjdGlvbjo6SXRlbSBRR0RpY3RJdGVy
YXRvcjo6Z2V0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJOb2RlLT5nZXREYXRh
KCkgOiAwOwp9CgppbmxpbmUgUVN0cmluZyBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5U3RyaW5nKCkg
Y29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFTdHJpbmdCdWNrZXQqKWN1ck5vZGUpLT5n
ZXRLZXkoKSA6IFFTdHJpbmc6Om51bGw7Cn0KCmlubGluZSBjb25zdCBjaGFyICpRR0RpY3RJdGVy
YXRvcjo6Z2V0S2V5QXNjaWkoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA/ICgoUUFzY2lp
QnVja2V0KiljdXJOb2RlKS0+Z2V0S2V5KCkgOiAwOwp9CgppbmxpbmUgbG9uZyBRR0RpY3RJdGVy
YXRvcjo6Z2V0S2V5SW50KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFJbnRCdWNr
ZXQqKWN1ck5vZGUpLT5nZXRLZXkoKSA6IDA7Cn0KCmlubGluZSB2b2lkICpRR0RpY3RJdGVyYXRv
cjo6Z2V0S2V5UHRyKCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFQdHJCdWNrZXQq
KWN1ck5vZGUpLT5nZXRLZXkoKSA6IDA7Cn0KIyA0MyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0z
LjAuNi9pbmNsdWRlL3Fhc2NpaWRpY3QuaCIgMgoKCnRlbXBsYXRlPGNsYXNzIHR5cGU+CmNsYXNz
IFFBc2NpaURpY3QKCgoKICAgICAgICA6IHB1YmxpYyBRR0RpY3QKCnsKcHVibGljOgogICAgUUFz
Y2lpRGljdChpbnQgc2l6ZT0xNywgYm9vbCBjYXNlU2Vuc2l0aXZlPVRSVUUsIGJvb2wgY29weUtl
eXM9VFJVRSApCiAgICAgICAgOiBRR0RpY3Qoc2l6ZSxBc2NpaUtleSxjYXNlU2Vuc2l0aXZlLGNv
cHlLZXlzKSB7fQogICAgUUFzY2lpRGljdCggY29uc3QgUUFzY2lpRGljdDx0eXBlPiAmZCApIDog
UUdEaWN0KGQpIHt9CiAgIH5RQXNjaWlEaWN0KCkgeyBjbGVhcigpOyB9CiAgICBRQXNjaWlEaWN0
PHR5cGU+ICZvcGVyYXRvcj0oY29uc3QgUUFzY2lpRGljdDx0eXBlPiAmZCkKICAgICAgICAgICAg
ICAgICAgICAgICAgeyByZXR1cm4gKFFBc2NpaURpY3Q8dHlwZT4mKVFHRGljdDo6b3BlcmF0b3I9
KGQpOyB9CiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gUUdEaWN0Ojpjb3VudCgpOyB9
CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiBRR0RpY3Q6OnNpemUoKTsgfQogICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gUUdEaWN0Ojpjb3VudCgpID09IDA7IH0KCiAgICB2
b2lkIGluc2VydCggY29uc3QgY2hhciAqaywgY29uc3QgdHlwZSAqZCApCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7IFFHRGljdDo6bG9va19hc2NpaShrLChJdGVtKWQs
MSk7IH0KICAgIHZvaWQgcmVwbGFjZSggY29uc3QgY2hhciAqaywgY29uc3QgdHlwZSAqZCApCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFFHRGljdDo6bG9va19hc2Np
aShrLChJdGVtKWQsMik7IH0KICAgIGJvb2wgcmVtb3ZlKCBjb25zdCBjaGFyICprICkgeyByZXR1
cm4gUUdEaWN0OjpyZW1vdmVfYXNjaWkoayk7IH0KICAgIHR5cGUgKnRha2UoIGNvbnN0IGNoYXIg
KmsgKSB7IHJldHVybiAodHlwZSAqKVFHRGljdDo6dGFrZV9hc2NpaShrKTsgfQogICAgdHlwZSAq
ZmluZCggY29uc3QgY2hhciAqayApIGNvbnN0CiAgICAgICAgICAgICAgICB7IHJldHVybiAodHlw
ZSAqKSgoUUdEaWN0Kil0aGlzKS0+UUdEaWN0Ojpsb29rX2FzY2lpKGssMCwwKTsgfQogICAgdHlw
ZSAqb3BlcmF0b3JbXSggY29uc3QgY2hhciAqayApIGNvbnN0CiAgICAgICAgICAgICAgICB7IHJl
dHVybiAodHlwZSAqKSgoUUdEaWN0Kil0aGlzKS0+UUdEaWN0Ojpsb29rX2FzY2lpKGssMCwwKTsg
fQoKICAgIHZvaWQgY2xlYXIoKSB7IFFHRGljdDo6Y2xlYXIoKTsgfQogICAgdm9pZCByZXNpemUo
IHVpbnQgbiApIHsgUUdEaWN0OjpyZXNpemUobik7IH0KICAgIHZvaWQgc3RhdGlzdGljcygpIGNv
bnN0IHsgUUdEaWN0OjpzdGF0aXN0aWNzKCk7IH0KCgoKCgoKCnByaXZhdGU6CiAgICB2b2lkIGRl
bGV0ZUl0ZW0oIEl0ZW0gZCApOwp9OwoKCnRlbXBsYXRlPD4gaW5saW5lIHZvaWQgUUFzY2lpRGlj
dDx2b2lkPjo6ZGVsZXRlSXRlbSggUVB0ckNvbGxlY3Rpb246Okl0ZW0gKQp7Cn0KCgp0ZW1wbGF0
ZTxjbGFzcyB0eXBlPiBpbmxpbmUgdm9pZCBRQXNjaWlEaWN0PHR5cGU+OjpkZWxldGVJdGVtKCBR
UHRyQ29sbGVjdGlvbjo6SXRlbSBkICkKewogICAgaWYgKCBkZWxfaXRlbSApIGRlbGV0ZSAodHlw
ZSAqKWQ7Cn0KCnRlbXBsYXRlPGNsYXNzIHR5cGU+CmNsYXNzIFFBc2NpaURpY3RJdGVyYXRvcgo6
IHB1YmxpYyBRR0RpY3RJdGVyYXRvcgp7CnB1YmxpYzoKICAgIFFBc2NpaURpY3RJdGVyYXRvcihj
b25zdCBRQXNjaWlEaWN0PHR5cGU+ICZkKQogICAgICAgIDogUUdEaWN0SXRlcmF0b3IoKFFHRGlj
dCAmKWQpIHt9CiAgIH5RQXNjaWlEaWN0SXRlcmF0b3IoKSB7fQogICAgdWludCBjb3VudCgpIGNv
bnN0IHsgcmV0dXJuIGRpY3QtPmNvdW50KCk7IH0KICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIGRpY3QtPmNvdW50KCkgPT0gMDsgfQogICAgdHlwZSAqdG9GaXJzdCgpIHsgcmV0dXJu
ICh0eXBlICopUUdEaWN0SXRlcmF0b3I6OnRvRmlyc3QoKTsgfQogICAgb3BlcmF0b3IgdHlwZSAq
KCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIHR5
cGUgKmN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpnZXQo
KTsgfQogICAgY29uc3QgY2hhciAqY3VycmVudEtleSgpIGNvbnN0IHsgcmV0dXJuIFFHRGljdEl0
ZXJhdG9yOjpnZXRLZXlBc2NpaSgpOyB9CiAgICB0eXBlICpvcGVyYXRvcigpKCkgeyByZXR1cm4g
KHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6b3BlcmF0b3IoKSgpOyB9CiAgICB0eXBlICpvcGVyYXRv
cisrKCkgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6b3BlcmF0b3IrKygpOyB9CiAg
ICB0eXBlICpvcGVyYXRvcis9KHVpbnQgaikgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRv
cjo6b3BlcmF0b3IrPShqKTt9Cn07CiMgNDQgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYv
aW5jbHVkZS9xYXBwbGljYXRpb24uaCIgMgoKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMu
MC42L2luY2x1ZGUvcXRyYW5zbGF0b3IuaCIgMQojIDQ5ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVl
LTMuMC42L2luY2x1ZGUvcXRyYW5zbGF0b3IuaCIKY2xhc3MgUVRyYW5zbGF0b3JQcml2YXRlOwoK
Y2xhc3MgUVRyYW5zbGF0b3JNZXNzYWdlCnsKcHVibGljOgogICAgUVRyYW5zbGF0b3JNZXNzYWdl
KCk7CiAgICBRVHJhbnNsYXRvck1lc3NhZ2UoIGNvbnN0IGNoYXIgKiBjb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogc291cmNlVGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqIGNvbW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFFTdHJpbmcmIHRyYW5zbGF0aW9uID0gUVN0cmluZzo6bnVsbCApOwogICAgUVRyYW5zbGF0
b3JNZXNzYWdlKCBRRGF0YVN0cmVhbSAmICk7CiAgICBRVHJhbnNsYXRvck1lc3NhZ2UoIGNvbnN0
IFFUcmFuc2xhdG9yTWVzc2FnZSAmIG0gKTsKCiAgICBRVHJhbnNsYXRvck1lc3NhZ2UgJiBvcGVy
YXRvcj0oIGNvbnN0IFFUcmFuc2xhdG9yTWVzc2FnZSAmIG0gKTsKCiAgICB1aW50IGhhc2goKSBj
b25zdCB7IHJldHVybiBoOyB9CiAgICBjb25zdCBjaGFyICpjb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gY3g7IH0KICAgIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQoKSBjb25zdCB7IHJldHVybiBzdDsg
fQogICAgY29uc3QgY2hhciAqY29tbWVudCgpIGNvbnN0IHsgcmV0dXJuIGNtOyB9CgogICAgdm9p
ZCBzZXRUcmFuc2xhdGlvbiggY29uc3QgUVN0cmluZyAmIHRyYW5zbGF0aW9uICkgeyB0biA9IHRy
YW5zbGF0aW9uOyB9CiAgICBRU3RyaW5nIHRyYW5zbGF0aW9uKCkgY29uc3QgeyByZXR1cm4gdG47
IH0KCiAgICBlbnVtIFByZWZpeCB7IE5vUHJlZml4LCBIYXNoLCBIYXNoQ29udGV4dCwgSGFzaENv
bnRleHRTb3VyY2VUZXh0LAogICAgICAgICAgICAgICAgICBIYXNoQ29udGV4dFNvdXJjZVRleHRD
b21tZW50IH07CiAgICB2b2lkIHdyaXRlKCBRRGF0YVN0cmVhbSAmIHMsIGJvb2wgc3RyaXAgPSBG
QUxTRSwKICAgICAgICAgICAgICAgIFByZWZpeCBwcmVmaXggPSBIYXNoQ29udGV4dFNvdXJjZVRl
eHRDb21tZW50ICkgY29uc3Q7CiAgICBQcmVmaXggY29tbW9uUHJlZml4KCBjb25zdCBRVHJhbnNs
YXRvck1lc3NhZ2UmICkgY29uc3Q7CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRVHJhbnNs
YXRvck1lc3NhZ2UmIG0gKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVRyYW5z
bGF0b3JNZXNzYWdlJiBtICkgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj09KCBtICk7IH0K
ICAgIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2UmIG0gKSBjb25zdDsK
ICAgIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiBtICkgY29uc3QK
ICAgIHsgcmV0dXJuICFtLm9wZXJhdG9yPCggKnRoaXMgKTsgfQogICAgYm9vbCBvcGVyYXRvcj4o
IGNvbnN0IFFUcmFuc2xhdG9yTWVzc2FnZSYgbSApIGNvbnN0CiAgICB7IHJldHVybiBtLm9wZXJh
dG9yPCggKnRoaXMgKTsgfQogICAgYm9vbCBvcGVyYXRvcj49KCBjb25zdCBRVHJhbnNsYXRvck1l
c3NhZ2UmIG0gKSBjb25zdAogICAgeyByZXR1cm4gIW9wZXJhdG9yPCggbSApOyB9Cgpwcml2YXRl
OgogICAgdWludCBoOwogICAgUUNTdHJpbmcgY3g7CiAgICBRQ1N0cmluZyBzdDsKICAgIFFDU3Ry
aW5nIGNtOwogICAgUVN0cmluZyB0bjsKCiAgICBlbnVtIFRhZyB7IFRhZ19FbmQgPSAxLCBUYWdf
U291cmNlVGV4dDE2LCBUYWdfVHJhbnNsYXRpb24sIFRhZ19Db250ZXh0MTYsCiAgICAgICAgICAg
ICAgIFRhZ19IYXNoLCBUYWdfU291cmNlVGV4dCwgVGFnX0NvbnRleHQsIFRhZ19Db21tZW50LAog
ICAgICAgICAgICAgICBUYWdfT2Jzb2xldGUxIH07Cn07CgoKY2xhc3MgUVRyYW5zbGF0b3I6IHB1
YmxpYyBRT2JqZWN0CnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVj
dCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNo
YXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIq
ICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9v
bCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGlu
dCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0
KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMg
UVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3Ry
aW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0
YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKcHVibGljOgogICAgUVRyYW5zbGF0b3IoIFFPYmpl
Y3QgKiBwYXJlbnQsIGNvbnN0IGNoYXIgKiBuYW1lID0gMCApOwogICAgflFUcmFuc2xhdG9yKCk7
CgoKICAgIFFTdHJpbmcgZmluZCggY29uc3QgY2hhciAqY29udGV4dCwgY29uc3QgY2hhciAqc291
cmNlVGV4dCwgY29uc3QgY2hhciAqIGNvbW1lbnQgPSAwICkgY29uc3QgewogICAgICAgIHJldHVy
biBmaW5kTWVzc2FnZSggY29udGV4dCwgc291cmNlVGV4dCwgY29tbWVudCApLnRyYW5zbGF0aW9u
KCk7CiAgICB9CgogICAgdmlydHVhbCBRVHJhbnNsYXRvck1lc3NhZ2UgZmluZE1lc3NhZ2UoIGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICogKSBjb25zdDsKCiAgICBib29sIGxvYWQoIGNvbnN0IFFTdHJpbmcg
JiBmaWxlbmFtZSwKICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmIGRpcmVjdG9yeSA9IFFT
dHJpbmc6Om51bGwsCiAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJiBzZWFyY2hfZGVsaW1p
dGVycyA9IFFTdHJpbmc6Om51bGwsCiAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJiBzdWZm
aXggPSBRU3RyaW5nOjpudWxsICk7CgogICAgdm9pZCBjbGVhcigpOwoKCiAgICBlbnVtIFNhdmVN
b2RlIHsgRXZlcnl0aGluZywgU3RyaXBwZWQgfTsKCiAgICBib29sIHNhdmUoIGNvbnN0IFFTdHJp
bmcgJiBmaWxlbmFtZSwgU2F2ZU1vZGUgbW9kZSA9IEV2ZXJ5dGhpbmcgKTsKCiAgICB2b2lkIGlu
c2VydCggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiApOwogICAgdm9pZCBpbnNlcnQoIGNvbnN0
IGNoYXIgKmNvbnRleHQsIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsIGNvbnN0IFFTdHJpbmcgJnRy
YW5zbGF0aW9uICkgewogICAgICAgIGluc2VydCggUVRyYW5zbGF0b3JNZXNzYWdlKGNvbnRleHQs
IHNvdXJjZVRleHQsICIiLCB0cmFuc2xhdGlvbikgKTsKICAgIH0KICAgIHZvaWQgcmVtb3ZlKCBj
b25zdCBRVHJhbnNsYXRvck1lc3NhZ2UmICk7CiAgICB2b2lkIHJlbW92ZSggY29uc3QgY2hhciAq
Y29udGV4dCwgY29uc3QgY2hhciAqc291cmNlVGV4dCApIHsKICAgICAgICByZW1vdmUoIFFUcmFu
c2xhdG9yTWVzc2FnZShjb250ZXh0LCBzb3VyY2VUZXh0LCAiIikgKTsKICAgIH0KICAgIGJvb2wg
Y29udGFpbnMoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogY29tbWVu
dCA9IDAgKSBjb25zdDsKCiAgICB2b2lkIHNxdWVlemUoIFNhdmVNb2RlID0gRXZlcnl0aGluZyAp
OwogICAgdm9pZCB1bnNxdWVlemUoKTsKCiAgICBRVmFsdWVMaXN0PFFUcmFuc2xhdG9yTWVzc2Fn
ZT4gbWVzc2FnZXMoKSBjb25zdDsKCgpwcml2YXRlOgogICAgUVRyYW5zbGF0b3JQcml2YXRlICog
ZDsKCnByaXZhdGU6CgogICAgUVRyYW5zbGF0b3IoIGNvbnN0IFFUcmFuc2xhdG9yICYgKTsKICAg
IFFUcmFuc2xhdG9yICZvcGVyYXRvcj0oIGNvbnN0IFFUcmFuc2xhdG9yICYgKTsKCn07CiMgNDYg
Ii91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xYXBwbGljYXRpb24uaCIgMgoK
IyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXN0cmluZ2xpc3QuaCIg
MQojIDQ5ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXN0cmluZ2xpc3Qu
aCIKY2xhc3MgUVJlZ0V4cDsKCmNsYXNzIFFTdHJpbmdMaXN0IDogcHVibGljIFFWYWx1ZUxpc3Q8
UVN0cmluZz4KewpwdWJsaWM6CiAgICBRU3RyaW5nTGlzdCgpIHsgfQogICAgUVN0cmluZ0xpc3Qo
IGNvbnN0IFFTdHJpbmdMaXN0JiBsICkgOiBRVmFsdWVMaXN0PFFTdHJpbmc+KGwpIHsgfQogICAg
UVN0cmluZ0xpc3QoIGNvbnN0IFFWYWx1ZUxpc3Q8UVN0cmluZz4mIGwgKSA6IFFWYWx1ZUxpc3Q8
UVN0cmluZz4obCkgeyB9CiAgICBRU3RyaW5nTGlzdCggY29uc3QgUVN0cmluZyYgaSApIHsgYXBw
ZW5kKGkpOyB9CgogICAgUVN0cmluZ0xpc3QoIGNvbnN0IGNoYXIqIGkgKSB7IGFwcGVuZChpKTsg
fQoKCiAgICBzdGF0aWMgUVN0cmluZ0xpc3QgZnJvbVN0ckxpc3QoY29uc3QgUVN0ckxpc3QmKTsK
CiAgICB2b2lkIHNvcnQoKTsKCiAgICBzdGF0aWMgUVN0cmluZ0xpc3Qgc3BsaXQoIGNvbnN0IFFT
dHJpbmcgJnNlcCwgY29uc3QgUVN0cmluZyAmc3RyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0g
RkFMU0UgKTsKICAgIHN0YXRpYyBRU3RyaW5nTGlzdCBzcGxpdCggY29uc3QgUUNoYXIgJnNlcCwg
Y29uc3QgUVN0cmluZyAmc3RyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gRkFMU0UgKTsKCiAg
ICBzdGF0aWMgUVN0cmluZ0xpc3Qgc3BsaXQoIGNvbnN0IFFSZWdFeHAgJnNlcCwgY29uc3QgUVN0
cmluZyAmc3RyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gRkFMU0UgKTsKCiAgICBRU3RyaW5n
IGpvaW4oIGNvbnN0IFFTdHJpbmcgJnNlcCApIGNvbnN0OwoKICAgIFFTdHJpbmdMaXN0IGdyZXAo
IGNvbnN0IFFTdHJpbmcgJnN0ciwgYm9vbCBjcyA9IFRSVUUgKSBjb25zdDsKCiAgICBRU3RyaW5n
TGlzdCBncmVwKCBjb25zdCBRUmVnRXhwICZleHByICkgY29uc3Q7Cgp9OwoKCmNsYXNzIFFEYXRh
U3RyZWFtOwpleHRlcm4gUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFT
dHJpbmdMaXN0JiApOwpleHRlcm4gUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFt
ICYsIGNvbnN0IFFTdHJpbmdMaXN0JiApOwojIDQ4ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMu
MC42L2luY2x1ZGUvcWFwcGxpY2F0aW9uLmgiIDIKCgpjbGFzcyBRU2Vzc2lvbk1hbmFnZXI7CmNs
YXNzIFFTdHlsZTsKY2xhc3MgUVRyYW5zbGF0b3I7CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgdHlwZT4g
Y2xhc3MgUVB0ckxpc3Q7CgpjbGFzcyBRQXBwbGljYXRpb247CmV4dGVybiBRQXBwbGljYXRpb24g
KnFBcHA7CgoKCgoKCmNsYXNzIFFBcHBsaWNhdGlvbiA6IHB1YmxpYyBRT2JqZWN0CnsKICAgIHB1
YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0
OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9p
bnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2Jq
ZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCwgaW50LCBRVmFyaWFudCogKTsg
c3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3Qo
KSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0
YU9iajsKcHVibGljOgogICAgUUFwcGxpY2F0aW9uKCBpbnQgJmFyZ2MsIGNoYXIgKiphcmd2KTsK
ICAgIFFBcHBsaWNhdGlvbiggaW50ICZhcmdjLCBjaGFyICoqYXJndiwgYm9vbCBHVUllbmFibGVk
ICk7CiAgICBlbnVtIFR5cGUgeyBUdHksIEd1aUNsaWVudCwgR3VpU2VydmVyIH07CiAgICBRQXBw
bGljYXRpb24oIGludCAmYXJnYywgY2hhciAqKmFyZ3YsIFR5cGUgKTsKCiAgICBRQXBwbGljYXRp
b24oIERpc3BsYXkqIGRweSwgSEFORExFIHZpc3VhbCA9IDAsIEhBTkRMRSBjbWFwID0gMCApOwog
ICAgUUFwcGxpY2F0aW9uKCBEaXNwbGF5ICpkcHksIGludCBhcmdjLCBjaGFyICoqYXJndiwKICAg
ICAgICAgICAgICAgICAgSEFORExFIHZpc3VhbCA9IDAsIEhBTkRMRSBjbWFwPSAwICk7CgogICAg
dmlydHVhbCB+UUFwcGxpY2F0aW9uKCk7CgogICAgaW50IGFyZ2MoKSBjb25zdDsKICAgIGNoYXIg
Kiphcmd2KCkgY29uc3Q7CgogICAgVHlwZSB0eXBlKCkgY29uc3Q7CgoKICAgIHN0YXRpYyBRU3R5
bGUgJnN0eWxlKCk7CiAgICBzdGF0aWMgdm9pZCBzZXRTdHlsZSggUVN0eWxlKiApOwogICAgc3Rh
dGljIFFTdHlsZSogc2V0U3R5bGUoIGNvbnN0IFFTdHJpbmcmICk7CgoKICAgIGVudW0gQ29sb3JN
b2RlIHsgTm9ybWFsQ29sb3JzLCBDdXN0b21Db2xvcnMgfTsKICAgIHN0YXRpYyBDb2xvck1vZGUg
Y29sb3JNb2RlKCk7CiAgICBzdGF0aWMgdm9pZCBzZXRDb2xvck1vZGUoIFFBcHBsaWNhdGlvbjo6
Q29sb3JNb2RlICk7CgoKICAgIGVudW0gQ29sb3JTcGVjIHsgTm9ybWFsQ29sb3I9MCwgQ3VzdG9t
Q29sb3I9MSwgTWFueUNvbG9yPTIgfTsKICAgIHN0YXRpYyBpbnQgY29sb3JTcGVjKCk7CiAgICBz
dGF0aWMgdm9pZCBzZXRDb2xvclNwZWMoIGludCApOwoKICAgIHN0YXRpYyBRQ3Vyc29yICpvdmVy
cmlkZUN1cnNvcigpOwogICAgc3RhdGljIHZvaWQgc2V0T3ZlcnJpZGVDdXJzb3IoIGNvbnN0IFFD
dXJzb3IgJiwgYm9vbCByZXBsYWNlPUZBTFNFICk7CiAgICBzdGF0aWMgdm9pZCByZXN0b3JlT3Zl
cnJpZGVDdXJzb3IoKTsKCiAgICBzdGF0aWMgYm9vbCBoYXNHbG9iYWxNb3VzZVRyYWNraW5nKCk7
CiAgICBzdGF0aWMgdm9pZCBzZXRHbG9iYWxNb3VzZVRyYWNraW5nKCBib29sIGVuYWJsZSApOwoK
ICAgIHN0YXRpYyBRUGFsZXR0ZSBwYWxldHRlKCBjb25zdCBRV2lkZ2V0KiA9IDAgKTsKICAgIHN0
YXRpYyB2b2lkIHNldFBhbGV0dGUoIGNvbnN0IFFQYWxldHRlICYsIGJvb2wgaW5mb3JtV2lkZ2V0
cz1GQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY2xh
c3NOYW1lID0gMCApOwoKICAgIHN0YXRpYyBRRm9udCBmb250KCBjb25zdCBRV2lkZ2V0KiA9IDAg
KTsKICAgIHN0YXRpYyB2b2lkIHNldEZvbnQoIGNvbnN0IFFGb250ICYsIGJvb2wgaW5mb3JtV2lk
Z2V0cz1GQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY2xh
c3NOYW1lID0gMCApOwogICAgc3RhdGljIFFGb250TWV0cmljcyBmb250TWV0cmljcygpOwoKICAg
IFFXaWRnZXQgKm1haW5XaWRnZXQoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRNYWluV2lk
Z2V0KCBRV2lkZ2V0ICogKTsKICAgIHZpcnR1YWwgdm9pZCBwb2xpc2goIFFXaWRnZXQgKiApOwoK
ICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqYWxsV2lkZ2V0cygpOwogICAgc3RhdGljIFFXaWRnZXRM
aXN0ICp0b3BMZXZlbFdpZGdldHMoKTsKCiAgICBzdGF0aWMgUURlc2t0b3BXaWRnZXQgKmRlc2t0
b3AoKTsKCiAgICBzdGF0aWMgUVdpZGdldCAqYWN0aXZlUG9wdXBXaWRnZXQoKTsKICAgIHN0YXRp
YyBRV2lkZ2V0ICphY3RpdmVNb2RhbFdpZGdldCgpOwoKICAgIHN0YXRpYyBRQ2xpcGJvYXJkICpj
bGlwYm9hcmQoKTsKCiAgICBRV2lkZ2V0ICpmb2N1c1dpZGdldCgpIGNvbnN0OwogICAgUVdpZGdl
dCAqYWN0aXZlV2luZG93KCkgY29uc3Q7CgogICAgc3RhdGljIFFXaWRnZXQgKndpZGdldEF0KCBp
bnQgeCwgaW50IHksIGJvb2wgY2hpbGQ9RkFMU0UgKTsKICAgIHN0YXRpYyBRV2lkZ2V0ICp3aWRn
ZXRBdCggY29uc3QgUVBvaW50ICYsIGJvb2wgY2hpbGQ9RkFMU0UgKTsKCiAgICBpbnQgZXhlYygp
OwogICAgdm9pZCBwcm9jZXNzRXZlbnRzKCk7CiAgICB2b2lkIHByb2Nlc3NFdmVudHMoIGludCBt
YXh0aW1lICk7CiAgICB2b2lkIHByb2Nlc3NPbmVFdmVudCgpOwogICAgYm9vbCBoYXNQZW5kaW5n
RXZlbnRzKCk7CiAgICBpbnQgZW50ZXJfbG9vcCgpOwogICAgdm9pZCBleGl0X2xvb3AoKTsKICAg
IGludCBsb29wTGV2ZWwoKSBjb25zdDsKICAgIHN0YXRpYyB2b2lkIGV4aXQoIGludCByZXRjb2Rl
PTAgKTsKCiAgICBzdGF0aWMgYm9vbCBzZW5kRXZlbnQoIFFPYmplY3QgKnJlY2VpdmVyLCBRRXZl
bnQgKmV2ZW50ICk7CiAgICBzdGF0aWMgdm9pZCBwb3N0RXZlbnQoIFFPYmplY3QgKnJlY2VpdmVy
LCBRRXZlbnQgKmV2ZW50ICk7CiAgICBzdGF0aWMgdm9pZCBzZW5kUG9zdGVkRXZlbnRzKCBRT2Jq
ZWN0ICpyZWNlaXZlciwgaW50IGV2ZW50X3R5cGUgKTsKICAgIHN0YXRpYyB2b2lkIHNlbmRQb3N0
ZWRFdmVudHMoKTsKCiAgICBzdGF0aWMgdm9pZCByZW1vdmVQb3N0ZWRFdmVudHMoIFFPYmplY3Qg
KnJlY2VpdmVyICk7CgogICAgdmlydHVhbCBib29sIG5vdGlmeSggUU9iamVjdCAqLCBRRXZlbnQg
KiApOwoKICAgIHN0YXRpYyBib29sIHN0YXJ0aW5nVXAoKTsKICAgIHN0YXRpYyBib29sIGNsb3Np
bmdEb3duKCk7CgogICAgc3RhdGljIHZvaWQgZmx1c2hYKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVz
aCgpOwogICAgc3RhdGljIHZvaWQgc3luY1goKTsKCiAgICBzdGF0aWMgdm9pZCBiZWVwKCk7CgoK
ICAgIHZvaWQgc2V0RGVmYXVsdENvZGVjKCBRVGV4dENvZGVjICogKTsKICAgIFFUZXh0Q29kZWMq
IGRlZmF1bHRDb2RlYygpIGNvbnN0OwogICAgdm9pZCBpbnN0YWxsVHJhbnNsYXRvciggUVRyYW5z
bGF0b3IgKiApOwogICAgdm9pZCByZW1vdmVUcmFuc2xhdG9yKCBRVHJhbnNsYXRvciAqICk7Cgog
ICAgZW51bSBFbmNvZGluZyB7IERlZmF1bHRDb2RlYywgVW5pY29kZVVURjggfTsKICAgIFFTdHJp
bmcgdHJhbnNsYXRlKCBjb25zdCBjaGFyICogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICoga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKiBjb21tZW50ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFbmNvZGluZyBlbmNvZGluZyA9IERlZmF1bHRDb2RlYyApIGNvbnN0OwoKCiAgICBzdGF0
aWMgdm9pZCBzZXRXaW5TdHlsZUhpZ2hsaWdodENvbG9yKCBjb25zdCBRQ29sb3IgJmMgKSB7CiAg
ICAgICAgUVBhbGV0dGUgcCggcGFsZXR0ZSgpICk7CiAgICAgICAgcC5zZXRDb2xvciggUUNvbG9y
R3JvdXA6OkhpZ2hsaWdodCwgYyApOwogICAgICAgIHNldFBhbGV0dGUoIHAsIFRSVUUpOwogICAg
fQogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmd2luU3R5bGVIaWdobGlnaHRDb2xvcigpIHsKICAg
ICAgICByZXR1cm4gcGFsZXR0ZSgpLmFjdGl2ZSgpLmhpZ2hsaWdodCgpOwogICAgfQoKICAgIHN0
YXRpYyB2b2lkIHNldERlc2t0b3BTZXR0aW5nc0F3YXJlKCBib29sICk7CiAgICBzdGF0aWMgYm9v
bCBkZXNrdG9wU2V0dGluZ3NBd2FyZSgpOwoKICAgIHN0YXRpYyB2b2lkIHNldEN1cnNvckZsYXNo
VGltZSggaW50ICk7CiAgICBzdGF0aWMgaW50IGN1cnNvckZsYXNoVGltZSgpOwoKICAgIHN0YXRp
YyB2b2lkIHNldERvdWJsZUNsaWNrSW50ZXJ2YWwoIGludCApOwogICAgc3RhdGljIGludCBkb3Vi
bGVDbGlja0ludGVydmFsKCk7CgogICAgc3RhdGljIHZvaWQgc2V0V2hlZWxTY3JvbGxMaW5lcygg
aW50ICk7CiAgICBzdGF0aWMgaW50IHdoZWVsU2Nyb2xsTGluZXMoKTsKCiAgICBzdGF0aWMgdm9p
ZCBzZXRHbG9iYWxTdHJ1dCggY29uc3QgUVNpemUgJiApOwogICAgc3RhdGljIFFTaXplIGdsb2Jh
bFN0cnV0KCk7CgoKICAgIHN0YXRpYyB2b2lkIHNldExpYnJhcnlQYXRocyhjb25zdCBRU3RyaW5n
TGlzdCAmKTsKICAgIHN0YXRpYyBRU3RyaW5nTGlzdCBsaWJyYXJ5UGF0aHMoKTsKICAgIHN0YXRp
YyB2b2lkIGFkZExpYnJhcnlQYXRoKGNvbnN0IFFTdHJpbmcgJik7CiAgICBzdGF0aWMgdm9pZCBy
ZW1vdmVMaWJyYXJ5UGF0aChjb25zdCBRU3RyaW5nICYpOwoKICAgIHN0YXRpYyB2b2lkIHNldFN0
YXJ0RHJhZ1RpbWUoIGludCBtcyApOwogICAgc3RhdGljIGludCBzdGFydERyYWdUaW1lKCk7CiAg
ICBzdGF0aWMgdm9pZCBzZXRTdGFydERyYWdEaXN0YW5jZSggaW50IGwgKTsKICAgIHN0YXRpYyBp
bnQgc3RhcnREcmFnRGlzdGFuY2UoKTsKCiAgICBzdGF0aWMgdm9pZCBzZXRSZXZlcnNlTGF5b3V0
KCBib29sIGIgKTsKICAgIHN0YXRpYyBib29sIHJldmVyc2VMYXlvdXQoKTsKCiAgICBzdGF0aWMg
aW50IGhvcml6b250YWxBbGlnbm1lbnQoIGludCBhbGlnbiApOwoKICAgIHN0YXRpYyBib29sIGlz
RWZmZWN0RW5hYmxlZCggUXQ6OlVJRWZmZWN0ICk7CiAgICBzdGF0aWMgdm9pZCBzZXRFZmZlY3RF
bmFibGVkKCBRdDo6VUlFZmZlY3QsIGJvb2wgZW5hYmxlID0gVFJVRSApOwojIDIyOSAiL3Vzci9s
b2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FhcHBsaWNhdGlvbi5oIgogICAgdmlydHVh
bCBib29sIHgxMUV2ZW50RmlsdGVyKCBYRXZlbnQgKiApOwogICAgdmlydHVhbCBpbnQgeDExQ2xp
ZW50TWVzc2FnZSggUVdpZGdldCosIFhFdmVudCosIGJvb2wgcGFzc2l2ZV9vbmx5KTsKICAgIGlu
dCB4MTFQcm9jZXNzRXZlbnQoIFhFdmVudCogKTsKIyAyNTMgIi91c3IvbG9jYWwvcXQteDExLWZy
ZWUtMy4wLjYvaW5jbHVkZS9xYXBwbGljYXRpb24uaCIKICAgIGJvb2wgaXNTZXNzaW9uUmVzdG9y
ZWQoKSBjb25zdDsKICAgIFFTdHJpbmcgc2Vzc2lvbklkKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZv
aWQgY29tbWl0RGF0YSggUVNlc3Npb25NYW5hZ2VyJiBzbSApOwogICAgdmlydHVhbCB2b2lkIHNh
dmVTdGF0ZSggUVNlc3Npb25NYW5hZ2VyJiBzbSApOwoKCiAgICBzdGF0aWMgdm9pZCBjcmVhdGVf
eGltKCk7CiAgICBzdGF0aWMgdm9pZCBjbG9zZV94aW0oKTsKICAgIHN0YXRpYyBib29sIHgxMV9h
cHBseV9zZXR0aW5ncygpOwoKICAgIHZvaWQgd2FrZVVwR3VpVGhyZWFkKCk7CgoKCgoKCgpwcm90
ZWN0ZWQ6CiAgICB2b2lkIGxhc3RXaW5kb3dDbG9zZWQoKTsKICAgIHZvaWQgYWJvdXRUb1F1aXQo
KTsKICAgIHZvaWQgZ3VpVGhyZWFkQXdha2UoKTsKCnB1YmxpYyA6CiAgICB2b2lkIHF1aXQoKTsK
ICAgIHZvaWQgY2xvc2VBbGxXaW5kb3dzKCk7Cgpwcml2YXRlOgogICAgdm9pZCBjb25zdHJ1Y3Qo
IGludCAmYXJnYywgY2hhciAqKmFyZ3YsIFR5cGUgKTsKICAgIGJvb2wgcHJvY2Vzc05leHRFdmVu
dCggYm9vbCApOwogICAgdm9pZCBpbml0aWFsaXplKCBpbnQsIGNoYXIgKiogKTsKICAgIHZvaWQg
aW5pdF9wcmVjbWRsaW5lKCk7CiAgICB2b2lkIHByb2Nlc3NfY21kbGluZSggaW50KiBhcmdjcHRy
LCBjaGFyICoqIGFyZ3YgKTsKICAgIGJvb2wgaW50ZXJuYWxOb3RpZnkoIFFPYmplY3QgKiwgUUV2
ZW50ICogKTsKIyAzMDggIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xYXBw
bGljYXRpb24uaCIKICAgIGludCBhcHBfYXJnYzsKICAgIGNoYXIgKiphcHBfYXJndjsKICAgIGJv
b2wgcXVpdF9ub3c7CiAgICBpbnQgcXVpdF9jb2RlOwogICAgc3RhdGljIFFTdHlsZSAqYXBwX3N0
eWxlOwogICAgc3RhdGljIGludCBhcHBfY3NwZWM7CgogICAgc3RhdGljIFFQYWxldHRlICphcHBf
cGFsOwoKICAgIHN0YXRpYyBRRm9udCAqYXBwX2ZvbnQ7CgogICAgc3RhdGljIFFDdXJzb3IgKmFw
cF9jdXJzb3I7CgogICAgc3RhdGljIGludCBhcHBfdHJhY2tpbmc7CiAgICBzdGF0aWMgYm9vbCBp
c19hcHBfcnVubmluZzsKICAgIHN0YXRpYyBib29sIGlzX2FwcF9jbG9zaW5nOwogICAgc3RhdGlj
IGJvb2wgYXBwX2V4aXRfbG9vcDsKICAgIHN0YXRpYyBpbnQgbG9vcF9sZXZlbDsKICAgIHN0YXRp
YyBRV2lkZ2V0ICptYWluX3dpZGdldDsKICAgIHN0YXRpYyBRV2lkZ2V0ICpmb2N1c193aWRnZXQ7
CiAgICBzdGF0aWMgUVdpZGdldCAqYWN0aXZlX3dpbmRvdzsKICAgIHN0YXRpYyBib29sIG9iZXlf
ZGVza3RvcF9zZXR0aW5nczsKICAgIHN0YXRpYyBpbnQgY3Vyc29yX2ZsYXNoX3RpbWU7CiAgICBz
dGF0aWMgaW50IG1vdXNlX2RvdWJsZV9jbGlja190aW1lOwogICAgc3RhdGljIGludCB3aGVlbF9z
Y3JvbGxfbGluZXM7CgogICAgc3RhdGljIGJvb2wgYW5pbWF0ZV91aTsKICAgIHN0YXRpYyBib29s
IGFuaW1hdGVfbWVudTsKICAgIHN0YXRpYyBib29sIGFuaW1hdGVfdG9vbHRpcDsKICAgIHN0YXRp
YyBib29sIGFuaW1hdGVfY29tYm87CiAgICBzdGF0aWMgYm9vbCBmYWRlX21lbnU7CiAgICBzdGF0
aWMgYm9vbCBmYWRlX3Rvb2x0aXA7CgogICAgUVB0ckxpc3Q8UVRyYW5zbGF0b3I+ICp0cmFuc2xh
dG9yczsKCiAgICBRU2Vzc2lvbk1hbmFnZXIgKnNlc3Npb25fbWFuYWdlcjsKICAgIFFTdHJpbmcg
c2Vzc2lvbl9pZDsKICAgIGJvb2wgaXNfc2Vzc2lvbl9yZXN0b3JlZDsKCgogICAgc3RhdGljIHZv
aWQgeDExX2luaXRpYWxpemVfc3R5bGUoKTsKCgogICAgc3RhdGljIFFTaXplIGFwcF9zdHJ1dDsK
CiAgICBzdGF0aWMgUVN0cmluZ0xpc3QgKmFwcF9saWJwYXRoczsKCiAgICBzdGF0aWMgUUFzY2lp
RGljdDxRUGFsZXR0ZT4gKmFwcF9wYWxldHRlczsKICAgIHN0YXRpYyBRQXNjaWlEaWN0PFFGb250
PiAqYXBwX2ZvbnRzOwoKICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqcG9wdXBXaWRnZXRzOwogICAg
Ym9vbCBpblBvcHVwTW9kZSgpIGNvbnN0OwogICAgdm9pZCBjbG9zZVBvcHVwKCBRV2lkZ2V0ICpw
b3B1cCApOwogICAgdm9pZCBvcGVuUG9wdXAoIFFXaWRnZXQgKnBvcHVwICk7CiAgICB2b2lkIHNl
dEFjdGl2ZVdpbmRvdyggUVdpZGdldCogYWN0ICk7CgogICAgc3RhdGljIGJvb2wgc2VuZFNwb250
YW5lb3VzRXZlbnQoIFFPYmplY3QgKnJlY2VpdmVyLCBRRXZlbnQgKmV2ZW50ICk7CiAgICBzdGF0
aWMgdm9pZCByZW1vdmVQb3N0ZWRFdmVudCggUUV2ZW50ICogKTsKCiAgICBmcmllbmQgY2xhc3Mg
UVdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRRVRXaWRnZXQ7CiAgICBmcmllbmQgY2xhc3MgUUV2
ZW50OwogICAgZnJpZW5kIHZvaWQgcXRfdWNtX2luaXRpYWxpemUoIFFBcHBsaWNhdGlvbiAqICk7
CgoKCgpwcml2YXRlOgoKICAgIFFBcHBsaWNhdGlvbiggY29uc3QgUUFwcGxpY2F0aW9uICYgKTsK
ICAgIFFBcHBsaWNhdGlvbiAmb3BlcmF0b3I9KCBjb25zdCBRQXBwbGljYXRpb24gJiApOwoKfTsK
CmlubGluZSBpbnQgUUFwcGxpY2F0aW9uOjphcmdjKCkgY29uc3QKewogICAgcmV0dXJuIGFwcF9h
cmdjOwp9CgppbmxpbmUgY2hhciAqKlFBcHBsaWNhdGlvbjo6YXJndigpIGNvbnN0CnsKICAgIHJl
dHVybiBhcHBfYXJndjsKfQoKaW5saW5lIFFDdXJzb3IgKlFBcHBsaWNhdGlvbjo6b3ZlcnJpZGVD
dXJzb3IoKQp7CiAgICByZXR1cm4gYXBwX2N1cnNvcjsKfQoKaW5saW5lIGJvb2wgUUFwcGxpY2F0
aW9uOjpoYXNHbG9iYWxNb3VzZVRyYWNraW5nKCkKewogICAgcmV0dXJuIGFwcF90cmFja2luZyA+
IDA7Cn0KCmlubGluZSBRV2lkZ2V0ICpRQXBwbGljYXRpb246Om1haW5XaWRnZXQoKSBjb25zdAp7
CiAgICByZXR1cm4gbWFpbl93aWRnZXQ7Cn0KCmlubGluZSBRV2lkZ2V0ICpRQXBwbGljYXRpb246
OmZvY3VzV2lkZ2V0KCkgY29uc3QKewogICAgcmV0dXJuIGZvY3VzX3dpZGdldDsKfQoKaW5saW5l
IFFXaWRnZXQgKlFBcHBsaWNhdGlvbjo6YWN0aXZlV2luZG93KCkgY29uc3QKewogICAgcmV0dXJu
IGFjdGl2ZV93aW5kb3c7Cn0KCmlubGluZSBRV2lkZ2V0ICpRQXBwbGljYXRpb246OndpZGdldEF0
KCBjb25zdCBRUG9pbnQgJnAsIGJvb2wgY2hpbGQgKQp7CiAgICByZXR1cm4gd2lkZ2V0QXQoIHAu
eCgpLCBwLnkoKSwgY2hpbGQgKTsKfQoKaW5saW5lIGJvb2wgUUFwcGxpY2F0aW9uOjppblBvcHVw
TW9kZSgpIGNvbnN0CnsKICAgIHJldHVybiBwb3B1cFdpZGdldHMgIT0gMDsKfQoKaW5saW5lIGJv
b2wgUUFwcGxpY2F0aW9uOjppc1Nlc3Npb25SZXN0b3JlZCgpIGNvbnN0CnsKICAgIHJldHVybiBp
c19zZXNzaW9uX3Jlc3RvcmVkOwp9CgppbmxpbmUgUVN0cmluZyBRQXBwbGljYXRpb246OnNlc3Np
b25JZCgpIGNvbnN0CnsKICAgIHJldHVybiBzZXNzaW9uX2lkOwp9CgppbmxpbmUgUVNpemUgUUFw
cGxpY2F0aW9uOjpnbG9iYWxTdHJ1dCgpCnsKICAgIHJldHVybiBhcHBfc3RydXQ7Cn0KCmlubGlu
ZSBib29sIFFBcHBsaWNhdGlvbjo6c2VuZEV2ZW50KCBRT2JqZWN0ICpyZWNlaXZlciwgUUV2ZW50
ICpldmVudCApCnsgcmV0dXJuIHFBcHAgPyBxQXBwLT5ub3RpZnkoIHJlY2VpdmVyLCBldmVudCAp
IDogRkFMU0U7IH0KCmlubGluZSBib29sIFFBcHBsaWNhdGlvbjo6c2VuZFNwb250YW5lb3VzRXZl
bnQoIFFPYmplY3QgKnJlY2VpdmVyLCBRRXZlbnQgKmV2ZW50ICkKeyBpZiAoIGV2ZW50ICkgZXZl
bnQtPnNwb250ID0gVFJVRTsgcmV0dXJuIHFBcHAgPyBxQXBwLT5ub3RpZnkoIHJlY2VpdmVyLCBl
dmVudCApIDogRkFMU0U7IH0KIyA0NjIgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5j
bHVkZS9xYXBwbGljYXRpb24uaCIKaW5saW5lIGludCBRQXBwbGljYXRpb246Omhvcml6b250YWxB
bGlnbm1lbnQoIGludCBhbGlnbiApCnsKICAgIGFsaWduICY9IEFsaWduSG9yaXpvbnRhbF9NYXNr
OwogICAgaWYgKCBhbGlnbiA9PSBBbGlnbkF1dG8gKSB7CiAgICAgICAgaWYgKCByZXZlcnNlTGF5
b3V0KCkgKQogICAgICAgICAgICBhbGlnbiA9IEFsaWduUmlnaHQ7CiAgICAgICAgZWxzZQogICAg
ICAgICAgICBhbGlnbiA9IEFsaWduTGVmdDsKICAgIH0KICAgIHJldHVybiBhbGlnbjsKfQojIDE0
ICJtb2NfdGltZWxhYmVsLmNwcCIgMgoKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42
L2luY2x1ZGUvcHJpdmF0ZS9xdWNvbWV4dHJhX3AuaCIgMQojIDQyICIvdXNyL2xvY2FsL3F0LXgx
MS1mcmVlLTMuMC42L2luY2x1ZGUvcHJpdmF0ZS9xdWNvbWV4dHJhX3AuaCIKIyAxICIvdXNyL2xv
Y2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcHJpdmF0ZS9xdWNvbV9wLmgiIDEKIyA0MyAi
L3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3ByaXZhdGUvcXVjb21fcC5oIgoj
IDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xdXVpZC5oIiAxCiMgNjAg
Ii91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xdXVpZC5oIgpzdHJ1Y3QgUVV1
aWQKewogICAgUVV1aWQoKQogICAgewogICAgICAgIG1lbXNldCggdGhpcywgMCwgc2l6ZW9mKFFV
dWlkKSApOwogICAgfQogICAgUVV1aWQoIHVpbnQgbCwgdXNob3J0IHcxLCB1c2hvcnQgdzIsIHVj
aGFyIGIxLCB1Y2hhciBiMiwgdWNoYXIgYjMsIHVjaGFyIGI0LCB1Y2hhciBiNSwgdWNoYXIgYjYs
IHVjaGFyIGI3LCB1Y2hhciBiOCApCiAgICB7CiAgICAgICAgZGF0YTEgPSBsOwogICAgICAgIGRh
dGEyID0gdzE7CiAgICAgICAgZGF0YTMgPSB3MjsKICAgICAgICBkYXRhNFswXSA9IGIxOwogICAg
ICAgIGRhdGE0WzFdID0gYjI7CiAgICAgICAgZGF0YTRbMl0gPSBiMzsKICAgICAgICBkYXRhNFsz
XSA9IGI0OwogICAgICAgIGRhdGE0WzRdID0gYjU7CiAgICAgICAgZGF0YTRbNV0gPSBiNjsKICAg
ICAgICBkYXRhNFs2XSA9IGI3OwogICAgICAgIGRhdGE0WzddID0gYjg7CiAgICB9CiAgICBRVXVp
ZCggY29uc3QgUVV1aWQgJnV1aWQgKQogICAgewogICAgICAgIG1lbWNweSggdGhpcywgJnV1aWQs
IHNpemVvZihRVXVpZCkgKTsKICAgIH0KCiAgICBRVXVpZCggY29uc3QgUVN0cmluZyAmICk7CiAg
ICBRU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAgICBvcGVyYXRvciBRU3RyaW5nKCkgY29uc3Qg
eyByZXR1cm4gdG9TdHJpbmcoKTsgfQoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CgogICAgUVV1
aWQgJm9wZXJhdG9yPShjb25zdCBRVXVpZCAmb3JpZyApCiAgICB7CiAgICAgICAgbWVtY3B5KCB0
aGlzLCAmb3JpZywgc2l6ZW9mKFFVdWlkKSApOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUVV1aWQgJm9yaWcgKSBjb25zdAogICAgewogICAg
ICAgIHVpbnQgaTsKICAgICAgICBpZiAoIGRhdGExICE9IG9yaWcuZGF0YTEgfHwgZGF0YTIgIT0g
b3JpZy5kYXRhMiB8fAogICAgICAgICAgICAgZGF0YTMgIT0gb3JpZy5kYXRhMyApCiAgICAgICAg
ICAgIHJldHVybiBGQUxTRTsKCiAgICAgICAgZm9yKCBpID0gMDsgaSA8IDg7IGkrKyApCiAgICAg
ICAgICAgIGlmICggZGF0YTRbaV0gIT0gb3JpZy5kYXRhNFtpXSApCiAgICAgICAgICAgICAgICBy
ZXR1cm4gRkFMU0U7CgogICAgICAgIHJldHVybiBUUlVFOwogICAgfQoKICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBRVXVpZCAmb3JpZyApIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuICEoICp0
aGlzID09IG9yaWcgKTsKICAgIH0KIyAxNTYgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYv
aW5jbHVkZS9xdXVpZC5oIgogICAgdWludCBkYXRhMTsKICAgIHVzaG9ydCBkYXRhMjsKICAgIHVz
aG9ydCBkYXRhMzsKICAgIHVjaGFyIGRhdGE0WyA4IF07Cn07CiMgNDQgIi91c3IvbG9jYWwvcXQt
eDExLWZyZWUtMy4wLjYvaW5jbHVkZS9wcml2YXRlL3F1Y29tX3AuaCIgMgojIDYyICIvdXNyL2xv
Y2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcHJpdmF0ZS9xdWNvbV9wLmgiCnN0cnVjdCBR
VU9iamVjdDsKc3RydWN0IFFVSW50ZXJmYWNlRGVzY3JpcHRpb247CnN0cnVjdCBRVW5rbm93bklu
dGVyZmFjZTsKc3RydWN0IFFEaXNwYXRjaEludGVyZmFjZTsKCgpzdHJ1Y3QgUVVCdWZmZXIKewog
ICAgdmlydHVhbCBsb25nIHJlYWQoIGNoYXIgKmRhdGEsIHVsb25nIG1heGxlbiApID0gMDsKICAg
IHZpcnR1YWwgbG9uZyB3cml0ZSggY29uc3QgY2hhciAqZGF0YSwgdWxvbmcgbGVuICkgPSAwOwp9
OwoKCgpzdHJ1Y3QgUVVUeXBlCnsKICAgIHZpcnR1YWwgY29uc3QgUVV1aWQgKnV1aWQoKSBjb25z
dCA9IDA7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKmRlc2MoKSBjb25zdCA9IDA7CgoKICAgIHZp
cnR1YWwgYm9vbCBjYW5Db252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKSA9IDA7Cgog
ICAgdmlydHVhbCBib29sIGNhbkNvbnZlcnRUbyggUVVPYmplY3QgKiwgUVVUeXBlICogKSA9IDA7
CgoKICAgIHZpcnR1YWwgYm9vbCBjb252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKSA9
IDA7CgogICAgdmlydHVhbCBib29sIGNvbnZlcnRUbyggUVVPYmplY3QgKiwgUVVUeXBlICogKSA9
IDA7CgogICAgdmlydHVhbCB2b2lkIGNsZWFyKCBRVU9iamVjdCAqICkgPSAwOwoKICAgIHZpcnR1
YWwgaW50IHNlcmlhbGl6ZVRvKCBRVU9iamVjdCAqLCBRVUJ1ZmZlciAqICkgPSAwOwogICAgdmly
dHVhbCBpbnQgc2VyaWFsaXplRnJvbSggUVVPYmplY3QgKiwgUVVCdWZmZXIgKiApID0gMDsKCiAg
ICBzdGF0aWMgYm9vbCBpc0VxdWFsKCBjb25zdCBRVVR5cGUgKnQxLCBjb25zdCBRVVR5cGUgKnQy
ICk7CiAgICBzdGF0aWMgYm9vbCBjaGVjayggUVVPYmplY3QqIG8sIFFVVHlwZSogdCApOwp9OwoK
CgpleHRlcm4gY29uc3QgUVV1aWQgVElEX1FVVHlwZV9OdWxsOwpzdHJ1Y3QgUVVUeXBlX051bGwg
OiBwdWJsaWMgUVVUeXBlCnsKICAgIGNvbnN0IFFVdWlkICp1dWlkKCkgY29uc3Q7CiAgICBjb25z
dCBjaGFyICpkZXNjKCkgY29uc3Q7CgogICAgYm9vbCBjYW5Db252ZXJ0RnJvbSggUVVPYmplY3Qg
KiwgUVVUeXBlICogKTsKICAgIGJvb2wgY2FuQ29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUg
KiApOwogICAgYm9vbCBjb252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJv
b2wgY29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiApOwogICAgdm9pZCBjbGVhciggUVVP
YmplY3QgKiApOwogICAgaW50IHNlcmlhbGl6ZVRvKCBRVU9iamVjdCAqLCBRVUJ1ZmZlciAqICk7
CiAgICBpbnQgc2VyaWFsaXplRnJvbSggUVVPYmplY3QgKiwgUVVCdWZmZXIgKiApOwp9OwpleHRl
cm4gUVVUeXBlX051bGwgc3RhdGljX1FVVHlwZV9OdWxsOwoKCgpzdHJ1Y3QgUVVPYmplY3QKewpw
dWJsaWM6CiAgICBRVU9iamVjdCgpIDogdHlwZSggJnN0YXRpY19RVVR5cGVfTnVsbCApIHt9CiAg
ICB+UVVPYmplY3QoKSB7IHR5cGUtPmNsZWFyKCB0aGlzICk7IH0KCiAgICBRVVR5cGUgKnR5cGU7
CgoKICAgIHVuaW9uCiAgICB7CiAgICAgICAgYm9vbCBiOwoKICAgICAgICBjaGFyIGM7CiAgICAg
ICAgc2hvcnQgczsKICAgICAgICBpbnQgaTsKICAgICAgICBsb25nIGw7CgogICAgICAgIHVuc2ln
bmVkIGNoYXIgdWM7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdXM7CiAgICAgICAgdW5zaWduZWQg
aW50IHVpOwogICAgICAgIHVuc2lnbmVkIGxvbmcgdWw7CgogICAgICAgIGZsb2F0IGY7CiAgICAg
ICAgZG91YmxlIGQ7CgogICAgICAgIGNoYXIgYnl0ZVsxNl07CgogICAgICAgIHN0cnVjdCB7CiAg
ICAgICAgICAgY2hhciogZGF0YTsKICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNpemU7CiAgICAg
ICAgfSBieXRlYXJyYXk7CgogICAgICAgIHZvaWQqIHB0cjsKCiAgICAgICAgc3RydWN0IHsKICAg
ICAgICAgICAgdm9pZCAqcHRyOwogICAgICAgICAgICBib29sIG93bmVyOwogICAgICAgIH0gdm9p
ZHN0YXI7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgIGNoYXIgKnB0cjsKICAgICAgICAg
ICAgYm9vbCBvd25lcjsKICAgICAgICB9IGNoYXJzdGFyOwoKICAgICAgICBzdHJ1Y3QgewogICAg
ICAgICAgICBjaGFyICpwdHI7CiAgICAgICAgICAgIGJvb2wgb3duZXI7CiAgICAgICAgfSB1dGY4
OwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICBjaGFyICpwdHI7CiAgICAgICAgICAgIGJv
b2wgb3duZXI7CiAgICAgICAgfSBsb2NhbDhiaXQ7CgogICAgICAgIFFVbmtub3duSW50ZXJmYWNl
KiBpZmFjZTsKICAgICAgICBRRGlzcGF0Y2hJbnRlcmZhY2UqIGlkaXNwOwoKICAgIH0gcGF5bG9h
ZDsKCn07CgoKCgoKc3RydWN0IFFVUGFyYW1ldGVyCnsKICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAg
ICBRVVR5cGUgKnR5cGU7CiAgICBjb25zdCB2b2lkKiB0eXBlRXh0cmE7CiAgICBlbnVtIHsgSW4g
PSAxLCBPdXQgPSAyLCBJbk91dCA9IEluIHwgT3V0IH07CiAgICBpbnQgaW5PdXQ7Cn07CgoKCnN0
cnVjdCBRVU1ldGhvZAp7CiAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgaW50IGNvdW50OwogICAg
Y29uc3QgUVVQYXJhbWV0ZXIqIHBhcmFtZXRlcnM7Cn07CgoKc3RydWN0IFFVUHJvcGVydHkKewog
ICAgY29uc3QgY2hhciogbmFtZTsKICAgIFFVVHlwZSogdHlwZTsKICAgIGNvbnN0IHZvaWQqIHR5
cGVFeHRyYTsKCiAgICBpbnQgc2V0OwogICAgaW50IGdldDsKCiAgICBpbnQgZGVzaWduYWJsZTsK
ICAgIGludCBzdG9yZWQ7Cn07CgoKCnN0cnVjdCBRVUludGVyZmFjZURlc2NyaXB0aW9uCnsKICAg
IGludCBtZXRob2RDb3VudDsKICAgIGNvbnN0IFFVTWV0aG9kKiBtZXRob2RzOwogICAgaW50IHBy
b3BlcnR5Q291bnQ7CiAgICBjb25zdCBRVVByb3BlcnR5KiBwcm9wZXJ0aWVzOwp9OwoKCgoKCnN0
cnVjdCBRVUNvbXBvbmVudERlc2NyaXB0aW9uCnsKICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICBj
b25zdCBjaGFyKiB2ZW5kb3I7CiAgICBjb25zdCBjaGFyKiByZWxlYXNlOwogICAgY29uc3QgY2hh
ciogaW5mbzsKICAgIFFVdWlkIGNpZDsKICAgIGludCBjb3VudDsKICAgIGNvbnN0IFFVdWlkKiBp
bnRlcmZhY2VzOwp9OwoKCgoKCnN0cnVjdCBRVUNvbXBvbmVudFNlcnZlckRlc2NyaXB0aW9uCnsK
ICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICBjb25zdCBjaGFyKiB2ZW5kb3I7CiAgICBjb25zdCBj
aGFyKiByZWxlYXNlOwogICAgY29uc3QgY2hhciogaW5mbzsKICAgIGludCBjb3VudDsKICAgIGNv
bnN0IFFVQ29tcG9uZW50RGVzY3JpcHRpb24qIGNvbXBvbmVudHM7Cn07CgoKCnN0cnVjdCBRVUVu
dW1JdGVtCnsKICAgIGNvbnN0IGNoYXIgKmtleTsKICAgIGludCB2YWx1ZTsKfTsKCnN0cnVjdCBR
VUVudW0KewogICAgY29uc3QgY2hhciAqbmFtZTsKICAgIHVuc2lnbmVkIGludCBjb3VudDsKICAg
IGNvbnN0IFFVRW51bUl0ZW0gKml0ZW1zOwogICAgYm9vbCBzZXQ7Cn07CgppbmxpbmUgYm9vbCBR
VVR5cGU6OmlzRXF1YWwoIGNvbnN0IFFVVHlwZSAqdDEsIGNvbnN0IFFVVHlwZSAqdDIgKSB7CiAg
ICByZXR1cm4gdDEgPT0gdDIgfHwgdDEtPnV1aWQoKSA9PSB0Mi0+dXVpZCgpIHx8CiAgICAgICAg
Kih0MS0+dXVpZCgpKSA9PSAqKHQyLT51dWlkKCkpOwp9CgppbmxpbmUgYm9vbCBRVVR5cGU6OmNo
ZWNrKCBRVU9iamVjdCogbywgUVVUeXBlKiB0ICkgewogICAgcmV0dXJuIGlzRXF1YWwoIG8tPnR5
cGUsIHQgKSB8fCB0LT5jb252ZXJ0RnJvbSggbywgby0+dHlwZSApOwp9CgoKCgpleHRlcm4gY29u
c3QgUVV1aWQgVElEX1FVVHlwZV9lbnVtOwpzdHJ1Y3QgUVVUeXBlX2VudW0gOiBwdWJsaWMgUVVU
eXBlCnsKICAgIGNvbnN0IFFVdWlkICp1dWlkKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyICpkZXNj
KCkgY29uc3Q7CgogICAgdm9pZCBzZXQoIFFVT2JqZWN0ICosIGludCApOwogICAgaW50ICZnZXQo
IFFVT2JqZWN0ICogbyApIHsgcmV0dXJuIG8tPnBheWxvYWQuaTsgfQogICAgYm9vbCBjYW5Db252
ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJvb2wgY2FuQ29udmVydFRvKCBR
VU9iamVjdCAqLCBRVVR5cGUgKiApOwogICAgYm9vbCBjb252ZXJ0RnJvbSggUVVPYmplY3QgKiwg
UVVUeXBlICogKTsKICAgIGJvb2wgY29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiApOwog
ICAgdm9pZCBjbGVhciggUVVPYmplY3QgKiApIHt9CiAgICBpbnQgc2VyaWFsaXplVG8oIFFVT2Jq
ZWN0ICosIFFVQnVmZmVyICogKTsKICAgIGludCBzZXJpYWxpemVGcm9tKCBRVU9iamVjdCAqLCBR
VUJ1ZmZlciAqICk7Cn07CmV4dGVybiBRVVR5cGVfZW51bSBzdGF0aWNfUVVUeXBlX2VudW07CgoK
CmV4dGVybiBjb25zdCBRVXVpZCBUSURfUVVUeXBlX3B0cjsKc3RydWN0IFFVVHlwZV9wdHIgOiBw
dWJsaWMgUVVUeXBlCnsKICAgIGNvbnN0IFFVdWlkICp1dWlkKCkgY29uc3Q7CiAgICBjb25zdCBj
aGFyICpkZXNjKCkgY29uc3Q7CgogICAgdm9pZCBzZXQoIFFVT2JqZWN0ICosIGNvbnN0IHZvaWQq
ICk7CiAgICB2b2lkKiAmZ2V0KCBRVU9iamVjdCAqIG8gKSB7IHJldHVybiBvLT5wYXlsb2FkLnB0
cjsgfQogICAgYm9vbCBjYW5Db252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAg
IGJvb2wgY2FuQ29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiApOwogICAgYm9vbCBjb252
ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJvb2wgY29udmVydFRvKCBRVU9i
amVjdCAqLCBRVVR5cGUgKiApOwogICAgdm9pZCBjbGVhciggUVVPYmplY3QgKiApIHt9CiAgICBp
bnQgc2VyaWFsaXplVG8oIFFVT2JqZWN0ICosIFFVQnVmZmVyICogKTsKICAgIGludCBzZXJpYWxp
emVGcm9tKCBRVU9iamVjdCAqLCBRVUJ1ZmZlciAqICk7Cn07CmV4dGVybiBRVVR5cGVfcHRyIHN0
YXRpY19RVVR5cGVfcHRyOwoKCmV4dGVybiBjb25zdCBRVXVpZCBUSURfUVVUeXBlX2lmYWNlOwpz
dHJ1Y3QgUVVUeXBlX2lmYWNlIDogcHVibGljIFFVVHlwZQp7CiAgICBjb25zdCBRVXVpZCAqdXVp
ZCgpIGNvbnN0OwogICAgY29uc3QgY2hhciAqZGVzYygpIGNvbnN0OwoKICAgIHZvaWQgc2V0KCBR
VU9iamVjdCAqLCBRVW5rbm93bkludGVyZmFjZSogKTsKICAgIFFVbmtub3duSW50ZXJmYWNlKiAm
Z2V0KCBRVU9iamVjdCAqbyApeyByZXR1cm4gby0+cGF5bG9hZC5pZmFjZTsgfQogICAgYm9vbCBj
YW5Db252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJvb2wgY2FuQ29udmVy
dFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiApOwogICAgYm9vbCBjb252ZXJ0RnJvbSggUVVPYmpl
Y3QgKiwgUVVUeXBlICogKTsKICAgIGJvb2wgY29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUg
KiApOwogICAgdm9pZCBjbGVhciggUVVPYmplY3QgKiApIHt9CiAgICBpbnQgc2VyaWFsaXplVG8o
IFFVT2JqZWN0ICosIFFVQnVmZmVyICogKTsKICAgIGludCBzZXJpYWxpemVGcm9tKCBRVU9iamVj
dCAqLCBRVUJ1ZmZlciAqICk7Cn07CmV4dGVybiBRVVR5cGVfaWZhY2Ugc3RhdGljX1FVVHlwZV9p
ZmFjZTsKCgpleHRlcm4gY29uc3QgUVV1aWQgVElEX1FVVHlwZV9pZGlzcDsKc3RydWN0IFFVVHlw
ZV9pZGlzcCA6IHB1YmxpYyBRVVR5cGUKewogICAgY29uc3QgUVV1aWQgKnV1aWQoKSBjb25zdDsK
ICAgIGNvbnN0IGNoYXIgKmRlc2MoKSBjb25zdDsKCiAgICB2b2lkIHNldCggUVVPYmplY3QgKiwg
UURpc3BhdGNoSW50ZXJmYWNlKiApOwogICAgUURpc3BhdGNoSW50ZXJmYWNlKiAmZ2V0KCBRVU9i
amVjdCAqbyApeyByZXR1cm4gby0+cGF5bG9hZC5pZGlzcDsgfQogICAgYm9vbCBjYW5Db252ZXJ0
RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJvb2wgY2FuQ29udmVydFRvKCBRVU9i
amVjdCAqLCBRVVR5cGUgKiApOwogICAgYm9vbCBjb252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVU
eXBlICogKTsKICAgIGJvb2wgY29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiApOwogICAg
dm9pZCBjbGVhciggUVVPYmplY3QgKiApIHt9CiAgICBpbnQgc2VyaWFsaXplVG8oIFFVT2JqZWN0
ICosIFFVQnVmZmVyICogKTsKICAgIGludCBzZXJpYWxpemVGcm9tKCBRVU9iamVjdCAqLCBRVUJ1
ZmZlciAqICk7Cn07CmV4dGVybiBRVVR5cGVfaWRpc3Agc3RhdGljX1FVVHlwZV9pZGlzcDsKCgpl
eHRlcm4gY29uc3QgUVV1aWQgVElEX1FVVHlwZV9ib29sOwpzdHJ1Y3QgUVVUeXBlX2Jvb2wgOiBw
dWJsaWMgUVVUeXBlCnsKICAgIGNvbnN0IFFVdWlkICp1dWlkKCkgY29uc3Q7CiAgICBjb25zdCBj
aGFyICpkZXNjKCkgY29uc3Q7CgogICAgdm9pZCBzZXQoIFFVT2JqZWN0ICosIGJvb2wgKTsKICAg
IGJvb2wgJmdldCggUVVPYmplY3QgKm8gKSB7IHJldHVybiBvLT5wYXlsb2FkLmI7IH0KICAgIGJv
b2wgY2FuQ29udmVydEZyb20oIFFVT2JqZWN0ICosIFFVVHlwZSAqICk7CiAgICBib29sIGNhbkNv
bnZlcnRUbyggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJvb2wgY29udmVydEZyb20oIFFV
T2JqZWN0ICosIFFVVHlwZSAqICk7CiAgICBib29sIGNvbnZlcnRUbyggUVVPYmplY3QgKiwgUVVU
eXBlICogKTsKICAgIHZvaWQgY2xlYXIoIFFVT2JqZWN0ICogKSB7fQogICAgaW50IHNlcmlhbGl6
ZVRvKCBRVU9iamVjdCAqLCBRVUJ1ZmZlciAqICk7CiAgICBpbnQgc2VyaWFsaXplRnJvbSggUVVP
YmplY3QgKiwgUVVCdWZmZXIgKiApOwp9OwpleHRlcm4gUVVUeXBlX2Jvb2wgc3RhdGljX1FVVHlw
ZV9ib29sOwoKCgpleHRlcm4gY29uc3QgUVV1aWQgVElEX1FVVHlwZV9pbnQ7CnN0cnVjdCBRVVR5
cGVfaW50IDogcHVibGljIFFVVHlwZQp7CiAgICBjb25zdCBRVXVpZCAqdXVpZCgpIGNvbnN0Owog
ICAgY29uc3QgY2hhciAqZGVzYygpIGNvbnN0OwoKICAgIHZvaWQgc2V0KCBRVU9iamVjdCAqLCBp
bnQgKTsKICAgIGludCAmZ2V0KCBRVU9iamVjdCAqbyApIHsgcmV0dXJuIG8tPnBheWxvYWQuaTsg
fQogICAgYm9vbCBjYW5Db252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJv
b2wgY2FuQ29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiApOwogICAgYm9vbCBjb252ZXJ0
RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJvb2wgY29udmVydFRvKCBRVU9iamVj
dCAqLCBRVVR5cGUgKiApOwogICAgdm9pZCBjbGVhciggUVVPYmplY3QgKiApIHt9CiAgICBpbnQg
c2VyaWFsaXplVG8oIFFVT2JqZWN0ICosIFFVQnVmZmVyICogKTsKICAgIGludCBzZXJpYWxpemVG
cm9tKCBRVU9iamVjdCAqLCBRVUJ1ZmZlciAqICk7Cn07CmV4dGVybiBRVVR5cGVfaW50IHN0YXRp
Y19RVVR5cGVfaW50OwoKCgpleHRlcm4gY29uc3QgUVV1aWQgVElEX1FVVHlwZV9kb3VibGU7CnN0
cnVjdCBRVVR5cGVfZG91YmxlIDogcHVibGljIFFVVHlwZQp7CiAgICBjb25zdCBRVXVpZCAqdXVp
ZCgpIGNvbnN0OwogICAgY29uc3QgY2hhciAqZGVzYygpIGNvbnN0OwoKICAgIHZvaWQgc2V0KCBR
VU9iamVjdCAqLCBkb3VibGUgKTsKICAgIGRvdWJsZSAmZ2V0KCBRVU9iamVjdCAqbyApIHsgcmV0
dXJuIG8tPnBheWxvYWQuZDsgfQogICAgYm9vbCBjYW5Db252ZXJ0RnJvbSggUVVPYmplY3QgKiwg
UVVUeXBlICogKTsKICAgIGJvb2wgY2FuQ29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiAp
OwogICAgYm9vbCBjb252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJvb2wg
Y29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiApOwogICAgdm9pZCBjbGVhciggUVVPYmpl
Y3QgKiApIHt9CiAgICBpbnQgc2VyaWFsaXplVG8oIFFVT2JqZWN0ICosIFFVQnVmZmVyICogKTsK
ICAgIGludCBzZXJpYWxpemVGcm9tKCBRVU9iamVjdCAqLCBRVUJ1ZmZlciAqICk7Cn07CmV4dGVy
biBRVVR5cGVfZG91YmxlIHN0YXRpY19RVVR5cGVfZG91YmxlOwoKCgpleHRlcm4gY29uc3QgUVV1
aWQgVElEX1FVVHlwZV9jaGFyc3RhcjsKc3RydWN0IFFVVHlwZV9jaGFyc3RhciA6IHB1YmxpYyBR
VVR5cGUKewogICAgY29uc3QgUVV1aWQgKnV1aWQoKSBjb25zdDsKICAgIGNvbnN0IGNoYXIgKmRl
c2MoKSBjb25zdDsKCiAgICB2b2lkIHNldCggUVVPYmplY3QgKiwgY29uc3QgY2hhciosIGJvb2wg
dGFrZSA9IEZBTFNFICk7CiAgICBjaGFyKiBnZXQoIFFVT2JqZWN0ICpvICl7IHJldHVybiBvLT5w
YXlsb2FkLmNoYXJzdGFyLnB0cjsgfQogICAgYm9vbCBjYW5Db252ZXJ0RnJvbSggUVVPYmplY3Qg
KiwgUVVUeXBlICogKTsKICAgIGJvb2wgY2FuQ29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUg
KiApOwogICAgYm9vbCBjb252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJv
b2wgY29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiApOwogICAgdm9pZCBjbGVhciggUVVP
YmplY3QgKiApOwogICAgaW50IHNlcmlhbGl6ZVRvKCBRVU9iamVjdCAqLCBRVUJ1ZmZlciAqICk7
CiAgICBpbnQgc2VyaWFsaXplRnJvbSggUVVPYmplY3QgKiwgUVVCdWZmZXIgKiApOwoKfTsKZXh0
ZXJuIFFVVHlwZV9jaGFyc3RhciBzdGF0aWNfUVVUeXBlX2NoYXJzdGFyOwoKCgpleHRlcm4gY29u
c3QgUVV1aWQgVElEX1FVVHlwZV9RU3RyaW5nOwoKc3RydWN0IFFVVHlwZV9RU3RyaW5nIDogcHVi
bGljIFFVVHlwZQp7CiAgICBjb25zdCBRVXVpZCAqdXVpZCgpIGNvbnN0OwogICAgY29uc3QgY2hh
ciAqZGVzYygpIGNvbnN0OwoKICAgIHZvaWQgc2V0KCBRVU9iamVjdCAqLCBjb25zdCBRU3RyaW5n
ICYgKTsKICAgIFFTdHJpbmcgJmdldCggUVVPYmplY3QgKiBvICkgeyByZXR1cm4gKihRU3RyaW5n
KilvLT5wYXlsb2FkLnB0cjsgfQoKICAgIGJvb2wgY2FuQ29udmVydEZyb20oIFFVT2JqZWN0ICos
IFFVVHlwZSAqICk7CiAgICBib29sIGNhbkNvbnZlcnRUbyggUVVPYmplY3QgKiwgUVVUeXBlICog
KTsKICAgIGJvb2wgY29udmVydEZyb20oIFFVT2JqZWN0ICosIFFVVHlwZSAqICk7CiAgICBib29s
IGNvbnZlcnRUbyggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIHZvaWQgY2xlYXIoIFFVT2Jq
ZWN0ICogKTsKICAgIGludCBzZXJpYWxpemVUbyggUVVPYmplY3QgKiwgUVVCdWZmZXIgKiApOwog
ICAgaW50IHNlcmlhbGl6ZUZyb20oIFFVT2JqZWN0ICosIFFVQnVmZmVyICogKTsKCn07CmV4dGVy
biBRVVR5cGVfUVN0cmluZyBzdGF0aWNfUVVUeXBlX1FTdHJpbmc7CiMgNDMgIi91c3IvbG9jYWwv
cXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9wcml2YXRlL3F1Y29tZXh0cmFfcC5oIiAyCgoKCmNs
YXNzIFFWYXJpYW50OwoKCgpleHRlcm4gY29uc3QgUVV1aWQgVElEX1FVVHlwZV9RVmFyaWFudDsK
CnN0cnVjdCBRVVR5cGVfUVZhcmlhbnQgOiBwdWJsaWMgUVVUeXBlCnsKICAgIGNvbnN0IFFVdWlk
ICp1dWlkKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyICpkZXNjKCkgY29uc3Q7CgogICAgdm9pZCBz
ZXQoIFFVT2JqZWN0ICosIGNvbnN0IFFWYXJpYW50ICYgKTsKICAgIFFWYXJpYW50ICZnZXQoIFFV
T2JqZWN0ICogbyApOwoKICAgIGJvb2wgY2FuQ29udmVydEZyb20oIFFVT2JqZWN0ICosIFFVVHlw
ZSAqICk7CiAgICBib29sIGNhbkNvbnZlcnRUbyggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAg
IGJvb2wgY29udmVydEZyb20oIFFVT2JqZWN0ICosIFFVVHlwZSAqICk7CiAgICBib29sIGNvbnZl
cnRUbyggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIHZvaWQgY2xlYXIoIFFVT2JqZWN0ICog
KTsKICAgIGludCBzZXJpYWxpemVUbyggUVVPYmplY3QgKiwgUVVCdWZmZXIgKiApOwogICAgaW50
IHNlcmlhbGl6ZUZyb20oIFFVT2JqZWN0ICosIFFVQnVmZmVyICogKTsKfTsKZXh0ZXJuIFFVVHlw
ZV9RVmFyaWFudCBzdGF0aWNfUVVUeXBlX1FWYXJpYW50OwojIDE2ICJtb2NfdGltZWxhYmVsLmNw
cCIgMgoKCgoKCgpjb25zdCBjaGFyICpUaW1lTGFiZWw6OmNsYXNzTmFtZSgpIGNvbnN0CnsKICAg
IHJldHVybiAiVGltZUxhYmVsIjsKfQoKUU1ldGFPYmplY3QgKlRpbWVMYWJlbDo6bWV0YU9iaiA9
IDA7CnN0YXRpYyBRTWV0YU9iamVjdENsZWFuVXAgY2xlYW5VcF9UaW1lTGFiZWw7CgoKUVN0cmlu
ZyBUaW1lTGFiZWw6OnRyKCBjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpjICkKewogICAgaWYg
KCBxQXBwICkKICAgICAgICByZXR1cm4gcUFwcC0+dHJhbnNsYXRlKCAiVGltZUxhYmVsIiwgcywg
YywgUUFwcGxpY2F0aW9uOjpEZWZhdWx0Q29kZWMgKTsKICAgIGVsc2UKICAgICAgICByZXR1cm4g
UVN0cmluZzo6ZnJvbUxhdGluMSggcyApOwp9CgpRU3RyaW5nIFRpbWVMYWJlbDo6dHJVdGY4KCBj
b25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpjICkKewogICAgaWYgKCBxQXBwICkKICAgICAgICBy
ZXR1cm4gcUFwcC0+dHJhbnNsYXRlKCAiVGltZUxhYmVsIiwgcywgYywgUUFwcGxpY2F0aW9uOjpV
bmljb2RlVVRGOCApOwogICAgZWxzZQogICAgICAgIHJldHVybiBRU3RyaW5nOjpmcm9tVXRmOCgg
cyApOwp9CgoKCgpRTWV0YU9iamVjdCogVGltZUxhYmVsOjpzdGF0aWNNZXRhT2JqZWN0KCkKewog
ICAgaWYgKCBtZXRhT2JqICkKICAgICAgICByZXR1cm4gbWV0YU9iajsKICAgIFFNZXRhT2JqZWN0
KiBwYXJlbnRPYmplY3QgPSBRSEJveDo6c3RhdGljTWV0YU9iamVjdCgpOwogICAgc3RhdGljIGNv
bnN0IFFVUGFyYW1ldGVyIHBhcmFtX3Nsb3RfMFtdID0gewogICAgICAgIHsgMCwgJnN0YXRpY19R
VVR5cGVfcHRyLCAiUURhdGVUaW1lIiwgUVVQYXJhbWV0ZXI6OkluIH0KICAgIH07CiAgICBzdGF0
aWMgY29uc3QgUVVNZXRob2Qgc2xvdF8wID0geyJzbG90VXBkYXRlIiwgMSwgcGFyYW1fc2xvdF8w
IH07CiAgICBzdGF0aWMgY29uc3QgUU1ldGFEYXRhIHNsb3RfdGJsW10gPSB7CiAgICAgICAgeyAi
c2xvdFVwZGF0ZShRRGF0ZVRpbWUpIiwgJnNsb3RfMCwgUU1ldGFEYXRhOjpQdWJsaWMgfQogICAg
fTsKICAgIG1ldGFPYmogPSBRTWV0YU9iamVjdDo6bmV3X21ldGFvYmplY3QoCiAgICAgICAgIlRp
bWVMYWJlbCIsIHBhcmVudE9iamVjdCwKICAgICAgICBzbG90X3RibCwgMSwKICAgICAgICAwLCAw
LAoKICAgICAgICAwLCAwLAogICAgICAgIDAsIDAsCgogICAgICAgIDAsIDAgKTsKICAgIGNsZWFu
VXBfVGltZUxhYmVsLnNldE1ldGFPYmplY3QoIG1ldGFPYmogKTsKICAgIHJldHVybiBtZXRhT2Jq
Owp9Cgp2b2lkKiBUaW1lTGFiZWw6OnF0X2Nhc3QoIGNvbnN0IGNoYXIqIGNsbmFtZSApCnsKICAg
IGlmICggIXFzdHJjbXAoIGNsbmFtZSwgIlRpbWVMYWJlbCIgKSApIHJldHVybiAoVGltZUxhYmVs
Kil0aGlzOwogICAgcmV0dXJuIFFIQm94OjpxdF9jYXN0KCBjbG5hbWUgKTsKfQoKYm9vbCBUaW1l
TGFiZWw6OnF0X2ludm9rZSggaW50IF9pZCwgUVVPYmplY3QqIF9vICkKewogICAgc3dpdGNoICgg
X2lkIC0gc3RhdGljTWV0YU9iamVjdCgpLT5zbG90T2Zmc2V0KCkgKSB7CiAgICBjYXNlIDA6IHNs
b3RVcGRhdGUoKFFEYXRlVGltZSkoKigoUURhdGVUaW1lKilzdGF0aWNfUVVUeXBlX3B0ci5nZXQo
X28rMSkpKSk7IGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gUUhCb3g6OnF0X2lu
dm9rZSggX2lkLCBfbyApOwogICAgfQogICAgcmV0dXJuIFRSVUU7Cn0KCmJvb2wgVGltZUxhYmVs
OjpxdF9lbWl0KCBpbnQgX2lkLCBRVU9iamVjdCogX28gKQp7CiAgICByZXR1cm4gUUhCb3g6OnF0
X2VtaXQoX2lkLF9vKTsKfQoKCmJvb2wgVGltZUxhYmVsOjpxdF9wcm9wZXJ0eSggaW50IF9pZCwg
aW50IF9mLCBRVmFyaWFudCogX3YpCnsKICAgIHJldHVybiBRSEJveDo6cXRfcHJvcGVydHkoIF9p
ZCwgX2YsIF92KTsKfQo=


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-05-06  3:36 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-05-06  3:36 c++/10635: g++ seg faluts on compile command Shea.Williams

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).