public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/4671: SegFault compiling qt qabstractlayout.cpp
@ 2001-11-18 12:48 rodrigc
  0 siblings, 0 replies; 3+ messages in thread
From: rodrigc @ 2001-11-18 12:48 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

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

From: rodrigc@gcc.gnu.org
To: gcc-bugs@gcc.gnu.org, gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org,
  georg.wild@gmx.de, nobody@gcc.gnu.org
Cc:  
Subject: Re: c++/4671: SegFault compiling qt qabstractlayout.cpp
Date: 22 Nov 2001 06:49:37 -0000

 Synopsis: SegFault compiling qt qabstractlayout.cpp
 
 State-Changed-From-To: open->closed
 State-Changed-By: rodrigc
 State-Changed-When: Wed Nov 21 22:49:36 2001
 State-Changed-Why:
     Compiles OK with:
     gcc version 3.1 20011110 (experimental)
     gcc version 3.0.3 20011119 (prerelease)
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&pr=4671&database=gcc


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

* Re: c++/4671: SegFault compiling qt qabstractlayout.cpp
@ 2001-11-18 12:36 rodrigc
  0 siblings, 0 replies; 3+ messages in thread
From: rodrigc @ 2001-11-18 12:36 UTC (permalink / raw)
  To: gcc-bugs, gcc-gnats, gcc-prs, georg.wild, nobody

Synopsis: SegFault compiling qt qabstractlayout.cpp

State-Changed-From-To: open->closed
State-Changed-By: rodrigc
State-Changed-When: Wed Nov 21 22:49:36 2001
State-Changed-Why:
    Compiles OK with:
    gcc version 3.1 20011110 (experimental)
    gcc version 3.0.3 20011119 (prerelease)

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&pr=4671&database=gcc


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

* c++/4671: SegFault compiling qt qabstractlayout.cpp
@ 2001-10-25 16:26 georg.wild
  0 siblings, 0 replies; 3+ messages in thread
From: georg.wild @ 2001-10-25 16:26 UTC (permalink / raw)
  To: gcc-gnats

>Number:         4671
>Category:       c++
>Synopsis:       SegFault compiling qt qabstractlayout.cpp
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Oct 25 16:26:11 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     georg.wild@gmx.de
>Release:        gcc latest cvs
>Organization:
>Environment:
i686-pc-linux-gnu
cvs glibc after 2.2.4
>Description:
kernel/qabstractlayout.cpp:1042: Internal error: Segmentation fault

g++  -c -I/usr/X11R6/include -I/usr/lib/qt/include -I/usr/X11R6/include -pipe -O2 -fPIC -DQT_BUILTIN_GIF_READER=1 -DQT_NAS_SUPPORT -DQT_XFT  -I/usr/lib/qt/src/3rdparty/zlib -I/usr/lib/qt/src/3rdparty/libpng  -o kernel/qabstractlayout.o kernel/qabstractlayout.cpp
cc1plus: warning: changing search order for system directory "/usr/local/include/g++-v3"
cc1plus: warning:   as it has already been specified as a system directory
cc1plus: warning: changing search order for system directory "/usr/local/include/g++-v3/i686-pc-linux-gnu"
cc1plus: warning:   as it has already been specified as a system directory
cc1plus: warning: changing search order for system directory "/usr/local/include/g++-v3/backward"
cc1plus: warning:   as it has already been specified as a system directory
cc1plus: warning: changing search order for system directory "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/include"
cc1plus: warning:   as it has already been specified as a system directory
cc1plus: warning: changing search order for system directory "/usr/local/i686-pc-linux-gnu/include"
cc1plus: warning:   as it has already been specified as a system directory
kernel/qabstractlayout.cpp: In member function `virtual bool 
   QLayout::eventFilter(QObject*, QEvent*)':
kernel/qabstractlayout.cpp:1042: Internal error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.
>How-To-Repeat:
g++  -c   -O2  qabstractlayout.ii
>Fix:
g++  -c   -O1  qabstractlayout.ii
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="qabstractlayout.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="qabstractlayout.ii"

IyAzOCAia2VybmVsL3FhYnN0cmFjdGxheW91dC5jcHAiCiMgMSAia2VybmVsL3FhYnN0cmFjdGxh
eW91dC5oIiAxCiMgNDIgImtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuaCIKIyAxICJrZXJuZWwvcW9i
amVjdC5oIiAxCiMgNDIgImtlcm5lbC9xb2JqZWN0LmgiCiMgMSAia2VybmVsL3FvYmplY3RkZWZz
LmgiIDEKIyA0MiAia2VybmVsL3FvYmplY3RkZWZzLmgiCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVk
ZS9xZ2xvYmFsLmgiIDEKIyAzNjcgIi91c3IvbGliL3F0L2luY2x1ZGUvcWdsb2JhbC5oIgp0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgdWNoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNob3J0Owp0
eXBlZGVmIHVuc2lnbmVkIHVpbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzsKdHlwZWRl
ZiBjaGFyICpwY2hhcjsKdHlwZWRlZiB1Y2hhciAqcHVjaGFyOwp0eXBlZGVmIGNvbnN0IGNoYXIg
KnBjY2hhcjsKCgoKCgoKCmNvbnN0IGJvb2wgRkFMU0UgPSAwOwpjb25zdCBib29sIFRSVUUgPSAh
MDsKIyA0MDUgIi91c3IvbGliL3F0L2luY2x1ZGUvcWdsb2JhbC5oIgppbmxpbmUgaW50IHFSb3Vu
ZCggZG91YmxlIGQgKQp7CiAgICByZXR1cm4gZCA+IDAuMCA/IGludChkKzAuNSkgOiBpbnQoZC0w
LjUpOwp9CiMgNDE4ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FnbG9iYWwuaCIKdHlwZWRlZiBzaWdu
ZWQgY2hhciBJTlQ4Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUlOVDg7CnR5cGVkZWYgc2hvcnQg
SU5UMTY7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgVUlOVDE2Owp0eXBlZGVmIGludCBJTlQzMjsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgVUlOVDMyOwoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgUV9JTlQ4
Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgUV9VSU5UODsKdHlwZWRlZiBzaG9ydCBRX0lOVDE2Owp0
eXBlZGVmIHVuc2lnbmVkIHNob3J0IFFfVUlOVDE2Owp0eXBlZGVmIGludCBRX0lOVDMyOwp0eXBl
ZGVmIHVuc2lnbmVkIGludCBRX1VJTlQzMjsKdHlwZWRlZiBsb25nIFFfSU5UNjQ7CnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBRX1VJTlQ2NDsKCgoKCgpjbGFzcyBRRGF0YVN0cmVhbTsKIyA0NDggIi91
c3IvbGliL3F0L2luY2x1ZGUvcWdsb2JhbC5oIgojIDEgIi91c3IvbGliL3F0L2luY2x1ZGUvcWZl
YXR1cmVzLmgiIDEKIyA1MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xZmVhdHVyZXMuaCIKIyAxICIv
dXNyL2xpYi9xdC9pbmNsdWRlL3Fjb25maWcuaCIgMQojIDU0ICIvdXNyL2xpYi9xdC9pbmNsdWRl
L3FmZWF0dXJlcy5oIiAyCiMgNDQ5ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FnbG9iYWwuaCIgMgoj
IDQ4NiAiL3Vzci9saWIvcXQvaW5jbHVkZS9xZ2xvYmFsLmgiCiAgICAgICAgIGNvbnN0IGNoYXIg
KnFWZXJzaW9uKCk7CiAgICAgICAgIGJvb2wgcVN5c0luZm8oIGludCAqd29yZFNpemUsIGJvb2wg
KmJpZ0VuZGlhbiApOwojIDU1MCAiL3Vzci9saWIvcXQvaW5jbHVkZS9xZ2xvYmFsLmgiCiAgICAg
ICAgIHZvaWQgcURlYnVnKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1dGVfXyAo
KGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7CgogICAgICAgICB2b2lkIHFXYXJuaW5nKCBjb25z
dCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAy
KSkpCgo7CgogICAgICAgICB2b2lkIHFGYXRhbCggY29uc3QgY2hhciAqLCAuLi4gKQoKICAgIF9f
YXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoKOwoKCgoKCgoKICAgICAgICAg
dm9pZCBkZWJ1ZyggY29uc3QgY2hhciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18gKChmb3Jt
YXQgKHByaW50ZiwgMSwgMikpKQoKOwoKICAgICAgICAgdm9pZCB3YXJuaW5nKCBjb25zdCBjaGFy
ICosIC4uLiApCgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7
CgogICAgICAgICB2b2lkIGZhdGFsKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1
dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7CiMgNjA5ICIvdXNyL2xpYi9xdC9pbmNs
dWRlL3FnbG9iYWwuaCIKICAgICAgICAgYm9vbCBxdF9jaGVja19wb2ludGVyKCBib29sIGMsIGNv
bnN0IGNoYXIgKiwgaW50ICk7CgoKCgoKCgplbnVtIFF0TXNnVHlwZSB7IFF0RGVidWdNc2csIFF0
V2FybmluZ01zZywgUXRGYXRhbE1zZyB9OwoKdHlwZWRlZiB2b2lkICgqbXNnX2hhbmRsZXIpKFF0
TXNnVHlwZSwgY29uc3QgY2hhciAqKTsKICAgICAgICAgbXNnX2hhbmRsZXIgcUluc3RhbGxNc2dI
YW5kbGVyKCBtc2dfaGFuZGxlciApOwoKCiAgICAgICAgIHZvaWQgcVN1cHByZXNzT2Jzb2xldGVX
YXJuaW5ncyggYm9vbCA9IFRSVUUgKTsKCgoKICAgICAgICAgdm9pZCBxT2Jzb2xldGUoIGNvbnN0
IGNoYXIgKm9iaiwgY29uc3QgY2hhciAqb2xkZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKm5ld2Z1bmMgKTsKICAgICAgICAgdm9pZCBxT2Jzb2xldGUoIGNvbnN0IGNo
YXIgKm9iaiwgY29uc3QgY2hhciAqb2xkZnVuYyApOwogICAgICAgICB2b2lkIHFPYnNvbGV0ZSgg
Y29uc3QgY2hhciAqbWVzc2FnZSApOwojIDQzICJrZXJuZWwvcW9iamVjdGRlZnMuaCIgMgojIDEx
NyAia2VybmVsL3FvYmplY3RkZWZzLmgiCmNsYXNzIFFPYmplY3Q7CmNsYXNzIFFNZXRhT2JqZWN0
OwpjbGFzcyBRU2lnbmFsOwpjbGFzcyBRQ29ubmVjdGlvbjsKY2xhc3MgUUV2ZW50OwpzdHJ1Y3Qg
UU1ldGFEYXRhOwpjbGFzcyBRQ29ubmVjdGlvbkxpc3Q7CmNsYXNzIFFDb25uZWN0aW9uTGlzdEl0
OwpjbGFzcyBRU2lnbmFsRGljdDsKY2xhc3MgUVNpZ25hbERpY3RJdDsKY2xhc3MgUU9iamVjdExp
c3Q7CmNsYXNzIFFPYmplY3RMaXN0SXQ7CmNsYXNzIFFNZW1iZXJEaWN0OwojIDQzICJrZXJuZWwv
cW9iamVjdC5oIiAyCiMgMSAia2VybmVsL3F3aW5kb3dkZWZzLmgiIDEKIyA0MyAia2VybmVsL3F3
aW5kb3dkZWZzLmgiCiMgMSAia2VybmVsL3FvYmplY3RkZWZzLmgiIDEKIyA0NCAia2VybmVsL3F3
aW5kb3dkZWZzLmgiIDIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FzdHJpbmcuaCIgMQojIDQz
ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FzdHJpbmcuaCIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRl
L3Fjc3RyaW5nLmgiIDEKIyA0MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xY3N0cmluZy5oIgojIDEg
Ii91c3IvbGliL3F0L2luY2x1ZGUvcWFycmF5LmgiIDEKIyA0MiAiL3Vzci9saWIvcXQvaW5jbHVk
ZS9xYXJyYXkuaCIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FnYXJyYXkuaCIgMQojIDQyICIv
dXNyL2xpYi9xdC9pbmNsdWRlL3FnYXJyYXkuaCIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fz
aGFyZWQuaCIgMQojIDQyICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FzaGFyZWQuaCIKIyAxICIvdXNy
L2xpYi9xdC9pbmNsdWRlL3FnbG9iYWwuaCIgMQojIDQzICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fz
aGFyZWQuaCIgMgoKCgpzdHJ1Y3QgUVNoYXJlZAp7CiAgICBRU2hhcmVkKCkgeyBjb3VudCA9IDE7
IH0KICAgIHZvaWQgcmVmKCkgeyBjb3VudCsrOyB9CiAgICBib29sIGRlcmVmKCkgeyByZXR1cm4g
IS0tY291bnQ7IH0KICAgIHVpbnQgY291bnQ7Cn07CiMgNDMgIi91c3IvbGliL3F0L2luY2x1ZGUv
cWdhcnJheS5oIiAyCgoKCmNsYXNzIFFHQXJyYXkKewpmcmllbmQgY2xhc3MgUUJ1ZmZlcjsKcHVi
bGljOgoKICAgIHN0cnVjdCBhcnJheV9kYXRhIDogcHVibGljIFFTaGFyZWQgewogICAgICAgIGFy
cmF5X2RhdGEoKSB7IGRhdGE9MDsgbGVuPTA7IH0KICAgICAgICBjaGFyICpkYXRhOwogICAgICAg
IHVpbnQgbGVuOwogICAgfTsKICAgIFFHQXJyYXkoKTsKcHJvdGVjdGVkOgogICAgUUdBcnJheSgg
aW50LCBpbnQgKTsKICAgIFFHQXJyYXkoIGludCBzaXplICk7CiAgICBRR0FycmF5KCBjb25zdCBR
R0FycmF5ICZhICk7CiAgICB2aXJ0dWFsIH5RR0FycmF5KCk7CgogICAgUUdBcnJheSAmb3BlcmF0
b3I9KCBjb25zdCBRR0FycmF5ICZhICkgeyByZXR1cm4gYXNzaWduKCBhICk7IH0KCiAgICB2aXJ0
dWFsIHZvaWQgZGV0YWNoKCkgeyBkdXBsaWNhdGUoKnRoaXMpOyB9CgogICAgY2hhciAqZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIHNoZC0+ZGF0YTsgfQogICAgdWludCBucmVmcygpIGNvbnN0IHsgcmV0
dXJuIHNoZC0+Y291bnQ7IH0KICAgIHVpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNoZC0+bGVu
OyB9CiAgICBib29sIGlzRXF1YWwoIGNvbnN0IFFHQXJyYXkgJmEgKSBjb25zdDsKCiAgICBib29s
IHJlc2l6ZSggdWludCBuZXdzaXplICk7CgogICAgYm9vbCBmaWxsKCBjb25zdCBjaGFyICpkLCBp
bnQgbGVuLCB1aW50IHN6ICk7CgogICAgUUdBcnJheSAmYXNzaWduKCBjb25zdCBRR0FycmF5ICZh
ICk7CiAgICBRR0FycmF5ICZhc3NpZ24oIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVuICk7CiAgICBR
R0FycmF5ICZkdXBsaWNhdGUoIGNvbnN0IFFHQXJyYXkgJmEgKTsKICAgIFFHQXJyYXkgJmR1cGxp
Y2F0ZSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKICAgIHZvaWQgc3RvcmUoIGNvbnN0IGNo
YXIgKmQsIHVpbnQgbGVuICk7CgogICAgYXJyYXlfZGF0YSAqc2hhcmVkQmxvY2soKSBjb25zdCB7
IHJldHVybiBzaGQ7IH0KICAgIHZvaWQgc2V0U2hhcmVkQmxvY2soIGFycmF5X2RhdGEgKnAgKSB7
IHNoZD0oYXJyYXlfZGF0YSopcDsgfQoKICAgIFFHQXJyYXkgJnNldFJhd0RhdGEoIGNvbnN0IGNo
YXIgKmQsIHVpbnQgbGVuICk7CiAgICB2b2lkIHJlc2V0UmF3RGF0YSggY29uc3QgY2hhciAqZCwg
dWludCBsZW4gKTsKCiAgICBpbnQgZmluZCggY29uc3QgY2hhciAqZCwgdWludCBpbmRleCwgdWlu
dCBzeiApIGNvbnN0OwogICAgaW50IGNvbnRhaW5zKCBjb25zdCBjaGFyICpkLCB1aW50IHN6ICkg
Y29uc3Q7CgogICAgdm9pZCBzb3J0KCB1aW50IHN6ICk7CiAgICBpbnQgYnNlYXJjaCggY29uc3Qg
Y2hhciAqZCwgdWludCBzeiApIGNvbnN0OwoKICAgIGNoYXIgKmF0KCB1aW50IGluZGV4ICkgY29u
c3Q7CgogICAgYm9vbCBzZXRFeHBhbmQoIHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKmQsIHVpbnQg
c3ogKTsKCnByb3RlY3RlZDoKICAgIHZpcnR1YWwgYXJyYXlfZGF0YSAqbmV3RGF0YSgpOwogICAg
dmlydHVhbCB2b2lkIGRlbGV0ZURhdGEoIGFycmF5X2RhdGEgKnAgKTsKCnByaXZhdGU6CiAgICBz
dGF0aWMgdm9pZCBtc2dfaW5kZXgoIHVpbnQgKTsKICAgIGFycmF5X2RhdGEgKnNoZDsKfTsKCgpp
bmxpbmUgY2hhciAqUUdBcnJheTo6YXQoIHVpbnQgaW5kZXggKSBjb25zdAp7CgogICAgaWYgKCBp
bmRleCA+PSBzaXplKCkgKSB7CiAgICAgICAgbXNnX2luZGV4KCBpbmRleCApOwogICAgICAgIGlu
ZGV4ID0gMDsKICAgIH0KCiAgICByZXR1cm4gJnNoZC0+ZGF0YVtpbmRleF07Cn0KIyA0MyAiL3Vz
ci9saWIvcXQvaW5jbHVkZS9xYXJyYXkuaCIgMgoKCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPiBjbGFz
cyBRQXJyYXkgOiBwdWJsaWMgUUdBcnJheQp7CnB1YmxpYzoKICAgIHR5cGVkZWYgdHlwZSogSXRl
cmF0b3I7CiAgICB0eXBlZGVmIGNvbnN0IHR5cGUqIENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVm
IHR5cGUgVmFsdWVUeXBlOwoKcHJvdGVjdGVkOgogICAgUUFycmF5KCBpbnQsIGludCApIDogUUdB
cnJheSggMCwgMCApIHt9CgpwdWJsaWM6CiAgICBRQXJyYXkoKSB7fQogICAgUUFycmF5KCBpbnQg
c2l6ZSApIDogUUdBcnJheShzaXplKnNpemVvZih0eXBlKSkge30KICAgIFFBcnJheSggY29uc3Qg
UUFycmF5PHR5cGU+ICZhICkgOiBRR0FycmF5KGEpIHt9CiAgIH5RQXJyYXkoKSB7fQogICAgUUFy
cmF5PHR5cGU+ICZvcGVyYXRvcj0oY29uc3QgUUFycmF5PHR5cGU+ICZhKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIChRQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmFzc2ln
bihhKTsgfQogICAgdHlwZSAqZGF0YSgpIGNvbnN0IHsgcmV0dXJuICh0eXBlICopUUdBcnJheTo6
ZGF0YSgpOyB9CiAgICB1aW50IG5yZWZzKCkgY29uc3QgeyByZXR1cm4gUUdBcnJheTo6bnJlZnMo
KTsgfQogICAgdWludCBzaXplKCkgY29uc3QgeyByZXR1cm4gUUdBcnJheTo6c2l6ZSgpL3NpemVv
Zih0eXBlKTsgfQogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKTsgfQogICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gUUdBcnJheTo6c2l6ZSgpID09IDA7IH0KICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gUUdBcnJheTo6ZGF0YSgpID09IDA7IH0KICAg
IGJvb2wgcmVzaXplKCB1aW50IHNpemUgKSB7IHJldHVybiBRR0FycmF5OjpyZXNpemUoc2l6ZSpz
aXplb2YodHlwZSkpOyB9CiAgICBib29sIHRydW5jYXRlKCB1aW50IHBvcyApIHsgcmV0dXJuIFFH
QXJyYXk6OnJlc2l6ZShwb3Mqc2l6ZW9mKHR5cGUpKTsgfQogICAgYm9vbCBmaWxsKCBjb25zdCB0
eXBlICZkLCBpbnQgc2l6ZSA9IC0xICkKICAgICAgICB7IHJldHVybiBRR0FycmF5OjpmaWxsKChj
aGFyKikmZCxzaXplLHNpemVvZih0eXBlKSApOyB9CiAgICB2b2lkIGRldGFjaCgpIHsgUUdBcnJh
eTo6ZGV0YWNoKCk7IH0KICAgIFFBcnJheTx0eXBlPiBjb3B5KCkgY29uc3QKICAgICAgICB7IFFB
cnJheTx0eXBlPiB0bXA7IHJldHVybiB0bXAuZHVwbGljYXRlKCp0aGlzKTsgfQogICAgUUFycmF5
PHR5cGU+JiBhc3NpZ24oIGNvbnN0IFFBcnJheTx0eXBlPiYgYSApCiAgICAgICAgeyByZXR1cm4g
KFFBcnJheTx0eXBlPiYpUUdBcnJheTo6YXNzaWduKGEpOyB9CiAgICBRQXJyYXk8dHlwZT4mIGFz
c2lnbiggY29uc3QgdHlwZSAqYSwgdWludCBuICkKICAgICAgICB7IHJldHVybiAoUUFycmF5PHR5
cGU+JilRR0FycmF5Ojphc3NpZ24oKGNoYXIqKWEsbipzaXplb2YodHlwZSkpOyB9CiAgICBRQXJy
YXk8dHlwZT4mIGR1cGxpY2F0ZSggY29uc3QgUUFycmF5PHR5cGU+JiBhICkKICAgICAgICB7IHJl
dHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5OjpkdXBsaWNhdGUoYSk7IH0KICAgIFFBcnJheTx0
eXBlPiYgZHVwbGljYXRlKCBjb25zdCB0eXBlICphLCB1aW50IG4gKQogICAgICAgIHsgcmV0dXJu
IChRQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmR1cGxpY2F0ZSgoY2hhciopYSxuKnNpemVvZih0eXBl
KSk7IH0KICAgIFFBcnJheTx0eXBlPiYgc2V0UmF3RGF0YSggY29uc3QgdHlwZSAqYSwgdWludCBu
ICkKICAgICAgICB7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5OjpzZXRSYXdEYXRhKChj
aGFyKilhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG4qc2l6ZW9mKHR5cGUpKTsgfQogICAgdm9pZCByZXNldFJhd0RhdGEoIGNvbnN0IHR5cGUg
KmEsIHVpbnQgbiApCiAgICAgICAgeyBRR0FycmF5OjpyZXNldFJhd0RhdGEoKGNoYXIqKWEsbipz
aXplb2YodHlwZSkpOyB9CiAgICBpbnQgZmluZCggY29uc3QgdHlwZSAmZCwgdWludCBpPTAgKSBj
b25zdAogICAgICAgIHsgcmV0dXJuIFFHQXJyYXk6OmZpbmQoKGNoYXIqKSZkLGksc2l6ZW9mKHR5
cGUpKTsgfQogICAgaW50IGNvbnRhaW5zKCBjb25zdCB0eXBlICZkICkgY29uc3QKICAgICAgICB7
IHJldHVybiBRR0FycmF5Ojpjb250YWlucygoY2hhciopJmQsc2l6ZW9mKHR5cGUpKTsgfQogICAg
dm9pZCBzb3J0KCkgeyBRR0FycmF5Ojpzb3J0KHNpemVvZih0eXBlKSk7IH0KICAgIGludCBic2Vh
cmNoKCBjb25zdCB0eXBlICZkICkgY29uc3QKICAgICAgICB7IHJldHVybiBRR0FycmF5Ojpic2Vh
cmNoKChjb25zdCBjaGFyKikmZCxzaXplb2YodHlwZSkpOyB9CiAgICB0eXBlJiBvcGVyYXRvcltd
KCBpbnQgaSApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKHR5cGUgJikoKih0eXBlICopUUdBcnJh
eTo6YXQoaSpzaXplb2YodHlwZSkpKTsgfQogICAgdHlwZSYgYXQoIHVpbnQgaSApIGNvbnN0CiAg
ICAgICAgeyByZXR1cm4gKHR5cGUgJikoKih0eXBlICopUUdBcnJheTo6YXQoaSpzaXplb2YodHlw
ZSkpKTsgfQogICAgICAgICBvcGVyYXRvciBjb25zdCB0eXBlKigpIGNvbnN0IHsgcmV0dXJuIChj
b25zdCB0eXBlICopUUdBcnJheTo6ZGF0YSgpOyB9CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0
IFFBcnJheTx0eXBlPiAmYSApIGNvbnN0IHsgcmV0dXJuIGlzRXF1YWwoYSk7IH0KICAgIGJvb2wg
b3BlcmF0b3IhPSggY29uc3QgUUFycmF5PHR5cGU+ICZhICkgY29uc3QgeyByZXR1cm4gIWlzRXF1
YWwoYSk7IH0KICAgIEl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gZGF0YSgpOyB9CiAgICBJdGVy
YXRvciBlbmQoKSB7IHJldHVybiBkYXRhKCkgKyBzaXplKCk7IH0KICAgIENvbnN0SXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBkYXRhKCk7IH0KICAgIENvbnN0SXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gZGF0YSgpICsgc2l6ZSgpOyB9Cn07CiMgNDQgIi91c3IvbGliL3F0L2lu
Y2x1ZGUvcWNzdHJpbmcuaCIgMgoKCgoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9zdHJpbmcu
aCIgMSAzCiMgMjYgIi91c3IvbG9jYWwvaW5jbHVkZS9zdHJpbmcuaCIgMwojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyODMgIi91c3IvbG9jYWwvaW5jbHVkZS9mZWF0
dXJlcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyODQg
Ii91c3IvbG9jYWwvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMTIgIi91c3IvbG9jYWwvaW5j
bHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2dudS9zdHVicy5oIiAx
IDMKIyAzMTMgIi91c3IvbG9jYWwvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNyAiL3Vzci9s
b2NhbC9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAx
IDMKIyAxOTkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDM0ICIvdXNy
L2xvY2FsL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lk
ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpf
X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVt
bW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQogICAg
IHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9f
ZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICpt
ZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy
biB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQog
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB2b2lk
ICpyYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtcmNociAoX19jb25zdCB2b2lk
ICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBf
X2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4
dGVybiBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFy
ICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3My
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBz
dHJuY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9f
bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50
IHN0cmNvbGwgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJt
IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjggIi91c3IvbG9jYWwvaW5jbHVk
ZS94bG9jYWxlLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfc3RydWN0CnsKCiAgc3RydWN0
IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNbMTNdOwoKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50
ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50ICpf
X2N0eXBlX3RvdXBwZXI7Cn0gKl9fbG9jYWxlX3Q7CiMgMTA5ICIvdXNyL2xvY2FsL2luY2x1ZGUv
c3RyaW5nLmgiIDIgMwoKCmV4dGVybiBpbnQgX19zdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19z
MSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3QgX19zdHJ4ZnJtX2wgKGNoYXIg
Kl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0
cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxv
Y19fKSk7CgoKCgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5n
LCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7
CiMgMTU1ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNo
ciAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQg
X19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFy
ICpzdHJjaHJudWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBj
aGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAq
X19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBf
X2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBf
X2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0
YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4
dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7Cgpl
eHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19j
b25zdCB2b2lkICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB2b2lkICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19t
ZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0
ZXJuIHZvaWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4g
KF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50
IF9fZXJybnVtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vy
cm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g
dm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4g
dm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2
b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5k
ZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVy
biBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hh
ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19z
MSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKF9fY29u
c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u
c3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9f
bG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAog
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19j
b25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJu
IGNoYXIgKl9fc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFy
ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAg
IHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9f
ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
c3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9f
cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5
IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQg
Kl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAo
X19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKIyAzNjQgIi91c3IvbG9jYWwvaW5j
bHVkZS9zdHJpbmcuaCIgMwp9CiMgNTEgIi91c3IvbGliL3F0L2luY2x1ZGUvcWNzdHJpbmcuaCIg
MgojIDc4ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fjc3RyaW5nLmgiCiAgICAgICAgIHZvaWQgKnFt
ZW1tb3ZlKCB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdWludCBsZW4gKTsKCgoKCgogICAg
ICAgICBjaGFyICpxc3RyZHVwKCBjb25zdCBjaGFyICogKTsKCiAgICAgICAgIGlubGluZSB1aW50
IGNzdHJsZW4oIGNvbnN0IGNoYXIgKnN0ciApCnsgcmV0dXJuIHN0cmxlbihzdHIpOyB9CgogICAg
ICAgICBpbmxpbmUgdWludCBxc3RybGVuKCBjb25zdCBjaGFyICpzdHIgKQp7IHJldHVybiBzdHIg
PyBzdHJsZW4oc3RyKSA6IDA7IH0KCiAgICAgICAgIGlubGluZSBjaGFyICpjc3RyY3B5KCBjaGFy
ICpkc3QsIGNvbnN0IGNoYXIgKnNyYyApCnsgcmV0dXJuIHN0cmNweShkc3Qsc3JjKTsgfQoKICAg
ICAgICAgaW5saW5lIGNoYXIgKnFzdHJjcHkoIGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjICkK
eyByZXR1cm4gc3JjID8gc3RyY3B5KGRzdCwgc3JjKSA6IDA7IH0KCiAgICAgICAgIGNoYXIgKnFz
dHJuY3B5KCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgdWludCBsZW4gKTsKCiAgICAgICAg
IGlubGluZSBpbnQgY3N0cmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hhciAqc3RyMiAp
CnsgcmV0dXJuIHN0cmNtcChzdHIxLHN0cjIpOyB9CgogICAgICAgICBpbmxpbmUgaW50IHFzdHJj
bXAoIGNvbnN0IGNoYXIgKnN0cjEsIGNvbnN0IGNoYXIgKnN0cjIgKQp7IHJldHVybiAoc3RyMSAm
JiBzdHIyKSA/IHN0cmNtcChzdHIxLHN0cjIpIDogKGludCkoKGxvbmcpc3RyMiAtIChsb25nKXN0
cjEpOyB9CgogICAgICAgICBpbmxpbmUgaW50IGNzdHJuY21wKCBjb25zdCBjaGFyICpzdHIxLCBj
b25zdCBjaGFyICpzdHIyLCB1aW50IGxlbiApCnsgcmV0dXJuIHN0cm5jbXAoc3RyMSxzdHIyLGxl
bik7IH0KCiAgICAgICAgIGlubGluZSBpbnQgcXN0cm5jbXAoIGNvbnN0IGNoYXIgKnN0cjEsIGNv
bnN0IGNoYXIgKnN0cjIsIHVpbnQgbGVuICkKeyByZXR1cm4gKHN0cjEgJiYgc3RyMikgPyBzdHJu
Y21wKHN0cjEsc3RyMixsZW4pIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgobG9u
ZylzdHIyIC0gKGxvbmcpc3RyMSk7IH0KCiAgICAgICAgIGludCBxc3RyaWNtcCggY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICogKTsKCiAgICAgICAgIGludCBxc3RybmljbXAoIGNvbnN0IGNoYXIg
KiwgY29uc3QgY2hhciAqLCB1aW50IGxlbiApOwojIDE0NyAiL3Vzci9saWIvcXQvaW5jbHVkZS9x
Y3N0cmluZy5oIgogICAgICAgICBRX1VJTlQxNiBxQ2hlY2tzdW0oIGNvbnN0IGNoYXIgKnMsIHVp
bnQgbGVuICk7CiMgMTU2ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fjc3RyaW5nLmgiCnR5cGVkZWYg
UUFycmF5PGNoYXI+IFFCeXRlQXJyYXk7CgoKCgoKCiAgICAgICAgIFFEYXRhU3RyZWFtICZvcGVy
YXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQnl0ZUFycmF5ICYgKTsKICAgICAgICAgUURh
dGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFCeXRlQXJyYXkgJiApOwojIDE3
MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xY3N0cmluZy5oIgpjbGFzcyBRUmVnRXhwOwoKY2xhc3Mg
UUNTdHJpbmcgOiBwdWJsaWMgUUJ5dGVBcnJheQp7CnB1YmxpYzoKICAgIFFDU3RyaW5nKCkge30K
ICAgIFFDU3RyaW5nKCBpbnQgc2l6ZSApOwogICAgUUNTdHJpbmcoIGNvbnN0IFFDU3RyaW5nICZz
ICkgOiBRQnl0ZUFycmF5KCBzICkge30KICAgIFFDU3RyaW5nKCBjb25zdCBjaGFyICpzdHIgKTsK
ICAgIFFDU3RyaW5nKCBjb25zdCBjaGFyICpzdHIsIHVpbnQgbWF4bGVuICk7CgogICAgUUNTdHJp
bmcgJm9wZXJhdG9yPSggY29uc3QgUUNTdHJpbmcgJnMgKTsKICAgIFFDU3RyaW5nICZvcGVyYXRv
cj0oIGNvbnN0IGNoYXIgKnN0ciApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29s
IGlzRW1wdHkoKSBjb25zdDsKICAgIHVpbnQgbGVuZ3RoKCkgY29uc3Q7CiAgICBib29sIHJlc2l6
ZSggdWludCBuZXdsZW4gKTsKICAgIGJvb2wgdHJ1bmNhdGUoIHVpbnQgcG9zICk7CiAgICBib29s
IGZpbGwoIGNoYXIgYywgaW50IGxlbiA9IC0xICk7CgogICAgUUNTdHJpbmcgY29weSgpIGNvbnN0
OwoKICAgIFFDU3RyaW5nICZzcHJpbnRmKCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLiApOwoKICAg
IGludCBmaW5kKCBjaGFyIGMsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAg
IGludCBmaW5kKCBjb25zdCBjaGFyICpzdHIsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBj
b25zdDsKICAgIGludCBmaW5kKCBjb25zdCBRUmVnRXhwICYsIGludCBpbmRleD0wICkgY29uc3Q7
CiAgICBpbnQgZmluZFJldiggY2hhciBjLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkgY29u
c3Q7CiAgICBpbnQgZmluZFJldiggY29uc3QgY2hhciAqc3RyLCBpbnQgaW5kZXg9LTEsIGJvb2wg
Y3M9VFJVRSkgY29uc3Q7CiAgICBpbnQgZmluZFJldiggY29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5k
ZXg9LTEgKSBjb25zdDsKICAgIGludCBjb250YWlucyggY2hhciBjLCBib29sIGNzPVRSVUUgKSBj
b25zdDsKICAgIGludCBjb250YWlucyggY29uc3QgY2hhciAqc3RyLCBib29sIGNzPVRSVUUgKSBj
b25zdDsKICAgIGludCBjb250YWlucyggY29uc3QgUVJlZ0V4cCAmICkgY29uc3Q7CgogICAgUUNT
dHJpbmcgbGVmdCggdWludCBsZW4gKSBjb25zdDsKICAgIFFDU3RyaW5nIHJpZ2h0KCB1aW50IGxl
biApIGNvbnN0OwogICAgUUNTdHJpbmcgbWlkKCB1aW50IGluZGV4LCB1aW50IGxlbj0weGZmZmZm
ZmZmKSBjb25zdDsKCiAgICBRQ1N0cmluZyBsZWZ0SnVzdGlmeSggdWludCB3aWR0aCwgY2hhciBm
aWxsPScgJywgYm9vbCB0cnVuYz1GQUxTRSljb25zdDsKICAgIFFDU3RyaW5nIHJpZ2h0SnVzdGlm
eSggdWludCB3aWR0aCwgY2hhciBmaWxsPScgJyxib29sIHRydW5jPUZBTFNFKWNvbnN0OwoKICAg
IFFDU3RyaW5nIGxvd2VyKCkgY29uc3Q7CiAgICBRQ1N0cmluZyB1cHBlcigpIGNvbnN0OwoKICAg
IFFDU3RyaW5nIHN0cmlwV2hpdGVTcGFjZSgpIGNvbnN0OwogICAgUUNTdHJpbmcgc2ltcGxpZnlX
aGl0ZVNwYWNlKCkgY29uc3Q7CgogICAgUUNTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgY29u
c3QgY2hhciAqICk7CiAgICBRQ1N0cmluZyAmaW5zZXJ0KCB1aW50IGluZGV4LCBjaGFyICk7CiAg
ICBRQ1N0cmluZyAmYXBwZW5kKCBjb25zdCBjaGFyICogKTsKICAgIFFDU3RyaW5nICZwcmVwZW5k
KCBjb25zdCBjaGFyICogKTsKICAgIFFDU3RyaW5nICZyZW1vdmUoIHVpbnQgaW5kZXgsIHVpbnQg
bGVuICk7CiAgICBRQ1N0cmluZyAmcmVwbGFjZSggdWludCBpbmRleCwgdWludCBsZW4sIGNvbnN0
IGNoYXIgKiApOwogICAgUUNTdHJpbmcgJnJlcGxhY2UoIGNvbnN0IFFSZWdFeHAgJiwgY29uc3Qg
Y2hhciAqICk7CgogICAgc2hvcnQgdG9TaG9ydCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgdXNo
b3J0IHRvVVNob3J0KCBib29sICpvaz0wICkgY29uc3Q7CiAgICBpbnQgdG9JbnQoIGJvb2wgKm9r
PTAgKSBjb25zdDsKICAgIHVpbnQgdG9VSW50KCBib29sICpvaz0wICkgY29uc3Q7CiAgICBsb25n
IHRvTG9uZyggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgdWxvbmcgdG9VTG9uZyggYm9vbCAqb2s9
MCApIGNvbnN0OwogICAgZmxvYXQgdG9GbG9hdCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgZG91
YmxlIHRvRG91YmxlKCBib29sICpvaz0wICkgY29uc3Q7CgogICAgUUNTdHJpbmcgJnNldFN0cigg
Y29uc3QgY2hhciAqcyApOwogICAgUUNTdHJpbmcgJnNldE51bSggc2hvcnQgKTsKICAgIFFDU3Ry
aW5nICZzZXROdW0oIHVzaG9ydCApOwogICAgUUNTdHJpbmcgJnNldE51bSggaW50ICk7CiAgICBR
Q1N0cmluZyAmc2V0TnVtKCB1aW50ICk7CiAgICBRQ1N0cmluZyAmc2V0TnVtKCBsb25nICk7CiAg
ICBRQ1N0cmluZyAmc2V0TnVtKCB1bG9uZyApOwogICAgUUNTdHJpbmcgJnNldE51bSggZmxvYXQs
IGNoYXIgZj0nZycsIGludCBwcmVjPTYgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIGRvdWJsZSwg
Y2hhciBmPSdnJywgaW50IHByZWM9NiApOwoKICAgIGJvb2wgc2V0RXhwYW5kKCB1aW50IGluZGV4
LCBjaGFyIGMgKTsKCiAgICAgICAgICAgICAgICBvcGVyYXRvciBjb25zdCBjaGFyICooKSBjb25z
dDsKICAgIFFDU3RyaW5nICZvcGVyYXRvcis9KCBjb25zdCBjaGFyICpzdHIgKTsKICAgIFFDU3Ry
aW5nICZvcGVyYXRvcis9KCBjaGFyIGMgKTsKfTsKCgoKCgoKICAgICAgICAgUURhdGFTdHJlYW0g
Jm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFDU3RyaW5nICYgKTsKICAgICAgICAg
UURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFDU3RyaW5nICYgKTsKCgoK
CgoKaW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6b3BlcmF0b3I9KCBjb25zdCBRQ1N0cmluZyAm
cyApCnsgcmV0dXJuIChRQ1N0cmluZyYpYXNzaWduKCBzICk7IH0KCmlubGluZSBRQ1N0cmluZyAm
UUNTdHJpbmc6Om9wZXJhdG9yPSggY29uc3QgY2hhciAqc3RyICkKeyByZXR1cm4gKFFDU3RyaW5n
JilkdXBsaWNhdGUoIHN0ciwgcXN0cmxlbihzdHIpKzEgKTsgfQoKaW5saW5lIGJvb2wgUUNTdHJp
bmc6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJuIGRhdGEoKSA9PSAwOyB9CgppbmxpbmUgYm9vbCBR
Q1N0cmluZzo6aXNFbXB0eSgpIGNvbnN0CnsgcmV0dXJuIGRhdGEoKSA9PSAwIHx8ICpkYXRhKCkg
PT0gJ1wwJzsgfQoKaW5saW5lIHVpbnQgUUNTdHJpbmc6Omxlbmd0aCgpIGNvbnN0CnsgcmV0dXJu
IHFzdHJsZW4oIGRhdGEoKSApOyB9CgppbmxpbmUgYm9vbCBRQ1N0cmluZzo6dHJ1bmNhdGUoIHVp
bnQgcG9zICkKeyByZXR1cm4gcmVzaXplKHBvcysxKTsgfQoKaW5saW5lIFFDU3RyaW5nIFFDU3Ry
aW5nOjpjb3B5KCkgY29uc3QKeyByZXR1cm4gUUNTdHJpbmcoIGRhdGEoKSApOyB9CgppbmxpbmUg
UUNTdHJpbmcgJlFDU3RyaW5nOjpwcmVwZW5kKCBjb25zdCBjaGFyICpzICkKeyByZXR1cm4gaW5z
ZXJ0KDAscyk7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OmFwcGVuZCggY29uc3QgY2hh
ciAqcyApCnsgcmV0dXJuIG9wZXJhdG9yKz0ocyk7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJp
bmc6OnNldE51bSggc2hvcnQgbiApCnsgcmV0dXJuIHNldE51bSgobG9uZyluKTsgfQoKaW5saW5l
IFFDU3RyaW5nICZRQ1N0cmluZzo6c2V0TnVtKCB1c2hvcnQgbiApCnsgcmV0dXJuIHNldE51bSgo
dWxvbmcpbik7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OnNldE51bSggaW50IG4gKQp7
IHJldHVybiBzZXROdW0oKGxvbmcpbik7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OnNl
dE51bSggdWludCBuICkKeyByZXR1cm4gc2V0TnVtKCh1bG9uZyluKTsgfQoKaW5saW5lIFFDU3Ry
aW5nICZRQ1N0cmluZzo6c2V0TnVtKCBmbG9hdCBuLCBjaGFyIGYsIGludCBwcmVjICkKeyByZXR1
cm4gc2V0TnVtKChkb3VibGUpbixmLHByZWMpOyB9CgppbmxpbmUgUUNTdHJpbmc6Om9wZXJhdG9y
IGNvbnN0IGNoYXIgKigpIGNvbnN0CnsgcmV0dXJuIChjb25zdCBjaGFyICopZGF0YSgpOyB9CgoK
CgoKCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFDU3RyaW5nICZzMSwg
Y29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIuZGF0YSgp
KSA9PSAwOyB9CgogICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRQ1N0cmlu
ZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIpID09
IDA7IH0KCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IGNoYXIgKnMxLCBj
b25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLHMyLmRhdGEoKSkgPT0gMDsg
fQoKICAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUNTdHJpbmcgJnMxLCBj
b25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMi5kYXRhKCkp
ICE9IDA7IH0KCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFDU3RyaW5n
ICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMikgIT0g
MDsgfQoKICAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgY2hhciAqczEsIGNv
bnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSAhPSAwOyB9
CgogICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoIGNvbnN0IFFDU3RyaW5nICZzMSwgY29u
c3QgUUNTdHJpbmcmIHMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIuZGF0YSgpKSA8
IDA7IH0KCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPCggY29uc3QgUUNTdHJpbmcgJnMx
LCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyKSA8IDA7IH0K
CiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPCggY29uc3QgY2hhciAqczEsIGNvbnN0IFFD
U3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSA8IDA7IH0KCiAgICAg
ICAgIGlubGluZSBib29sIG9wZXJhdG9yPD0oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hh
ciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMikgPD0gMDsgfQoKICAgICAgICAg
aW5saW5lIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFDU3RyaW5nICZz
MiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSA8PSAwOyB9CgogICAgICAgICBpbmxp
bmUgYm9vbCBvcGVyYXRvcj4oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7
IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMikgPiAwOyB9CgogICAgICAgICBpbmxpbmUgYm9v
bCBvcGVyYXRvcj4oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVy
biBxc3RyY21wKHMxLHMyLmRhdGEoKSkgPiAwOyB9CgogICAgICAgICBpbmxpbmUgYm9vbCBvcGVy
YXRvcj49KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0
cmNtcChzMS5kYXRhKCksczIpID49IDA7IH0KCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9y
Pj0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21w
KHMxLHMyLmRhdGEoKSkgPj0gMDsgfQoKICAgICAgICAgaW5saW5lIFFDU3RyaW5nIG9wZXJhdG9y
KyggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7CiAgICBRQ1N0cmlu
ZyB0bXAoIHMxLmRhdGEoKSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKICAg
ICAgICAgaW5saW5lIFFDU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25z
dCBjaGFyICpzMiApCnsKICAgIFFDU3RyaW5nIHRtcCggczEuZGF0YSgpICk7CiAgICB0bXAgKz0g
czI7CiAgICByZXR1cm4gdG1wOwp9CgogICAgICAgICBpbmxpbmUgUUNTdHJpbmcgb3BlcmF0b3Ir
KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKewogICAgUUNTdHJpbmcgdG1w
KCBzMSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKICAgICAgICAgaW5saW5l
IFFDU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUUNTdHJpbmcgJnMxLCBjaGFyIGMyICkKewogICAg
UUNTdHJpbmcgdG1wKCBzMS5kYXRhKCkgKTsKICAgIHRtcCArPSBjMjsKICAgIHJldHVybiB0bXA7
Cn0KCiAgICAgICAgIGlubGluZSBRQ1N0cmluZyBvcGVyYXRvcisoIGNoYXIgYzEsIGNvbnN0IFFD
U3RyaW5nICZzMiApCnsKICAgIFFDU3RyaW5nIHRtcDsKICAgIHRtcCArPSBjMTsKICAgIHRtcCAr
PSBzMjsKICAgIHJldHVybiB0bXA7Cn0KIyA0NCAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc3RyaW5n
LmgiIDIKCgoKCgoKCmNsYXNzIFFSZWdFeHA7CmNsYXNzIFFTdHJpbmc7CmNsYXNzIFFDaGFyUmVm
OwoKY2xhc3MgUUNoYXIgewpwdWJsaWM6CiAgICBRQ2hhcigpOwogICAgUUNoYXIoIGNoYXIgYyAp
OwogICAgUUNoYXIoIHVjaGFyIGMgKTsKICAgIFFDaGFyKCB1Y2hhciBjLCB1Y2hhciByICk7CiAg
ICBRQ2hhciggY29uc3QgUUNoYXImIGMgKTsKICAgIFFDaGFyKCB1c2hvcnQgcmMgKTsKICAgIFFD
aGFyKCBzaG9ydCByYyApOwogICAgUUNoYXIoIHVpbnQgcmMgKTsKICAgIFFDaGFyKCBpbnQgcmMg
KTsKCiAgICBzdGF0aWMgY29uc3QgUUNoYXIgbnVsbDsKICAgIHN0YXRpYyBjb25zdCBRQ2hhciBy
ZXBsYWNlbWVudDsKICAgIHN0YXRpYyBjb25zdCBRQ2hhciBieXRlT3JkZXJNYXJrOwogICAgc3Rh
dGljIGNvbnN0IFFDaGFyIGJ5dGVPcmRlclN3YXBwZWQ7CiAgICBzdGF0aWMgY29uc3QgUUNoYXIg
bmJzcDsKCgoKICAgIGVudW0gQ2F0ZWdvcnkKICAgIHsKICAgICAgICBOb0NhdGVnb3J5LAoKICAg
ICAgICBNYXJrX05vblNwYWNpbmcsCiAgICAgICAgTWFya19TcGFjaW5nQ29tYmluaW5nLAogICAg
ICAgIE1hcmtfRW5jbG9zaW5nLAoKICAgICAgICBOdW1iZXJfRGVjaW1hbERpZ2l0LAogICAgICAg
IE51bWJlcl9MZXR0ZXIsCiAgICAgICAgTnVtYmVyX090aGVyLAoKICAgICAgICBTZXBhcmF0b3Jf
U3BhY2UsCiAgICAgICAgU2VwYXJhdG9yX0xpbmUsCiAgICAgICAgU2VwYXJhdG9yX1BhcmFncmFw
aCwKCiAgICAgICAgT3RoZXJfQ29udHJvbCwKICAgICAgICBPdGhlcl9Gb3JtYXQsCiAgICAgICAg
T3RoZXJfU3Vycm9nYXRlLAogICAgICAgIE90aGVyX1ByaXZhdGVVc2UsCiAgICAgICAgT3RoZXJf
Tm90QXNzaWduZWQsCgogICAgICAgIExldHRlcl9VcHBlcmNhc2UsCiAgICAgICAgTGV0dGVyX0xv
d2VyY2FzZSwKICAgICAgICBMZXR0ZXJfVGl0bGVjYXNlLAogICAgICAgIExldHRlcl9Nb2RpZmll
ciwKICAgICAgICBMZXR0ZXJfT3RoZXIsCgogICAgICAgIFB1bmN0dWF0aW9uX0Nvbm5lY3RvciwK
ICAgICAgICBQdW5jdHVhdGlvbl9EYXNrLAogICAgICAgIFB1bmN0dWF0aW9uX09wZW4sCiAgICAg
ICAgUHVuY3R1YXRpb25fQ2xvc2UsCiAgICAgICAgUHVuY3R1YXRpb25fSW5pdGlhbFF1b3RlLAog
ICAgICAgIFB1bmN0dWF0aW9uX0ZpbmFsUXVvdGUsCiAgICAgICAgUHVuY3R1YXRpb25fT3RoZXIs
CgogICAgICAgIFN5bWJvbF9NYXRoLAogICAgICAgIFN5bWJvbF9DdXJyZW5jeSwKICAgICAgICBT
eW1ib2xfTW9kaWZpZXIsCiAgICAgICAgU3ltYm9sX090aGVyCiAgICB9OwoKICAgIGVudW0gRGly
ZWN0aW9uCiAgICB7CiAgICAgICAgRGlyTCwgRGlyUiwgRGlyRU4sIERpckVTLCBEaXJFVCwgRGly
QU4sIERpckNTLCBEaXJCLCBEaXJTLCBEaXJXUywgRGlyT04sCiAgICAgICAgRGlyTFJFLCBEaXJM
Uk8sIERpckFMLCBEaXJSTEUsIERpclJMTywgRGlyUERGLCBEaXJOU00sIERpckJOCiAgICB9OwoK
ICAgIGVudW0gRGVjb21wb3NpdGlvbgogICAgewogICAgICAgIFNpbmdsZSwgQ2Fub25pY2FsLCBG
b250LCBOb0JyZWFrLCBJbml0aWFsLCBNZWRpYWwsCiAgICAgICAgRmluYWwsIElzb2xhdGVkLCBD
aXJjbGUsIFN1cGVyLCBTdWIsIFZlcnRpY2FsLAogICAgICAgIFdpZGUsIE5hcnJvdywgU21hbGws
IFNxdWFyZSwgQ29tcGF0LCBGcmFjdGlvbgogICAgfTsKCiAgICBlbnVtIEpvaW5pbmcKICAgIHsK
ICAgICAgICBPdGhlckpvaW5pbmcsIER1YWwsIFJpZ2h0LCBDZW50ZXIKICAgIH07CgoKCiAgICBp
bnQgZGlnaXRWYWx1ZSgpIGNvbnN0OwogICAgUUNoYXIgbG93ZXIoKSBjb25zdDsKICAgIFFDaGFy
IHVwcGVyKCkgY29uc3Q7CgogICAgQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdDsKICAgIERpcmVj
dGlvbiBkaXJlY3Rpb24oKSBjb25zdDsKICAgIEpvaW5pbmcgam9pbmluZygpIGNvbnN0OwogICAg
Ym9vbCBtaXJyb3JlZCgpIGNvbnN0OwogICAgUUNoYXIgbWlycm9yZWRDaGFyKCkgY29uc3Q7CiAg
ICBRU3RyaW5nIGRlY29tcG9zaXRpb24oKSBjb25zdDsKICAgIERlY29tcG9zaXRpb24gZGVjb21w
b3NpdGlvblRhZygpIGNvbnN0OwoKICAgIGNoYXIgbGF0aW4xKCkgY29uc3QgeyByZXR1cm4gcncg
PyAwIDogY2w7IH0KICAgIHVzaG9ydCB1bmljb2RlKCkgY29uc3QgeyByZXR1cm4gKHJ3IDw8IDgp
IHwgY2w7IH0KCgogICAgb3BlcmF0b3IgY2hhcigpIGNvbnN0IHsgcmV0dXJuIGxhdGluMSgpOyB9
CgoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gdW5pY29kZSgpPT0wOyB9CiAgICBi
b29sIGlzUHJpbnQoKSBjb25zdDsKICAgIGJvb2wgaXNQdW5jdCgpIGNvbnN0OwogICAgYm9vbCBp
c1NwYWNlKCkgY29uc3Q7CiAgICBib29sIGlzTWFyaygpIGNvbnN0OwogICAgYm9vbCBpc0xldHRl
cigpIGNvbnN0OwogICAgYm9vbCBpc051bWJlcigpIGNvbnN0OwogICAgYm9vbCBpc0xldHRlck9y
TnVtYmVyKCkgY29uc3Q7CiAgICBib29sIGlzRGlnaXQoKSBjb25zdDsKCiAgICB1Y2hhciYgY2Vs
bCgpIHsgcmV0dXJuIGNsOyB9CiAgICB1Y2hhciYgcm93KCkgeyByZXR1cm4gcnc7IH0KICAgIHVj
aGFyIGNlbGwoKSBjb25zdCB7IHJldHVybiBjbDsgfQogICAgdWNoYXIgcm93KCkgY29uc3QgeyBy
ZXR1cm4gcnc7IH0KCiAgICBzdGF0aWMgYm9vbCBuZXR3b3JrT3JkZXJlZCgpIHsgcmV0dXJuIChp
bnQpbmV0X29yZGVyZWQgPT0gMTsgfQoKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yPT0o
IGNoYXIgY2gsIFFDaGFyIGMgKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yPT0oIFFD
aGFyIGMsIGNoYXIgY2ggKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yPT0oIFFDaGFy
IGMxLCBRQ2hhciBjMiApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3IhPSggUUNoYXIg
YzEsIFFDaGFyIGMyICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvciE9KCBjaGFyIGNo
LCBRQ2hhciBjICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvciE9KCBRQ2hhciBjLCBj
aGFyIGNoICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcjw9KCBRQ2hhciBjLCBjaGFy
IGNoICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcjw9KCBjaGFyIGNoLCBRQ2hhciBj
ICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcjw9KCBRQ2hhciBjMSwgUUNoYXIgYzIg
KTsKCnByaXZhdGU6CgoKCiAgICB1Y2hhciBydzsKICAgIHVjaGFyIGNsOwoKCgogICAgZW51bSB7
IG5ldF9vcmRlcmVkID0gMSB9OwojIDIwMiAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc3RyaW5nLmgi
Cn0gOwoKaW5saW5lIFFDaGFyOjpRQ2hhcigpCnsKICAgIHJ3ID0gMDsgY2wgPSAwOwoKCgp9Cmlu
bGluZSBRQ2hhcjo6UUNoYXIoIGNoYXIgYyApCnsKICAgIHJ3ID0gMDsgY2wgPSAodWNoYXIpYzsK
CgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCB1Y2hhciBjICkKewogICAgcncgPSAwOyBjbCA9IGM7
CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggdWNoYXIgYywgdWNoYXIgciApCnsKICAgIHJ3ID0g
cjsgY2wgPSBjOwoKCgp9CmlubGluZSBRQ2hhcjo6UUNoYXIoIGNvbnN0IFFDaGFyJiBjICkKewog
ICAgcncgPSBjLnJ3OyBjbCA9IGMuY2w7CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggdXNob3J0
IHJjICkKewogICAgcncgPSAodWNoYXIpKChyYz4+OCkmMHhmZik7IGNsID0gKHVjaGFyKShyYyYw
eGZmKTsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBzaG9ydCByYyApCnsKICAgIHJ3ID0gKHVj
aGFyKSgocmM+PjgpJjB4ZmYpOyBjbCA9ICh1Y2hhcikocmMmMHhmZik7CgoKCn0KaW5saW5lIFFD
aGFyOjpRQ2hhciggdWludCByYyApCnsKICAgIHJ3ID0gKHVjaGFyKSgocmM+PjgpJjB4ZmYpOyBj
bCA9ICh1Y2hhcikocmMmMHhmZik7CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggaW50IHJjICkK
ewogICAgcncgPSAodWNoYXIpKChyYz4+OCkmMHhmZik7IGNsID0gKHVjaGFyKShyYyYweGZmKTsK
CgoKfQoKCmlubGluZSBpbnQgb3BlcmF0b3I9PSggY2hhciBjaCwgUUNoYXIgYyApCnsKICAgIHJl
dHVybiBjaCA9PSBjLmNsICYmICFjLnJ3Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yPT0oIFFDaGFy
IGMsIGNoYXIgY2ggKQp7CiAgICByZXR1cm4gY2ggPT0gYy5jbCAmJiAhYy5ydzsKfQoKaW5saW5l
IGludCBvcGVyYXRvcj09KCBRQ2hhciBjMSwgUUNoYXIgYzIgKQp7CiAgICByZXR1cm4gYzEuY2wg
PT0gYzIuY2wKICAgICAgICAmJiBjMS5ydyA9PSBjMi5ydzsKfQoKaW5saW5lIGludCBvcGVyYXRv
ciE9KCBRQ2hhciBjMSwgUUNoYXIgYzIgKQp7CiAgICByZXR1cm4gYzEuY2wgIT0gYzIuY2wKICAg
ICAgICB8fCBjMS5ydyAhPSBjMi5ydzsKfQoKaW5saW5lIGludCBvcGVyYXRvciE9KCBjaGFyIGNo
LCBRQ2hhciBjICkKewogICAgcmV0dXJuIGNoICE9IGMuY2wgfHwgYy5ydzsKfQoKaW5saW5lIGlu
dCBvcGVyYXRvciE9KCBRQ2hhciBjLCBjaGFyIGNoICkKewogICAgcmV0dXJuIGNoICE9IGMuY2wg
fHwgYy5ydzsKfQoKaW5saW5lIGludCBvcGVyYXRvcjw9KCBRQ2hhciBjLCBjaGFyIGNoICkKewog
ICAgcmV0dXJuICEoY2ggPCBjLmNsIHx8IGMucncpOwp9CgppbmxpbmUgaW50IG9wZXJhdG9yPD0o
IGNoYXIgY2gsIFFDaGFyIGMgKQp7CiAgICByZXR1cm4gY2ggPD0gYy5jbCB8fCBjLnJ3Owp9Cgpp
bmxpbmUgaW50IG9wZXJhdG9yPD0oIFFDaGFyIGMxLCBRQ2hhciBjMiApCnsKICAgIHJldHVybiBj
MS5ydyA+IGMyLnJ3CiAgICAgICAgPyBGQUxTRQogICAgICAgIDogYzEucncgPCBjMi5ydwogICAg
ICAgICAgICA/IFRSVUUKICAgICAgICAgICAgOiBjMS5jbCA8PSBjMi5jbDsKfQoKaW5saW5lIGlu
dCBvcGVyYXRvcj49KCBRQ2hhciBjLCBjaGFyIGNoICkgeyByZXR1cm4gY2ggPD0gYzsgfQppbmxp
bmUgaW50IG9wZXJhdG9yPj0oIGNoYXIgY2gsIFFDaGFyIGMgKSB7IHJldHVybiBjIDw9IGNoOyB9
CmlubGluZSBpbnQgb3BlcmF0b3I+PSggUUNoYXIgYzEsIFFDaGFyIGMyICkgeyByZXR1cm4gYzIg
PD0gYzE7IH0KaW5saW5lIGludCBvcGVyYXRvcjwoIFFDaGFyIGMsIGNoYXIgY2ggKSB7IHJldHVy
biAhKGNoPD1jKTsgfQppbmxpbmUgaW50IG9wZXJhdG9yPCggY2hhciBjaCwgUUNoYXIgYyApIHsg
cmV0dXJuICEoYzw9Y2gpOyB9CmlubGluZSBpbnQgb3BlcmF0b3I8KCBRQ2hhciBjMSwgUUNoYXIg
YzIgKSB7IHJldHVybiAhKGMyPD1jMSk7IH0KaW5saW5lIGludCBvcGVyYXRvcj4oIFFDaGFyIGMs
IGNoYXIgY2ggKSB7IHJldHVybiAhKGNoPj1jKTsgfQppbmxpbmUgaW50IG9wZXJhdG9yPiggY2hh
ciBjaCwgUUNoYXIgYyApIHsgcmV0dXJuICEoYz49Y2gpOyB9CmlubGluZSBpbnQgb3BlcmF0b3I+
KCBRQ2hhciBjMSwgUUNoYXIgYzIgKSB7IHJldHVybiAhKGMyPj1jMSk7IH0KCgpzdHJ1Y3QgUVN0
cmluZ0RhdGEgOiBwdWJsaWMgUVNoYXJlZCB7CiAgICBRU3RyaW5nRGF0YSgpIDoKICAgICAgICB1
bmljb2RlKDApLCBhc2NpaSgwKSwgbGVuKDApLCBtYXhsKDApLCBkaXJ0eWFzY2lpKDApIHsgcmVm
KCk7IH0KICAgIFFTdHJpbmdEYXRhKFFDaGFyICp1LCB1aW50IGwsIHVpbnQgbSkgOgogICAgICAg
IHVuaWNvZGUodSksIGFzY2lpKDApLCBsZW4obCksIG1heGwobSksIGRpcnR5YXNjaWkoMCkgeyB9
CgogICAgflFTdHJpbmdEYXRhKCkgeyBpZiAoIHVuaWNvZGUgKSBkZWxldGVbXSAoKGNoYXIqKXVu
aWNvZGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIGFzY2lpICkgZGVsZXRlW10gYXNjaWk7
IH0KCiAgICB2b2lkIGRlbGV0ZVNlbGYoKTsKICAgIFFDaGFyICp1bmljb2RlOwogICAgY2hhciAq
YXNjaWk7CiAgICB1aW50IGxlbjsKICAgIHVpbnQgbWF4bDozMDsKICAgIHVpbnQgZGlydHlhc2Np
aToxOwp9OwoKCmNsYXNzIFFTdHJpbmcKewpwdWJsaWM6CiAgICBRU3RyaW5nKCk7CiAgICBRU3Ry
aW5nKCBRQ2hhciApOwogICAgUVN0cmluZyggY29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5n
KCBjb25zdCBRQnl0ZUFycmF5JiApOwogICAgUVN0cmluZyggY29uc3QgUUNoYXIqIHVuaWNvZGUs
IHVpbnQgbGVuZ3RoICk7CgogICAgUVN0cmluZyggY29uc3QgY2hhciAqc3RyICk7CgogICAgflFT
dHJpbmcoKTsKCiAgICBRU3RyaW5nICZvcGVyYXRvcj0oIGNvbnN0IFFTdHJpbmcgJiApOwoKICAg
IFFTdHJpbmcgJm9wZXJhdG9yPSggY29uc3QgY2hhciAqICk7CgogICAgUVN0cmluZyAmb3BlcmF0
b3I9KCBjb25zdCBRQ1N0cmluZyYgKTsKICAgIFFTdHJpbmcgJm9wZXJhdG9yPSggUUNoYXIgYyAp
OwogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBjaGFyIGMgKTsKCiAgICBzdGF0aWMgY29uc3QgUVN0
cmluZyBudWxsOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29sIGlzRW1wdHkoKSBj
b25zdDsKICAgIHVpbnQgbGVuZ3RoKCkgY29uc3Q7CiAgICB2b2lkIHRydW5jYXRlKCB1aW50IHBv
cyApOwoKCgoKICAgIHZvaWQgZmlsbCggUUNoYXIgYywgaW50IGxlbiA9IC0xICk7CgogICAgUVN0
cmluZyBjb3B5KCkgY29uc3Q7CgogICAgUVN0cmluZyBhcmcobG9uZyBhLCBpbnQgZmllbGR3aWR0
aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyh1bG9uZyBhLCBpbnQgZmll
bGR3aWR0aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhpbnQgYSwgaW50
IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTApIGNvbnN0OwogICAgUVN0cmluZyBhcmcodWludCBh
LCBpbnQgZmllbGR3aWR0aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhz
aG9ydCBhLCBpbnQgZmllbGR3aWR0aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5n
IGFyZyh1c2hvcnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTApIGNvbnN0OwogICAg
UVN0cmluZyBhcmcoY2hhciBhLCBpbnQgZmllbGR3aWR0aD0wKSBjb25zdDsKICAgIFFTdHJpbmcg
YXJnKFFDaGFyIGEsIGludCBmaWVsZHdpZHRoPTApIGNvbnN0OwogICAgUVN0cmluZyBhcmcoY29u
c3QgUVN0cmluZyYgYSwgaW50IGZpZWxkd2lkdGg9MCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhk
b3VibGUgYSwgaW50IGZpZWxkd2lkdGg9MCwgY2hhciBmbXQ9J2cnLCBpbnQgcHJlYz0tMSkgY29u
c3Q7CgogICAgUVN0cmluZyAmc3ByaW50ZiggY29uc3QgY2hhciogZm9ybWF0LCAuLi4gKQoKICAg
ICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKCiAgICAgICAgOwoK
ICAgIGludCBmaW5kKCBRQ2hhciBjLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29uc3Q7
CiAgICBpbnQgZmluZCggY2hhciBjLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29uc3Q7
CiAgICBpbnQgZmluZCggY29uc3QgUVN0cmluZyAmc3RyLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1U
UlVFICkgY29uc3Q7CiAgICBpbnQgZmluZCggY29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5kZXg9MCAp
IGNvbnN0OwoKICAgIGludCBmaW5kKCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleD0wICkgY29u
c3Q7CgogICAgaW50IGZpbmRSZXYoIFFDaGFyIGMsIGludCBpbmRleD0tMSwgYm9vbCBjcz1UUlVF
KSBjb25zdDsKICAgIGludCBmaW5kUmV2KCBjaGFyIGMsIGludCBpbmRleD0tMSwgYm9vbCBjcz1U
UlVFKSBjb25zdDsKICAgIGludCBmaW5kUmV2KCBjb25zdCBRU3RyaW5nICZzdHIsIGludCBpbmRl
eD0tMSwgYm9vbCBjcz1UUlVFKSBjb25zdDsKICAgIGludCBmaW5kUmV2KCBjb25zdCBRUmVnRXhw
ICYsIGludCBpbmRleD0tMSApIGNvbnN0OwoKICAgIGludCBmaW5kUmV2KCBjb25zdCBjaGFyKiBz
dHIsIGludCBpbmRleD0tMSApIGNvbnN0OwoKICAgIGludCBjb250YWlucyggUUNoYXIgYywgYm9v
bCBjcz1UUlVFICkgY29uc3Q7CiAgICBpbnQgY29udGFpbnMoIGNoYXIgYywgYm9vbCBjcz1UUlVF
ICkgY29uc3QKICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBjb250YWlucyhRQ2hhcihjKSwg
Y3MpOyB9CgogICAgaW50IGNvbnRhaW5zKCBjb25zdCBjaGFyKiBzdHIsIGJvb2wgY3M9VFJVRSAp
IGNvbnN0OwoKICAgIGludCBjb250YWlucyggY29uc3QgUVN0cmluZyAmc3RyLCBib29sIGNzPVRS
VUUgKSBjb25zdDsKICAgIGludCBjb250YWlucyggY29uc3QgUVJlZ0V4cCAmICkgY29uc3Q7Cgog
ICAgUVN0cmluZyBsZWZ0KCB1aW50IGxlbiApIGNvbnN0OwogICAgUVN0cmluZyByaWdodCggdWlu
dCBsZW4gKSBjb25zdDsKICAgIFFTdHJpbmcgbWlkKCB1aW50IGluZGV4LCB1aW50IGxlbj0weGZm
ZmZmZmZmKSBjb25zdDsKCiAgICBRU3RyaW5nIGxlZnRKdXN0aWZ5KCB1aW50IHdpZHRoLCBRQ2hh
ciBmaWxsPScgJywgYm9vbCB0cnVuYz1GQUxTRSljb25zdDsKICAgIFFTdHJpbmcgcmlnaHRKdXN0
aWZ5KCB1aW50IHdpZHRoLCBRQ2hhciBmaWxsPScgJyxib29sIHRydW5jPUZBTFNFKWNvbnN0OwoK
ICAgIFFTdHJpbmcgbG93ZXIoKSBjb25zdDsKICAgIFFTdHJpbmcgdXBwZXIoKSBjb25zdDsKCiAg
ICBRU3RyaW5nIHN0cmlwV2hpdGVTcGFjZSgpIGNvbnN0OwogICAgUVN0cmluZyBzaW1wbGlmeVdo
aXRlU3BhY2UoKSBjb25zdDsKCiAgICBRU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNvbnN0
IFFTdHJpbmcgJiApOwogICAgUVN0cmluZyAmaW5zZXJ0KCB1aW50IGluZGV4LCBjb25zdCBRQ2hh
ciosIHVpbnQgbGVuICk7CiAgICBRU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIFFDaGFyICk7
CiAgICBRU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNoYXIgYyApIHsgcmV0dXJuIGluc2Vy
dChpbmRleCxRQ2hhcihjKSk7IH0KICAgIFFTdHJpbmcgJmFwcGVuZCggY2hhciApOwogICAgUVN0
cmluZyAmYXBwZW5kKCBRQ2hhciApOwogICAgUVN0cmluZyAmYXBwZW5kKCBjb25zdCBRU3RyaW5n
ICYgKTsKICAgIFFTdHJpbmcgJnByZXBlbmQoIGNoYXIgKTsKICAgIFFTdHJpbmcgJnByZXBlbmQo
IFFDaGFyICk7CiAgICBRU3RyaW5nICZwcmVwZW5kKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFT
dHJpbmcgJnJlbW92ZSggdWludCBpbmRleCwgdWludCBsZW4gKTsKICAgIFFTdHJpbmcgJnJlcGxh
Y2UoIHVpbnQgaW5kZXgsIHVpbnQgbGVuLCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcg
JnJlcGxhY2UoIHVpbnQgaW5kZXgsIHVpbnQgbGVuLCBjb25zdCBRQ2hhciosIHVpbnQgY2xlbiAp
OwogICAgUVN0cmluZyAmcmVwbGFjZSggY29uc3QgUVJlZ0V4cCAmLCBjb25zdCBRU3RyaW5nICYg
KTsKCiAgICBzaG9ydCB0b1Nob3J0KCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0Owog
ICAgdXNob3J0IHRvVVNob3J0KCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAg
aW50IHRvSW50KCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAgdWludCB0b1VJ
bnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICBsb25nIHRvTG9uZyggYm9v
bCAqb2s9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIHVsb25nIHRvVUxvbmcoIGJvb2wgKm9r
PTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICBmbG9hdCB0b0Zsb2F0KCBib29sICpvaz0wICkg
Y29uc3Q7CiAgICBkb3VibGUgdG9Eb3VibGUoIGJvb2wgKm9rPTAgKSBjb25zdDsKCiAgICBRU3Ry
aW5nICZzZXROdW0oIHNob3J0LCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0TnVtKCB1
c2hvcnQsIGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5nICZzZXROdW0oIGludCwgaW50IGJhc2U9
MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggdWludCwgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJp
bmcgJnNldE51bSggbG9uZywgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggdWxv
bmcsIGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5nICZzZXROdW0oIGZsb2F0LCBjaGFyIGY9J2cn
LCBpbnQgcHJlYz02ICk7CiAgICBRU3RyaW5nICZzZXROdW0oIGRvdWJsZSwgY2hhciBmPSdnJywg
aW50IHByZWM9NiApOwoKICAgIHN0YXRpYyBRU3RyaW5nIG51bWJlciggbG9uZywgaW50IGJhc2U9
MTAgKTsKICAgIHN0YXRpYyBRU3RyaW5nIG51bWJlciggdWxvbmcsIGludCBiYXNlPTEwKTsKICAg
IHN0YXRpYyBRU3RyaW5nIG51bWJlciggaW50LCBpbnQgYmFzZT0xMCApOwogICAgc3RhdGljIFFT
dHJpbmcgbnVtYmVyKCB1aW50LCBpbnQgYmFzZT0xMCk7CiAgICBzdGF0aWMgUVN0cmluZyBudW1i
ZXIoIGRvdWJsZSwgY2hhciBmPSdnJywgaW50IHByZWM9NiApOwoKICAgIHZvaWQgc2V0RXhwYW5k
KCB1aW50IGluZGV4LCBRQ2hhciBjICk7CgogICAgUVN0cmluZyAmb3BlcmF0b3IrPSggY29uc3Qg
UVN0cmluZyAmc3RyICk7CiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBRQ2hhciBjICk7CiAgICBR
U3RyaW5nICZvcGVyYXRvcis9KCBjaGFyIGMgKTsKCgogICAgUUNoYXIgYXQoIHVpbnQgaSApIGNv
bnN0CiAgICAgICAgeyByZXR1cm4gaTxkLT5sZW4gPyBkLT51bmljb2RlW2ldIDogUUNoYXI6Om51
bGw7IH0KICAgIFFDaGFyIG9wZXJhdG9yW10oIGludCBpICkgY29uc3QgeyByZXR1cm4gYXQoKHVp
bnQpaSk7IH0KICAgIFFDaGFyUmVmIGF0KCB1aW50IGkgKTsKICAgIFFDaGFyUmVmIG9wZXJhdG9y
W10oIGludCBpICk7CgogICAgUUNoYXIgY29uc3RyZWYodWludCBpKSBjb25zdAogICAgICAgIHsg
cmV0dXJuIGF0KGkpOyB9CiAgICBRQ2hhciYgcmVmKHVpbnQgaSkKICAgICAgICB7CiAgICAgICAg
ICAgIGlmIChkLT5jb3VudCE9MSB8fCBpPj1kLT5sZW4pCiAgICAgICAgICAgICAgICBzdWJhdChp
KTsKICAgICAgICAgICAgZC0+ZGlydHlhc2NpaT0xOwogICAgICAgICAgICByZXR1cm4gZC0+dW5p
Y29kZVtpXTsKICAgICAgICB9CgogICAgY29uc3QgUUNoYXIqIHVuaWNvZGUoKSBjb25zdCB7IHJl
dHVybiBkLT51bmljb2RlOyB9CiAgICBjb25zdCBjaGFyKiBhc2NpaSgpIGNvbnN0OwogICAgY29u
c3QgY2hhciogbGF0aW4xKCkgY29uc3Q7CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tTGF0aW4xKGNv
bnN0IGNoYXIqLCBpbnQgbGVuPS0xKTsKCiAgICBRQ1N0cmluZyB1dGY4KCkgY29uc3Q7CiAgICBz
dGF0aWMgUVN0cmluZyBmcm9tVXRmOChjb25zdCBjaGFyKiwgaW50IGxlbj0tMSk7CgogICAgUUNT
dHJpbmcgbG9jYWw4Qml0KCkgY29uc3Q7CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tTG9jYWw4Qml0
KGNvbnN0IGNoYXIqLCBpbnQgbGVuPS0xKTsKICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7Cgog
ICAgb3BlcmF0b3IgY29uc3QgY2hhciAqKCkgY29uc3QgeyByZXR1cm4gbGF0aW4xKCk7IH0KCgog
ICAgUVN0cmluZyAmc2V0VW5pY29kZSggY29uc3QgUUNoYXIqIHVuaWNvZGUsIHVpbnQgbGVuICk7
CiAgICBRU3RyaW5nICZzZXRVbmljb2RlQ29kZXMoIGNvbnN0IHVzaG9ydCogdW5pY29kZV9hc191
c2hvcnRzLCB1aW50IGxlbiApOwogICAgUVN0cmluZyAmc2V0TGF0aW4xKCBjb25zdCBjaGFyKiwg
aW50IGxlbj0tMSApOwoKICAgIGludCBjb21wYXJlKCBjb25zdCBRU3RyaW5nJiBzICkgY29uc3Q7
CiAgICBzdGF0aWMgaW50IGNvbXBhcmUoIGNvbnN0IFFTdHJpbmcmIHMxLCBjb25zdCBRU3RyaW5n
JiBzMiApCiAgICAgICAgeyByZXR1cm4gczEuY29tcGFyZShzMik7IH0KCgogICAgZnJpZW5kIFFE
YXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRU3RyaW5nICYgKTsKCgogICAg
dm9pZCBjb21wb3NlKCk7CiAgICBRQ2hhcjo6RGlyZWN0aW9uIGJhc2ljRGlyZWN0aW9uKCk7CiAg
ICBRU3RyaW5nIHZpc3VhbChpbnQgaW5kZXggPSAwLCBpbnQgbGVuID0gLTEpOwoKCiAgICBjb25z
dCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbGF0aW4xKCk7IH0KCgogICAgYm9vbCBzdGFy
dHNXaXRoKCBjb25zdCBRU3RyaW5nJiApIGNvbnN0OwoKcHJpdmF0ZToKICAgIFFTdHJpbmcoIGlu
dCBzaXplLCBib29sICk7CgogICAgdm9pZCBkZXJlZigpOwogICAgdm9pZCByZWFsX2RldGFjaCgp
OwogICAgdm9pZCBzZXRMZW5ndGgoIHVpbnQgcG9zICk7CiAgICB2b2lkIHN1YmF0KCB1aW50ICk7
CiAgICBib29sIGZpbmRBcmcoaW50JiBwb3MsIGludCYgbGVuKSBjb25zdDsKCiAgICBzdGF0aWMg
UUNoYXIqIGFzY2lpVG9Vbmljb2RlKCBjb25zdCBjaGFyKiwgdWludCAqIGxlbiwgdWludCBtYXhs
ZW49KHVpbnQpLTEgKTsKICAgIHN0YXRpYyBRQ2hhciogYXNjaWlUb1VuaWNvZGUoIGNvbnN0IFFC
eXRlQXJyYXkmLCB1aW50ICogbGVuICk7CiAgICBzdGF0aWMgY2hhciogdW5pY29kZVRvQXNjaWko
IGNvbnN0IFFDaGFyKiwgdWludCBsZW4gKTsKCiAgICBRU3RyaW5nRGF0YSAqZDsKICAgIHN0YXRp
YyBRU3RyaW5nRGF0YSogc2hhcmVkX251bGw7CiAgICBzdGF0aWMgUVN0cmluZ0RhdGEqIG1ha2VT
aGFyZWROdWxsKCk7CgogICAgZnJpZW5kIGNsYXNzIFFDb25zdFN0cmluZzsKICAgIFFTdHJpbmco
UVN0cmluZ0RhdGEqIGRkLCBib29sICkgOiBkKGRkKSB7IH0KfTsKCmNsYXNzIFFDaGFyUmVmIHsK
ICAgIGZyaWVuZCBjbGFzcyBRU3RyaW5nOwogICAgUVN0cmluZyYgczsKICAgIHVpbnQgcDsKICAg
IFFDaGFyUmVmKFFTdHJpbmcqIHN0ciwgdWludCBwb3MpIDogcygqc3RyKSwgcChwb3MpIHsgfQoK
cHVibGljOgoKCgoKICAgIHVzaG9ydCB1bmljb2RlKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJl
ZihwKS51bmljb2RlKCk7IH0KICAgIGNoYXIgbGF0aW4xKCkgY29uc3QgeyByZXR1cm4gcy5jb25z
dHJlZihwKS5sYXRpbjEoKTsgfQoKCiAgICBRQ2hhclJlZiBvcGVyYXRvcj0oY2hhciBjICkgeyBz
LnJlZihwKT1jOyByZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPSh1Y2hhciBj
ICkgeyBzLnJlZihwKT1jOyByZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPShR
Q2hhciBjICkgeyBzLnJlZihwKT1jOyByZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFyUmVmIG9wZXJh
dG9yPShjb25zdCBRQ2hhclJlZiYgYyApIHsgcy5yZWYocCk9Yy51bmljb2RlKCk7IHJldHVybiAq
dGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KHVzaG9ydCByYyApIHsgcy5yZWYocCk9cmM7
IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KHNob3J0IHJjICkgeyBzLnJl
ZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0odWludCByYyAp
IHsgcy5yZWYocCk9cmM7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KGlu
dCByYyApIHsgcy5yZWYocCk9cmM7IHJldHVybiAqdGhpczsgfQoKICAgIG9wZXJhdG9yIFFDaGFy
ICgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCk7IH0KCgogICAgYm9vbCBpc051bGwoKSBj
b25zdCB7IHJldHVybiB1bmljb2RlKCk9PTA7IH0KICAgIGJvb2wgaXNQcmludCgpIGNvbnN0IHsg
cmV0dXJuIHMuY29uc3RyZWYocCkuaXNQcmludCgpOyB9CiAgICBib29sIGlzUHVuY3QoKSBjb25z
dCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzUHVuY3QoKTsgfQogICAgYm9vbCBpc1NwYWNlKCkg
Y29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc1NwYWNlKCk7IH0KICAgIGJvb2wgaXNNYXJr
KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc01hcmsoKTsgfQogICAgYm9vbCBpc0xl
dHRlcigpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNMZXR0ZXIoKTsgfQogICAgYm9v
bCBpc051bWJlcigpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNOdW1iZXIoKTsgfQog
ICAgYm9vbCBpc0xldHRlck9yTnVtYmVyKCkgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc0xldHRl
ck9yTnVtYmVyKCk7IH0KICAgIGJvb2wgaXNEaWdpdCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3Ry
ZWYocCkuaXNEaWdpdCgpOyB9CgogICAgaW50IGRpZ2l0VmFsdWUoKSBjb25zdCB7IHJldHVybiBz
LmNvbnN0cmVmKHApLmRpZ2l0VmFsdWUoKTsgfQogICAgUUNoYXIgbG93ZXIoKSB7IHJldHVybiBz
LmNvbnN0cmVmKHApLmxvd2VyKCk7IH0KICAgIFFDaGFyIHVwcGVyKCkgeyByZXR1cm4gcy5jb25z
dHJlZihwKS51cHBlcigpOyB9CgogICAgUUNoYXI6OkNhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3Qg
eyByZXR1cm4gcy5jb25zdHJlZihwKS5jYXRlZ29yeSgpOyB9CiAgICBRQ2hhcjo6RGlyZWN0aW9u
IGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuZGlyZWN0aW9uKCk7IH0K
ICAgIFFDaGFyOjpKb2luaW5nIGpvaW5pbmcoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHAp
LmpvaW5pbmcoKTsgfQogICAgYm9vbCBtaXJyb3JlZCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3Ry
ZWYocCkubWlycm9yZWQoKTsgfQogICAgUUNoYXIgbWlycm9yZWRDaGFyKCkgY29uc3QgeyByZXR1
cm4gcy5jb25zdHJlZihwKS5taXJyb3JlZENoYXIoKTsgfQogICAgUVN0cmluZyBkZWNvbXBvc2l0
aW9uKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5kZWNvbXBvc2l0aW9uKCk7IH0KICAg
IFFDaGFyOjpEZWNvbXBvc2l0aW9uIGRlY29tcG9zaXRpb25UYWcoKSBjb25zdCB7IHJldHVybiBz
LmNvbnN0cmVmKHApLmRlY29tcG9zaXRpb25UYWcoKTsgfQoKCiAgICB1Y2hhciBjZWxsKCkgY29u
c3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5jZWxsKCk7IH0KICAgIHVjaGFyIHJvdygpIGNvbnN0
IHsgcmV0dXJuIHMuY29uc3RyZWYocCkucm93KCk7IH0KCn07CgppbmxpbmUgUUNoYXJSZWYgUVN0
cmluZzo6YXQoIHVpbnQgaSApIHsgcmV0dXJuIFFDaGFyUmVmKHRoaXMsaSk7IH0KaW5saW5lIFFD
aGFyUmVmIFFTdHJpbmc6Om9wZXJhdG9yW10oIGludCBpICkgeyByZXR1cm4gYXQoKHVpbnQpaSk7
IH0KCgpjbGFzcyBRQ29uc3RTdHJpbmcgOiBwcml2YXRlIFFTdHJpbmcgewpwdWJsaWM6CiAgICBR
Q29uc3RTdHJpbmcoIFFDaGFyKiB1bmljb2RlLCB1aW50IGxlbmd0aCApOwogICAgflFDb25zdFN0
cmluZygpOwogICAgY29uc3QgUVN0cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7
IH0KfTsKCgoKCgoKICAgICAgICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFt
ICYsIGNvbnN0IFFTdHJpbmcgJiApOwogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+Pigg
UURhdGFTdHJlYW0gJiwgUVN0cmluZyAmICk7CiMgNjQxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fz
dHJpbmcuaCIKaW5saW5lIFFTdHJpbmc6OlFTdHJpbmcoKSA6CiAgICBkKHNoYXJlZF9udWxsID8g
c2hhcmVkX251bGwgOiBtYWtlU2hhcmVkTnVsbCgpKQp7CiAgICBkLT5yZWYoKTsKfQoKaW5saW5l
IFFTdHJpbmc6On5RU3RyaW5nKCkKewogICAgaWYgKCBkLT5kZXJlZigpICkgewogICAgICAgIGlm
ICggZCA9PSBzaGFyZWRfbnVsbCApCiAgICAgICAgICAgIHNoYXJlZF9udWxsID0gMDsKICAgICAg
ICBkLT5kZWxldGVTZWxmKCk7CiAgICB9Cn0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpvcGVy
YXRvcj0oIFFDaGFyIGMgKQp7IHJldHVybiAqdGhpcyA9IFFTdHJpbmcoYyk7IH0KCmlubGluZSBR
U3RyaW5nICZRU3RyaW5nOjpvcGVyYXRvcj0oIGNoYXIgYyApCnsgcmV0dXJuICp0aGlzID0gUVN0
cmluZyhRQ2hhcihjKSk7IH0KCmlubGluZSBib29sIFFTdHJpbmc6OmlzTnVsbCgpIGNvbnN0Cnsg
cmV0dXJuIHVuaWNvZGUoKSA9PSAwOyB9CgppbmxpbmUgYm9vbCBRU3RyaW5nOjpvcGVyYXRvciEo
KSBjb25zdAp7IHJldHVybiBpc051bGwoKTsgfQoKaW5saW5lIHVpbnQgUVN0cmluZzo6bGVuZ3Ro
KCkgY29uc3QKeyByZXR1cm4gZC0+bGVuOyB9CgppbmxpbmUgYm9vbCBRU3RyaW5nOjppc0VtcHR5
KCkgY29uc3QKeyByZXR1cm4gbGVuZ3RoKCkgPT0gMDsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmlu
Zzo6Y29weSgpIGNvbnN0CnsgcmV0dXJuIFFTdHJpbmcoICp0aGlzICk7IH0KCmlubGluZSBRU3Ry
aW5nICZRU3RyaW5nOjpwcmVwZW5kKCBjb25zdCBRU3RyaW5nICYgcyApCnsgcmV0dXJuIGluc2Vy
dCgwLHMpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCggUUNoYXIgYyApCnsg
cmV0dXJuIGluc2VydCgwLGMpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCgg
Y2hhciBjICkKeyByZXR1cm4gaW5zZXJ0KDAsYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5n
OjphcHBlbmQoIGNvbnN0IFFTdHJpbmcgJiBzICkKeyByZXR1cm4gb3BlcmF0b3IrPShzKTsgfQoK
aW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OmFwcGVuZCggUUNoYXIgYyApCnsgcmV0dXJuIG9wZXJh
dG9yKz0oYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNoYXIgYyApCnsg
cmV0dXJuIG9wZXJhdG9yKz0oYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0o
IHNob3J0IG4sIGludCBiYXNlICkKeyByZXR1cm4gc2V0TnVtKChsb25nKW4sIGJhc2UpOyB9Cgpp
bmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVtKCB1c2hvcnQgbiwgaW50IGJhc2UgKQp7IHJl
dHVybiBzZXROdW0oKHVsb25nKW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6
c2V0TnVtKCBpbnQgbiwgaW50IGJhc2UgKQp7IHJldHVybiBzZXROdW0oKGxvbmcpbiwgYmFzZSk7
IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0oIHVpbnQgbiwgaW50IGJhc2UgKQp7
IHJldHVybiBzZXROdW0oKHVsb25nKW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmlu
Zzo6c2V0TnVtKCBmbG9hdCBuLCBjaGFyIGYsIGludCBwcmVjICkKeyByZXR1cm4gc2V0TnVtKChk
b3VibGUpbixmLHByZWMpOyB9CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjphcmcoaW50IGEsIGlu
dCBmaWVsZHdpZHRoLCBpbnQgYmFzZSkgY29uc3QKeyByZXR1cm4gYXJnKChsb25nKWEsIGZpZWxk
d2lkdGgsIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjphcmcodWludCBhLCBpbnQg
ZmllbGR3aWR0aCwgaW50IGJhc2UpIGNvbnN0CnsgcmV0dXJuIGFyZygodWxvbmcpYSwgZmllbGR3
aWR0aCwgYmFzZSk7IH0KCmlubGluZSBRU3RyaW5nIFFTdHJpbmc6OmFyZyhzaG9ydCBhLCBpbnQg
ZmllbGR3aWR0aCwgaW50IGJhc2UpIGNvbnN0CnsgcmV0dXJuIGFyZygobG9uZylhLCBmaWVsZHdp
ZHRoLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmluZzo6YXJnKHVzaG9ydCBhLCBpbnQg
ZmllbGR3aWR0aCwgaW50IGJhc2UpIGNvbnN0CnsgcmV0dXJuIGFyZygodWxvbmcpYSwgZmllbGR3
aWR0aCwgYmFzZSk7IH0KCmlubGluZSBpbnQgUVN0cmluZzo6ZmluZCggY2hhciBjLCBpbnQgaW5k
ZXgsIGJvb2wgY3MgKSBjb25zdAp7IHJldHVybiBmaW5kKFFDaGFyKGMpLCBpbmRleCwgY3MpOyB9
CgppbmxpbmUgaW50IFFTdHJpbmc6OmZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4LCBib29sIGNz
KSBjb25zdAp7IHJldHVybiBmaW5kUmV2KCBRQ2hhcihjKSwgaW5kZXgsIGNzICk7IH0KCgoKaW5s
aW5lIGludCBRU3RyaW5nOjpmaW5kKCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleCApIGNvbnN0
CnsgcmV0dXJuIGZpbmQoUVN0cmluZzo6ZnJvbUxhdGluMShzdHIpLCBpbmRleCk7IH0KCmlubGlu
ZSBpbnQgUVN0cmluZzo6ZmluZFJldiggY29uc3QgY2hhciogc3RyLCBpbnQgaW5kZXggKSBjb25z
dAp7IHJldHVybiBmaW5kUmV2KFFTdHJpbmc6OmZyb21MYXRpbjEoc3RyKSwgaW5kZXgpOyB9CgoK
CgoKCgogICAgICAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBR
U3RyaW5nICZzMiApOwogICAgICAgICBib29sIG9wZXJhdG9yPCggY29uc3QgUVN0cmluZyAmczEs
IGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgUVN0
cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I9PSgg
Y29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgICAgICAgIGJvb2wgb3Bl
cmF0b3I+KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKICAgICAgICAg
Ym9vbCBvcGVyYXRvcj49KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsK
CiAgICAgICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIg
KnMyICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3Qg
Y2hhciAqczIgKTsKICAgICAgICAgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBRU3RyaW5nICZzMSwg
Y29uc3QgY2hhciAqczIgKTsKICAgICAgICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRU3RyaW5n
ICZzMSwgY29uc3QgY2hhciAqczIgKTsKICAgICAgICAgYm9vbCBvcGVyYXRvcj4oIGNvbnN0IFFT
dHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogICAgICAgICBib29sIG9wZXJhdG9yPj0oIGNv
bnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogICAgICAgICBib29sIG9wZXJhdG9y
IT0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogICAgICAgICBib29sIG9w
ZXJhdG9yPCggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgICAgICAgIGJv
b2wgb3BlcmF0b3I8PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7
CgogICAgICAgICBib29sIG9wZXJhdG9yPj0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5n
ICZzMiApOwoKCiAgICAgICAgIGlubGluZSBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUVN0cmlu
ZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0
bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgoKICAgICAgICAgaW5saW5lIFFTdHJpbmcgb3Bl
cmF0b3IrKCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7CiAgICBRU3RyaW5n
IHRtcCggczEgKTsKICAgIHRtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKHMyKTsKICAgIHJldHVy
biB0bXA7Cn0KCiAgICAgICAgIGlubGluZSBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgY2hhciAq
czEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewogICAgUVN0cmluZyB0bXAgPSBRU3RyaW5nOjpmcm9t
TGF0aW4xKCBzMSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKCiAgICAgICAg
IGlubGluZSBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUVN0cmluZyAmczEsIFFDaGFyIGMyICkK
ewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gYzI7CiAgICByZXR1cm4gdG1wOwp9
CgogICAgICAgICBpbmxpbmUgUVN0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFTdHJpbmcgJnMxLCBj
aGFyIGMyICkKewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gYzI7CiAgICByZXR1
cm4gdG1wOwp9CgogICAgICAgICBpbmxpbmUgUVN0cmluZyBvcGVyYXRvcisoIFFDaGFyIGMxLCBj
b25zdCBRU3RyaW5nICZzMiApCnsKICAgIFFTdHJpbmcgdG1wOwogICAgdG1wICs9IGMxOwogICAg
dG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKICAgICAgICAgaW5saW5lIFFTdHJpbmcgb3Bl
cmF0b3IrKCBjaGFyIGMxLCBjb25zdCBRU3RyaW5nICZzMiApCnsKICAgIFFTdHJpbmcgdG1wOwog
ICAgdG1wICs9IGMxOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQojIDQ1ICJrZXJu
ZWwvcXdpbmRvd2RlZnMuaCIgMgojIDEgImtlcm5lbC9xbmFtZXNwYWNlLmgiIDEKIyA0MiAia2Vy
bmVsL3FuYW1lc3BhY2UuaCIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FnbG9iYWwuaCIgMQoj
IDQzICJrZXJuZWwvcW5hbWVzcGFjZS5oIiAyCgoKCmNsYXNzIFFDb2xvcjsKY2xhc3MgUUN1cnNv
cjsKCgpjbGFzcyBRdCB7CnB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBjb2xvcjA7
CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgY29sb3IxOwogICAgc3RhdGljIGNvbnN0IFFDb2xv
ciAmIGJsYWNrOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIHdoaXRlOwogICAgc3RhdGljIGNv
bnN0IFFDb2xvciAmIGRhcmtHcmF5OwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGdyYXk7CiAg
ICBzdGF0aWMgY29uc3QgUUNvbG9yICYgbGlnaHRHcmF5OwogICAgc3RhdGljIGNvbnN0IFFDb2xv
ciAmIHJlZDsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBncmVlbjsKICAgIHN0YXRpYyBjb25z
dCBRQ29sb3IgJiBibHVlOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGN5YW47CiAgICBzdGF0
aWMgY29uc3QgUUNvbG9yICYgbWFnZW50YTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiB5ZWxs
b3c7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya1JlZDsKICAgIHN0YXRpYyBjb25zdCBR
Q29sb3IgJiBkYXJrR3JlZW47CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya0JsdWU7CiAg
ICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya0N5YW47CiAgICBzdGF0aWMgY29uc3QgUUNvbG9y
ICYgZGFya01hZ2VudGE7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya1llbGxvdzsKCgog
ICAgZW51bSBCdXR0b25TdGF0ZSB7CiAgICAgICAgTm9CdXR0b24gPSAweDAwMDAsCiAgICAgICAg
TGVmdEJ1dHRvbiA9IDB4MDAwMSwKICAgICAgICBSaWdodEJ1dHRvbiA9IDB4MDAwMiwKICAgICAg
ICBNaWRCdXR0b24gPSAweDAwMDQsCiAgICAgICAgTW91c2VCdXR0b25NYXNrID0gMHgwMDA3LAog
ICAgICAgIFNoaWZ0QnV0dG9uID0gMHgwMDA4LAogICAgICAgIENvbnRyb2xCdXR0b24gPSAweDAw
MTAsCiAgICAgICAgQWx0QnV0dG9uID0gMHgwMDIwLAogICAgICAgIEtleUJ1dHRvbk1hc2sgPSAw
eDAwMzgsCiAgICAgICAgS2V5cGFkID0gMHg0MDAwCiAgICB9OwoKCiAgICBlbnVtIE9yaWVudGF0
aW9uIHsKICAgICAgICBIb3Jpem9udGFsLAogICAgICAgIFZlcnRpY2FsCiAgICB9OwoKCgoKICAg
IGVudW0gQWxpZ25tZW50RmxhZ3MgewogICAgICAgIEFsaWduTGVmdCA9IDB4MDAwMSwKICAgICAg
ICBBbGlnblJpZ2h0ID0gMHgwMDAyLAogICAgICAgIEFsaWduSENlbnRlciA9IDB4MDAwNCwKICAg
ICAgICBBbGlnblRvcCA9IDB4MDAwOCwKICAgICAgICBBbGlnbkJvdHRvbSA9IDB4MDAxMCwKICAg
ICAgICBBbGlnblZDZW50ZXIgPSAweDAwMjAsCiAgICAgICAgQWxpZ25DZW50ZXIgPSBBbGlnblZD
ZW50ZXIgfCBBbGlnbkhDZW50ZXIsCgogICAgICAgIFNpbmdsZUxpbmUgPSAweDAwNDAsCiAgICAg
ICAgRG9udENsaXAgPSAweDAwODAsCiAgICAgICAgRXhwYW5kVGFicyA9IDB4MDEwMCwKICAgICAg
ICBTaG93UHJlZml4ID0gMHgwMjAwLAogICAgICAgIFdvcmRCcmVhayA9IDB4MDQwMCwKICAgICAg
ICBEb250UHJpbnQgPSAweDEwMDAKICAgIH07CgoKICAgIGVudW0gV2lkZ2V0U3RhdGUgewogICAg
ICAgIFdTdGF0ZV9DcmVhdGVkID0gMHgwMDAwMDAwMSwKICAgICAgICBXU3RhdGVfRGlzYWJsZWQg
PSAweDAwMDAwMDAyLAogICAgICAgIFdTdGF0ZV9WaXNpYmxlID0gMHgwMDAwMDAwNCwKICAgICAg
ICBXU3RhdGVfRm9yY2VIaWRlID0gMHgwMDAwMDAwOCwKICAgICAgICBXU3RhdGVfT3duQ3Vyc29y
ID0gMHgwMDAwMDAxMCwKICAgICAgICBXU3RhdGVfTW91c2VUcmFja2luZyA9IDB4MDAwMDAwMjAs
CiAgICAgICAgV1N0YXRlX0NvbXByZXNzS2V5cyA9IDB4MDAwMDAwNDAsCiAgICAgICAgV1N0YXRl
X0Jsb2NrVXBkYXRlcyA9IDB4MDAwMDAwODAsCiAgICAgICAgV1N0YXRlX0luUGFpbnRFdmVudCA9
IDB4MDAwMDAxMDAsCiAgICAgICAgV1N0YXRlX1JlcGFyZW50ZWQgPSAweDAwMDAwMjAwLAogICAg
ICAgIFdTdGF0ZV9Db25maWdQZW5kaW5nID0gMHgwMDAwMDQwMCwKICAgICAgICBXU3RhdGVfUmVz
aXplZCA9IDB4MDAwMDA4MDAsCiAgICAgICAgV1N0YXRlX0F1dG9NYXNrID0gMHgwMDAwMTAwMCwK
ICAgICAgICBXU3RhdGVfUG9saXNoZWQgPSAweDAwMDAyMDAwLAogICAgICAgIFdTdGF0ZV9ETkQg
PSAweDAwMDA0MDAwLAogICAgICAgIFdTdGF0ZV9Nb2RhbCA9IDB4MDAwMDgwMDAsCiAgICAgICAg
V1N0YXRlX1Jlc2VydmVkMSA9IDB4MDAwMTAwMDAsCiAgICAgICAgV1N0YXRlX1Jlc2VydmVkMiA9
IDB4MDAwMjAwMDAsCiAgICAgICAgV1N0YXRlX1Jlc2VydmVkMyA9IDB4MDAwNDAwMDAsCiAgICAg
ICAgV1N0YXRlX01heGltaXplZCA9IDB4MDAwODAwMDAsCiAgICAgICAgV1N0YXRlX1RyYW5zbGF0
ZUJhY2tncm91bmQgPSAweDAwMTAwMDAwLAogICAgICAgIFdTdGF0ZV9Gb3JjZURpc2FibGVkID0g
MHgwMDIwMDAwMCwKICAgICAgICBXU3RhdGVfRXhwb3NlZCA9IDB4MDA0MDAwMDAKICAgIH07CgoK
ICAgIHR5cGVkZWYgdWludCBXRmxhZ3M7CgoKICAgIGVudW0gV2lkZ2V0RmxhZ3MgewogICAgICAg
IFdUeXBlX1RvcExldmVsID0gMHgwMDAwMDAwMSwKICAgICAgICBXVHlwZV9Nb2RhbCA9IDB4MDAw
MDAwMDIsCiAgICAgICAgV1R5cGVfUG9wdXAgPSAweDAwMDAwMDA0LAogICAgICAgIFdUeXBlX0Rl
c2t0b3AgPSAweDAwMDAwMDA4LAogICAgICAgIFdUeXBlX01hc2sgPSAweDAwMDAwMDBmLAoKICAg
ICAgICBXU3R5bGVfQ3VzdG9taXplID0gMHgwMDAwMDAxMCwKICAgICAgICBXU3R5bGVfTm9ybWFs
Qm9yZGVyID0gMHgwMDAwMDAyMCwKICAgICAgICBXU3R5bGVfRGlhbG9nQm9yZGVyID0gMHgwMDAw
MDA0MCwKICAgICAgICBXU3R5bGVfTm9Cb3JkZXIgPSAweDAwMDAwMDAwLAogICAgICAgIFdTdHls
ZV9UaXRsZSA9IDB4MDAwMDAwODAsCiAgICAgICAgV1N0eWxlX1N5c01lbnUgPSAweDAwMDAwMTAw
LAogICAgICAgIFdTdHlsZV9NaW5pbWl6ZSA9IDB4MDAwMDAyMDAsCiAgICAgICAgV1N0eWxlX01h
eGltaXplID0gMHgwMDAwMDQwMCwKICAgICAgICBXU3R5bGVfTWluTWF4ID0gV1N0eWxlX01pbmlt
aXplIHwgV1N0eWxlX01heGltaXplLAogICAgICAgIFdTdHlsZV9Ub29sID0gMHgwMDAwMDgwMCwK
ICAgICAgICBXU3R5bGVfU3RheXNPblRvcCA9IDB4MDAwMDEwMDAsCiAgICAgICAgV1N0eWxlX0Rp
YWxvZyA9IDB4MDAwMDIwMDAsCiAgICAgICAgV1N0eWxlX0NvbnRleHRIZWxwID0gMHgwMDAwNDAw
MCwKICAgICAgICBXU3R5bGVfTm9Cb3JkZXJFeCA9IDB4MDAwMDgwMDAsCiAgICAgICAgV1N0eWxl
X01hc2sgPSAweDAwMDBmZmYwLAoKICAgICAgICBXRGVzdHJ1Y3RpdmVDbG9zZSA9IDB4MDAwMTAw
MDAsCiAgICAgICAgV1BhaW50RGVza3RvcCA9IDB4MDAwMjAwMDAsCiAgICAgICAgV1BhaW50VW5j
bGlwcGVkID0gMHgwMDA0MDAwMCwKICAgICAgICBXUGFpbnRDbGV2ZXIgPSAweDAwMDgwMDAwLAog
ICAgICAgIFdSZXNpemVOb0VyYXNlID0gMHgwMDEwMDAwMCwKICAgICAgICBXTW91c2VOb01hc2sg
PSAweDAwMjAwMDAwLAogICAgICAgIFdOb3J0aFdlc3RHcmF2aXR5ID0gMHgwMDQwMDAwMCwKICAg
ICAgICBXUmVwYWludE5vRXJhc2UgPSAweDAwODAwMDAwLAogICAgICAgIFdYMTFCeXBhc3NXTSA9
IDB4MDEwMDAwMDAsCiAgICAgICAgV0dyb3VwTGVhZGVyID0gMHgwMjAwMDAwMAoKICAgIH07CgoK
CgogICAgZW51bSBJbWFnZUNvbnZlcnNpb25GbGFncyB7CiAgICAgICAgQ29sb3JNb2RlX01hc2sg
PSAweDAwMDAwMDAzLAogICAgICAgIEF1dG9Db2xvciA9IDB4MDAwMDAwMDAsCiAgICAgICAgQ29s
b3JPbmx5ID0gMHgwMDAwMDAwMywKICAgICAgICBNb25vT25seSA9IDB4MDAwMDAwMDIsCgoKICAg
ICAgICBBbHBoYURpdGhlcl9NYXNrID0gMHgwMDAwMDAwYywKICAgICAgICBUaHJlc2hvbGRBbHBo
YURpdGhlciA9IDB4MDAwMDAwMDAsCiAgICAgICAgT3JkZXJlZEFscGhhRGl0aGVyID0gMHgwMDAw
MDAwNCwKICAgICAgICBEaWZmdXNlQWxwaGFEaXRoZXIgPSAweDAwMDAwMDA4LAogICAgICAgIE5v
QWxwaGEgPSAweDAwMDAwMDBjLAoKICAgICAgICBEaXRoZXJfTWFzayA9IDB4MDAwMDAwMzAsCiAg
ICAgICAgRGlmZnVzZURpdGhlciA9IDB4MDAwMDAwMDAsCiAgICAgICAgT3JkZXJlZERpdGhlciA9
IDB4MDAwMDAwMTAsCiAgICAgICAgVGhyZXNob2xkRGl0aGVyID0gMHgwMDAwMDAyMCwKCgogICAg
ICAgIERpdGhlck1vZGVfTWFzayA9IDB4MDAwMDAwYzAsCiAgICAgICAgQXV0b0RpdGhlciA9IDB4
MDAwMDAwMDAsCiAgICAgICAgUHJlZmVyRGl0aGVyID0gMHgwMDAwMDA0MCwKICAgICAgICBBdm9p
ZERpdGhlciA9IDB4MDAwMDAwODAKICAgIH07CgogICAgZW51bSBCR01vZGUgewogICAgICAgIFRy
YW5zcGFyZW50TW9kZSwKICAgICAgICBPcGFxdWVNb2RlCiAgICB9OwoKICAgIGVudW0gUGFpbnRV
bml0IHsKICAgICAgICBQaXhlbFVuaXQsCiAgICAgICAgTG9NZXRyaWNVbml0LAogICAgICAgIEhp
TWV0cmljVW5pdCwKICAgICAgICBMb0VuZ2xpc2hVbml0LAogICAgICAgIEhpRW5nbGlzaFVuaXQs
CiAgICAgICAgVHdpcHNVbml0CiAgICB9OwoKICAgIGVudW0gR1VJU3R5bGUgewogICAgICAgIE1h
Y1N0eWxlLAogICAgICAgIFdpbmRvd3NTdHlsZSwKICAgICAgICBXaW4zU3R5bGUsCiAgICAgICAg
UE1TdHlsZSwKICAgICAgICBNb3RpZlN0eWxlCiAgICB9OwoKICAgIGVudW0gTW9kaWZpZXIgewog
ICAgICAgIFNISUZUID0gMHgwMDIwMDAwMCwKICAgICAgICBDVFJMID0gMHgwMDQwMDAwMCwKICAg
ICAgICBBTFQgPSAweDAwODAwMDAwLAogICAgICAgIE1PRElGSUVSX01BU0sgPSAweDAwZTAwMDAw
LAogICAgICAgIFVOSUNPREVfQUNDRUwgPSAweDEwMDAwMDAwLAoKICAgICAgICBBU0NJSV9BQ0NF
TCA9IFVOSUNPREVfQUNDRUwKICAgIH07CgogICAgZW51bSBLZXkgewogICAgICAgIEtleV9Fc2Nh
cGUgPSAweDEwMDAsCiAgICAgICAgS2V5X1RhYiA9IDB4MTAwMSwKICAgICAgICBLZXlfQmFja3Rh
YiA9IDB4MTAwMiwgS2V5X0JhY2tUYWIgPSBLZXlfQmFja3RhYiwKICAgICAgICBLZXlfQmFja3Nw
YWNlID0gMHgxMDAzLCBLZXlfQmFja1NwYWNlID0gS2V5X0JhY2tzcGFjZSwKICAgICAgICBLZXlf
UmV0dXJuID0gMHgxMDA0LAogICAgICAgIEtleV9FbnRlciA9IDB4MTAwNSwKICAgICAgICBLZXlf
SW5zZXJ0ID0gMHgxMDA2LAogICAgICAgIEtleV9EZWxldGUgPSAweDEwMDcsCiAgICAgICAgS2V5
X1BhdXNlID0gMHgxMDA4LAogICAgICAgIEtleV9QcmludCA9IDB4MTAwOSwKICAgICAgICBLZXlf
U3lzUmVxID0gMHgxMDBhLAogICAgICAgIEtleV9Ib21lID0gMHgxMDEwLAogICAgICAgIEtleV9F
bmQgPSAweDEwMTEsCiAgICAgICAgS2V5X0xlZnQgPSAweDEwMTIsCiAgICAgICAgS2V5X1VwID0g
MHgxMDEzLAogICAgICAgIEtleV9SaWdodCA9IDB4MTAxNCwKICAgICAgICBLZXlfRG93biA9IDB4
MTAxNSwKICAgICAgICBLZXlfUHJpb3IgPSAweDEwMTYsIEtleV9QYWdlVXAgPSBLZXlfUHJpb3Is
CiAgICAgICAgS2V5X05leHQgPSAweDEwMTcsIEtleV9QYWdlRG93biA9IEtleV9OZXh0LAogICAg
ICAgIEtleV9TaGlmdCA9IDB4MTAyMCwKICAgICAgICBLZXlfQ29udHJvbCA9IDB4MTAyMSwKICAg
ICAgICBLZXlfTWV0YSA9IDB4MTAyMiwKICAgICAgICBLZXlfQWx0ID0gMHgxMDIzLAogICAgICAg
IEtleV9DYXBzTG9jayA9IDB4MTAyNCwKICAgICAgICBLZXlfTnVtTG9jayA9IDB4MTAyNSwKICAg
ICAgICBLZXlfU2Nyb2xsTG9jayA9IDB4MTAyNiwKICAgICAgICBLZXlfRjEgPSAweDEwMzAsCiAg
ICAgICAgS2V5X0YyID0gMHgxMDMxLAogICAgICAgIEtleV9GMyA9IDB4MTAzMiwKICAgICAgICBL
ZXlfRjQgPSAweDEwMzMsCiAgICAgICAgS2V5X0Y1ID0gMHgxMDM0LAogICAgICAgIEtleV9GNiA9
IDB4MTAzNSwKICAgICAgICBLZXlfRjcgPSAweDEwMzYsCiAgICAgICAgS2V5X0Y4ID0gMHgxMDM3
LAogICAgICAgIEtleV9GOSA9IDB4MTAzOCwKICAgICAgICBLZXlfRjEwID0gMHgxMDM5LAogICAg
ICAgIEtleV9GMTEgPSAweDEwM2EsCiAgICAgICAgS2V5X0YxMiA9IDB4MTAzYiwKICAgICAgICBL
ZXlfRjEzID0gMHgxMDNjLAogICAgICAgIEtleV9GMTQgPSAweDEwM2QsCiAgICAgICAgS2V5X0Yx
NSA9IDB4MTAzZSwKICAgICAgICBLZXlfRjE2ID0gMHgxMDNmLAogICAgICAgIEtleV9GMTcgPSAw
eDEwNDAsCiAgICAgICAgS2V5X0YxOCA9IDB4MTA0MSwKICAgICAgICBLZXlfRjE5ID0gMHgxMDQy
LAogICAgICAgIEtleV9GMjAgPSAweDEwNDMsCiAgICAgICAgS2V5X0YyMSA9IDB4MTA0NCwKICAg
ICAgICBLZXlfRjIyID0gMHgxMDQ1LAogICAgICAgIEtleV9GMjMgPSAweDEwNDYsCiAgICAgICAg
S2V5X0YyNCA9IDB4MTA0NywKICAgICAgICBLZXlfRjI1ID0gMHgxMDQ4LAogICAgICAgIEtleV9G
MjYgPSAweDEwNDksCiAgICAgICAgS2V5X0YyNyA9IDB4MTA0YSwKICAgICAgICBLZXlfRjI4ID0g
MHgxMDRiLAogICAgICAgIEtleV9GMjkgPSAweDEwNGMsCiAgICAgICAgS2V5X0YzMCA9IDB4MTA0
ZCwKICAgICAgICBLZXlfRjMxID0gMHgxMDRlLAogICAgICAgIEtleV9GMzIgPSAweDEwNGYsCiAg
ICAgICAgS2V5X0YzMyA9IDB4MTA1MCwKICAgICAgICBLZXlfRjM0ID0gMHgxMDUxLAogICAgICAg
IEtleV9GMzUgPSAweDEwNTIsCiAgICAgICAgS2V5X1N1cGVyX0wgPSAweDEwNTMsCiAgICAgICAg
S2V5X1N1cGVyX1IgPSAweDEwNTQsCiAgICAgICAgS2V5X01lbnUgPSAweDEwNTUsCiAgICAgICAg
S2V5X0h5cGVyX0wgPSAweDEwNTYsCiAgICAgICAgS2V5X0h5cGVyX1IgPSAweDEwNTcsCiAgICAg
ICAgS2V5X0hlbHAgPSAweDEwNTgsCiAgICAgICAgS2V5X1NwYWNlID0gMHgyMCwKICAgICAgICBL
ZXlfQW55ID0gS2V5X1NwYWNlLAogICAgICAgIEtleV9FeGNsYW0gPSAweDIxLAogICAgICAgIEtl
eV9RdW90ZURibCA9IDB4MjIsCiAgICAgICAgS2V5X051bWJlclNpZ24gPSAweDIzLAogICAgICAg
IEtleV9Eb2xsYXIgPSAweDI0LAogICAgICAgIEtleV9QZXJjZW50ID0gMHgyNSwKICAgICAgICBL
ZXlfQW1wZXJzYW5kID0gMHgyNiwKICAgICAgICBLZXlfQXBvc3Ryb3BoZSA9IDB4MjcsCiAgICAg
ICAgS2V5X1BhcmVuTGVmdCA9IDB4MjgsCiAgICAgICAgS2V5X1BhcmVuUmlnaHQgPSAweDI5LAog
ICAgICAgIEtleV9Bc3RlcmlzayA9IDB4MmEsCiAgICAgICAgS2V5X1BsdXMgPSAweDJiLAogICAg
ICAgIEtleV9Db21tYSA9IDB4MmMsCiAgICAgICAgS2V5X01pbnVzID0gMHgyZCwKICAgICAgICBL
ZXlfUGVyaW9kID0gMHgyZSwKICAgICAgICBLZXlfU2xhc2ggPSAweDJmLAogICAgICAgIEtleV8w
ID0gMHgzMCwKICAgICAgICBLZXlfMSA9IDB4MzEsCiAgICAgICAgS2V5XzIgPSAweDMyLAogICAg
ICAgIEtleV8zID0gMHgzMywKICAgICAgICBLZXlfNCA9IDB4MzQsCiAgICAgICAgS2V5XzUgPSAw
eDM1LAogICAgICAgIEtleV82ID0gMHgzNiwKICAgICAgICBLZXlfNyA9IDB4MzcsCiAgICAgICAg
S2V5XzggPSAweDM4LAogICAgICAgIEtleV85ID0gMHgzOSwKICAgICAgICBLZXlfQ29sb24gPSAw
eDNhLAogICAgICAgIEtleV9TZW1pY29sb24gPSAweDNiLAogICAgICAgIEtleV9MZXNzID0gMHgz
YywKICAgICAgICBLZXlfRXF1YWwgPSAweDNkLAogICAgICAgIEtleV9HcmVhdGVyID0gMHgzZSwK
ICAgICAgICBLZXlfUXVlc3Rpb24gPSAweDNmLAogICAgICAgIEtleV9BdCA9IDB4NDAsCiAgICAg
ICAgS2V5X0EgPSAweDQxLAogICAgICAgIEtleV9CID0gMHg0MiwKICAgICAgICBLZXlfQyA9IDB4
NDMsCiAgICAgICAgS2V5X0QgPSAweDQ0LAogICAgICAgIEtleV9FID0gMHg0NSwKICAgICAgICBL
ZXlfRiA9IDB4NDYsCiAgICAgICAgS2V5X0cgPSAweDQ3LAogICAgICAgIEtleV9IID0gMHg0OCwK
ICAgICAgICBLZXlfSSA9IDB4NDksCiAgICAgICAgS2V5X0ogPSAweDRhLAogICAgICAgIEtleV9L
ID0gMHg0YiwKICAgICAgICBLZXlfTCA9IDB4NGMsCiAgICAgICAgS2V5X00gPSAweDRkLAogICAg
ICAgIEtleV9OID0gMHg0ZSwKICAgICAgICBLZXlfTyA9IDB4NGYsCiAgICAgICAgS2V5X1AgPSAw
eDUwLAogICAgICAgIEtleV9RID0gMHg1MSwKICAgICAgICBLZXlfUiA9IDB4NTIsCiAgICAgICAg
S2V5X1MgPSAweDUzLAogICAgICAgIEtleV9UID0gMHg1NCwKICAgICAgICBLZXlfVSA9IDB4NTUs
CiAgICAgICAgS2V5X1YgPSAweDU2LAogICAgICAgIEtleV9XID0gMHg1NywKICAgICAgICBLZXlf
WCA9IDB4NTgsCiAgICAgICAgS2V5X1kgPSAweDU5LAogICAgICAgIEtleV9aID0gMHg1YSwKICAg
ICAgICBLZXlfQnJhY2tldExlZnQgPSAweDViLAogICAgICAgIEtleV9CYWNrc2xhc2ggPSAweDVj
LAogICAgICAgIEtleV9CcmFja2V0UmlnaHQgPSAweDVkLAogICAgICAgIEtleV9Bc2NpaUNpcmN1
bSA9IDB4NWUsCiAgICAgICAgS2V5X1VuZGVyc2NvcmUgPSAweDVmLAogICAgICAgIEtleV9RdW90
ZUxlZnQgPSAweDYwLAogICAgICAgIEtleV9CcmFjZUxlZnQgPSAweDdiLAogICAgICAgIEtleV9C
YXIgPSAweDdjLAogICAgICAgIEtleV9CcmFjZVJpZ2h0ID0gMHg3ZCwKICAgICAgICBLZXlfQXNj
aWlUaWxkZSA9IDB4N2UsCgoKCiAgICAgICAgS2V5X25vYnJlYWtzcGFjZSA9IDB4MGEwLAogICAg
ICAgIEtleV9leGNsYW1kb3duID0gMHgwYTEsCiAgICAgICAgS2V5X2NlbnQgPSAweDBhMiwKICAg
ICAgICBLZXlfc3RlcmxpbmcgPSAweDBhMywKICAgICAgICBLZXlfY3VycmVuY3kgPSAweDBhNCwK
ICAgICAgICBLZXlfeWVuID0gMHgwYTUsCiAgICAgICAgS2V5X2Jyb2tlbmJhciA9IDB4MGE2LAog
ICAgICAgIEtleV9zZWN0aW9uID0gMHgwYTcsCiAgICAgICAgS2V5X2RpYWVyZXNpcyA9IDB4MGE4
LAogICAgICAgIEtleV9jb3B5cmlnaHQgPSAweDBhOSwKICAgICAgICBLZXlfb3JkZmVtaW5pbmUg
PSAweDBhYSwKICAgICAgICBLZXlfZ3VpbGxlbW90bGVmdCA9IDB4MGFiLAogICAgICAgIEtleV9u
b3RzaWduID0gMHgwYWMsCiAgICAgICAgS2V5X2h5cGhlbiA9IDB4MGFkLAogICAgICAgIEtleV9y
ZWdpc3RlcmVkID0gMHgwYWUsCiAgICAgICAgS2V5X21hY3JvbiA9IDB4MGFmLAogICAgICAgIEtl
eV9kZWdyZWUgPSAweDBiMCwKICAgICAgICBLZXlfcGx1c21pbnVzID0gMHgwYjEsCiAgICAgICAg
S2V5X3R3b3N1cGVyaW9yID0gMHgwYjIsCiAgICAgICAgS2V5X3RocmVlc3VwZXJpb3IgPSAweDBi
MywKICAgICAgICBLZXlfYWN1dGUgPSAweDBiNCwKICAgICAgICBLZXlfbXUgPSAweDBiNSwKICAg
ICAgICBLZXlfcGFyYWdyYXBoID0gMHgwYjYsCiAgICAgICAgS2V5X3BlcmlvZGNlbnRlcmVkID0g
MHgwYjcsCiAgICAgICAgS2V5X2NlZGlsbGEgPSAweDBiOCwKICAgICAgICBLZXlfb25lc3VwZXJp
b3IgPSAweDBiOSwKICAgICAgICBLZXlfbWFzY3VsaW5lID0gMHgwYmEsCiAgICAgICAgS2V5X2d1
aWxsZW1vdHJpZ2h0ID0gMHgwYmIsCiAgICAgICAgS2V5X29uZXF1YXJ0ZXIgPSAweDBiYywKICAg
ICAgICBLZXlfb25laGFsZiA9IDB4MGJkLAogICAgICAgIEtleV90aHJlZXF1YXJ0ZXJzID0gMHgw
YmUsCiAgICAgICAgS2V5X3F1ZXN0aW9uZG93biA9IDB4MGJmLAogICAgICAgIEtleV9BZ3JhdmUg
PSAweDBjMCwKICAgICAgICBLZXlfQWFjdXRlID0gMHgwYzEsCiAgICAgICAgS2V5X0FjaXJjdW1m
bGV4ID0gMHgwYzIsCiAgICAgICAgS2V5X0F0aWxkZSA9IDB4MGMzLAogICAgICAgIEtleV9BZGlh
ZXJlc2lzID0gMHgwYzQsCiAgICAgICAgS2V5X0FyaW5nID0gMHgwYzUsCiAgICAgICAgS2V5X0FF
ID0gMHgwYzYsCiAgICAgICAgS2V5X0NjZWRpbGxhID0gMHgwYzcsCiAgICAgICAgS2V5X0VncmF2
ZSA9IDB4MGM4LAogICAgICAgIEtleV9FYWN1dGUgPSAweDBjOSwKICAgICAgICBLZXlfRWNpcmN1
bWZsZXggPSAweDBjYSwKICAgICAgICBLZXlfRWRpYWVyZXNpcyA9IDB4MGNiLAogICAgICAgIEtl
eV9JZ3JhdmUgPSAweDBjYywKICAgICAgICBLZXlfSWFjdXRlID0gMHgwY2QsCiAgICAgICAgS2V5
X0ljaXJjdW1mbGV4ID0gMHgwY2UsCiAgICAgICAgS2V5X0lkaWFlcmVzaXMgPSAweDBjZiwKICAg
ICAgICBLZXlfRVRIID0gMHgwZDAsCiAgICAgICAgS2V5X050aWxkZSA9IDB4MGQxLAogICAgICAg
IEtleV9PZ3JhdmUgPSAweDBkMiwKICAgICAgICBLZXlfT2FjdXRlID0gMHgwZDMsCiAgICAgICAg
S2V5X09jaXJjdW1mbGV4ID0gMHgwZDQsCiAgICAgICAgS2V5X090aWxkZSA9IDB4MGQ1LAogICAg
ICAgIEtleV9PZGlhZXJlc2lzID0gMHgwZDYsCiAgICAgICAgS2V5X211bHRpcGx5ID0gMHgwZDcs
CiAgICAgICAgS2V5X09vYmxpcXVlID0gMHgwZDgsCiAgICAgICAgS2V5X1VncmF2ZSA9IDB4MGQ5
LAogICAgICAgIEtleV9VYWN1dGUgPSAweDBkYSwKICAgICAgICBLZXlfVWNpcmN1bWZsZXggPSAw
eDBkYiwKICAgICAgICBLZXlfVWRpYWVyZXNpcyA9IDB4MGRjLAogICAgICAgIEtleV9ZYWN1dGUg
PSAweDBkZCwKICAgICAgICBLZXlfVEhPUk4gPSAweDBkZSwKICAgICAgICBLZXlfc3NoYXJwID0g
MHgwZGYsCiAgICAgICAgS2V5X2FncmF2ZSA9IDB4MGUwLAogICAgICAgIEtleV9hYWN1dGUgPSAw
eDBlMSwKICAgICAgICBLZXlfYWNpcmN1bWZsZXggPSAweDBlMiwKICAgICAgICBLZXlfYXRpbGRl
ID0gMHgwZTMsCiAgICAgICAgS2V5X2FkaWFlcmVzaXMgPSAweDBlNCwKICAgICAgICBLZXlfYXJp
bmcgPSAweDBlNSwKICAgICAgICBLZXlfYWUgPSAweDBlNiwKICAgICAgICBLZXlfY2NlZGlsbGEg
PSAweDBlNywKICAgICAgICBLZXlfZWdyYXZlID0gMHgwZTgsCiAgICAgICAgS2V5X2VhY3V0ZSA9
IDB4MGU5LAogICAgICAgIEtleV9lY2lyY3VtZmxleCA9IDB4MGVhLAogICAgICAgIEtleV9lZGlh
ZXJlc2lzID0gMHgwZWIsCiAgICAgICAgS2V5X2lncmF2ZSA9IDB4MGVjLAogICAgICAgIEtleV9p
YWN1dGUgPSAweDBlZCwKICAgICAgICBLZXlfaWNpcmN1bWZsZXggPSAweDBlZSwKICAgICAgICBL
ZXlfaWRpYWVyZXNpcyA9IDB4MGVmLAogICAgICAgIEtleV9ldGggPSAweDBmMCwKICAgICAgICBL
ZXlfbnRpbGRlID0gMHgwZjEsCiAgICAgICAgS2V5X29ncmF2ZSA9IDB4MGYyLAogICAgICAgIEtl
eV9vYWN1dGUgPSAweDBmMywKICAgICAgICBLZXlfb2NpcmN1bWZsZXggPSAweDBmNCwKICAgICAg
ICBLZXlfb3RpbGRlID0gMHgwZjUsCiAgICAgICAgS2V5X29kaWFlcmVzaXMgPSAweDBmNiwKICAg
ICAgICBLZXlfZGl2aXNpb24gPSAweDBmNywKICAgICAgICBLZXlfb3NsYXNoID0gMHgwZjgsCiAg
ICAgICAgS2V5X3VncmF2ZSA9IDB4MGY5LAogICAgICAgIEtleV91YWN1dGUgPSAweDBmYSwKICAg
ICAgICBLZXlfdWNpcmN1bWZsZXggPSAweDBmYiwKICAgICAgICBLZXlfdWRpYWVyZXNpcyA9IDB4
MGZjLAogICAgICAgIEtleV95YWN1dGUgPSAweDBmZCwKICAgICAgICBLZXlfdGhvcm4gPSAweDBm
ZSwKICAgICAgICBLZXlfeWRpYWVyZXNpcyA9IDB4MGZmLAoKICAgICAgICBLZXlfdW5rbm93biA9
IDB4ZmZmZgogICAgfTsKCiAgICBlbnVtIEFycm93VHlwZSB7CiAgICAgICAgVXBBcnJvdywKICAg
ICAgICBEb3duQXJyb3csCiAgICAgICAgTGVmdEFycm93LAogICAgICAgIFJpZ2h0QXJyb3cKICAg
IH07CgoKICAgIGVudW0gUmFzdGVyT3AgewogICAgICAgIENvcHlST1AsCiAgICAgICAgT3JST1As
CiAgICAgICAgWG9yUk9QLAogICAgICAgIE5vdEFuZFJPUCwKICAgICAgICBFcmFzZVJPUD1Ob3RB
bmRST1AsCiAgICAgICAgTm90Q29weVJPUCwKICAgICAgICBOb3RPclJPUCwKICAgICAgICBOb3RY
b3JST1AsCiAgICAgICAgQW5kUk9QLCBOb3RFcmFzZVJPUD1BbmRST1AsCiAgICAgICAgTm90Uk9Q
LAogICAgICAgIENsZWFyUk9QLAogICAgICAgIFNldFJPUCwKICAgICAgICBOb3BST1AsCiAgICAg
ICAgQW5kTm90Uk9QLAogICAgICAgIE9yTm90Uk9QLAogICAgICAgIE5hbmRST1AsCiAgICAgICAg
Tm9yUk9QLCBMYXN0Uk9QPU5vclJPUAogICAgfTsKCgogICAgZW51bSBQZW5TdHlsZSB7CiAgICAg
ICAgTm9QZW4sCiAgICAgICAgU29saWRMaW5lLAogICAgICAgIERhc2hMaW5lLAogICAgICAgIERv
dExpbmUsCiAgICAgICAgRGFzaERvdExpbmUsCiAgICAgICAgRGFzaERvdERvdExpbmUsCiAgICAg
ICAgTVBlblN0eWxlID0gMHgwZgogICAgfTsKCiAgICBlbnVtIFBlbkNhcFN0eWxlIHsKICAgICAg
ICBGbGF0Q2FwID0gMHgwMCwKICAgICAgICBTcXVhcmVDYXAgPSAweDEwLAogICAgICAgIFJvdW5k
Q2FwID0gMHgyMCwKICAgICAgICBNUGVuQ2FwU3R5bGUgPSAweDMwCiAgICB9OwoKICAgIGVudW0g
UGVuSm9pblN0eWxlIHsKICAgICAgICBNaXRlckpvaW4gPSAweDAwLAogICAgICAgIEJldmVsSm9p
biA9IDB4NDAsCiAgICAgICAgUm91bmRKb2luID0gMHg4MCwKICAgICAgICBNUGVuSm9pblN0eWxl
ID0gMHhjMAogICAgfTsKCiAgICBlbnVtIEJydXNoU3R5bGUgewogICAgICAgIE5vQnJ1c2gsCiAg
ICAgICAgU29saWRQYXR0ZXJuLAogICAgICAgIERlbnNlMVBhdHRlcm4sCiAgICAgICAgRGVuc2Uy
UGF0dGVybiwKICAgICAgICBEZW5zZTNQYXR0ZXJuLAogICAgICAgIERlbnNlNFBhdHRlcm4sCiAg
ICAgICAgRGVuc2U1UGF0dGVybiwKICAgICAgICBEZW5zZTZQYXR0ZXJuLAogICAgICAgIERlbnNl
N1BhdHRlcm4sCiAgICAgICAgSG9yUGF0dGVybiwKICAgICAgICBWZXJQYXR0ZXJuLAogICAgICAg
IENyb3NzUGF0dGVybiwKICAgICAgICBCRGlhZ1BhdHRlcm4sCiAgICAgICAgRkRpYWdQYXR0ZXJu
LAogICAgICAgIERpYWdDcm9zc1BhdHRlcm4sCiAgICAgICAgQ3VzdG9tUGF0dGVybj0yNAogICAg
fTsKCiAgICBlbnVtIFdpbmRvd3NWZXJzaW9uIHsKICAgICAgICBXVl8zMnMgPSAweDAwMDEsCiAg
ICAgICAgV1ZfOTUgPSAweDAwMDIsCiAgICAgICAgV1ZfOTggPSAweDAwMDMsCiAgICAgICAgV1Zf
RE9TX2Jhc2VkID0gMHgwMDBmLAoKICAgICAgICBXVl9OVCA9IDB4MDAxMCwKICAgICAgICBXVl8y
MDAwID0gMHgwMDIwLAogICAgICAgIFdWX05UX2Jhc2VkID0gMHgwMGYwCiAgICB9OwoKICAgIGVu
dW0gVUlFZmZlY3QgewogICAgICAgIFVJX0dlbmVyYWwsCiAgICAgICAgVUlfQW5pbWF0ZU1lbnUs
CiAgICAgICAgVUlfRmFkZU1lbnUsCiAgICAgICAgVUlfQW5pbWF0ZUNvbWJvLAogICAgICAgIFVJ
X0FuaW1hdGVUb29sdGlwLAogICAgICAgIFVJX0ZhZGVUb29sdGlwCiAgICB9OwoKCgoKICAgIHN0
YXRpYyBjb25zdCBRQ3Vyc29yICYgYXJyb3dDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNv
ciAmIHVwQXJyb3dDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGNyb3NzQ3Vyc29y
OwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiB3YWl0Q3Vyc29yOwogICAgc3RhdGljIGNvbnN0
IFFDdXJzb3IgJiBpYmVhbUN1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZVZl
ckN1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZUhvckN1cnNvcjsKICAgIHN0
YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZUJEaWFnQ3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFD
dXJzb3IgJiBzaXplRkRpYWdDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHNpemVB
bGxDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGJsYW5rQ3Vyc29yOwogICAgc3Rh
dGljIGNvbnN0IFFDdXJzb3IgJiBzcGxpdFZDdXJzb3I7CgogICAgc3RhdGljIGNvbnN0IFFDdXJz
b3IgJiBzcGxpdEhDdXJzb3I7CgogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBwb2ludGluZ0hh
bmRDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGZvcmJpZGRlbkN1cnNvcjsKCgog
ICAgZW51bSBUZXh0Rm9ybWF0IHsKICAgICAgICBQbGFpblRleHQsCiAgICAgICAgUmljaFRleHQs
CiAgICAgICAgQXV0b1RleHQKICAgIH07Cn07CgoKY2xhc3MgUUludGVybmFsIHsKcHVibGljOgog
ICAgZW51bSBQYWludERldmljZUZsYWdzIHsKICAgICAgICBVbmRlZmluZWREZXZpY2UgPSAweDAw
LAogICAgICAgIFdpZGdldCA9IDB4MDEsCiAgICAgICAgUGl4bWFwID0gMHgwMiwKICAgICAgICBQ
cmludGVyID0gMHgwMywKICAgICAgICBQaWN0dXJlID0gMHgwNCwKICAgICAgICBTeXN0ZW0gPSAw
eDA1LAogICAgICAgIERldmljZVR5cGVNYXNrID0gMHgwZiwKICAgICAgICBFeHRlcm5hbERldmlj
ZSA9IDB4MTAKICAgIH07Cn07CiMgNDYgImtlcm5lbC9xd2luZG93ZGVmcy5oIiAyCgoKIyAxICIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL2xpbWl0
cy5oIiAxIDMKIyA0OSAia2VybmVsL3F3aW5kb3dkZWZzLmgiIDIKCgoKY2xhc3MgUVBhaW50RGV2
aWNlOwpjbGFzcyBRUGFpbnREZXZpY2VNZXRyaWNzOwpjbGFzcyBRV2lkZ2V0OwpjbGFzcyBRV2lk
Z2V0TWFwcGVyOwpjbGFzcyBRRGlhbG9nOwpjbGFzcyBRQ29sb3I7CmNsYXNzIFFDb2xvckdyb3Vw
OwpjbGFzcyBRUGFsZXR0ZTsKY2xhc3MgUUN1cnNvcjsKY2xhc3MgUVBvaW50OwpjbGFzcyBRU2l6
ZTsKY2xhc3MgUVJlY3Q7CmNsYXNzIFFQb2ludEFycmF5OwpjbGFzcyBRUGFpbnRlcjsKY2xhc3Mg
UVJlZ2lvbjsKY2xhc3MgUUZvbnQ7CmNsYXNzIFFGb250TWV0cmljczsKY2xhc3MgUUZvbnRJbmZv
OwpjbGFzcyBRUGVuOwpjbGFzcyBRQnJ1c2g7CmNsYXNzIFFXTWF0cml4OwpjbGFzcyBRUGl4bWFw
OwpjbGFzcyBRQml0bWFwOwpjbGFzcyBRTW92aWU7CmNsYXNzIFFJbWFnZTsKY2xhc3MgUUltYWdl
SU87CmNsYXNzIFFQaWN0dXJlOwpjbGFzcyBRUHJpbnRlcjsKY2xhc3MgUUFjY2VsOwpjbGFzcyBR
VGltZXI7CmNsYXNzIFFUaW1lOwpjbGFzcyBRQ2xpcGJvYXJkOwoKCgoKY2xhc3MgUVdpZGdldExp
c3Q7CmNsYXNzIFFXaWRnZXRMaXN0SXQ7CiMgMTE4ICJrZXJuZWwvcXdpbmRvd2RlZnMuaCIKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgV0lkOwp0eXBlZGVmIHVuc2lnbmVkIGludCBIQU5ETEU7CgoKdHlw
ZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CnR5cGVkZWYgdW5pb24gX1hFdmVudCBYRXZl
bnQ7CnR5cGVkZWYgc3RydWN0IF9YR0MgKkdDOwp0eXBlZGVmIHN0cnVjdCBfWFJlZ2lvbiAqUmVn
aW9uOwoKICAgICAgICAgRGlzcGxheSAqcXRfeGRpc3BsYXkoKTsKICAgICAgICAgaW50IHF0X3hz
Y3JlZW4oKTsKICAgICAgICAgV0lkIHF0X3hyb290d2luKCk7CiAgICAgICAgIEdDIHF0X3hnZXRf
cmVhZG9ubHlfZ2MoIGJvb2wgbW9ub2Nocm9tZT1GQUxTRSApOwogICAgICAgICBHQyBxdF94Z2V0
X3RlbXBfZ2MoIGJvb2wgbW9ub2Nocm9tZT1GQUxTRSApOwojIDE0NCAia2VybmVsL3F3aW5kb3dk
ZWZzLmgiCmNsYXNzIFFBcHBsaWNhdGlvbjsKIyAxNTMgImtlcm5lbC9xd2luZG93ZGVmcy5oIgp0
eXBlZGVmIFFfSU5UMzIgUUNPT1JEOwpjb25zdCBRQ09PUkQgUUNPT1JEX01BWCA9IDIxNDc0ODM2
NDc7CmNvbnN0IFFDT09SRCBRQ09PUkRfTUlOID0gLVFDT09SRF9NQVggLSAxOwoKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgUVJnYjsKCiAgICAgICAgIGNoYXIgKnFBcHBOYW1lKCk7CgoKCgp0eXBlZGVm
IHZvaWQgKCpRX0NsZWFuVXBGdW5jdGlvbikoKTsKICAgICAgICAgdm9pZCBxQWRkUG9zdFJvdXRp
bmUoIFFfQ2xlYW5VcEZ1bmN0aW9uICk7CiAgICAgICAgIHZvaWQgcVJlbW92ZVBvc3RSb3V0aW5l
KCBRX0NsZWFuVXBGdW5jdGlvbiApOwoKCiAgICAgICAgIHZvaWQgKnF0X2ZpbmRfb2JqX2NoaWxk
KCBRT2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CiMgNDQgImtlcm5lbC9x
b2JqZWN0LmgiIDIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FzdHJpbmcuaCIgMQojIDQ1ICJr
ZXJuZWwvcW9iamVjdC5oIiAyCiMgMSAia2VybmVsL3FldmVudC5oIiAxCiMgNDIgImtlcm5lbC9x
ZXZlbnQuaCIKIyAxICJrZXJuZWwvcXdpbmRvd2RlZnMuaCIgMQojIDQzICJrZXJuZWwvcWV2ZW50
LmgiIDIKIyAxICJrZXJuZWwvcXJlZ2lvbi5oIiAxCiMgNDIgImtlcm5lbC9xcmVnaW9uLmgiCiMg
MSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc2hhcmVkLmgiIDEKIyA0MyAia2VybmVsL3FyZWdpb24u
aCIgMgojIDEgImtlcm5lbC9xcmVjdC5oIiAxCiMgNDIgImtlcm5lbC9xcmVjdC5oIgojIDEgImtl
cm5lbC9xc2l6ZS5oIiAxCiMgNDIgImtlcm5lbC9xc2l6ZS5oIgojIDEgImtlcm5lbC9xcG9pbnQu
aCIgMQojIDQyICJrZXJuZWwvcXBvaW50LmgiCiMgMSAia2VybmVsL3F3aW5kb3dkZWZzLmgiIDEK
IyA0MyAia2VybmVsL3Fwb2ludC5oIiAyCgoKCmNsYXNzIFFQb2ludAp7CnB1YmxpYzoKICAgIFFQ
b2ludCgpOwogICAgUVBvaW50KCBpbnQgeHBvcywgaW50IHlwb3MgKTsKCiAgICBib29sIGlzTnVs
bCgpIGNvbnN0OwoKICAgIGludCB4KCkgY29uc3Q7CiAgICBpbnQgeSgpIGNvbnN0OwogICAgdm9p
ZCBzZXRYKCBpbnQgeCApOwogICAgdm9pZCBzZXRZKCBpbnQgeSApOwoKICAgIGludCBtYW5oYXR0
YW5MZW5ndGgoKSBjb25zdDsKCiAgICBRQ09PUkQgJnJ4KCk7CiAgICBRQ09PUkQgJnJ5KCk7Cgog
ICAgUVBvaW50ICZvcGVyYXRvcis9KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIFFQb2ludCAmb3Bl
cmF0b3ItPSggY29uc3QgUVBvaW50ICZwICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yKj0oIGludCBj
ICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yKj0oIGRvdWJsZSBjICk7CiAgICBRUG9pbnQgJm9wZXJh
dG9yLz0oIGludCBjICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yLz0oIGRvdWJsZSBjICk7CgogICAg
ZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQb2ludCAmLCBjb25zdCBRUG9p
bnQgJiApOwogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFQb2ludCAm
LCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBRUG9pbnQgb3BlcmF0b3IrKCBj
b25zdCBRUG9pbnQgJiwgY29uc3QgUVBvaW50ICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVBvaW50
IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICYsIGNvbnN0IFFQb2ludCAmICk7CiAgICBmcmllbmQg
aW5saW5lIFFQb2ludCBvcGVyYXRvciooIGNvbnN0IFFQb2ludCAmLCBpbnQgKTsKICAgIGZyaWVu
ZCBpbmxpbmUgUVBvaW50IG9wZXJhdG9yKiggaW50LCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJp
ZW5kIGlubGluZSBRUG9pbnQgb3BlcmF0b3IqKCBjb25zdCBRUG9pbnQgJiwgZG91YmxlICk7CiAg
ICBmcmllbmQgaW5saW5lIFFQb2ludCBvcGVyYXRvciooIGRvdWJsZSwgY29uc3QgUVBvaW50ICYg
KTsKICAgIGZyaWVuZCBpbmxpbmUgUVBvaW50IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICYgKTsK
ICAgIGZyaWVuZCBpbmxpbmUgUVBvaW50IG9wZXJhdG9yLyggY29uc3QgUVBvaW50ICYsIGludCAp
OwogICAgZnJpZW5kIGlubGluZSBRUG9pbnQgb3BlcmF0b3IvKCBjb25zdCBRUG9pbnQgJiwgZG91
YmxlICk7Cgpwcml2YXRlOgogICAgc3RhdGljIHZvaWQgd2FybmluZ0RpdkJ5WmVybygpOwoKCgoK
CiAgICBRQ09PUkQgeHA7CiAgICBRQ09PUkQgeXA7Cgp9OwoKCgoKCgogICAgICAgICBRRGF0YVN0
cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVBvaW50ICYgKTsKICAgICAg
ICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFQb2ludCAmICk7CgoK
CgoKCmlubGluZSBRUG9pbnQ6OlFQb2ludCgpCnsgeHA9MDsgeXA9MDsgfQoKaW5saW5lIFFQb2lu
dDo6UVBvaW50KCBpbnQgeHBvcywgaW50IHlwb3MgKQp7IHhwPShRQ09PUkQpeHBvczsgeXA9KFFD
T09SRCl5cG9zOyB9CgppbmxpbmUgYm9vbCBRUG9pbnQ6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJu
IHhwID09IDAgJiYgeXAgPT0gMDsgfQoKaW5saW5lIGludCBRUG9pbnQ6OngoKSBjb25zdAp7IHJl
dHVybiB4cDsgfQoKaW5saW5lIGludCBRUG9pbnQ6OnkoKSBjb25zdAp7IHJldHVybiB5cDsgfQoK
aW5saW5lIHZvaWQgUVBvaW50OjpzZXRYKCBpbnQgeCApCnsgeHAgPSAoUUNPT1JEKXg7IH0KCmlu
bGluZSB2b2lkIFFQb2ludDo6c2V0WSggaW50IHkgKQp7IHlwID0gKFFDT09SRCl5OyB9Cgppbmxp
bmUgUUNPT1JEICZRUG9pbnQ6OnJ4KCkKeyByZXR1cm4geHA7IH0KCmlubGluZSBRQ09PUkQgJlFQ
b2ludDo6cnkoKQp7IHJldHVybiB5cDsgfQoKaW5saW5lIFFQb2ludCAmUVBvaW50OjpvcGVyYXRv
cis9KCBjb25zdCBRUG9pbnQgJnAgKQp7IHhwKz1wLnhwOyB5cCs9cC55cDsgcmV0dXJuICp0aGlz
OyB9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yLT0oIGNvbnN0IFFQb2ludCAmcCAp
CnsgeHAtPXAueHA7IHlwLT1wLnlwOyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBRUG9pbnQgJlFQ
b2ludDo6b3BlcmF0b3IqPSggaW50IGMgKQp7IHhwKj0oUUNPT1JEKWM7IHlwKj0oUUNPT1JEKWM7
IHJldHVybiAqdGhpczsgfQoKaW5saW5lIFFQb2ludCAmUVBvaW50OjpvcGVyYXRvcio9KCBkb3Vi
bGUgYyApCnsgeHA9KFFDT09SRCkoeHAqYyk7IHlwPShRQ09PUkQpKHlwKmMpOyByZXR1cm4gKnRo
aXM7IH0KCmlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQb2ludCAmcDEsIGNvbnN0IFFQ
b2ludCAmcDIgKQp7IHJldHVybiBwMS54cCA9PSBwMi54cCAmJiBwMS55cCA9PSBwMi55cDsgfQoK
aW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVBvaW50ICZwMSwgY29uc3QgUVBvaW50ICZw
MiApCnsgcmV0dXJuIHAxLnhwICE9IHAyLnhwIHx8IHAxLnlwICE9IHAyLnlwOyB9CgppbmxpbmUg
UVBvaW50IG9wZXJhdG9yKyggY29uc3QgUVBvaW50ICZwMSwgY29uc3QgUVBvaW50ICZwMiApCnsg
cmV0dXJuIFFQb2ludChwMS54cCtwMi54cCwgcDEueXArcDIueXApOyB9CgppbmxpbmUgUVBvaW50
IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICZwMSwgY29uc3QgUVBvaW50ICZwMiApCnsgcmV0dXJu
IFFQb2ludChwMS54cC1wMi54cCwgcDEueXAtcDIueXApOyB9CgppbmxpbmUgUVBvaW50IG9wZXJh
dG9yKiggY29uc3QgUVBvaW50ICZwLCBpbnQgYyApCnsgcmV0dXJuIFFQb2ludChwLnhwKmMsIHAu
eXAqYyk7IH0KCmlubGluZSBRUG9pbnQgb3BlcmF0b3IqKCBpbnQgYywgY29uc3QgUVBvaW50ICZw
ICkKeyByZXR1cm4gUVBvaW50KHAueHAqYywgcC55cCpjKTsgfQoKaW5saW5lIFFQb2ludCBvcGVy
YXRvciooIGNvbnN0IFFQb2ludCAmcCwgZG91YmxlIGMgKQp7IHJldHVybiBRUG9pbnQoKFFDT09S
RCkocC54cCpjKSwgKFFDT09SRCkocC55cCpjKSk7IH0KCmlubGluZSBRUG9pbnQgb3BlcmF0b3Iq
KCBkb3VibGUgYywgY29uc3QgUVBvaW50ICZwICkKeyByZXR1cm4gUVBvaW50KChRQ09PUkQpKHAu
eHAqYyksIChRQ09PUkQpKHAueXAqYykpOyB9CgppbmxpbmUgUVBvaW50IG9wZXJhdG9yLSggY29u
c3QgUVBvaW50ICZwICkKeyByZXR1cm4gUVBvaW50KC1wLnhwLCAtcC55cCk7IH0KCmlubGluZSBR
UG9pbnQgJlFQb2ludDo6b3BlcmF0b3IvPSggaW50IGMgKQp7CgogICAgaWYgKCBjID09IDAgKQog
ICAgICAgIHdhcm5pbmdEaXZCeVplcm8oKTsKCiAgICB4cC89KFFDT09SRCljOwogICAgeXAvPShR
Q09PUkQpYzsKICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lIFFQb2ludCAmUVBvaW50OjpvcGVy
YXRvci89KCBkb3VibGUgYyApCnsKCiAgICBpZiAoIGMgPT0gMC4wICkKICAgICAgICB3YXJuaW5n
RGl2QnlaZXJvKCk7CgogICAgeHA9KFFDT09SRCkoeHAvYyk7CiAgICB5cD0oUUNPT1JEKSh5cC9j
KTsKICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lIFFQb2ludCBvcGVyYXRvci8oIGNvbnN0IFFQ
b2ludCAmcCwgaW50IGMgKQp7CgogICAgaWYgKCBjID09IDAgKQogICAgICAgIFFQb2ludDo6d2Fy
bmluZ0RpdkJ5WmVybygpOwoKICAgIHJldHVybiBRUG9pbnQocC54cC9jLCBwLnlwL2MpOwp9Cgpp
bmxpbmUgUVBvaW50IG9wZXJhdG9yLyggY29uc3QgUVBvaW50ICZwLCBkb3VibGUgYyApCnsKCiAg
ICBpZiAoIGMgPT0gMC4wICkKICAgICAgICBRUG9pbnQ6Ondhcm5pbmdEaXZCeVplcm8oKTsKCiAg
ICByZXR1cm4gUVBvaW50KChRQ09PUkQpKHAueHAvYyksIChRQ09PUkQpKHAueXAvYykpOwp9CiMg
NDMgImtlcm5lbC9xc2l6ZS5oIiAyCgoKCmNsYXNzIFFTaXplCnsKcHVibGljOgogICAgUVNpemUo
KTsKICAgIFFTaXplKCBpbnQgdywgaW50IGggKTsKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0Owog
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKCiAgICBp
bnQgd2lkdGgoKSBjb25zdDsKICAgIGludCBoZWlnaHQoKSBjb25zdDsKICAgIHZvaWQgc2V0V2lk
dGgoIGludCB3ICk7CiAgICB2b2lkIHNldEhlaWdodCggaW50IGggKTsKICAgIHZvaWQgdHJhbnNw
b3NlKCk7CgogICAgUVNpemUgZXhwYW5kZWRUbyggY29uc3QgUVNpemUgJiApIGNvbnN0OwogICAg
UVNpemUgYm91bmRlZFRvKCBjb25zdCBRU2l6ZSAmICkgY29uc3Q7CgogICAgUUNPT1JEICZyd2lk
dGgoKTsKICAgIFFDT09SRCAmcmhlaWdodCgpOwoKICAgIFFTaXplICZvcGVyYXRvcis9KCBjb25z
dCBRU2l6ZSAmICk7CiAgICBRU2l6ZSAmb3BlcmF0b3ItPSggY29uc3QgUVNpemUgJiApOwogICAg
UVNpemUgJm9wZXJhdG9yKj0oIGludCBjICk7CiAgICBRU2l6ZSAmb3BlcmF0b3IqPSggZG91Ymxl
IGMgKTsKICAgIFFTaXplICZvcGVyYXRvci89KCBpbnQgYyApOwogICAgUVNpemUgJm9wZXJhdG9y
Lz0oIGRvdWJsZSBjICk7CgogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0
IFFTaXplICYsIGNvbnN0IFFTaXplICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KCBjb25zdCBRU2l6ZSAmLCBjb25zdCBRU2l6ZSAmICk7CiAgICBmcmllbmQgaW5saW5lIFFT
aXplIG9wZXJhdG9yKyggY29uc3QgUVNpemUgJiwgY29uc3QgUVNpemUgJiApOwogICAgZnJpZW5k
IGlubGluZSBRU2l6ZSBvcGVyYXRvci0oIGNvbnN0IFFTaXplICYsIGNvbnN0IFFTaXplICYgKTsK
ICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBjb25zdCBRU2l6ZSAmLCBpbnQgKTsK
ICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBpbnQsIGNvbnN0IFFTaXplICYgKTsK
ICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBjb25zdCBRU2l6ZSAmLCBkb3VibGUg
KTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBkb3VibGUsIGNvbnN0IFFTaXpl
ICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAmLCBp
bnQgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAmLCBk
b3VibGUgKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgdm9pZCB3YXJuaW5nRGl2QnlaZXJvKCk7Cgog
ICAgUUNPT1JEIHdkOwogICAgUUNPT1JEIGh0Owp9OwoKCgoKCgogICAgICAgICBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVNpemUgJiApOwogICAgICAgICBR
RGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVNpemUgJiApOwoKCgoKCgpp
bmxpbmUgUVNpemU6OlFTaXplKCkKeyB3ZCA9IGh0ID0gLTE7IH0KCmlubGluZSBRU2l6ZTo6UVNp
emUoIGludCB3LCBpbnQgaCApCnsgd2Q9KFFDT09SRCl3OyBodD0oUUNPT1JEKWg7IH0KCmlubGlu
ZSBib29sIFFTaXplOjppc051bGwoKSBjb25zdAp7IHJldHVybiB3ZD09MCAmJiBodD09MDsgfQoK
aW5saW5lIGJvb2wgUVNpemU6OmlzRW1wdHkoKSBjb25zdAp7IHJldHVybiB3ZDwxIHx8IGh0PDE7
IH0KCmlubGluZSBib29sIFFTaXplOjppc1ZhbGlkKCkgY29uc3QKeyByZXR1cm4gd2Q+PTAgJiYg
aHQ+PTA7IH0KCmlubGluZSBpbnQgUVNpemU6OndpZHRoKCkgY29uc3QKeyByZXR1cm4gd2Q7IH0K
CmlubGluZSBpbnQgUVNpemU6OmhlaWdodCgpIGNvbnN0CnsgcmV0dXJuIGh0OyB9CgppbmxpbmUg
dm9pZCBRU2l6ZTo6c2V0V2lkdGgoIGludCB3ICkKeyB3ZD0oUUNPT1JEKXc7IH0KCmlubGluZSB2
b2lkIFFTaXplOjpzZXRIZWlnaHQoIGludCBoICkKeyBodD0oUUNPT1JEKWg7IH0KCmlubGluZSBR
Q09PUkQgJlFTaXplOjpyd2lkdGgoKQp7IHJldHVybiB3ZDsgfQoKaW5saW5lIFFDT09SRCAmUVNp
emU6OnJoZWlnaHQoKQp7IHJldHVybiBodDsgfQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0
b3IrPSggY29uc3QgUVNpemUgJnMgKQp7IHdkKz1zLndkOyBodCs9cy5odDsgcmV0dXJuICp0aGlz
OyB9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVyYXRvci09KCBjb25zdCBRU2l6ZSAmcyApCnsg
d2QtPXMud2Q7IGh0LT1zLmh0OyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6
Om9wZXJhdG9yKj0oIGludCBjICkKeyB3ZCo9KFFDT09SRCljOyBodCo9KFFDT09SRCljOyByZXR1
cm4gKnRoaXM7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6Om9wZXJhdG9yKj0oIGRvdWJsZSBjICkK
eyB3ZD0oUUNPT1JEKSh3ZCpjKTsgaHQ9KFFDT09SRCkoaHQqYyk7IHJldHVybiAqdGhpczsgfQoK
aW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVNpemUgJnMxLCBjb25zdCBRU2l6ZSAmczIg
KQp7IHJldHVybiBzMS53ZCA9PSBzMi53ZCAmJiBzMS5odCA9PSBzMi5odDsgfQoKaW5saW5lIGJv
b2wgb3BlcmF0b3IhPSggY29uc3QgUVNpemUgJnMxLCBjb25zdCBRU2l6ZSAmczIgKQp7IHJldHVy
biBzMS53ZCAhPSBzMi53ZCB8fCBzMS5odCAhPSBzMi5odDsgfQoKaW5saW5lIFFTaXplIG9wZXJh
dG9yKyggY29uc3QgUVNpemUgJiBzMSwgY29uc3QgUVNpemUgJiBzMiApCnsgcmV0dXJuIFFTaXpl
KHMxLndkK3MyLndkLCBzMS5odCtzMi5odCk7IH0KCmlubGluZSBRU2l6ZSBvcGVyYXRvci0oIGNv
bnN0IFFTaXplICZzMSwgY29uc3QgUVNpemUgJnMyICkKeyByZXR1cm4gUVNpemUoczEud2QtczIu
d2QsIHMxLmh0LXMyLmh0KTsgfQoKaW5saW5lIFFTaXplIG9wZXJhdG9yKiggY29uc3QgUVNpemUg
JnMsIGludCBjICkKeyByZXR1cm4gUVNpemUocy53ZCpjLCBzLmh0KmMpOyB9CgppbmxpbmUgUVNp
emUgb3BlcmF0b3IqKCBpbnQgYywgY29uc3QgUVNpemUgJnMgKQp7IHJldHVybiBRU2l6ZShzLndk
KmMsIHMuaHQqYyk7IH0KCmlubGluZSBRU2l6ZSBvcGVyYXRvciooIGNvbnN0IFFTaXplICZzLCBk
b3VibGUgYyApCnsgcmV0dXJuIFFTaXplKChRQ09PUkQpKHMud2QqYyksIChRQ09PUkQpKHMuaHQq
YykpOyB9CgppbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBkb3VibGUgYywgY29uc3QgUVNpemUgJnMg
KQp7IHJldHVybiBRU2l6ZSgoUUNPT1JEKShzLndkKmMpLCAoUUNPT1JEKShzLmh0KmMpKTsgfQoK
aW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3IvPSggaW50IGMgKQp7CgogICAgaWYgKCBjID09
IDAgKQogICAgICAgIHdhcm5pbmdEaXZCeVplcm8oKTsKCiAgICB3ZC89KFFDT09SRCljOyBodC89
KFFDT09SRCljOwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVy
YXRvci89KCBkb3VibGUgYyApCnsKCiAgICBpZiAoIGMgPT0gMC4wICkKICAgICAgICB3YXJuaW5n
RGl2QnlaZXJvKCk7CgogICAgd2Q9KFFDT09SRCkod2QvYyk7IGh0PShRQ09PUkQpKGh0L2MpOwog
ICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAm
cywgaW50IGMgKQp7CgogICAgaWYgKCBjID09IDAgKQogICAgICAgIFFTaXplOjp3YXJuaW5nRGl2
QnlaZXJvKCk7CgogICAgcmV0dXJuIFFTaXplKHMud2QvYywgcy5odC9jKTsKfQoKaW5saW5lIFFT
aXplIG9wZXJhdG9yLyggY29uc3QgUVNpemUgJnMsIGRvdWJsZSBjICkKewoKICAgIGlmICggYyA9
PSAwLjAgKQogICAgICAgIFFTaXplOjp3YXJuaW5nRGl2QnlaZXJvKCk7CgogICAgcmV0dXJuIFFT
aXplKChRQ09PUkQpKHMud2QvYyksIChRQ09PUkQpKHMuaHQvYykpOwp9CgppbmxpbmUgUVNpemUg
UVNpemU6OmV4cGFuZGVkVG8oIGNvbnN0IFFTaXplICYgb3RoZXJTaXplICkgY29uc3QKewogICAg
cmV0dXJuIFFTaXplKCAoKHdkKSA+IChvdGhlclNpemUud2QpID8gKHdkKSA6IChvdGhlclNpemUu
d2QpKSwgKChodCkgPiAob3RoZXJTaXplLmh0KSA/IChodCkgOiAob3RoZXJTaXplLmh0KSkgKTsK
fQoKaW5saW5lIFFTaXplIFFTaXplOjpib3VuZGVkVG8oIGNvbnN0IFFTaXplICYgb3RoZXJTaXpl
ICkgY29uc3QKewogICAgcmV0dXJuIFFTaXplKCAoKHdkKSA8IChvdGhlclNpemUud2QpID8gKHdk
KSA6IChvdGhlclNpemUud2QpKSwgKChodCkgPCAob3RoZXJTaXplLmh0KSA/IChodCkgOiAob3Ro
ZXJTaXplLmh0KSkgKTsKfQojIDQzICJrZXJuZWwvcXJlY3QuaCIgMgoKCgoKCgoKY2xhc3MgUVJl
Y3QKewpwdWJsaWM6CiAgICBRUmVjdCgpIHsgeDEgPSB5MSA9IDA7IHgyID0geTIgPSAtMTsgfQog
ICAgUVJlY3QoIGNvbnN0IFFQb2ludCAmdG9wbGVmdCwgY29uc3QgUVBvaW50ICZib3R0b21yaWdo
dCApOwogICAgUVJlY3QoIGNvbnN0IFFQb2ludCAmdG9wbGVmdCwgY29uc3QgUVNpemUgJnNpemUg
KTsKICAgIFFSZWN0KCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0ICk7
CgogICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAg
Ym9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAgICBRUmVjdCBub3JtYWxpemUoKSBjb25zdDsKCiAgICBp
bnQgbGVmdCgpIGNvbnN0OwogICAgaW50IHRvcCgpIGNvbnN0OwogICAgaW50IHJpZ2h0KCkgY29u
c3Q7CiAgICBpbnQgYm90dG9tKCkgY29uc3Q7CgogICAgUUNPT1JEICZyTGVmdCgpOwogICAgUUNP
T1JEICZyVG9wKCk7CiAgICBRQ09PUkQgJnJSaWdodCgpOwogICAgUUNPT1JEICZyQm90dG9tKCk7
CgogICAgaW50IHgoKSBjb25zdDsKICAgIGludCB5KCkgY29uc3Q7CiAgICB2b2lkIHNldExlZnQo
IGludCBwb3MgKTsKICAgIHZvaWQgc2V0VG9wKCBpbnQgcG9zICk7CiAgICB2b2lkIHNldFJpZ2h0
KCBpbnQgcG9zICk7CiAgICB2b2lkIHNldEJvdHRvbSggaW50IHBvcyApOwogICAgdm9pZCBzZXRY
KCBpbnQgeCApOwogICAgdm9pZCBzZXRZKCBpbnQgeSApOwoKICAgIFFQb2ludCB0b3BMZWZ0KCkg
Y29uc3Q7CiAgICBRUG9pbnQgYm90dG9tUmlnaHQoKSBjb25zdDsKICAgIFFQb2ludCB0b3BSaWdo
dCgpIGNvbnN0OwogICAgUVBvaW50IGJvdHRvbUxlZnQoKSBjb25zdDsKICAgIFFQb2ludCBjZW50
ZXIoKSBjb25zdDsKCiAgICB2b2lkIHJlY3QoIGludCAqeCwgaW50ICp5LCBpbnQgKncsIGludCAq
aCApIGNvbnN0OwogICAgdm9pZCBjb29yZHMoIGludCAqeDEsIGludCAqeTEsIGludCAqeDIsIGlu
dCAqeTIgKSBjb25zdDsKCiAgICB2b2lkIG1vdmVUb3BMZWZ0KCBjb25zdCBRUG9pbnQgJnAgKTsK
ICAgIHZvaWQgbW92ZUJvdHRvbVJpZ2h0KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgbW92
ZVRvcFJpZ2h0KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgbW92ZUJvdHRvbUxlZnQoIGNv
bnN0IFFQb2ludCAmcCApOwogICAgdm9pZCBtb3ZlQ2VudGVyKCBjb25zdCBRUG9pbnQgJnAgKTsK
ICAgIHZvaWQgbW92ZUJ5KCBpbnQgZHgsIGludCBkeSApOwoKICAgIHZvaWQgc2V0UmVjdCggaW50
IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgc2V0Q29vcmRzKCBpbnQgeDEsIGlu
dCB5MSwgaW50IHgyLCBpbnQgeTIgKTsKCiAgICBRU2l6ZSBzaXplKCkgY29uc3Q7CiAgICBpbnQg
d2lkdGgoKSBjb25zdDsKICAgIGludCBoZWlnaHQoKSBjb25zdDsKICAgIHZvaWQgc2V0V2lkdGgo
IGludCB3ICk7CiAgICB2b2lkIHNldEhlaWdodCggaW50IGggKTsKICAgIHZvaWQgc2V0U2l6ZSgg
Y29uc3QgUVNpemUgJnMgKTsKCiAgICBRUmVjdCBvcGVyYXRvcnwoY29uc3QgUVJlY3QgJnIpIGNv
bnN0OwogICAgUVJlY3Qgb3BlcmF0b3ImKGNvbnN0IFFSZWN0ICZyKSBjb25zdDsKICAgIFFSZWN0
JiBvcGVyYXRvcnw9KGNvbnN0IFFSZWN0ICZyKTsKICAgIFFSZWN0JiBvcGVyYXRvciY9KGNvbnN0
IFFSZWN0ICZyKTsKCiAgICBib29sIGNvbnRhaW5zKCBjb25zdCBRUG9pbnQgJnAsIGJvb2wgcHJv
cGVyPUZBTFNFICkgY29uc3Q7CiAgICBib29sIGNvbnRhaW5zKCBpbnQgeCwgaW50IHksIGJvb2wg
cHJvcGVyPUZBTFNFICkgY29uc3Q7CiAgICBib29sIGNvbnRhaW5zKCBjb25zdCBRUmVjdCAmciwg
Ym9vbCBwcm9wZXI9RkFMU0UgKSBjb25zdDsKICAgIFFSZWN0IHVuaXRlKCBjb25zdCBRUmVjdCAm
ciApIGNvbnN0OwogICAgUVJlY3QgaW50ZXJzZWN0KCBjb25zdCBRUmVjdCAmciApIGNvbnN0Owog
ICAgYm9vbCBpbnRlcnNlY3RzKCBjb25zdCBRUmVjdCAmciApIGNvbnN0OwoKICAgIGZyaWVuZCBi
b29sIG9wZXJhdG9yPT0oIGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKICAgIGZyaWVu
ZCBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKCnByaXZh
dGU6CgoKCgoKCiAgICBRQ09PUkQgeDE7CiAgICBRQ09PUkQgeTE7CiAgICBRQ09PUkQgeDI7CiAg
ICBRQ09PUkQgeTI7Cgp9OwoKICAgICAgICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRUmVjdCAm
LCBjb25zdCBRUmVjdCAmICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVJlY3Qg
JiwgY29uc3QgUVJlY3QgJiApOwoKCgoKCgogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8
PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVJlY3QgJiApOwogICAgICAgICBRRGF0YVN0cmVhbSAm
b3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVJlY3QgJiApOwoKCgoKCgppbmxpbmUgUVJlY3Q6
OlFSZWN0KCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0ICkKewogICAg
eDEgPSAoUUNPT1JEKWxlZnQ7CiAgICB5MSA9IChRQ09PUkQpdG9wOwogICAgeDIgPSAoUUNPT1JE
KShsZWZ0K3dpZHRoLTEpOwogICAgeTIgPSAoUUNPT1JEKSh0b3AraGVpZ2h0LTEpOwp9Cgppbmxp
bmUgYm9vbCBRUmVjdDo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4geDIgPT0geDEtMSAmJiB5MiA9
PSB5MS0xOyB9CgppbmxpbmUgYm9vbCBRUmVjdDo6aXNFbXB0eSgpIGNvbnN0CnsgcmV0dXJuIHgx
ID4geDIgfHwgeTEgPiB5MjsgfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmlzVmFsaWQoKSBjb25zdAp7
IHJldHVybiB4MSA8PSB4MiAmJiB5MSA8PSB5MjsgfQoKaW5saW5lIGludCBRUmVjdDo6bGVmdCgp
IGNvbnN0CnsgcmV0dXJuIHgxOyB9CgppbmxpbmUgaW50IFFSZWN0Ojp0b3AoKSBjb25zdAp7IHJl
dHVybiB5MTsgfQoKaW5saW5lIGludCBRUmVjdDo6cmlnaHQoKSBjb25zdAp7IHJldHVybiB4Mjsg
fQoKaW5saW5lIGludCBRUmVjdDo6Ym90dG9tKCkgY29uc3QKeyByZXR1cm4geTI7IH0KCmlubGlu
ZSBRQ09PUkQgJlFSZWN0OjpyTGVmdCgpCnsgcmV0dXJuIHgxOyB9CgppbmxpbmUgUUNPT1JEICYg
UVJlY3Q6OnJUb3AoKQp7IHJldHVybiB5MTsgfQoKaW5saW5lIFFDT09SRCAmIFFSZWN0OjpyUmln
aHQoKQp7IHJldHVybiB4MjsgfQoKaW5saW5lIFFDT09SRCAmIFFSZWN0OjpyQm90dG9tKCkKeyBy
ZXR1cm4geTI7IH0KCmlubGluZSBpbnQgUVJlY3Q6OngoKSBjb25zdAp7IHJldHVybiB4MTsgfQoK
aW5saW5lIGludCBRUmVjdDo6eSgpIGNvbnN0CnsgcmV0dXJuIHkxOyB9CgppbmxpbmUgdm9pZCBR
UmVjdDo6c2V0TGVmdCggaW50IHBvcyApCnsgeDEgPSAoUUNPT1JEKXBvczsgfQoKaW5saW5lIHZv
aWQgUVJlY3Q6OnNldFRvcCggaW50IHBvcyApCnsgeTEgPSAoUUNPT1JEKXBvczsgfQoKaW5saW5l
IHZvaWQgUVJlY3Q6OnNldFJpZ2h0KCBpbnQgcG9zICkKeyB4MiA9IChRQ09PUkQpcG9zOyB9Cgpp
bmxpbmUgdm9pZCBRUmVjdDo6c2V0Qm90dG9tKCBpbnQgcG9zICkKeyB5MiA9IChRQ09PUkQpcG9z
OyB9CgppbmxpbmUgdm9pZCBRUmVjdDo6c2V0WCggaW50IHggKQp7IHgxID0gKFFDT09SRCl4OyB9
CgppbmxpbmUgdm9pZCBRUmVjdDo6c2V0WSggaW50IHkgKQp7IHkxID0gKFFDT09SRCl5OyB9Cgpp
bmxpbmUgUVBvaW50IFFSZWN0Ojp0b3BMZWZ0KCkgY29uc3QKeyByZXR1cm4gUVBvaW50KHgxLCB5
MSk7IH0KCmlubGluZSBRUG9pbnQgUVJlY3Q6OmJvdHRvbVJpZ2h0KCkgY29uc3QKeyByZXR1cm4g
UVBvaW50KHgyLCB5Mik7IH0KCmlubGluZSBRUG9pbnQgUVJlY3Q6OnRvcFJpZ2h0KCkgY29uc3QK
eyByZXR1cm4gUVBvaW50KHgyLCB5MSk7IH0KCmlubGluZSBRUG9pbnQgUVJlY3Q6OmJvdHRvbUxl
ZnQoKSBjb25zdAp7IHJldHVybiBRUG9pbnQoeDEsIHkyKTsgfQoKaW5saW5lIFFQb2ludCBRUmVj
dDo6Y2VudGVyKCkgY29uc3QKeyByZXR1cm4gUVBvaW50KCh4MSt4MikvMiwgKHkxK3kyKS8yKTsg
fQoKaW5saW5lIGludCBRUmVjdDo6d2lkdGgoKSBjb25zdAp7IHJldHVybiB4MiAtIHgxICsgMTsg
fQoKaW5saW5lIGludCBRUmVjdDo6aGVpZ2h0KCkgY29uc3QKeyByZXR1cm4geTIgLSB5MSArIDE7
IH0KCmlubGluZSBRU2l6ZSBRUmVjdDo6c2l6ZSgpIGNvbnN0CnsgcmV0dXJuIFFTaXplKHgyLXgx
KzEsIHkyLXkxKzEpOyB9CgppbmxpbmUgYm9vbCBRUmVjdDo6Y29udGFpbnMoIGludCB4LCBpbnQg
eSwgYm9vbCBwcm9wZXIgKSBjb25zdAp7CiAgICBpZiAoIHByb3BlciApCiAgICAgICAgcmV0dXJu
IHggPiB4MSAmJiB4IDwgeDIgJiYKICAgICAgICAgICAgICAgeSA+IHkxICYmIHkgPCB5MjsKICAg
IGVsc2UKICAgICAgICByZXR1cm4geCA+PSB4MSAmJiB4IDw9IHgyICYmCiAgICAgICAgICAgICAg
IHkgPj0geTEgJiYgeSA8PSB5MjsKfQojIDQ0ICJrZXJuZWwvcXJlZ2lvbi5oIiAyCiMgMSAiL3Vz
ci9saWIvcXQvaW5jbHVkZS9xc3RyaW5nLmgiIDEKIyA0NSAia2VybmVsL3FyZWdpb24uaCIgMgoK
CgpjbGFzcyBRUmVnaW9uCnsKcHVibGljOgogICAgZW51bSBSZWdpb25UeXBlIHsgUmVjdGFuZ2xl
LCBFbGxpcHNlIH07CgogICAgUVJlZ2lvbigpOwogICAgUVJlZ2lvbiggaW50IHgsIGludCB5LCBp
bnQgdywgaW50IGgsIFJlZ2lvblR5cGUgPSBSZWN0YW5nbGUgKTsKICAgIFFSZWdpb24oIGNvbnN0
IFFSZWN0ICYsIFJlZ2lvblR5cGUgPSBSZWN0YW5nbGUgKTsKICAgIFFSZWdpb24oIGNvbnN0IFFQ
b2ludEFycmF5ICYsIGJvb2wgd2luZGluZz1GQUxTRSApOwogICAgUVJlZ2lvbiggY29uc3QgUVJl
Z2lvbiAmICk7CiAgICBRUmVnaW9uKCBjb25zdCBRQml0bWFwICYgKTsKICAgflFSZWdpb24oKTsK
ICAgIFFSZWdpb24gJm9wZXJhdG9yPSggY29uc3QgUVJlZ2lvbiAmICk7CgogICAgYm9vbCBpc051
bGwoKSBjb25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwoKICAgIGJvb2wgY29udGFpbnMo
IGNvbnN0IFFQb2ludCAmcCApIGNvbnN0OwogICAgYm9vbCBjb250YWlucyggY29uc3QgUVJlY3Qg
JnIgKSBjb25zdDsKCiAgICB2b2lkIHRyYW5zbGF0ZSggaW50IGR4LCBpbnQgZHkgKTsKCiAgICBR
UmVnaW9uIHVuaXRlKCBjb25zdCBRUmVnaW9uICYgKSBjb25zdDsKICAgIFFSZWdpb24gaW50ZXJz
ZWN0KCBjb25zdCBRUmVnaW9uICYpIGNvbnN0OwogICAgUVJlZ2lvbiBzdWJ0cmFjdCggY29uc3Qg
UVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uIGVvciggY29uc3QgUVJlZ2lvbiAmICkgY29u
c3Q7CgogICAgUVJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CiAgICBRQXJyYXk8UVJlY3Q+IHJl
Y3RzKCkgY29uc3Q7CiAgICB2b2lkIHNldFJlY3RzKCBjb25zdCBRUmVjdCAqLCBpbnQgKTsKCiAg
ICBRUmVnaW9uIG9wZXJhdG9yfCggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9u
IG9wZXJhdG9yKyggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uIG9wZXJhdG9y
JiggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uIG9wZXJhdG9yLSggY29uc3Qg
UVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uIG9wZXJhdG9yXiggY29uc3QgUVJlZ2lvbiAm
ICkgY29uc3Q7CiAgICBRUmVnaW9uJiBvcGVyYXRvcnw9KCBjb25zdCBRUmVnaW9uICYgKTsKICAg
IFFSZWdpb24mIG9wZXJhdG9yKz0oIGNvbnN0IFFSZWdpb24gJiApOwogICAgUVJlZ2lvbiYgb3Bl
cmF0b3ImPSggY29uc3QgUVJlZ2lvbiAmICk7CiAgICBRUmVnaW9uJiBvcGVyYXRvci09KCBjb25z
dCBRUmVnaW9uICYgKTsKICAgIFFSZWdpb24mIG9wZXJhdG9yXj0oIGNvbnN0IFFSZWdpb24gJiAp
OwoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBib29s
IG9wZXJhdG9yIT0oIGNvbnN0IFFSZWdpb24gJnIgKSBjb25zdAogICAgICAgICAgICAgICAgICAg
ICAgICB7IHJldHVybiAhKG9wZXJhdG9yPT0ocikpOyB9CgoKCgogICAgUmVnaW9uIGhhbmRsZSgp
IGNvbnN0IHsgcmV0dXJuIGRhdGEtPnJnbjsgfQojIDEwNiAia2VybmVsL3FyZWdpb24uaCIKICAg
IGZyaWVuZCBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVJl
Z2lvbiAmICk7CiAgICBmcmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFt
ICYsIFFSZWdpb24gJiApOwoKcHJpdmF0ZToKICAgIFFSZWdpb24oIGJvb2wgKTsKICAgIFFSZWdp
b24gY29weSgpIGNvbnN0OwogICAgdm9pZCBkZXRhY2goKTsKCgoKICAgIHZvaWQgZXhlYyggY29u
c3QgUUJ5dGVBcnJheSAmLCBpbnQgdmVyID0gMCApOwogICAgc3RydWN0IFFSZWdpb25EYXRhIDog
cHVibGljIFFTaGFyZWQgewoKCgogICAgICAgIFJlZ2lvbiByZ247CgoKCgoKICAgICAgICBib29s
IGlzX251bGw7CiAgICB9ICpkYXRhOwp9OwojIDE0OSAia2VybmVsL3FyZWdpb24uaCIKICAgICAg
ICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFSZWdpb24g
JiApOwogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVJl
Z2lvbiAmICk7CiMgNDQgImtlcm5lbC9xZXZlbnQuaCIgMgojIDEgImtlcm5lbC9xbmFtZXNwYWNl
LmgiIDEKIyA0NSAia2VybmVsL3FldmVudC5oIiAyCiMgMSAia2VybmVsL3FtaW1lLmgiIDEKIyA0
MiAia2VybmVsL3FtaW1lLmgiCiMgMSAia2VybmVsL3F3aW5kb3dkZWZzLmgiIDEKIyA0MyAia2Vy
bmVsL3FtaW1lLmgiIDIKCgoKCmNsYXNzIFFNaW1lU291cmNlIHsKcHVibGljOgogICAgdmlydHVh
bCB+UU1pbWVTb3VyY2UoKTsKICAgIHZpcnR1YWwgY29uc3QgY2hhciogZm9ybWF0KCBpbnQgbiA9
IDAgKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIGJvb2wgcHJvdmlkZXMoIGNvbnN0IGNoYXIqICkg
Y29uc3Q7CiAgICB2aXJ0dWFsIFFCeXRlQXJyYXkgZW5jb2RlZERhdGEoIGNvbnN0IGNoYXIqICkg
Y29uc3QgPSAwOwp9OwoKY2xhc3MgUU1pbWVTb3VyY2VGYWN0b3J5RGF0YTsKY2xhc3MgUVN0cmlu
Z0xpc3Q7CgpjbGFzcyBRTWltZVNvdXJjZUZhY3RvcnkgewpwdWJsaWM6CiAgICBRTWltZVNvdXJj
ZUZhY3RvcnkoKTsKICAgIHZpcnR1YWwgflFNaW1lU291cmNlRmFjdG9yeSgpOwoKICAgIHN0YXRp
YyBRTWltZVNvdXJjZUZhY3RvcnkqIGRlZmF1bHRGYWN0b3J5KCk7CiAgICBzdGF0aWMgdm9pZCBz
ZXREZWZhdWx0RmFjdG9yeSggUU1pbWVTb3VyY2VGYWN0b3J5KiApOwoKICAgIHZpcnR1YWwgY29u
c3QgUU1pbWVTb3VyY2UqIGRhdGEoY29uc3QgUVN0cmluZyYgYWJzX25hbWUpIGNvbnN0OwogICAg
dmlydHVhbCBRU3RyaW5nIG1ha2VBYnNvbHV0ZShjb25zdCBRU3RyaW5nJiBhYnNfb3JfcmVsX25h
bWUsIGNvbnN0IFFTdHJpbmcmIGNvbnRleHQpIGNvbnN0OwogICAgY29uc3QgUU1pbWVTb3VyY2Uq
IGRhdGEoY29uc3QgUVN0cmluZyYgYWJzX29yX3JlbF9uYW1lLCBjb25zdCBRU3RyaW5nJiBjb250
ZXh0KSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dCggY29uc3QgUVN0cmluZyYgYWJz
X25hbWUsIGNvbnN0IFFTdHJpbmcmIHRleHQgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZSgg
Y29uc3QgUVN0cmluZyYgYWJzX25hbWUsIGNvbnN0IFFJbWFnZSYgaW0gKTsKICAgIHZpcnR1YWwg
dm9pZCBzZXRQaXhtYXAoIGNvbnN0IFFTdHJpbmcmIGFic19uYW1lLCBjb25zdCBRUGl4bWFwJiBw
bSApOwogICAgdmlydHVhbCB2b2lkIHNldERhdGEoIGNvbnN0IFFTdHJpbmcmIGFic19uYW1lLCBR
TWltZVNvdXJjZSogZGF0YSApOwogICAgdmlydHVhbCB2b2lkIHNldEZpbGVQYXRoKCBjb25zdCBR
U3RyaW5nTGlzdCYgKTsKICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgZmlsZVBhdGgoKSBjb25zdDsK
ICAgIHZvaWQgYWRkRmlsZVBhdGgoIGNvbnN0IFFTdHJpbmcmICk7CiAgICB2aXJ0dWFsIHZvaWQg
c2V0RXh0ZW5zaW9uVHlwZSggY29uc3QgUVN0cmluZyYgZXh0LCBjb25zdCBjaGFyKiBtaW1ldHlw
ZSApOwoKcHJpdmF0ZToKICAgIFFNaW1lU291cmNlRmFjdG9yeURhdGEqIGQ7Cn07CiMgNDYgImtl
cm5lbC9xZXZlbnQuaCIgMgoKCgpjbGFzcyBRRXZlbnQ6IHB1YmxpYyBRdAp7CnB1YmxpYzoKICAg
IGVudW0gVHlwZSB7CgoKCgoKCiAgICAgICAgTm9uZSA9IDAsCgoKICAgICAgICBUaW1lciA9IDEs
CiAgICAgICAgTW91c2VCdXR0b25QcmVzcyA9IDIsCiAgICAgICAgTW91c2VCdXR0b25SZWxlYXNl
ID0gMywKICAgICAgICBNb3VzZUJ1dHRvbkRibENsaWNrPSA0LAogICAgICAgIE1vdXNlTW92ZSA9
IDUsCiAgICAgICAgS2V5UHJlc3MgPSA2LAogICAgICAgIEtleVJlbGVhc2UgPSA3LAogICAgICAg
IEZvY3VzSW4gPSA4LAogICAgICAgIEZvY3VzT3V0ID0gOSwKICAgICAgICBFbnRlciA9IDEwLAog
ICAgICAgIExlYXZlID0gMTEsCiAgICAgICAgUGFpbnQgPSAxMiwKICAgICAgICBNb3ZlID0gMTMs
CiAgICAgICAgUmVzaXplID0gMTQsCiAgICAgICAgQ3JlYXRlID0gMTUsCiAgICAgICAgRGVzdHJv
eSA9IDE2LAogICAgICAgIFNob3cgPSAxNywKICAgICAgICBIaWRlID0gMTgsCiAgICAgICAgQ2xv
c2UgPSAxOSwKICAgICAgICBRdWl0ID0gMjAsCiAgICAgICAgUmVwYXJlbnQgPSAyMSwKICAgICAg
ICBTaG93TWluaW1pemVkID0gMjIsCiAgICAgICAgU2hvd05vcm1hbCA9IDIzLAogICAgICAgIFdp
bmRvd0FjdGl2YXRlID0gMjQsCiAgICAgICAgV2luZG93RGVhY3RpdmF0ZSA9IDI1LAogICAgICAg
IFNob3dUb1BhcmVudCA9IDI2LAogICAgICAgIEhpZGVUb1BhcmVudCA9IDI3LAogICAgICAgIFNo
b3dNYXhpbWl6ZWQgPSAyOCwKICAgICAgICBBY2NlbCA9IDMwLAogICAgICAgIFdoZWVsID0gMzEs
CiAgICAgICAgQWNjZWxBdmFpbGFibGUgPSAzMiwKICAgICAgICBDYXB0aW9uQ2hhbmdlID0gMzMs
CiAgICAgICAgSWNvbkNoYW5nZSA9IDM0LAogICAgICAgIFBhcmVudEZvbnRDaGFuZ2UgPSAzNSwK
ICAgICAgICBBcHBsaWNhdGlvbkZvbnRDaGFuZ2UgPSAzNiwKICAgICAgICBQYXJlbnRQYWxldHRl
Q2hhbmdlID0gMzcsCiAgICAgICAgQXBwbGljYXRpb25QYWxldHRlQ2hhbmdlID0gMzgsCiAgICAg
ICAgQ2xpcGJvYXJkID0gNDAsCiAgICAgICAgU3BlZWNoID0gNDIsCiAgICAgICAgU29ja0FjdCA9
IDUwLAogICAgICAgIEFjY2VsT3ZlcnJpZGUgPSA1MSwKICAgICAgICBEcmFnRW50ZXIgPSA2MCwK
ICAgICAgICBEcmFnTW92ZSA9IDYxLAogICAgICAgIERyYWdMZWF2ZSA9IDYyLAogICAgICAgIERy
b3AgPSA2MywKICAgICAgICBEcmFnUmVzcG9uc2UgPSA2NCwKICAgICAgICBDaGlsZEluc2VydGVk
ID0gNzAsCiAgICAgICAgQ2hpbGRSZW1vdmVkID0gNzEsCiAgICAgICAgTGF5b3V0SGludCA9IDcy
LAogICAgICAgIFNob3dXaW5kb3dSZXF1ZXN0ID0gNzMsCiAgICAgICAgQWN0aXZhdGVDb250cm9s
ID0gODAsCiAgICAgICAgRGVhY3RpdmF0ZUNvbnRyb2wgPSA4MSwKICAgICAgICBVc2VyID0gMTAw
MAogICAgfTsKCiAgICBRRXZlbnQoIFR5cGUgdHlwZSApIDogdCh0eXBlKSwgcG9zdGVkKEZBTFNF
KSB7fQogICAgdmlydHVhbCB+UUV2ZW50KCk7CiAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biB0OyB9CnByb3RlY3RlZDoKICAgIFR5cGUgdDsKcHJpdmF0ZToKICAgIGJvb2wgcG9zdGVkOwoK
CgoKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xhc3MgUUJhc2VB
cHBsaWNhdGlvbjsKfTsKCgpjbGFzcyBRVGltZXJFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJs
aWM6CiAgICBRVGltZXJFdmVudCggaW50IHRpbWVySWQgKQogICAgICAgIDogUUV2ZW50KFRpbWVy
KSwgaWQodGltZXJJZCkge30KICAgIGludCB0aW1lcklkKCkgY29uc3QgeyByZXR1cm4gaWQ7IH0K
cHJvdGVjdGVkOgogICAgaW50IGlkOwp9OwoKCmNsYXNzIFFNb3VzZUV2ZW50IDogcHVibGljIFFF
dmVudAp7CnB1YmxpYzoKICAgIFFNb3VzZUV2ZW50KCBUeXBlIHR5cGUsIGNvbnN0IFFQb2ludCAm
cG9zLCBpbnQgYnV0dG9uLCBpbnQgc3RhdGUgKTsKCiAgICBRTW91c2VFdmVudCggVHlwZSB0eXBl
LCBjb25zdCBRUG9pbnQgJnBvcywgY29uc3QgUVBvaW50Jmdsb2JhbFBvcywKICAgICAgICAgICAg
ICAgICBpbnQgYnV0dG9uLCBpbnQgc3RhdGUgKQogICAgICAgIDogUUV2ZW50KHR5cGUpLCBwKHBv
cyksIGcoZ2xvYmFsUG9zKSwgYihidXR0b24pLHMoKHVzaG9ydClzdGF0ZSkge307CgogICAgY29u
c3QgUVBvaW50ICZwb3MoKSBjb25zdCB7IHJldHVybiBwOyB9CiAgICBjb25zdCBRUG9pbnQgJmds
b2JhbFBvcygpIGNvbnN0IHsgcmV0dXJuIGc7IH0KICAgIGludCB4KCkgY29uc3QgeyByZXR1cm4g
cC54KCk7IH0KICAgIGludCB5KCkgY29uc3QgeyByZXR1cm4gcC55KCk7IH0KICAgIGludCBnbG9i
YWxYKCkgY29uc3QgeyByZXR1cm4gZy54KCk7IH0KICAgIGludCBnbG9iYWxZKCkgY29uc3QgeyBy
ZXR1cm4gZy55KCk7IH0KICAgIEJ1dHRvblN0YXRlIGJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIChC
dXR0b25TdGF0ZSkgYjsgfQogICAgQnV0dG9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiAo
QnV0dG9uU3RhdGUpIHM7IH0KICAgIEJ1dHRvblN0YXRlIHN0YXRlQWZ0ZXIoKSBjb25zdDsKcHJv
dGVjdGVkOgogICAgUVBvaW50IHA7CiAgICBRUG9pbnQgZzsKICAgIGludCBiOwogICAgdXNob3J0
IHM7Cn07CgoKCmNsYXNzIFFXaGVlbEV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAg
IFFXaGVlbEV2ZW50KCBjb25zdCBRUG9pbnQgJnBvcywgaW50IGRlbHRhLCBpbnQgc3RhdGUgKTsK
ICAgIFFXaGVlbEV2ZW50KCBjb25zdCBRUG9pbnQgJnBvcywgY29uc3QgUVBvaW50JiBnbG9iYWxQ
b3MsIGludCBkZWx0YSwgaW50IHN0YXRlICkKICAgICAgICA6IFFFdmVudChXaGVlbCksIHAocG9z
KSwgZyhnbG9iYWxQb3MpLCBkKGRlbHRhKSwgcygodXNob3J0KXN0YXRlKSwKICAgICAgICAgIGFj
Y3B0KFRSVUUpIHt9CiAgICBpbnQgZGVsdGEoKSBjb25zdCB7IHJldHVybiBkOyB9CiAgICBjb25z
dCBRUG9pbnQgJnBvcygpIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgIGNvbnN0IFFQb2ludCAmZ2xv
YmFsUG9zKCkgY29uc3QgeyByZXR1cm4gZzsgfQogICAgaW50IHgoKSBjb25zdCB7IHJldHVybiBw
LngoKTsgfQogICAgaW50IHkoKSBjb25zdCB7IHJldHVybiBwLnkoKTsgfQogICAgaW50IGdsb2Jh
bFgoKSBjb25zdCB7IHJldHVybiBnLngoKTsgfQogICAgaW50IGdsb2JhbFkoKSBjb25zdCB7IHJl
dHVybiBnLnkoKTsgfQogICAgQnV0dG9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBCdXR0
b25TdGF0ZShzKTsgfQogICAgYm9vbCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYWNjcHQ7
IH0KICAgIHZvaWQgYWNjZXB0KCkgeyBhY2NwdCA9IFRSVUU7IH0KICAgIHZvaWQgaWdub3JlKCkg
eyBhY2NwdCA9IEZBTFNFOyB9CnByb3RlY3RlZDoKICAgIFFQb2ludCBwOwogICAgUVBvaW50IGc7
CiAgICBpbnQgZDsKICAgIHVzaG9ydCBzOwogICAgYm9vbCBhY2NwdDsKfTsKCgpjbGFzcyBRS2V5
RXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUUtleUV2ZW50KCBUeXBlIHR5cGUs
IGludCBrZXksIGludCBhc2NpaSwgaW50IHN0YXRlLAogICAgICAgICAgICAgICAgY29uc3QgUVN0
cmluZyYgdGV4dD1RU3RyaW5nOjpudWxsLCBib29sIGF1dG9yZXA9RkFMU0UsIHVzaG9ydCBjb3Vu
dD0xICkKICAgICAgICA6IFFFdmVudCh0eXBlKSwgdHh0KHRleHQpLCBrKCh1c2hvcnQpa2V5KSwg
cygodXNob3J0KXN0YXRlKSwKICAgICAgICAgICAgYSgodWNoYXIpYXNjaWkpLCBhY2NwdChUUlVF
KSwgYXV0b3IoYXV0b3JlcCksIGMoY291bnQpIHt9CiAgICBpbnQga2V5KCkgY29uc3QgeyByZXR1
cm4gazsgfQogICAgaW50IGFzY2lpKCkgY29uc3QgeyByZXR1cm4gYTsgfQogICAgQnV0dG9uU3Rh
dGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBCdXR0b25TdGF0ZShzKTsgfQogICAgQnV0dG9uU3Rh
dGUgc3RhdGVBZnRlcigpIGNvbnN0OwogICAgYm9vbCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1
cm4gYWNjcHQ7IH0KICAgIFFTdHJpbmcgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIHR4dDsgfQogICAg
Ym9vbCBpc0F1dG9SZXBlYXQoKSBjb25zdCB7IHJldHVybiBhdXRvcjsgfQogICAgaW50IGNvdW50
KCkgY29uc3QgeyByZXR1cm4gaW50KGMpOyB9CiAgICB2b2lkIGFjY2VwdCgpIHsgYWNjcHQgPSBU
UlVFOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgYWNjcHQgPSBGQUxTRTsgfQoKcHJvdGVjdGVkOgog
ICAgUVN0cmluZyB0eHQ7CiAgICB1c2hvcnQgaywgczsKICAgIHVjaGFyIGE7CiAgICB1aW50IGFj
Y3B0OjE7CiAgICB1aW50IGF1dG9yOjE7CiAgICB1c2hvcnQgYzsKfTsKCgpjbGFzcyBRRm9jdXNF
dmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CgogICAgUUZvY3VzRXZlbnQoIFR5cGUgdHlw
ZSApCiAgICAgICAgOiBRRXZlbnQodHlwZSkge30KCiAgICBib29sIGdvdEZvY3VzKCkgY29uc3Qg
eyByZXR1cm4gdHlwZSgpID09IEZvY3VzSW47IH0KICAgIGJvb2wgbG9zdEZvY3VzKCkgY29uc3Qg
eyByZXR1cm4gdHlwZSgpID09IEZvY3VzT3V0OyB9CgogICAgZW51bSBSZWFzb24geyBNb3VzZSwg
VGFiLCBBY3RpdmVXaW5kb3csIFBvcHVwLCBTaG9ydGN1dCwgT3RoZXIgfTsKICAgIHN0YXRpYyBS
ZWFzb24gcmVhc29uKCk7CiAgICBzdGF0aWMgdm9pZCBzZXRSZWFzb24oIFJlYXNvbiByZWFzb24g
KTsKICAgIHN0YXRpYyB2b2lkIHJlc2V0UmVhc29uKCk7Cgpwcml2YXRlOgogICAgc3RhdGljIFJl
YXNvbiBtX3JlYXNvbjsKICAgIHN0YXRpYyBSZWFzb24gcHJldl9yZWFzb247Cn07CgoKY2xhc3Mg
UVBhaW50RXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUVBhaW50RXZlbnQoIGNv
bnN0IFFSZWdpb24mIHBhaW50UmVnaW9uLCBib29sIGVyYXNlZCA9IFRSVUUpCiAgICAgICAgOiBR
RXZlbnQoUGFpbnQpLAogICAgICAgICAgcmVjKHBhaW50UmVnaW9uLmJvdW5kaW5nUmVjdCgpKSwK
ICAgICAgICAgIHJlZyhwYWludFJlZ2lvbiksCiAgICAgICAgICBlcmFzZShlcmFzZWQpe30KICAg
IFFQYWludEV2ZW50KCBjb25zdCBRUmVjdCAmcGFpbnRSZWN0LCBib29sIGVyYXNlZCA9IFRSVUUg
KQogICAgICAgIDogUUV2ZW50KFBhaW50KSwKICAgICAgICAgIHJlYyhwYWludFJlY3QpLAogICAg
ICAgICAgcmVnKHBhaW50UmVjdCksCiAgICAgICAgICBlcmFzZShlcmFzZWQpe30KICAgIGNvbnN0
IFFSZWN0ICZyZWN0KCkgY29uc3QgeyByZXR1cm4gcmVjOyB9CiAgICBjb25zdCBRUmVnaW9uICZy
ZWdpb24oKSBjb25zdCB7IHJldHVybiByZWc7IH0KICAgIGJvb2wgZXJhc2VkKCkgY29uc3QgeyBy
ZXR1cm4gZXJhc2U7IH0KcHJvdGVjdGVkOgogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlvbjsK
ICAgIGZyaWVuZCBjbGFzcyBRQmFzZUFwcGxpY2F0aW9uOwogICAgUVJlY3QgcmVjOwogICAgUVJl
Z2lvbiByZWc7CiAgICBib29sIGVyYXNlOwp9OwoKCmNsYXNzIFFNb3ZlRXZlbnQgOiBwdWJsaWMg
UUV2ZW50CnsKcHVibGljOgogICAgUU1vdmVFdmVudCggY29uc3QgUVBvaW50ICZwb3MsIGNvbnN0
IFFQb2ludCAmb2xkUG9zICkKICAgICAgICA6IFFFdmVudChNb3ZlKSwgcChwb3MpLCBvbGRwKG9s
ZFBvcykge30KICAgIGNvbnN0IFFQb2ludCAmcG9zKCkgY29uc3QgeyByZXR1cm4gcDsgfQogICAg
Y29uc3QgUVBvaW50ICZvbGRQb3MoKWNvbnN0IHsgcmV0dXJuIG9sZHA7fQpwcm90ZWN0ZWQ6CiAg
ICBRUG9pbnQgcCwgb2xkcDsKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmll
bmQgY2xhc3MgUUJhc2VBcHBsaWNhdGlvbjsKfTsKCgpjbGFzcyBRUmVzaXplRXZlbnQgOiBwdWJs
aWMgUUV2ZW50CnsKcHVibGljOgogICAgUVJlc2l6ZUV2ZW50KCBjb25zdCBRU2l6ZSAmc2l6ZSwg
Y29uc3QgUVNpemUgJm9sZFNpemUgKQogICAgICAgIDogUUV2ZW50KFJlc2l6ZSksIHMoc2l6ZSks
IG9sZHMob2xkU2l6ZSkge30KICAgIGNvbnN0IFFTaXplICZzaXplKCkgY29uc3QgeyByZXR1cm4g
czsgfQogICAgY29uc3QgUVNpemUgJm9sZFNpemUoKWNvbnN0IHsgcmV0dXJuIG9sZHM7fQpwcm90
ZWN0ZWQ6CiAgICBRU2l6ZSBzLCBvbGRzOwogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlvbjsK
ICAgIGZyaWVuZCBjbGFzcyBRQmFzZUFwcGxpY2F0aW9uOwp9OwoKCmNsYXNzIFFDbG9zZUV2ZW50
IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFDbG9zZUV2ZW50KCkKICAgICAgICA6IFFF
dmVudChDbG9zZSksIGFjY3B0KEZBTFNFKSB7fQogICAgYm9vbCBpc0FjY2VwdGVkKCkgY29uc3Qg
eyByZXR1cm4gYWNjcHQ7IH0KICAgIHZvaWQgYWNjZXB0KCkgeyBhY2NwdCA9IFRSVUU7IH0KICAg
IHZvaWQgaWdub3JlKCkgeyBhY2NwdCA9IEZBTFNFOyB9CnByb3RlY3RlZDoKICAgIGJvb2wgYWNj
cHQ7Cn07CgoKY2xhc3MgUVNob3dFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBR
U2hvd0V2ZW50KGJvb2wgc3BvbnRhbmVvdXMpCiAgICAgICAgOiBRRXZlbnQoU2hvdyksIHNwb250
KHNwb250YW5lb3VzKSB7fQogICAgYm9vbCBzcG9udGFuZW91cygpIGNvbnN0IHsgcmV0dXJuIHNw
b250OyB9CnByb3RlY3RlZDoKICAgIGJvb2wgc3BvbnQ7Cn07CgoKY2xhc3MgUUhpZGVFdmVudCA6
IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRSGlkZUV2ZW50KGJvb2wgc3BvbnRhbmVvdXMp
CiAgICAgICAgOiBRRXZlbnQoSGlkZSksIHNwb250KHNwb250YW5lb3VzKSB7fQogICAgYm9vbCBz
cG9udGFuZW91cygpIGNvbnN0IHsgcmV0dXJuIHNwb250OyB9CnByb3RlY3RlZDoKICAgIGJvb2wg
c3BvbnQ7Cn07CgoKCgoKCgpjbGFzcyBRRHJvcEV2ZW50IDogcHVibGljIFFFdmVudCwgcHVibGlj
IFFNaW1lU291cmNlCnsKcHVibGljOgogICAgUURyb3BFdmVudCggY29uc3QgUVBvaW50JiBwb3Ms
IFR5cGUgdHlwPURyb3AgKQogICAgICAgIDogUUV2ZW50KHR5cCksIHAocG9zKSwKICAgICAgICAg
IGFjdCgwKSwgYWNjcHQoMCksIGFjY3B0YWN0KDApLCByZXN2KDApLAogICAgICAgICAgZCgwKQog
ICAgICAgIHt9CiAgICBjb25zdCBRUG9pbnQgJnBvcygpIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAg
IGJvb2wgaXNBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGFjY3B0IHx8IGFjY3B0YWN0OyB9CiAg
ICB2b2lkIGFjY2VwdChib29sIHk9VFJVRSkgeyBhY2NwdCA9IHk7IH0KICAgIHZvaWQgaWdub3Jl
KCkgeyBhY2NwdCA9IEZBTFNFOyB9CgogICAgYm9vbCBpc0FjdGlvbkFjY2VwdGVkKCkgY29uc3Qg
eyByZXR1cm4gYWNjcHRhY3Q7IH0KICAgIHZvaWQgYWNjZXB0QWN0aW9uKGJvb2wgeT1UUlVFKSB7
IGFjY3B0YWN0ID0geTsgfQogICAgZW51bSBBY3Rpb24geyBDb3B5LCBMaW5rLCBNb3ZlLCBQcml2
YXRlLCBVc2VyQWN0aW9uPTEwMCB9OwogICAgdm9pZCBzZXRBY3Rpb24oIEFjdGlvbiBhICkgeyBh
Y3QgPSAodWludClhOyB9CiAgICBBY3Rpb24gYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gQWN0aW9u
KGFjdCk7IH0KCiAgICBRV2lkZ2V0KiBzb3VyY2UoKSBjb25zdDsKICAgIGNvbnN0IGNoYXIqIGZv
cm1hdCggaW50IG4gPSAwICkgY29uc3Q7CiAgICBRQnl0ZUFycmF5IGVuY29kZWREYXRhKCBjb25z
dCBjaGFyKiApIGNvbnN0OwogICAgYm9vbCBwcm92aWRlcyggY29uc3QgY2hhciogKSBjb25zdDsK
CiAgICBRQnl0ZUFycmF5IGRhdGEoY29uc3QgY2hhciogZikgY29uc3QgeyByZXR1cm4gZW5jb2Rl
ZERhdGEoZik7IH0KCiAgICB2b2lkIHNldFBvaW50KCBjb25zdCBRUG9pbnQmIG5wICkgeyBwID0g
bnA7IH0KCnByb3RlY3RlZDoKICAgIFFQb2ludCBwOwogICAgdWludCBhY3Q6ODsKICAgIHVpbnQg
YWNjcHQ6MTsKICAgIHVpbnQgYWNjcHRhY3Q6MTsKICAgIHVpbnQgcmVzdjo1OwogICAgdm9pZCAq
IGQ7Cn07CgoKCmNsYXNzIFFEcmFnTW92ZUV2ZW50IDogcHVibGljIFFEcm9wRXZlbnQKewpwdWJs
aWM6CiAgICBRRHJhZ01vdmVFdmVudCggY29uc3QgUVBvaW50JiBwb3MsIFR5cGUgdHlwPURyYWdN
b3ZlICkKICAgICAgICA6IFFEcm9wRXZlbnQocG9zLHR5cCksCiAgICAgICAgICByZWN0KCBwb3Ms
IFFTaXplKCAxLCAxICkgKSB7fQogICAgUVJlY3QgYW5zd2VyUmVjdCgpIGNvbnN0IHsgcmV0dXJu
IHJlY3Q7IH0KICAgIHZvaWQgYWNjZXB0KCBib29sIHk9VFJVRSApIHsgUURyb3BFdmVudDo6YWNj
ZXB0KHkpOyB9CiAgICB2b2lkIGFjY2VwdCggY29uc3QgUVJlY3QgJiByKSB7IGFjY3B0ID0gVFJV
RTsgcmVjdCA9IHI7IH0KICAgIHZvaWQgaWdub3JlKCBjb25zdCBRUmVjdCAmIHIpIHsgYWNjcHQg
PUZBTFNFOyByZWN0ID0gcjsgfQogICAgdm9pZCBpZ25vcmUoKSB7IFFEcm9wRXZlbnQ6Omlnbm9y
ZSgpOyB9Cgpwcm90ZWN0ZWQ6CiAgICBRUmVjdCByZWN0Owp9OwoKCmNsYXNzIFFEcmFnRW50ZXJF
dmVudCA6IHB1YmxpYyBRRHJhZ01vdmVFdmVudAp7CnB1YmxpYzoKICAgIFFEcmFnRW50ZXJFdmVu
dCggY29uc3QgUVBvaW50JiBwb3MgKSA6CiAgICAgICAgUURyYWdNb3ZlRXZlbnQocG9zLCBEcmFn
RW50ZXIpIHsgfQp9OwoKCgpjbGFzcyBRRHJhZ1Jlc3BvbnNlRXZlbnQgOiBwdWJsaWMgUUV2ZW50
CnsKcHVibGljOgogICAgUURyYWdSZXNwb25zZUV2ZW50KCBib29sIGFjY2VwdGVkICkKICAgICAg
ICA6IFFFdmVudChEcmFnUmVzcG9uc2UpLCBhKGFjY2VwdGVkKSB7fQogICAgYm9vbCBkcmFnQWNj
ZXB0ZWQoKSBjb25zdCB7IHJldHVybiBhOyB9CnByb3RlY3RlZDoKICAgIGJvb2wgYTsKfTsKCgpj
bGFzcyBRRHJhZ0xlYXZlRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUURyYWdM
ZWF2ZUV2ZW50KCkKICAgICAgICA6IFFFdmVudChEcmFnTGVhdmUpIHt9Cn07CgoKCmNsYXNzIFFD
aGlsZEV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFDaGlsZEV2ZW50KCBUeXBl
IHR5cGUsIFFPYmplY3QgKmNoaWxkICkKICAgICAgICA6IFFFdmVudCh0eXBlKSwgYyhjaGlsZCkg
e30KICAgIFFPYmplY3QgKmNoaWxkKCkgY29uc3QgeyByZXR1cm4gYzsgfQogICAgYm9vbCBpbnNl
cnRlZCgpIGNvbnN0IHsgcmV0dXJuIHQgPT0gQ2hpbGRJbnNlcnRlZDsgfQogICAgYm9vbCByZW1v
dmVkKCkgY29uc3QgeyByZXR1cm4gdCA9PSBDaGlsZFJlbW92ZWQ7IH0KcHJvdGVjdGVkOgogICAg
UU9iamVjdCAqYzsKfTsKCgpjbGFzcyBRQ3VzdG9tRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVi
bGljOgogICAgUUN1c3RvbUV2ZW50KCBpbnQgdHlwZSApOwogICAgUUN1c3RvbUV2ZW50KCBUeXBl
IHR5cGUsIHZvaWQgKmRhdGEgKQogICAgICAgIDogUUV2ZW50KHR5cGUpLCBkKGRhdGEpIHt9Owog
ICAgdm9pZCAqZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGQ7IH0KICAgIHZvaWQgc2V0RGF0YSggdm9p
ZCogZGF0YSApIHsgZCA9IGRhdGE7IH0KcHJpdmF0ZToKICAgIHZvaWQgKmQ7Cn07CiMgNDYgImtl
cm5lbC9xb2JqZWN0LmgiIDIKIyAxICJrZXJuZWwvcW5hbWVzcGFjZS5oIiAxCiMgNDcgImtlcm5l
bC9xb2JqZWN0LmgiIDIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FzdHJpbmdsaXN0LmgiIDEK
IyA0MiAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc3RyaW5nbGlzdC5oIgojIDEgIi91c3IvbGliL3F0
L2luY2x1ZGUvcXZhbHVlbGlzdC5oIiAxCiMgNDIgIi91c3IvbGliL3F0L2luY2x1ZGUvcXZhbHVl
bGlzdC5oIgojIDEgIi91c3IvbGliL3F0L2luY2x1ZGUvcXNoYXJlZC5oIiAxCiMgNDMgIi91c3Iv
bGliL3F0L2luY2x1ZGUvcXZhbHVlbGlzdC5oIiAyCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVkZS9x
ZGF0YXN0cmVhbS5oIiAxCiMgNDIgIi91c3IvbGliL3F0L2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIK
IyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fpb2RldmljZS5oIiAxCiMgNDIgIi91c3IvbGliL3F0
L2luY2x1ZGUvcWlvZGV2aWNlLmgiCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xZ2xvYmFsLmgi
IDEKIyA0MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xaW9kZXZpY2UuaCIgMgojIDEgIi91c3IvbGli
L3F0L2luY2x1ZGUvcWNzdHJpbmcuaCIgMQojIDQ0ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fpb2Rl
dmljZS5oIiAyCiMgODggIi91c3IvbGliL3F0L2luY2x1ZGUvcWlvZGV2aWNlLmgiCmNsYXNzIFFJ
T0RldmljZQp7CnB1YmxpYzoKICAgIFFJT0RldmljZSgpOwogICAgdmlydHVhbCB+UUlPRGV2aWNl
KCk7CgogICAgaW50IGZsYWdzKCkgY29uc3QgeyByZXR1cm4gaW9Nb2RlOyB9CiAgICBpbnQgbW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIGlvTW9kZSAmIDB4MDBmZjsgfQogICAgaW50IHN0YXRlKCkgY29u
c3QgeyByZXR1cm4gaW9Nb2RlICYgMHhmMDAwOyB9CgogICAgYm9vbCBpc0RpcmVjdEFjY2Vzcygp
IGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMTAwKSA9PSAweDAxMDApOyB9CiAgICBib29s
IGlzU2VxdWVudGlhbEFjY2VzcygpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMjAwKSA9
PSAweDAyMDApOyB9CiAgICBib29sIGlzQ29tYmluZWRBY2Nlc3MoKSBjb25zdCB7IHJldHVybiAo
KGlvTW9kZSAmIDB4MDMwMCkgPT0gMHgwMzAwKTsgfQogICAgYm9vbCBpc0J1ZmZlcmVkKCkgY29u
c3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwNDApICE9IDB4MDA0MCk7IH0KICAgIGJvb2wgaXNS
YXcoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDA0MCkgPT0gMHgwMDQwKTsgfQogICAg
Ym9vbCBpc1N5bmNocm9ub3VzKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwODApICE9
IDB4MDA4MCk7IH0KICAgIGJvb2wgaXNBc3luY2hyb25vdXMoKSBjb25zdCB7IHJldHVybiAoKGlv
TW9kZSAmIDB4MDA4MCkgPT0gMHgwMDgwKTsgfQogICAgYm9vbCBpc1RyYW5zbGF0ZWQoKSBjb25z
dCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDAxMCkgPT0gMHgwMDEwKTsgfQogICAgYm9vbCBpc1Jl
YWRhYmxlKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwMDEpID09IDB4MDAwMSk7IH0K
ICAgIGJvb2wgaXNXcml0YWJsZSgpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDAyKSA9
PSAweDAwMDIpOyB9CiAgICBib29sIGlzUmVhZFdyaXRlKCkgY29uc3QgeyByZXR1cm4gKChpb01v
ZGUgJiAweDAwMDMpID09IDB4MDAwMyk7IH0KICAgIGJvb2wgaXNJbmFjdGl2ZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRlKCkgPT0gMDsgfQogICAgYm9vbCBpc09wZW4oKSBjb25zdCB7IHJldHVybiBz
dGF0ZSgpID09IDB4MTAwMDsgfQoKICAgIGludCBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBpb1N0
OyB9CiAgICB2b2lkIHJlc2V0U3RhdHVzKCkgeyBpb1N0ID0gMDsgfQoKICAgIHZpcnR1YWwgYm9v
bCBvcGVuKCBpbnQgbW9kZSApID0gMDsKICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpID0gMDsKICAg
IHZpcnR1YWwgdm9pZCBmbHVzaCgpID0gMDsKCiAgICB2aXJ0dWFsIHVpbnQgc2l6ZSgpIGNvbnN0
ID0gMDsKICAgIHZpcnR1YWwgaW50IGF0KCkgY29uc3Q7CiAgICB2aXJ0dWFsIGJvb2wgYXQoIGlu
dCApOwogICAgdmlydHVhbCBib29sIGF0RW5kKCkgY29uc3Q7CiAgICBib29sIHJlc2V0KCkgeyBy
ZXR1cm4gYXQoMCk7IH0KCiAgICB2aXJ0dWFsIGludCByZWFkQmxvY2soIGNoYXIgKmRhdGEsIHVp
bnQgbWF4bGVuICkgPSAwOwogICAgdmlydHVhbCBpbnQgd3JpdGVCbG9jayggY29uc3QgY2hhciAq
ZGF0YSwgdWludCBsZW4gKSA9IDA7CiAgICB2aXJ0dWFsIGludCByZWFkTGluZSggY2hhciAqZGF0
YSwgdWludCBtYXhsZW4gKTsKICAgIGludCB3cml0ZUJsb2NrKCBjb25zdCBRQnl0ZUFycmF5JiBk
YXRhICk7CiAgICBRQnl0ZUFycmF5IHJlYWRBbGwoKTsKCiAgICB2aXJ0dWFsIGludCBnZXRjaCgp
ID0gMDsKICAgIHZpcnR1YWwgaW50IHB1dGNoKCBpbnQgKSA9IDA7CiAgICB2aXJ0dWFsIGludCB1
bmdldGNoKCBpbnQgKSA9IDA7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHNldEZsYWdzKCBpbnQgZiAp
IHsgaW9Nb2RlID0gZjsgfQogICAgdm9pZCBzZXRUeXBlKCBpbnQgKTsKICAgIHZvaWQgc2V0TW9k
ZSggaW50ICk7CiAgICB2b2lkIHNldFN0YXRlKCBpbnQgKTsKICAgIHZvaWQgc2V0U3RhdHVzKCBp
bnQgKTsKICAgIGludCBpb0luZGV4OwoKcHJpdmF0ZToKICAgIGludCBpb01vZGU7CiAgICBpbnQg
aW9TdDsKCnByaXZhdGU6CgogICAgUUlPRGV2aWNlKCBjb25zdCBRSU9EZXZpY2UgJiApOwogICAg
UUlPRGV2aWNlICZvcGVyYXRvcj0oIGNvbnN0IFFJT0RldmljZSAmICk7Cgp9OwojIDQzICIvdXNy
L2xpYi9xdC9pbmNsdWRlL3FkYXRhc3RyZWFtLmgiIDIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRl
L3FzdHJpbmcuaCIgMQojIDQ0ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FkYXRhc3RyZWFtLmgiIDIK
CgoKY2xhc3MgUURhdGFTdHJlYW0KewpwdWJsaWM6CiAgICBRRGF0YVN0cmVhbSgpOwogICAgUURh
dGFTdHJlYW0oIFFJT0RldmljZSAqICk7CiAgICBRRGF0YVN0cmVhbSggUUJ5dGVBcnJheSwgaW50
IG1vZGUgKTsKICAgIHZpcnR1YWwgflFEYXRhU3RyZWFtKCk7CgogICAgUUlPRGV2aWNlICpkZXZp
Y2UoKSBjb25zdDsKICAgIHZvaWQgc2V0RGV2aWNlKCBRSU9EZXZpY2UgKiApOwogICAgdm9pZCB1
bnNldERldmljZSgpOwoKICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKICAgIGJvb2wgZW9mKCkgY29u
c3Q7CgogICAgZW51bSBCeXRlT3JkZXIgeyBCaWdFbmRpYW4sIExpdHRsZUVuZGlhbiB9OwogICAg
aW50IGJ5dGVPcmRlcigpIGNvbnN0OwogICAgdm9pZCBzZXRCeXRlT3JkZXIoIGludCApOwoKICAg
IGJvb2wgaXNQcmludGFibGVEYXRhKCkgY29uc3Q7CiAgICB2b2lkIHNldFByaW50YWJsZURhdGEo
IGJvb2wgKTsKCiAgICBpbnQgdmVyc2lvbigpIGNvbnN0OwogICAgdm9pZCBzZXRWZXJzaW9uKCBp
bnQgKTsKCiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9JTlQ4ICZpICk7CiAgICBRRGF0
YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9VSU5UOCAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJh
dG9yPj4oIFFfSU5UMTYgJmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX1VJTlQx
NiAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfSU5UMzIgJmkgKTsKICAgIFFE
YXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX1VJTlQzMiAmaSApOwogICAgUURhdGFTdHJlYW0gJm9w
ZXJhdG9yPj4oIFFfSU5UNjQgJmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX1VJ
TlQ2NCAmaSApOwoKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBmbG9hdCAmZiApOwogICAg
UURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIGRvdWJsZSAmZiApOwogICAgUURhdGFTdHJlYW0gJm9w
ZXJhdG9yPj4oIGNoYXIgKiZzdHIgKTsKCiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9J
TlQ4IGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRX1VJTlQ4IGkgKTsKICAgIFFE
YXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRX0lOVDE2IGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVy
YXRvcjw8KCBRX1VJTlQxNiBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9JTlQz
MiBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9VSU5UMzIgaSApOwogICAgUURh
dGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfSU5UNjQgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJh
dG9yPDwoIFFfVUlOVDY0IGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBmbG9hdCBm
ICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggZG91YmxlIGYgKTsKICAgIFFEYXRhU3Ry
ZWFtICZvcGVyYXRvcjw8KCBjb25zdCBjaGFyICpzdHIgKTsKCiAgICBRRGF0YVN0cmVhbSAmcmVh
ZEJ5dGVzKCBjaGFyIComLCB1aW50ICZsZW4gKTsKICAgIFFEYXRhU3RyZWFtICZyZWFkUmF3Qnl0
ZXMoIGNoYXIgKiwgdWludCBsZW4gKTsKCiAgICBRRGF0YVN0cmVhbSAmd3JpdGVCeXRlcyggY29u
c3QgY2hhciAqLCB1aW50IGxlbiApOwogICAgUURhdGFTdHJlYW0gJndyaXRlUmF3Qnl0ZXMoIGNv
bnN0IGNoYXIgKiwgdWludCBsZW4gKTsKCnByaXZhdGU6CiAgICBRSU9EZXZpY2UgKmRldjsKICAg
IGJvb2wgb3duZGV2OwogICAgaW50IGJ5dGVvcmRlcjsKICAgIGJvb2wgcHJpbnRhYmxlOwogICAg
Ym9vbCBub3N3YXA7CiAgICBpbnQgdmVyOwoKcHJpdmF0ZToKCiAgICBRRGF0YVN0cmVhbSggY29u
c3QgUURhdGFTdHJlYW0gJiApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPSggY29uc3QgUURh
dGFTdHJlYW0gJiApOwoKfTsKCgoKCgoKaW5saW5lIFFJT0RldmljZSAqUURhdGFTdHJlYW06OmRl
dmljZSgpIGNvbnN0CnsgcmV0dXJuIGRldjsgfQoKaW5saW5lIGJvb2wgUURhdGFTdHJlYW06OmF0
RW5kKCkgY29uc3QKeyByZXR1cm4gZGV2ID8gZGV2LT5hdEVuZCgpIDogVFJVRTsgfQoKaW5saW5l
IGJvb2wgUURhdGFTdHJlYW06OmVvZigpIGNvbnN0CnsgcmV0dXJuIGF0RW5kKCk7IH0KCmlubGlu
ZSBpbnQgUURhdGFTdHJlYW06OmJ5dGVPcmRlcigpIGNvbnN0CnsgcmV0dXJuIGJ5dGVvcmRlcjsg
fQoKaW5saW5lIGJvb2wgUURhdGFTdHJlYW06OmlzUHJpbnRhYmxlRGF0YSgpIGNvbnN0CnsgcmV0
dXJuIHByaW50YWJsZTsgfQoKaW5saW5lIHZvaWQgUURhdGFTdHJlYW06OnNldFByaW50YWJsZURh
dGEoIGJvb2wgcCApCnsgcHJpbnRhYmxlID0gcDsgfQoKaW5saW5lIGludCBRRGF0YVN0cmVhbTo6
dmVyc2lvbigpIGNvbnN0CnsgcmV0dXJuIHZlcjsgfQoKaW5saW5lIHZvaWQgUURhdGFTdHJlYW06
OnNldFZlcnNpb24oIGludCB2ICkKeyB2ZXIgPSB2OyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFE
YXRhU3RyZWFtOjpvcGVyYXRvcj4+KCBRX1VJTlQ4ICZpICkKeyByZXR1cm4gKnRoaXMgPj4gKFFf
SU5UOCYpaTsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I+Pigg
UV9VSU5UMTYgJmkgKQp7IHJldHVybiAqdGhpcyA+PiAoUV9JTlQxNiYpaTsgfQoKaW5saW5lIFFE
YXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I+PiggUV9VSU5UMzIgJmkgKQp7IHJldHVy
biAqdGhpcyA+PiAoUV9JTlQzMiYpaTsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVh
bTo6b3BlcmF0b3I+PiggUV9VSU5UNjQgJmkgKQp7IHJldHVybiAqdGhpcyA+PiAoUV9JTlQ2NCYp
aTsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggUV9VSU5U
OCBpICkKeyByZXR1cm4gKnRoaXMgPDwgKFFfSU5UOClpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0g
JlFEYXRhU3RyZWFtOjpvcGVyYXRvcjw8KCBRX1VJTlQxNiBpICkKeyByZXR1cm4gKnRoaXMgPDwg
KFFfSU5UMTYpaTsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8
PCggUV9VSU5UMzIgaSApCnsgcmV0dXJuICp0aGlzIDw8IChRX0lOVDMyKWk7IH0KCmlubGluZSBR
RGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPDwoIFFfVUlOVDY0IGkgKQp7IHJldHVy
biAqdGhpcyA8PCAoUV9JTlQ2NClpOyB9CiMgNDQgIi91c3IvbGliL3F0L2luY2x1ZGUvcXZhbHVl
bGlzdC5oIiAyCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBRVmFsdWVMaXN0Tm9kZQp7
CnB1YmxpYzoKICAgIFFWYWx1ZUxpc3ROb2RlKCBjb25zdCBUJiB0ICkgOiBkYXRhKCB0ICkgeyB9
CiAgICBRVmFsdWVMaXN0Tm9kZSgpIHsgfQoKCgoKCiAgICBRVmFsdWVMaXN0Tm9kZTxUPiogbmV4
dDsKICAgIFFWYWx1ZUxpc3ROb2RlPFQ+KiBwcmV2OwogICAgVCBkYXRhOwp9OwoKdGVtcGxhdGU8
Y2xhc3MgVD4KY2xhc3MgUVZhbHVlTGlzdEl0ZXJhdG9yCnsKIHB1YmxpYzoKCgoKICAgIHR5cGVk
ZWYgUVZhbHVlTGlzdE5vZGU8VD4qIE5vZGVQdHI7CgoKCgogICAgTm9kZVB0ciBub2RlOwoKCgoK
ICAgIFFWYWx1ZUxpc3RJdGVyYXRvcigpIDogbm9kZSggMCApIHt9CiAgICBRVmFsdWVMaXN0SXRl
cmF0b3IoIE5vZGVQdHIgcCApIDogbm9kZSggcCApIHt9CiAgICBRVmFsdWVMaXN0SXRlcmF0b3Io
IGNvbnN0IFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgaXQgKSA6IG5vZGUoIGl0Lm5vZGUgKSB7fQoK
ICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBpdCApIGNv
bnN0IHsgcmV0dXJuIG5vZGUgPT0gaXQubm9kZTsgfQogICAgYm9vbCBvcGVyYXRvciE9KCBjb25z
dCBRVmFsdWVMaXN0SXRlcmF0b3I8VD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9kZSAhPSBpdC5u
b2RlOyB9CiAgICBjb25zdCBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBub2RlLT5kYXRh
OyB9CiAgICBUJiBvcGVyYXRvciooKSB7IHJldHVybiBub2RlLT5kYXRhOyB9CgoKCgogICAgUVZh
bHVlTGlzdEl0ZXJhdG9yPFQ+JiBvcGVyYXRvcisrKCkgewogICAgICAgIG5vZGUgPSBub2RlLT5u
ZXh0OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBRVmFsdWVMaXN0SXRlcmF0b3I8
VD4gb3BlcmF0b3IrKyhpbnQpIHsKICAgICAgICBRVmFsdWVMaXN0SXRlcmF0b3I8VD4gdG1wID0g
KnRoaXM7CiAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7CiAgICAgICAgcmV0dXJuIHRtcDsKICAg
IH0KCiAgICBRVmFsdWVMaXN0SXRlcmF0b3I8VD4mIG9wZXJhdG9yLS0oKSB7CiAgICAgICAgbm9k
ZSA9IG5vZGUtPnByZXY7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFWYWx1ZUxp
c3RJdGVyYXRvcjxUPiBvcGVyYXRvci0tKGludCkgewogICAgICAgIFFWYWx1ZUxpc3RJdGVyYXRv
cjxUPiB0bXAgPSAqdGhpczsKICAgICAgICBub2RlID0gbm9kZS0+cHJldjsKICAgICAgICByZXR1
cm4gdG1wOwogICAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgUVZhbHVlTGlzdENvbnN0
SXRlcmF0b3IKewogcHVibGljOgoKCgogICAgdHlwZWRlZiBRVmFsdWVMaXN0Tm9kZTxUPiogTm9k
ZVB0cjsKCgoKCiAgICBOb2RlUHRyIG5vZGU7CgoKCgogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0
b3IoKSA6IG5vZGUoIDAgKSB7fQogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3IoIE5vZGVQdHIg
cCApIDogbm9kZSggcCApIHt9CiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvciggY29uc3QgUVZh
bHVlTGlzdENvbnN0SXRlcmF0b3I8VD4mIGl0ICkgOiBub2RlKCBpdC5ub2RlICkge30KICAgIFFW
YWx1ZUxpc3RDb25zdEl0ZXJhdG9yKCBjb25zdCBRVmFsdWVMaXN0SXRlcmF0b3I8VD4mIGl0ICkg
OiBub2RlKCBpdC5ub2RlICkge30KCiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFWYWx1ZUxp
c3RDb25zdEl0ZXJhdG9yPFQ+JiBpdCApIGNvbnN0IHsgcmV0dXJuIG5vZGUgPT0gaXQubm9kZTsg
fQogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiYg
aXQgKSBjb25zdCB7IHJldHVybiBub2RlICE9IGl0Lm5vZGU7IH0KICAgIGNvbnN0IFQmIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KCgoKCiAgICBRVmFsdWVMaXN0Q29u
c3RJdGVyYXRvcjxUPiYgb3BlcmF0b3IrKygpIHsKICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsK
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8
VD4gb3BlcmF0b3IrKyhpbnQpIHsKICAgICAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiB0
bXAgPSAqdGhpczsKICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKICAgICAgICByZXR1cm4gdG1w
OwogICAgfQoKICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+JiBvcGVyYXRvci0tKCkgewog
ICAgICAgIG5vZGUgPSBub2RlLT5wcmV2OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
ICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBvcGVyYXRvci0tKGludCkgewogICAgICAgIFFW
YWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+IHRtcCA9ICp0aGlzOwogICAgICAgIG5vZGUgPSBub2Rl
LT5wcmV2OwogICAgICAgIHJldHVybiB0bXA7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4K
Y2xhc3MgUVZhbHVlTGlzdFByaXZhdGUgOiBwdWJsaWMgUVNoYXJlZAp7CnB1YmxpYzoKCgoKICAg
IHR5cGVkZWYgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+IEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRVmFs
dWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBDb25zdEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRVmFsdWVM
aXN0Tm9kZTxUPiBOb2RlOwogICAgdHlwZWRlZiBRVmFsdWVMaXN0Tm9kZTxUPiogTm9kZVB0cjsK
CgoKCiAgICBRVmFsdWVMaXN0UHJpdmF0ZSgpIHsgbm9kZSA9IG5ldyBOb2RlOyBub2RlLT5uZXh0
ID0gbm9kZS0+cHJldiA9IG5vZGU7IG5vZGVzID0gMDsgfQogICAgUVZhbHVlTGlzdFByaXZhdGUo
IGNvbnN0IFFWYWx1ZUxpc3RQcml2YXRlPFQ+JiBfcCApIDogUVNoYXJlZCgpIHsKICAgICAgICBu
b2RlID0gbmV3IE5vZGU7IG5vZGUtPm5leHQgPSBub2RlLT5wcmV2ID0gbm9kZTsgbm9kZXMgPSAw
OwogICAgICAgIEl0ZXJhdG9yIGIoIF9wLm5vZGUtPm5leHQgKTsKICAgICAgICBJdGVyYXRvciBl
KCBfcC5ub2RlICk7CiAgICAgICAgSXRlcmF0b3IgaSggbm9kZSApOwogICAgICAgIHdoaWxlKCBi
ICE9IGUgKQogICAgICAgICAgICBpbnNlcnQoIGksICpiKysgKTsKICAgIH0KCiAgICB2b2lkIGRl
cmVmQW5kRGVsZXRlKCkKICAgIHsKICAgICAgICBpZiAoIGRlcmVmKCkgKQogICAgICAgICAgICBk
ZWxldGUgdGhpczsKICAgIH0KCgoKCgogICAgflFWYWx1ZUxpc3RQcml2YXRlKCkgewogICAgICAg
IE5vZGVQdHIgcCA9IG5vZGUtPm5leHQ7CiAgICAgICAgd2hpbGUoIHAgIT0gbm9kZSApIHsKICAg
ICAgICAgICAgTm9kZVB0ciB4ID0gcC0+bmV4dDsKICAgICAgICAgICAgZGVsZXRlIHA7CiAgICAg
ICAgICAgIHAgPSB4OwogICAgICAgIH0KICAgICAgICBkZWxldGUgbm9kZTsKICAgIH0KCiAgICBJ
dGVyYXRvciBpbnNlcnQoIEl0ZXJhdG9yIGl0LCBjb25zdCBUJiB4ICkgewogICAgICAgIE5vZGVQ
dHIgcCA9IG5ldyBOb2RlKCB4ICk7CiAgICAgICAgcC0+bmV4dCA9IGl0Lm5vZGU7CiAgICAgICAg
cC0+cHJldiA9IGl0Lm5vZGUtPnByZXY7CiAgICAgICAgaXQubm9kZS0+cHJldi0+bmV4dCA9IHA7
CiAgICAgICAgaXQubm9kZS0+cHJldiA9IHA7CiAgICAgICAgbm9kZXMrKzsKICAgICAgICByZXR1
cm4gcDsKICAgIH0KCiAgICBJdGVyYXRvciByZW1vdmUoIEl0ZXJhdG9yIGl0ICkgewogICAgICAg
IGlmICggIShpdC5ub2RlICE9IG5vZGUpICkgcVdhcm5pbmcoIkFTU0VSVDogXCIlc1wiIGluICVz
ICglZCkiLCJpdC5ub2RlICE9IG5vZGUiLCIvdXNyL2xpYi9xdC9pbmNsdWRlL3F2YWx1ZWxpc3Qu
aCIsMjI2KTsKICAgICAgICBOb2RlUHRyIG5leHQgPSBpdC5ub2RlLT5uZXh0OwogICAgICAgIE5v
ZGVQdHIgcHJldiA9IGl0Lm5vZGUtPnByZXY7CiAgICAgICAgcHJldi0+bmV4dCA9IG5leHQ7CiAg
ICAgICAgbmV4dC0+cHJldiA9IHByZXY7CiAgICAgICAgZGVsZXRlIGl0Lm5vZGU7CiAgICAgICAg
bm9kZXMtLTsKICAgICAgICByZXR1cm4gSXRlcmF0b3IoIG5leHQgKTsKICAgIH0KCiAgICBOb2Rl
UHRyIGZpbmQoIE5vZGVQdHIgc3RhcnQsIGNvbnN0IFQmIHggKSBjb25zdCB7CiAgICAgICAgQ29u
c3RJdGVyYXRvciBmaXJzdCggc3RhcnQgKTsKICAgICAgICBDb25zdEl0ZXJhdG9yIGxhc3QoIG5v
ZGUgKTsKICAgICAgICB3aGlsZSggZmlyc3QgIT0gbGFzdCkgewogICAgICAgICAgICBpZiAoICpm
aXJzdCA9PSB4ICkKICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdC5ub2RlOwogICAgICAgICAg
ICArK2ZpcnN0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGFzdC5ub2RlOwogICAgfQoKICAg
IGludCBmaW5kSW5kZXgoIE5vZGVQdHIgc3RhcnQsIGNvbnN0IFQmIHggKSBjb25zdCB7CiAgICAg
ICAgQ29uc3RJdGVyYXRvciBmaXJzdCggc3RhcnQgKTsKICAgICAgICBDb25zdEl0ZXJhdG9yIGxh
c3QoIG5vZGUgKTsKICAgICAgICBpbnQgcG9zID0gMDsKICAgICAgICB3aGlsZSggZmlyc3QgIT0g
bGFzdCkgewogICAgICAgICAgICBpZiAoICpmaXJzdCA9PSB4ICkKICAgICAgICAgICAgICAgIHJl
dHVybiBwb3M7CiAgICAgICAgICAgICsrZmlyc3Q7CiAgICAgICAgICAgICsrcG9zOwogICAgICAg
IH0KICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgdWludCBjb250YWlucyggY29uc3QgVCYg
eCApIGNvbnN0IHsKICAgICAgICB1aW50IHJlc3VsdCA9IDA7CiAgICAgICAgSXRlcmF0b3IgZmly
c3QgPSBJdGVyYXRvciggbm9kZS0+bmV4dCApOwogICAgICAgIEl0ZXJhdG9yIGxhc3QgPSBJdGVy
YXRvciggbm9kZSApOwogICAgICAgIHdoaWxlKCBmaXJzdCAhPSBsYXN0KSB7CiAgICAgICAgICAg
IGlmICggKmZpcnN0ID09IHggKQogICAgICAgICAgICAgICAgKytyZXN1bHQ7CiAgICAgICAgICAg
ICsrZmlyc3Q7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgdm9p
ZCByZW1vdmUoIGNvbnN0IFQmIHggKSB7CiAgICAgICAgSXRlcmF0b3IgZmlyc3QgPSBJdGVyYXRv
ciggbm9kZS0+bmV4dCApOwogICAgICAgIEl0ZXJhdG9yIGxhc3QgPSBJdGVyYXRvciggbm9kZSAp
OwogICAgICAgIHdoaWxlKCBmaXJzdCAhPSBsYXN0KSB7CiAgICAgICAgICAgIGlmICggKmZpcnN0
ID09IHggKQogICAgICAgICAgICAgICAgZmlyc3QgPSByZW1vdmUoIGZpcnN0ICk7CiAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICsrZmlyc3Q7CiAgICAgICAgfQogICAgfQoKICAgIE5v
ZGVQdHIgYXQoIHVpbnQgaSApIGNvbnN0IHsKICAgICAgICBpZiAoICEoaSA8PSBub2RlcykgKSBx
V2FybmluZygiQVNTRVJUOiBcIiVzXCIgaW4gJXMgKCVkKSIsImkgPD0gbm9kZXMiLCIvdXNyL2xp
Yi9xdC9pbmNsdWRlL3F2YWx1ZWxpc3QuaCIsMjg0KTsKICAgICAgICBOb2RlUHRyIHAgPSBub2Rl
LT5uZXh0OwogICAgICAgIGZvciggdWludCB4ID0gMDsgeCA8IGk7ICsreCApCiAgICAgICAgICAg
IHAgPSBwLT5uZXh0OwogICAgICAgIHJldHVybiBwOwogICAgfQoKICAgIHZvaWQgY2xlYXIoKSB7
CiAgICAgICAgbm9kZXMgPSAwOwogICAgICAgIE5vZGVQdHIgcCA9IG5vZGUtPm5leHQ7CiAgICAg
ICAgd2hpbGUoIHAgIT0gbm9kZSApIHsKICAgICAgICAgICAgTm9kZVB0ciBuZXh0ID0gcC0+bmV4
dDsKICAgICAgICAgICAgZGVsZXRlIHA7CiAgICAgICAgICAgIHAgPSBuZXh0OwogICAgICAgIH0K
ICAgICAgICBub2RlLT5uZXh0ID0gbm9kZS0+cHJldiA9IG5vZGU7CiAgICB9CgogICAgTm9kZVB0
ciBub2RlOwogICAgdWludCBub2RlczsKfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBRVmFs
dWVMaXN0CnsKcHVibGljOgoKCgogICAgdHlwZWRlZiBRVmFsdWVMaXN0SXRlcmF0b3I8VD4gSXRl
cmF0b3I7CiAgICB0eXBlZGVmIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+IENvbnN0SXRlcmF0
b3I7CiAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOwoKCgoKICAgIFFWYWx1ZUxpc3QoKSB7IHNoID0g
bmV3IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OyB9CiAgICBRVmFsdWVMaXN0KCBjb25zdCBRVmFsdWVM
aXN0PFQ+JiBsICkgeyBzaCA9IGwuc2g7IHNoLT5yZWYoKTsgfQogICAgflFWYWx1ZUxpc3QoKSB7
IHNoLT5kZXJlZkFuZERlbGV0ZSgpOyB9CgogICAgUVZhbHVlTGlzdDxUPiYgb3BlcmF0b3I9ICgg
Y29uc3QgUVZhbHVlTGlzdDxUPiYgbCApCiAgICB7CiAgICAgICAgbC5zaC0+cmVmKCk7CiAgICAg
ICAgc2gtPmRlcmVmQW5kRGVsZXRlKCk7CiAgICAgICAgc2ggPSBsLnNoOwogICAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgICBRVmFsdWVMaXN0PFQ+IG9wZXJhdG9yKyAoIGNvbnN0IFFWYWx1
ZUxpc3Q8VD4mIGwgKSBjb25zdAogICAgewogICAgICAgIFFWYWx1ZUxpc3Q8VD4gbDIoICp0aGlz
ICk7CiAgICAgICAgZm9yKCBDb25zdEl0ZXJhdG9yIGl0ID0gbC5iZWdpbigpOyBpdCAhPSBsLmVu
ZCgpOyArK2l0ICkKICAgICAgICAgICAgbDIuYXBwZW5kKCAqaXQgKTsKICAgICAgICByZXR1cm4g
bDI7CiAgICB9CgogICAgUVZhbHVlTGlzdDxUPiYgb3BlcmF0b3IrPSAoIGNvbnN0IFFWYWx1ZUxp
c3Q8VD4mIGwgKQogICAgewogICAgICAgIGZvciggQ29uc3RJdGVyYXRvciBpdCA9IGwuYmVnaW4o
KTsgaXQgIT0gbC5lbmQoKTsgKytpdCApCiAgICAgICAgICAgIGFwcGVuZCggKml0ICk7CiAgICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIGJvb2wgb3BlcmF0b3I9PSAoIGNvbnN0IFFWYWx1
ZUxpc3Q8VD4mIGwgKSBjb25zdAogICAgewogICAgICAgIGlmICggY291bnQoKSAhPSBsLmNvdW50
KCkgKQogICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgQ29uc3RJdGVyYXRvciBpdDIg
PSBiZWdpbigpOwogICAgICAgIENvbnN0SXRlcmF0b3IgaXQgPSBsLmJlZ2luKCk7CiAgICAgICAg
Zm9yKCA7IGl0ICE9IGwuZW5kKCk7ICsraXQsICsraXQyICkKICAgICAgICAgICAgaWYgKCAhKCAq
aXQgPT0gKml0MiApICkKICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICByZXR1
cm4gVFJVRTsKICAgIH0KCiAgICBib29sIG9wZXJhdG9yIT0gKCBjb25zdCBRVmFsdWVMaXN0PFQ+
JiBsICkgY29uc3QgeyByZXR1cm4gISggKnRoaXMgPT0gbCApOyB9CgogICAgSXRlcmF0b3IgYmVn
aW4oKSB7IGRldGFjaCgpOyByZXR1cm4gSXRlcmF0b3IoIHNoLT5ub2RlLT5uZXh0ICk7IH0KICAg
IENvbnN0SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9yKCBzaC0+
bm9kZS0+bmV4dCApOyB9CiAgICBJdGVyYXRvciBlbmQoKSB7IGRldGFjaCgpOyByZXR1cm4gSXRl
cmF0b3IoIHNoLT5ub2RlICk7IH0KICAgIENvbnN0SXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gQ29uc3RJdGVyYXRvciggc2gtPm5vZGUgKTsgfQogICAgSXRlcmF0b3IgZnJvbUxhc3QoKSB7
IGRldGFjaCgpOyByZXR1cm4gSXRlcmF0b3IoIHNoLT5ub2RlLT5wcmV2ICk7IH0KICAgIENvbnN0
SXRlcmF0b3IgZnJvbUxhc3QoKSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9yKCBzaC0+bm9k
ZS0+cHJldiApOyB9CgogICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gKCBzaC0+bm9k
ZXMgPT0gMCApOyB9CgogICAgSXRlcmF0b3IgaW5zZXJ0KCBJdGVyYXRvciBpdCwgY29uc3QgVCYg
eCApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+aW5zZXJ0KCBpdCwgeCApOyB9CgogICAgSXRlcmF0
b3IgYXBwZW5kKCBjb25zdCBUJiB4ICkgeyBkZXRhY2goKTsgcmV0dXJuIHNoLT5pbnNlcnQoIGVu
ZCgpLCB4ICk7IH0KICAgIEl0ZXJhdG9yIHByZXBlbmQoIGNvbnN0IFQmIHggKSB7IGRldGFjaCgp
OyByZXR1cm4gc2gtPmluc2VydCggYmVnaW4oKSwgeCApOyB9CgogICAgSXRlcmF0b3IgcmVtb3Zl
KCBJdGVyYXRvciBpdCApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+cmVtb3ZlKCBpdCApOyB9CiAg
ICB2b2lkIHJlbW92ZSggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHNoLT5yZW1vdmUoIHggKTsg
fQoKICAgIFQmIGZpcnN0KCkgeyBkZXRhY2goKTsgcmV0dXJuIHNoLT5ub2RlLT5uZXh0LT5kYXRh
OyB9CiAgICBjb25zdCBUJiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJuIHNoLT5ub2RlLT5uZXh0LT5k
YXRhOyB9CiAgICBUJiBsYXN0KCkgeyBkZXRhY2goKTsgcmV0dXJuIHNoLT5ub2RlLT5wcmV2LT5k
YXRhOyB9CiAgICBjb25zdCBUJiBsYXN0KCkgY29uc3QgeyByZXR1cm4gc2gtPm5vZGUtPnByZXYt
PmRhdGE7IH0KCiAgICBUJiBvcGVyYXRvcltdICggdWludCBpICkgeyBkZXRhY2goKTsgcmV0dXJu
IHNoLT5hdChpKS0+ZGF0YTsgfQogICAgY29uc3QgVCYgb3BlcmF0b3JbXSAoIHVpbnQgaSApIGNv
bnN0IHsgcmV0dXJuIHNoLT5hdChpKS0+ZGF0YTsgfQogICAgSXRlcmF0b3IgYXQoIHVpbnQgaSAp
IHsgZGV0YWNoKCk7IHJldHVybiBJdGVyYXRvciggc2gtPmF0KGkpICk7IH0KICAgIENvbnN0SXRl
cmF0b3IgYXQoIHVpbnQgaSApIGNvbnN0IHsgcmV0dXJuIENvbnN0SXRlcmF0b3IoIHNoLT5hdChp
KSApOyB9CiAgICBJdGVyYXRvciBmaW5kICggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJldHVy
biBJdGVyYXRvciggc2gtPmZpbmQoIHNoLT5ub2RlLT5uZXh0LCB4KSApOyB9CiAgICBDb25zdEl0
ZXJhdG9yIGZpbmQgKCBjb25zdCBUJiB4ICkgY29uc3QgeyByZXR1cm4gQ29uc3RJdGVyYXRvcigg
c2gtPmZpbmQoIHNoLT5ub2RlLT5uZXh0LCB4KSApOyB9CiAgICBJdGVyYXRvciBmaW5kICggSXRl
cmF0b3IgaXQsIGNvbnN0IFQmIHggKSB7IGRldGFjaCgpOyByZXR1cm4gSXRlcmF0b3IoIHNoLT5m
aW5kKCBpdC5ub2RlLCB4ICkgKTsgfQogICAgQ29uc3RJdGVyYXRvciBmaW5kICggQ29uc3RJdGVy
YXRvciBpdCwgY29uc3QgVCYgeCApIGNvbnN0IHsgcmV0dXJuIENvbnN0SXRlcmF0b3IoIHNoLT5m
aW5kKCBpdC5ub2RlLCB4ICkgKTsgfQogICAgaW50IGZpbmRJbmRleCggY29uc3QgVCYgeCApIGNv
bnN0IHsgcmV0dXJuIHNoLT5maW5kSW5kZXgoIHNoLT5ub2RlLT5uZXh0LCB4KSA7IH0KICAgIHVp
bnQgY29udGFpbnMoIGNvbnN0IFQmIHggKSBjb25zdCB7IHJldHVybiBzaC0+Y29udGFpbnMoIHgg
KTsgfQoKICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBzaC0+bm9kZXM7IH0KCiAgICB2
b2lkIGNsZWFyKCkgeyBpZiAoIHNoLT5jb3VudCA9PSAxICkgc2gtPmNsZWFyKCk7IGVsc2UgeyBz
aC0+ZGVyZWYoKTsgc2ggPSBuZXcgUVZhbHVlTGlzdFByaXZhdGU8VD47IH0gfQoKCiAgICBRVmFs
dWVMaXN0PFQ+JiBvcGVyYXRvcis9ICggY29uc3QgVCYgeCApCiAgICB7CiAgICAgICAgYXBwZW5k
KCB4ICk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogICAgUVZhbHVlTGlzdDxUPiYgb3Bl
cmF0b3I8PCAoIGNvbnN0IFQmIHggKQogICAgewogICAgICAgIGFwcGVuZCggeCApOwogICAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCgpwcm90ZWN0ZWQ6CgoKCiAgICB2b2lkIGRldGFjaCgpIHsg
aWYgKCBzaC0+Y291bnQgPiAxICkgeyBzaC0+ZGVyZWYoKTsgc2ggPSBuZXcgUVZhbHVlTGlzdFBy
aXZhdGU8VD4oICpzaCApOyB9IH0KCgoKCiAgICBRVmFsdWVMaXN0UHJpdmF0ZTxUPiogc2g7Cn07
CgoKdGVtcGxhdGU8Y2xhc3MgVD4KaW5saW5lIFFEYXRhU3RyZWFtJiBvcGVyYXRvcj4+KCBRRGF0
YVN0cmVhbSYgcywgUVZhbHVlTGlzdDxUPiYgbCApCnsKICAgIGwuY2xlYXIoKTsKICAgIFFfVUlO
VDMyIGM7CiAgICBzID4+IGM7CiAgICBmb3IoIFFfVUlOVDMyIGkgPSAwOyBpIDwgYzsgKytpICkK
ICAgIHsKICAgICAgICBUIHQ7CiAgICAgICAgcyA+PiB0OwogICAgICAgIGwuYXBwZW5kKCB0ICk7
CiAgICB9CiAgICByZXR1cm4gczsKfQoKdGVtcGxhdGU8Y2xhc3MgVD4KaW5saW5lIFFEYXRhU3Ry
ZWFtJiBvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSYgcywgY29uc3QgUVZhbHVlTGlzdDxUPiYgbCAp
CnsKICAgIHMgPDwgKFFfVUlOVDMyKWwuY291bnQoKTsKICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJh
dG9yPFQ+IGl0ID0gbC5iZWdpbigpOwogICAgZm9yKCA7IGl0ICE9IGwuZW5kKCk7ICsraXQgKQog
ICAgICAgIHMgPDwgKml0OwogICAgcmV0dXJuIHM7Cn0KIyA0MyAiL3Vzci9saWIvcXQvaW5jbHVk
ZS9xc3RyaW5nbGlzdC5oIiAyCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc3RyaW5nLmgiIDEK
IyA0NCAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc3RyaW5nbGlzdC5oIiAyCiMgMSAiL3Vzci9saWIv
cXQvaW5jbHVkZS9xcmVnZXhwLmgiIDEKIyA0MiAiL3Vzci9saWIvcXQvaW5jbHVkZS9xcmVnZXhw
LmgiCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc3RyaW5nLmgiIDEKIyA0MyAiL3Vzci9saWIv
cXQvaW5jbHVkZS9xcmVnZXhwLmgiIDIKCgoKY2xhc3MgUVJlZ0V4cAp7CnB1YmxpYzoKICAgIFFS
ZWdFeHAoKTsKICAgIFFSZWdFeHAoIGNvbnN0IFFTdHJpbmcgJiwgYm9vbCBjYXNlU2Vuc2l0aXZl
PVRSVUUsIGJvb2wgd2lsZGNhcmQ9RkFMU0UgKTsKICAgIFFSZWdFeHAoIGNvbnN0IFFSZWdFeHAg
JiApOwogICB+UVJlZ0V4cCgpOwogICAgUVJlZ0V4cCAmb3BlcmF0b3I9KCBjb25zdCBRUmVnRXhw
ICYgKTsKICAgIFFSZWdFeHAgJm9wZXJhdG9yPSggY29uc3QgUVN0cmluZyAmcGF0dGVybiApOwoK
ICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVJlZ0V4cCAmICkgY29uc3Q7CiAgICBib29sIG9w
ZXJhdG9yIT0oIGNvbnN0IFFSZWdFeHAgJnIgKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeyByZXR1cm4gISh0aGlzLT5vcGVyYXRvcj09KHIpKTsgfQoKICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHJ4ZGF0YSA9PSAwOyB9CiAgICBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiBlcnJvciA9PSAwOyB9CgogICAgYm9vbCBjYXNlU2Vuc2l0
aXZlKCkgY29uc3QgeyByZXR1cm4gY3M7IH0KICAgIHZvaWQgc2V0Q2FzZVNlbnNpdGl2ZSggYm9v
bCApOwoKICAgIGJvb2wgd2lsZGNhcmQoKSBjb25zdCB7IHJldHVybiB3YzsgfQogICAgdm9pZCBz
ZXRXaWxkY2FyZCggYm9vbCApOwoKICAgIFFTdHJpbmcgcGF0dGVybigpIGNvbnN0IHsgcmV0dXJu
IHJ4c3RyaW5nOyB9CgogICAgdm9pZCBzZXRQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiBwYXR0ZXJu
ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgb3BlcmF0b3I9KCBw
YXR0ZXJuICk7IH0KCiAgICBpbnQgbWF0Y2goIGNvbnN0IFFTdHJpbmcgJnN0ciwgaW50IGluZGV4
PTAsIGludCAqbGVuPTAsCiAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbmRleElzU3RhcnQg
PSBUUlVFICkgY29uc3Q7CiAgICBpbnQgZmluZCggY29uc3QgUVN0cmluZyYgc3RyLCBpbnQgaW5k
ZXggKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbWF0
Y2goIHN0ciwgaW5kZXggKTsgfQoKcHJvdGVjdGVkOgogICAgdm9pZCBjb21waWxlKCk7CiAgICBj
b25zdCBRQ2hhciAqbWF0Y2hzdHIoIHVpbnQgKiwgY29uc3QgUUNoYXIgKiwgdWludCwgY29uc3Qg
UUNoYXIgKiApIGNvbnN0OwoKcHJpdmF0ZToKICAgIFFTdHJpbmcgcnhzdHJpbmc7CiAgICB1aW50
ICpyeGRhdGE7CiAgICBpbnQgZXJyb3I7CiAgICBib29sIGNzOwogICAgYm9vbCB3YzsKfTsKIyA0
NSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc3RyaW5nbGlzdC5oIiAyCgoKCgpjbGFzcyBRU3RyTGlz
dDsKCmNsYXNzIFFTdHJpbmdMaXN0IDogcHVibGljIFFWYWx1ZUxpc3Q8UVN0cmluZz4KewpwdWJs
aWM6CiAgICBRU3RyaW5nTGlzdCgpIHsgfQogICAgUVN0cmluZ0xpc3QoIGNvbnN0IFFTdHJpbmdM
aXN0JiBsICkgOiBRVmFsdWVMaXN0PFFTdHJpbmc+KGwpIHsgfQogICAgUVN0cmluZ0xpc3QoIGNv
bnN0IFFWYWx1ZUxpc3Q8UVN0cmluZz4mIGwgKSA6IFFWYWx1ZUxpc3Q8UVN0cmluZz4obCkgeyB9
CiAgICBRU3RyaW5nTGlzdCggY29uc3QgUVN0cmluZyYgaSApIHsgYXBwZW5kKGkpOyB9CgogICAg
UVN0cmluZ0xpc3QoIGNvbnN0IGNoYXIqIGkgKSB7IGFwcGVuZChpKTsgfQoKCiAgICBzdGF0aWMg
UVN0cmluZ0xpc3QgZnJvbVN0ckxpc3QoY29uc3QgUVN0ckxpc3QmKTsKCiAgICB2b2lkIHNvcnQo
KTsKCiAgICBzdGF0aWMgUVN0cmluZ0xpc3Qgc3BsaXQoIGNvbnN0IFFTdHJpbmcgJnNlcCwgY29u
c3QgUVN0cmluZyAmc3RyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gRkFMU0UgKTsKICAgIHN0
YXRpYyBRU3RyaW5nTGlzdCBzcGxpdCggY29uc3QgUUNoYXIgJnNlcCwgY29uc3QgUVN0cmluZyAm
c3RyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gRkFMU0UgKTsKICAgIHN0YXRpYyBRU3RyaW5n
TGlzdCBzcGxpdCggY29uc3QgUVJlZ0V4cCAmc2VwLCBjb25zdCBRU3RyaW5nICZzdHIsIGJvb2wg
YWxsb3dFbXB0eUVudHJpZXMgPSBGQUxTRSApOwogICAgUVN0cmluZyBqb2luKCBjb25zdCBRU3Ry
aW5nICZzZXAgKSBjb25zdDsKCiAgICBRU3RyaW5nTGlzdCBncmVwKCBjb25zdCBRU3RyaW5nICZz
dHIsIGJvb2wgY3MgPSBUUlVFICkgY29uc3Q7CiAgICBRU3RyaW5nTGlzdCBncmVwKCBjb25zdCBR
UmVnRXhwICZleHByICkgY29uc3Q7Cn07CgoKY2xhc3MgUURhdGFTdHJlYW07CmV4dGVybiBRRGF0
YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVN0cmluZ0xpc3QmICk7CmV4dGVy
biBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVN0cmluZ0xp
c3QmICk7CiMgNDggImtlcm5lbC9xb2JqZWN0LmgiIDIKCgoKCgpjbGFzcyBRTWV0YU9iamVjdDsK
Y2xhc3MgUVZhcmlhbnQ7CgoKCmNsYXNzIFFPYmplY3Q6IHB1YmxpYyBRdAp7CgoKcHVibGljOgog
ICAgUU9iamVjdCggUU9iamVjdCAqcGFyZW50PTAsIGNvbnN0IGNoYXIgKm5hbWU9MCApOwogICAg
dmlydHVhbCB+UU9iamVjdCgpOwoKICAgIHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICog
KTsKICAgIHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwoK
ICAgIHZpcnR1YWwgYm9vbCBldmVudCggUUV2ZW50ICogKTsKICAgIHZpcnR1YWwgYm9vbCBldmVu
dEZpbHRlciggUU9iamVjdCAqLCBRRXZlbnQgKiApOwoKICAgIHZpcnR1YWwgUU1ldGFPYmplY3Qg
Km1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0KICAgIHZp
cnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7CgogICAgYm9vbCBpc0EoIGNvbnN0
IGNoYXIgKiApIGNvbnN0OwogICAgYm9vbCBpbmhlcml0cyggY29uc3QgY2hhciAqICkgY29uc3Q7
CgogICAgY29uc3QgY2hhciAqbmFtZSgpIGNvbnN0OwogICAgY29uc3QgY2hhciAqbmFtZSggY29u
c3QgY2hhciAqIGRlZmF1bHROYW1lICkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldE5hbWUo
IGNvbnN0IGNoYXIgKm5hbWUgKTsKICAgIGJvb2wgaXNXaWRnZXRUeXBlKCkgY29uc3QgeyByZXR1
cm4gaXNXaWRnZXQ7IH0KICAgIGJvb2wgaGlnaFByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gRkFM
U0U7IH0KCiAgICBib29sIHNpZ25hbHNCbG9ja2VkKCkgY29uc3QgeyByZXR1cm4gYmxvY2tTaWc7
IH0KICAgIHZvaWQgYmxvY2tTaWduYWxzKCBib29sIGIgKTsKCiAgICBpbnQgc3RhcnRUaW1lcigg
aW50IGludGVydmFsICk7CiAgICB2b2lkIGtpbGxUaW1lciggaW50IGlkICk7CiAgICB2b2lkIGtp
bGxUaW1lcnMoKTsKCiAgICBRT2JqZWN0ICpjaGlsZCggY29uc3QgY2hhciAqbmFtZSwgY29uc3Qg
Y2hhciAqdHlwZSA9IDAgKTsKICAgIGNvbnN0IFFPYmplY3RMaXN0ICpjaGlsZHJlbigpIGNvbnN0
IHsgcmV0dXJuIGNoaWxkT2JqZWN0czsgfQoKICAgIHN0YXRpYyBjb25zdCBRT2JqZWN0TGlzdCAq
b2JqZWN0VHJlZXMoKTsKCgogICAgUU9iamVjdExpc3QgKnF1ZXJ5TGlzdCggY29uc3QgY2hhciAq
aW5oZXJpdHNDbGFzcyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpvYmpOYW1lID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgcmVnZXhwTWF0Y2ggPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCByZWN1cnNpdmVTZWFyY2ggPSBUUlVFICk7CgogICAgdmlydHVhbCB2b2lkIGluc2VydENo
aWxkKCBRT2JqZWN0ICogKTsKICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZCggUU9iamVjdCAq
ICk7CgogICAgdm9pZCBpbnN0YWxsRXZlbnRGaWx0ZXIoIGNvbnN0IFFPYmplY3QgKiApOwogICAg
dm9pZCByZW1vdmVFdmVudEZpbHRlciggY29uc3QgUU9iamVjdCAqICk7CgogICAgc3RhdGljIGJv
b2wgY29ubmVjdCggY29uc3QgUU9iamVjdCAqc2VuZGVyLCBjb25zdCBjaGFyICpzaWduYWwsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNo
YXIgKm1lbWJlciApOwogICAgYm9vbCBjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpzZW5kZXIsIGNv
bnN0IGNoYXIgKnNpZ25hbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpt
ZW1iZXIgKSBjb25zdDsKICAgIHN0YXRpYyBib29sIGRpc2Nvbm5lY3QoIGNvbnN0IFFPYmplY3Qg
KnNlbmRlciwgY29uc3QgY2hhciAqc2lnbmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyICptZW1iZXIgKTsKICAgIGJvb2wg
ZGlzY29ubmVjdCggY29uc3QgY2hhciAqc2lnbmFsPTAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXI9MCwgY29uc3QgY2hhciAqbWVtYmVyPTAgKTsK
ICAgIGJvb2wgZGlzY29ubmVjdCggY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIg
Km1lbWJlcj0wICk7CgogICAgdm9pZCBkdW1wT2JqZWN0VHJlZSgpOwogICAgdm9pZCBkdW1wT2Jq
ZWN0SW5mbygpOwoKCiAgICBib29sIHNldFByb3BlcnR5KCBjb25zdCBjaGFyICpuYW1lLCBjb25z
dCBRVmFyaWFudCYgdmFsdWUgKTsKICAgIFFWYXJpYW50IHByb3BlcnR5KCBjb25zdCBjaGFyICpu
YW1lICkgY29uc3Q7CgoKcHJvdGVjdGVkOgogICAgdm9pZCBkZXN0cm95ZWQoKTsKCnB1YmxpYzoK
ICAgIFFPYmplY3QgKnBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIHBhcmVudE9iajsgfQoKcHJpdmF0
ZSA6CiAgICB2b2lkIGNsZWFudXBFdmVudEZpbHRlcigpOwoKcHJvdGVjdGVkOgogICAgYm9vbCBh
Y3RpdmF0ZV9maWx0ZXJzKCBRRXZlbnQgKiApOwogICAgUUNvbm5lY3Rpb25MaXN0ICpyZWNlaXZl
cnMoIGNvbnN0IGNoYXIgKnNpZ25hbCApIGNvbnN0OwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWwo
IGNvbnN0IGNoYXIgKnNpZ25hbCApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWwoIGNvbnN0IGNo
YXIgKnNpZ25hbCwgc2hvcnQgKTsKICAgIHZvaWQgYWN0aXZhdGVfc2lnbmFsKCBjb25zdCBjaGFy
ICpzaWduYWwsIGludCApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWwoIGNvbnN0IGNoYXIgKnNp
Z25hbCwgbG9uZyApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWwoIGNvbnN0IGNoYXIgKnNpZ25h
bCwgY29uc3QgY2hhciAqICk7CiAgICB2b2lkIGFjdGl2YXRlX3NpZ25hbF9ib29sKCBjb25zdCBj
aGFyICpzaWduYWwsIGJvb2wgKTsKICAgIHZvaWQgYWN0aXZhdGVfc2lnbmFsX3N0cmluZyggY29u
c3QgY2hhciAqc2lnbmFsLCBRU3RyaW5nICk7CiAgICB2b2lkIGFjdGl2YXRlX3NpZ25hbF9zdHJy
ZWYoIGNvbnN0IGNoYXIgKnNpZ25hbCwgY29uc3QgUVN0cmluZyAmICk7CgogICAgY29uc3QgUU9i
amVjdCAqc2VuZGVyKCk7CgoKICAgIHZpcnR1YWwgdm9pZCBpbml0TWV0YU9iamVjdCgpOwogICAg
c3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7CgogICAgdmlydHVhbCB2b2lk
IHRpbWVyRXZlbnQoIFFUaW1lckV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBjaGlsZEV2ZW50
KCBRQ2hpbGRFdmVudCAqICk7CgogICAgdmlydHVhbCB2b2lkIGNvbm5lY3ROb3RpZnkoIGNvbnN0
IGNoYXIgKnNpZ25hbCApOwogICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3ROb3RpZnkoIGNvbnN0
IGNoYXIgKnNpZ25hbCApOwogICAgdmlydHVhbCBib29sIGNoZWNrQ29ubmVjdEFyZ3MoIGNvbnN0
IGNoYXIgKnNpZ25hbCwgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWVtYmVyICk7CiAgICBzdGF0aWMgUUNTdHJp
bmcgbm9ybWFsaXplU2lnbmFsU2xvdCggY29uc3QgY2hhciAqc2lnbmFsU2xvdCApOwoKICAgIHN0
YXRpYyB2b2lkIGJhZFN1cGVyY2xhc3NXYXJuaW5nKCBjb25zdCBjaGFyICpjbGFzc05hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN1cGVyY2xh
c3NOYW1lICk7Cgpwcml2YXRlOgogICAgdWludCBpc1NpZ25hbCA6IDE7CiAgICB1aW50IGlzV2lk
Z2V0IDogMTsKICAgIHVpbnQgcGVuZFRpbWVyIDogMTsKICAgIHVpbnQgcGVuZEV2ZW50IDogMTsK
ICAgIHVpbnQgYmxvY2tTaWcgOiAxOwogICAgdWludCB3YXNEZWxldGVkIDogMTsKICAgIHVpbnQg
aXNUcmVlIDogMTsKCiAgICBRTWV0YU9iamVjdCAqcXVlcnlNZXRhT2JqZWN0KCkgY29uc3Q7CiAg
ICBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgICBjb25zdCBjaGFyICpvYmpuYW1lOwog
ICAgUU9iamVjdCAqcGFyZW50T2JqOwogICAgUU9iamVjdExpc3QgKmNoaWxkT2JqZWN0czsKICAg
IFFTaWduYWxEaWN0ICpjb25uZWN0aW9uczsKICAgIFFPYmplY3RMaXN0ICpzZW5kZXJPYmplY3Rz
OwogICAgUU9iamVjdExpc3QgKmV2ZW50RmlsdGVyczsKCgogICAgUU9iamVjdCAqc2lnU2VuZGVy
OwoKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xhc3MgUUJhc2VB
cHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRV2lkZ2V0OwogICAgZnJpZW5kIGNsYXNzIFFT
aWduYWw7CiAgICBmcmllbmQgY2xhc3MgUVNlbmRlck9iamVjdDsKCnByaXZhdGU6CgogICAgUU9i
amVjdCggY29uc3QgUU9iamVjdCAmICk7CiAgICBRT2JqZWN0ICZvcGVyYXRvcj0oIGNvbnN0IFFP
YmplY3QgJiApOwoKCnB1YmxpYzoKCgogICAgUVN0cmluZ0xpc3Qgc3VwZXJDbGFzc2VzKCBib29s
IGluY2x1ZGVUaGlzID0gRkFMU0UgKSBjb25zdDsKCn07CgoKCmlubGluZSBib29sIFFPYmplY3Q6
OmNvbm5lY3QoIGNvbnN0IFFPYmplY3QgKnNlbmRlciwgY29uc3QgY2hhciAqc2lnbmFsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZW1iZXIgKSBjb25zdAp7CiAg
ICByZXR1cm4gY29ubmVjdCggc2VuZGVyLCBzaWduYWwsIHRoaXMsIG1lbWJlciApOwp9Cgppbmxp
bmUgYm9vbCBRT2JqZWN0OjpkaXNjb25uZWN0KCBjb25zdCBjaGFyICpzaWduYWwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBj
aGFyICptZW1iZXIgKQp7CiAgICByZXR1cm4gZGlzY29ubmVjdCggdGhpcywgc2lnbmFsLCByZWNl
aXZlciwgbWVtYmVyICk7Cn0KCmlubGluZSBib29sIFFPYmplY3Q6OmRpc2Nvbm5lY3QoIGNvbnN0
IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyICptZW1iZXIgKQp7CiAgICByZXR1cm4gZGlz
Y29ubmVjdCggdGhpcywgMCwgcmVjZWl2ZXIsIG1lbWJlciApOwp9CgppbmxpbmUgY29uc3QgUU9i
amVjdCAqUU9iamVjdDo6c2VuZGVyKCkKewogICAgcmV0dXJuIHNpZ1NlbmRlcjsKfQoKCmNsYXNz
IFFTZW5kZXJPYmplY3QgOiBwdWJsaWMgUU9iamVjdAp7CnB1YmxpYzoKICAgIHZvaWQgc2V0U2Vu
ZGVyKCBRT2JqZWN0ICpzICkgeyBzaWdTZW5kZXI9czsgfQp9OwojIDQzICJrZXJuZWwvcWFic3Ry
YWN0bGF5b3V0LmgiIDIKIyAxICJrZXJuZWwvcXNpemVwb2xpY3kuaCIgMQojIDQyICJrZXJuZWwv
cXNpemVwb2xpY3kuaCIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FnbG9iYWwuaCIgMQojIDQz
ICJrZXJuZWwvcXNpemVwb2xpY3kuaCIgMgoKCmNsYXNzIFFTaXplUG9saWN5CnsKcHJpdmF0ZToK
ICAgIGVudW0geyBIU2l6ZSA9IDYsIEhNYXNrID0gMHgzZiwgVk1hc2sgPSBITWFzayA8PCBIU2l6
ZSwKICAgICAgICAgICBNYXlHcm93ID0gMSwgRXhwTWFzayA9IDIsIE1heVNocmluayA9IDQgfTsK
cHVibGljOgogICAgZW51bSBTaXplVHlwZSB7IEZpeGVkID0gMCwKICAgICAgICAgICAgICAgICAg
ICBNaW5pbXVtID0gTWF5R3JvdywKICAgICAgICAgICAgICAgICAgICBNYXhpbXVtID0gTWF5U2hy
aW5rLAogICAgICAgICAgICAgICAgICAgIFByZWZlcnJlZCA9IE1heUdyb3d8TWF5U2hyaW5rICwK
ICAgICAgICAgICAgICAgICAgICBNaW5pbXVtRXhwYW5kaW5nID0gTWluaW11bXxFeHBNYXNrLAog
ICAgICAgICAgICAgICAgICAgIEV4cGFuZGluZyA9IE1pbmltdW1FeHBhbmRpbmd8TWF5U2hyaW5r
IH07CgogICAgZW51bSBFeHBhbmREYXRhIHsgTm9EaXJlY3Rpb24gPSAwLAogICAgICAgICAgICAg
ICAgICAgICAgSG9yaXpvbnRhbCA9IDEsCiAgICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbCA9
IDIsCiAgICAgICAgICAgICAgICAgICAgICBCb3RoRGlyZWN0aW9ucyA9IEhvcml6b250YWwgfCBW
ZXJ0aWNhbCB9OwoKICAgIFFTaXplUG9saWN5KCkgeyBkYXRhID0gMDsgfQoKICAgIFFTaXplUG9s
aWN5KCBTaXplVHlwZSBob3IsIFNpemVUeXBlIHZlciwgYm9vbCBoZncgPSBGQUxTRSApOwoKICAg
IFNpemVUeXBlIGhvckRhdGEoKSBjb25zdCB7IHJldHVybiAoU2l6ZVR5cGUpKCBkYXRhICYgSE1h
c2sgKTsgfQogICAgU2l6ZVR5cGUgdmVyRGF0YSgpIGNvbnN0IHsgcmV0dXJuIChTaXplVHlwZSko
KCBkYXRhICYgVk1hc2sgKSA+PiBIU2l6ZSk7IH0KCiAgICBib29sIG1heVNocmlua0hvcml6b250
YWxseSgpIGNvbnN0IHsgcmV0dXJuIGhvckRhdGEoKSAmIE1heVNocmluazsgfQogICAgYm9vbCBt
YXlTaHJpbmtWZXJ0aWNhbGx5KCkgY29uc3QgeyByZXR1cm4gdmVyRGF0YSgpICYgTWF5U2hyaW5r
OyB9CiAgICBib29sIG1heUdyb3dIb3Jpem9udGFsbHkoKSBjb25zdCB7IHJldHVybiBob3JEYXRh
KCkgJiBNYXlHcm93OyB9CiAgICBib29sIG1heUdyb3dWZXJ0aWNhbGx5KCkgY29uc3QgeyByZXR1
cm4gdmVyRGF0YSgpICYgTWF5R3JvdzsgfQoKICAgIEV4cGFuZERhdGEgZXhwYW5kaW5nKCkgY29u
c3QKICAgIHsKICAgICAgICByZXR1cm4gKEV4cGFuZERhdGEpKCAoaW50KSh2ZXJEYXRhKCkmRXhw
TWFzayA/IFZlcnRpY2FsIDogMCkrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCko
aG9yRGF0YSgpJkV4cE1hc2sgPyBIb3Jpem9udGFsIDogMCkgKTsKICAgIH0KCiAgICB2b2lkIHNl
dEhvckRhdGEoIFNpemVUeXBlIGQgKSB7IGRhdGEgPSAoZGF0YSAmIH5ITWFzaykgfCBkOyB9CiAg
ICB2b2lkIHNldFZlckRhdGEoIFNpemVUeXBlIGQgKSB7IGRhdGEgPSAoZGF0YSAmIH4oSE1hc2s8
PEhTaXplKSkgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGQ8
PEhTaXplKTsgfQoKICAgIHZvaWQgc2V0SGVpZ2h0Rm9yV2lkdGgoIGJvb2wgYiApIHsgZGF0YSA9
IGIgPyAoIGRhdGEgfCAoIDEgPDwgMipIU2l6ZSApICkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogKCBkYXRhICYgfiggMSA8PCAyKkhTaXplICkgKTsgfQog
ICAgYm9vbCBoYXNIZWlnaHRGb3JXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEgJiAoIDEgPDwg
MipIU2l6ZSApOyB9CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRU2l6ZVBvbGljeSYgcyAp
IGNvbnN0IHsgcmV0dXJuIGRhdGEgPT0gcy5kYXRhOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNv
bnN0IFFTaXplUG9saWN5JiBzICkgY29uc3QgeyByZXR1cm4gZGF0YSAhPSBzLmRhdGE7IH0KCnBy
aXZhdGU6CiAgICBRU2l6ZVBvbGljeSggaW50IGkgKTogZGF0YSggaSApIHt9CgogICAgUV9VSU5U
MTYgZGF0YTsKfTsKCgppbmxpbmUgUVNpemVQb2xpY3k6OlFTaXplUG9saWN5KCBTaXplVHlwZSBo
b3IsIFNpemVUeXBlIHZlciwgYm9vbCBoZncgKQogICAgICAgIDogZGF0YSggaG9yIHwgKHZlcjw8
SFNpemUpIHwgKGhmdyA/ICgxPDwyKkhTaXplKSA6IDApICkge30KIyA0NCAia2VybmVsL3FhYnN0
cmFjdGxheW91dC5oIiAyCiMgMSAia2VybmVsL3F3aWRnZXQuaCIgMQojIDQyICJrZXJuZWwvcXdp
ZGdldC5oIgojIDEgImtlcm5lbC9xd2luZG93ZGVmcy5oIiAxCiMgNDMgImtlcm5lbC9xd2lkZ2V0
LmgiIDIKIyAxICJrZXJuZWwvcW9iamVjdC5oIiAxCiMgNDQgImtlcm5lbC9xd2lkZ2V0LmgiIDIK
IyAxICJrZXJuZWwvcXBhaW50ZGV2aWNlLmgiIDEKIyA0MiAia2VybmVsL3FwYWludGRldmljZS5o
IgojIDEgImtlcm5lbC9xd2luZG93ZGVmcy5oIiAxCiMgNDMgImtlcm5lbC9xcGFpbnRkZXZpY2Uu
aCIgMgojIDEgImtlcm5lbC9xcmVjdC5oIiAxCiMgNDQgImtlcm5lbC9xcGFpbnRkZXZpY2UuaCIg
MgoKCgoKCgoKY2xhc3MgUUlPRGV2aWNlOwpjbGFzcyBRU3RyaW5nOwoKCgpzdHJ1Y3QgUVBhaW50
RGV2aWNlWDExRGF0YTsKCgp1bmlvbiBRUERldkNtZFBhcmFtIHsKICAgIGludCBpdmFsOwogICAg
aW50ICppdmVjOwogICAgUVN0cmluZyAqc3RyOwogICAgY29uc3QgUVBvaW50ICpwb2ludDsKICAg
IGNvbnN0IFFSZWN0ICpyZWN0OwogICAgY29uc3QgUVBvaW50QXJyYXkgKnB0YXJyOwogICAgY29u
c3QgUVBpeG1hcCAqcGl4bWFwOwogICAgY29uc3QgUUltYWdlICppbWFnZTsKICAgIGNvbnN0IFFD
b2xvciAqY29sb3I7CiAgICBjb25zdCBRRm9udCAqZm9udDsKICAgIGNvbnN0IFFQZW4gKnBlbjsK
ICAgIGNvbnN0IFFCcnVzaCAqYnJ1c2g7CiAgICBjb25zdCBRUmVnaW9uICpyZ247CiAgICBjb25z
dCBRV01hdHJpeCAqbWF0cml4OwogICAgUUlPRGV2aWNlICpkZXZpY2U7Cn07CgoKCmNsYXNzIFFQ
YWludERldmljZQp7CnB1YmxpYzoKICAgIHZpcnR1YWwgflFQYWludERldmljZSgpOwoKICAgIGlu
dCBkZXZUeXBlKCkgY29uc3Q7CiAgICBib29sIGlzRXh0RGV2KCkgY29uc3Q7CiAgICBib29sIHBh
aW50aW5nQWN0aXZlKCkgY29uc3Q7CgoKCgoKCiAgICBIQU5ETEUgaGFuZGxlKCkgY29uc3Q7CgoK
CgoKCgogICAgRGlzcGxheSAqeDExRGlzcGxheSgpIGNvbnN0OwogICAgaW50IHgxMVNjcmVlbigp
IGNvbnN0OwogICAgaW50IHgxMURlcHRoKCkgY29uc3Q7CiAgICBpbnQgeDExQ2VsbHMoKSBjb25z
dDsKICAgIEhBTkRMRSB4MTFDb2xvcm1hcCgpIGNvbnN0OwogICAgYm9vbCB4MTFEZWZhdWx0Q29s
b3JtYXAoKSBjb25zdDsKICAgIHZvaWQgKngxMVZpc3VhbCgpIGNvbnN0OwogICAgYm9vbCB4MTFE
ZWZhdWx0VmlzdWFsKCkgY29uc3Q7CgogICAgc3RhdGljIERpc3BsYXkgKngxMUFwcERpc3BsYXko
KTsKICAgIHN0YXRpYyBpbnQgeDExQXBwU2NyZWVuKCk7CiAgICBzdGF0aWMgaW50IHgxMUFwcERl
cHRoKCk7CiAgICBzdGF0aWMgaW50IHgxMUFwcENlbGxzKCk7CiAgICBzdGF0aWMgaW50IHgxMUFw
cERwaVgoKTsKICAgIHN0YXRpYyBpbnQgeDExQXBwRHBpWSgpOwogICAgc3RhdGljIEhBTkRMRSB4
MTFBcHBDb2xvcm1hcCgpOwogICAgc3RhdGljIGJvb2wgeDExQXBwRGVmYXVsdENvbG9ybWFwKCk7
CiAgICBzdGF0aWMgdm9pZCAqeDExQXBwVmlzdWFsKCk7CiAgICBzdGF0aWMgYm9vbCB4MTFBcHBE
ZWZhdWx0VmlzdWFsKCk7CiAgICBzdGF0aWMgdm9pZCB4MTFTZXRBcHBEcGlYKGludCk7CiAgICBz
dGF0aWMgdm9pZCB4MTFTZXRBcHBEcGlZKGludCk7CiMgMTMxICJrZXJuZWwvcXBhaW50ZGV2aWNl
LmgiCiAgICBlbnVtIFBEZXZDbWQgewogICAgICAgIFBkY05PUCA9IDAsCiAgICAgICAgUGRjRHJh
d1BvaW50ID0gMSwKICAgICAgICBQZGNEcmF3Rmlyc3QgPSBQZGNEcmF3UG9pbnQsCiAgICAgICAg
UGRjTW92ZVRvID0gMiwKICAgICAgICBQZGNMaW5lVG8gPSAzLAogICAgICAgIFBkY0RyYXdMaW5l
ID0gNCwKICAgICAgICBQZGNEcmF3UmVjdCA9IDUsCiAgICAgICAgUGRjRHJhd1JvdW5kUmVjdCA9
IDYsCiAgICAgICAgUGRjRHJhd0VsbGlwc2UgPSA3LAogICAgICAgIFBkY0RyYXdBcmMgPSA4LAog
ICAgICAgIFBkY0RyYXdQaWUgPSA5LAogICAgICAgIFBkY0RyYXdDaG9yZCA9IDEwLAogICAgICAg
IFBkY0RyYXdMaW5lU2VnbWVudHMgPSAxMSwKICAgICAgICBQZGNEcmF3UG9seWxpbmUgPSAxMiwK
ICAgICAgICBQZGNEcmF3UG9seWdvbiA9IDEzLAogICAgICAgIFBkY0RyYXdRdWFkQmV6aWVyID0g
MTQsCiAgICAgICAgUGRjRHJhd1RleHQgPSAxNSwKICAgICAgICBQZGNEcmF3VGV4dEZvcm1hdHRl
ZCA9IDE2LAogICAgICAgIFBkY0RyYXdQaXhtYXAgPSAxNywKICAgICAgICBQZGNEcmF3SW1hZ2Ug
PSAxOCwKICAgICAgICBQZGNEcmF3VGV4dDIgPSAxOSwKICAgICAgICBQZGNEcmF3VGV4dDJGb3Jt
YXR0ZWQgPSAyMCwKICAgICAgICBQZGNEcmF3TGFzdCA9IFBkY0RyYXdUZXh0MkZvcm1hdHRlZCwK
CgoKICAgICAgICBQZGNCZWdpbiA9IDMwLAogICAgICAgIFBkY0VuZCA9IDMxLAogICAgICAgIFBk
Y1NhdmUgPSAzMiwKICAgICAgICBQZGNSZXN0b3JlID0gMzMsCiAgICAgICAgUGRjU2V0ZGV2ID0g
MzQsCiAgICAgICAgUGRjU2V0QmtDb2xvciA9IDQwLAogICAgICAgIFBkY1NldEJrTW9kZSA9IDQx
LAogICAgICAgIFBkY1NldFJPUCA9IDQyLAogICAgICAgIFBkY1NldEJydXNoT3JpZ2luID0gNDMs
CiAgICAgICAgUGRjU2V0Rm9udCA9IDQ1LAogICAgICAgIFBkY1NldFBlbiA9IDQ2LAogICAgICAg
IFBkY1NldEJydXNoID0gNDcsCiAgICAgICAgUGRjU2V0VGFiU3RvcHMgPSA0OCwKICAgICAgICBQ
ZGNTZXRUYWJBcnJheSA9IDQ5LAogICAgICAgIFBkY1NldFVuaXQgPSA1MCwKICAgICAgICBQZGNT
ZXRWWGZvcm0gPSA1MSwKICAgICAgICBQZGNTZXRXaW5kb3cgPSA1MiwKICAgICAgICBQZGNTZXRW
aWV3cG9ydCA9IDUzLAogICAgICAgIFBkY1NldFdYZm9ybSA9IDU0LAogICAgICAgIFBkY1NldFdN
YXRyaXggPSA1NSwKICAgICAgICBQZGNTYXZlV01hdHJpeCA9IDU2LAogICAgICAgIFBkY1Jlc3Rv
cmVXTWF0cml4ID0gNTcsCiAgICAgICAgUGRjU2V0Q2xpcCA9IDYwLAogICAgICAgIFBkY1NldENs
aXBSZWdpb24gPSA2MSwKCiAgICAgICAgUGRjUmVzZXJ2ZWRTdGFydCA9IDAsCiAgICAgICAgUGRj
UmVzZXJ2ZWRTdG9wID0gMTk5CiAgICB9OwoKcHJvdGVjdGVkOgogICAgUVBhaW50RGV2aWNlKCB1
aW50IGRldmZsYWdzICk7CgoKCgogICAgSEFORExFIGhkOwogICAgdm9pZCBjb3B5WDExRGF0YSgg
Y29uc3QgUVBhaW50RGV2aWNlICogKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRYMTFEYXRhKCBjb25z
dCBRUGFpbnREZXZpY2VYMTFEYXRhKiApOwogICAgUVBhaW50RGV2aWNlWDExRGF0YSogZ2V0WDEx
RGF0YSggYm9vbCBkZWY9RkFMU0UgKSBjb25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgY21k
KCBpbnQsIFFQYWludGVyICosIFFQRGV2Q21kUGFyYW0gKiApOwogICAgdmlydHVhbCBpbnQgbWV0
cmljKCBpbnQgKSBjb25zdDsKICAgIHZpcnR1YWwgaW50IGZvbnRNZXQoIFFGb250ICosIGludCwg
Y29uc3QgY2hhciAqID0gMCwgaW50ID0gMCApIGNvbnN0OwogICAgdmlydHVhbCBpbnQgZm9udElu
ZiggUUZvbnQgKiwgaW50ICkgY29uc3Q7CgogICAgdXNob3J0IGRldkZsYWdzOwogICAgdXNob3J0
IHBhaW50ZXJzOwoKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKICAgIGZyaWVuZCBjbGFzcyBR
UGFpbnREZXZpY2VNZXRyaWNzOwogICAgZnJpZW5kIHZvaWQgYml0Qmx0KCBRUGFpbnREZXZpY2Ug
KiwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFQYWlu
dERldmljZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCwgaW50
LCBpbnQsIFF0OjpSYXN0ZXJPcCwgYm9vbCApOwoKICAgIGZyaWVuZCB2b2lkIHF0X2luaXRfaW50
ZXJuYWwoIGludCAqLCBjaGFyICoqLCBEaXNwbGF5ICogKTsKCgpwcml2YXRlOgoKICAgIHN0YXRp
YyBEaXNwbGF5ICp4X2FwcGRpc3BsYXk7CiAgICBzdGF0aWMgaW50IHhfYXBwc2NyZWVuOwogICAg
c3RhdGljIGludCB4X2FwcGRlcHRoOwogICAgc3RhdGljIGludCB4X2FwcGNlbGxzOwogICAgc3Rh
dGljIEhBTkRMRSB4X2FwcGNvbG9ybWFwOwogICAgc3RhdGljIGJvb2wgeF9hcHBkZWZjb2xvcm1h
cDsKICAgIHN0YXRpYyB2b2lkICp4X2FwcHZpc3VhbDsKICAgIHN0YXRpYyBib29sIHhfYXBwZGVm
dmlzdWFsOwoKICAgIFFQYWludERldmljZVgxMURhdGEqIHgxMURhdGE7CgoKcHJpdmF0ZToKCiAg
ICBRUGFpbnREZXZpY2UoIGNvbnN0IFFQYWludERldmljZSAmICk7CiAgICBRUGFpbnREZXZpY2Ug
Jm9wZXJhdG9yPSggY29uc3QgUVBhaW50RGV2aWNlICYgKTsKCn07CgoKCnZvaWQgYml0Qmx0KCBR
UGFpbnREZXZpY2UgKmRzdCwgaW50IGR4LCBpbnQgZHksCiAgICAgICAgICAgICBjb25zdCBRUGFp
bnREZXZpY2UgKnNyYywgaW50IHN4PTAsIGludCBzeT0wLCBpbnQgc3c9LTEsIGludCBzaD0tMSwK
ICAgICAgICAgICAgIFF0OjpSYXN0ZXJPcCA9IFF0OjpDb3B5Uk9QLCBib29sIGlnbm9yZU1hc2s9
RkFMU0UgKTsKCgp2b2lkIGJpdEJsdCggUVBhaW50RGV2aWNlICpkc3QsIGludCBkeCwgaW50IGR5
LAogICAgICAgICAgICAgY29uc3QgUUltYWdlICpzcmMsIGludCBzeD0wLCBpbnQgc3k9MCwgaW50
IHN3PS0xLCBpbnQgc2g9LTEsCiAgICAgICAgICAgICBpbnQgY29udmVyc2lvbl9mbGFncz0wICk7
CgoKCgpzdHJ1Y3QgUVBhaW50RGV2aWNlWDExRGF0YSB7CiAgICBEaXNwbGF5KiB4X2Rpc3BsYXk7
CiAgICBpbnQgeF9zY3JlZW47CiAgICBpbnQgeF9kZXB0aDsKICAgIGludCB4X2NlbGxzOwogICAg
SEFORExFIHhfY29sb3JtYXA7CiAgICBib29sIHhfZGVmY29sb3JtYXA7CiAgICB2b2lkKiB4X3Zp
c3VhbDsKICAgIGJvb2wgeF9kZWZ2aXN1YWw7Cn07CgoKCgoKCgppbmxpbmUgaW50IFFQYWludERl
dmljZTo6ZGV2VHlwZSgpIGNvbnN0CnsgcmV0dXJuIGRldkZsYWdzICYgUUludGVybmFsOjpEZXZp
Y2VUeXBlTWFzazsgfQoKaW5saW5lIGJvb2wgUVBhaW50RGV2aWNlOjppc0V4dERldigpIGNvbnN0
CnsgcmV0dXJuIChkZXZGbGFncyAmIFFJbnRlcm5hbDo6RXh0ZXJuYWxEZXZpY2UpICE9IDA7IH0K
CmlubGluZSBib29sIFFQYWludERldmljZTo6cGFpbnRpbmdBY3RpdmUoKSBjb25zdAp7IHJldHVy
biBwYWludGVycyAhPSAwOyB9CgoKCgppbmxpbmUgSEFORExFIFFQYWludERldmljZTo6aGFuZGxl
KCkgY29uc3QgeyByZXR1cm4gaGQ7IH0KCgoKaW5saW5lIERpc3BsYXkgKlFQYWludERldmljZTo6
eDExRGlzcGxheSgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2Rpc3BsYXkg
OiB4X2FwcGRpc3BsYXk7IH0KCmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjp4MTFTY3JlZW4oKSBj
b25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF9zY3JlZW4gOiB4X2FwcHNjcmVlbjsg
fQoKaW5saW5lIGludCBRUGFpbnREZXZpY2U6OngxMURlcHRoKCkgY29uc3QKeyByZXR1cm4geDEx
RGF0YSA/IHgxMURhdGEtPnhfZGVwdGggOiB4X2FwcGRlcHRoOyB9CgppbmxpbmUgaW50IFFQYWlu
dERldmljZTo6eDExQ2VsbHMoKSBjb25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF9j
ZWxscyA6IHhfYXBwY2VsbHM7IH0KCmlubGluZSBIQU5ETEUgUVBhaW50RGV2aWNlOjp4MTFDb2xv
cm1hcCgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2NvbG9ybWFwIDogeF9h
cHBjb2xvcm1hcDsgfQoKaW5saW5lIGJvb2wgUVBhaW50RGV2aWNlOjp4MTFEZWZhdWx0Q29sb3Jt
YXAoKSBjb25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF9kZWZjb2xvcm1hcCA6IHhf
YXBwZGVmY29sb3JtYXA7IH0KCmlubGluZSB2b2lkICpRUGFpbnREZXZpY2U6OngxMVZpc3VhbCgp
IGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X3Zpc3VhbCA6IHhfYXBwdmlzdWFs
OyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6OngxMURlZmF1bHRWaXN1YWwoKSBjb25zdAp7
IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF9kZWZ2aXN1YWwgOiB4X2FwcGRlZnZpc3VhbDsg
fQoKaW5saW5lIERpc3BsYXkgKlFQYWludERldmljZTo6eDExQXBwRGlzcGxheSgpCnsgcmV0dXJu
IHhfYXBwZGlzcGxheTsgfQoKaW5saW5lIGludCBRUGFpbnREZXZpY2U6OngxMUFwcFNjcmVlbigp
CnsgcmV0dXJuIHhfYXBwc2NyZWVuOyB9CgppbmxpbmUgaW50IFFQYWludERldmljZTo6eDExQXBw
RGVwdGgoKQp7IHJldHVybiB4X2FwcGRlcHRoOyB9CgppbmxpbmUgaW50IFFQYWludERldmljZTo6
eDExQXBwQ2VsbHMoKQp7IHJldHVybiB4X2FwcGNlbGxzOyB9CgppbmxpbmUgSEFORExFIFFQYWlu
dERldmljZTo6eDExQXBwQ29sb3JtYXAoKQp7IHJldHVybiB4X2FwcGNvbG9ybWFwOyB9Cgppbmxp
bmUgYm9vbCBRUGFpbnREZXZpY2U6OngxMUFwcERlZmF1bHRDb2xvcm1hcCgpCnsgcmV0dXJuIHhf
YXBwZGVmY29sb3JtYXA7IH0KCmlubGluZSB2b2lkICpRUGFpbnREZXZpY2U6OngxMUFwcFZpc3Vh
bCgpCnsgcmV0dXJuIHhfYXBwdmlzdWFsOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6Ongx
MUFwcERlZmF1bHRWaXN1YWwoKQp7IHJldHVybiB4X2FwcGRlZnZpc3VhbDsgfQoKCgoKaW5saW5l
IHZvaWQgYml0Qmx0KCBRUGFpbnREZXZpY2UgKmRzdCwgY29uc3QgUVBvaW50ICZkcCwKICAgICAg
ICAgICAgICAgICAgICBjb25zdCBRUGFpbnREZXZpY2UgKnNyYywgY29uc3QgUVJlY3QgJnNyID1R
UmVjdCgwLDAsLTEsLTEpLAogICAgICAgICAgICAgICAgICAgIFF0OjpSYXN0ZXJPcCByb3A9UXQ6
OkNvcHlST1AsIGJvb2wgaWdub3JlTWFzaz1GQUxTRSApCnsKICAgIGJpdEJsdCggZHN0LCBkcC54
KCksIGRwLnkoKSwgc3JjLCBzci54KCksIHNyLnkoKSwgc3Iud2lkdGgoKSwgc3IuaGVpZ2h0KCks
CiAgICAgICAgICAgIHJvcCwgaWdub3JlTWFzayApOwp9CiMgNDUgImtlcm5lbC9xd2lkZ2V0Lmgi
IDIKIyAxICJrZXJuZWwvcXBhbGV0dGUuaCIgMQojIDQyICJrZXJuZWwvcXBhbGV0dGUuaCIKIyAx
ICJrZXJuZWwvcXdpbmRvd2RlZnMuaCIgMQojIDQzICJrZXJuZWwvcXBhbGV0dGUuaCIgMgojIDEg
Imtlcm5lbC9xY29sb3IuaCIgMQojIDQyICJrZXJuZWwvcWNvbG9yLmgiCiMgMSAia2VybmVsL3F3
aW5kb3dkZWZzLmgiIDEKIyA0MyAia2VybmVsL3Fjb2xvci5oIiAyCgoKY29uc3QgUVJnYiBSR0Jf
RElSVFkgPSAweDgwMDAwMDAwOwpjb25zdCBRUmdiIFJHQl9JTlZBTElEID0gMHg0MDAwMDAwMDsK
Y29uc3QgUVJnYiBSR0JfRElSRUNUID0gMHgyMDAwMDAwMDsKY29uc3QgUVJnYiBSR0JfTUFTSyA9
IDB4MDBmZmZmZmY7CgoKICAgICAgICAgaW5saW5lIGludCBxUmVkKCBRUmdiIHJnYiApCnsgcmV0
dXJuIChpbnQpKChyZ2IgPj4gMTYpICYgMHhmZik7IH0KCiAgICAgICAgIGlubGluZSBpbnQgcUdy
ZWVuKCBRUmdiIHJnYiApCnsgcmV0dXJuIChpbnQpKChyZ2IgPj4gOCkgJiAweGZmKTsgfQoKICAg
ICAgICAgaW5saW5lIGludCBxQmx1ZSggUVJnYiByZ2IgKQp7IHJldHVybiAoaW50KShyZ2IgJiAw
eGZmKTsgfQoKICAgICAgICAgaW5saW5lIGludCBxQWxwaGEoIFFSZ2IgcmdiICkKeyByZXR1cm4g
KGludCkoKHJnYiA+PiAyNCkgJiAweGZmKTsgfQoKICAgICAgICAgaW5saW5lIFFSZ2IgcVJnYigg
aW50IHIsIGludCBnLCBpbnQgYiApCnsgcmV0dXJuICgweGZmIDw8IDI0KSB8ICgociAmIDB4ZmYp
IDw8IDE2KSB8ICgoZyAmIDB4ZmYpIDw8IDgpIHwgKGIgJiAweGZmKTsgfQoKICAgICAgICAgaW5s
aW5lIFFSZ2IgcVJnYmEoIGludCByLCBpbnQgZywgaW50IGIsIGludCBhICkKeyByZXR1cm4gKChh
ICYgMHhmZikgPDwgMjQpIHwgKChyICYgMHhmZikgPDwgMTYpIHwgKChnICYgMHhmZikgPDwgOCkg
fCAoYiAmIDB4ZmYpOyB9CgogICAgICAgICBpbmxpbmUgaW50IHFHcmF5KCBpbnQgciwgaW50IGcs
IGludCBiICkKeyByZXR1cm4gKHIqMTErZyoxNitiKjUpLzMyOyB9CgogICAgICAgICBpbmxpbmUg
aW50IHFHcmF5KCBRUmdiIHJnYiApCnsgcmV0dXJuIHFHcmF5KCBxUmVkKHJnYiksIHFHcmVlbihy
Z2IpLCBxQmx1ZShyZ2IpICk7IH0KCgpjbGFzcyBRQ29sb3IKewpwdWJsaWM6CiAgICBlbnVtIFNw
ZWMgeyBSZ2IsIEhzdiB9OwoKICAgIFFDb2xvcigpOwogICAgUUNvbG9yKCBpbnQgciwgaW50IGcs
IGludCBiICk7CiAgICBRQ29sb3IoIGludCB4LCBpbnQgeSwgaW50IHosIFNwZWMgKTsKICAgIFFD
b2xvciggUVJnYiByZ2IsIHVpbnQgcGl4ZWw9MHhmZmZmZmZmZik7CiAgICBRQ29sb3IoIGNvbnN0
IFFTdHJpbmcmIG5hbWUgKTsKICAgIFFDb2xvciggY29uc3QgY2hhciAqbmFtZSApOwogICAgUUNv
bG9yKCBjb25zdCBRQ29sb3IgJiApOwogICAgUUNvbG9yICZvcGVyYXRvcj0oIGNvbnN0IFFDb2xv
ciAmICk7CgogICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAgICBib29sIGlzRGlydHkoKSBjb25z
dDsKCiAgICBRU3RyaW5nIG5hbWUoKSBjb25zdDsKICAgIHZvaWQgc2V0TmFtZWRDb2xvciggY29u
c3QgUVN0cmluZyYgbmFtZSApOwoKICAgIHZvaWQgcmdiKCBpbnQgKnIsIGludCAqZywgaW50ICpi
ICkgY29uc3Q7CiAgICBRUmdiIHJnYigpIGNvbnN0OwogICAgdm9pZCBzZXRSZ2IoIGludCByLCBp
bnQgZywgaW50IGIgKTsKICAgIHZvaWQgc2V0UmdiKCBRUmdiIHJnYiApOwoKICAgIGludCByZWQo
KSBjb25zdDsKICAgIGludCBncmVlbigpIGNvbnN0OwogICAgaW50IGJsdWUoKSBjb25zdDsKCiAg
ICB2b2lkIGhzdiggaW50ICpoLCBpbnQgKnMsIGludCAqdiApIGNvbnN0OwogICAgdm9pZCBnZXRI
c3YoIGludCAmaCwgaW50ICZzLCBpbnQgJnYgKSBjb25zdDsKICAgIHZvaWQgc2V0SHN2KCBpbnQg
aCwgaW50IHMsIGludCB2ICk7CgogICAgUUNvbG9yIGxpZ2h0KCBpbnQgZiA9IDE1MCApIGNvbnN0
OwogICAgUUNvbG9yIGRhcmsoIGludCBmID0gMjAwICkgY29uc3Q7CgogICAgYm9vbCBvcGVyYXRv
cj09KCBjb25zdCBRQ29sb3IgJmMgKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3Qg
UUNvbG9yICZjICkgY29uc3Q7CgogICAgc3RhdGljIGJvb2wgbGF6eUFsbG9jKCk7CiAgICBzdGF0
aWMgdm9pZCBzZXRMYXp5QWxsb2MoIGJvb2wgKTsKICAgIHVpbnQgYWxsb2MoKTsKICAgIHVpbnQg
cGl4ZWwoKSBjb25zdDsKCiAgICBzdGF0aWMgaW50IG1heENvbG9ycygpOwogICAgc3RhdGljIGlu
dCBudW1CaXRQbGFuZXMoKTsKCiAgICBzdGF0aWMgaW50IGVudGVyQWxsb2NDb250ZXh0KCk7CiAg
ICBzdGF0aWMgdm9pZCBsZWF2ZUFsbG9jQ29udGV4dCgpOwogICAgc3RhdGljIGludCBjdXJyZW50
QWxsb2NDb250ZXh0KCk7CiAgICBzdGF0aWMgdm9pZCBkZXN0cm95QWxsb2NDb250ZXh0KCBpbnQg
KTsKCgoKCgoKICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKICAgIHN0YXRpYyB2b2lkIGNs
ZWFudXAoKTsKCnByaXZhdGU6CiAgICB2b2lkIHNldFN5c3RlbU5hbWVkQ29sb3IoIGNvbnN0IFFT
dHJpbmcmIG5hbWUgKTsKICAgIHN0YXRpYyB2b2lkIGluaXRHbG9iYWxDb2xvcnMoKTsKICAgIHN0
YXRpYyBRQ29sb3IqIGdsb2JhbENvbG9ycygpOwogICAgc3RhdGljIGJvb2wgY29sb3JfaW5pdDsK
ICAgIHN0YXRpYyBib29sIGdsb2JhbHNfaW5pdDsKICAgIHN0YXRpYyBib29sIGxhenlfYWxsb2M7
CgoKCiAgICB1aW50IHBpeDsKICAgIFFSZ2IgcmdiVmFsOwp9OwoKCmlubGluZSBRQ29sb3I6OlFD
b2xvcigpCnsgcmdiVmFsID0gUkdCX0lOVkFMSUQ7IHBpeCA9IDA7IH0KCmlubGluZSBRQ29sb3I6
OlFDb2xvciggaW50IHIsIGludCBnLCBpbnQgYiApCnsgc2V0UmdiKCByLCBnLCBiICk7IH0KCmlu
bGluZSBib29sIFFDb2xvcjo6aXNWYWxpZCgpIGNvbnN0CnsgcmV0dXJuIChyZ2JWYWwgJiBSR0Jf
SU5WQUxJRCkgPT0gMDsgfQoKaW5saW5lIGJvb2wgUUNvbG9yOjppc0RpcnR5KCkgY29uc3QKeyBy
ZXR1cm4gKHJnYlZhbCAmIFJHQl9ESVJUWSkgIT0gMDsgfQoKaW5saW5lIFFSZ2IgUUNvbG9yOjpy
Z2IoKSBjb25zdAp7IHJldHVybiByZ2JWYWwgfCB+UkdCX01BU0s7IH0KCmlubGluZSBpbnQgUUNv
bG9yOjpyZWQoKSBjb25zdAp7IHJldHVybiBxUmVkKHJnYlZhbCk7IH0KCmlubGluZSBpbnQgUUNv
bG9yOjpncmVlbigpIGNvbnN0CnsgcmV0dXJuIHFHcmVlbihyZ2JWYWwpOyB9CgppbmxpbmUgaW50
IFFDb2xvcjo6Ymx1ZSgpIGNvbnN0CnsgcmV0dXJuIHFCbHVlKHJnYlZhbCk7IH0KCmlubGluZSB1
aW50IFFDb2xvcjo6cGl4ZWwoKSBjb25zdAp7IHJldHVybiAocmdiVmFsICYgUkdCX0RJUlRZKSA9
PSAwID8gcGl4IDogKChRQ29sb3IqKXRoaXMpLT5hbGxvYygpOyB9CgppbmxpbmUgYm9vbCBRQ29s
b3I6OmxhenlBbGxvYygpCnsgcmV0dXJuIGxhenlfYWxsb2M7IH0KCgppbmxpbmUgYm9vbCBRQ29s
b3I6Om9wZXJhdG9yPT0oIGNvbnN0IFFDb2xvciAmYyApIGNvbnN0CnsKICAgIHJldHVybiBpc1Zh
bGlkKCk9PWMuaXNWYWxpZCgpICYmCiAgICAgICAgKCgoKHJnYlZhbCB8IGMucmdiVmFsKSAmIFJH
Ql9ESVJFQ1QpID09IDAgJiYKICAgICAgICAgICAgKHJnYlZhbCAmIFJHQl9NQVNLKSA9PSAoYy5y
Z2JWYWwgJiBSR0JfTUFTSykpIHx8CiAgICAgICAgICAgKChyZ2JWYWwgJiBjLnJnYlZhbCAmIFJH
Ql9ESVJFQ1QpICE9IDAgJiYKICAgICAgICAgICAgKHJnYlZhbCAmIFJHQl9NQVNLKSA9PSAoYy5y
Z2JWYWwgJiBSR0JfTUFTSykgJiYgcGl4ID09IGMucGl4KSk7Cn0KCmlubGluZSBib29sIFFDb2xv
cjo6b3BlcmF0b3IhPSggY29uc3QgUUNvbG9yICZjICkgY29uc3QKewogICAgcmV0dXJuICFvcGVy
YXRvcj09KGMpOwp9CgoKCgoKCgogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURh
dGFTdHJlYW0gJiwgY29uc3QgUUNvbG9yICYgKTsKICAgICAgICAgUURhdGFTdHJlYW0gJm9wZXJh
dG9yPj4oIFFEYXRhU3RyZWFtICYsIFFDb2xvciAmICk7CiMgNDQgImtlcm5lbC9xcGFsZXR0ZS5o
IiAyCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc2hhcmVkLmgiIDEKIyA0NSAia2VybmVsL3Fw
YWxldHRlLmgiIDIKIyAxICJrZXJuZWwvcWJydXNoLmgiIDEKIyA0MiAia2VybmVsL3FicnVzaC5o
IgojIDEgImtlcm5lbC9xY29sb3IuaCIgMQojIDQzICJrZXJuZWwvcWJydXNoLmgiIDIKIyAxICIv
dXNyL2xpYi9xdC9pbmNsdWRlL3FzaGFyZWQuaCIgMQojIDQ0ICJrZXJuZWwvcWJydXNoLmgiIDIK
CgoKY2xhc3MgUUJydXNoOiBwdWJsaWMgUXQKewpmcmllbmQgY2xhc3MgUVBhaW50ZXI7CnB1Ymxp
YzoKICAgIFFCcnVzaCgpOwogICAgUUJydXNoKCBCcnVzaFN0eWxlICk7CiAgICBRQnJ1c2goIGNv
bnN0IFFDb2xvciAmLCBCcnVzaFN0eWxlPVNvbGlkUGF0dGVybiApOwogICAgUUJydXNoKCBjb25z
dCBRQ29sb3IgJiwgY29uc3QgUVBpeG1hcCAmICk7CiAgICBRQnJ1c2goIGNvbnN0IFFCcnVzaCAm
ICk7CiAgIH5RQnJ1c2goKTsKICAgIFFCcnVzaCAmb3BlcmF0b3I9KCBjb25zdCBRQnJ1c2ggJiAp
OwoKICAgIEJydXNoU3R5bGUgc3R5bGUoKSBjb25zdCB7IHJldHVybiBkYXRhLT5zdHlsZTsgfQog
ICAgdm9pZCBzZXRTdHlsZSggQnJ1c2hTdHlsZSApOwogICAgY29uc3QgUUNvbG9yICZjb2xvcigp
Y29uc3QgeyByZXR1cm4gZGF0YS0+Y29sb3I7IH0KICAgIHZvaWQgc2V0Q29sb3IoIGNvbnN0IFFD
b2xvciAmICk7CiAgICBRUGl4bWFwICpwaXhtYXAoKSBjb25zdCB7IHJldHVybiBkYXRhLT5waXht
YXA7IH0KICAgIHZvaWQgc2V0UGl4bWFwKCBjb25zdCBRUGl4bWFwICYgKTsKCiAgICBib29sIG9w
ZXJhdG9yPT0oIGNvbnN0IFFCcnVzaCAmcCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBj
b25zdCBRQnJ1c2ggJmIgKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeyByZXR1cm4gIShvcGVyYXRvcj09KGIpKTsgfQoKcHJpdmF0ZToKICAgIFFCcnVzaCBj
b3B5KCkgY29uc3Q7CiAgICB2b2lkIGRldGFjaCgpOwogICAgdm9pZCBpbml0KCBjb25zdCBRQ29s
b3IgJiwgQnJ1c2hTdHlsZSApOwogICAgc3RydWN0IFFCcnVzaERhdGEgOiBwdWJsaWMgUVNoYXJl
ZCB7CiAgICAgICAgQnJ1c2hTdHlsZSBzdHlsZTsKICAgICAgICBRQ29sb3IgY29sb3I7CiAgICAg
ICAgUVBpeG1hcCAqcGl4bWFwOwogICAgfSAqZGF0YTsKfTsKCgoKCgoKCiAgICAgICAgIFFEYXRh
U3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQnJ1c2ggJiApOwogICAg
ICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUJydXNoICYgKTsK
IyA0NiAia2VybmVsL3FwYWxldHRlLmgiIDIKCgoKY2xhc3MgUUNvbG9yR3JvdXBQcml2YXRlOwoK
CmNsYXNzIFFDb2xvckdyb3VwCnsKcHVibGljOgogICAgUUNvbG9yR3JvdXAoKTsKICAgIFFDb2xv
ckdyb3VwKCBjb25zdCBRQ29sb3IgJmZvcmVncm91bmQsIGNvbnN0IFFDb2xvciAmYnV0dG9uLAog
ICAgICAgICAgICAgICAgIGNvbnN0IFFDb2xvciAmbGlnaHQsIGNvbnN0IFFDb2xvciAmZGFyaywg
Y29uc3QgUUNvbG9yICZtaWQsCiAgICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yICZ0ZXh0LCBj
b25zdCBRQ29sb3IgJmJhc2UgKTsKICAgIFFDb2xvckdyb3VwKCBjb25zdCBRQnJ1c2ggJmZvcmVn
cm91bmQsIGNvbnN0IFFCcnVzaCAmYnV0dG9uLAogICAgICAgICAgICAgICAgIGNvbnN0IFFCcnVz
aCAmbGlnaHQsIGNvbnN0IFFCcnVzaCAmZGFyaywgY29uc3QgUUJydXNoICZtaWQsCiAgICAgICAg
ICAgICAgICAgY29uc3QgUUJydXNoICZ0ZXh0LCBjb25zdCBRQnJ1c2ggJmJyaWdodF90ZXh0LAog
ICAgICAgICAgICAgICAgIGNvbnN0IFFCcnVzaCAmYmFzZSwgY29uc3QgUUJydXNoICZiYWNrZ3Jv
dW5kKTsKICAgIFFDb2xvckdyb3VwKCBjb25zdCBRQ29sb3JHcm91cCAmICk7CgogICB+UUNvbG9y
R3JvdXAoKTsKCiAgICBRQ29sb3JHcm91cCYgb3BlcmF0b3IgPShjb25zdCBRQ29sb3JHcm91cCYp
OwoKCiAgICBlbnVtIENvbG9yUm9sZSB7IEZvcmVncm91bmQsIEJ1dHRvbiwgTGlnaHQsIE1pZGxp
Z2h0LCBEYXJrLCBNaWQsCiAgICAgICAgICAgICAgICAgICAgIFRleHQsIEJyaWdodFRleHQsIEJ1
dHRvblRleHQsIEJhc2UsIEJhY2tncm91bmQsIFNoYWRvdywKICAgICAgICAgICAgICAgICAgICAg
SGlnaGxpZ2h0LCBIaWdobGlnaHRlZFRleHQsCiAgICAgICAgICAgICAgICAgICAgIE5Db2xvclJv
bGVzIH07CgogICAgY29uc3QgUUNvbG9yICZjb2xvciggQ29sb3JSb2xlICkgY29uc3Q7CiAgICBj
b25zdCBRQnJ1c2ggJmJydXNoKCBDb2xvclJvbGUgKSBjb25zdDsKICAgIHZvaWQgc2V0Q29sb3Io
IENvbG9yUm9sZSwgY29uc3QgUUNvbG9yICYgKTsKICAgIHZvaWQgc2V0QnJ1c2goIENvbG9yUm9s
ZSwgY29uc3QgUUJydXNoICYgKTsKCiAgICBjb25zdCBRQ29sb3IgJmZvcmVncm91bmQoKSBjb25z
dCB7IHJldHVybiBicltGb3JlZ3JvdW5kXS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmJ1
dHRvbigpIGNvbnN0IHsgcmV0dXJuIGJyW0J1dHRvbl0uY29sb3IoKTsgfQogICAgY29uc3QgUUNv
bG9yICZsaWdodCgpIGNvbnN0IHsgcmV0dXJuIGJyW0xpZ2h0XS5jb2xvcigpOyB9CiAgICBjb25z
dCBRQ29sb3IgJmRhcmsoKSBjb25zdCB7IHJldHVybiBicltEYXJrXS5jb2xvcigpOyB9CiAgICBj
b25zdCBRQ29sb3IgJm1pZCgpIGNvbnN0IHsgcmV0dXJuIGJyW01pZF0uY29sb3IoKTsgfQogICAg
Y29uc3QgUUNvbG9yICZ0ZXh0KCkgY29uc3QgeyByZXR1cm4gYnJbVGV4dF0uY29sb3IoKTsgfQog
ICAgY29uc3QgUUNvbG9yICZiYXNlKCkgY29uc3QgeyByZXR1cm4gYnJbQmFzZV0uY29sb3IoKTsg
fQogICAgY29uc3QgUUNvbG9yICZiYWNrZ3JvdW5kKCkgY29uc3QgeyByZXR1cm4gYnJbQmFja2dy
b3VuZF0uY29sb3IoKTsgfQoKICAgIGNvbnN0IFFDb2xvciAmbWlkbGlnaHQoKSBjb25zdCB7IHJl
dHVybiBicltNaWRsaWdodF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZicmlnaHRUZXh0
KCkgY29uc3QgeyByZXR1cm4gYnJbQnJpZ2h0VGV4dF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNv
bG9yICZidXR0b25UZXh0KCkgY29uc3QgeyByZXR1cm4gYnJbQnV0dG9uVGV4dF0uY29sb3IoKTsg
fQogICAgY29uc3QgUUNvbG9yICZzaGFkb3coKSBjb25zdCB7IHJldHVybiBicltTaGFkb3ddLmNv
bG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmaGlnaGxpZ2h0KCkgY29uc3QgeyByZXR1cm4gYnJb
SGlnaGxpZ2h0XS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmhpZ2hsaWdodGVkVGV4dCgp
IGNvbnN0e3JldHVybiBicltIaWdobGlnaHRlZFRleHRdLmNvbG9yKCk7IH0KCiAgICBib29sIG9w
ZXJhdG9yPT0oIGNvbnN0IFFDb2xvckdyb3VwICZnICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9y
IT0oIGNvbnN0IFFDb2xvckdyb3VwICZnICkgY29uc3QKICAgICAgICB7IHJldHVybiAhKG9wZXJh
dG9yPT0oZykpOyB9Cgpwcml2YXRlOgogICAgUUJydXNoICpicjsKICAgIFFDb2xvckdyb3VwUHJp
dmF0ZSAqIGQ7CgogICAgZnJpZW5kIGNsYXNzIFFQYWxldHRlOwp9OwoKCmNsYXNzIFFQYWxldHRl
CnsKcHVibGljOgogICAgUVBhbGV0dGUoKTsKICAgIFFQYWxldHRlKCBjb25zdCBRQ29sb3IgJmJ1
dHRvbiApOwogICAgUVBhbGV0dGUoIGNvbnN0IFFDb2xvciAmYnV0dG9uLCBjb25zdCBRQ29sb3Ig
JmJhY2tncm91bmQgKTsKICAgIFFQYWxldHRlKCBjb25zdCBRQ29sb3JHcm91cCAmYWN0aXZlLCBj
b25zdCBRQ29sb3JHcm91cCAmZGlzYWJsZWQsCiAgICAgICAgICAgICAgY29uc3QgUUNvbG9yR3Jv
dXAgJmluYWN0aXZlICk7CiAgICBRUGFsZXR0ZSggY29uc3QgUVBhbGV0dGUgJiApOwogICB+UVBh
bGV0dGUoKTsKICAgIFFQYWxldHRlICZvcGVyYXRvcj0oIGNvbnN0IFFQYWxldHRlICYgKTsKCiAg
ICBlbnVtIENvbG9yR3JvdXAgeyBOb3JtYWwsIERpc2FibGVkLCBBY3RpdmUsIEluYWN0aXZlLCBO
Q29sb3JHcm91cHMgfTsKCiAgICBjb25zdCBRQ29sb3IgJmNvbG9yKCBDb2xvckdyb3VwLCBRQ29s
b3JHcm91cDo6Q29sb3JSb2xlICkgY29uc3Q7CiAgICBjb25zdCBRQnJ1c2ggJmJydXNoKCBDb2xv
ckdyb3VwLCBRQ29sb3JHcm91cDo6Q29sb3JSb2xlICkgY29uc3Q7CiAgICB2b2lkIHNldENvbG9y
KCBDb2xvckdyb3VwLCBRQ29sb3JHcm91cDo6Q29sb3JSb2xlLCBjb25zdCBRQ29sb3IgJiApOwog
ICAgdm9pZCBzZXRCcnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSwgY29u
c3QgUUJydXNoICYgKTsKCiAgICB2b2lkIHNldENvbG9yKCBRQ29sb3JHcm91cDo6Q29sb3JSb2xl
LCBjb25zdCBRQ29sb3IgJiApOwogICAgdm9pZCBzZXRCcnVzaCggUUNvbG9yR3JvdXA6OkNvbG9y
Um9sZSwgY29uc3QgUUJydXNoICYgKTsKCiAgICBRUGFsZXR0ZSBjb3B5KCkgY29uc3Q7CgogICAg
Y29uc3QgUUNvbG9yR3JvdXAgJmFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPmFjdGl2ZTsg
fQogICAgY29uc3QgUUNvbG9yR3JvdXAgJmRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gZGF0YS0+
ZGlzYWJsZWQ7IH0KICAgIGNvbnN0IFFDb2xvckdyb3VwICZpbmFjdGl2ZSgpIGNvbnN0IHsgcmV0
dXJuIGRhdGEtPmluYWN0aXZlOyB9CiAgICBjb25zdCBRQ29sb3JHcm91cCAmbm9ybWFsKCkgY29u
c3QgeyByZXR1cm4gZGF0YS0+bm9ybWFsOyB9CgogICAgdm9pZCBzZXRBY3RpdmUoIGNvbnN0IFFD
b2xvckdyb3VwICYgKTsKICAgIHZvaWQgc2V0RGlzYWJsZWQoIGNvbnN0IFFDb2xvckdyb3VwICYg
KTsKICAgIHZvaWQgc2V0SW5hY3RpdmUoIGNvbnN0IFFDb2xvckdyb3VwICYgKTsKICAgIHZvaWQg
c2V0Tm9ybWFsKCBjb25zdCBRQ29sb3JHcm91cCAmICk7CgogICAgYm9vbCBvcGVyYXRvcj09KCBj
b25zdCBRUGFsZXR0ZSAmcCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRUGFs
ZXR0ZSAmcCApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
IHJldHVybiAhKG9wZXJhdG9yPT0ocCkpOyB9CiAgICBib29sIGlzQ29weU9mKCBjb25zdCBRUGFs
ZXR0ZSAmICk7CgogICAgaW50IHNlcmlhbE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnNl
cl9ubzsgfQoKcHJpdmF0ZToKICAgIHZvaWQgZGV0YWNoKCk7CiAgICBRQnJ1c2ggJmRpcmVjdEJy
dXNoKCBDb2xvckdyb3VwLCBRQ29sb3JHcm91cDo6Q29sb3JSb2xlICkgY29uc3Q7CgogICAgc3Ry
dWN0IFFQYWxEYXRhIDogcHVibGljIFFTaGFyZWQgewogICAgICAgIFFDb2xvckdyb3VwIG5vcm1h
bDsKICAgICAgICBRQ29sb3JHcm91cCBkaXNhYmxlZDsKICAgICAgICBRQ29sb3JHcm91cCBhY3Rp
dmU7CiAgICAgICAgaW50IHNlcl9ubzsKICAgICAgICBRQ29sb3JHcm91cCBpbmFjdGl2ZTsKICAg
IH0gKmRhdGE7CiAgICBzdGF0aWMgUVBhbERhdGEgKmRlZlBhbERhdGE7CiAgICBzdGF0aWMgdm9p
ZCBjbGVhbnVwRGVmUGFsKCk7Cn07CgoKCgoKCgogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0
b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUNvbG9yR3JvdXAgJiApOwogICAgICAgICBRRGF0
YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUNvbG9yR3JvdXAgJiApOwoKICAg
ICAgICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFQYWxl
dHRlICYgKTsKICAgICAgICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYs
IFFQYWxldHRlICYgKTsKIyA0NiAia2VybmVsL3F3aWRnZXQuaCIgMgojIDEgImtlcm5lbC9xY3Vy
c29yLmgiIDEKIyA0MiAia2VybmVsL3FjdXJzb3IuaCIKIyAxICJrZXJuZWwvcXBvaW50LmgiIDEK
IyA0MyAia2VybmVsL3FjdXJzb3IuaCIgMgojIDEgIi91c3IvbGliL3F0L2luY2x1ZGUvcXNoYXJl
ZC5oIiAxCiMgNDQgImtlcm5lbC9xY3Vyc29yLmgiIDIKIyAxICJrZXJuZWwvcW5hbWVzcGFjZS5o
IiAxCiMgNDUgImtlcm5lbC9xY3Vyc29yLmgiIDIKIyA2NiAia2VybmVsL3FjdXJzb3IuaCIKc3Ry
dWN0IFFDdXJzb3JEYXRhOwoKCmNsYXNzIFFDdXJzb3IKewpwdWJsaWM6CiAgICBRQ3Vyc29yKCk7
CiAgICBRQ3Vyc29yKCBpbnQgc2hhcGUgKTsKICAgIFFDdXJzb3IoIGNvbnN0IFFCaXRtYXAgJmJp
dG1hcCwgY29uc3QgUUJpdG1hcCAmbWFzaywKICAgICAgICAgICAgIGludCBob3RYPS0xLCBpbnQg
aG90WT0tMSApOwogICAgUUN1cnNvciggY29uc3QgUVBpeG1hcCAmcGl4bWFwLAogICAgICAgICAg
ICAgaW50IGhvdFg9LTEsIGludCBob3RZPS0xICk7CiAgICBRQ3Vyc29yKCBjb25zdCBRQ3Vyc29y
ICYgKTsKICAgflFDdXJzb3IoKTsKICAgIFFDdXJzb3IgJm9wZXJhdG9yPSggY29uc3QgUUN1cnNv
ciAmICk7CgogICAgaW50IHNoYXBlKCkgY29uc3Q7CiAgICB2b2lkIHNldFNoYXBlKCBpbnQgKTsK
CiAgICBjb25zdCBRQml0bWFwICpiaXRtYXAoKSBjb25zdDsKICAgIGNvbnN0IFFCaXRtYXAgKm1h
c2soKSBjb25zdDsKICAgIFFQb2ludCBob3RTcG90KCkgY29uc3Q7CgoKCgogICAgSEFORExFIGhh
bmRsZSgpIGNvbnN0OwoKCgoKCgogICAgc3RhdGljIFFQb2ludCBwb3MoKTsKICAgIHN0YXRpYyB2
b2lkIHNldFBvcyggaW50IHgsIGludCB5ICk7CiAgICBzdGF0aWMgdm9pZCBzZXRQb3MoIGNvbnN0
IFFQb2ludCAmICk7CgogICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgc3RhdGljIHZv
aWQgY2xlYW51cCgpOwoKcHJpdmF0ZToKICAgIHZvaWQgc2V0Qml0bWFwKCBjb25zdCBRQml0bWFw
ICZiaXRtYXAsIGNvbnN0IFFCaXRtYXAgJm1hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBob3RYLCBpbnQgaG90WSApOwogICAgdm9pZCB1cGRhdGUoKSBjb25zdDsKICAg
IFFDdXJzb3JEYXRhICpkYXRhOwogICAgUUN1cnNvciAqZmluZF9jdXIoaW50KTsKfTsKIyAxMjEg
Imtlcm5lbC9xY3Vyc29yLmgiCmVudW0gUUN1cnNvclNoYXBlIHsKICAgIEFycm93Q3Vyc29yLCBV
cEFycm93Q3Vyc29yLCBDcm9zc0N1cnNvciwgV2FpdEN1cnNvciwgSWJlYW1DdXJzb3IsCiAgICBT
aXplVmVyQ3Vyc29yLCBTaXplSG9yQ3Vyc29yLCBTaXplQkRpYWdDdXJzb3IsIFNpemVGRGlhZ0N1
cnNvciwKICAgIFNpemVBbGxDdXJzb3IsIEJsYW5rQ3Vyc29yLCBTcGxpdFZDdXJzb3IsIFNwbGl0
SEN1cnNvciwgUG9pbnRpbmdIYW5kQ3Vyc29yLAogICAgRm9yYmlkZGVuQ3Vyc29yLCBMYXN0Q3Vy
c29yID0gRm9yYmlkZGVuQ3Vyc29yLCBCaXRtYXBDdXJzb3I9MjQgfTsKCgoKCgoKICAgICAgICAg
UURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFDdXJzb3IgJiAp
OwogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUN1cnNv
ciAmICk7CgoKCgppbmxpbmUgdm9pZCBRQ3Vyc29yOjpzZXRQb3MoIGNvbnN0IFFQb2ludCAmcCAp
CnsKICAgIHNldFBvcyggcC54KCksIHAueSgpICk7Cn0KIyA0NyAia2VybmVsL3F3aWRnZXQuaCIg
MgojIDEgImtlcm5lbC9xZm9udC5oIiAxCiMgNDIgImtlcm5lbC9xZm9udC5oIgojIDEgImtlcm5l
bC9xd2luZG93ZGVmcy5oIiAxCiMgNDMgImtlcm5lbC9xZm9udC5oIiAyCiMgMSAiL3Vzci9saWIv
cXQvaW5jbHVkZS9xc3RyaW5nLmgiIDEKIyA0NCAia2VybmVsL3Fmb250LmgiIDIKCgoKY2xhc3Mg
UVN0cmluZ0xpc3Q7CnN0cnVjdCBRRm9udERlZjsKc3RydWN0IFFGb250RGF0YTsKY2xhc3MgUUZv
bnRJbnRlcm5hbDsKY2xhc3MgUVJlbmRlcmVkRm9udDsKCmNsYXNzIFFGb250CnsKcHVibGljOgog
ICAgZW51bSBDaGFyU2V0IHsgSVNPXzg4NTlfMSwgTGF0aW4xID0gSVNPXzg4NTlfMSwgQW55Q2hh
clNldCwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfMiwgTGF0aW4yID0gSVNPXzg4NTlf
MiwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfMywgTGF0aW4zID0gSVNPXzg4NTlfMywK
ICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfNCwgTGF0aW40ID0gSVNPXzg4NTlfNCwKICAg
ICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfNSwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4
NTlfNiwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfNywKICAgICAgICAgICAgICAgICAg
ICAgSVNPXzg4NTlfOCwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfOSwgTGF0aW41ID0g
SVNPXzg4NTlfOSwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfMTAsIExhdGluNiA9IElT
T184ODU5XzEwLAogICAgICAgICAgICAgICAgICAgICBJU09fODg1OV8xMSwgVElTNjIwID0gSVNP
Xzg4NTlfMTEsCiAgICAgICAgICAgICAgICAgICAgIElTT184ODU5XzEyLAogICAgICAgICAgICAg
ICAgICAgICBJU09fODg1OV8xMywgTGF0aW43ID0gSVNPXzg4NTlfMTMsCiAgICAgICAgICAgICAg
ICAgICAgIElTT184ODU5XzE0LCBMYXRpbjggPSBJU09fODg1OV8xNCwKICAgICAgICAgICAgICAg
ICAgICAgSVNPXzg4NTlfMTUsIExhdGluOSA9IElTT184ODU5XzE1LAogICAgICAgICAgICAgICAg
ICAgICBLT0k4UiwKICAgICAgICAgICAgICAgICAgICAgU2V0X0phLCBTZXRfMSA9IFNldF9KYSwK
ICAgICAgICAgICAgICAgICAgICAgU2V0X0tvLAogICAgICAgICAgICAgICAgICAgICBTZXRfVGhf
VEgsCiAgICAgICAgICAgICAgICAgICAgIFNldF9aaCwKICAgICAgICAgICAgICAgICAgICAgU2V0
X1poX1RXLAogICAgICAgICAgICAgICAgICAgICBTZXRfTiA9IFNldF9aaF9UVywKICAgICAgICAg
ICAgICAgICAgICAgVW5pY29kZSwKCgoKCgoKICAgICAgICAgICAgICAgICAgICAgU2V0X0dCSywK
ICAgICAgICAgICAgICAgICAgICAgU2V0X0JpZzUsCgogICAgICAgICAgICAgICAgICAgICBUU0NJ
SSwKICAgICAgICAgICAgICAgICAgICAgS09JOFUsCiAgICAgICAgICAgICAgICAgICAgIENQMTI1
MSwKICAgICAgICAgICAgICAgICAgICAgUFQxNTQsCgoKCgogICAgICAgICAgICAgICAgICAgICBK
SVNfWF8wMjAxID0gMHhhMCwKCiAgICAgICAgICAgICAgICAgICAgIEpJU19YXzAyMDggPSAweGMw
LCBFbmMxNiA9IEpJU19YXzAyMDgsCiAgICAgICAgICAgICAgICAgICAgIEtTQ181NjAxLAogICAg
ICAgICAgICAgICAgICAgICBHQl8yMzEyLAogICAgICAgICAgICAgICAgICAgICBCaWc1CiAgICB9
OwogICAgZW51bSBTdHlsZUhpbnQgeyBIZWx2ZXRpY2EsIFRpbWVzLCBDb3VyaWVyLCBPbGRFbmds
aXNoLCBTeXN0ZW0sIEFueVN0eWxlLAogICAgICAgICAgICAgICAgICAgICBTYW5zU2VyaWYgPSBI
ZWx2ZXRpY2EsCiAgICAgICAgICAgICAgICAgICAgIFNlcmlmID0gVGltZXMsCiAgICAgICAgICAg
ICAgICAgICAgIFR5cGVXcml0ZXIgPSBDb3VyaWVyLAogICAgICAgICAgICAgICAgICAgICBEZWNv
cmF0aXZlID0gT2xkRW5nbGlzaH07CiAgICBlbnVtIFN0eWxlU3RyYXRlZ3kgeyBQcmVmZXJEZWZh
dWx0ID0gMHgwMDAxLAogICAgICAgICAgICAgICAgICAgICAgICAgIFByZWZlckJpdG1hcCA9IDB4
MDAwMiwKICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJEZXZpY2UgPSAweDAwMDQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgUHJlZmVyT3V0bGluZSA9IDB4MDAwOCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBGb3JjZU91dGxpbmUgPSAweDAwMTAsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgUHJlZmVyTWF0Y2ggPSAweDAwMjAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
UHJlZmVyUXVhbGl0eSA9IDB4MDA0MCB9OwogICAgZW51bSBXZWlnaHQgeyBMaWdodCA9IDI1LCBO
b3JtYWwgPSA1MCwgRGVtaUJvbGQgPSA2MywKICAgICAgICAgICAgICAgICAgICAgQm9sZCA9IDc1
LCBCbGFjayA9IDg3IH07CiAgICBRRm9udCgpOwogICAgUUZvbnQoIGNvbnN0IFFTdHJpbmcgJmZh
bWlseSwgaW50IHBvaW50U2l6ZSA9IDEyLAogICAgICAgICAgIGludCB3ZWlnaHQgPSBOb3JtYWws
IGJvb2wgaXRhbGljID0gRkFMU0UgKTsKICAgIFFGb250KCBjb25zdCBRU3RyaW5nICZmYW1pbHks
IGludCBwb2ludFNpemUsCiAgICAgICAgICAgaW50IHdlaWdodCwgYm9vbCBpdGFsaWMsIENoYXJT
ZXQgY2hhclNldCApOwogICAgUUZvbnQoIGNvbnN0IFFGb250ICYgKTsKICAgIH5RRm9udCgpOwog
ICAgUUZvbnQgJm9wZXJhdG9yPSggY29uc3QgUUZvbnQgJiApOwoKICAgIFFTdHJpbmcgZmFtaWx5
KCkgY29uc3Q7CiAgICB2b2lkIHNldEZhbWlseSggY29uc3QgUVN0cmluZyAmKTsKICAgIGludCBw
b2ludFNpemUoKSBjb25zdDsKICAgIGZsb2F0IHBvaW50U2l6ZUZsb2F0KCkgY29uc3Q7CiAgICB2
b2lkIHNldFBvaW50U2l6ZSggaW50ICk7CiAgICB2b2lkIHNldFBvaW50U2l6ZUZsb2F0KCBmbG9h
dCApOwogICAgaW50IHBpeGVsU2l6ZSgpIGNvbnN0OwogICAgdm9pZCBzZXRQaXhlbFNpemUoIGlu
dCApOwogICAgdm9pZCBzZXRQaXhlbFNpemVGbG9hdCggZmxvYXQgKTsKICAgIGludCB3ZWlnaHQo
KSBjb25zdDsKICAgIHZvaWQgc2V0V2VpZ2h0KCBpbnQgKTsKICAgIGJvb2wgYm9sZCgpIGNvbnN0
OwogICAgdm9pZCBzZXRCb2xkKCBib29sICk7CiAgICBib29sIGl0YWxpYygpIGNvbnN0OwogICAg
dm9pZCBzZXRJdGFsaWMoIGJvb2wgKTsKICAgIGJvb2wgdW5kZXJsaW5lKCkgY29uc3Q7CiAgICB2
b2lkIHNldFVuZGVybGluZSggYm9vbCApOwogICAgYm9vbCBzdHJpa2VPdXQoKSBjb25zdDsKICAg
IHZvaWQgc2V0U3RyaWtlT3V0KCBib29sICk7CiAgICBib29sIGZpeGVkUGl0Y2goKSBjb25zdDsK
ICAgIHZvaWQgc2V0Rml4ZWRQaXRjaCggYm9vbCApOwogICAgU3R5bGVIaW50IHN0eWxlSGludCgp
IGNvbnN0OwogICAgdm9pZCBzZXRTdHlsZUhpbnQoIFN0eWxlSGludCApOwogICAgU3R5bGVTdHJh
dGVneSBzdHlsZVN0cmF0ZWd5KCkgY29uc3Q7CiAgICB2b2lkIHNldFN0eWxlSGludCggU3R5bGVI
aW50LCBTdHlsZVN0cmF0ZWd5ICk7CiAgICBDaGFyU2V0IGNoYXJTZXQoKSBjb25zdDsKICAgIHZv
aWQgc2V0Q2hhclNldCggQ2hhclNldCApOwoKICAgIHN0YXRpYyBDaGFyU2V0IGNoYXJTZXRGb3JM
b2NhbGUoKTsKCiAgICBib29sIHJhd01vZGUoKSBjb25zdDsKICAgIHZvaWQgc2V0UmF3TW9kZSgg
Ym9vbCApOwoKICAgIGJvb2wgZXhhY3RNYXRjaCgpIGNvbnN0OwoKICAgIGJvb2wgb3BlcmF0b3I9
PSggY29uc3QgUUZvbnQgJiApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRRm9u
dCAmICkgY29uc3Q7CiAgICBib29sIGlzQ29weU9mKCBjb25zdCBRRm9udCAmICkgY29uc3Q7CgoK
CgoKCiAgICBIQU5ETEUgaGFuZGxlKCkgY29uc3Q7CgoKCgogICAgdm9pZCBzZXRSYXdOYW1lKCBj
b25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcgcmF3TmFtZSgpIGNvbnN0OwoKICAgIFFTdHJp
bmcga2V5KCkgY29uc3Q7CgogICAgc3RhdGljIFFTdHJpbmcgZW5jb2RpbmdOYW1lKCBDaGFyU2V0
ICk7CgogICAgc3RhdGljIFFGb250IGRlZmF1bHRGb250KCk7CiAgICBzdGF0aWMgdm9pZCBzZXRE
ZWZhdWx0Rm9udCggY29uc3QgUUZvbnQgJiApOwoKICAgIHN0YXRpYyBRU3RyaW5nIHN1YnN0aXR1
dGUoIGNvbnN0IFFTdHJpbmcgJmZhbWlseU5hbWUgKTsKICAgIHN0YXRpYyB2b2lkIGluc2VydFN1
YnN0aXR1dGlvbiggY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcgJik7CiAgICBzdGF0aWMg
dm9pZCByZW1vdmVTdWJzdGl0dXRpb24oIGNvbnN0IFFTdHJpbmcgJik7CiAgICBzdGF0aWMgUVN0
cmluZ0xpc3Qgc3Vic3RpdHV0aW9ucygpOwoKICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsK
ICAgIHN0YXRpYyB2b2lkIGxvY2FsZV9pbml0KCk7CiAgICBzdGF0aWMgdm9pZCBjbGVhbnVwKCk7
CiAgICBzdGF0aWMgdm9pZCBjYWNoZVN0YXRpc3RpY3MoKTsKCgoKCgpwcm90ZWN0ZWQ6CiAgICBi
b29sIGRpcnR5KCkgY29uc3Q7CgogICAgUVN0cmluZyBkZWZhdWx0RmFtaWx5KCkgY29uc3Q7CiAg
ICBRU3RyaW5nIGxhc3RSZXNvcnRGYW1pbHkoKSBjb25zdDsKICAgIFFTdHJpbmcgbGFzdFJlc29y
dEZvbnQoKSBjb25zdDsKICAgIGludCBkZWNpUG9pbnRTaXplKCkgY29uc3Q7Cgpwcml2YXRlOgog
ICAgUUZvbnQoIFFGb250RGF0YSAqICk7CiAgICB2b2lkIGluaXQoKTsKICAgIHZvaWQgZGV0YWNo
KCk7CiAgICB2b2lkIGluaXRGb250SW5mbygpIGNvbnN0OwogICAgdm9pZCBsb2FkKCkgY29uc3Q7
CiMgMjIxICJrZXJuZWwvcWZvbnQuaCIKICAgIGZyaWVuZCBjbGFzcyBRRm9udF9Qcml2YXRlOwog
ICAgZnJpZW5kIGNsYXNzIFFGb250SW50ZXJuYWw7CiAgICBmcmllbmQgY2xhc3MgUUZvbnRNZXRy
aWNzOwogICAgZnJpZW5kIGNsYXNzIFFGb250SW5mbzsKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRl
cjsKCiAgICBmcmllbmQgdm9pZCAqIHF0X2Z0X2ZvbnQgKGNvbnN0IFFGb250ICpmKTsKCgoKICAg
IGZyaWVuZCBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUZv
bnQgJiApOwogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAm
LCBRRm9udCAmICk7CgogICAgUUZvbnREYXRhICpkOwogICAgc3RhdGljIENoYXJTZXQgZGVmYXVs
dENoYXJTZXQ7Cn07CgppbmxpbmUgYm9vbCBRRm9udDo6Ym9sZCgpIGNvbnN0CnsgcmV0dXJuIHdl
aWdodCgpID4gTm9ybWFsOyB9CgppbmxpbmUgdm9pZCBRRm9udDo6c2V0Qm9sZCggYm9vbCBlbmFi
bGUgKQp7IHNldFdlaWdodCggZW5hYmxlID8gQm9sZCA6IE5vcm1hbCApOyB9CgoKCgoKCgogICAg
ICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUZvbnQg
JiApOwogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUZv
bnQgJiApOwojIDQ4ICJrZXJuZWwvcXdpZGdldC5oIiAyCiMgMSAia2VybmVsL3Fmb250bWV0cmlj
cy5oIiAxCiMgNDIgImtlcm5lbC9xZm9udG1ldHJpY3MuaCIKIyAxICJrZXJuZWwvcWZvbnQuaCIg
MQojIDQzICJrZXJuZWwvcWZvbnRtZXRyaWNzLmgiIDIKIyAxICJrZXJuZWwvcXJlY3QuaCIgMQoj
IDQ0ICJrZXJuZWwvcWZvbnRtZXRyaWNzLmgiIDIKCgpjbGFzcyBRVGV4dENvZGVjOwoKCmNsYXNz
IFFGb250TWV0cmljcwp7CnB1YmxpYzoKICAgIFFGb250TWV0cmljcyggY29uc3QgUUZvbnQgJiAp
OwogICAgUUZvbnRNZXRyaWNzKCBjb25zdCBRRm9udE1ldHJpY3MgJiApOwogICB+UUZvbnRNZXRy
aWNzKCk7CgogICAgUUZvbnRNZXRyaWNzICZvcGVyYXRvcj0oIGNvbnN0IFFGb250TWV0cmljcyAm
ICk7CgogICAgaW50IGFzY2VudCgpIGNvbnN0OwogICAgaW50IGRlc2NlbnQoKSBjb25zdDsKICAg
IGludCBoZWlnaHQoKSBjb25zdDsKICAgIGludCBsZWFkaW5nKCkgY29uc3Q7CiAgICBpbnQgbGlu
ZVNwYWNpbmcoKSBjb25zdDsKICAgIGludCBtaW5MZWZ0QmVhcmluZygpIGNvbnN0OwogICAgaW50
IG1pblJpZ2h0QmVhcmluZygpIGNvbnN0OwogICAgaW50IG1heFdpZHRoKCkgY29uc3Q7CgogICAg
Ym9vbCBpbkZvbnQoUUNoYXIpIGNvbnN0OwoKICAgIGludCBsZWZ0QmVhcmluZyhRQ2hhcikgY29u
c3Q7CiAgICBpbnQgcmlnaHRCZWFyaW5nKFFDaGFyKSBjb25zdDsKICAgIGludCB3aWR0aCggY29u
c3QgUVN0cmluZyAmLCBpbnQgbGVuID0gLTEgKSBjb25zdDsKICAgIGludCB3aWR0aCggUUNoYXIg
KSBjb25zdDsKICAgIGludCB3aWR0aCggY2hhciBjICkgY29uc3QgeyByZXR1cm4gd2lkdGgoIChR
Q2hhcikgYyApOyB9CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIGNvbnN0IFFTdHJpbmcgJiwgaW50
IGxlbiA9IC0xICkgY29uc3Q7CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIFFDaGFyICkgY29uc3Q7
CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQg
ZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIHN0ciwg
aW50IGxlbj0tMSwgaW50IHRhYnN0b3BzPTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCAqdGFiYXJyYXk9MCwgY2hhciAqKmludGVybj0wICkgY29uc3Q7CiAgICBRU2l6ZSBzaXpl
KCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBzdHIsIGlu
dCBsZW49LTEsIGludCB0YWJzdG9wcz0wLAogICAgICAgICAgICAgICAgICAgICAgaW50ICp0YWJh
cnJheT0wLCBjaGFyICoqaW50ZXJuPTAgKSBjb25zdDsKCiAgICBpbnQgdW5kZXJsaW5lUG9zKCkg
Y29uc3Q7CiAgICBpbnQgc3RyaWtlT3V0UG9zKCkgY29uc3Q7CiAgICBpbnQgbGluZVdpZHRoKCkg
Y29uc3Q7Cgpwcml2YXRlOgogICAgUUZvbnRNZXRyaWNzKCBjb25zdCBRUGFpbnRlciAqICk7CiAg
ICBzdGF0aWMgdm9pZCByZXNldCggY29uc3QgUVBhaW50ZXIgKiApOwogICAgY29uc3QgUUZvbnRE
ZWYgKnNwZWMoKSBjb25zdDsKCgoKCgogICAgdm9pZCAqZm9udFN0cnVjdCgpIGNvbnN0OwogICAg
dm9pZCAqZm9udFNldCgpIGNvbnN0OwogICAgY29uc3QgUVRleHRDb2RlYyAqbWFwcGVyKCkgY29u
c3Q7CiAgICBpbnQgcHJpbnRlckFkanVzdGVkKGludCkgY29uc3Q7CgoKCgogICAgZnJpZW5kIGNs
YXNzIFFXaWRnZXQ7CiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7CgogICAgUUZvbnRJbnRlcm5h
bCAqZmluOwogICAgUVBhaW50ZXIgKnBhaW50ZXI7CiAgICBpbnQgZmxhZ3M7CgogICAgYm9vbCB1
bmRlcmxpbmVGbGFnKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgMHgxKSAhPSAwOyB9CiAgICBi
b29sIHN0cmlrZU91dEZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiAweDIpICE9IDA7IH0K
ICAgIHZvaWQgc2V0VW5kZXJsaW5lRmxhZygpIHsgZmxhZ3MgfD0gMHgxOyB9CiAgICB2b2lkIHNl
dFN0cmlrZU91dEZsYWcoKSB7IGZsYWdzIHw9IDB4MjsgfQp9OwojIDQ5ICJrZXJuZWwvcXdpZGdl
dC5oIiAyCiMgMSAia2VybmVsL3Fmb250aW5mby5oIiAxCiMgNDIgImtlcm5lbC9xZm9udGluZm8u
aCIKIyAxICJrZXJuZWwvcWZvbnQuaCIgMQojIDQzICJrZXJuZWwvcWZvbnRpbmZvLmgiIDIKCgoK
Y2xhc3MgUUZvbnRJbmZvCnsKcHVibGljOgogICAgUUZvbnRJbmZvKCBjb25zdCBRRm9udCAmICk7
CiAgICBRRm9udEluZm8oIGNvbnN0IFFGb250SW5mbyAmICk7CiAgIH5RRm9udEluZm8oKTsKCiAg
ICBRRm9udEluZm8gJm9wZXJhdG9yPSggY29uc3QgUUZvbnRJbmZvICYgKTsKCiAgICBRU3RyaW5n
IGZhbWlseSgpIGNvbnN0OwogICAgaW50IHBvaW50U2l6ZSgpIGNvbnN0OwogICAgYm9vbCBpdGFs
aWMoKSBjb25zdDsKICAgIGludCB3ZWlnaHQoKSBjb25zdDsKICAgIGJvb2wgYm9sZCgpIGNvbnN0
OwogICAgYm9vbCB1bmRlcmxpbmUoKSBjb25zdDsKICAgIGJvb2wgc3RyaWtlT3V0KCkgY29uc3Q7
CiAgICBib29sIGZpeGVkUGl0Y2goKSBjb25zdDsKICAgIFFGb250OjpTdHlsZUhpbnQgc3R5bGVI
aW50KCkgY29uc3Q7CiAgICBRRm9udDo6Q2hhclNldCBjaGFyU2V0KCkgY29uc3Q7CiAgICBib29s
IHJhd01vZGUoKSBjb25zdDsKCiAgICBib29sIGV4YWN0TWF0Y2goKSBjb25zdDsKCgogICAgY29u
c3QgUUZvbnQgJmZvbnQoKSBjb25zdDsKCgpwcml2YXRlOgogICAgUUZvbnRJbmZvKCBjb25zdCBR
UGFpbnRlciAqICk7CiAgICBzdGF0aWMgdm9pZCByZXNldCggY29uc3QgUVBhaW50ZXIgKiApOwog
ICAgY29uc3QgUUZvbnREZWYgKnNwZWMoKSBjb25zdDsKCiAgICBRRm9udEludGVybmFsICpmaW47
CiAgICBRUGFpbnRlciAqcGFpbnRlcjsKICAgIGludCBmbGFnczsKCiAgICBib29sIHVuZGVybGlu
ZUZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiAweDEpICE9IDA7IH0KICAgIGJvb2wgc3Ry
aWtlT3V0RmxhZygpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIDB4MikgIT0gMDsgfQogICAgYm9v
bCBleGFjdE1hdGNoRmxhZygpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIDB4NCkgIT0gMDsgfQog
ICAgdm9pZCBzZXRVbmRlcmxpbmVGbGFnKCkgeyBmbGFncyB8PSAweDE7IH0KICAgIHZvaWQgc2V0
U3RyaWtlT3V0RmxhZygpIHsgZmxhZ3MgfD0gMHgyOyB9CiAgICB2b2lkIHNldEV4YWN0TWF0Y2hG
bGFnKCkgeyBmbGFncyB8PSAweDQ7IH0KCiAgICBmcmllbmQgY2xhc3MgUVdpZGdldDsKICAgIGZy
aWVuZCBjbGFzcyBRUGFpbnRlcjsKfTsKCgppbmxpbmUgYm9vbCBRRm9udEluZm86OmJvbGQoKSBj
b25zdAp7IHJldHVybiB3ZWlnaHQoKSA+IFFGb250OjpOb3JtYWw7IH0KIyA1MCAia2VybmVsL3F3
aWRnZXQuaCIgMgojIDEgImtlcm5lbC9xc3R5bGUuaCIgMQojIDQxICJrZXJuZWwvcXN0eWxlLmgi
CiMgMSAia2VybmVsL3F3aW5kb3dkZWZzLmgiIDEKIyA0MiAia2VybmVsL3FzdHlsZS5oIiAyCiMg
MSAia2VybmVsL3FvYmplY3QuaCIgMQojIDQzICJrZXJuZWwvcXN0eWxlLmgiIDIKCgoKY2xhc3Mg
UUJ1dHRvbjsKY2xhc3MgUVB1c2hCdXR0b247CmNsYXNzIFFTY3JvbGxCYXI7CmNsYXNzIFFUYWJC
YXI7CmNsYXNzIFFUYWI7CmNsYXNzIFFQb3B1cE1lbnU7CmNsYXNzIFFNZW51SXRlbTsKY2xhc3Mg
UVRvb2xCdXR0b247CgpjbGFzcyBRU3R5bGU6IHB1YmxpYyBRT2JqZWN0CnsKICAgIHB1YmxpYzog
UU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0
KCk7IH0gY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHN0YXRpYyBRTWV0YU9iamVjdCog
c3RhdGljTWV0YU9iamVjdCgpOyBzdGF0aWMgUVN0cmluZyB0cihjb25zdCBjaGFyKik7IHN0YXRp
YyBRU3RyaW5nIHRyKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7IHByb3RlY3RlZDogdm9pZCBp
bml0TWV0YU9iamVjdCgpOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAg
ICBHVUlTdHlsZSBnczsKCnByaXZhdGU6CiAgICBRU3R5bGUoR1VJU3R5bGUpOwogICAgUVN0eWxl
KCk7CiAgICBmcmllbmQgY2xhc3MgUUNvbW1vblN0eWxlOwoKcHVibGljOgogICAgdmlydHVhbCB+
UVN0eWxlKCk7CgoKICAgIG9wZXJhdG9yIEdVSVN0eWxlKCkgY29uc3QgeyByZXR1cm4gZ3M7IH0K
ICAgIGludCBvcGVyYXRvcj09KEdVSVN0eWxlIHMpIGNvbnN0IHsgcmV0dXJuIGdzPT1zOyB9CiAg
ICBpbnQgb3BlcmF0b3IhPShHVUlTdHlsZSBzKSBjb25zdCB7IHJldHVybiBncyE9czsgfQoKCiAg
ICBHVUlTdHlsZSBndWlTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGdzOyB9CgoKCiAgICB2aXJ0dWFs
IHZvaWQgcG9saXNoKCBRV2lkZ2V0KiApOwogICAgdmlydHVhbCB2b2lkIHVuUG9saXNoKCBRV2lk
Z2V0KiApOwoKICAgIHZpcnR1YWwgdm9pZCBwb2xpc2goIFFBcHBsaWNhdGlvbiopOwogICAgdmly
dHVhbCB2b2lkIHVuUG9saXNoKCBRQXBwbGljYXRpb24qKTsKCiAgICB2aXJ0dWFsIHZvaWQgcG9s
aXNoKCBRUGFsZXR0ZSYpOwoKICAgIHZpcnR1YWwgUVJlY3QgaXRlbVJlY3QoIFFQYWludGVyICpw
LCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICBpbnQgZmxh
Z3MsIGJvb2wgZW5hYmxlZCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBRUGl4bWFwICpwaXht
YXAsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgdGV4dCwgaW50IGxlbj0tMSAp
OwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3SXRlbSggUVBhaW50ZXIgKnAsIGludCB4LCBpbnQgeSwg
aW50IHcsIGludCBoLAogICAgICAgICAgICAgICAgICAgIGludCBmbGFncywgY29uc3QgUUNvbG9y
R3JvdXAgJmcsIGJvb2wgZW5hYmxlZCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBRUGl4bWFw
ICpwaXhtYXAsIGNvbnN0IFFTdHJpbmcmIHRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBsZW49LTEsIGNvbnN0IFFDb2xvciogcGVuQ29sb3IgPSAwICk7CgoKICAgIHZpcnR1YWwg
dm9pZCBkcmF3U2VwYXJhdG9yKCBRUGFpbnRlciAqcCwgaW50IHgxLCBpbnQgeTEsIGludCB4Miwg
aW50IHkyLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ29sb3JHcm91cCAmZywgYm9vbCBz
dW5rZW4gPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICBpbnQgbGluZVdpZHRoID0gMSwgaW50
IG1pZExpbmVXaWR0aCA9IDAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoIFFQYWludGVy
ICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICBjb25z
dCBRQ29sb3IgJiwgaW50IGxpbmVXaWR0aCA9IDEsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UUJydXNoICpmaWxsID0gMCApOwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdFN0cm9uZyggUVBh
aW50ZXIgKnAsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRQ29sb3JHcm91cCAmLCBib29sIHN1bmtlbj1GQUxTRSwKICAgICAgICAgICAgICAg
ICAgICAgaW50IGxpbmVXaWR0aCA9IDEsIGludCBtaWRMaW5lV2lkdGggPSAwLAogICAgICAgICAg
ICAgICAgICAgICBjb25zdCBRQnJ1c2ggKmZpbGwgPSAwICk7CgogICAgdmlydHVhbCB2b2lkIGRy
YXdCdXR0b24oIFFQYWludGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yR3JvdXAgJmcsIGJvb2wgc3Vua2VuID0gRkFMU0Us
CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFCcnVzaCAqZmlsbCA9IDAgKSA9IDA7CgogICAg
dmlydHVhbCBRUmVjdCBidXR0b25SZWN0KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCk7Cgog
ICAgdmlydHVhbCB2b2lkIGRyYXdCdXR0b25NYXNrKCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5
LCBpbnQgdywgaW50IGgpOwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3QmV2ZWxCdXR0b24oIFFQYWlu
dGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUUNvbG9yR3JvdXAgJmcsIGJvb2wgc3Vua2VuID0gRkFMU0UsCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFFCcnVzaCAqZmlsbCA9IDAgKSA9IDA7CgogICAgUVJlY3QgYmV2ZWxCdXR0
b25SZWN0KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCk7CgogICAgdmlydHVhbCB2b2lkIGRy
YXdUb29sQnV0dG9uKCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZnLCBib29sIHN1bmtlbiA9IEZB
TFNFLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBRQnJ1c2ggKmZpbGwgPSAwICk7CiAgICB2
b2lkIGRyYXdUb29sQnV0dG9uKCBRVG9vbEJ1dHRvbiogYnRuLCBRUGFpbnRlciAqcCk7CgogICAg
UVJlY3QgdG9vbEJ1dHRvblJlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKTsKCiAgICB2
aXJ0dWFsIHZvaWQgZHJhd1BhbmVsKCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQgdywg
aW50IGgsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yR3JvdXAgJiwgYm9vbCBzdW5r
ZW49RkFMU0UsCiAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVXaWR0aCA9IDEsIGNvbnN0IFFC
cnVzaCAqZmlsbCA9IDAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgZHJhd1BvcHVwUGFuZWwoIFFQYWlu
dGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUUNvbG9yR3JvdXAgJiwgaW50IGxpbmVXaWR0aCA9IDIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFCcnVzaCAqZmlsbCA9IDAgKTsKCiAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0Fycm93KCBRUGFpbnRlciAqcCwgUXQ6OkFycm93VHlwZSB0eXBl
LCBib29sIGRvd24sCiAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGlu
dCBoLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ29sb3JHcm91cCAmZywgYm9vbCBlbmFi
bGVkLCBjb25zdCBRQnJ1c2ggKmZpbGwgPSAwICkgPSAwOwoKCiAgICB2aXJ0dWFsIFFTaXplIGV4
Y2x1c2l2ZUluZGljYXRvclNpemUoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd0V4
Y2x1c2l2ZUluZGljYXRvciggUVBhaW50ZXIqIHAsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBo
LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZnLCBib29sIG9uLCBib29s
IGRvd24gPSBGQUxTRSwgYm9vbCBlbmFibGVkID0gVFJVRSApID0gMDsKICAgIHZpcnR1YWwgdm9p
ZCBkcmF3RXhjbHVzaXZlSW5kaWNhdG9yTWFzayggUVBhaW50ZXIgKnAsIGludCB4LCBpbnQgeSwg
aW50IHcsIGludCBoLCBib29sIG9uKTsKCgogICAgdmlydHVhbCBRU2l6ZSBpbmRpY2F0b3JTaXpl
KCkgY29uc3QgPSAwOwogICAgdmlydHVhbCB2b2lkIGRyYXdJbmRpY2F0b3IoIFFQYWludGVyKiBw
LCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgY29uc3QgUUNvbG9yR3JvdXAgJmcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXRlLCBib29sIGRvd24gPSBGQUxTRSwg
Ym9vbCBlbmFibGVkID0gVFJVRSApID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkcmF3SW5kaWNhdG9y
TWFzayggUVBhaW50ZXIgKnAsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQgc3RhdGUp
OwoKCgogICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JlY3QoIFFQYWludGVyKiwgY29uc3QgUVJl
Y3QgJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ29sb3JHcm91cCAm
LCBjb25zdCBRQ29sb3IqIGJnID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sID0gRkFMU0UgKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29tYm9CdXR0b24o
IFFQYWludGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZnLCBib29sIHN1bmtlbiA9IEZB
TFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlZGl0YWJsZSA9IEZB
TFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlbmFibGVkID0gVFJV
RSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFCcnVzaCAqZmlsbCA9
IDAgKSA9IDA7CiAgICB2aXJ0dWFsIFFSZWN0IGNvbWJvQnV0dG9uUmVjdCggaW50IHgsIGludCB5
LAogICAgICAgICAgICAgICAgICAgIGludCB3LCBpbnQgaCkgPSAwOwogICAgdmlydHVhbCBRUmVj
dCBjb21ib0J1dHRvbkZvY3VzUmVjdCggaW50IHgsIGludCB5LAogICAgICAgICAgICAgICAgICAg
IGludCB3LCBpbnQgaCkgPSAwOwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29tYm9CdXR0b25NYXNr
KCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpID0gMDsKCgogICAgdmly
dHVhbCB2b2lkIGRyYXdQdXNoQnV0dG9uKCBRUHVzaEJ1dHRvbiogYnRuLCBRUGFpbnRlciAqcCkg
PSAwOwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3UHVzaEJ1dHRvbkxhYmVsKCBRUHVzaEJ1dHRvbiog
YnRuLCBRUGFpbnRlciAqcCkgPSAwOwogICAgUVJlY3QgcHVzaEJ1dHRvbkNvbnRlbnRzUmVjdCgg
UVB1c2hCdXR0b24qIGJ0biApOwogICAgaW50IG1lbnVCdXR0b25JbmRpY2F0b3JXaWR0aCggaW50
IGggKTsKICAgIHZpcnR1YWwgdm9pZCBnZXRCdXR0b25TaGlmdCggaW50ICZ4LCBpbnQgJnkpID0g
MDsKCgogICAgdmlydHVhbCBpbnQgZGVmYXVsdEZyYW1lV2lkdGgoKSBjb25zdCA9IDA7CgoKICAg
IHZpcnR1YWwgdm9pZCB0YWJiYXJNZXRyaWNzKCBjb25zdCBRVGFiQmFyKiwKICAgICAgICAgICAg
ICAgICAgICBpbnQmLCBpbnQmLCBpbnQmICkgPSAwOwogICAgdmlydHVhbCB2b2lkIGRyYXdUYWIo
IFFQYWludGVyKiwgY29uc3QgUVRhYkJhciosIFFUYWIqLCBib29sIHNlbGVjdGVkICkgPSAwOwog
ICAgdmlydHVhbCB2b2lkIGRyYXdUYWJNYXNrKCBRUGFpbnRlciosIGNvbnN0IFFUYWJCYXIqLCBR
VGFiKiwgYm9vbCBzZWxlY3RlZCApID0gMDsKCgogICAgZW51bSBTY3JvbGxDb250cm9sIHsgQWRk
TGluZSA9IDB4MSAsIFN1YkxpbmUgPSAweDIgLCBBZGRQYWdlID0gMHg0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgU3ViUGFnZSA9IDB4OCAsIEZpcnN0ID0gMHgxMCwgTGFzdCA9IDB4MjAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBTbGlkZXIgPSAweDQwLCBOb1Njcm9sbCA9IDB4ODAgfTsK
CiAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQmFyTWV0cmljcyggY29uc3QgUVNjcm9sbEJhciosCiAg
ICAgICAgICAgICAgICAgICAgaW50JiwgaW50JiwgaW50JiwgaW50JikgPSAwOwogICAgdmlydHVh
bCB2b2lkIGRyYXdTY3JvbGxCYXJDb250cm9scyggUVBhaW50ZXIqLCBjb25zdCBRU2Nyb2xsQmFy
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzbGlkZXJTdGFy
dCwgdWludCBjb250cm9scywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQgYWN0aXZlQ29udHJvbCApID0gMDsKICAgIHZpcnR1YWwgU2Nyb2xsQ29udHJvbCBzY3Jv
bGxCYXJQb2ludE92ZXIoIGNvbnN0IFFTY3JvbGxCYXIqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IHNsaWRlclN0YXJ0LCBjb25zdCBRUG9pbnQmICkgPSAwOwoK
CiAgICB2aXJ0dWFsIGludCBzbGlkZXJMZW5ndGgoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZv
aWQgZHJhd1NsaWRlciggUVBhaW50ZXIgKnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUUNvbG9yR3JvdXAgJmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JpZW50
YXRpb24sIGJvb2wgdGlja0Fib3ZlLCBib29sIHRpY2tCZWxvdykgPSAwOwoKICAgIHZpcnR1YWwg
dm9pZCBkcmF3U2xpZGVyTWFzayggUVBhaW50ZXIgKnAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPcmllbnRhdGlvbiwgYm9vbCB0aWNrQWJvdmUsIGJvb2wgdGlja0JlbG93
KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd1NsaWRlckdyb292ZSggUVBhaW50ZXIgKnAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50
IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yR3JvdXAm
IGcsIFFDT09SRCBjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yaWVudGF0
aW9uICkgPSAwOwogICAgdmlydHVhbCB2b2lkIGRyYXdTbGlkZXJHcm9vdmVNYXNrKCBRUGFpbnRl
ciAqcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5
LCBpbnQgdywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFD
T09SRCBjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmllbnRhdGlv
biApID0gMDsKICAgIHZpcnR1YWwgaW50IG1heGltdW1TbGlkZXJEcmFnRGlzdGFuY2UoKSBjb25z
dCA9IDA7CgogICAgdmlydHVhbCBpbnQgc3BsaXR0ZXJXaWR0aCgpIGNvbnN0ID0gMDsKICAgIHZp
cnR1YWwgdm9pZCBkcmF3U3BsaXR0ZXIoIFFQYWludGVyICpwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZnLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9yaWVudGF0aW9uKSA9IDA7CgogICAgdmlydHVhbCB2b2lkIGRyYXdDaGVja01hcmsoIFFQ
YWludGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBRQ29sb3JHcm91cCAmZywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGFjdCwgYm9vbCBkaXMgKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgcG9s
aXNoUG9wdXBNZW51KCBRUG9wdXBNZW51KiApID0gMDsKCiAgICB2aXJ0dWFsIGludCBleHRyYVBv
cHVwTWVudUl0ZW1XaWR0aCggYm9vbCBjaGVja2FibGUsIGludCBtYXhwbXcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUU1lbnVJdGVtKiBtaSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBRRm9udE1ldHJpY3MmIGZtICkgPSAwOwogICAgdmlydHVhbCBpbnQg
cG9wdXBTdWJtZW51SW5kaWNhdG9yV2lkdGgoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUUZvbnRNZXRyaWNzJiBmbSApID0gMDsKICAgIHZpcnR1YWwgaW50IHBvcHVwTWVu
dUl0ZW1IZWlnaHQoIGJvb2wgY2hlY2thYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFFNZW51SXRlbSogbWksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UUZvbnRNZXRyaWNzJiBmbSApID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkcmF3UG9wdXBNZW51SXRl
bSggUVBhaW50ZXIqIHAsIGJvb2wgY2hlY2thYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgbWF4cG13LCBpbnQgdGFiLCBRTWVudUl0ZW0qIG1pLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRUGFsZXR0ZSYgcGFsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjdCwgYm9vbCBlbmFibGVkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkg
PSAwOwogICAgdm9pZCBkcmF3TWVudUJhckl0ZW0oIFFQYWludGVyKiBwLCBpbnQgeCwgaW50IHks
IGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUU1lbnVJ
dGVtKiBtaSwgUUNvbG9yR3JvdXAmIGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgZW5hYmxlZCwgYm9vbCBhY3RpdmUgKTsKCgogICAgUVNpemUgc2Nyb2xsQmFyRXh0
ZW50KCk7CiAgICBpbnQgYnV0dG9uRGVmYXVsdEluZGljYXRvcldpZHRoKCkgY29uc3Q7CiAgICBp
bnQgYnV0dG9uTWFyZ2luKCkgY29uc3Q7CiAgICBpbnQgdG9vbEJhckhhbmRsZUV4dGVudCgpIGNv
bnN0OwogICAgaW50IHRvb2xCYXJIYW5kbGVFeHRlbmQoKSBjb25zdDsKICAgIGludCBzbGlkZXJU
aGlja25lc3MoKSBjb25zdCA7CiAgICB2b2lkIGRyYXdUb29sQmFySGFuZGxlKCBRUGFpbnRlciAq
cCwgY29uc3QgUVJlY3QgJnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdDo6T3JpZW50
YXRpb24gb3JpZW50YXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhpZ2hs
aWdodCwgY29uc3QgUUNvbG9yR3JvdXAgJmNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBkcmF3Qm9yZGVyID0gRkFMU0UgKTsKCnByb3RlY3RlZDoKICAgIHZvaWQgc2V0U2Nyb2xs
QmFyRXh0ZW50KCBpbnQgdywgaW50IGg9LTEgKTsKICAgIHZvaWQgc2V0QnV0dG9uRGVmYXVsdElu
ZGljYXRvcldpZHRoKCBpbnQgdyApOwogICAgdm9pZCBzZXRCdXR0b25NYXJnaW4oIGludCB3ICk7
CiAgICB2b2lkIHNldFNsaWRlclRoaWNrbmVzcyhpbnQgdCk7CgoKcHJpdmF0ZToKCiAgICBRU3R5
bGUoIGNvbnN0IFFTdHlsZSAmICk7CiAgICBRU3R5bGUmIG9wZXJhdG9yPSggY29uc3QgUVN0eWxl
ICYgKTsKCn07CiMgNTEgImtlcm5lbC9xd2lkZ2V0LmgiIDIKIyAxICJrZXJuZWwvcXNpemVwb2xp
Y3kuaCIgMQojIDUyICJrZXJuZWwvcXdpZGdldC5oIiAyCgoKY2xhc3MgUUxheW91dDsKc3RydWN0
IFFXRXh0cmE7CnN0cnVjdCBRVExXRXh0cmE7CmNsYXNzIFFGb2N1c0RhdGE7CmNsYXNzIFFTdHls
ZTsKY2xhc3MgUVdTUmVnaW9uTWFuYWdlcjsKCmNsYXNzIFFXaWRnZXQgOiBwdWJsaWMgUU9iamVj
dCwgcHVibGljIFFQYWludERldmljZQp7CiAgICBwdWJsaWM6IFFNZXRhT2JqZWN0ICptZXRhT2Jq
ZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IGNvbnN0IGNoYXIgKmNs
YXNzTmFtZSgpIGNvbnN0OyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsg
c3RhdGljIFFTdHJpbmcgdHIoY29uc3QgY2hhciopOyBzdGF0aWMgUVN0cmluZyB0cihjb25zdCBj
aGFyKiwgY29uc3QgY2hhciopOyBwcm90ZWN0ZWQ6IHZvaWQgaW5pdE1ldGFPYmplY3QoKTsgcHJp
dmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwojIDEyNSAia2VybmVsL3F3aWRnZXQu
aCIKcHVibGljOgogICAgUVdpZGdldCggUVdpZGdldCAqcGFyZW50PTAsIGNvbnN0IGNoYXIgKm5h
bWU9MCwgV0ZsYWdzIGY9MCApOwogICAgflFXaWRnZXQoKTsKCiAgICBXSWQgd2luSWQoKSBjb25z
dDsKICAgIHZvaWQgc2V0TmFtZSggY29uc3QgY2hhciAqbmFtZSApOwoKCgogICAgUVN0eWxlICZz
dHlsZSgpIGNvbnN0OwogICAgdm9pZCBzZXRTdHlsZSggUVN0eWxlICogKTsKCgoKICAgIGJvb2wg
aXNUb3BMZXZlbCgpIGNvbnN0OwogICAgYm9vbCBpc01vZGFsKCkgY29uc3Q7CiAgICBib29sIGlz
UG9wdXAoKSBjb25zdDsKICAgIGJvb2wgaXNEZXNrdG9wKCkgY29uc3Q7CgogICAgYm9vbCBpc0Vu
YWJsZWQoKSBjb25zdDsKICAgIGJvb2wgaXNFbmFibGVkVG8oUVdpZGdldCopIGNvbnN0OwogICAg
Ym9vbCBpc0VuYWJsZWRUb1RMVygpIGNvbnN0OwoKcHVibGljIDoKICAgIHZpcnR1YWwgdm9pZCBz
ZXRFbmFibGVkKCBib29sICk7CiAgICB2b2lkIHNldERpc2FibGVkKCBib29sICk7CgoKCnB1Ymxp
YzoKICAgIFFSZWN0IGZyYW1lR2VvbWV0cnkoKSBjb25zdDsKICAgIGNvbnN0IFFSZWN0ICZnZW9t
ZXRyeSgpIGNvbnN0OwogICAgaW50IHgoKSBjb25zdDsKICAgIGludCB5KCkgY29uc3Q7CiAgICBR
UG9pbnQgcG9zKCkgY29uc3Q7CiAgICBRU2l6ZSBmcmFtZVNpemUoKSBjb25zdDsKICAgIFFTaXpl
IHNpemUoKSBjb25zdDsKICAgIGludCB3aWR0aCgpIGNvbnN0OwogICAgaW50IGhlaWdodCgpIGNv
bnN0OwogICAgUVJlY3QgcmVjdCgpIGNvbnN0OwogICAgUVJlY3QgY2hpbGRyZW5SZWN0KCkgY29u
c3Q7CiAgICBRUmVnaW9uIGNoaWxkcmVuUmVnaW9uKCkgY29uc3Q7CgogICAgUVNpemUgbWluaW11
bVNpemUoKSBjb25zdDsKICAgIFFTaXplIG1heGltdW1TaXplKCkgY29uc3Q7CiAgICBpbnQgbWlu
aW11bVdpZHRoKCkgY29uc3Q7CiAgICBpbnQgbWluaW11bUhlaWdodCgpIGNvbnN0OwogICAgaW50
IG1heGltdW1XaWR0aCgpIGNvbnN0OwogICAgaW50IG1heGltdW1IZWlnaHQoKSBjb25zdDsKICAg
IHZvaWQgc2V0TWluaW11bVNpemUoIGNvbnN0IFFTaXplICYgKTsKICAgIHZpcnR1YWwgdm9pZCBz
ZXRNaW5pbXVtU2l6ZSggaW50IG1pbncsIGludCBtaW5oICk7CiAgICB2b2lkIHNldE1heGltdW1T
aXplKCBjb25zdCBRU2l6ZSAmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0TWF4aW11bVNpemUoIGlu
dCBtYXh3LCBpbnQgbWF4aCApOwogICAgdm9pZCBzZXRNaW5pbXVtV2lkdGgoIGludCBtaW53ICk7
CiAgICB2b2lkIHNldE1pbmltdW1IZWlnaHQoIGludCBtaW5oICk7CiAgICB2b2lkIHNldE1heGlt
dW1XaWR0aCggaW50IG1heHcgKTsKICAgIHZvaWQgc2V0TWF4aW11bUhlaWdodCggaW50IG1heGgg
KTsKCiAgICBRU2l6ZSBzaXplSW5jcmVtZW50KCkgY29uc3Q7CiAgICB2b2lkIHNldFNpemVJbmNy
ZW1lbnQoIGNvbnN0IFFTaXplICYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplSW5jcmVtZW50
KCBpbnQgdywgaW50IGggKTsKICAgIFFTaXplIGJhc2VTaXplKCkgY29uc3Q7CiAgICB2b2lkIHNl
dEJhc2VTaXplKCBjb25zdCBRU2l6ZSAmICk7CiAgICB2b2lkIHNldEJhc2VTaXplKCBpbnQgYmFz
ZXcsIGludCBiYXNlaCApOwoKICAgIHZvaWQgc2V0Rml4ZWRTaXplKCBjb25zdCBRU2l6ZSAmICk7
CiAgICB2b2lkIHNldEZpeGVkU2l6ZSggaW50IHcsIGludCBoICk7CiAgICB2b2lkIHNldEZpeGVk
V2lkdGgoIGludCB3ICk7CiAgICB2b2lkIHNldEZpeGVkSGVpZ2h0KCBpbnQgaCApOwoKCgogICAg
UVBvaW50IG1hcFRvR2xvYmFsKCBjb25zdCBRUG9pbnQgJiApIGNvbnN0OwogICAgUVBvaW50IG1h
cEZyb21HbG9iYWwoIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAgICBRUG9pbnQgbWFwVG9QYXJl
bnQoIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAgICBRUG9pbnQgbWFwRnJvbVBhcmVudCggY29u
c3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFQb2ludCBtYXBUbyggUVdpZGdldCAqLCBjb25zdCBR
UG9pbnQgJiApIGNvbnN0OwogICAgUVBvaW50IG1hcEZyb20oIFFXaWRnZXQgKiwgY29uc3QgUVBv
aW50ICYgKSBjb25zdDsKCiAgICBRV2lkZ2V0ICp0b3BMZXZlbFdpZGdldCgpIGNvbnN0OwoKCgog
ICAgZW51bSBCYWNrZ3JvdW5kTW9kZSB7IEZpeGVkQ29sb3IsIEZpeGVkUGl4bWFwLCBOb0JhY2tn
cm91bmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUGFsZXR0ZUZvcmVncm91bmQsIFBhbGV0
dGVCdXR0b24sIFBhbGV0dGVMaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICBQYWxldHRl
TWlkbGlnaHQsIFBhbGV0dGVEYXJrLCBQYWxldHRlTWlkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIFBhbGV0dGVUZXh0LCBQYWxldHRlQnJpZ2h0VGV4dCwgUGFsZXR0ZUJhc2UsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGFsZXR0ZUJhY2tncm91bmQsIFBhbGV0dGVTaGFkb3csIFBhbGV0
dGVIaWdobGlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUGFsZXR0ZUhpZ2hsaWdodGVk
VGV4dCwgUGFsZXR0ZUJ1dHRvblRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgWDExUGFy
ZW50UmVsYXRpdmUgfTsKCiAgICBCYWNrZ3JvdW5kTW9kZSBiYWNrZ3JvdW5kTW9kZSgpIGNvbnN0
OwogICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRNb2RlKCBCYWNrZ3JvdW5kTW9kZSApOwoK
ICAgIGNvbnN0IFFDb2xvciAmIGJhY2tncm91bmRDb2xvcigpIGNvbnN0OwogICAgY29uc3QgUUNv
bG9yICYgZm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dy
b3VuZENvbG9yKCBjb25zdCBRQ29sb3IgJiApOwoKICAgIGNvbnN0IFFQaXhtYXAgKiBiYWNrZ3Jv
dW5kUGl4bWFwKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZFBpeG1hcCgg
Y29uc3QgUVBpeG1hcCAmICk7CgoKICAgIGNvbnN0IFFDb2xvckdyb3VwICYgY29sb3JHcm91cCgp
IGNvbnN0OwogICAgY29uc3QgUVBhbGV0dGUgJiBwYWxldHRlKCkgY29uc3Q7CiAgICBib29sIG93
blBhbGV0dGUoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRQYWxldHRlKCBjb25zdCBRUGFs
ZXR0ZSAmICk7CiAgICB2b2lkIHVuc2V0UGFsZXR0ZSgpOwoKICAgIFFGb250IGZvbnQoKSBjb25z
dDsKICAgIGJvb2wgb3duRm9udCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEZvbnQoIGNv
bnN0IFFGb250ICYgKTsKICAgIHZvaWQgdW5zZXRGb250KCk7CiAgICBRRm9udE1ldHJpY3MgZm9u
dE1ldHJpY3MoKSBjb25zdDsKICAgIFFGb250SW5mbyBmb250SW5mbygpIGNvbnN0OwoKICAgIGVu
dW0gUHJvcGFnYXRpb25Nb2RlIHsgTm9DaGlsZHJlbiwgQWxsQ2hpbGRyZW4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNhbWVGb250LCBTYW1lUGFsZXR0ZSA9IFNhbWVGb250IH07CgogICAg
UHJvcGFnYXRpb25Nb2RlIGZvbnRQcm9wYWdhdGlvbigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lk
IHNldEZvbnRQcm9wYWdhdGlvbiggUHJvcGFnYXRpb25Nb2RlICk7CgogICAgUHJvcGFnYXRpb25N
b2RlIHBhbGV0dGVQcm9wYWdhdGlvbigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFBhbGV0
dGVQcm9wYWdhdGlvbiggUHJvcGFnYXRpb25Nb2RlICk7CgogICAgY29uc3QgUUN1cnNvciAmY3Vy
c29yKCkgY29uc3Q7CiAgICBib29sIG93bkN1cnNvcigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lk
IHNldEN1cnNvciggY29uc3QgUUN1cnNvciAmICk7CiAgICB2aXJ0dWFsIHZvaWQgdW5zZXRDdXJz
b3IoKTsKCiAgICBRU3RyaW5nIGNhcHRpb24oKSBjb25zdDsKICAgIGNvbnN0IFFQaXhtYXAgKmlj
b24oKSBjb25zdDsKICAgIFFTdHJpbmcgaWNvblRleHQoKSBjb25zdDsKICAgIGJvb2wgaGFzTW91
c2VUcmFja2luZygpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKCBjb25zdCBRQml0
bWFwICYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKCBjb25zdCBRUmVnaW9uICYgKTsKICAg
IHZvaWQgY2xlYXJNYXNrKCk7CgpwdWJsaWMgOgogICAgdmlydHVhbCB2b2lkIHNldENhcHRpb24o
IGNvbnN0IFFTdHJpbmcgJik7CiAgICB2aXJ0dWFsIHZvaWQgc2V0SWNvbiggY29uc3QgUVBpeG1h
cCAmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0SWNvblRleHQoIGNvbnN0IFFTdHJpbmcgJik7CiAg
ICB2aXJ0dWFsIHZvaWQgc2V0TW91c2VUcmFja2luZyggYm9vbCBlbmFibGUgKTsKCgoKICAgIHZp
cnR1YWwgdm9pZCBzZXRGb2N1cygpOwogICAgdm9pZCBjbGVhckZvY3VzKCk7CgpwdWJsaWM6CiAg
ICBlbnVtIEZvY3VzUG9saWN5IHsKICAgICAgICBOb0ZvY3VzID0gMCwKICAgICAgICBUYWJGb2N1
cyA9IDB4MSwKICAgICAgICBDbGlja0ZvY3VzID0gMHgyLAogICAgICAgIFN0cm9uZ0ZvY3VzID0g
MHgzLAogICAgICAgIFdoZWVsRm9jdXMgPSAweDcKICAgIH07CgogICAgYm9vbCBpc0FjdGl2ZVdp
bmRvdygpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZVdpbmRvdygpOwogICAgYm9v
bCBpc0ZvY3VzRW5hYmxlZCgpIGNvbnN0OwoKICAgIEZvY3VzUG9saWN5IGZvY3VzUG9saWN5KCkg
Y29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXNQb2xpY3koIEZvY3VzUG9saWN5ICk7CiAg
ICBib29sIGhhc0ZvY3VzKCkgY29uc3Q7CiAgICBzdGF0aWMgdm9pZCBzZXRUYWJPcmRlciggUVdp
ZGdldCAqLCBRV2lkZ2V0ICogKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1c1Byb3h5KCBRV2lk
Z2V0ICogKTsKICAgIFFXaWRnZXQgKiBmb2N1c1Byb3h5KCkgY29uc3Q7CgoKCiAgICB2b2lkIGdy
YWJNb3VzZSgpOwoKICAgIHZvaWQgZ3JhYk1vdXNlKCBjb25zdCBRQ3Vyc29yICYgKTsKCiAgICB2
b2lkIHJlbGVhc2VNb3VzZSgpOwogICAgdm9pZCBncmFiS2V5Ym9hcmQoKTsKICAgIHZvaWQgcmVs
ZWFzZUtleWJvYXJkKCk7CiAgICBzdGF0aWMgUVdpZGdldCAqIG1vdXNlR3JhYmJlcigpOwogICAg
c3RhdGljIFFXaWRnZXQgKiBrZXlib2FyZEdyYWJiZXIoKTsKCgoKICAgIGJvb2wgaXNVcGRhdGVz
RW5hYmxlZCgpIGNvbnN0OwoKCgoKcHVibGljIDoKICAgIHZpcnR1YWwgdm9pZCBzZXRVcGRhdGVz
RW5hYmxlZCggYm9vbCBlbmFibGUgKTsKICAgIHZvaWQgdXBkYXRlKCk7CiAgICB2b2lkIHVwZGF0
ZSggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgdXBkYXRlKCBjb25zdCBR
UmVjdCYgKTsKICAgIHZvaWQgcmVwYWludCgpOwogICAgdm9pZCByZXBhaW50KCBib29sIGVyYXNl
ICk7CiAgICB2b2lkIHJlcGFpbnQoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBib29sIGVy
YXNlPVRSVUUgKTsKICAgIHZvaWQgcmVwYWludCggY29uc3QgUVJlY3QgJiwgYm9vbCBlcmFzZT1U
UlVFICk7CiAgICB2b2lkIHJlcGFpbnQoIGNvbnN0IFFSZWdpb24gJiwgYm9vbCBlcmFzZT1UUlVF
ICk7CgoKCiAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwogICAgdmlydHVhbCB2b2lkIGhpZGUoKTsK
CiAgICB2b2lkIGljb25pZnkoKSB7IHNob3dNaW5pbWl6ZWQoKTsgfQoKICAgIHZpcnR1YWwgdm9p
ZCBzaG93TWluaW1pemVkKCk7CiAgICB2aXJ0dWFsIHZvaWQgc2hvd01heGltaXplZCgpOwogICAg
dm9pZCBzaG93RnVsbFNjcmVlbigpOwogICAgdmlydHVhbCB2b2lkIHNob3dOb3JtYWwoKTsKICAg
IHZpcnR1YWwgdm9pZCBwb2xpc2goKTsKICAgIHZvaWQgY29uc3RQb2xpc2goKSBjb25zdDsKICAg
IGJvb2wgY2xvc2UoKTsKCiAgICB2b2lkIHJhaXNlKCk7CiAgICB2b2lkIGxvd2VyKCk7CiAgICB2
b2lkIHN0YWNrVW5kZXIoIFFXaWRnZXQqICk7CiAgICB2aXJ0dWFsIHZvaWQgbW92ZSggaW50IHgs
IGludCB5ICk7CiAgICB2b2lkIG1vdmUoIGNvbnN0IFFQb2ludCAmICk7CiAgICB2aXJ0dWFsIHZv
aWQgcmVzaXplKCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgcmVzaXplKCBjb25zdCBRU2l6ZSAm
ICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0R2VvbWV0cnkoIGludCB4LCBpbnQgeSwgaW50IHcsIGlu
dCBoICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0R2VvbWV0cnkoIGNvbnN0IFFSZWN0ICYgKTsKCnB1
YmxpYzoKICAgIHZpcnR1YWwgYm9vbCBjbG9zZSggYm9vbCBhbHNvRGVsZXRlICk7CiAgICBib29s
IGlzVmlzaWJsZSgpIGNvbnN0OwogICAgYm9vbCBpc1Zpc2libGVUbyhRV2lkZ2V0KikgY29uc3Q7
CiAgICBib29sIGlzVmlzaWJsZVRvVExXKCkgY29uc3Q7CiAgICBRUmVjdCB2aXNpYmxlUmVjdCgp
IGNvbnN0OwogICAgYm9vbCBpc0hpZGRlbigpIGNvbnN0OwogICAgYm9vbCBpc01pbmltaXplZCgp
IGNvbnN0OwogICAgYm9vbCBpc01heGltaXplZCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgUVNpemUg
c2l6ZUhpbnQoKSBjb25zdDsKICAgIHZpcnR1YWwgUVNpemUgbWluaW11bVNpemVIaW50KCkgY29u
c3Q7CiAgICB2aXJ0dWFsIFFTaXplUG9saWN5IHNpemVQb2xpY3koKSBjb25zdDsKICAgIHZvaWQg
c2V0U2l6ZVBvbGljeSggUVNpemVQb2xpY3kgKTsKICAgIHZpcnR1YWwgaW50IGhlaWdodEZvcldp
ZHRoKGludCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIGFkanVzdFNpemUoKTsKCiAgICBRTGF5
b3V0ICogbGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbGF5X291dDsgfQoKICAgIHZvaWQgdXBkYXRl
R2VvbWV0cnkoKTsKICAgIHZpcnR1YWwgdm9pZCByZXBhcmVudCggUVdpZGdldCAqcGFyZW50LCBX
RmxhZ3MsIGNvbnN0IFFQb2ludCAmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBzaG93SXQ9RkFMU0UgKTsKICAgIHZvaWQgcmVwYXJlbnQoIFFXaWRnZXQgKnBhcmVudCwg
Y29uc3QgUVBvaW50ICYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNo
b3dJdD1GQUxTRSApOwoKICAgIHZvaWQgcmVjcmVhdGUoIFFXaWRnZXQgKnBhcmVudCwgV0ZsYWdz
IGYsIGNvbnN0IFFQb2ludCAmIHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHNob3dJdD1GQUxTRSApCiAgICB7IHJlcGFyZW50KHBhcmVudCxmLHAsc2hvd0l0KTsgfQoK
CiAgICB2b2lkIGVyYXNlKCk7CiAgICB2b2lkIGVyYXNlKCBpbnQgeCwgaW50IHksIGludCB3LCBp
bnQgaCApOwogICAgdm9pZCBlcmFzZSggY29uc3QgUVJlY3QgJiApOwogICAgdm9pZCBlcmFzZSgg
Y29uc3QgUVJlZ2lvbiAmICk7CiAgICB2b2lkIHNjcm9sbCggaW50IGR4LCBpbnQgZHkgKTsKICAg
IHZvaWQgc2Nyb2xsKCBpbnQgZHgsIGludCBkeSwgY29uc3QgUVJlY3QmICk7CgogICAgdm9pZCBk
cmF3VGV4dCggaW50IHgsIGludCB5LCBjb25zdCBRU3RyaW5nICYpOwogICAgdm9pZCBkcmF3VGV4
dCggY29uc3QgUVBvaW50ICYsIGNvbnN0IFFTdHJpbmcgJik7CgoKCiAgICBRV2lkZ2V0ICogZm9j
dXNXaWRnZXQoKSBjb25zdDsKICAgIFFSZWN0IG1pY3JvRm9jdXNIaW50KCkgY29uc3Q7CgoKCiAg
ICBib29sIGFjY2VwdERyb3BzKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZXB0RHJv
cHMoIGJvb2wgb24gKTsKCgoKICAgIHZpcnR1YWwgdm9pZCBzZXRBdXRvTWFzayhib29sKTsKICAg
IGJvb2wgYXV0b01hc2soKSBjb25zdDsKCiAgICBlbnVtIEJhY2tncm91bmRPcmlnaW4geyBXaWRn
ZXRPcmlnaW4sIFBhcmVudE9yaWdpbiB9OwoKICAgIHZvaWQgc2V0QmFja2dyb3VuZE9yaWdpbigg
QmFja2dyb3VuZE9yaWdpbiApOwogICAgQmFja2dyb3VuZE9yaWdpbiBiYWNrZ3JvdW5kT3JpZ2lu
KCkgY29uc3Q7CgoKCiAgICB2aXJ0dWFsIGJvb2wgY3VzdG9tV2hhdHNUaGlzKCkgY29uc3Q7Cgog
ICAgUVdpZGdldCAqIHBhcmVudFdpZGdldCgpIGNvbnN0OwogICAgYm9vbCB0ZXN0V1N0YXRlKCB1
aW50IG4gKSBjb25zdDsKICAgIGJvb2wgdGVzdFdGbGFncyggV0ZsYWdzIGYgKSBjb25zdDsKICAg
IHN0YXRpYyBRV2lkZ2V0ICogZmluZCggV0lkICk7CiAgICBzdGF0aWMgUVdpZGdldE1hcHBlciAq
d21hcHBlcigpOwoKCgoKCnByb3RlY3RlZDoKCiAgICBib29sIGV2ZW50KCBRRXZlbnQgKiApOwog
ICAgdmlydHVhbCB2b2lkIG1vdXNlUHJlc3NFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdmly
dHVhbCB2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2aXJ0dWFs
IHZvaWQgbW91c2VEb3VibGVDbGlja0V2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2aXJ0dWFs
IHZvaWQgbW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCB3
aGVlbEV2ZW50KCBRV2hlZWxFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQga2V5UHJlc3NFdmVu
dCggUUtleUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBrZXlSZWxlYXNlRXZlbnQoIFFLZXlF
dmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZm9jdXNJbkV2ZW50KCBRRm9jdXNFdmVudCAqICk7
CiAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPdXRFdmVudCggUUZvY3VzRXZlbnQgKiApOwogICAgdmly
dHVhbCB2b2lkIGVudGVyRXZlbnQoIFFFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgbGVhdmVF
dmVudCggUUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVu
dCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgbW92ZUV2ZW50KCBRTW92ZUV2ZW50ICogKTsKICAgIHZp
cnR1YWwgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZUV2ZW50KCBRQ2xvc2VFdmVudCAqICk7CgoKICAgIHZpcnR1YWwgdm9pZCBkcmFnRW50
ZXJFdmVudCggUURyYWdFbnRlckV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBkcmFnTW92ZUV2
ZW50KCBRRHJhZ01vdmVFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhZ0xlYXZlRXZlbnQo
IFFEcmFnTGVhdmVFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZHJvcEV2ZW50KCBRRHJvcEV2
ZW50ICogKTsKCgogICAgdmlydHVhbCB2b2lkIHNob3dFdmVudCggUVNob3dFdmVudCAqICk7CiAg
ICB2aXJ0dWFsIHZvaWQgaGlkZUV2ZW50KCBRSGlkZUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9p
ZCBjdXN0b21FdmVudCggUUN1c3RvbUV2ZW50ICogKTsKIyA0NjQgImtlcm5lbC9xd2lkZ2V0Lmgi
CiAgICB2aXJ0dWFsIGJvb2wgeDExRXZlbnQoIFhFdmVudCAqICk7CgoKCgoKCiAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlTWFzaygpOwoKCgpwcm90ZWN0ZWQ6CgogICAgdmlydHVhbCB2b2lkIHN0eWxl
Q2hhbmdlKCBRU3R5bGUmICk7CgogICAgdmlydHVhbCB2b2lkIGVuYWJsZWRDaGFuZ2UoIGJvb2wg
KTsKICAgIHZpcnR1YWwgdm9pZCBiYWNrZ3JvdW5kQ29sb3JDaGFuZ2UoIGNvbnN0IFFDb2xvciAm
ICk7CiAgICB2aXJ0dWFsIHZvaWQgYmFja2dyb3VuZFBpeG1hcENoYW5nZSggY29uc3QgUVBpeG1h
cCAmICk7CgogICAgdmlydHVhbCB2b2lkIHBhbGV0dGVDaGFuZ2UoIGNvbnN0IFFQYWxldHRlICYg
KTsKCiAgICB2aXJ0dWFsIHZvaWQgZm9udENoYW5nZSggY29uc3QgUUZvbnQgJiApOwoKICAgIGlu
dCBtZXRyaWMoIGludCApIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBjcmVhdGUoIFdJZCA9IDAs
IGJvb2wgaW5pdGlhbGl6ZVdpbmRvdyA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGRlc3Ryb3lPbGRXaW5kb3cgPSBUUlVFICk7CiAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgg
Ym9vbCBkZXN0cm95V2luZG93ID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGRlc3Ryb3lTdWJXaW5kb3dzID0gVFJVRSApOwogICAgdWludCBnZXRXU3RhdGUoKSBjb25zdDsK
ICAgIHZpcnR1YWwgdm9pZCBzZXRXU3RhdGUoIHVpbnQgKTsKICAgIHZvaWQgY2xlYXJXU3RhdGUo
IHVpbnQgbiApOwogICAgV0ZsYWdzIGdldFdGbGFncygpIGNvbnN0OwogICAgdmlydHVhbCB2b2lk
IHNldFdGbGFncyggV0ZsYWdzICk7CiAgICB2b2lkIGNsZWFyV0ZsYWdzKCBXRmxhZ3MgbiApOwoK
ICAgIHZpcnR1YWwgdm9pZCBzZXRGUmVjdCggY29uc3QgUVJlY3QgJiApOwogICAgdmlydHVhbCB2
b2lkIHNldENSZWN0KCBjb25zdCBRUmVjdCAmICk7CgogICAgdmlydHVhbCBib29sIGZvY3VzTmV4
dFByZXZDaGlsZCggYm9vbCBuZXh0ICk7CgogICAgUVdFeHRyYSAqZXh0cmFEYXRhKCk7CiAgICBR
VExXRXh0cmEgKnRvcERhdGEoKTsKICAgIFFGb2N1c0RhdGEgKmZvY3VzRGF0YSgpOwoKICAgIHZp
cnR1YWwgdm9pZCBzZXRLZXlDb21wcmVzc2lvbihib29sKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRN
aWNyb0ZvY3VzSGludChpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgYm9vbCB0ZXh0PVRSVUUp
OwoKcHJpdmF0ZSA6CiAgICB2b2lkIGZvY3VzUHJveHlEZXN0cm95ZWQoKTsKCnByaXZhdGU6CiAg
ICB2b2lkIHNldEZvbnRTeXMoKTsKCiAgICB2b2lkIHNldExheW91dCggUUxheW91dCAqbCApOwoK
ICAgIHZvaWQgc2V0V2luSWQoIFdJZCApOwogICAgdm9pZCBzaG93V2luZG93KCk7CiAgICB2b2lk
IGhpZGVXaW5kb3coKTsKICAgIHZvaWQgc2VuZFNob3dFdmVudHNUb0NoaWxkcmVuKCBib29sIHNw
b250YW5lb3VzICk7CiAgICB2b2lkIHNlbmRIaWRlRXZlbnRzVG9DaGlsZHJlbiggYm9vbCBzcG9u
dGFuZW91cyApOwogICAgdm9pZCBjcmVhdGVUTEV4dHJhKCk7CiAgICB2b2lkIGNyZWF0ZUV4dHJh
KCk7CiAgICB2b2lkIGRlbGV0ZUV4dHJhKCk7CiAgICB2b2lkIGNyZWF0ZVN5c0V4dHJhKCk7CiAg
ICB2b2lkIGRlbGV0ZVN5c0V4dHJhKCk7CiAgICB2b2lkIGNyZWF0ZVRMU3lzRXh0cmEoKTsKICAg
IHZvaWQgZGVsZXRlVExTeXNFeHRyYSgpOwogICAgdm9pZCBkZWFjdGl2YXRlV2lkZ2V0Q2xlYW51
cCgpOwogICAgdm9pZCBpbnRlcm5hbFNldEdlb21ldHJ5KCBpbnQsIGludCwgaW50LCBpbnQsIGJv
b2wgKTsKICAgIHZvaWQgcmVwYXJlbnRGb2N1c1dpZGdldHMoIFFXaWRnZXQgKiApOwogICAgUUZv
Y3VzRGF0YSAqZm9jdXNEYXRhKCBib29sIGNyZWF0ZSApOwogICAgdm9pZCBzZXRCYWNrZ3JvdW5k
RnJvbU1vZGUoKTsKICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yRGlyZWN0KCBjb25zdCBRQ29s
b3IgJiApOwogICAgdm9pZCBzZXRCYWNrZ3JvdW5kUGl4bWFwRGlyZWN0KCBjb25zdCBRUGl4bWFw
ICYgKTsKICAgIHZvaWQgc2V0QmFja2dyb3VuZE1vZGVEaXJlY3QoIEJhY2tncm91bmRNb2RlICk7
CiAgICB2b2lkIHNldEJhY2tncm91bmRFbXB0eSgpOwoKICAgIHZvaWQgc2V0QmFja2dyb3VuZFgx
MVJlbGF0aXZlKCk7CgoKICAgIFdJZCB3aW5pZDsKICAgIHVpbnQgd2lkZ2V0X3N0YXRlOwogICAg
dWludCB3aWRnZXRfZmxhZ3M7CiAgICB1aW50IHByb3BhZ2F0ZV9mb250IDogMjsKICAgIHVpbnQg
cHJvcGFnYXRlX3BhbGV0dGUgOiAyOwogICAgdWludCBmb2N1c19wb2xpY3kgOiA0OwogICAgdWlu
dCBvd25fZm9udCA6MTsKICAgIHVpbnQgb3duX3BhbGV0dGUgOjE7CiAgICB1aW50IHNpemVoaW50
X2ZvcmNlZCA6MTsKICAgIHVpbnQgaXNfY2xvc2luZyA6MTsKICAgIHVpbnQgaW5fc2hvdyA6IDE7
CiAgICBRUG9pbnQgZnBvczsKICAgIFFSZWN0IGNyZWN0OwogICAgUUNvbG9yIGJnX2NvbDsKCiAg
ICBRUGFsZXR0ZSBwYWw7CgogICAgUUZvbnQgZm50OwoKICAgIFFMYXlvdXQgKmxheV9vdXQ7Cgog
ICAgUVdFeHRyYSAqZXh0cmE7CiMgNTkxICJrZXJuZWwvcXdpZGdldC5oIgogICAgc3RhdGljIHZv
aWQgY3JlYXRlTWFwcGVyKCk7CiAgICBzdGF0aWMgdm9pZCBkZXN0cm95TWFwcGVyKCk7CiAgICBz
dGF0aWMgUVdpZGdldExpc3QgKndMaXN0KCk7CiAgICBzdGF0aWMgUVdpZGdldExpc3QgKnRsd0xp
c3QoKTsKICAgIHN0YXRpYyBRV2lkZ2V0TWFwcGVyICptYXBwZXI7CiAgICBmcmllbmQgY2xhc3Mg
UUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247CiAgICBmcmll
bmQgY2xhc3MgUVBhaW50ZXI7CiAgICBmcmllbmQgY2xhc3MgUUZvbnRNZXRyaWNzOwogICAgZnJp
ZW5kIGNsYXNzIFFGb250SW5mbzsKICAgIGZyaWVuZCBjbGFzcyBRRVRXaWRnZXQ7CgogICAgZnJp
ZW5kIGNsYXNzIFFMYXlvdXQ7CgoKCnByaXZhdGU6CgogICAgUVdpZGdldCggY29uc3QgUVdpZGdl
dCAmICk7CiAgICBRV2lkZ2V0ICZvcGVyYXRvcj0oIGNvbnN0IFFXaWRnZXQgJiApOwoKCnB1Ymxp
YzoKCiAgICB2b2lkIHNldFBhbGV0dGUoIGNvbnN0IFFQYWxldHRlICYsIGJvb2wgaVJlYWxseU1l
YW5JdCApOwoKICAgIHZvaWQgc2V0Rm9udCggY29uc3QgUUZvbnQgJiwgYm9vbCBpUmVhbGx5TWVh
bkl0ICk7Cn07CgoKaW5saW5lIGJvb2wgUVdpZGdldDo6dGVzdFdTdGF0ZSggdWludCBmICkgY29u
c3QKeyByZXR1cm4gKHdpZGdldF9zdGF0ZSAmIGYpICE9IDA7IH0KCmlubGluZSBib29sIFFXaWRn
ZXQ6OnRlc3RXRmxhZ3MoIFdGbGFncyBmICkgY29uc3QKeyByZXR1cm4gKHdpZGdldF9mbGFncyAm
IGYpICE9IDA7IH0KCgppbmxpbmUgV0lkIFFXaWRnZXQ6OndpbklkKCkgY29uc3QKeyByZXR1cm4g
d2luaWQ7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzVG9wTGV2ZWwoKSBjb25zdAp7IHJldHVy
biB0ZXN0V0ZsYWdzKFdUeXBlX1RvcExldmVsKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNN
b2RhbCgpIGNvbnN0CnsgcmV0dXJuIHRlc3RXRmxhZ3MoV1R5cGVfTW9kYWwpOyB9CgppbmxpbmUg
Ym9vbCBRV2lkZ2V0Ojppc1BvcHVwKCkgY29uc3QKeyByZXR1cm4gdGVzdFdGbGFncyhXVHlwZV9Q
b3B1cCk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzRGVza3RvcCgpIGNvbnN0CnsgcmV0dXJu
IHRlc3RXRmxhZ3MoV1R5cGVfRGVza3RvcCk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzRW5h
YmxlZCgpIGNvbnN0CnsgcmV0dXJuICF0ZXN0V1N0YXRlKFdTdGF0ZV9EaXNhYmxlZCk7IH0KCmlu
bGluZSBjb25zdCBRUmVjdCAmUVdpZGdldDo6Z2VvbWV0cnkoKSBjb25zdAp7IHJldHVybiBjcmVj
dDsgfQoKaW5saW5lIGludCBRV2lkZ2V0Ojp4KCkgY29uc3QKeyByZXR1cm4gZnBvcy54KCk7IH0K
CmlubGluZSBpbnQgUVdpZGdldDo6eSgpIGNvbnN0CnsgcmV0dXJuIGZwb3MueSgpOyB9Cgppbmxp
bmUgUVBvaW50IFFXaWRnZXQ6OnBvcygpIGNvbnN0CnsgcmV0dXJuIGZwb3M7IH0KCmlubGluZSBR
U2l6ZSBRV2lkZ2V0OjpzaXplKCkgY29uc3QKeyByZXR1cm4gY3JlY3Quc2l6ZSgpOyB9Cgppbmxp
bmUgaW50IFFXaWRnZXQ6OndpZHRoKCkgY29uc3QKeyByZXR1cm4gY3JlY3Qud2lkdGgoKTsgfQoK
aW5saW5lIGludCBRV2lkZ2V0OjpoZWlnaHQoKSBjb25zdAp7IHJldHVybiBjcmVjdC5oZWlnaHQo
KTsgfQoKaW5saW5lIFFSZWN0IFFXaWRnZXQ6OnJlY3QoKSBjb25zdAp7IHJldHVybiBRUmVjdCgw
LDAsY3JlY3Qud2lkdGgoKSxjcmVjdC5oZWlnaHQoKSk7IH0KCmlubGluZSBpbnQgUVdpZGdldDo6
bWluaW11bVdpZHRoKCkgY29uc3QKeyByZXR1cm4gbWluaW11bVNpemUoKS53aWR0aCgpOyB9Cgpp
bmxpbmUgaW50IFFXaWRnZXQ6Om1pbmltdW1IZWlnaHQoKSBjb25zdAp7IHJldHVybiBtaW5pbXVt
U2l6ZSgpLmhlaWdodCgpOyB9CgppbmxpbmUgaW50IFFXaWRnZXQ6Om1heGltdW1XaWR0aCgpIGNv
bnN0CnsgcmV0dXJuIG1heGltdW1TaXplKCkud2lkdGgoKTsgfQoKaW5saW5lIGludCBRV2lkZ2V0
OjptYXhpbXVtSGVpZ2h0KCkgY29uc3QKeyByZXR1cm4gbWF4aW11bVNpemUoKS5oZWlnaHQoKTsg
fQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0TWluaW11bVNpemUoIGNvbnN0IFFTaXplICZzICkK
eyBzZXRNaW5pbXVtU2l6ZShzLndpZHRoKCkscy5oZWlnaHQoKSk7IH0KCmlubGluZSB2b2lkIFFX
aWRnZXQ6OnNldE1heGltdW1TaXplKCBjb25zdCBRU2l6ZSAmcyApCnsgc2V0TWF4aW11bVNpemUo
cy53aWR0aCgpLHMuaGVpZ2h0KCkpOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRTaXplSW5j
cmVtZW50KCBjb25zdCBRU2l6ZSAmcyApCnsgc2V0U2l6ZUluY3JlbWVudChzLndpZHRoKCkscy5o
ZWlnaHQoKSk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldEJhc2VTaXplKCBjb25zdCBRU2l6
ZSAmcyApCnsgc2V0QmFzZVNpemUocy53aWR0aCgpLHMuaGVpZ2h0KCkpOyB9CgppbmxpbmUgY29u
c3QgUUNvbG9yICZRV2lkZ2V0OjpiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAp7IHJldHVybiBiZ19j
b2w7IH0KCgppbmxpbmUgY29uc3QgUVBhbGV0dGUgJlFXaWRnZXQ6OnBhbGV0dGUoKSBjb25zdAp7
IHJldHVybiBwYWw7IH0KCgppbmxpbmUgUUZvbnQgUVdpZGdldDo6Zm9udCgpIGNvbnN0CnsgcmV0
dXJuIGZudDsgfQoKaW5saW5lIFFGb250TWV0cmljcyBRV2lkZ2V0Ojpmb250TWV0cmljcygpIGNv
bnN0CnsgcmV0dXJuIFFGb250TWV0cmljcyhmb250KCkpOyB9CgppbmxpbmUgUUZvbnRJbmZvIFFX
aWRnZXQ6OmZvbnRJbmZvKCkgY29uc3QKeyByZXR1cm4gUUZvbnRJbmZvKGZvbnQoKSk7IH0KCmlu
bGluZSBib29sIFFXaWRnZXQ6Omhhc01vdXNlVHJhY2tpbmcoKSBjb25zdAp7IHJldHVybiB0ZXN0
V1N0YXRlKFdTdGF0ZV9Nb3VzZVRyYWNraW5nKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNG
b2N1c0VuYWJsZWQoKSBjb25zdAp7IHJldHVybiAoRm9jdXNQb2xpY3kpZm9jdXNfcG9saWN5ICE9
IE5vRm9jdXM7IH0KCmlubGluZSBRV2lkZ2V0OjpGb2N1c1BvbGljeSBRV2lkZ2V0Ojpmb2N1c1Bv
bGljeSgpIGNvbnN0CnsgcmV0dXJuIChGb2N1c1BvbGljeSlmb2N1c19wb2xpY3k7IH0KCmlubGlu
ZSBib29sIFFXaWRnZXQ6OmlzVXBkYXRlc0VuYWJsZWQoKSBjb25zdAp7IHJldHVybiAhdGVzdFdT
dGF0ZShXU3RhdGVfQmxvY2tVcGRhdGVzKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6dXBkYXRl
KCBjb25zdCBRUmVjdCAmciApCnsgdXBkYXRlKCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5o
ZWlnaHQoKSApOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpyZXBhaW50KCkKeyByZXBhaW50KCAw
LCAwLCBjcmVjdC53aWR0aCgpLCBjcmVjdC5oZWlnaHQoKSwgVFJVRSApOyB9CgppbmxpbmUgdm9p
ZCBRV2lkZ2V0OjpyZXBhaW50KCBib29sIGVyYXNlICkKeyByZXBhaW50KCAwLCAwLCBjcmVjdC53
aWR0aCgpLCBjcmVjdC5oZWlnaHQoKSwgZXJhc2UgKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6
cmVwYWludCggY29uc3QgUVJlY3QgJnIsIGJvb2wgZXJhc2UgKQp7IHJlcGFpbnQoIHIueCgpLCBy
LnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpLCBlcmFzZSApOyB9CgppbmxpbmUgdm9pZCBRV2lk
Z2V0OjplcmFzZSgpCnsgZXJhc2UoIDAsIDAsIGNyZWN0LndpZHRoKCksIGNyZWN0LmhlaWdodCgp
ICk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OmVyYXNlKCBjb25zdCBRUmVjdCAmciApCnsgZXJh
c2UoIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpICk7IH0KCmlubGluZSBib29s
IFFXaWRnZXQ6OmNsb3NlKCkKeyByZXR1cm4gY2xvc2UoIEZBTFNFICk7IH0KCmlubGluZSBib29s
IFFXaWRnZXQ6OmlzVmlzaWJsZSgpIGNvbnN0CnsgcmV0dXJuIHRlc3RXU3RhdGUoV1N0YXRlX1Zp
c2libGUpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc0hpZGRlbigpIGNvbnN0CnsgcmV0dXJu
IHRlc3RXU3RhdGUoV1N0YXRlX0ZvcmNlSGlkZSk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6Om1v
dmUoIGNvbnN0IFFQb2ludCAmcCApCnsgbW92ZSggcC54KCksIHAueSgpICk7IH0KCmlubGluZSB2
b2lkIFFXaWRnZXQ6OnJlc2l6ZSggY29uc3QgUVNpemUgJnMgKQp7IHJlc2l6ZSggcy53aWR0aCgp
LCBzLmhlaWdodCgpKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0R2VvbWV0cnkoIGNvbnN0
IFFSZWN0ICZyICkKeyBzZXRHZW9tZXRyeSggci5sZWZ0KCksIHIudG9wKCksIHIud2lkdGgoKSwg
ci5oZWlnaHQoKSApOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpkcmF3VGV4dCggY29uc3QgUVBv
aW50ICZwLCBjb25zdCBRU3RyaW5nICZzICkKeyBkcmF3VGV4dCggcC54KCksIHAueSgpLCBzICk7
IH0KCmlubGluZSBRV2lkZ2V0ICpRV2lkZ2V0OjpwYXJlbnRXaWRnZXQoKSBjb25zdAp7IHJldHVy
biAoUVdpZGdldCAqKVFPYmplY3Q6OnBhcmVudCgpOyB9CgppbmxpbmUgUVdpZGdldE1hcHBlciAq
UVdpZGdldDo6d21hcHBlcigpCnsgcmV0dXJuIG1hcHBlcjsgfQoKaW5saW5lIHVpbnQgUVdpZGdl
dDo6Z2V0V1N0YXRlKCkgY29uc3QKeyByZXR1cm4gd2lkZ2V0X3N0YXRlOyB9CgppbmxpbmUgdm9p
ZCBRV2lkZ2V0OjpzZXRXU3RhdGUoIHVpbnQgZiApCnsgd2lkZ2V0X3N0YXRlIHw9IGY7IH0KCmlu
bGluZSB2b2lkIFFXaWRnZXQ6OmNsZWFyV1N0YXRlKCB1aW50IGYgKQp7IHdpZGdldF9zdGF0ZSAm
PSB+ZjsgfQoKaW5saW5lIFF0OjpXRmxhZ3MgUVdpZGdldDo6Z2V0V0ZsYWdzKCkgY29uc3QKeyBy
ZXR1cm4gd2lkZ2V0X2ZsYWdzOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRXRmxhZ3MoIFdG
bGFncyBmICkKeyB3aWRnZXRfZmxhZ3MgfD0gZjsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6Y2xl
YXJXRmxhZ3MoIFdGbGFncyBmICkKeyB3aWRnZXRfZmxhZ3MgJj0gfmY7IH0KCmlubGluZSB2b2lk
IFFXaWRnZXQ6OmNvbnN0UG9saXNoKCkgY29uc3QKewogICAgaWYgKCAhdGVzdFdTdGF0ZShXU3Rh
dGVfUG9saXNoZWQpICkgewogICAgICAgIFFXaWRnZXQqIHRoYXQgPSAoUVdpZGdldCopIHRoaXM7
CiAgICAgICAgdGhhdC0+cG9saXNoKCk7CiAgICAgICAgdGhhdC0+c2V0V1N0YXRlKFdTdGF0ZV9Q
b2xpc2hlZCk7CiAgICB9Cn0KCmlubGluZSBib29sIFFXaWRnZXQ6Om93bkN1cnNvcigpIGNvbnN0
CnsKICAgIHJldHVybiB0ZXN0V1N0YXRlKCBXU3RhdGVfT3duQ3Vyc29yICk7Cn0KCmlubGluZSBi
b29sIFFXaWRnZXQ6Om93bkZvbnQoKSBjb25zdAp7CiAgICByZXR1cm4gb3duX2ZvbnQ7Cn0KCmlu
bGluZSBib29sIFFXaWRnZXQ6Om93blBhbGV0dGUoKSBjb25zdAp7CiAgICByZXR1cm4gb3duX3Bh
bGV0dGU7Cn0KCgoKCgoKY2xhc3MgUUZvY3VzRGF0YTsKY2xhc3MgUVdTTWFuYWdlcjsKCgoKCnN0
cnVjdCBRVExXRXh0cmEgewogICAgUVN0cmluZyBjYXB0aW9uOwogICAgUVN0cmluZyBpY29uVGV4
dDsKICAgIFFQaXhtYXAgKmljb247CiAgICBRRm9jdXNEYXRhICpmb2N1c0RhdGE7CiAgICBRU2l6
ZSBmc2l6ZTsKICAgIHNob3J0IGluY3csIGluY2g7CiAgICB1aW50IGljb25pYzogMTsKICAgIHVp
bnQgZnVsbHNjcmVlbiA6IDE7CiAgICB1aW50IHNob3dNb2RlOiAyOwogICAgc2hvcnQgYmFzZXcs
IGJhc2VoOwoKICAgIFdJZCBwYXJlbnRXaW5JZDsKICAgIHVpbnQgZW1iZWRkZWQgOiAxOwogICAg
dWludCByZXNlcnZlZDogMjsKICAgIHVpbnQgZG5kIDogMTsKICAgIHVpbnQgdXNwb3MgOiAxOwog
ICAgdWludCB1c3NpemUgOiAxOwogICAgdm9pZCAqeGljOwojIDg0OCAia2VybmVsL3F3aWRnZXQu
aCIKICAgIFFSZWN0IG5vcm1hbEdlb21ldHJ5Owp9OwoKCgoKCgpzdHJ1Y3QgUVdFeHRyYSB7CiAg
ICBRX0lOVDE2IG1pbncsIG1pbmg7CiAgICBRX0lOVDE2IG1heHcsIG1heGg7CiAgICBRUGl4bWFw
ICpiZ19waXg7CiAgICBRV2lkZ2V0ICpmb2N1c19wcm94eTsKCiAgICBRQ3Vyc29yICpjdXJzOwoK
ICAgIFFUTFdFeHRyYSAqdG9wZXh0cmE7CgoKCgogICAgV0lkIHhEbmRQcm94eTsKCgoKCiAgICBj
aGFyIGJnX21vZGU7CgogICAgUVN0eWxlKiBzdHlsZTsKCiAgICBRUmVjdCBtaWNyb19mb2N1c19o
aW50OwogICAgUVNpemVQb2xpY3kgc2l6ZV9wb2xpY3k7CiAgICB2b2lkICogcG9zdGVkX2V2ZW50
czsKfTsKIyA0NSAia2VybmVsL3FhYnN0cmFjdGxheW91dC5oIiAyCgoKCgpjbGFzcyBRTWVudUJh
cjsKY2xhc3MgUVdpZGdldDsKc3RydWN0IFFMYXlvdXREYXRhOwpjbGFzcyBRTGF5b3V0SXRlbTsK
Y2xhc3MgUUxheW91dDsKY2xhc3MgUVNwYWNlckl0ZW07CmNsYXNzIFFEb21FbGVtZW50OwpjbGFz
cyBRQ29uZmlndXJlTGF5b3V0RXZlbnQ7CgpjbGFzcyBRR0xheW91dEl0ZXJhdG9yIDogcHVibGlj
IFFTaGFyZWQKewpwdWJsaWM6CiAgICB2aXJ0dWFsIH5RR0xheW91dEl0ZXJhdG9yKCk7CiAgICB2
aXJ0dWFsIFFMYXlvdXRJdGVtICpuZXh0KCkgPSAwOwogICAgdmlydHVhbCBRTGF5b3V0SXRlbSAq
Y3VycmVudCgpID0gMDsKICAgIHZpcnR1YWwgUUxheW91dEl0ZW0gKnRha2VDdXJyZW50KCkgPSAw
Owp9OwoKY2xhc3MgUUxheW91dEl0ZXJhdG9yCnsKcHVibGljOgogICAgUUxheW91dEl0ZXJhdG9y
KCBRR0xheW91dEl0ZXJhdG9yICppICkgOml0KGkpIHt9CiAgICBRTGF5b3V0SXRlcmF0b3IoIGNv
bnN0IFFMYXlvdXRJdGVyYXRvciAmaSApIDppdCggaS5pdCApCiAgICB7IGlmICggaXQgKSBpdC0+
cmVmKCk7IH0KICAgIH5RTGF5b3V0SXRlcmF0b3IoKSB7IGlmICggaXQgJiYgaXQtPmRlcmVmKCkg
KSBkZWxldGUgaXQ7IH0KICAgIFFMYXlvdXRJdGVyYXRvciAmb3BlcmF0b3I9KCBjb25zdCBRTGF5
b3V0SXRlcmF0b3IgJmkgKQogICAgewogICAgICAgIGlmICggaS5pdCApIGkuaXQtPnJlZigpOwog
ICAgICAgIGlmICggaXQgJiYgaXQtPmRlcmVmKCkgKSBkZWxldGUgaXQ7CiAgICAgICAgaXQgPSBp
Lml0OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIFFMYXlvdXRJdGVtICpvcGVyYXRv
cisrKCkgeyByZXR1cm4gaXQgPyBpdC0+bmV4dCgpIDogMDsgfQogICAgUUxheW91dEl0ZW0gKmN1
cnJlbnQoKSB7IHJldHVybiBpdCA/IGl0LT5jdXJyZW50KCkgOiAwOyB9CiAgICBRTGF5b3V0SXRl
bSAqdGFrZUN1cnJlbnQoKSB7IHJldHVybiBpdCA/IGl0LT50YWtlQ3VycmVudCgpIDogMDsgfQog
ICAgdm9pZCBkZWxldGVDdXJyZW50KCk7CnByaXZhdGU6CiAgICBRR0xheW91dEl0ZXJhdG9yICpp
dDsKfTsKCgpjbGFzcyBRTGF5b3V0SXRlbQp7CnB1YmxpYzoKICAgIFFMYXlvdXRJdGVtKCBpbnQg
YWxpZ25tZW50ID0gMCApIDphbGlnbihhbGlnbm1lbnQpIHt9CiAgICB2aXJ0dWFsIH5RTGF5b3V0
SXRlbSgpOwogICAgdmlydHVhbCBRU2l6ZSBzaXplSGludCgpIGNvbnN0ID0gMDsKICAgIHZpcnR1
YWwgUVNpemUgbWluaW11bVNpemUoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIFFTaXplIG1heGlt
dW1TaXplKCkgY29uc3QgPSAwOwogICAgdmlydHVhbCBRU2l6ZVBvbGljeTo6RXhwYW5kRGF0YSBl
eHBhbmRpbmcoKSBjb25zdCA9MDsKICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRyeSggY29uc3Qg
UVJlY3QmICkgPSAwOwogICAgdmlydHVhbCBRUmVjdCBnZW9tZXRyeSgpIGNvbnN0ID0gMDsKICAg
IHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgPSAwOwogICAgdmlydHVhbCBib29sIGhhc0hl
aWdodEZvcldpZHRoKCkgY29uc3Q7CiAgICB2aXJ0dWFsIGludCBoZWlnaHRGb3JXaWR0aCggaW50
ICkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwoKICAgIHZpcnR1YWwgUVdp
ZGdldCAqd2lkZ2V0KCk7CiAgICB2aXJ0dWFsIFFMYXlvdXRJdGVyYXRvciBpdGVyYXRvcigpOwog
ICAgdmlydHVhbCBRTGF5b3V0ICpsYXlvdXQoKTsKICAgIHZpcnR1YWwgUVNwYWNlckl0ZW0gKnNw
YWNlckl0ZW0oKTsKCiAgICBpbnQgYWxpZ25tZW50KCkgY29uc3QgeyByZXR1cm4gYWxpZ247IH0K
ICAgIHZpcnR1YWwgdm9pZCBzZXRBbGlnbm1lbnQoIGludCBhICk7CnByb3RlY3RlZDoKICAgIGlu
dCBhbGlnbjsKfTsKCgpjbGFzcyBRU3BhY2VySXRlbSA6IHB1YmxpYyBRTGF5b3V0SXRlbQp7CiBw
dWJsaWM6CiAgICBRU3BhY2VySXRlbSggaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAgIFFT
aXplUG9saWN5OjpTaXplVHlwZSBoRGF0YT1RU2l6ZVBvbGljeTo6TWluaW11bSwKICAgICAgICAg
ICAgICAgICBRU2l6ZVBvbGljeTo6U2l6ZVR5cGUgdkRhdGE9IFFTaXplUG9saWN5OjpNaW5pbXVt
ICkKICAgICAgICA6d2lkdGgodyksIGhlaWdodChoKSwgc2l6ZVAoaERhdGEsIHZEYXRhICkKICAg
ICAgICB7fQogICAgdm9pZCBjaGFuZ2VTaXplKCBpbnQgdywgaW50IGgsCiAgICAgICAgICAgICAg
ICBRU2l6ZVBvbGljeTo6U2l6ZVR5cGUgaERhdGE9UVNpemVQb2xpY3k6Ok1pbmltdW0sCiAgICAg
ICAgICAgICAgICBRU2l6ZVBvbGljeTo6U2l6ZVR5cGUgdkRhdGE9UVNpemVQb2xpY3k6Ok1pbmlt
dW0gKTsKICAgIFFTaXplIHNpemVIaW50KCkgY29uc3QgOwogICAgUVNpemUgbWluaW11bVNpemUo
KSBjb25zdCA7CiAgICBRU2l6ZSBtYXhpbXVtU2l6ZSgpIGNvbnN0IDsKICAgIFFTaXplUG9saWN5
OjpFeHBhbmREYXRhIGV4cGFuZGluZygpIGNvbnN0OwogICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7
CiAgICB2b2lkIHNldEdlb21ldHJ5KCBjb25zdCBRUmVjdCYgKTsKICAgIFFSZWN0IGdlb21ldHJ5
KCkgY29uc3Q7CiAgICBRU3BhY2VySXRlbSAqc3BhY2VySXRlbSgpOwpwcml2YXRlOgogICAgaW50
IHdpZHRoLCBoZWlnaHQ7CiAgICBRU2l6ZVBvbGljeSBzaXplUDsKICAgIFFSZWN0IHJlY3Q7Cn07
CgoKY2xhc3MgUVdpZGdldEl0ZW0gOiBwdWJsaWMgUUxheW91dEl0ZW0KewpwdWJsaWM6CiAgICBR
V2lkZ2V0SXRlbSggUVdpZGdldCAqdyApIDogd2lkKHcpIHt9CiAgICBRU2l6ZSBzaXplSGludCgp
IGNvbnN0IDsKICAgIFFTaXplIG1pbmltdW1TaXplKCkgY29uc3QgOwogICAgUVNpemUgbWF4aW11
bVNpemUoKSBjb25zdCA7CiAgICBRU2l6ZVBvbGljeTo6RXhwYW5kRGF0YSBleHBhbmRpbmcoKSBj
b25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgdm9pZCBzZXRHZW9tZXRyeSggY29u
c3QgUVJlY3QmICkgOwogICAgUVJlY3QgZ2VvbWV0cnkoKSBjb25zdDsKCiAgICB2aXJ0dWFsIFFX
aWRnZXQgKndpZGdldCgpOwoKICAgIGJvb2wgaGFzSGVpZ2h0Rm9yV2lkdGgoKSBjb25zdDsKICAg
IGludCBoZWlnaHRGb3JXaWR0aCggaW50ICkgY29uc3Q7CgogICAgY29uc3QgUVNpemUgJndpZGdl
dFNpemVIaW50KCkgY29uc3Q7Cgpwcml2YXRlOgoKICAgIFFXaWRnZXQgKndpZDsKfTsKCgpjbGFz
cyBRTGF5b3V0IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBRTGF5b3V0SXRlbQp7CiAgICBwdWJs
aWM6IFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9i
amVjdCgpOyB9IGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyBzdGF0aWMgUU1ldGFPYmpl
Y3QqIHN0YXRpY01ldGFPYmplY3QoKTsgc3RhdGljIFFTdHJpbmcgdHIoY29uc3QgY2hhciopOyBz
dGF0aWMgUVN0cmluZyB0cihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOyBwcm90ZWN0ZWQ6IHZv
aWQgaW5pdE1ldGFPYmplY3QoKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2Jq
OwoKCgoKCnB1YmxpYzoKICAgIFFMYXlvdXQoIFFXaWRnZXQgKnBhcmVudCwgaW50IG1hcmdpbj0w
LCBpbnQgc3BhY2U9LTEsCiAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lPTAgKTsKICAgIFFM
YXlvdXQoIFFMYXlvdXQgKnBhcmVudExheW91dCwgaW50IHNwYWNlPS0xLCBjb25zdCBjaGFyICpu
YW1lPTAgKTsKICAgIFFMYXlvdXQoIGludCBzcGFjZT0tMSwgY29uc3QgY2hhciAqbmFtZT0wICk7
CgogICAgflFMYXlvdXQoKTsKCiAgICBpbnQgbWFyZ2luKCkgY29uc3QgeyByZXR1cm4gb3V0c2lk
ZUJvcmRlcjsgfQogICAgaW50IHNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBpbnNpZGVTcGFjaW5n
OyB9CgogICAgdmlydHVhbCB2b2lkIHNldE1hcmdpbiggaW50ICk7CiAgICB2aXJ0dWFsIHZvaWQg
c2V0U3BhY2luZyggaW50ICk7CgogICAgZW51bSB7IHVubGltaXRlZCA9IDMyNzY3IH07CgogICAg
aW50IGRlZmF1bHRCb3JkZXIoKSBjb25zdCB7IHJldHVybiBpbnNpZGVTcGFjaW5nOyB9CiAgICB2
b2lkIGZyZWV6ZSggaW50IHcsIGludCBoICk7CiAgICB2b2lkIGZyZWV6ZSgpIHsgc2V0UmVzaXpl
TW9kZSggRml4ZWQgKTsgfQoKCiAgICBlbnVtIFJlc2l6ZU1vZGUgeyBGcmVlUmVzaXplLCBNaW5p
bXVtLCBGaXhlZCB9OwogICAgdm9pZCBzZXRSZXNpemVNb2RlKCBSZXNpemVNb2RlICk7CiAgICBS
ZXNpemVNb2RlIHJlc2l6ZU1vZGUoKSBjb25zdDsKCgogICAgdmlydHVhbCB2b2lkIHNldE1lbnVC
YXIoIFFNZW51QmFyICp3ICk7CiAgICBRTWVudUJhciAqbWVudUJhcigpIGNvbnN0IHsgcmV0dXJu
IG1lbnViYXI7IH0KCgogICAgUVdpZGdldCAqbWFpbldpZGdldCgpOwogICAgYm9vbCBpc1RvcExl
dmVsKCkgY29uc3QgeyByZXR1cm4gdG9wTGV2ZWw7IH0KCiAgICB2aXJ0dWFsIHZvaWQgc2V0QXV0
b0FkZCggYm9vbCApOwogICAgYm9vbCBhdXRvQWRkKCkgY29uc3QgeyByZXR1cm4gYXV0b05ld0No
aWxkOyB9CgogICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAgICBRUmVjdCBnZW9tZXRyeSgpIGNvbnN0
OwogICAgYm9vbCBhY3RpdmF0ZSgpOwoKICAgIHZvaWQgYWRkKCBRV2lkZ2V0ICp3ICkgeyBhZGRJ
dGVtKCBuZXcgUVdpZGdldEl0ZW0oIHcgKSApOyB9CiAgICB2aXJ0dWFsIHZvaWQgYWRkSXRlbSAo
IFFMYXlvdXRJdGVtICogKSA9IDA7CgogICAgUVNpemVQb2xpY3k6OkV4cGFuZERhdGEgZXhwYW5k
aW5nKCkgY29uc3Q7CiAgICBRU2l6ZSBtaW5pbXVtU2l6ZSgpIGNvbnN0OwogICAgUVNpemUgbWF4
aW11bVNpemUoKSBjb25zdDsKICAgIHZvaWQgc2V0R2VvbWV0cnkoIGNvbnN0IFFSZWN0JiApPTA7
CiAgICBRTGF5b3V0SXRlcmF0b3IgaXRlcmF0b3IoKT0wOwogICAgYm9vbCBpc0VtcHR5KCkgY29u
c3Q7CgogICAgaW50IHRvdGFsSGVpZ2h0Rm9yV2lkdGgoIGludCB3ICkgY29uc3Q7CiAgICBRU2l6
ZSB0b3RhbE1pbmltdW1TaXplKCkgY29uc3Q7CiAgICBRU2l6ZSB0b3RhbE1heGltdW1TaXplKCkg
Y29uc3Q7CiAgICBRU2l6ZSB0b3RhbFNpemVIaW50KCkgY29uc3Q7CiAgICBRTGF5b3V0ICpsYXlv
dXQoKTsKCiAgICBib29sIHN1cHBvcnRzTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbWFyZ2luSW1w
bDsgfQoKICAgIHZvaWQgc2V0RW5hYmxlZCggYm9vbCApOwogICAgYm9vbCBpc0VuYWJsZWQoKSBj
b25zdDsKCnByb3RlY3RlZDoKICAgIGJvb2wgZXZlbnRGaWx0ZXIoIFFPYmplY3QgKiwgUUV2ZW50
ICogKTsKICAgIHZvaWQgYWRkQ2hpbGRMYXlvdXQoIFFMYXlvdXQgKmwgKTsKICAgIHZvaWQgZGVs
ZXRlQWxsSXRlbXMoKTsKCiAgICB2b2lkIHNldFN1cHBvcnRzTWFyZ2luKCBib29sICk7CiAgICBR
UmVjdCBhbGlnbm1lbnRSZWN0KCBjb25zdCBRUmVjdCYgKSBjb25zdDsKcHJpdmF0ZToKICAgIHZv
aWQgc2V0V2lkZ2V0TGF5b3V0KCBRV2lkZ2V0ICosIFFMYXlvdXQgKiApOwogICAgdm9pZCBpbml0
KCk7CiAgICBpbnQgaW5zaWRlU3BhY2luZzsKICAgIGludCBvdXRzaWRlQm9yZGVyOwogICAgdWlu
dCB0b3BMZXZlbCA6IDE7CiAgICB1aW50IGF1dG9NaW5pbXVtIDogMTsKICAgIHVpbnQgYXV0b05l
d0NoaWxkIDogMTsKICAgIHVpbnQgZnJvemVuIDogMTsKICAgIHVpbnQgYWN0aXZhdGVkIDogMTsK
ICAgIHVpbnQgbWFyZ2luSW1wbCA6IDE7CiAgICB1aW50IGVuYWJsZWQgOiAxOwogICAgUVJlY3Qg
cmVjdDsKICAgIFFMYXlvdXREYXRhICpleHRyYURhdGE7CgogICAgUU1lbnVCYXIgKm1lbnViYXI7
Cgpwcml2YXRlOgoKICAgIFFMYXlvdXQoIGNvbnN0IFFMYXlvdXQgJiApOwogICAgUUxheW91dCAm
b3BlcmF0b3I9KCBjb25zdCBRTGF5b3V0ICYgKTsKCgp9OwoKaW5saW5lIHZvaWQgUUxheW91dEl0
ZXJhdG9yOjpkZWxldGVDdXJyZW50KCkKewogICAgZGVsZXRlIHRha2VDdXJyZW50KCk7Cn0KIyAz
OSAia2VybmVsL3FhYnN0cmFjdGxheW91dC5jcHAiIDIKCgojIDEgImtlcm5lbC9xd2lkZ2V0Lmgi
IDEKIyA0MiAia2VybmVsL3FhYnN0cmFjdGxheW91dC5jcHAiIDIKIyAxICIvdXNyL2xpYi9xdC9p
bmNsdWRlL3FtZW51YmFyLmgiIDEKIyA0MiAiL3Vzci9saWIvcXQvaW5jbHVkZS9xbWVudWJhci5o
IgojIDEgIi91c3IvbGliL3F0L2luY2x1ZGUvcXBvcHVwbWVudS5oIiAxCiMgNDIgIi91c3IvbGli
L3F0L2luY2x1ZGUvcXBvcHVwbWVudS5oIgojIDEgIi91c3IvbGliL3F0L2luY2x1ZGUvcWZyYW1l
LmgiIDEKIyA0MiAiL3Vzci9saWIvcXQvaW5jbHVkZS9xZnJhbWUuaCIKIyAxICIvdXNyL2xpYi9x
dC9pbmNsdWRlL3F3aWRnZXQuaCIgMQojIDQzICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FmcmFtZS5o
IiAyCgoKCgpjbGFzcyBRRnJhbWUgOiBwdWJsaWMgUVdpZGdldAp7CiAgICBwdWJsaWM6IFFNZXRh
T2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9
IGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRp
Y01ldGFPYmplY3QoKTsgc3RhdGljIFFTdHJpbmcgdHIoY29uc3QgY2hhciopOyBzdGF0aWMgUVN0
cmluZyB0cihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOyBwcm90ZWN0ZWQ6IHZvaWQgaW5pdE1l
dGFPYmplY3QoKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwojIDYwICIv
dXNyL2xpYi9xdC9pbmNsdWRlL3FmcmFtZS5oIgpwdWJsaWM6CiAgICBRRnJhbWUoIFFXaWRnZXQg
KnBhcmVudD0wLCBjb25zdCBjaGFyICpuYW1lPTAsIFdGbGFncyBmPTAsCiAgICAgICAgICAgIGJv
b2wgPSBUUlVFICk7CgogICAgaW50IGZyYW1lU3R5bGUoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9p
ZCBzZXRGcmFtZVN0eWxlKCBpbnQgKTsKCiAgICBpbnQgZnJhbWVXaWR0aCgpIGNvbnN0OwogICAg
UVJlY3QgY29udGVudHNSZWN0KCkgY29uc3Q7CgoKICAgIGJvb2wgbGluZVNoYXBlc09rKCkgY29u
c3QgeyByZXR1cm4gVFJVRTsgfQoKCiAgICBRU2l6ZSBzaXplSGludCgpIGNvbnN0OwogICAgUVNp
emVQb2xpY3kgc2l6ZVBvbGljeSgpIGNvbnN0OwoKICAgIGVudW0gU2hhcGUgeyBOb0ZyYW1lID0g
MCwKICAgICAgICAgICAgICAgICBCb3ggPSAweDAwMDEsCiAgICAgICAgICAgICAgICAgUGFuZWwg
PSAweDAwMDIsCiAgICAgICAgICAgICAgICAgV2luUGFuZWwgPSAweDAwMDMsCiAgICAgICAgICAg
ICAgICAgSExpbmUgPSAweDAwMDQsCiAgICAgICAgICAgICAgICAgVkxpbmUgPSAweDAwMDUsCiAg
ICAgICAgICAgICAgICAgU3R5bGVkUGFuZWwgPSAweDAwMDYsCiAgICAgICAgICAgICAgICAgUG9w
dXBQYW5lbCA9IDB4MDAwNywKICAgICAgICAgICAgICAgICBNU2hhcGUgPSAweDAwMGYKICAgIH07
CiAgICBlbnVtIFNoYWRvdyB7IFBsYWluID0gMHgwMDEwLAogICAgICAgICAgICAgICAgICBSYWlz
ZWQgPSAweDAwMjAsCiAgICAgICAgICAgICAgICAgIFN1bmtlbiA9IDB4MDAzMCwKICAgICAgICAg
ICAgICAgICAgTVNoYWRvdyA9IDB4MDBmMCB9OwoKICAgIFNoYXBlIGZyYW1lU2hhcGUoKSBjb25z
dDsKICAgIHZvaWQgc2V0RnJhbWVTaGFwZSggU2hhcGUgKTsKICAgIFNoYWRvdyBmcmFtZVNoYWRv
dygpIGNvbnN0OwogICAgdm9pZCBzZXRGcmFtZVNoYWRvdyggU2hhZG93ICk7CgogICAgaW50IGxp
bmVXaWR0aCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldExpbmVXaWR0aCggaW50ICk7Cgog
ICAgaW50IG1hcmdpbigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldE1hcmdpbiggaW50ICk7
CgogICAgaW50IG1pZExpbmVXaWR0aCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldE1pZExp
bmVXaWR0aCggaW50ICk7CgogICAgUVJlY3QgZnJhbWVSZWN0KCkgY29uc3Q7CiAgICB2aXJ0dWFs
IHZvaWQgc2V0RnJhbWVSZWN0KCBjb25zdCBRUmVjdCAmICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lk
IHBhaW50RXZlbnQoIFFQYWludEV2ZW50ICogKTsKICAgIHZvaWQgcmVzaXplRXZlbnQoIFFSZXNp
emVFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lKCBRUGFpbnRlciAqICk7CiAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnRlbnRzKCBRUGFpbnRlciAqICk7CiAgICB2aXJ0dWFsIHZv
aWQgZnJhbWVDaGFuZ2VkKCk7CiAgICB2b2lkIHVwZGF0ZU1hc2soKTsKICAgIHZpcnR1YWwgdm9p
ZCBkcmF3RnJhbWVNYXNrKCBRUGFpbnRlciAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnRl
bnRzTWFzayggUVBhaW50ZXIgKiApOwoKcHJpdmF0ZToKICAgIHZvaWQgdXBkYXRlRnJhbWVXaWR0
aCgpOwogICAgUVJlY3QgZnJlY3Q7CiAgICBpbnQgZnN0eWxlOwogICAgc2hvcnQgbHdpZHRoOwog
ICAgc2hvcnQgbXdpZHRoOwogICAgc2hvcnQgbWx3aWR0aDsKICAgIHNob3J0IGZ3aWR0aDsKCiAg
ICB2b2lkICogZDsKcHJpdmF0ZToKCiAgICBRRnJhbWUoIGNvbnN0IFFGcmFtZSAmICk7CiAgICBR
RnJhbWUgJm9wZXJhdG9yPSggY29uc3QgUUZyYW1lICYgKTsKCn07CgoKaW5saW5lIGludCBRRnJh
bWU6OmZyYW1lU3R5bGUoKSBjb25zdAp7IHJldHVybiBmc3R5bGU7IH0KCmlubGluZSBRRnJhbWU6
OlNoYXBlIFFGcmFtZTo6ZnJhbWVTaGFwZSgpIGNvbnN0CnsgcmV0dXJuIChTaGFwZSkgKCBmc3R5
bGUgJiBNU2hhcGUgKTsgfQoKaW5saW5lIFFGcmFtZTo6U2hhZG93IFFGcmFtZTo6ZnJhbWVTaGFk
b3coKSBjb25zdAp7IHJldHVybiAoU2hhZG93KSAoIGZzdHlsZSAmIE1TaGFkb3cgKTsgfQoKaW5s
aW5lIHZvaWQgUUZyYW1lOjpzZXRGcmFtZVNoYXBlKCBRRnJhbWU6OlNoYXBlIHMgKQp7IHNldEZy
YW1lU3R5bGUoICggZnN0eWxlICYgTVNoYWRvdyApIHwgcyApOyB9CgppbmxpbmUgdm9pZCBRRnJh
bWU6OnNldEZyYW1lU2hhZG93KCBRRnJhbWU6OlNoYWRvdyBzICkKeyBzZXRGcmFtZVN0eWxlKCAo
IGZzdHlsZSAmIE1TaGFwZSApIHwgcyApOyB9CgppbmxpbmUgaW50IFFGcmFtZTo6bGluZVdpZHRo
KCkgY29uc3QKeyByZXR1cm4gbHdpZHRoOyB9CgppbmxpbmUgaW50IFFGcmFtZTo6bWlkTGluZVdp
ZHRoKCkgY29uc3QKeyByZXR1cm4gbWx3aWR0aDsgfQoKaW5saW5lIGludCBRRnJhbWU6Om1hcmdp
bigpIGNvbnN0CnsgcmV0dXJuIG13aWR0aDsgfQoKaW5saW5lIGludCBRRnJhbWU6OmZyYW1lV2lk
dGgoKSBjb25zdAp7IHJldHVybiBmd2lkdGg7IH0KIyA0MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9x
cG9wdXBtZW51LmgiIDIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FtZW51ZGF0YS5oIiAxCiMg
NDIgIi91c3IvbGliL3F0L2luY2x1ZGUvcW1lbnVkYXRhLmgiCiMgMSAiL3Vzci9saWIvcXQvaW5j
bHVkZS9xZ2xvYmFsLmgiIDEKIyA0MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xbWVudWRhdGEuaCIg
MgoKCgojIDEgIi91c3IvbGliL3F0L2luY2x1ZGUvcWljb25zZXQuaCIgMQojIDQyICIvdXNyL2xp
Yi9xdC9pbmNsdWRlL3FpY29uc2V0LmgiCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xcGl4bWFw
LmgiIDEKIyA0MiAiL3Vzci9saWIvcXQvaW5jbHVkZS9xcGl4bWFwLmgiCiMgMSAiL3Vzci9saWIv
cXQvaW5jbHVkZS9xcGFpbnRkZXZpY2UuaCIgMQojIDQzICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fw
aXhtYXAuaCIgMgojIDEgIi91c3IvbGliL3F0L2luY2x1ZGUvcWNvbG9yLmgiIDEKIyA0NCAiL3Vz
ci9saWIvcXQvaW5jbHVkZS9xcGl4bWFwLmgiIDIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fz
dHJpbmcuaCIgMQojIDQ1ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FwaXhtYXAuaCIgMgojIDEgIi91
c3IvbGliL3F0L2luY2x1ZGUvcW5hbWVzcGFjZS5oIiAxCiMgNDYgIi91c3IvbGliL3F0L2luY2x1
ZGUvcXBpeG1hcC5oIiAyCgoKY2xhc3MgUUdmeDsKCgoKCgoKCmNsYXNzIFFQaXhtYXAgOiBwdWJs
aWMgUVBhaW50RGV2aWNlLCBwdWJsaWMgUXQKewpwdWJsaWM6CiAgICBlbnVtIENvbG9yTW9kZSB7
IEF1dG8sIENvbG9yLCBNb25vIH07CiAgICBlbnVtIE9wdGltaXphdGlvbiB7IERlZmF1bHRPcHRp
bSwgTm9PcHRpbSwgTWVtb3J5T3B0aW09Tm9PcHRpbSwKICAgICAgICAgICAgICAgICAgICAgICAg
Tm9ybWFsT3B0aW0sIEJlc3RPcHRpbSB9OwoKICAgIFFQaXhtYXAoKTsKICAgIFFQaXhtYXAoIGlu
dCB3LCBpbnQgaCwgaW50IGRlcHRoID0gLTEsIE9wdGltaXphdGlvbiA9IERlZmF1bHRPcHRpbSAp
OwogICAgUVBpeG1hcCggY29uc3QgUVNpemUgJiwgaW50IGRlcHRoID0gLTEsIE9wdGltaXphdGlv
biA9IERlZmF1bHRPcHRpbSApOwogICAgUVBpeG1hcCggY29uc3QgUVN0cmluZyYgZmlsZU5hbWUs
IGNvbnN0IGNoYXIgKmZvcm1hdD0wLAogICAgICAgICAgICAgQ29sb3JNb2RlIG1vZGU9QXV0byAp
OwogICAgUVBpeG1hcCggY29uc3QgUVN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IGNoYXIgKmZvcm1h
dCwKICAgICAgICAgICAgIGludCBjb252ZXJzaW9uX2ZsYWdzICk7CiAgICBRUGl4bWFwKCBjb25z
dCBjaGFyICp4cG1bXSApOwogICAgUVBpeG1hcCggY29uc3QgUUJ5dGVBcnJheSAmZGF0YSApOwog
ICAgUVBpeG1hcCggY29uc3QgUVBpeG1hcCAmICk7CiAgIH5RUGl4bWFwKCk7CgogICAgUVBpeG1h
cCAmb3BlcmF0b3I9KCBjb25zdCBRUGl4bWFwICYgKTsKICAgIFFQaXhtYXAgJm9wZXJhdG9yPSgg
Y29uc3QgUUltYWdlICYgKTsKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0OwoKICAgIGludCB3aWR0
aCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnc7IH0KICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBkYXRhLT5oOyB9CiAgICBRU2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gUVNpemUoZGF0
YS0+dyxkYXRhLT5oKTsgfQogICAgUVJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIFFSZWN0KDAs
MCxkYXRhLT53LGRhdGEtPmgpOyB9CiAgICBpbnQgZGVwdGgoKSBjb25zdCB7IHJldHVybiBkYXRh
LT5kOyB9CiAgICBzdGF0aWMgaW50IGRlZmF1bHREZXB0aCgpOwoKICAgIHZvaWQgZmlsbCggY29u
c3QgUUNvbG9yICZmaWxsQ29sb3IgPSBRdDo6d2hpdGUgKTsKICAgIHZvaWQgZmlsbCggY29uc3Qg
UVdpZGdldCAqLCBpbnQgeG9mcywgaW50IHlvZnMgKTsKICAgIHZvaWQgZmlsbCggY29uc3QgUVdp
ZGdldCAqLCBjb25zdCBRUG9pbnQgJm9mcyApOwogICAgdm9pZCByZXNpemUoIGludCB3aWR0aCwg
aW50IGhlaWdodCApOwogICAgdm9pZCByZXNpemUoIGNvbnN0IFFTaXplICYgKTsKCiAgICBjb25z
dCBRQml0bWFwICptYXNrKCkgY29uc3Q7CiAgICB2b2lkIHNldE1hc2soIGNvbnN0IFFCaXRtYXAg
JiApOwogICAgYm9vbCBzZWxmTWFzaygpIGNvbnN0OwogICAgUUJpdG1hcCBjcmVhdGVIZXVyaXN0
aWNNYXNrKCBib29sIGNsaXBUaWdodCA9IFRSVUUgKSBjb25zdDsKCiAgICBzdGF0aWMgUVBpeG1h
cCBncmFiV2luZG93KCBXSWQsIGludCB4PTAsIGludCB5PTAsIGludCB3PS0xLCBpbnQgaD0tMSAp
OwogICAgc3RhdGljIFFQaXhtYXAgZ3JhYldpZGdldCggUVdpZGdldCAqIHdpZGdldCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeD0wLCBpbnQgeT0wLCBpbnQgdz0tMSwgaW50
IGg9LTEgKTsKCgogICAgUVBpeG1hcCB4Rm9ybSggY29uc3QgUVdNYXRyaXggJiApIGNvbnN0Owog
ICAgc3RhdGljIFFXTWF0cml4IHRydWVNYXRyaXgoIGNvbnN0IFFXTWF0cml4ICYsIGludCB3LCBp
bnQgaCApOwoKCiAgICBRSW1hZ2UgY29udmVydFRvSW1hZ2UoKSBjb25zdDsKICAgIGJvb2wgY29u
dmVydEZyb21JbWFnZSggY29uc3QgUUltYWdlICYsIENvbG9yTW9kZSBtb2RlPUF1dG8gKTsKICAg
IGJvb2wgY29udmVydEZyb21JbWFnZSggY29uc3QgUUltYWdlICYsIGludCBjb252ZXJzaW9uX2Zs
YWdzICk7CgogICAgc3RhdGljIGNvbnN0IGNoYXIqIGltYWdlRm9ybWF0KCBjb25zdCBRU3RyaW5n
ICZmaWxlTmFtZSApOwogICAgYm9vbCBsb2FkKCBjb25zdCBRU3RyaW5nJiBmaWxlTmFtZSwgY29u
c3QgY2hhciAqZm9ybWF0PTAsCiAgICAgICAgICAgICAgICAgICAgICBDb2xvck1vZGUgbW9kZT1B
dXRvICk7CiAgICBib29sIGxvYWQoIGNvbnN0IFFTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBjaGFy
ICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgY29udmVyc2lvbl9mbGFncyApOwog
ICAgYm9vbCBsb2FkRnJvbURhdGEoIGNvbnN0IHVjaGFyICpidWYsIHVpbnQgbGVuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmb3JtYXQ9MCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29sb3JNb2RlIG1vZGU9QXV0byApOwogICAgYm9vbCBsb2FkRnJv
bURhdGEoIGNvbnN0IHVjaGFyICpidWYsIHVpbnQgbGVuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBjb252ZXJzaW9uX2ZsYWdzICk7CiAgICBib29sIGxvYWRGcm9tRGF0YSggY29uc3QgUUJ5
dGVBcnJheSAmZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
Zm9ybWF0PTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb252ZXJzaW9uX2Zs
YWdzPTAgKTsKICAgIGJvb2wgc2F2ZSggY29uc3QgUVN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IGNo
YXIqIGZvcm1hdCApIGNvbnN0OwogICAgYm9vbCBzYXZlKCBjb25zdCBRU3RyaW5nJiBmaWxlTmFt
ZSwgY29uc3QgY2hhciogZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgaW50IHF1YWxpdHkg
KSBjb25zdDsKCgoKCgogICAgaW50IHNlcmlhbE51bWJlcigpIGNvbnN0OwoKICAgIE9wdGltaXph
dGlvbiBvcHRpbWl6YXRpb24oKSBjb25zdDsKICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uKCBPcHRp
bWl6YXRpb24gKTsKICAgIHN0YXRpYyBPcHRpbWl6YXRpb24gZGVmYXVsdE9wdGltaXphdGlvbigp
OwogICAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdE9wdGltaXphdGlvbiggT3B0aW1pemF0aW9uICk7
CgogICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwoKICAgIGJvb2wgaXNRQml0bWFwKCkgY29uc3Q7
CiMgMTY2ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FwaXhtYXAuaCIKcHJvdGVjdGVkOgogICAgUVBp
eG1hcCggaW50IHcsIGludCBoLCBjb25zdCB1Y2hhciAqZGF0YSwgYm9vbCBpc1hiaXRtYXAgKTsK
ICAgIGludCBtZXRyaWMoIGludCApIGNvbnN0OwojIDE3NyAiL3Vzci9saWIvcXQvaW5jbHVkZS9x
cGl4bWFwLmgiCiAgICBzdHJ1Y3QgUVBpeG1hcERhdGEgOiBwdWJsaWMgUVNoYXJlZCB7CiAgICAg
ICAgUUNPT1JEIHcsIGg7CiAgICAgICAgc2hvcnQgZDsKICAgICAgICB1aW50IHVuaW5pdCA6IDE7
CiAgICAgICAgdWludCBiaXRtYXAgOiAxOwogICAgICAgIHVpbnQgc2VsZm1hc2sgOiAxOwoKCgog
ICAgICAgIGludCBzZXJfbm87CiAgICAgICAgUUJpdG1hcCAqbWFzazsKIyAxOTYgIi91c3IvbGli
L3F0L2luY2x1ZGUvcXBpeG1hcC5oIgogICAgICAgIHZvaWQgKnhpbWFnZTsKICAgICAgICB2b2lk
ICptYXNrZ2M7CiMgMjA2ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FwaXhtYXAuaCIKICAgICAgICBP
cHRpbWl6YXRpb24gb3B0aW07CiAgICB9ICpkYXRhOwoKcHJpdmF0ZToKICAgIFFQaXhtYXAoIGlu
dCB3LCBpbnQgaCwgaW50IGRlcHRoLCBib29sLCBPcHRpbWl6YXRpb24gKTsKICAgIHZvaWQgaW5p
dCggaW50LCBpbnQsIGludCwgYm9vbCwgT3B0aW1pemF0aW9uICk7CiAgICB2b2lkIGRlcmVmKCk7
CiAgICBRUGl4bWFwIGNvcHkoIGJvb2wgaWdub3JlTWFzayA9IEZBTFNFICkgY29uc3Q7CiAgICBz
dGF0aWMgT3B0aW1pemF0aW9uIGRlZk9wdGltOwogICAgZnJpZW5kIHZvaWQgYml0Qmx0KCBRUGFp
bnREZXZpY2UgKiwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFFQYWludERldmljZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQs
IGludCwgaW50LCBpbnQsIFJhc3Rlck9wLCBib29sICk7CiAgICBmcmllbmQgdm9pZCBiaXRCbHQo
IFFQYWludERldmljZSAqLCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUUltYWdlKiBzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCwgaW50LCBpbnQsIGludCwgaW50IGNvbnZlcnNpb25fZmxhZ3MgKTsKICAgIGZyaWVuZCBjbGFz
cyBRQml0bWFwOwogICAgZnJpZW5kIGNsYXNzIFFQYWludERldmljZTsKICAgIGZyaWVuZCBjbGFz
cyBRUGFpbnRlcjsKfTsKCgppbmxpbmUgYm9vbCBRUGl4bWFwOjppc051bGwoKSBjb25zdAp7CiAg
ICByZXR1cm4gZGF0YS0+dyA9PSAwOwp9CgppbmxpbmUgdm9pZCBRUGl4bWFwOjpmaWxsKCBjb25z
dCBRV2lkZ2V0ICp3LCBjb25zdCBRUG9pbnQgJm9mcyApCnsKICAgIGZpbGwoIHcsIG9mcy54KCks
IG9mcy55KCkgKTsKfQoKaW5saW5lIHZvaWQgUVBpeG1hcDo6cmVzaXplKCBjb25zdCBRU2l6ZSAm
cyApCnsKICAgIHJlc2l6ZSggcy53aWR0aCgpLCBzLmhlaWdodCgpICk7Cn0KCmlubGluZSBjb25z
dCBRQml0bWFwICpRUGl4bWFwOjptYXNrKCkgY29uc3QKewogICAgcmV0dXJuIGRhdGEtPm1hc2s7
Cn0KCmlubGluZSBib29sIFFQaXhtYXA6OnNlbGZNYXNrKCkgY29uc3QKewogICAgcmV0dXJuIGRh
dGEtPnNlbGZtYXNrOwp9CiMgMjU5ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FwaXhtYXAuaCIKaW5s
aW5lIGludCBRUGl4bWFwOjpzZXJpYWxOdW1iZXIoKSBjb25zdAp7CiAgICByZXR1cm4gZGF0YS0+
c2VyX25vOwp9CgppbmxpbmUgUVBpeG1hcDo6T3B0aW1pemF0aW9uIFFQaXhtYXA6Om9wdGltaXph
dGlvbigpIGNvbnN0CnsKICAgIHJldHVybiBkYXRhLT5vcHRpbTsKfQoKaW5saW5lIGJvb2wgUVBp
eG1hcDo6aXNRQml0bWFwKCkgY29uc3QKewogICAgcmV0dXJuIGRhdGEtPmJpdG1hcDsKfQojIDI4
NyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xcGl4bWFwLmgiCiAgICAgICAgIFFEYXRhU3RyZWFtICZv
cGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRUGl4bWFwICYgKTsKICAgICAgICAgUURh
dGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFQaXhtYXAgJiApOwojIDQzICIv
dXNyL2xpYi9xdC9pbmNsdWRlL3FpY29uc2V0LmgiIDIKCgoKc3RydWN0IFFJY29uU2V0UHJpdmF0
ZTsKCgpjbGFzcyBRSWNvblNldAp7CnB1YmxpYzoKICAgIGVudW0gU2l6ZSB7IEF1dG9tYXRpYywg
U21hbGwsIExhcmdlIH07CgogICAgZW51bSBNb2RlIHsgTm9ybWFsLCBEaXNhYmxlZCwgQWN0aXZl
IH07CgogICAgUUljb25TZXQoKTsKICAgIFFJY29uU2V0KCBjb25zdCBRUGl4bWFwICYsIFNpemUg
PSBBdXRvbWF0aWMgKTsKICAgIFFJY29uU2V0KCBjb25zdCBRUGl4bWFwICZzbWFsbFBpeCwgY29u
c3QgUVBpeG1hcCAmbGFyZ2VQaXggKTsKICAgIFFJY29uU2V0KCBjb25zdCBRSWNvblNldCAmICk7
CiAgICB2aXJ0dWFsIH5RSWNvblNldCgpOwoKICAgIHZvaWQgcmVzZXQoIGNvbnN0IFFQaXhtYXAg
JiwgU2l6ZSApOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRQaXhtYXAoIGNvbnN0IFFQaXhtYXAgJiwg
U2l6ZSwgTW9kZSA9IE5vcm1hbCApOwogICAgdmlydHVhbCB2b2lkIHNldFBpeG1hcCggY29uc3Qg
UVN0cmluZyAmLCBTaXplLCBNb2RlID0gTm9ybWFsICk7CiAgICBRUGl4bWFwIHBpeG1hcCggU2l6
ZSwgTW9kZSApIGNvbnN0OwogICAgUVBpeG1hcCBwaXhtYXAoIFNpemUgcywgYm9vbCBlbmFibGVk
ICkgY29uc3Q7CiAgICBRUGl4bWFwIHBpeG1hcCgpIGNvbnN0OwogICAgYm9vbCBpc0dlbmVyYXRl
ZCggU2l6ZSwgTW9kZSApIGNvbnN0OwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CgogICAgdm9p
ZCBkZXRhY2goKTsKCiAgICBRSWNvblNldCAmb3BlcmF0b3I9KCBjb25zdCBRSWNvblNldCAmICk7
Cgpwcml2YXRlOgogICAgUUljb25TZXRQcml2YXRlICogZDsKfTsKIyA0NyAiL3Vzci9saWIvcXQv
aW5jbHVkZS9xbWVudWRhdGEuaCIgMgoKCgoKCmNsYXNzIFFQb3B1cE1lbnU7CmNsYXNzIFFNZW51
RGF0YURhdGE7CmNsYXNzIFFPYmplY3Q7CiMgMTIyICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FtZW51
ZGF0YS5oIgpjbGFzcyBRTWVudUl0ZW07CmNsYXNzIFFNZW51SXRlbUxpc3Q7CmNsYXNzIFFQaXht
YXA7CgoKCgoKY2xhc3MgUUN1c3RvbU1lbnVJdGVtIDogcHVibGljIFF0CnsKcHVibGljOgogICAg
UUN1c3RvbU1lbnVJdGVtKCk7CiAgICB2aXJ0dWFsIH5RQ3VzdG9tTWVudUl0ZW0oKTsKICAgIHZp
cnR1YWwgYm9vbCBmdWxsU3BhbigpIGNvbnN0OwogICAgdmlydHVhbCBib29sIGlzU2VwYXJhdG9y
KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9udCggY29uc3QgUUZvbnQmIGZvbnQgKTsK
ICAgIHZpcnR1YWwgdm9pZCBwYWludCggUVBhaW50ZXIqIHAsIGNvbnN0IFFDb2xvckdyb3VwJiBj
ZywgYm9vbCBhY3QsCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZW5hYmxlZCwgaW50IHgs
IGludCB5LCBpbnQgdywgaW50IGggKSA9IDA7CiAgICB2aXJ0dWFsIFFTaXplIHNpemVIaW50KCkg
PSAwOwp9OwoKCmNsYXNzIFFNZW51RGF0YQp7CmZyaWVuZCBjbGFzcyBRTWVudUJhcjsKZnJpZW5k
IGNsYXNzIFFQb3B1cE1lbnU7CnB1YmxpYzoKICAgIFFNZW51RGF0YSgpOwogICAgdmlydHVhbCB+
UU1lbnVEYXRhKCk7CgogICAgdWludCBjb3VudCgpIGNvbnN0OwoKCiAgICBpbnQgaW5zZXJ0SXRl
bSggY29uc3QgUVN0cmluZyAmdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyKiBtZW1iZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgYWNjZWwgPSAwLCBpbnQgaWQgPSAtMSwgaW50IGluZGV4ID0gLTEgKTsK
ICAgIGludCBpbnNlcnRJdGVtKCBjb25zdCBRSWNvblNldCYgaWNvbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciogbWVtYmVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGFjY2VsID0gMCwgaW50IGlkID0gLTEsIGludCBpbmRl
eCA9IC0xICk7CiAgICBpbnQgaW5zZXJ0SXRlbSggY29uc3QgUVBpeG1hcCAmcGl4bWFwLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNo
YXIqIG1lbWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhY2NlbCA9IDAsIGlu
dCBpZCA9IC0xLCBpbnQgaW5kZXggPSAtMSApOwogICAgaW50IGluc2VydEl0ZW0oIGNvbnN0IFFJ
Y29uU2V0JiBpY29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVBpeG1hcCAm
cGl4bWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2
ZXIsIGNvbnN0IGNoYXIqIG1lbWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBh
Y2NlbCA9IDAsIGludCBpZCA9IC0xLCBpbnQgaW5kZXggPSAtMSApOwoKCgoKICAgIGludCBpbnNl
cnRJdGVtKCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgaWQ9LTEsIGludCBpbmRleD0tMSApOwog
ICAgaW50IGluc2VydEl0ZW0oIGNvbnN0IFFJY29uU2V0JiBpY29uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmdGV4dCwgaW50IGlkPS0xLCBpbnQgaW5kZXg9LTEg
KTsKCiAgICBpbnQgaW5zZXJ0SXRlbSggY29uc3QgUVN0cmluZyAmdGV4dCwgUVBvcHVwTWVudSAq
cG9wdXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWQ9LTEsIGludCBpbmRleD0t
MSApOwogICAgaW50IGluc2VydEl0ZW0oIGNvbnN0IFFJY29uU2V0JiBpY29uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmdGV4dCwgUVBvcHVwTWVudSAqcG9wdXAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWQ9LTEsIGludCBpbmRleD0tMSApOwoK
CiAgICBpbnQgaW5zZXJ0SXRlbSggY29uc3QgUVBpeG1hcCAmcGl4bWFwLCBpbnQgaWQ9LTEsIGlu
dCBpbmRleD0tMSApOwogICAgaW50IGluc2VydEl0ZW0oIGNvbnN0IFFJY29uU2V0JiBpY29uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVBpeG1hcCAmcGl4bWFwLCBpbnQgaWQ9
LTEsIGludCBpbmRleD0tMSApOwogICAgaW50IGluc2VydEl0ZW0oIGNvbnN0IFFQaXhtYXAgJnBp
eG1hcCwgUVBvcHVwTWVudSAqcG9wdXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aWQ9LTEsIGludCBpbmRleD0tMSApOwogICAgaW50IGluc2VydEl0ZW0oIGNvbnN0IFFJY29uU2V0
JiBpY29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVBpeG1hcCAmcGl4bWFw
LCBRUG9wdXBNZW51ICpwb3B1cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZD0t
MSwgaW50IGluZGV4PS0xICk7CgogICAgaW50IGluc2VydEl0ZW0oIFFXaWRnZXQqIHdpZGdldCwg
aW50IGlkPS0xLCBpbnQgaW5kZXg9LTEgKTsKCiAgICBpbnQgaW5zZXJ0SXRlbSggY29uc3QgUUlj
b25TZXQmIGljb24sIFFDdXN0b21NZW51SXRlbSogY3VzdG9tLCBpbnQgaWQ9LTEsIGludCBpbmRl
eD0tMSApOwogICAgaW50IGluc2VydEl0ZW0oIFFDdXN0b21NZW51SXRlbSogY3VzdG9tLCBpbnQg
aWQ9LTEsIGludCBpbmRleD0tMSApOwoKCiAgICBpbnQgaW5zZXJ0U2VwYXJhdG9yKCBpbnQgaW5k
ZXg9LTEgKTsKCiAgICB2b2lkIHJlbW92ZUl0ZW0oIGludCBpZCApIHsgcmVtb3ZlSXRlbUF0KGlu
ZGV4T2YoaWQpKTsgfQogICAgdm9pZCByZW1vdmVJdGVtQXQoIGludCBpbmRleCApOwogICAgdm9p
ZCBjbGVhcigpOwoKICAgIGludCBhY2NlbCggaW50IGlkICkgY29uc3Q7CiAgICB2b2lkIHNldEFj
Y2VsKCBpbnQga2V5LCBpbnQgaWQgKTsKCiAgICBRSWNvblNldCAqaWNvblNldCggaW50IGlkICkg
Y29uc3Q7CiAgICBRU3RyaW5nIHRleHQoIGludCBpZCApIGNvbnN0OwogICAgUVBpeG1hcCAqcGl4
bWFwKCBpbnQgaWQgKSBjb25zdDsKCiAgICB2b2lkIHNldFdoYXRzVGhpcyggaW50IGlkLCBjb25z
dCBRU3RyaW5nJiApOwogICAgUVN0cmluZyB3aGF0c1RoaXMoIGludCBpZCApIGNvbnN0OwoKCiAg
ICB2b2lkIGNoYW5nZUl0ZW0oIGludCBpZCwgY29uc3QgUVN0cmluZyAmdGV4dCApOwogICAgdm9p
ZCBjaGFuZ2VJdGVtKCBpbnQgaWQsIGNvbnN0IFFQaXhtYXAgJnBpeG1hcCApOwogICAgdm9pZCBj
aGFuZ2VJdGVtKCBpbnQgaWQsIGNvbnN0IFFJY29uU2V0ICZpY29uLCBjb25zdCBRU3RyaW5nICZ0
ZXh0ICk7CiAgICB2b2lkIGNoYW5nZUl0ZW0oIGludCBpZCwgY29uc3QgUUljb25TZXQgJmljb24s
IGNvbnN0IFFQaXhtYXAgJnBpeG1hcCApOwoKICAgIHZvaWQgY2hhbmdlSXRlbSggY29uc3QgUVN0
cmluZyAmdGV4dCwgaW50IGlkICk7CiAgICB2b2lkIGNoYW5nZUl0ZW0oIGNvbnN0IFFQaXhtYXAg
JnBpeG1hcCwgaW50IGlkICk7CiAgICB2b2lkIGNoYW5nZUl0ZW0oIGNvbnN0IFFJY29uU2V0ICZp
Y29uLCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgaWQgKTsKCgogICAgYm9vbCBpc0l0ZW1FbmFi
bGVkKCBpbnQgaWQgKSBjb25zdDsKICAgIHZvaWQgc2V0SXRlbUVuYWJsZWQoIGludCBpZCwgYm9v
bCBlbmFibGUgKTsKCiAgICBib29sIGlzSXRlbUNoZWNrZWQoIGludCBpZCApIGNvbnN0OwogICAg
dm9pZCBzZXRJdGVtQ2hlY2tlZCggaW50IGlkLCBib29sIGNoZWNrICk7CgogICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUl0ZW0oIGludCBpZCApOwoKICAgIGludCBpbmRleE9mKCBpbnQgaWQgKSBjb25z
dDsKICAgIGludCBpZEF0KCBpbnQgaW5kZXggKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRJ
ZCggaW50IGluZGV4LCBpbnQgaWQgKTsKCiAgICBib29sIGNvbm5lY3RJdGVtKCBpbnQgaWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0
IGNoYXIqIG1lbWJlciApOwogICAgYm9vbCBkaXNjb25uZWN0SXRlbSggaW50IGlkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBj
aGFyKiBtZW1iZXIgKTsKCiAgICBib29sIHNldEl0ZW1QYXJhbWV0ZXIoIGludCBpZCwgaW50IHBh
cmFtICk7CiAgICBpbnQgaXRlbVBhcmFtZXRlciggaW50IGlkICkgY29uc3Q7CgogICAgUU1lbnVJ
dGVtICpmaW5kSXRlbSggaW50IGlkICkgY29uc3Q7CiAgICBRTWVudUl0ZW0gKmZpbmRJdGVtKCBp
bnQgaWQsIFFNZW51RGF0YSAqKiBwYXJlbnQgKSBjb25zdDsKCiAgICB2b2lkIGFjdGl2YXRlSXRl
bUF0KCBpbnQgaW5kZXggKTsKCnByb3RlY3RlZDoKICAgIGludCBhY3RJdGVtOwogICAgUU1lbnVJ
dGVtTGlzdCAqbWl0ZW1zOwogICAgUU1lbnVEYXRhICpwYXJlbnRNZW51OwogICAgdWludCBpc1Bv
cHVwTWVudSA6IDE7CiAgICB1aW50IGlzTWVudUJhciA6IDE7CiAgICB1aW50IGJhZFNpemUgOiAx
OwogICAgdWludCBtb3VzZUJ0RG4gOiAxOwogICAgdWludCBhdm9pZF9jaXJjdWxhcml0eSA6IDE7
CiAgICB1aW50IGFjdEl0ZW1Eb3duIDogMTsKICAgIHZpcnR1YWwgdm9pZCBtZW51Q29udGVudHND
aGFuZ2VkKCk7CiAgICB2aXJ0dWFsIHZvaWQgbWVudVN0YXRlQ2hhbmdlZCgpOwogICAgdmlydHVh
bCB2b2lkIG1lbnVJbnNQb3B1cCggUVBvcHVwTWVudSAqICk7CiAgICB2aXJ0dWFsIHZvaWQgbWVu
dURlbFBvcHVwKCBRUG9wdXBNZW51ICogKTsKCiAgICBRTWVudUl0ZW0gKiBmaW5kUG9wdXAoIFFQ
b3B1cE1lbnUgKiwgaW50ICppbmRleCA9IDAgKTsKCnByaXZhdGU6CiAgICBpbnQgaW5zZXJ0QW55
KCBjb25zdCBRU3RyaW5nICosIGNvbnN0IFFQaXhtYXAgKiwgUVBvcHVwTWVudSAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBRSWNvblNldCosIGludCwgaW50LCBRV2lkZ2V0KiA9
IDAsIFFDdXN0b21NZW51SXRlbSogPSAwKTsKICAgIHZvaWQgcmVtb3ZlUG9wdXAoIFFQb3B1cE1l
bnUgKiApOwogICAgdmlydHVhbCB2b2lkIHNldEFsbERpcnR5KCBib29sICk7CiAgICB2b2lkIGNo
YW5nZUl0ZW1JY29uU2V0KCBpbnQgaWQsIGNvbnN0IFFJY29uU2V0ICZpY29uICk7CgogICAgUU1l
bnVEYXRhRGF0YSAqZDsKCnByaXZhdGU6CgogICAgUU1lbnVEYXRhKCBjb25zdCBRTWVudURhdGEg
JiApOwogICAgUU1lbnVEYXRhICZvcGVyYXRvcj0oIGNvbnN0IFFNZW51RGF0YSAmICk7Cgp9Owoj
IDQ0ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fwb3B1cG1lbnUuaCIgMgoKCgoKCmNsYXNzIFFQb3B1
cE1lbnUgOiBwdWJsaWMgUUZyYW1lLCBwdWJsaWMgUU1lbnVEYXRhCnsKICAgIHB1YmxpYzogUU1l
dGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7
IH0gY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHN0YXRpYyBRTWV0YU9iamVjdCogc3Rh
dGljTWV0YU9iamVjdCgpOyBzdGF0aWMgUVN0cmluZyB0cihjb25zdCBjaGFyKik7IHN0YXRpYyBR
U3RyaW5nIHRyKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7IHByb3RlY3RlZDogdm9pZCBpbml0
TWV0YU9iamVjdCgpOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CgpwdWJs
aWM6CiAgICBRUG9wdXBNZW51KCBRV2lkZ2V0ICpwYXJlbnQ9MCwgY29uc3QgY2hhciAqbmFtZT0w
ICk7CiAgIH5RUG9wdXBNZW51KCk7CgogICAgdm9pZCBwb3B1cCggY29uc3QgUVBvaW50ICYgcG9z
LCBpbnQgaW5kZXhBdFBvaW50ID0gMCApOwogICAgdm9pZCB1cGRhdGVJdGVtKCBpbnQgaWQgKTsK
CiAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2thYmxlKCBib29sICk7CiAgICBib29sIGlzQ2hlY2th
YmxlKCkgY29uc3Q7CgogICAgdm9pZCBzZXRGb250KCBjb25zdCBRRm9udCAmICk7CiAgICB2b2lk
IHNob3coKTsKICAgIHZvaWQgaGlkZSgpOwoKICAgIGludCBleGVjKCk7CiAgICBpbnQgZXhlYygg
Y29uc3QgUVBvaW50ICYgcG9zLCBpbnQgaW5kZXhBdFBvaW50ID0gMCApOwoKICAgIHZpcnR1YWwg
dm9pZCBzZXRBY3RpdmVJdGVtKCBpbnQgKTsKICAgIFFTaXplIHNpemVIaW50KCkgY29uc3Q7Cgog
ICAgaW50IGlkQXQoIGludCBpbmRleCApIGNvbnN0IHsgcmV0dXJuIFFNZW51RGF0YTo6aWRBdCgg
aW5kZXggKTsgfQogICAgaW50IGlkQXQoIGNvbnN0IFFQb2ludCYgcG9zICkgY29uc3Q7CgogICAg
Ym9vbCBjdXN0b21XaGF0c1RoaXMoKSBjb25zdDsKCiAgICBpbnQgaW5zZXJ0VGVhck9mZkhhbmRs
ZSggaW50IGlkPS0xLCBpbnQgaW5kZXg9LTEgKTsKCiAgICB2b2lkIGFjdGl2YXRlSXRlbUF0KCBp
bnQgaW5kZXggKTsKCgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGFjdGl2YXRlZCggaW50IGl0ZW1JZCAp
OwogICAgdm9pZCBoaWdobGlnaHRlZCggaW50IGl0ZW1JZCApOwogICAgdm9pZCBhY3RpdmF0ZWRS
ZWRpcmVjdCggaW50IGl0ZW1JZCApOwogICAgdm9pZCBoaWdobGlnaHRlZFJlZGlyZWN0KCBpbnQg
aXRlbUlkICk7CiAgICB2b2lkIGFib3V0VG9TaG93KCk7CiAgICB2b2lkIGFib3V0VG9IaWRlKCk7
Cgpwcm90ZWN0ZWQ6CiAgICBpbnQgaXRlbUhlaWdodCggaW50ICkgY29uc3Q7CiAgICBpbnQgaXRl
bUhlaWdodCggUU1lbnVJdGVtKiBtaSApIGNvbnN0OwogICAgdm9pZCBkcmF3SXRlbSggUVBhaW50
ZXIqIHAsIGludCB0YWIsIFFNZW51SXRlbSogbWksCiAgICAgICAgICAgICAgICAgICBib29sIGFj
dCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpOwoKICAgIHZvaWQgZHJhd0NvbnRlbnRzKCBR
UGFpbnRlciAqICk7CgogICAgdm9pZCBjbG9zZUV2ZW50KCBRQ2xvc2VFdmVudCAqZSApOwogICAg
dm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVudCAqICk7CiAgICB2b2lkIG1vdXNlUHJlc3NFdmVu
dCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZVJlbGVhc2VFdmVudCggUU1vdXNlRXZl
bnQgKiApOwogICAgdm9pZCBtb3VzZU1vdmVFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9p
ZCBrZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKiApOwogICAgdm9pZCBmb2N1c0luRXZlbnQoIFFG
b2N1c0V2ZW50ICogKTsKICAgIHZvaWQgZm9jdXNPdXRFdmVudCggUUZvY3VzRXZlbnQgKiApOwog
ICAgdm9pZCB0aW1lckV2ZW50KCBRVGltZXJFdmVudCAqICk7CiAgICB2b2lkIHN0eWxlQ2hhbmdl
KCBRU3R5bGUmICk7CiAgICBpbnQgY29sdW1ucygpIGNvbnN0OwoKICAgIGJvb2wgZm9jdXNOZXh0
UHJldkNoaWxkKCBib29sIG5leHQgKTsKCnByaXZhdGUgOgogICAgdm9pZCBzdWJBY3RpdmF0ZWQo
IGludCBpdGVtSWQgKTsKICAgIHZvaWQgc3ViSGlnaGxpZ2h0ZWQoIGludCBpdGVtSWQgKTsKCiAg
ICB2b2lkIGFjY2VsQWN0aXZhdGVkKCBpbnQgaXRlbUlkICk7CiAgICB2b2lkIGFjY2VsRGVzdHJv
eWVkKCk7CgogICAgdm9pZCBtb2RhbEFjdGl2YXRpb24oIGludCApOwoKICAgIHZvaWQgc3ViTWVu
dVRpbWVyKCk7CiAgICB2b2lkIGFsbG93QW5pbWF0aW9uKCk7CiAgICB2b2lkIHRvZ2dsZVRlYXJP
ZmYoKTsKCnByaXZhdGU6CiAgICB2b2lkIG1lbnVDb250ZW50c0NoYW5nZWQoKTsKICAgIHZvaWQg
bWVudVN0YXRlQ2hhbmdlZCgpOwogICAgdm9pZCBtZW51SW5zUG9wdXAoIFFQb3B1cE1lbnUgKiAp
OwogICAgdm9pZCBtZW51RGVsUG9wdXAoIFFQb3B1cE1lbnUgKiApOwogICAgdm9pZCBmcmFtZUNo
YW5nZWQoKTsKCiAgICB2b2lkIGFjdFNpZyggaW50LCBib29sID0gRkFMU0UgKTsKICAgIHZvaWQg
aGlsaXRTaWcoIGludCApOwogICAgdmlydHVhbCB2b2lkIHNldEZpcnN0SXRlbUFjdGl2ZSgpOwog
ICAgdm9pZCBoaWRlQWxsUG9wdXBzKCk7CiAgICB2b2lkIGhpZGVQb3B1cHMoKTsKICAgIGJvb2wg
dHJ5TWVudUJhciggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBieWVNZW51QmFyKCk7CgogICAg
aW50IGl0ZW1BdFBvcyggY29uc3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFSZWN0IGl0ZW1HZW9t
ZXRyeSggaW50IGluZGV4ICk7CiAgICB2b2lkIHVwZGF0ZVNpemUoKTsKICAgIHZvaWQgdXBkYXRl
Um93KCBpbnQgcm93ICk7CgogICAgdm9pZCB1cGRhdGVBY2NlbCggUVdpZGdldCAqICk7CiAgICB2
b2lkIGVuYWJsZUFjY2VsKCBib29sICk7CgogICAgUU1lbnVJdGVtICpzZWxmSXRlbTsKCiAgICBR
QWNjZWwgKmF1dG9hY2NlbDsKCiAgICBpbnQgcG9wdXBBY3RpdmU7CiAgICBpbnQgdGFiOwogICAg
dWludCBhY2NlbERpc2FibGVkIDogMTsKICAgIHVpbnQgY2hlY2thYmxlIDogMTsKICAgIHVpbnQg
Y29ubmVjdE1vZGFsUmVjdXJzaW9uU2FmZXR5IDogMTsKICAgIHVpbnQgdG9ybk9mZiA6IDE7CiAg
ICBpbnQgbWF4UE1XaWR0aDsKICAgIGludCBuY29sczsKICAgIGJvb2wgc25hcFRvTW91c2U7CiAg
ICBib29sIHRyeU1vdXNlRXZlbnQoIFFQb3B1cE1lbnUgKiwgUU1vdXNlRXZlbnQgKiApOwoKICAg
IGZyaWVuZCBjbGFzcyBRTWVudURhdGE7CiAgICBmcmllbmQgY2xhc3MgUU1lbnVCYXI7CgogICAg
dm9pZCBjb25uZWN0TW9kYWwoUVBvcHVwTWVudSogcmVjZWl2ZXIsIGJvb2wgZG9Db25uZWN0KTsK
CnByaXZhdGU6CgogICAgUVBvcHVwTWVudSggY29uc3QgUVBvcHVwTWVudSAmICk7CiAgICBRUG9w
dXBNZW51ICZvcGVyYXRvcj0oIGNvbnN0IFFQb3B1cE1lbnUgJiApOwoKfTsKIyA0MyAiL3Vzci9s
aWIvcXQvaW5jbHVkZS9xbWVudWJhci5oIiAyCgoKCgpjbGFzcyBRTWVudUJhciA6IHB1YmxpYyBR
RnJhbWUsIHB1YmxpYyBRTWVudURhdGEKewogICAgcHVibGljOiBRTWV0YU9iamVjdCAqbWV0YU9i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSBjb25zdCBjaGFyICpj
bGFzc05hbWUoKSBjb25zdDsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7
IHN0YXRpYyBRU3RyaW5nIHRyKGNvbnN0IGNoYXIqKTsgc3RhdGljIFFTdHJpbmcgdHIoY29uc3Qg
Y2hhciosIGNvbnN0IGNoYXIqKTsgcHJvdGVjdGVkOiB2b2lkIGluaXRNZXRhT2JqZWN0KCk7IHBy
aXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKCgoKCnB1YmxpYzoKICAgIFFNZW51
QmFyKCBRV2lkZ2V0ICpwYXJlbnQ9MCwgY29uc3QgY2hhciAqbmFtZT0wICk7CiAgIH5RTWVudUJh
cigpOwoKICAgIHZvaWQgdXBkYXRlSXRlbSggaW50IGlkICk7CgogICAgdm9pZCBzaG93KCk7CiAg
ICB2b2lkIGhpZGUoKTsKCiAgICBib29sIGV2ZW50RmlsdGVyKCBRT2JqZWN0ICosIFFFdmVudCAq
ICk7CgogICAgaW50IGhlaWdodEZvcldpZHRoKGludCkgY29uc3Q7CgogICAgZW51bSBTZXBhcmF0
b3IgeyBOZXZlcj0wLCBJbldpbmRvd3NTdHlsZT0xIH07CiAgICBTZXBhcmF0b3Igc2VwYXJhdG9y
KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U2VwYXJhdG9yKCBTZXBhcmF0b3Igd2hlbiAp
OwoKICAgIHZvaWQgc2V0RGVmYXVsdFVwKCBib29sICk7CiAgICBib29sIGlzRGVmYXVsdFVwKCkg
Y29uc3Q7CgogICAgYm9vbCBjdXN0b21XaGF0c1RoaXMoKSBjb25zdDsKCiAgICBRU2l6ZSBzaXpl
SGludCgpIGNvbnN0OwogICAgUVNpemUgbWluaW11bVNpemUoKSBjb25zdDsKICAgIFFTaXplIG1p
bmltdW1TaXplSGludCgpIGNvbnN0OwoKICAgIHZvaWQgYWN0aXZhdGVJdGVtQXQoIGludCBpbmRl
eCApOwoKcHJvdGVjdGVkOgogICAgdm9pZCBhY3RpdmF0ZWQoIGludCBpdGVtSWQgKTsKICAgIHZv
aWQgaGlnaGxpZ2h0ZWQoIGludCBpdGVtSWQgKTsKCnByb3RlY3RlZDoKICAgIHZvaWQgZHJhd0Nv
bnRlbnRzKCBRUGFpbnRlciAqICk7CiAgICB2b2lkIGZvbnRDaGFuZ2UoIGNvbnN0IFFGb250ICYg
KTsKICAgIHZvaWQgbW91c2VQcmVzc0V2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lkIG1v
dXNlUmVsZWFzZUV2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lkIG1vdXNlTW92ZUV2ZW50
KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lkIGtleVByZXNzRXZlbnQoIFFLZXlFdmVudCAqICk7
CiAgICB2b2lkIGZvY3VzSW5FdmVudCggUUZvY3VzRXZlbnQgKiApOwogICAgdm9pZCBmb2N1c091
dEV2ZW50KCBRRm9jdXNFdmVudCAqICk7CiAgICB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZl
bnQgKiApOwogICAgdm9pZCBsZWF2ZUV2ZW50KCBRRXZlbnQgKiApOwogICAgdm9pZCBtZW51Q29u
dGVudHNDaGFuZ2VkKCk7CiAgICB2b2lkIG1lbnVTdGF0ZUNoYW5nZWQoKTsKICAgIHZvaWQgc3R5
bGVDaGFuZ2UoIFFTdHlsZSYgKTsKCnByaXZhdGUgOgogICAgdm9pZCBzdWJBY3RpdmF0ZWQoIGlu
dCBpdGVtSWQgKTsKICAgIHZvaWQgc3ViSGlnaGxpZ2h0ZWQoIGludCBpdGVtSWQgKTsKCiAgICB2
b2lkIGFjY2VsQWN0aXZhdGVkKCBpbnQgaXRlbUlkICk7CiAgICB2b2lkIGFjY2VsRGVzdHJveWVk
KCk7Cgpwcml2YXRlOgogICAgdm9pZCBtZW51SW5zUG9wdXAoIFFQb3B1cE1lbnUgKiApOwogICAg
dm9pZCBtZW51RGVsUG9wdXAoIFFQb3B1cE1lbnUgKiApOwogICAgdm9pZCBmcmFtZUNoYW5nZWQo
KTsKCiAgICBib29sIHRyeU1vdXNlRXZlbnQoIFFQb3B1cE1lbnUgKiwgUU1vdXNlRXZlbnQgKiAp
OwogICAgdm9pZCB0cnlLZXlFdmVudCggUVBvcHVwTWVudSAqLCBRS2V5RXZlbnQgKiApOwogICAg
dm9pZCBnb29kYnllKCBib29sIGNhbmNlbGxlZCA9IEZBTFNFICk7CiAgICB2b2lkIG9wZW5BY3RQ
b3B1cCgpOwogICAgdm9pZCBoaWRlUG9wdXBzKCk7CgogICAgdmlydHVhbCB2b2lkIHNldEFjdEl0
ZW0oIGludCwgYm9vbCA9IEZBTFNFICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93c0FsdE1v
ZGUoIGJvb2wsIGludCA9IDAgKTsKCiAgICB2b2lkIHNldEFjdGl2ZUl0ZW0oIGludCBpbmRleCwg
Ym9vbCBzaG93ID0gVFJVRSwgYm9vbCBhY3RpdmF0ZV9maXJzdF9pdGVtID0gVFJVRSApOwogICAg
dm9pZCBzZXRBbHRNb2RlKCBib29sICk7CgogICAgaW50IGNhbGN1bGF0ZVJlY3RzKCBpbnQgbWF4
X3dpZHRoID0gLTEgKTsKICAgIGludCBpdGVtQXRQb3MoIGNvbnN0IFFQb2ludCAmICk7CiAgICBR
UmVjdCBpdGVtUmVjdCggaW50IGl0ZW0gKTsKCgogICAgdm9pZCBzZXR1cEFjY2VsZXJhdG9ycygp
OwogICAgUUFjY2VsICphdXRvYWNjZWw7CgogICAgUVJlY3QgKmlyZWN0czsKICAgIGludCByaWdo
dFNpZGU7CgogICAgdWludCBtc2VwYXJhdG9yIDogMTsKICAgIHVpbnQgd2FpdGZvcmFsdCA6IDE7
CiAgICB1aW50IHBvcHVwdmlzaWJsZSA6IDE7CiAgICB1aW50IGhhc21vdXNlIDogMTsKICAgIHVp
bnQgZGVmYXVsdHVwIDogMTsKICAgIHVpbnQgdG9nZ2xlY2xvc2UgOiAxOwoKICAgIGZyaWVuZCBj
bGFzcyBRUG9wdXBNZW51OwoKcHJpdmF0ZToKCiAgICBRTWVudUJhciggY29uc3QgUU1lbnVCYXIg
JiApOwogICAgUU1lbnVCYXIgJm9wZXJhdG9yPSggY29uc3QgUU1lbnVCYXIgJiApOwoKfTsKIyA0
MyAia2VybmVsL3FhYnN0cmFjdGxheW91dC5jcHAiIDIKIyAxICJrZXJuZWwvcWFwcGxpY2F0aW9u
LmgiIDEKIyA0MiAia2VybmVsL3FhcHBsaWNhdGlvbi5oIgojIDEgImtlcm5lbC9xd2lkZ2V0Lmgi
IDEKIyA0MyAia2VybmVsL3FhcHBsaWNhdGlvbi5oIiAyCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVk
ZS9xYXNjaWlkaWN0LmgiIDEKIyA0MiAiL3Vzci9saWIvcXQvaW5jbHVkZS9xYXNjaWlkaWN0Lmgi
CiMgMSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xZ2RpY3QuaCIgMQojIDQyICIvdXNyL2xpYi9xdC9p
bmNsdWRlL3FnZGljdC5oIgojIDEgIi91c3IvbGliL3F0L2luY2x1ZGUvcWNvbGxlY3Rpb24uaCIg
MQojIDQyICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fjb2xsZWN0aW9uLmgiCiMgMSAiL3Vzci9saWIv
cXQvaW5jbHVkZS9xZ2xvYmFsLmgiIDEKIyA0MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xY29sbGVj
dGlvbi5oIiAyCgoKCmNsYXNzIFFHVmVjdG9yOwpjbGFzcyBRR0xpc3Q7CmNsYXNzIFFHRGljdDsK
CgpjbGFzcyBRQ29sbGVjdGlvbgp7CnB1YmxpYzoKICAgIGJvb2wgYXV0b0RlbGV0ZSgpIGNvbnN0
IHsgcmV0dXJuIGRlbF9pdGVtOyB9CiAgICB2b2lkIHNldEF1dG9EZWxldGUoIGJvb2wgZW5hYmxl
ICkgeyBkZWxfaXRlbSA9IGVuYWJsZTsgfQoKICAgIHZpcnR1YWwgdWludCBjb3VudCgpIGNvbnN0
ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpID0gMDsKCiAgICB0eXBlZGVmIHZvaWQgKkl0
ZW07Cgpwcm90ZWN0ZWQ6CiAgICBRQ29sbGVjdGlvbigpIHsgZGVsX2l0ZW0gPSBGQUxTRTsgfQog
ICAgUUNvbGxlY3Rpb24oY29uc3QgUUNvbGxlY3Rpb24gJikgeyBkZWxfaXRlbSA9IEZBTFNFOyB9
CiAgICB2aXJ0dWFsIH5RQ29sbGVjdGlvbigpIHt9CgogICAgYm9vbCBkZWxfaXRlbTsKCiAgICB2
aXJ0dWFsIEl0ZW0gbmV3SXRlbSggSXRlbSApOwogICAgdmlydHVhbCB2b2lkIGRlbGV0ZUl0ZW0o
IEl0ZW0gKTsKfTsKIyA0MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xZ2RpY3QuaCIgMgojIDEgIi91
c3IvbGliL3F0L2luY2x1ZGUvcXN0cmluZy5oIiAxCiMgNDQgIi91c3IvbGliL3F0L2luY2x1ZGUv
cWdkaWN0LmgiIDIKCgpjbGFzcyBRR0RpY3RJdGVyYXRvcjsKY2xhc3MgUUdESXRMaXN0OwoKCmNs
YXNzIFFCYXNlQnVja2V0CnsKcHVibGljOgogICAgUUNvbGxlY3Rpb246Okl0ZW0gZ2V0RGF0YSgp
IHsgcmV0dXJuIGRhdGE7IH0KICAgIFFDb2xsZWN0aW9uOjpJdGVtIHNldERhdGEoIFFDb2xsZWN0
aW9uOjpJdGVtIGQgKSB7IHJldHVybiBkYXRhID0gZDsgfQogICAgUUJhc2VCdWNrZXQgKmdldE5l
eHQoKSB7IHJldHVybiBuZXh0OyB9CiAgICB2b2lkIHNldE5leHQoIFFCYXNlQnVja2V0ICpuKSB7
IG5leHQgPSBuOyB9CnByb3RlY3RlZDoKICAgIFFCYXNlQnVja2V0KCBRQ29sbGVjdGlvbjo6SXRl
bSBkLCBRQmFzZUJ1Y2tldCAqbiApIDogZGF0YShkKSwgbmV4dChuKSB7fQogICAgUUNvbGxlY3Rp
b246Okl0ZW0gZGF0YTsKICAgIFFCYXNlQnVja2V0ICpuZXh0Owp9OwoKY2xhc3MgUVN0cmluZ0J1
Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFTdHJpbmdCdWNrZXQoIGNv
bnN0IFFTdHJpbmcgJmssIFFDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAg
ICAgICA6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKSB7fQogICAgY29uc3QgUVN0cmluZyAmZ2V0
S2V5KCkgY29uc3QgeyByZXR1cm4ga2V5OyB9CnByaXZhdGU6CiAgICBRU3RyaW5nIGtleTsKfTsK
CmNsYXNzIFFBc2NpaUJ1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFB
c2NpaUJ1Y2tldCggY29uc3QgY2hhciAqaywgUUNvbGxlY3Rpb246Okl0ZW0gZCwgUUJhc2VCdWNr
ZXQgKm4gKQogICAgICAgIDogUUJhc2VCdWNrZXQoZCxuKSwga2V5KGspIHt9CiAgICBjb25zdCBj
aGFyICpnZXRLZXkoKSBjb25zdCB7IHJldHVybiBrZXk7IH0KcHJpdmF0ZToKICAgIGNvbnN0IGNo
YXIgKmtleTsKfTsKCmNsYXNzIFFJbnRCdWNrZXQgOiBwdWJsaWMgUUJhc2VCdWNrZXQKewpwdWJs
aWM6CiAgICBRSW50QnVja2V0KCBsb25nIGssIFFDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVj
a2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKSB7fQogICAgbG9uZyBn
ZXRLZXkoKSBjb25zdCB7IHJldHVybiBrZXk7IH0KcHJpdmF0ZToKICAgIGxvbmcga2V5Owp9OwoK
Y2xhc3MgUVB0ckJ1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFQdHJC
dWNrZXQoIHZvaWQgKmssIFFDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAg
ICAgICA6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKSB7fQogICAgdm9pZCAqZ2V0S2V5KCkgY29u
c3QgeyByZXR1cm4ga2V5OyB9CnByaXZhdGU6CiAgICB2b2lkICprZXk7Cn07CgoKY2xhc3MgUUdE
aWN0IDogcHVibGljIFFDb2xsZWN0aW9uCnsKcHVibGljOgogICAgdWludCBjb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG51bUl0ZW1zOyB9CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiB2bGVu
OyB9CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBsb29rX3N0cmluZyggY29uc3QgUVN0cmluZyYga2V5
LCBRQ29sbGVjdGlvbjo6SXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGxvb2tfYXNjaWkoIGNvbnN0IGNoYXIgKmtleSwg
UUNvbGxlY3Rpb246Okl0ZW0sIGludCApOwogICAgUUNvbGxlY3Rpb246Okl0ZW0gbG9va19pbnQo
IGxvbmcga2V5LCBRQ29sbGVjdGlvbjo6SXRlbSwgaW50ICk7CiAgICBRQ29sbGVjdGlvbjo6SXRl
bSBsb29rX3B0ciggdm9pZCAqa2V5LCBRQ29sbGVjdGlvbjo6SXRlbSwgaW50ICk7CgogICAgUURh
dGFTdHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFtICYgKTsKICAgIFFEYXRhU3RyZWFtICZ3cml0ZSgg
UURhdGFTdHJlYW0gJiApIGNvbnN0OwoKcHJvdGVjdGVkOgogICAgZW51bSBLZXlUeXBlIHsgU3Ry
aW5nS2V5LCBBc2NpaUtleSwgSW50S2V5LCBQdHJLZXkgfTsKCiAgICBRR0RpY3QoIHVpbnQgbGVu
LCBLZXlUeXBlIGt0LCBib29sIGNzLCBib29sIGNrICk7CiAgICBRR0RpY3QoIGNvbnN0IFFHRGlj
dCAmICk7CiAgIH5RR0RpY3QoKTsKCiAgICBRR0RpY3QgJm9wZXJhdG9yPSggY29uc3QgUUdEaWN0
ICYgKTsKCiAgICBib29sIHJlbW92ZV9zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJmtleSwgUUNvbGxl
Y3Rpb246Okl0ZW0gaXRlbT0wICk7CiAgICBib29sIHJlbW92ZV9hc2NpaSggY29uc3QgY2hhciAq
a2V5LCBRQ29sbGVjdGlvbjo6SXRlbSBpdGVtPTAgKTsKICAgIGJvb2wgcmVtb3ZlX2ludCggbG9u
ZyBrZXksIFFDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCApOwogICAgYm9vbCByZW1vdmVfcHRyKCB2
b2lkICprZXksIFFDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCApOwogICAgUUNvbGxlY3Rpb246Okl0
ZW0gdGFrZV9zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJmtleSApOwogICAgUUNvbGxlY3Rpb246Okl0
ZW0gdGFrZV9hc2NpaSggY29uc3QgY2hhciAqa2V5ICk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSB0
YWtlX2ludCggbG9uZyBrZXkgKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIHRha2VfcHRyKCB2b2lk
ICprZXkgKTsKCiAgICB2b2lkIGNsZWFyKCk7CiAgICB2b2lkIHJlc2l6ZSggdWludCApOwoKICAg
IGludCBoYXNoS2V5U3RyaW5nKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIGludCBoYXNoS2V5QXNj
aWkoIGNvbnN0IGNoYXIgKiApOwoKICAgIHZvaWQgc3RhdGlzdGljcygpIGNvbnN0OwoKCiAgICB2
aXJ0dWFsIFFEYXRhU3RyZWFtICZyZWFkKCBRRGF0YVN0cmVhbSAmLCBRQ29sbGVjdGlvbjo6SXRl
bSAmICk7CiAgICB2aXJ0dWFsIFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiwgUUNv
bGxlY3Rpb246Okl0ZW0gKSBjb25zdDsKCnByaXZhdGU6CiAgICBRQmFzZUJ1Y2tldCAqKnZlYzsK
ICAgIHVpbnQgdmxlbjsKICAgIHVpbnQgbnVtSXRlbXM7CiAgICB1aW50IGtleXR5cGUgOiAyOwog
ICAgdWludCBjYXNlcyA6IDE7CiAgICB1aW50IGNvcHlrIDogMTsKICAgIFFHREl0TGlzdCAqaXRl
cmF0b3JzOwogICAgdm9pZCB1bmxpbmtfY29tbW9uKCBpbnQsIFFCYXNlQnVja2V0ICosIFFCYXNl
QnVja2V0ICogKTsKICAgIFFTdHJpbmdCdWNrZXQgKnVubGlua19zdHJpbmcoIGNvbnN0IFFTdHJp
bmcgJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFDb2xsZWN0aW9uOjpJdGVt
IGl0ZW0gPSAwICk7CiAgICBRQXNjaWlCdWNrZXQgKnVubGlua19hc2NpaSggY29uc3QgY2hhciAq
LCBRQ29sbGVjdGlvbjo6SXRlbSBpdGVtID0gMCApOwogICAgUUludEJ1Y2tldCAqdW5saW5rX2lu
dCggbG9uZywgUUNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAgIFFQdHJCdWNrZXQgKnVu
bGlua19wdHIoIHZvaWQgKiwgUUNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAgIHZvaWQg
aW5pdCggdWludCwgS2V5VHlwZSwgYm9vbCwgYm9vbCApOwogICAgZnJpZW5kIGNsYXNzIFFHRGlj
dEl0ZXJhdG9yOwp9OwoKCmNsYXNzIFFHRGljdEl0ZXJhdG9yCnsKZnJpZW5kIGNsYXNzIFFHRGlj
dDsKcHVibGljOgogICAgUUdEaWN0SXRlcmF0b3IoIGNvbnN0IFFHRGljdCAmICk7CiAgICBRR0Rp
Y3RJdGVyYXRvciggY29uc3QgUUdEaWN0SXRlcmF0b3IgJiApOwogICAgUUdEaWN0SXRlcmF0b3Ig
Jm9wZXJhdG9yPSggY29uc3QgUUdEaWN0SXRlcmF0b3IgJiApOwogICB+UUdEaWN0SXRlcmF0b3Io
KTsKCiAgICBRQ29sbGVjdGlvbjo6SXRlbSB0b0ZpcnN0KCk7CgogICAgUUNvbGxlY3Rpb246Okl0
ZW0gZ2V0KCkgY29uc3Q7CiAgICBRU3RyaW5nIGdldEtleVN0cmluZygpIGNvbnN0OwogICAgY29u
c3QgY2hhciAqZ2V0S2V5QXNjaWkoKSBjb25zdDsKICAgIGxvbmcgZ2V0S2V5SW50KCkgY29uc3Q7
CiAgICB2b2lkICpnZXRLZXlQdHIoKSBjb25zdDsKCiAgICBRQ29sbGVjdGlvbjo6SXRlbSBvcGVy
YXRvcigpKCk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcisrKCk7CiAgICBRQ29sbGVj
dGlvbjo6SXRlbSBvcGVyYXRvcis9KHVpbnQpOwoKcHJvdGVjdGVkOgogICAgUUdEaWN0ICpkaWN0
OwoKcHJpdmF0ZToKICAgIFFCYXNlQnVja2V0ICpjdXJOb2RlOwogICAgdWludCBjdXJJbmRleDsK
fTsKCmlubGluZSBRQ29sbGVjdGlvbjo6SXRlbSBRR0RpY3RJdGVyYXRvcjo6Z2V0KCkgY29uc3QK
ewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJOb2RlLT5nZXREYXRhKCkgOiAwOwp9CgppbmxpbmUg
UVN0cmluZyBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5U3RyaW5nKCkgY29uc3QKewogICAgcmV0dXJu
IGN1ck5vZGUgPyAoKFFTdHJpbmdCdWNrZXQqKWN1ck5vZGUpLT5nZXRLZXkoKSA6IFFTdHJpbmc6
Om51bGw7Cn0KCmlubGluZSBjb25zdCBjaGFyICpRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5QXNjaWko
KSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA/ICgoUUFzY2lpQnVja2V0KiljdXJOb2RlKS0+
Z2V0S2V5KCkgOiAwOwp9CgppbmxpbmUgbG9uZyBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5SW50KCkg
Y29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFJbnRCdWNrZXQqKWN1ck5vZGUpLT5nZXRL
ZXkoKSA6IDA7Cn0KCmlubGluZSB2b2lkICpRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5UHRyKCkgY29u
c3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFQdHJCdWNrZXQqKWN1ck5vZGUpLT5nZXRLZXko
KSA6IDA7Cn0KIyA0MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xYXNjaWlkaWN0LmgiIDIKCgoKdGVt
cGxhdGU8Y2xhc3MgdHlwZT4gY2xhc3MgUUFzY2lpRGljdCA6IHB1YmxpYyBRR0RpY3QKewpwdWJs
aWM6CiAgICBRQXNjaWlEaWN0KGludCBzaXplPTE3LCBib29sIGNhc2VTZW5zaXRpdmU9VFJVRSwg
Ym9vbCBjb3B5S2V5cz1UUlVFICkKICAgICAgICA6IFFHRGljdChzaXplLEFzY2lpS2V5LGNhc2VT
ZW5zaXRpdmUsY29weUtleXMpIHt9CiAgICBRQXNjaWlEaWN0KCBjb25zdCBRQXNjaWlEaWN0PHR5
cGU+ICZkICkgOiBRR0RpY3QoZCkge30KICAgflFBc2NpaURpY3QoKSB7IGNsZWFyKCk7IH0KICAg
IFFBc2NpaURpY3Q8dHlwZT4gJm9wZXJhdG9yPShjb25zdCBRQXNjaWlEaWN0PHR5cGU+ICZkKQog
ICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAoUUFzY2lpRGljdDx0eXBlPiYpUUdEaWN0
OjpvcGVyYXRvcj0oZCk7IH0KICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBRR0RpY3Q6
OmNvdW50KCk7IH0KICAgIHVpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIFFHRGljdDo6c2l6ZSgp
OyB9CiAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBRR0RpY3Q6OmNvdW50KCkgPT0g
MDsgfQoKICAgIHZvaWQgaW5zZXJ0KCBjb25zdCBjaGFyICprLCBjb25zdCB0eXBlICpkICkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUUdEaWN0Ojpsb29rX2FzY2lp
KGssKEl0ZW0pZCwxKTsgfQogICAgdm9pZCByZXBsYWNlKCBjb25zdCBjaGFyICprLCBjb25zdCB0
eXBlICpkICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUUdEaWN0
Ojpsb29rX2FzY2lpKGssKEl0ZW0pZCwyKTsgfQogICAgYm9vbCByZW1vdmUoIGNvbnN0IGNoYXIg
KmsgKSB7IHJldHVybiBRR0RpY3Q6OnJlbW92ZV9hc2NpaShrKTsgfQogICAgdHlwZSAqdGFrZSgg
Y29uc3QgY2hhciAqayApIHsgcmV0dXJuICh0eXBlICopUUdEaWN0Ojp0YWtlX2FzY2lpKGspOyB9
CiAgICB0eXBlICpmaW5kKCBjb25zdCBjaGFyICprICkgY29uc3QKICAgICAgICAgICAgICAgIHsg
cmV0dXJuICh0eXBlICopKChRR0RpY3QqKXRoaXMpLT5RR0RpY3Q6Omxvb2tfYXNjaWkoaywwLDAp
OyB9CiAgICB0eXBlICpvcGVyYXRvcltdKCBjb25zdCBjaGFyICprICkgY29uc3QKICAgICAgICAg
ICAgICAgIHsgcmV0dXJuICh0eXBlICopKChRR0RpY3QqKXRoaXMpLT5RR0RpY3Q6Omxvb2tfYXNj
aWkoaywwLDApOyB9CgogICAgdm9pZCBjbGVhcigpIHsgUUdEaWN0OjpjbGVhcigpOyB9CiAgICB2
b2lkIHJlc2l6ZSggdWludCBuICkgeyBRR0RpY3Q6OnJlc2l6ZShuKTsgfQogICAgdm9pZCBzdGF0
aXN0aWNzKCkgY29uc3QgeyBRR0RpY3Q6OnN0YXRpc3RpY3MoKTsgfQpwcml2YXRlOgogICAgdm9p
ZCBkZWxldGVJdGVtKCBJdGVtIGQgKSB7IGlmICggZGVsX2l0ZW0gKSBkZWxldGUgKHR5cGUgKilk
OyB9Cn07CgoKdGVtcGxhdGU8Y2xhc3MgdHlwZT4gY2xhc3MgUUFzY2lpRGljdEl0ZXJhdG9yIDog
cHVibGljIFFHRGljdEl0ZXJhdG9yCnsKcHVibGljOgogICAgUUFzY2lpRGljdEl0ZXJhdG9yKGNv
bnN0IFFBc2NpaURpY3Q8dHlwZT4gJmQpCiAgICAgICAgOiBRR0RpY3RJdGVyYXRvcigoUUdEaWN0
ICYpZCkge30KICAgflFBc2NpaURpY3RJdGVyYXRvcigpIHt9CiAgICB1aW50IGNvdW50KCkgY29u
c3QgeyByZXR1cm4gZGljdC0+Y291bnQoKTsgfQogICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gZGljdC0+Y291bnQoKSA9PSAwOyB9CiAgICB0eXBlICp0b0ZpcnN0KCkgeyByZXR1cm4g
KHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6dG9GaXJzdCgpOyB9CiAgICBvcGVyYXRvciB0eXBlICoo
KSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpnZXQoKTsgfQogICAgdHlw
ZSAqY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6OmdldCgp
OyB9CiAgICBjb25zdCBjaGFyICpjdXJyZW50S2V5KCkgY29uc3QgeyByZXR1cm4gUUdEaWN0SXRl
cmF0b3I6OmdldEtleUFzY2lpKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKCkoKSB7IHJldHVybiAo
dHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpvcGVyYXRvcigpKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9y
KysoKSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpvcGVyYXRvcisrKCk7IH0KICAg
IHR5cGUgKm9wZXJhdG9yKz0odWludCBqKSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9y
OjpvcGVyYXRvcis9KGopO30KfTsKIyA0NCAia2VybmVsL3FhcHBsaWNhdGlvbi5oIiAyCiMgMSAi
a2VybmVsL3FwYWxldHRlLmgiIDEKIyA0NSAia2VybmVsL3FhcHBsaWNhdGlvbi5oIiAyCiMgMSAi
a2VybmVsL3F0cmFuc2xhdG9yLmgiIDEKIyA0MyAia2VybmVsL3F0cmFuc2xhdG9yLmgiCiMgMSAi
a2VybmVsL3FvYmplY3QuaCIgMQojIDQ0ICJrZXJuZWwvcXRyYW5zbGF0b3IuaCIgMgojIDEgIi91
c3IvbGliL3F0L2luY2x1ZGUvcWludGRpY3QuaCIgMQojIDQyICIvdXNyL2xpYi9xdC9pbmNsdWRl
L3FpbnRkaWN0LmgiCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xZ2RpY3QuaCIgMQojIDQzICIv
dXNyL2xpYi9xdC9pbmNsdWRlL3FpbnRkaWN0LmgiIDIKCgoKdGVtcGxhdGU8Y2xhc3MgdHlwZT4g
Y2xhc3MgUUludERpY3QgOiBwdWJsaWMgUUdEaWN0CnsKcHVibGljOgogICAgUUludERpY3QoaW50
IHNpemU9MTcpIDogUUdEaWN0KHNpemUsSW50S2V5LDAsMCkge30KICAgIFFJbnREaWN0KCBjb25z
dCBRSW50RGljdDx0eXBlPiAmZCApIDogUUdEaWN0KGQpIHt9CiAgIH5RSW50RGljdCgpIHsgY2xl
YXIoKTsgfQogICAgUUludERpY3Q8dHlwZT4gJm9wZXJhdG9yPShjb25zdCBRSW50RGljdDx0eXBl
PiAmZCkKICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gKFFJbnREaWN0PHR5cGU+JilR
R0RpY3Q6Om9wZXJhdG9yPShkKTsgfQogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIFFH
RGljdDo6Y291bnQoKTsgfQogICAgdWludCBzaXplKCkgY29uc3QgeyByZXR1cm4gUUdEaWN0Ojpz
aXplKCk7IH0KICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIFFHRGljdDo6Y291bnQo
KSA9PSAwOyB9CiAgICB2b2lkIGluc2VydCggbG9uZyBrLCBjb25zdCB0eXBlICpkICkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUUdEaWN0Ojpsb29rX2ludChrLChJ
dGVtKWQsMSk7IH0KICAgIHZvaWQgcmVwbGFjZSggbG9uZyBrLCBjb25zdCB0eXBlICpkICkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUUdEaWN0Ojpsb29rX2ludChr
LChJdGVtKWQsMik7IH0KICAgIGJvb2wgcmVtb3ZlKCBsb25nIGsgKSB7IHJldHVybiBRR0RpY3Q6
OnJlbW92ZV9pbnQoayk7IH0KICAgIHR5cGUgKnRha2UoIGxvbmcgayApIHsgcmV0dXJuICh0eXBl
KilRR0RpY3Q6OnRha2VfaW50KGspOyB9CiAgICB0eXBlICpmaW5kKCBsb25nIGsgKSBjb25zdAog
ICAgICAgICAgICAgICAgeyByZXR1cm4gKHR5cGUgKikoKFFHRGljdCopdGhpcyktPlFHRGljdDo6
bG9va19pbnQoaywwLDApOyB9CiAgICB0eXBlICpvcGVyYXRvcltdKCBsb25nIGsgKSBjb25zdAog
ICAgICAgICAgICAgICAgeyByZXR1cm4gKHR5cGUgKikoKFFHRGljdCopdGhpcyktPlFHRGljdDo6
bG9va19pbnQoaywwLDApOyB9CiAgICB2b2lkIGNsZWFyKCkgeyBRR0RpY3Q6OmNsZWFyKCk7IH0K
ICAgIHZvaWQgcmVzaXplKCB1aW50IG4gKSB7IFFHRGljdDo6cmVzaXplKG4pOyB9CiAgICB2b2lk
IHN0YXRpc3RpY3MoKSBjb25zdCB7IFFHRGljdDo6c3RhdGlzdGljcygpOyB9CnByaXZhdGU6CiAg
ICB2b2lkIGRlbGV0ZUl0ZW0oIEl0ZW0gZCApOwp9OwoKCgoKCgoKdGVtcGxhdGU8Y2xhc3MgdHlw
ZT4gaW5saW5lIHZvaWQgUUludERpY3Q8dHlwZT46OmRlbGV0ZUl0ZW0oIFFDb2xsZWN0aW9uOjpJ
dGVtIGQgKQp7CiAgICBpZiAoIGRlbF9pdGVtICkgZGVsZXRlICh0eXBlICopZDsKfQoKdGVtcGxh
dGU8Y2xhc3MgdHlwZT4gY2xhc3MgUUludERpY3RJdGVyYXRvciA6IHB1YmxpYyBRR0RpY3RJdGVy
YXRvcgp7CnB1YmxpYzoKICAgIFFJbnREaWN0SXRlcmF0b3IoY29uc3QgUUludERpY3Q8dHlwZT4g
JmQpIDpRR0RpY3RJdGVyYXRvcigoUUdEaWN0ICYpZCkge30KICAgflFJbnREaWN0SXRlcmF0b3Io
KSB7fQogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIGRpY3QtPmNvdW50KCk7IH0KICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGRpY3QtPmNvdW50KCkgPT0gMDsgfQogICAg
dHlwZSAqdG9GaXJzdCgpIHsgcmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6OnRvRmlyc3Qo
KTsgfQogICAgb3BlcmF0b3IgdHlwZSAqKCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJ
dGVyYXRvcjo6Z2V0KCk7IH0KICAgIHR5cGUgKmN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAodHlw
ZSAqKVFHRGljdEl0ZXJhdG9yOjpnZXQoKTsgfQogICAgbG9uZyBjdXJyZW50S2V5KCkgY29uc3Qg
eyByZXR1cm4gUUdEaWN0SXRlcmF0b3I6OmdldEtleUludCgpOyB9CiAgICB0eXBlICpvcGVyYXRv
cigpKCkgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6b3BlcmF0b3IoKSgpOyB9CiAg
ICB0eXBlICpvcGVyYXRvcisrKCkgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6b3Bl
cmF0b3IrKygpOyB9CiAgICB0eXBlICpvcGVyYXRvcis9KHVpbnQgaikgeyByZXR1cm4gKHR5cGUg
KilRR0RpY3RJdGVyYXRvcjo6b3BlcmF0b3IrPShqKTt9Cn07CiMgNDUgImtlcm5lbC9xdHJhbnNs
YXRvci5oIiAyCgoKCgpjbGFzcyBRVHJhbnNsYXRvclByaXZhdGU7CgoKY2xhc3MgUVRyYW5zbGF0
b3JNZXNzYWdlCnsKcHVibGljOgogICAgUVRyYW5zbGF0b3JNZXNzYWdlKCk7CiAgICBRVHJhbnNs
YXRvck1lc3NhZ2UoIGNvbnN0IGNoYXIgKiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICogc291cmNlVGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqIGNvbW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIHRy
YW5zbGF0aW9uID0gUVN0cmluZzo6bnVsbCApOwogICAgUVRyYW5zbGF0b3JNZXNzYWdlKCBRRGF0
YVN0cmVhbSAmICk7CiAgICBRVHJhbnNsYXRvck1lc3NhZ2UoIGNvbnN0IFFUcmFuc2xhdG9yTWVz
c2FnZSAmIG0gKTsKCiAgICBRVHJhbnNsYXRvck1lc3NhZ2UgJiBvcGVyYXRvcj0oIGNvbnN0IFFU
cmFuc2xhdG9yTWVzc2FnZSAmIG0gKTsKCiAgICB1aW50IGhhc2goKSBjb25zdCB7IHJldHVybiBo
OyB9CiAgICBjb25zdCBjaGFyICpjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gY3g7IH0KICAgIGNv
bnN0IGNoYXIgKnNvdXJjZVRleHQoKSBjb25zdCB7IHJldHVybiBzdDsgfQogICAgY29uc3QgY2hh
ciAqY29tbWVudCgpIGNvbnN0IHsgcmV0dXJuIGNtOyB9CgogICAgdm9pZCBzZXRUcmFuc2xhdGlv
biggY29uc3QgUVN0cmluZyAmIHRyYW5zbGF0aW9uICkgeyB0biA9IHRyYW5zbGF0aW9uOyB9CiAg
ICBRU3RyaW5nIHRyYW5zbGF0aW9uKCkgY29uc3QgeyByZXR1cm4gdG47IH0KCiAgICBlbnVtIFBy
ZWZpeCB7IE5vUHJlZml4LCBIYXNoLCBIYXNoQ29udGV4dCwgSGFzaENvbnRleHRTb3VyY2VUZXh0
LAogICAgICAgICAgICAgICAgICBIYXNoQ29udGV4dFNvdXJjZVRleHRDb21tZW50IH07CiAgICB2
b2lkIHdyaXRlKCBRRGF0YVN0cmVhbSAmIHMsIGJvb2wgc3RyaXAsCiAgICAgICAgICAgICAgICBQ
cmVmaXggcHJlZml4ID0gSGFzaENvbnRleHRTb3VyY2VUZXh0Q29tbWVudCApIGNvbnN0OwogICAg
UHJlZml4IGNvbW1vblByZWZpeCggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiApIGNvbnN0OwoK
ICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiBtICkgY29uc3Q7
CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFUcmFuc2xhdG9yTWVzc2FnZSYgbSApIGNvbnN0
CiAgICB7IHJldHVybiAhb3BlcmF0b3I9PSggbSApOyB9CiAgICBib29sIG9wZXJhdG9yPCggY29u
c3QgUVRyYW5zbGF0b3JNZXNzYWdlJiBtICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yPD0oIGNv
bnN0IFFUcmFuc2xhdG9yTWVzc2FnZSYgbSApIGNvbnN0CiAgICB7IHJldHVybiAhb3BlcmF0b3I+
KCBtICk7IH0KICAgIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2UmIG0g
KSBjb25zdAogICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8KCBtICk7IH0KICAgIGJvb2wgb3Bl
cmF0b3I+PSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiBtICkgY29uc3QKICAgIHsgcmV0dXJu
ICFvcGVyYXRvcjwoIG0gKTsgfQoKcHJpdmF0ZToKICAgIHVpbnQgaDsKICAgIFFDU3RyaW5nIGN4
OwogICAgUUNTdHJpbmcgc3Q7CiAgICBRQ1N0cmluZyBjbTsKICAgIFFTdHJpbmcgdG47CgogICAg
ZW51bSBUYWcgeyBUYWdfRW5kID0gMSwgVGFnX1NvdXJjZVRleHQxNiwgVGFnX1RyYW5zbGF0aW9u
LCBUYWdfQ29udGV4dDE2LAogICAgICAgICAgICAgICBUYWdfSGFzaCwgVGFnX1NvdXJjZVRleHQs
IFRhZ19Db250ZXh0LCBUYWdfQ29tbWVudCwKICAgICAgICAgICAgICAgVGFnX09ic29sZXRlMSB9
Owp9OwoKCmNsYXNzIFFUcmFuc2xhdG9yOiBwdWJsaWMgUU9iamVjdAp7CiAgICBwdWJsaWM6IFFN
ZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgp
OyB9IGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0
YXRpY01ldGFPYmplY3QoKTsgc3RhdGljIFFTdHJpbmcgdHIoY29uc3QgY2hhciopOyBzdGF0aWMg
UVN0cmluZyB0cihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOyBwcm90ZWN0ZWQ6IHZvaWQgaW5p
dE1ldGFPYmplY3QoKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwpwdWJs
aWM6CiAgICBRVHJhbnNsYXRvciggUU9iamVjdCAqIHBhcmVudCwgY29uc3QgY2hhciAqIG5hbWUg
PSAwICk7CiAgICB+UVRyYW5zbGF0b3IoKTsKCgogICAgUVN0cmluZyBmaW5kKCBjb25zdCBjaGFy
ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICkgY29uc3Q7CgogICAgdmlydHVhbCBRU3Ry
aW5nIGZpbmQoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICkgY29uc3Q7CgogICAgUVRyYW5z
bGF0b3JNZXNzYWdlIGZpbmRNZXNzYWdlKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqICkgY29uc3Q7Cgog
ICAgYm9vbCBsb2FkKCBjb25zdCBRU3RyaW5nICYgZmlsZW5hbWUsCiAgICAgICAgICAgICAgIGNv
bnN0IFFTdHJpbmcgJiBkaXJlY3RvcnkgPSBRU3RyaW5nOjpudWxsLAogICAgICAgICAgICAgICBj
b25zdCBRU3RyaW5nICYgc2VhcmNoX2RlbGltaXRlcnMgPSBRU3RyaW5nOjpudWxsLAogICAgICAg
ICAgICAgICBjb25zdCBRU3RyaW5nICYgc3VmZml4ID0gUVN0cmluZzo6bnVsbCApOwoKICAgIGVu
dW0gU2F2ZU1vZGUgeyBFdmVyeXRoaW5nLCBTdHJpcHBlZCB9OwoKICAgIGJvb2wgc2F2ZSggY29u
c3QgUVN0cmluZyAmIGZpbGVuYW1lLCBTYXZlTW9kZSBtb2RlID0gRXZlcnl0aGluZyApOwoKICAg
IHZvaWQgY2xlYXIoKTsKCiAgICB2b2lkIGluc2VydCggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdl
JiApOwoKICAgIHZvaWQgaW5zZXJ0KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3Qg
UVN0cmluZyAmICk7CiAgICB2b2lkIHJlbW92ZSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiAp
OwoKICAgIHZvaWQgcmVtb3ZlKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwogICAgYm9v
bCBjb250YWlucyggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApIGNv
bnN0OwoKICAgIGJvb2wgY29udGFpbnMoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICkgY29u
c3Q7CgoKCiAgICB2b2lkIHNxdWVlemUoIFNhdmVNb2RlICk7CiAgICB2b2lkIHNxdWVlemUoKTsK
ICAgIHZvaWQgdW5zcXVlZXplKCk7CgogICAgUVZhbHVlTGlzdDxRVHJhbnNsYXRvck1lc3NhZ2U+
IG1lc3NhZ2VzKCkgY29uc3Q7Cgpwcml2YXRlOgogICAgUVRyYW5zbGF0b3JQcml2YXRlICogZDsK
CnByaXZhdGU6CgogICAgUVRyYW5zbGF0b3IoIGNvbnN0IFFUcmFuc2xhdG9yICYgKTsKICAgIFFU
cmFuc2xhdG9yICZvcGVyYXRvcj0oIGNvbnN0IFFUcmFuc2xhdG9yICYgKTsKCn07CiMgNDYgImtl
cm5lbC9xYXBwbGljYXRpb24uaCIgMgoKCmNsYXNzIFFTZXNzaW9uTWFuYWdlcjsKY2xhc3MgUVN0
eWxlOwpjbGFzcyBRVHJhbnNsYXRvcjsKCgoKdGVtcGxhdGUgPGNsYXNzIHR5cGU+IGNsYXNzIFFM
aXN0OwoKY2xhc3MgUUFwcGxpY2F0aW9uOwpleHRlcm4gUUFwcGxpY2F0aW9uICpxQXBwOwojIDY3
ICJrZXJuZWwvcWFwcGxpY2F0aW9uLmgiCmNsYXNzIFFBcHBsaWNhdGlvbiA6IHB1YmxpYyBRT2Jq
ZWN0CnsKICAgIHB1YmxpYzogUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHN0
YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBzdGF0aWMgUVN0cmluZyB0cihj
b25zdCBjaGFyKik7IHN0YXRpYyBRU3RyaW5nIHRyKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7
IHByb3RlY3RlZDogdm9pZCBpbml0TWV0YU9iamVjdCgpOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFP
YmplY3QgKm1ldGFPYmo7CnB1YmxpYzoKICAgIFFBcHBsaWNhdGlvbiggaW50ICZhcmdjLCBjaGFy
ICoqYXJndik7CiAgICBRQXBwbGljYXRpb24oIGludCAmYXJnYywgY2hhciAqKmFyZ3YsIGJvb2wg
R1VJZW5hYmxlZCApOwogICAgZW51bSBUeXBlIHsgVHR5LCBHdWlDbGllbnQsIEd1aVNlcnZlciB9
OwogICAgUUFwcGxpY2F0aW9uKCBpbnQgJmFyZ2MsIGNoYXIgKiphcmd2LCBUeXBlICk7CgogICAg
UUFwcGxpY2F0aW9uKCBEaXNwbGF5KiBkcHkgKTsKICAgIFFBcHBsaWNhdGlvbiggRGlzcGxheSAq
ZHB5LCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwoKICAgIHZpcnR1YWwgflFBcHBsaWNhdGlvbigp
OwoKICAgIGludCBhcmdjKCkgY29uc3Q7CiAgICBjaGFyICoqYXJndigpIGNvbnN0OwoKICAgIFR5
cGUgdHlwZSgpIGNvbnN0OwoKCiAgICBzdGF0aWMgUVN0eWxlICZzdHlsZSgpOwogICAgc3RhdGlj
IHZvaWQgc2V0U3R5bGUoIFFTdHlsZSogKTsKCgogICAgZW51bSBDb2xvck1vZGUgeyBOb3JtYWxD
b2xvcnMsIEN1c3RvbUNvbG9ycyB9OwogICAgc3RhdGljIENvbG9yTW9kZSBjb2xvck1vZGUoKTsK
ICAgIHN0YXRpYyB2b2lkIHNldENvbG9yTW9kZSggUUFwcGxpY2F0aW9uOjpDb2xvck1vZGUgKTsK
CgogICAgZW51bSBDb2xvclNwZWMgeyBOb3JtYWxDb2xvcj0wLCBDdXN0b21Db2xvcj0xLCBNYW55
Q29sb3I9MiB9OwogICAgc3RhdGljIGludCBjb2xvclNwZWMoKTsKICAgIHN0YXRpYyB2b2lkIHNl
dENvbG9yU3BlYyggaW50ICk7CgogICAgc3RhdGljIFFDdXJzb3IgKm92ZXJyaWRlQ3Vyc29yKCk7
CiAgICBzdGF0aWMgdm9pZCBzZXRPdmVycmlkZUN1cnNvciggY29uc3QgUUN1cnNvciAmLCBib29s
IHJlcGxhY2U9RkFMU0UgKTsKICAgIHN0YXRpYyB2b2lkIHJlc3RvcmVPdmVycmlkZUN1cnNvcigp
OwoKICAgIHN0YXRpYyBib29sIGhhc0dsb2JhbE1vdXNlVHJhY2tpbmcoKTsKICAgIHN0YXRpYyB2
b2lkIHNldEdsb2JhbE1vdXNlVHJhY2tpbmcoIGJvb2wgZW5hYmxlICk7CgogICAgc3RhdGljIFFQ
YWxldHRlIHBhbGV0dGUoIGNvbnN0IFFXaWRnZXQqID0gMCApOwogICAgc3RhdGljIHZvaWQgc2V0
UGFsZXR0ZSggY29uc3QgUVBhbGV0dGUgJiwgYm9vbCBpbmZvcm1XaWRnZXRzPUZBTFNFLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjbGFzc05hbWUgPSAwICk7
CgogICAgc3RhdGljIFFGb250IGZvbnQoIGNvbnN0IFFXaWRnZXQqID0gMCApOwogICAgc3RhdGlj
IHZvaWQgc2V0Rm9udCggY29uc3QgUUZvbnQgJiwgYm9vbCBpbmZvcm1XaWRnZXRzPUZBTFNFLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjbGFzc05hbWUgPSAwICk7
CiAgICBzdGF0aWMgUUZvbnRNZXRyaWNzIGZvbnRNZXRyaWNzKCk7CgogICAgUVdpZGdldCAqbWFp
bldpZGdldCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldE1haW5XaWRnZXQoIFFXaWRnZXQg
KiApOwogICAgdmlydHVhbCB2b2lkIHBvbGlzaCggUVdpZGdldCAqICk7CgogICAgc3RhdGljIFFX
aWRnZXRMaXN0ICphbGxXaWRnZXRzKCk7CiAgICBzdGF0aWMgUVdpZGdldExpc3QgKnRvcExldmVs
V2lkZ2V0cygpOwogICAgc3RhdGljIFFXaWRnZXQgKmRlc2t0b3AoKTsKICAgIHN0YXRpYyBRV2lk
Z2V0ICphY3RpdmVQb3B1cFdpZGdldCgpOwogICAgc3RhdGljIFFXaWRnZXQgKmFjdGl2ZU1vZGFs
V2lkZ2V0KCk7CiAgICBzdGF0aWMgUUNsaXBib2FyZCAqY2xpcGJvYXJkKCk7CiAgICBRV2lkZ2V0
ICpmb2N1c1dpZGdldCgpIGNvbnN0OwogICAgUVdpZGdldCAqYWN0aXZlV2luZG93KCkgY29uc3Q7
CgogICAgc3RhdGljIFFXaWRnZXQgKndpZGdldEF0KCBpbnQgeCwgaW50IHksIGJvb2wgY2hpbGQ9
RkFMU0UgKTsKICAgIHN0YXRpYyBRV2lkZ2V0ICp3aWRnZXRBdCggY29uc3QgUVBvaW50ICYsIGJv
b2wgY2hpbGQ9RkFMU0UgKTsKCiAgICBpbnQgZXhlYygpOwogICAgdm9pZCBwcm9jZXNzRXZlbnRz
KCk7CiAgICB2b2lkIHByb2Nlc3NFdmVudHMoIGludCBtYXh0aW1lICk7CiAgICB2b2lkIHByb2Nl
c3NPbmVFdmVudCgpOwogICAgaW50IGVudGVyX2xvb3AoKTsKICAgIHZvaWQgZXhpdF9sb29wKCk7
CiAgICBpbnQgbG9vcExldmVsKCkgY29uc3Q7CiAgICBzdGF0aWMgdm9pZCBleGl0KCBpbnQgcmV0
Y29kZT0wICk7CgogICAgc3RhdGljIGJvb2wgc2VuZEV2ZW50KCBRT2JqZWN0ICpyZWNlaXZlciwg
UUV2ZW50ICpldmVudCApOwogICAgc3RhdGljIHZvaWQgcG9zdEV2ZW50KCBRT2JqZWN0ICpyZWNl
aXZlciwgUUV2ZW50ICpldmVudCApOwogICAgc3RhdGljIHZvaWQgc2VuZFBvc3RlZEV2ZW50cygg
UU9iamVjdCAqcmVjZWl2ZXIsIGludCBldmVudF90eXBlICk7CiAgICBzdGF0aWMgdm9pZCBzZW5k
UG9zdGVkRXZlbnRzKCk7CgogICAgc3RhdGljIHZvaWQgcmVtb3ZlUG9zdGVkRXZlbnRzKCBRT2Jq
ZWN0ICpyZWNlaXZlciApOwoKICAgIHZpcnR1YWwgYm9vbCBub3RpZnkoIFFPYmplY3QgKiwgUUV2
ZW50ICogKTsKCiAgICBzdGF0aWMgYm9vbCBzdGFydGluZ1VwKCk7CiAgICBzdGF0aWMgYm9vbCBj
bG9zaW5nRG93bigpOwoKICAgIHN0YXRpYyB2b2lkIGZsdXNoWCgpOwogICAgc3RhdGljIHZvaWQg
c3luY1goKTsKCiAgICBzdGF0aWMgdm9pZCBiZWVwKCk7CgoKICAgIHZvaWQgc2V0RGVmYXVsdENv
ZGVjKCBRVGV4dENvZGVjKiApOwogICAgUVRleHRDb2RlYyogZGVmYXVsdENvZGVjKCkgY29uc3Q7
CiAgICB2b2lkIGluc3RhbGxUcmFuc2xhdG9yKCBRVHJhbnNsYXRvciAqICk7CiAgICB2b2lkIHJl
bW92ZVRyYW5zbGF0b3IoIFFUcmFuc2xhdG9yICogKTsKCiAgICBRU3RyaW5nIHRyYW5zbGF0ZSgg
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKSBjb25zdDsKICAgIFFTdHJpbmcgdHJhbnNsYXRl
KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICogKSBjb25zdDsKCiAgICBzdGF0aWMgdm9pZCBzZXRXaW5TdHlsZUhp
Z2hsaWdodENvbG9yKCBjb25zdCBRQ29sb3IgJiApOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAm
d2luU3R5bGVIaWdobGlnaHRDb2xvcigpOwoKICAgIHN0YXRpYyB2b2lkIHNldERlc2t0b3BTZXR0
aW5nc0F3YXJlKCBib29sICk7CiAgICBzdGF0aWMgYm9vbCBkZXNrdG9wU2V0dGluZ3NBd2FyZSgp
OwoKICAgIHN0YXRpYyB2b2lkIHNldEN1cnNvckZsYXNoVGltZSggaW50ICk7CiAgICBzdGF0aWMg
aW50IGN1cnNvckZsYXNoVGltZSgpOwoKICAgIHN0YXRpYyB2b2lkIHNldERvdWJsZUNsaWNrSW50
ZXJ2YWwoIGludCApOwogICAgc3RhdGljIGludCBkb3VibGVDbGlja0ludGVydmFsKCk7CgogICAg
c3RhdGljIHZvaWQgc2V0V2hlZWxTY3JvbGxMaW5lcyggaW50ICk7CiAgICBzdGF0aWMgaW50IHdo
ZWVsU2Nyb2xsTGluZXMoKTsKCiAgICBzdGF0aWMgdm9pZCBzZXRHbG9iYWxTdHJ1dCggY29uc3Qg
UVNpemUgJiApOwogICAgc3RhdGljIFFTaXplIGdsb2JhbFN0cnV0KCk7CgogICAgc3RhdGljIHZv
aWQgc2V0U3RhcnREcmFnVGltZSggaW50IG1zICk7CiAgICBzdGF0aWMgaW50IHN0YXJ0RHJhZ1Rp
bWUoKTsKICAgIHN0YXRpYyB2b2lkIHNldFN0YXJ0RHJhZ0Rpc3RhbmNlKCBpbnQgbCApOwogICAg
c3RhdGljIGludCBzdGFydERyYWdEaXN0YW5jZSgpOwoKICAgIHN0YXRpYyBib29sIGlzRWZmZWN0
RW5hYmxlZCggUXQ6OlVJRWZmZWN0ICk7CiAgICBzdGF0aWMgdm9pZCBzZXRFZmZlY3RFbmFibGVk
KCBRdDo6VUlFZmZlY3QsIGJvb2wgZW5hYmxlID0gVFJVRSApOwojIDIwMSAia2VybmVsL3FhcHBs
aWNhdGlvbi5oIgogICAgdmlydHVhbCBib29sIHgxMUV2ZW50RmlsdGVyKCBYRXZlbnQgKiApOwog
ICAgdmlydHVhbCBpbnQgeDExQ2xpZW50TWVzc2FnZSggUVdpZGdldCosIFhFdmVudCosIGJvb2wg
cGFzc2l2ZV9vbmx5KTsKICAgIGludCB4MTFQcm9jZXNzRXZlbnQoIFhFdmVudCogKTsKIyAyMjIg
Imtlcm5lbC9xYXBwbGljYXRpb24uaCIKICAgIGJvb2wgaXNTZXNzaW9uUmVzdG9yZWQoKSBjb25z
dDsKICAgIFFTdHJpbmcgc2Vzc2lvbklkKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgY29tbWl0
RGF0YSggUVNlc3Npb25NYW5hZ2VyJiBzbSApOwogICAgdmlydHVhbCB2b2lkIHNhdmVTdGF0ZSgg
UVNlc3Npb25NYW5hZ2VyJiBzbSApOwoKCiAgICBzdGF0aWMgdm9pZCBjcmVhdGVfeGltKCk7CiAg
ICBzdGF0aWMgdm9pZCBjbG9zZV94aW0oKTsKCiAgICB2b2lkIHdha2VVcEd1aVRocmVhZCgpOwoK
CgoKCgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGxhc3RXaW5kb3dDbG9zZWQoKTsKICAgIHZvaWQgYWJv
dXRUb1F1aXQoKTsKICAgIHZvaWQgZ3VpVGhyZWFkQXdha2UoKTsKCnB1YmxpYyA6CiAgICB2b2lk
IHF1aXQoKTsKICAgIHZvaWQgY2xvc2VBbGxXaW5kb3dzKCk7Cgpwcml2YXRlOgogICAgdm9pZCBj
b25zdHJ1Y3QoIGludCAmYXJnYywgY2hhciAqKmFyZ3YsIFR5cGUgKTsKICAgIGJvb2wgcHJvY2Vz
c05leHRFdmVudCggYm9vbCApOwogICAgdm9pZCBpbml0aWFsaXplKCBpbnQsIGNoYXIgKiogKTsK
ICAgIHZvaWQgaW5pdF9wcmVjbWRsaW5lKCk7CiAgICB2b2lkIHByb2Nlc3NfY21kbGluZSggaW50
KiBhcmdjcHRyLCBjaGFyICoqIGFyZ3YgKTsKIyAyNjIgImtlcm5lbC9xYXBwbGljYXRpb24uaCIK
ICAgIGludCBhcHBfYXJnYzsKICAgIGNoYXIgKiphcHBfYXJndjsKICAgIGJvb2wgcXVpdF9ub3c7
CiAgICBpbnQgcXVpdF9jb2RlOwogICAgc3RhdGljIFFTdHlsZSAqYXBwX3N0eWxlOwogICAgc3Rh
dGljIGludCBhcHBfY3NwZWM7CgogICAgc3RhdGljIFFQYWxldHRlICphcHBfcGFsOwoKICAgIHN0
YXRpYyBRRm9udCAqYXBwX2ZvbnQ7CgogICAgc3RhdGljIFFDdXJzb3IgKmFwcF9jdXJzb3I7Cgog
ICAgc3RhdGljIGludCBhcHBfdHJhY2tpbmc7CiAgICBzdGF0aWMgYm9vbCBpc19hcHBfcnVubmlu
ZzsKICAgIHN0YXRpYyBib29sIGlzX2FwcF9jbG9zaW5nOwogICAgc3RhdGljIGJvb2wgYXBwX2V4
aXRfbG9vcDsKICAgIHN0YXRpYyBpbnQgbG9vcF9sZXZlbDsKICAgIHN0YXRpYyBRV2lkZ2V0ICpt
YWluX3dpZGdldDsKICAgIHN0YXRpYyBRV2lkZ2V0ICpmb2N1c193aWRnZXQ7CiAgICBzdGF0aWMg
UVdpZGdldCAqYWN0aXZlX3dpbmRvdzsKICAgIHN0YXRpYyBib29sIG9iZXlfZGVza3RvcF9zZXR0
aW5nczsKICAgIHN0YXRpYyBpbnQgY3Vyc29yX2ZsYXNoX3RpbWU7CiAgICBzdGF0aWMgaW50IG1v
dXNlX2RvdWJsZV9jbGlja190aW1lOwogICAgc3RhdGljIGludCB3aGVlbF9zY3JvbGxfbGluZXM7
CgogICAgc3RhdGljIGJvb2wgYW5pbWF0ZV91aTsKICAgIHN0YXRpYyBib29sIGFuaW1hdGVfbWVu
dTsKICAgIHN0YXRpYyBib29sIGFuaW1hdGVfdG9vbHRpcDsKICAgIHN0YXRpYyBib29sIGFuaW1h
dGVfY29tYm87CiAgICBzdGF0aWMgYm9vbCBmYWRlX21lbnU7CiAgICBzdGF0aWMgYm9vbCBmYWRl
X3Rvb2x0aXA7CgogICAgUUxpc3Q8UVRyYW5zbGF0b3I+ICp0cmFuc2xhdG9yczsKCiAgICBRU2Vz
c2lvbk1hbmFnZXIgKnNlc3Npb25fbWFuYWdlcjsKICAgIFFTdHJpbmcgc2Vzc2lvbl9pZDsKICAg
IGJvb2wgaXNfc2Vzc2lvbl9yZXN0b3JlZDsKCgogICAgc3RhdGljIHZvaWQgeDExX2luaXRpYWxp
emVfc3R5bGUoKTsKCgogICAgc3RhdGljIFFTaXplIGFwcF9zdHJ1dDsKCiAgICBzdGF0aWMgUUFz
Y2lpRGljdDxRUGFsZXR0ZT4gKmFwcF9wYWxldHRlczsKICAgIHN0YXRpYyBRQXNjaWlEaWN0PFFG
b250PiAqYXBwX2ZvbnRzOwoKICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqcG9wdXBXaWRnZXRzOwog
ICAgYm9vbCBpblBvcHVwTW9kZSgpIGNvbnN0OwogICAgdm9pZCBjbG9zZVBvcHVwKCBRV2lkZ2V0
ICpwb3B1cCApOwogICAgdm9pZCBvcGVuUG9wdXAoIFFXaWRnZXQgKnBvcHVwICk7CiAgICB2b2lk
IHNldEFjdGl2ZVdpbmRvdyggUVdpZGdldCogYWN0ICk7CgogICAgc3RhdGljIHZvaWQgcmVtb3Zl
UG9zdGVkRXZlbnQoIFFFdmVudCAqICk7CgogICAgZnJpZW5kIGNsYXNzIFFXaWRnZXQ7CiAgICBm
cmllbmQgY2xhc3MgUUVUV2lkZ2V0OwogICAgZnJpZW5kIGNsYXNzIFFFdmVudDsKCnByaXZhdGU6
CgogICAgUUFwcGxpY2F0aW9uKCBjb25zdCBRQXBwbGljYXRpb24gJiApOwogICAgUUFwcGxpY2F0
aW9uICZvcGVyYXRvcj0oIGNvbnN0IFFBcHBsaWNhdGlvbiAmICk7Cgp9OwoKCmlubGluZSBpbnQg
UUFwcGxpY2F0aW9uOjphcmdjKCkgY29uc3QKewogICAgcmV0dXJuIGFwcF9hcmdjOwp9Cgppbmxp
bmUgY2hhciAqKlFBcHBsaWNhdGlvbjo6YXJndigpIGNvbnN0CnsKICAgIHJldHVybiBhcHBfYXJn
djsKfQoKaW5saW5lIFFTdHlsZSYgUUFwcGxpY2F0aW9uOjpzdHlsZSgpCnsKICAgIHJldHVybiAq
YXBwX3N0eWxlOwp9CgoKaW5saW5lIFFDdXJzb3IgKlFBcHBsaWNhdGlvbjo6b3ZlcnJpZGVDdXJz
b3IoKQp7CiAgICByZXR1cm4gYXBwX2N1cnNvcjsKfQoKaW5saW5lIGJvb2wgUUFwcGxpY2F0aW9u
OjpoYXNHbG9iYWxNb3VzZVRyYWNraW5nKCkKewogICAgcmV0dXJuIGFwcF90cmFja2luZyA+IDA7
Cn0KCmlubGluZSBRV2lkZ2V0ICpRQXBwbGljYXRpb246Om1haW5XaWRnZXQoKSBjb25zdAp7CiAg
ICByZXR1cm4gbWFpbl93aWRnZXQ7Cn0KCmlubGluZSBRV2lkZ2V0ICpRQXBwbGljYXRpb246OmZv
Y3VzV2lkZ2V0KCkgY29uc3QKewogICAgcmV0dXJuIGZvY3VzX3dpZGdldDsKfQoKaW5saW5lIFFX
aWRnZXQgKlFBcHBsaWNhdGlvbjo6YWN0aXZlV2luZG93KCkgY29uc3QKewogICAgcmV0dXJuIGFj
dGl2ZV93aW5kb3c7Cn0KCmlubGluZSBRV2lkZ2V0ICpRQXBwbGljYXRpb246OndpZGdldEF0KCBj
b25zdCBRUG9pbnQgJnAsIGJvb2wgY2hpbGQgKQp7CiAgICByZXR1cm4gd2lkZ2V0QXQoIHAueCgp
LCBwLnkoKSwgY2hpbGQgKTsKfQoKaW5saW5lIGJvb2wgUUFwcGxpY2F0aW9uOjppblBvcHVwTW9k
ZSgpIGNvbnN0CnsKICAgIHJldHVybiBwb3B1cFdpZGdldHMgIT0gMDsKfQoKaW5saW5lIGJvb2wg
UUFwcGxpY2F0aW9uOjppc1Nlc3Npb25SZXN0b3JlZCgpIGNvbnN0CnsKICAgIHJldHVybiBpc19z
ZXNzaW9uX3Jlc3RvcmVkOwp9CgppbmxpbmUgUVN0cmluZyBRQXBwbGljYXRpb246OnNlc3Npb25J
ZCgpIGNvbnN0CnsKICAgIHJldHVybiBzZXNzaW9uX2lkOwp9CgppbmxpbmUgUVNpemUgUUFwcGxp
Y2F0aW9uOjpnbG9iYWxTdHJ1dCgpCnsKICAgIHJldHVybiBhcHBfc3RydXQ7Cn0KCmlubGluZSBi
b29sIFFBcHBsaWNhdGlvbjo6c2VuZEV2ZW50KCBRT2JqZWN0ICpyZWNlaXZlciwgUUV2ZW50ICpl
dmVudCApCnsgcmV0dXJuIHFBcHAtPm5vdGlmeSggcmVjZWl2ZXIsIGV2ZW50ICk7IH0KIyA0NCAi
a2VybmVsL3FhYnN0cmFjdGxheW91dC5jcHAiIDIKIyA5MSAia2VybmVsL3FhYnN0cmFjdGxheW91
dC5jcHAiCnZvaWQgUUxheW91dEl0ZW06OnNldEFsaWdubWVudCggaW50IGEgKQp7CiAgICAgYWxp
Z24gPSBhOwp9CiMgMTUwICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIKdm9pZCBRU3BhY2Vy
SXRlbTo6Y2hhbmdlU2l6ZSggaW50IHcsIGludCBoLCBRU2l6ZVBvbGljeTo6U2l6ZVR5cGUgaERh
dGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTaXplUG9saWN5OjpTaXplVHlwZSB2
RGF0YSApCnsKICAgIHdpZHRoID0gdzsKICAgIGhlaWdodCA9IGg7CiAgICBzaXplUCA9IFFTaXpl
UG9saWN5KCBoRGF0YSwgdkRhdGEgKTsKfQojIDE2NyAia2VybmVsL3FhYnN0cmFjdGxheW91dC5j
cHAiClFMYXlvdXRJdGVtOjp+UUxheW91dEl0ZW0oKQp7Cn0KCgoKCgoKdm9pZCBRTGF5b3V0SXRl
bTo6aW52YWxpZGF0ZSgpCnsKCn0KIyAxODkgImtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3BwIgpR
TGF5b3V0ICogUUxheW91dEl0ZW06OmxheW91dCgpCnsKICAgIHJldHVybiAwOwp9CiMgMjAzICJr
ZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIKUVNwYWNlckl0ZW0gKiBRTGF5b3V0SXRlbTo6c3Bh
Y2VySXRlbSgpCnsKICAgIHJldHVybiAwOwp9CiMgMjE1ICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0
LmNwcCIKUUxheW91dCAqIFFMYXlvdXQ6OmxheW91dCgpCnsKICAgIHJldHVybiB0aGlzOwp9CgoK
CgoKClFTcGFjZXJJdGVtICogUVNwYWNlckl0ZW06OnNwYWNlckl0ZW0oKQp7CiAgICByZXR1cm4g
dGhpczsKfQojIDIzOCAia2VybmVsL3FhYnN0cmFjdGxheW91dC5jcHAiClFXaWRnZXQgKiBRTGF5
b3V0SXRlbTo6d2lkZ2V0KCkKewogICAgcmV0dXJuIDA7Cn0KCgoKCgoKUVdpZGdldCAqIFFXaWRn
ZXRJdGVtOjp3aWRnZXQoKQp7CiAgICByZXR1cm4gd2lkOwp9CiMgMjY0ICJrZXJuZWwvcWFic3Ry
YWN0bGF5b3V0LmNwcCIKYm9vbCBRTGF5b3V0SXRlbTo6aGFzSGVpZ2h0Rm9yV2lkdGgoKSBjb25z
dAp7CiAgICByZXR1cm4gRkFMU0U7Cn0KIyAyODEgImtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3Bw
IgpRTGF5b3V0SXRlcmF0b3IgUUxheW91dEl0ZW06Oml0ZXJhdG9yKCkKewogICAgcmV0dXJuIFFM
YXlvdXRJdGVyYXRvciggMCApOwp9CiMgMzE3ICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIK
aW50IFFMYXlvdXRJdGVtOjpoZWlnaHRGb3JXaWR0aCggaW50ICkgY29uc3QKewogICAgcmV0dXJu
IC0xOwp9CgoKCnN0YXRpYyBjb25zdCBpbnQgSG9yQWxpZ24gPSBRdDo6QWxpZ25IQ2VudGVyIHwg
UXQ6OkFsaWduUmlnaHQgfCBRdDo6QWxpZ25MZWZ0OwpzdGF0aWMgY29uc3QgaW50IFZlckFsaWdu
ID0gUXQ6OkFsaWduVkNlbnRlciB8IFF0OjpBbGlnbkJvdHRvbSB8IFF0OjpBbGlnblRvcDsKCnN0
YXRpYyBRU2l6ZSBzbWFydE1pblNpemUoIGNvbnN0IFFXaWRnZXRJdGVtICppICkKewogICAgUVdp
ZGdldCAqdyA9ICggKFFXaWRnZXRJdGVtKilpICktPndpZGdldCgpOwogICAgUVNpemUgcygwLDAp
OwogICAgaWYgKCB3LT5sYXlvdXQoKSApIHsKICAgICAgICBzID0gdy0+bGF5b3V0KCktPnRvdGFs
TWluaW11bVNpemUoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgUVNpemUgc2g7CiAgICAgICAgaWYg
KCB3LT5zaXplUG9saWN5KCkubWF5U2hyaW5rSG9yaXpvbnRhbGx5KCkgKQogICAgICAgICAgICBz
LnNldFdpZHRoKCB3LT5taW5pbXVtU2l6ZUhpbnQoKS53aWR0aCgpICk7CiAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgIHNoID0gdy0+c2l6ZUhpbnQoKTsKICAgICAgICAgICAgcy5zZXRXaWR0aCgg
c2gud2lkdGgoKSApOwogICAgICAgIH0KICAgICAgICBpZiAoIHctPnNpemVQb2xpY3koKS5tYXlT
aHJpbmtWZXJ0aWNhbGx5KCkgKQogICAgICAgICAgICBzLnNldEhlaWdodCggdy0+bWluaW11bVNp
emVIaW50KCkuaGVpZ2h0KCkgKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHMuc2V0SGVpZ2h0
KCBzaC5pc1ZhbGlkKCkgPyBzaC5oZWlnaHQoKSA6IHctPnNpemVIaW50KCkuaGVpZ2h0KCkgKTsK
ICAgIH0KICAgIHMgPSBzLmJvdW5kZWRUbyggdy0+bWF4aW11bVNpemUoKSApOwogICAgUVNpemUg
bWluID0gdy0+bWluaW11bVNpemUoKTsKICAgIGlmICggbWluLndpZHRoKCkgPiAwICkKICAgICAg
ICBzLnNldFdpZHRoKCBtaW4ud2lkdGgoKSApOwogICAgaWYgKCBtaW4uaGVpZ2h0KCkgPiAwICkK
ICAgICAgICBzLnNldEhlaWdodCggbWluLmhlaWdodCgpICk7CgogICAgaWYgKCBpLT5oYXNIZWln
aHRGb3JXaWR0aCgpICYmIG1pbi5oZWlnaHQoKSA9PSAwICYmIG1pbi53aWR0aCgpID4gMCApCiAg
ICAgICAgcy5zZXRIZWlnaHQoIGktPmhlaWdodEZvcldpZHRoKCBzLndpZHRoKCkgKSApOwoKICAg
IHMgPSBzLmV4cGFuZGVkVG8oIFFTaXplKDEsMSkgKTsKICAgIHJldHVybiBzOwp9CgoKc3RhdGlj
IFFTaXplIHNtYXJ0TWF4U2l6ZSggUVdpZGdldCAqdywgaW50IGFsaWduID0gMCApCnsKICAgIGlm
ICggYWxpZ24gJiBIb3JBbGlnbiAmJiBhbGlnbiAmIFZlckFsaWduICkKICAgICAgICByZXR1cm4g
UVNpemUoIDMyNzY3LCAzMjc2NyApOwogICAgUVNpemUgcyA9IHctPm1heGltdW1TaXplKCk7CiAg
ICBpZiAoIHMud2lkdGgoKSA9PSAzMjc2NyAmJiAhKGFsaWduJkhvckFsaWduKSApCiAgICAgICAg
aWYgKCAhdy0+c2l6ZVBvbGljeSgpLm1heUdyb3dIb3Jpem9udGFsbHkoKSApCiAgICAgICAgICAg
IHMuc2V0V2lkdGgoIHctPnNpemVIaW50KCkud2lkdGgoKSApOwoKICAgIGlmICggcy5oZWlnaHQo
KSA9PSAzMjc2NyAmJiAhKGFsaWduJlZlckFsaWduKSApCiAgICAgICAgaWYgKCAhdy0+c2l6ZVBv
bGljeSgpLm1heUdyb3dWZXJ0aWNhbGx5KCkgKQogICAgICAgICAgICBzLnNldEhlaWdodCggdy0+
c2l6ZUhpbnQoKS5oZWlnaHQoKSApOwoKICAgIHMgPSBzLmV4cGFuZGVkVG8oIHctPm1pbmltdW1T
aXplKCkgKTsKCiAgICBpZiAoYWxpZ24gJiBIb3JBbGlnbiApCiAgICAgICAgcy5zZXRXaWR0aCgg
MzI3NjcgKTsKICAgIGlmIChhbGlnbiAmIFZlckFsaWduICkKICAgICAgICBzLnNldEhlaWdodCgg
MzI3NjcgKTsKICAgIHJldHVybiBzOwp9CgoKCgoKCgp2b2lkIFFTcGFjZXJJdGVtOjpzZXRHZW9t
ZXRyeSggY29uc3QgUVJlY3QgJnIgKQp7CiAgICByZWN0ID0gcjsKfQoKCgoKCnZvaWQgUVdpZGdl
dEl0ZW06OnNldEdlb21ldHJ5KCBjb25zdCBRUmVjdCAmciApCnsKICAgIFFTaXplIHMgPSByLnNp
emUoKS5ib3VuZGVkVG8oIHNtYXJ0TWF4U2l6ZSggd2lkICkgKTsKICAgIGludCB4ID0gci54KCk7
CiAgICBpbnQgeSA9IHIueSgpOwogICAgaWYgKCBhbGlnbiAmIChIb3JBbGlnbnxWZXJBbGlnbikg
KSB7CiAgICAgICAgUVNpemUgcHJlZiA9IHdpZC0+c2l6ZUhpbnQoKS5leHBhbmRlZFRvKCB3aWQt
Pm1pbmltdW1TaXplKCkgKTsKICAgICAgICBpZiAoIGFsaWduICYgSG9yQWxpZ24gKQogICAgICAg
ICAgICBzLnNldFdpZHRoKCAoKHMud2lkdGgoKSkgPCAocHJlZi53aWR0aCgpKSA/IChzLndpZHRo
KCkpIDogKHByZWYud2lkdGgoKSkpICk7CiAgICAgICAgaWYgKCBhbGlnbiAmIFZlckFsaWduICkg
ewogICAgICAgICAgICBpZiAoIGhhc0hlaWdodEZvcldpZHRoKCkgKQogICAgICAgICAgICAgICAg
cy5zZXRIZWlnaHQoICgocy5oZWlnaHQoKSkgPCAoaGVpZ2h0Rm9yV2lkdGgocy53aWR0aCgpKSkg
PyAocy5oZWlnaHQoKSkgOiAoaGVpZ2h0Rm9yV2lkdGgocy53aWR0aCgpKSkpICk7CiAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgIHMuc2V0SGVpZ2h0KCAoKHMuaGVpZ2h0KCkpIDwgKHBy
ZWYuaGVpZ2h0KCkpID8gKHMuaGVpZ2h0KCkpIDogKHByZWYuaGVpZ2h0KCkpKSApOwogICAgICAg
IH0KICAgIH0KICAgIGlmICggYWxpZ24gJiBRdDo6QWxpZ25SaWdodCApCiAgICAgICAgeCA9IHgg
KyAoIHIud2lkdGgoKSAtIHMud2lkdGgoKSApOwogICAgZWxzZSBpZiAoICEoYWxpZ24gJiBRdDo6
QWxpZ25MZWZ0KSApCiAgICAgICAgeCA9IHggKyAoIHIud2lkdGgoKSAtIHMud2lkdGgoKSApIC8g
MjsKCiAgICBpZiAoIGFsaWduICYgUXQ6OkFsaWduQm90dG9tICkKICAgICAgICB5ID0geSArICgg
ci5oZWlnaHQoKSAtIHMuaGVpZ2h0KCkgKTsKICAgIGVsc2UgaWYgKCAhKGFsaWduICYgUXQ6OkFs
aWduVG9wKSApCiAgICAgICAgeSA9IHkgKyAoIHIuaGVpZ2h0KCkgLSBzLmhlaWdodCgpICkgLyAy
OwoKICAgIGlmICggIXdpZC0+aXNIaWRkZW4oKSAmJiAhd2lkLT5pc1RvcExldmVsKCkgKQogICAg
ICAgIHdpZC0+c2V0R2VvbWV0cnkoIHgsIHksIHMud2lkdGgoKSwgcy5oZWlnaHQoKSApOwp9CgoK
CgoKCgpRUmVjdCBRU3BhY2VySXRlbTo6Z2VvbWV0cnkoKSBjb25zdAp7CiAgICByZXR1cm4gcmVj
dDsKfQoKCgoKCgpRUmVjdCBRV2lkZ2V0SXRlbTo6Z2VvbWV0cnkoKSBjb25zdAp7CiAgICByZXR1
cm4gd2lkLT5nZW9tZXRyeSgpOwp9CgoKCgoKClFSZWN0IFFMYXlvdXQ6Omdlb21ldHJ5KCkgY29u
c3QKewogICAgcmV0dXJuIHJlY3Q7Cn0KCgoKCgoKCmJvb2wgUVdpZGdldEl0ZW06Omhhc0hlaWdo
dEZvcldpZHRoKCkgY29uc3QKewogICAgaWYgKCBpc0VtcHR5KCkgKQogICAgICAgIHJldHVybiBG
QUxTRTsKICAgIGlmICggd2lkLT5sYXlvdXQoKSApCiAgICAgICAgcmV0dXJuIHdpZC0+bGF5b3V0
KCktPmhhc0hlaWdodEZvcldpZHRoKCk7CiAgICByZXR1cm4gd2lkLT5zaXplUG9saWN5KCkuaGFz
SGVpZ2h0Rm9yV2lkdGgoKTsKfQoKCgoKCmludCBRV2lkZ2V0SXRlbTo6aGVpZ2h0Rm9yV2lkdGgo
IGludCB3ICkgY29uc3QKewogICAgaWYgKCBpc0VtcHR5KCkgKQogICAgICAgIHJldHVybiAwOwog
ICAgaWYgKCB3aWQtPmxheW91dCgpICkKICAgICAgICByZXR1cm4gd2lkLT5sYXlvdXQoKS0+dG90
YWxIZWlnaHRGb3JXaWR0aCggdyApOwogICAgcmV0dXJuIHdpZC0+aGVpZ2h0Rm9yV2lkdGgoIHcg
KTsKfQoKCgoKUVNpemVQb2xpY3k6OkV4cGFuZERhdGEgUVNwYWNlckl0ZW06OmV4cGFuZGluZygp
IGNvbnN0CnsKICAgIHJldHVybiBzaXplUC5leHBhbmRpbmcoKTsKfQoKCgoKClFTaXplUG9saWN5
OjpFeHBhbmREYXRhIFFXaWRnZXRJdGVtOjpleHBhbmRpbmcoKSBjb25zdAp7CiAgICBpZiAoIGlz
RW1wdHkoKSB8fCBhbGlnbiZIb3JBbGlnbiAmJiBhbGlnbiZWZXJBbGlnbiApCiAgICAgICAgcmV0
dXJuIFFTaXplUG9saWN5OjpOb0RpcmVjdGlvbjsKICAgIGludCBlID0gd2lkLT5sYXlvdXQoKSA/
IHdpZC0+bGF5b3V0KCktPmV4cGFuZGluZygpCiAgICAgICAgICAgICA6IHdpZC0+c2l6ZVBvbGlj
eSgpLmV4cGFuZGluZygpOwogICAgaWYgKCBhbGlnbiZIb3JBbGlnbiApCiAgICAgICAgZSA9IGUg
JiB+UVNpemVQb2xpY3k6Okhvcml6b250YWw7CiAgICBlbHNlIGlmICggYWxpZ24mVmVyQWxpZ24g
KQogICAgICAgIGUgPSBlICYgflFTaXplUG9saWN5OjpWZXJ0aWNhbDsKCiAgICByZXR1cm4gKFFT
aXplUG9saWN5OjpFeHBhbmREYXRhKWU7Cn0KCgoKClFTaXplIFFTcGFjZXJJdGVtOjptaW5pbXVt
U2l6ZSgpIGNvbnN0CnsKICAgIHJldHVybiBRU2l6ZSggc2l6ZVAubWF5U2hyaW5rSG9yaXpvbnRh
bGx5KCkgPyAwIDogd2lkdGgsCiAgICAgICAgICAgICAgICAgIHNpemVQLm1heVNocmlua1ZlcnRp
Y2FsbHkoKSA/IDAgOiBoZWlnaHQgKTsKfQoKCgoKClFTaXplIFFXaWRnZXRJdGVtOjptaW5pbXVt
U2l6ZSgpIGNvbnN0CnsKICAgIGlmICggaXNFbXB0eSgpICkKICAgICAgICByZXR1cm4gUVNpemUo
MCwwKTsKICAgIHJldHVybiBzbWFydE1pblNpemUoIHRoaXMgKTsKfQoKCgoKClFTaXplIFFTcGFj
ZXJJdGVtOjptYXhpbXVtU2l6ZSgpIGNvbnN0CnsKICAgIHJldHVybiBRU2l6ZSggc2l6ZVAubWF5
R3Jvd0hvcml6b250YWxseSgpID8gMzI3NjcgOiB3aWR0aCwKICAgICAgICAgICAgICAgICAgc2l6
ZVAubWF5R3Jvd1ZlcnRpY2FsbHkoKSA/IDMyNzY3IDogaGVpZ2h0ICk7Cn0KCgoKClFTaXplIFFX
aWRnZXRJdGVtOjptYXhpbXVtU2l6ZSgpIGNvbnN0CnsKICAgIGlmICggaXNFbXB0eSgpICkKICAg
ICAgICByZXR1cm4gUVNpemUoMCwwKTsKICAgIHJldHVybiBzbWFydE1heFNpemUoIHdpZCwgYWxp
Z24gKTsKfQoKCgoKUVNpemUgUVNwYWNlckl0ZW06OnNpemVIaW50KCkgY29uc3QKewogICAgcmV0
dXJuIFFTaXplKCB3aWR0aCwgaGVpZ2h0ICk7Cn0KIyA1NzIgImtlcm5lbC9xYWJzdHJhY3RsYXlv
dXQuY3BwIgpRU2l6ZSBRV2lkZ2V0SXRlbTo6c2l6ZUhpbnQoKSBjb25zdAp7CgoKICAgIFFTaXpl
IHM7CiAgICBpZiAoIGlzRW1wdHkoKSApCiAgICAgICAgcyA9IFFTaXplKDAsMCk7CiAgICBlbHNl
CiAgICAgICAgcyA9IHdpZC0+c2l6ZUhpbnQoKS5ib3VuZGVkVG8oIHdpZC0+bWF4aW11bVNpemUo
KSApCiAgICAgICAgICAgIC5leHBhbmRlZFRvKCB3aWQtPm1pbmltdW1TaXplKCkgKS5leHBhbmRl
ZFRvKCBRU2l6ZSgxLDEpICk7CgoKICAgIHJldHVybiBzOwp9CgoKCgpib29sIFFTcGFjZXJJdGVt
Ojppc0VtcHR5KCkgY29uc3QKewogICAgcmV0dXJuIFRSVUU7Cn0KCgoKCmJvb2wgUVdpZGdldEl0
ZW06OmlzRW1wdHkoKSBjb25zdAp7CiAgICByZXR1cm4gd2lkLT5pc0hpZGRlbigpIHx8IHdpZC0+
aXNUb3BMZXZlbCgpOwp9CiMgNjU2ICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIKUUxheW91
dDo6UUxheW91dCggUVdpZGdldCAqcGFyZW50LCBpbnQgYm9yZGVyLCBpbnQgc3BhY2UsIGNvbnN0
IGNoYXIgKm5hbWUgKQogICAgOiBRT2JqZWN0KCBwYXJlbnQsIG5hbWUgKQp7CiAgICBpbml0KCk7
CiAgICBpZiAoIHBhcmVudCApIHsKICAgICAgICBpZiAoIHBhcmVudC0+bGF5b3V0KCkgKSB7CiAg
ICAgICAgICAgIHFXYXJuaW5nKCAiUUxheW91dCBcIiVzXCIgYWRkZWQgdG8gJXMgXCIlc1wiLCIK
ICAgICAgICAgICAgICAgICAgICAgIiB3aGljaCBhbHJlYWR5IGhhZCBhIGxheW91dC4iLCBRT2Jq
ZWN0OjpuYW1lKCksCiAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+Y2xhc3NOYW1lKCksIHBh
cmVudC0+bmFtZSgpICk7CiAgICAgICAgICAgIHBhcmVudC0+cmVtb3ZlQ2hpbGQoIHRoaXMgKTsK
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0b3BMZXZlbCA9IFRSVUU7CiAgICAgICAgICAg
IGlmICggcGFyZW50LT5pc1RvcExldmVsKCkgKQogICAgICAgICAgICAgICAgYXV0b01pbmltdW0g
PSBUUlVFOwogICAgICAgICAgICBwYXJlbnQtPmluc3RhbGxFdmVudEZpbHRlciggdGhpcyApOwog
ICAgICAgICAgICBzZXRXaWRnZXRMYXlvdXQoIHBhcmVudCwgdGhpcyApOwogICAgICAgIH0KICAg
IH0KICAgIG91dHNpZGVCb3JkZXIgPSBib3JkZXI7CiAgICBpZiAoIHNwYWNlIDwgMCApCiAgICAg
ICAgaW5zaWRlU3BhY2luZyA9IGJvcmRlcjsKICAgIGVsc2UKICAgICAgICBpbnNpZGVTcGFjaW5n
ID0gc3BhY2U7CiAgICBpbnN0YWxsRXZlbnRGaWx0ZXIoIHRoaXMgKTsKfQoKdm9pZCBRTGF5b3V0
Ojppbml0KCkKewogICAgaW5zaWRlU3BhY2luZyA9IDA7CiAgICBvdXRzaWRlQm9yZGVyID0gMDsK
ICAgIHRvcExldmVsID0gRkFMU0U7CiAgICBhdXRvTWluaW11bSA9IEZBTFNFOwogICAgYXV0b05l
d0NoaWxkID0gRkFMU0U7CiAgICBmcm96ZW4gPSBGQUxTRTsKICAgIGFjdGl2YXRlZCA9IEZBTFNF
OwogICAgbWFyZ2luSW1wbCA9IEZBTFNFOwogICAgZXh0cmFEYXRhID0gMDsKCiAgICBtZW51YmFy
ID0gMDsKCiAgICBlbmFibGVkID0gVFJVRTsKfQojIDcwOSAia2VybmVsL3FhYnN0cmFjdGxheW91
dC5jcHAiClFMYXlvdXQ6OlFMYXlvdXQoIFFMYXlvdXQgKnBhcmVudExheW91dCwgaW50IHNwYWNl
LCBjb25zdCBjaGFyICpuYW1lICkKICAgIDogUU9iamVjdCggcGFyZW50TGF5b3V0LCBuYW1lICkK
CnsKICAgIGluaXQoKTsKICAgIGluc2lkZVNwYWNpbmcgPSBzcGFjZSA8IDAgPyBwYXJlbnRMYXlv
dXQtPmluc2lkZVNwYWNpbmcgOiBzcGFjZTsKICAgIHBhcmVudExheW91dC0+YWRkSXRlbSggdGhp
cyApOwogICAgaW5zdGFsbEV2ZW50RmlsdGVyKCB0aGlzICk7Cn0KIyA3MjkgImtlcm5lbC9xYWJz
dHJhY3RsYXlvdXQuY3BwIgpRTGF5b3V0OjpRTGF5b3V0KCBpbnQgc3BhY2UsIGNvbnN0IGNoYXIg
Km5hbWUgKQogICAgOiBRT2JqZWN0KCAwLCBuYW1lICkKewogICAgaW5pdCgpOwogICAgaW5zaWRl
U3BhY2luZyA9IHNwYWNlOwogICAgaW5zdGFsbEV2ZW50RmlsdGVyKCB0aGlzICk7Cn0KIyA4Mjkg
Imtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3BwIgp2b2lkIFFMYXlvdXQ6OnNldE1hcmdpbiggaW50
IGJvcmRlciApCnsKICAgIG91dHNpZGVCb3JkZXIgPSBib3JkZXI7CiAgICBpbnZhbGlkYXRlKCk7
CiAgICBpZiAoIG1haW5XaWRnZXQoKSApIHsKICAgICAgICBRRXZlbnQgKmxoID0gbmV3IFFFdmVu
dCggUUV2ZW50OjpMYXlvdXRIaW50ICk7CiAgICAgICAgUUFwcGxpY2F0aW9uOjpwb3N0RXZlbnQo
IG1haW5XaWRnZXQoKSwgbGggKTsKICAgIH0KfQojIDg0NiAia2VybmVsL3FhYnN0cmFjdGxheW91
dC5jcHAiCnZvaWQgUUxheW91dDo6c2V0U3BhY2luZyggaW50IHNwYWNlICkKewogICAgaW5zaWRl
U3BhY2luZyA9IHNwYWNlOwogICAgaW52YWxpZGF0ZSgpOwogICAgaWYgKCBtYWluV2lkZ2V0KCkg
KSB7CiAgICAgICAgUUV2ZW50ICpsaCA9IG5ldyBRRXZlbnQoIFFFdmVudDo6TGF5b3V0SGludCAp
OwogICAgICAgIFFBcHBsaWNhdGlvbjo6cG9zdEV2ZW50KCBtYWluV2lkZ2V0KCksIGxoICk7CiAg
ICB9Cn0KIyA4NjQgImtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3BwIgpRV2lkZ2V0ICogUUxheW91
dDo6bWFpbldpZGdldCgpCnsKICAgIGlmICggIXRvcExldmVsICkgewogICAgICAgIGlmICggcGFy
ZW50KCkgKSB7CiAgICAgICAgICAgIGlmICggIShwYXJlbnQoKS0+aW5oZXJpdHMoICJRTGF5b3V0
IiApKSApIHFXYXJuaW5nKCJBU1NFUlQ6IFwiJXNcIiBpbiAlcyAoJWQpIiwicGFyZW50KCktPmlu
aGVyaXRzKCBcIlFMYXlvdXRcIiApIiwia2VybmVsL3FhYnN0cmFjdGxheW91dC5jcHAiLDg2OCk7
CiAgICAgICAgICAgIHJldHVybiAoKFFMYXlvdXQqKXBhcmVudCgpKS0+bWFpbldpZGdldCgpOwog
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgIH0gZWxz
ZSB7CiAgICAgICAgaWYgKCAhKHBhcmVudCgpICYmIHBhcmVudCgpLT5pc1dpZGdldFR5cGUoKSkg
KSBxV2FybmluZygiQVNTRVJUOiBcIiVzXCIgaW4gJXMgKCVkKSIsInBhcmVudCgpICYmIHBhcmVu
dCgpLT5pc1dpZGdldFR5cGUoKSIsImtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3BwIiw4NzQpOwog
ICAgICAgIHJldHVybiAoUVdpZGdldCopcGFyZW50KCk7CiAgICB9Cn0KCgoKCgoKYm9vbCBRTGF5
b3V0Ojppc0VtcHR5KCkgY29uc3QKewogICAgcmV0dXJuIEZBTFNFOwp9CgoKCgoKdm9pZCBRTGF5
b3V0OjpzZXRXaWRnZXRMYXlvdXQoIFFXaWRnZXQgKncsIFFMYXlvdXQgKmwgKQp7CiAgICB3LT5z
ZXRMYXlvdXQoIGwgKTsKfQojIDkwNyAia2VybmVsL3FhYnN0cmFjdGxheW91dC5jcHAiCnZvaWQg
UUxheW91dDo6c2V0R2VvbWV0cnkoIGNvbnN0IFFSZWN0ICZyICkKewogICAgcmVjdCA9IHI7Cn0K
IyA5MTkgImtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3BwIgp2b2lkIFFMYXlvdXQ6OmludmFsaWRh
dGUoKQp7CiAgICByZWN0ID0gUVJlY3QoKTsKfQojIDkzNSAia2VybmVsL3FhYnN0cmFjdGxheW91
dC5jcHAiCnN0YXRpYyBib29sIHJlbW92ZVdpZGdldCggUUxheW91dEl0ZW0gKmxheSwgUVdpZGdl
dCAqdyApCnsKICAgIGJvb2wgZm9vID0gRkFMU0U7CiAgICBRTGF5b3V0SXRlcmF0b3IgaXQgPSBs
YXktPml0ZXJhdG9yKCk7CiAgICBRTGF5b3V0SXRlbSAqY2hpbGQ7CiAgICB3aGlsZSAoIChjaGls
ZCA9IGl0LmN1cnJlbnQoKSApICkgewogICAgICAgIGlmICggY2hpbGQtPndpZGdldCgpID09IHcg
KSB7CiAgICAgICAgICAgIGl0LmRlbGV0ZUN1cnJlbnQoKTsKICAgICAgICAgICAgbGF5LT5pbnZh
bGlkYXRlKCk7CiAgICAgICAgICAgIGZvbyA9IFRSVUU7CiAgICAgICAgfSBlbHNlIGlmICggcmVt
b3ZlV2lkZ2V0KCBjaGlsZCwgdyApICkgewogICAgICAgICAgICBsYXktPmludmFsaWRhdGUoKTsK
ICAgICAgICAgICAgZm9vID0gVFJVRTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICArK2l0
OwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmb287Cn0KCgoKCgoKYm9vbCBRTGF5b3V0Ojpl
dmVudEZpbHRlciggUU9iamVjdCAqbywgUUV2ZW50ICplICkKewogICAgaWYgKCAhZW5hYmxlZCAp
CiAgICAgICAgcmV0dXJuIEZBTFNFOwoKICAgIGlmICggbyA9PSB0aGlzICYmIGUtPnR5cGUoKSA9
PSBRRXZlbnQ6OkNoaWxkUmVtb3ZlZCApIHsKCgogICAgICAgIFFDaGlsZEV2ZW50ICpjID0gKFFD
aGlsZEV2ZW50KillOwogICAgICAgIFFMYXlvdXRJdGVyYXRvciBpdCA9IGl0ZXJhdG9yKCk7CiAg
ICAgICAgUUxheW91dEl0ZW0gKml0ZW07CiAgICAgICAgd2hpbGUgKCAoaXRlbSA9IGl0LmN1cnJl
bnQoKSApICkgewogICAgICAgICAgICBpZiAoIGl0ZW0gPT0gKFFMYXlvdXQqKWMtPmNoaWxkKCkg
KSB7CiAgICAgICAgICAgICAgICBpdC50YWtlQ3VycmVudCgpOwogICAgICAgICAgICAgICAgaW52
YWxpZGF0ZSgpOwogICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICB9CiAg
ICAgICAgICAgICsraXQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KCiAg
ICBpZiAoICFvLT5pc1dpZGdldFR5cGUoKSApCiAgICAgICAgcmV0dXJuIEZBTFNFOwoKICAgIHN3
aXRjaCAoIGUtPnR5cGUoKSApIHsKICAgIGNhc2UgUUV2ZW50OjpSZXNpemU6CiAgICAgICAgaWYg
KCBhY3RpdmF0ZWQgKSB7CiAgICAgICAgICAgIFFSZXNpemVFdmVudCAqciA9IChRUmVzaXplRXZl
bnQqKWU7CiAgICAgICAgICAgIGludCBtYmggPSAwOwoKICAgICAgICAgICAgaWYgKCBtZW51YmFy
ICYmICFtZW51YmFyLT5pc0hpZGRlbigpICYmICFtZW51YmFyLT5pc1RvcExldmVsKCkgKQogICAg
ICAgICAgICAgICAgbWJoID0gbWVudWJhci0+aGVpZ2h0Rm9yV2lkdGgoIHItPnNpemUoKS53aWR0
aCgpICk7CgogICAgICAgICAgICBpbnQgYiA9IG1hcmdpbkltcGwgPyAwIDogb3V0c2lkZUJvcmRl
cjsKICAgICAgICAgICAgc2V0R2VvbWV0cnkoIFFSZWN0KCBiLCBtYmggKyBiLCByLT5zaXplKCku
d2lkdGgoKSAtIDIqYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5zaXplKCku
aGVpZ2h0KCkgLSBtYmggLSAyKmIgKSApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFj
dGl2YXRlKCk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgY2FzZSBRRXZlbnQ6OkNoaWxk
UmVtb3ZlZDogewogICAgICAgIFFDaGlsZEV2ZW50ICpjID0gKFFDaGlsZEV2ZW50KillOwogICAg
ICAgIGlmICggYy0+Y2hpbGQoKS0+aXNXaWRnZXRUeXBlKCkgKSB7CiAgICAgICAgICAgIFFXaWRn
ZXQgKncgPSAoUVdpZGdldCopYy0+Y2hpbGQoKTsKCiAgICAgICAgICAgIGlmICggdyA9PSBtZW51
YmFyICkKICAgICAgICAgICAgICAgIG1lbnViYXIgPSAwOwoKICAgICAgICAgICAgaWYgKCByZW1v
dmVXaWRnZXQoIHRoaXMsIHcgKSApIHsKICAgICAgICAgICAgICAgIFFFdmVudCAqbGggPSBuZXcg
UUV2ZW50KCBRRXZlbnQ6OkxheW91dEhpbnQgKTsKICAgICAgICAgICAgICAgIFFBcHBsaWNhdGlv
bjo6cG9zdEV2ZW50KCBvLCBsaCApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJy
ZWFrOwogICAgfQogICAgY2FzZSBRRXZlbnQ6OkNoaWxkSW5zZXJ0ZWQ6CiAgICAgICAgaWYgKCB0
b3BMZXZlbCAmJiBhdXRvTmV3Q2hpbGQgKSB7CiAgICAgICAgICAgIFFDaGlsZEV2ZW50ICpjID0g
KFFDaGlsZEV2ZW50KillOwogICAgICAgICAgICBpZiAoIGMtPmNoaWxkKCktPmlzV2lkZ2V0VHlw
ZSgpICkgewogICAgICAgICAgICAgICAgUVdpZGdldCAqdyA9IChRV2lkZ2V0KiljLT5jaGlsZCgp
OwogICAgICAgICAgICAgICAgaWYgKCAhdy0+aXNUb3BMZXZlbCgpICkgewoKICAgICAgICAgICAg
ICAgICAgICBpZiAoIHctPmluaGVyaXRzKCAiUU1lbnVCYXIiICkgJiYgKCAhdy0+cGFyZW50KCkg
fHwgIXctPnBhcmVudCgpLT5pbmhlcml0cyggIlFUb29sQmFyIiApICkgKQogICAgICAgICAgICAg
ICAgICAgICAgICBtZW51YmFyID0gKFFNZW51QmFyKil3OwogICAgICAgICAgICAgICAgICAgIGVs
c2UKCiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW0oIG5ldyBRV2lkZ2V0SXRlbSggdyAp
ICk7CiAgICAgICAgICAgICAgICAgICAgUUV2ZW50ICpsaCA9IG5ldyBRRXZlbnQoIFFFdmVudDo6
TGF5b3V0SGludCApOwogICAgICAgICAgICAgICAgICAgIFFBcHBsaWNhdGlvbjo6cG9zdEV2ZW50
KCBvLCBsaCApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICAgIGJyZWFrOwogICAgY2FzZSBRRXZlbnQ6OkxheW91dEhpbnQ6CiAgICAgICAgYWN0aXZhdGUo
KTsKICAgICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBy
ZXR1cm4gUU9iamVjdDo6ZXZlbnRGaWx0ZXIoIG8sIGUgKTsKCn0KCgoKCgoKCmludCBRTGF5b3V0
Ojp0b3RhbEhlaWdodEZvcldpZHRoKCBpbnQgdyApIGNvbnN0CnsKICAgIGlmICggdG9wTGV2ZWwg
KSB7CiAgICAgICAgUVdpZGdldCAqbXcgPSAoUVdpZGdldCopcGFyZW50KCk7CiAgICAgICAgaWYg
KCBtdyAmJiAhbXctPnRlc3RXU3RhdGUoV1N0YXRlX1BvbGlzaGVkKSApIHsKICAgICAgICAgICAg
bXctPnBvbGlzaCgpOwogICAgICAgIH0KICAgIH0KICAgIGludCBiID0gKHRvcExldmVsICYmICFt
YXJnaW5JbXBsKSA/IDIqb3V0c2lkZUJvcmRlciA6IDA7CiAgICBpbnQgaCA9IGhlaWdodEZvcldp
ZHRoKCB3IC0gYiApICsgYjsKCiAgICBpZiAoIG1lbnViYXIgJiYgIW1lbnViYXItPmlzVG9wTGV2
ZWwoKSApCiAgICAgICAgaCArPSBtZW51YmFyLT5oZWlnaHRGb3JXaWR0aCggdyApOwoKICAgIHJl
dHVybiBoOwp9CgoKCgoKClFTaXplIFFMYXlvdXQ6OnRvdGFsTWluaW11bVNpemUoKSBjb25zdAp7
CiAgICBpZiAoIHRvcExldmVsICkgewogICAgICAgIFFXaWRnZXQgKm13ID0gKFFXaWRnZXQqKXBh
cmVudCgpOwogICAgICAgIGlmICggbXcgJiYgIW13LT50ZXN0V1N0YXRlKFdTdGF0ZV9Qb2xpc2hl
ZCkgKSB7CiAgICAgICAgICAgIG13LT5wb2xpc2goKTsKICAgICAgICB9CiAgICB9CiAgICBpbnQg
YiA9ICh0b3BMZXZlbCAmJiAhbWFyZ2luSW1wbCkgPyAyKm91dHNpZGVCb3JkZXIgOiAwOwoKICAg
IFFTaXplIHMgPSBtaW5pbXVtU2l6ZSgpOwogICAgaW50IGggPSBiOwoKICAgIGlmICggbWVudWJh
ciAmJiAhbWVudWJhci0+aXNUb3BMZXZlbCgpICkKICAgICAgICBoICs9IG1lbnViYXItPmhlaWdo
dEZvcldpZHRoKCBzLndpZHRoKCkgKTsKCiAgICByZXR1cm4gcyArIFFTaXplKGIsaCk7Cn0KIyAx
MDk4ICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIKUVNpemUgUUxheW91dDo6dG90YWxTaXpl
SGludCgpIGNvbnN0CnsKICAgIGlmICggdG9wTGV2ZWwgKSB7CiAgICAgICAgUVdpZGdldCAqbXcg
PSAoUVdpZGdldCopcGFyZW50KCk7CiAgICAgICAgaWYgKCBtdyAmJiAhbXctPnRlc3RXU3RhdGUo
V1N0YXRlX1BvbGlzaGVkKSApIHsKICAgICAgICAgICAgbXctPnBvbGlzaCgpOwogICAgICAgIH0K
ICAgIH0KICAgIGludCBiID0gKHRvcExldmVsICYmICFtYXJnaW5JbXBsKSA/IDIqb3V0c2lkZUJv
cmRlciA6IDA7CgogICAgUVNpemUgcyA9IHNpemVIaW50KCk7CiAgICBpbnQgaCA9IGI7CgogICAg
aWYgKCBtZW51YmFyICYmICFtZW51YmFyLT5pc1RvcExldmVsKCkgKQogICAgICAgIGggKz0gbWVu
dWJhci0+aGVpZ2h0Rm9yV2lkdGgoIHMud2lkdGgoKSApOwoKICAgIHJldHVybiBzICsgUVNpemUo
YixoKTsKfQoKCgoKCgoKUVNpemUgUUxheW91dDo6dG90YWxNYXhpbXVtU2l6ZSgpIGNvbnN0CnsK
ICAgIGlmICggdG9wTGV2ZWwgKSB7CiAgICAgICAgUVdpZGdldCAqbXcgPSAoUVdpZGdldCopcGFy
ZW50KCk7CiAgICAgICAgaWYgKCBtdyAmJiAhbXctPnRlc3RXU3RhdGUoV1N0YXRlX1BvbGlzaGVk
KSApIHsKICAgICAgICAgICAgbXctPnBvbGlzaCgpOwogICAgICAgIH0KICAgIH0KICAgIGludCBi
ID0gKHRvcExldmVsICYmICFtYXJnaW5JbXBsKSA/IDIqb3V0c2lkZUJvcmRlciA6IDA7CgogICAg
UVNpemUgcyA9IG1heGltdW1TaXplKCk7CiAgICBpbnQgaCA9IGI7CgogICAgaWYgKCBtZW51YmFy
ICYmICFtZW51YmFyLT5pc1RvcExldmVsKCkgKQogICAgICAgIGggKz0gbWVudWJhci0+aGVpZ2h0
Rm9yV2lkdGgoIHMud2lkdGgoKSApOwoKCiAgICBpZiAoIGlzVG9wTGV2ZWwoKSApCiAgICAgICAg
cyA9IFFTaXplKCAoKHMud2lkdGgoKSArIGIpIDwgKDMyNzY3KSA/IChzLndpZHRoKCkgKyBiKSA6
ICgzMjc2NykpLAogICAgICAgICAgICAgICAgICAgKChzLmhlaWdodCgpICsgaCkgPCAoMzI3Njcp
ID8gKHMuaGVpZ2h0KCkgKyBoKSA6ICgzMjc2NykpICk7CiAgICByZXR1cm4gczsKfQojIDExNTcg
Imtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3BwIgpRTGF5b3V0Ojp+UUxheW91dCgpCnsKCgogICAg
aWYgKCBpc1RvcExldmVsKCkgJiYgcGFyZW50KCkgJiYgcGFyZW50KCktPmlzV2lkZ2V0VHlwZSgp
ICYmCiAgICAgICAgICgoUVdpZGdldCopcGFyZW50KCkpLT5sYXlvdXQoKSA9PSB0aGlzICkKICAg
ICAgICBzZXRXaWRnZXRMYXlvdXQoIChRV2lkZ2V0KilwYXJlbnQoKSwgMCApOwp9CgoKCgp2b2lk
IFFMYXlvdXQ6OmRlbGV0ZUFsbEl0ZW1zKCkKewogICAgUUxheW91dEl0ZXJhdG9yIGl0ID0gaXRl
cmF0b3IoKTsKICAgIFFMYXlvdXRJdGVtICpsOwogICAgd2hpbGUgKCAobD1pdC50YWtlQ3VycmVu
dCgpKSApCiAgICAgICAgZGVsZXRlIGw7Cn0KCgoKCgp2b2lkIFFMYXlvdXQ6OmFkZENoaWxkTGF5
b3V0KCBRTGF5b3V0ICpsICkKewogICAgaWYgKCBsLT5wYXJlbnQoKSApIHsKCiAgICAgICAgcVdh
cm5pbmcoICJRTGF5b3V0OjphZGRDaGlsZExheW91dCgpLCBsYXlvdXQgYWxyZWFkeSBoYXMgYSBw
YXJlbnQuIiApOwoKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbnNlcnRDaGlsZCggbCApOwog
ICAgaWYgKCBsLT5pbnNpZGVTcGFjaW5nIDwgMCApCiAgICAgICAgbC0+aW5zaWRlU3BhY2luZyA9
IGluc2lkZVNwYWNpbmc7Cn0KIyAxMjE1ICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIKdm9p
ZCBRTGF5b3V0OjpmcmVlemUoIGludCB3LCBpbnQgaCApCnsKICAgIGlmICggdyA8PSAwIHx8IGgg
PD0gMCApIHsKICAgICAgICBzZXRSZXNpemVNb2RlKCBGaXhlZCApOwogICAgfSBlbHNlIHsKICAg
ICAgICBzZXRSZXNpemVNb2RlKCBGcmVlUmVzaXplICk7CiAgICAgICAgbWFpbldpZGdldCgpLT5z
ZXRGaXhlZFNpemUoIHcsIGggKTsKICAgIH0KfQojIDEyMzUgImtlcm5lbC9xYWJzdHJhY3RsYXlv
dXQuY3BwIgp2b2lkIFFMYXlvdXQ6OnNldE1lbnVCYXIoIFFNZW51QmFyICp3ICkKewogICAgbWVu
dWJhciA9IHc7Cn0KIyAxMjUwICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIKUVNpemUgUUxh
eW91dDo6bWluaW11bVNpemUoKSBjb25zdAp7CiAgICByZXR1cm4gUVNpemUoIDAsIDAgKTsKfQoj
IDEyNjQgImtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3BwIgpRU2l6ZSBRTGF5b3V0OjptYXhpbXVt
U2l6ZSgpIGNvbnN0CnsKICAgIHJldHVybiBRU2l6ZSggMzI3NjcsIDMyNzY3ICk7Cn0KIyAxMjc5
ICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIKUVNpemVQb2xpY3k6OkV4cGFuZERhdGEgUUxh
eW91dDo6ZXhwYW5kaW5nKCkgY29uc3QKewogICAgcmV0dXJuIFFTaXplUG9saWN5OjpCb3RoRGly
ZWN0aW9uczsKfQoKCgoKc3RhdGljIHZvaWQgaW52YWxpZGF0ZVJlY3Vyc2l2ZSggUUxheW91dEl0
ZW0gKmxheSApCnsKICAgIGxheS0+aW52YWxpZGF0ZSgpOwogICAgUUxheW91dEl0ZXJhdG9yIGl0
ID0gbGF5LT5pdGVyYXRvcigpOwogICAgUUxheW91dEl0ZW0gKmNoaWxkOwogICAgd2hpbGUgKCAo
Y2hpbGQgPSBpdC5jdXJyZW50KCkgKSApIHsKICAgICAgICBpbnZhbGlkYXRlUmVjdXJzaXZlKCBj
aGlsZCApOwogICAgICAgICsraXQ7CiAgICB9Cn0KIyAxMzEyICJrZXJuZWwvcWFic3RyYWN0bGF5
b3V0LmNwcCIKYm9vbCBRTGF5b3V0OjphY3RpdmF0ZSgpCnsKCgoKICAgIGludmFsaWRhdGVSZWN1
cnNpdmUoIHRoaXMgKTsKICAgIGlmICggIXRvcExldmVsICkKICAgICAgICByZXR1cm4gRkFMU0U7
CgogICAgUVdpZGdldCAqbWFpblcgPSBtYWluV2lkZ2V0KCk7CiAgICBpZiAoICFtYWluVyApIHsK
CiAgICAgICAgICAgIHFXYXJuaW5nKCAiUUxheW91dDo6YWN0aXZhdGUoKTogJXMgXCIlc1wiIGRv
ZXMgbm90IGhhdmUgYSAiCiAgICAgICAgICAgICAgICAgICAgICAibWFpbiB3aWRnZXQuIiwKICAg
ICAgICAgICAgICAgICAgICAgUU9iamVjdDo6Y2xhc3NOYW1lKCksIFFPYmplY3Q6Om5hbWUoKSAp
OwoKCiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQogICAgYWN0aXZhdGVkID0gVFJVRTsKICAg
IFFTaXplIHMgPSBtYWluV2lkZ2V0KCktPnNpemUoKTsKICAgIGludCBtYmggPSAwOwoKICAgIG1i
aCA9IG1lbnViYXIgJiYgIW1lbnViYXItPmlzVG9wTGV2ZWwoKSA/IG1lbnViYXItPmhlaWdodEZv
cldpZHRoKCBzLndpZHRoKCkgKSA6IDA7CgogICAgaW50IGIgPSBtYXJnaW5JbXBsID8gMCA6IG91
dHNpZGVCb3JkZXI7CiAgICBzZXRHZW9tZXRyeSggUVJlY3QoIGIsIG1iaCArIGIsCiAgICAgICAg
ICAgICAgICAgICAgICAgIHMud2lkdGgoKSAtIDIqYiwKICAgICAgICAgICAgICAgICAgICAgICAg
cy5oZWlnaHQoKSAtIG1iaCAtIDIqYiApICk7CiAgICBpZiAoIGZyb3plbiApCiAgICAgICAgbWFp
bldpZGdldCgpLT5zZXRGaXhlZFNpemUoIHRvdGFsU2l6ZUhpbnQoKSApOwogICAgZWxzZSBpZiAo
IGF1dG9NaW5pbXVtICkKICAgICAgICBtYWluV2lkZ2V0KCktPnNldE1pbmltdW1TaXplKCB0b3Rh
bE1pbmltdW1TaXplKCkgKTsKCgogICAgbWFpbldpZGdldCgpLT51cGRhdGVHZW9tZXRyeSgpOwog
ICAgcmV0dXJuIFRSVUU7Cn0KIyAxNTYyICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIKUUdM
YXlvdXRJdGVyYXRvcjo6flFHTGF5b3V0SXRlcmF0b3IoKQp7Cn0KIyAxNjg3ICJrZXJuZWwvcWFi
c3RyYWN0bGF5b3V0LmNwcCIKdm9pZCBRTGF5b3V0OjpzZXRSZXNpemVNb2RlKCBSZXNpemVNb2Rl
IG1vZGUgKQp7CiAgICBpZiAoIG1vZGUgPT0gcmVzaXplTW9kZSgpICkKICAgICAgICByZXR1cm47
CiAgICBzd2l0Y2ggKG1vZGUpIHsKICAgIGNhc2UgRml4ZWQ6CiAgICAgICAgZnJvemVuID0gVFJV
RTsKICAgICAgICBicmVhazsKICAgIGNhc2UgRnJlZVJlc2l6ZToKICAgICAgICBmcm96ZW4gPSBG
QUxTRTsKICAgICAgICBhdXRvTWluaW11bSA9IEZBTFNFOwogICAgICAgIGJyZWFrOwogICAgY2Fz
ZSBNaW5pbXVtOgogICAgICAgIGZyb3plbiA9IEZBTFNFOwogICAgICAgIGF1dG9NaW5pbXVtID0g
VFJVRTsKICAgICAgICBicmVhazsKICAgIH0KICAgIGFjdGl2YXRlKCk7Cn0KCgoKCgoKUUxheW91
dDo6UmVzaXplTW9kZSBRTGF5b3V0OjpyZXNpemVNb2RlKCkgY29uc3QKewogICAgcmV0dXJuIGZy
b3plbiA/IEZpeGVkIDogKGF1dG9NaW5pbXVtID8gTWluaW11bSA6IEZyZWVSZXNpemUgKTsKfQoj
IDE3MzUgImtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3BwIgp2b2lkIFFMYXlvdXQ6OnNldEF1dG9B
ZGQoIGJvb2wgYiApCnsKICAgIGF1dG9OZXdDaGlsZCA9IGI7Cn0KIyAxNzY0ICJrZXJuZWwvcWFi
c3RyYWN0bGF5b3V0LmNwcCIKdm9pZCBRTGF5b3V0OjpzZXRTdXBwb3J0c01hcmdpbiggYm9vbCBi
ICkKewogICAgbWFyZ2luSW1wbCA9IGI7Cn0KIyAxNzc4ICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0
LmNwcCIKUVJlY3QgUUxheW91dDo6YWxpZ25tZW50UmVjdCggY29uc3QgUVJlY3QgJnIgKSBjb25z
dAp7CiAgICBRU2l6ZSBzID0gc2l6ZUhpbnQoKTsKICAgIGludCBhID0gYWxpZ25tZW50KCk7CiAg
ICBpZiAoIGV4cGFuZGluZygpICYgUVNpemVQb2xpY3k6Okhvcml6b250YWwgfHwgIShhICYgSG9y
QWxpZ24gKSApIHsKICAgICAgICBzLnNldFdpZHRoKCByLndpZHRoKCkgKTsKICAgIH0KICAgIGlm
ICggZXhwYW5kaW5nKCkgJiBRU2l6ZVBvbGljeTo6VmVydGljYWwgfHwgIShhICYgVmVyQWxpZ24g
KSkgewogICAgICAgIHMuc2V0SGVpZ2h0KCByLmhlaWdodCgpICk7CiAgICB9IGVsc2UgaWYgKCBo
YXNIZWlnaHRGb3JXaWR0aCgpICkgewogICAgICAgIHMuc2V0SGVpZ2h0KCAoKHMuaGVpZ2h0KCkp
IDwgKGhlaWdodEZvcldpZHRoKHMud2lkdGgoKSkpID8gKHMuaGVpZ2h0KCkpIDogKGhlaWdodEZv
cldpZHRoKHMud2lkdGgoKSkpKSApOwogICAgfQoKICAgIGludCB4ID0gci54KCk7CiAgICBpbnQg
eSA9IHIueSgpOwoKICAgIGlmICggYSAmIFF0OjpBbGlnblJpZ2h0ICkKICAgICAgICB4ID0geCAr
ICggci53aWR0aCgpIC0gcy53aWR0aCgpICk7CiAgICBlbHNlIGlmICggIShhICYgUXQ6OkFsaWdu
TGVmdCkgKQogICAgICAgIHggPSB4ICsgKCByLndpZHRoKCkgLSBzLndpZHRoKCkgKSAvIDI7Cgog
ICAgaWYgKCBhICYgUXQ6OkFsaWduQm90dG9tICkKICAgICAgICB5ID0geSArICggci5oZWlnaHQo
KSAtIHMuaGVpZ2h0KCkgKTsKICAgIGVsc2UgaWYgKCAhKGEgJiBRdDo6QWxpZ25Ub3ApICkKICAg
ICAgICB5ID0geSArICggci5oZWlnaHQoKSAtIHMuaGVpZ2h0KCkgKSAvIDI7CgogICAgcmV0dXJu
IFFSZWN0KCB4LCB5LCBzLndpZHRoKCksIHMuaGVpZ2h0KCkgKTsKCn0KIyAxODIwICJrZXJuZWwv
cWFic3RyYWN0bGF5b3V0LmNwcCIKdm9pZCBRTGF5b3V0OjpzZXRFbmFibGVkKCBib29sIGVuYWJs
ZSkKewogICAgZW5hYmxlZCA9IGVuYWJsZTsKfQoKCgoKCgoKYm9vbCBRTGF5b3V0Ojppc0VuYWJs
ZWQoKSBjb25zdAp7CiAgICByZXR1cm4gZW5hYmxlZDsKfQo=


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

end of thread, other threads:[~2001-11-22  6:56 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-11-18 12:48 c++/4671: SegFault compiling qt qabstractlayout.cpp rodrigc
  -- strict thread matches above, loose matches on Subject: below --
2001-11-18 12:36 rodrigc
2001-10-25 16:26 georg.wild

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