This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

middle-end/5785: g++ crashes on modified libgcj interpreter



>Number:         5785
>Category:       middle-end
>Synopsis:       g++ crashes on modified libgcj interpreter
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Feb 26 08:36:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Tom Tromey <tromey@redhat.com>
>Release:        GNU C++ version 3.1 20020225 (experimental) (i686-pc-linux-gnu)
>Organization:
>Environment:
x86 Red Hat Linux 6.2
>Description:
I've modified the libgcj interpreter to do direct
threading and some other tricks.  Now g++ crashes when
compiling it at -O2.  I've attached the .ii file.
The code is pretty unusual in that it uses computed
goto as well as exception handling in one huge function.
Compiling with -g (and not -O) works, but it defeats the
purpose of this work, which is making the interpreter
faster.
>How-To-Repeat:
Here is the command-line I used to generate the .ii file:

/x1/egcs/build/gcc/xgcc -v -B/x1/egcs/build/gcc/ -nostdinc++ -L/x1/egcs/build/i686-pc-linux-gnu/libstdc++-v3/src -L/x1/egcs/build/i686-pc-linux-gnu/libstdc++-v3/src/.libs -B/x1/egcs/install/i686-pc-linux-gnu/bin/ -B/x1/egcs/install/i686-pc-linux-gnu/lib/ -isystem /x1/egcs/install/i686-pc-linux-gnu/include -DHAVE_CONFIG_H -I. -I../../../gcc/libjava -I./include -I./gcj -I../../../gcc/libjava -Iinclude -I../../../gcc/libjava/include -I../../../gcc/libjava/../boehm-gc/include -DGC_LINUX_THREADS=1 -D_REENTRANT=1 -DTHREAD_LOCAL_ALLOC=1 -DSILENT=1 -DNO_SIGNALS=1 -DNO_EXECUTE_PERMISSION=1 -DALL_INTERIOR_POINTERS=1 -DJAVA_FINALIZATION=1 -DGC_GCJ_SUPPORT=1 -DATOMIC_UNCOLLECTABLE=1 -I../../../gcc/libjava/libltdl -I../../../gcc/libjava/libltdl -I../../../gcc/libjava/.././libjava/../gcc -I../../../gcc/libjava/../zlib -I../../../gcc/libjava/../libffi/include -I../libffi/include -fno-rtti -fnon-call-exceptions -fdollars-in-identifiers -D__NO_MATH_INLINES -ffloat-store -I/usr/X11R6/include -W -Wall -D_GNU_SOURCE -DPREFIX=\"/x1/egcs/install\" -O2  ../../../gcc/libjava/interpret.cc  -fPIC -DPIC -c -save-temps
>Fix:

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

IyAxICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbnRlcnByZXQuY2MiCiMgMSAiPGJ1aWx0LWluPiIK
IyAxICI8Y29tbWFuZCBsaW5lPiIKIyAxICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbnRlcnByZXQu
Y2MiCiMgMTMgIi4uLy4uLy4uL2djYy9saWJqYXZhL2ludGVycHJldC5jYyIKIyAxICJpbmNsdWRl
L2NvbmZpZy5oIiAxCiMgMTQgIi4uLy4uLy4uL2djYy9saWJqYXZhL2ludGVycHJldC5jYyIgMgoK
I3ByYWdtYSBpbXBsZW1lbnRhdGlvbiAiamF2YS1pbnRlcnAuaCIKCiMgMSAiLi4vLi4vLi4vZ2Nj
L2xpYmphdmEvaW5jbHVkZS9qdm0uaCIgMQojIDIwICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNs
dWRlL2p2bS5oIgojIDEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9qYXZhcHJpbXMuaCIgMQoj
IDE1ICIuLi8uLi8uLi9nY2MvbGliamF2YS9nY2ovamF2YXByaW1zLmgiCiNwcmFnbWEgR0NDIGph
dmFfZXhjZXB0aW9ucwoKIyAxICJnY2ovbGliZ2NqLWNvbmZpZy5oIiAxCiMgMTggIi4uLy4uLy4u
L2djYy9saWJqYXZhL2djai9qYXZhcHJpbXMuaCIgMgojIDI5ICIuLi8uLi8uLi9nY2MvbGliamF2
YS9nY2ovamF2YXByaW1zLmgiCmV4dGVybiAiSmF2YSIKewogIHR5cGVkZWYgX19qYXZhX2J5dGUg
amJ5dGU7CiAgdHlwZWRlZiBfX2phdmFfc2hvcnQganNob3J0OwogIHR5cGVkZWYgX19qYXZhX2lu
dCBqaW50OwogIHR5cGVkZWYgX19qYXZhX2xvbmcgamxvbmc7CiAgdHlwZWRlZiBfX2phdmFfZmxv
YXQgamZsb2F0OwogIHR5cGVkZWYgX19qYXZhX2RvdWJsZSBqZG91YmxlOwogIHR5cGVkZWYgX19q
YXZhX2NoYXIgamNoYXI7CiAgdHlwZWRlZiBfX2phdmFfYm9vbGVhbiBqYm9vbGVhbjsKICB0eXBl
ZGVmIGppbnQganNpemU7CgoKCiAgbmFtZXNwYWNlIGphdmEKICB7CiAgICBuYW1lc3BhY2UgaW8K
ICAgIHsKICAgICAgY2xhc3MgQnVmZmVyZWRJbnB1dFN0cmVhbTsKICAgICAgY2xhc3MgQnVmZmVy
ZWRPdXRwdXRTdHJlYW07CiAgICAgIGNsYXNzIEJ1ZmZlcmVkUmVhZGVyOwogICAgICBjbGFzcyBC
dWZmZXJlZFdyaXRlcjsKICAgICAgY2xhc3MgQnl0ZUFycmF5SW5wdXRTdHJlYW07CiAgICAgIGNs
YXNzIEJ5dGVBcnJheU91dHB1dFN0cmVhbTsKICAgICAgY2xhc3MgQ2hhckFycmF5UmVhZGVyOwog
ICAgICBjbGFzcyBDaGFyQXJyYXlXcml0ZXI7CiAgICAgIGNsYXNzIENoYXJDb252ZXJzaW9uRXhj
ZXB0aW9uOwogICAgICBjbGFzcyBEYXRhSW5wdXQ7CiAgICAgIGNsYXNzIERhdGFJbnB1dFN0cmVh
bTsKICAgICAgY2xhc3MgRGF0YU91dHB1dDsKICAgICAgY2xhc3MgRGF0YU91dHB1dFN0cmVhbTsK
ICAgICAgY2xhc3MgRU9GRXhjZXB0aW9uOwogICAgICBjbGFzcyBFeHRlcm5hbGl6YWJsZTsKICAg
ICAgY2xhc3MgRmlsZTsKICAgICAgY2xhc3MgRmlsZURlc2NyaXB0b3I7CiAgICAgIGNsYXNzIEZp
bGVGaWx0ZXI7CiAgICAgIGNsYXNzIEZpbGVJbnB1dFN0cmVhbTsKICAgICAgY2xhc3MgRmlsZU5v
dEZvdW5kRXhjZXB0aW9uOwogICAgICBjbGFzcyBGaWxlT3V0cHV0U3RyZWFtOwogICAgICBjbGFz
cyBGaWxlUGVybWlzc2lvbjsKICAgICAgY2xhc3MgRmlsZVJlYWRlcjsKICAgICAgY2xhc3MgRmls
ZVdyaXRlcjsKICAgICAgY2xhc3MgRmlsZW5hbWVGaWx0ZXI7CiAgICAgIGNsYXNzIEZpbHRlcklu
cHV0U3RyZWFtOwogICAgICBjbGFzcyBGaWx0ZXJPdXRwdXRTdHJlYW07CiAgICAgIGNsYXNzIEZp
bHRlclJlYWRlcjsKICAgICAgY2xhc3MgRmlsdGVyV3JpdGVyOwogICAgICBjbGFzcyBJT0V4Y2Vw
dGlvbjsKICAgICAgY2xhc3MgSW5wdXRTdHJlYW07CiAgICAgIGNsYXNzIElucHV0U3RyZWFtUmVh
ZGVyOwogICAgICBjbGFzcyBJbnRlcmZhY2VDb21wYXJhdG9yOwogICAgICBjbGFzcyBJbnRlcnJ1
cHRlZElPRXhjZXB0aW9uOwogICAgICBjbGFzcyBJbnZhbGlkQ2xhc3NFeGNlcHRpb247CiAgICAg
IGNsYXNzIEludmFsaWRPYmplY3RFeGNlcHRpb247CiAgICAgIGNsYXNzIExpbmVOdW1iZXJJbnB1
dFN0cmVhbTsKICAgICAgY2xhc3MgTGluZU51bWJlclJlYWRlcjsKICAgICAgY2xhc3MgTWVtYmVy
Q29tcGFyYXRvcjsKICAgICAgY2xhc3MgTm90QWN0aXZlRXhjZXB0aW9uOwogICAgICBjbGFzcyBO
b3RTZXJpYWxpemFibGVFeGNlcHRpb247CiAgICAgIGNsYXNzIE9iamVjdElucHV0OwogICAgICBj
bGFzcyBPYmplY3RJbnB1dFN0cmVhbTsKICAgICAgY2xhc3MgT2JqZWN0SW5wdXRTdHJlYW0kR2V0
RmllbGQ7CiAgICAgIGNsYXNzIE9iamVjdElucHV0VmFsaWRhdGlvbjsKICAgICAgY2xhc3MgT2Jq
ZWN0T3V0cHV0OwogICAgICBjbGFzcyBPYmplY3RPdXRwdXRTdHJlYW07CiAgICAgIGNsYXNzIE9i
amVjdE91dHB1dFN0cmVhbSRQdXRGaWVsZDsKICAgICAgY2xhc3MgT2JqZWN0U3RyZWFtQ2xhc3M7
CiAgICAgIGNsYXNzIE9iamVjdFN0cmVhbUNvbnN0YW50czsKICAgICAgY2xhc3MgT2JqZWN0U3Ry
ZWFtRXhjZXB0aW9uOwogICAgICBjbGFzcyBPYmplY3RTdHJlYW1GaWVsZDsKICAgICAgY2xhc3Mg
T3B0aW9uYWxEYXRhRXhjZXB0aW9uOwogICAgICBjbGFzcyBPdXRwdXRTdHJlYW07CiAgICAgIGNs
YXNzIE91dHB1dFN0cmVhbVdyaXRlcjsKICAgICAgY2xhc3MgUGlwZWRJbnB1dFN0cmVhbTsKICAg
ICAgY2xhc3MgUGlwZWRPdXRwdXRTdHJlYW07CiAgICAgIGNsYXNzIFBpcGVkUmVhZGVyOwogICAg
ICBjbGFzcyBQaXBlZFdyaXRlcjsKICAgICAgY2xhc3MgUHJpbnRTdHJlYW07CiAgICAgIGNsYXNz
IFByaW50V3JpdGVyOwogICAgICBjbGFzcyBQdXNoYmFja0lucHV0U3RyZWFtOwogICAgICBjbGFz
cyBQdXNoYmFja1JlYWRlcjsKICAgICAgY2xhc3MgUmFuZG9tQWNjZXNzRmlsZTsKICAgICAgY2xh
c3MgUmVhZGVyOwogICAgICBjbGFzcyBTZXF1ZW5jZUlucHV0U3RyZWFtOwogICAgICBjbGFzcyBT
ZXJpYWxpemFibGU7CiAgICAgIGNsYXNzIFNlcmlhbGl6YWJsZVBlcm1pc3Npb247CiAgICAgIGNs
YXNzIFN0cmVhbUNvcnJ1cHRlZEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgU3RyZWFtVG9rZW5pemVy
OwogICAgICBjbGFzcyBTdHJpbmdCdWZmZXJJbnB1dFN0cmVhbTsKICAgICAgY2xhc3MgU3RyaW5n
UmVhZGVyOwogICAgICBjbGFzcyBTdHJpbmdXcml0ZXI7CiAgICAgIGNsYXNzIFN5bmNGYWlsZWRF
eGNlcHRpb247CiAgICAgIGNsYXNzIFVURkRhdGFGb3JtYXRFeGNlcHRpb247CiAgICAgIGNsYXNz
IFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CiAgICAgIGNsYXNzIFZhbGlkYXRvckFuZFBy
aW9yaXR5OwogICAgICBjbGFzcyBXcml0ZUFib3J0ZWRFeGNlcHRpb247CiAgICAgIGNsYXNzIFdy
aXRlcjsKICAgIH07CgogICAgbmFtZXNwYWNlIGxhbmcKICAgIHsKICAgICAgY2xhc3MgQWJzdHJh
Y3RNZXRob2RFcnJvcjsKICAgICAgY2xhc3MgQXJpdGhtZXRpY0V4Y2VwdGlvbjsKICAgICAgY2xh
c3MgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uOwogICAgICBjbGFzcyBBcnJheVN0b3Jl
RXhjZXB0aW9uOwogICAgICBjbGFzcyBCb29sZWFuOwogICAgICBjbGFzcyBCeXRlOwogICAgICBj
bGFzcyBDUGx1c1BsdXNEZW1hbmdsZXI7CiAgICAgIGNsYXNzIENoYXJTZXF1ZW5jZTsKICAgICAg
Y2xhc3MgQ2hhcmFjdGVyOwogICAgICBjbGFzcyBDaGFyYWN0ZXIkU3Vic2V0OwogICAgICBjbGFz
cyBDaGFyYWN0ZXIkVW5pY29kZUJsb2NrOwogICAgICBjbGFzcyBDbGFzczsKICAgICAgY2xhc3Mg
Q2xhc3NDYXN0RXhjZXB0aW9uOwogICAgICBjbGFzcyBDbGFzc0NpcmN1bGFyaXR5RXJyb3I7CiAg
ICAgIGNsYXNzIENsYXNzRm9ybWF0RXJyb3I7CiAgICAgIGNsYXNzIENsYXNzTG9hZGVyOwogICAg
ICBjbGFzcyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uOwogICAgICBjbGFzcyBDbG9uZU5vdFN1cHBv
cnRlZEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgQ2xvbmVhYmxlOwogICAgICBjbGFzcyBDb21wYXJh
YmxlOwogICAgICBjbGFzcyBDb21waWxlcjsKICAgICAgY2xhc3MgQ29uY3JldGVQcm9jZXNzOwog
ICAgICBjbGFzcyBEb3VibGU7CiAgICAgIGNsYXNzIEVycm9yOwogICAgICBjbGFzcyBFeGNlcHRp
b247CiAgICAgIGNsYXNzIEV4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvcjsKICAgICAgY2xhc3Mg
RmxvYXQ7CiAgICAgIGNsYXNzIElsbGVnYWxBY2Nlc3NFcnJvcjsKICAgICAgY2xhc3MgSWxsZWdh
bEFjY2Vzc0V4Y2VwdGlvbjsKICAgICAgY2xhc3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOwog
ICAgICBjbGFzcyBJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9uOwogICAgICBjbGFzcyBJbGxl
Z2FsU3RhdGVFeGNlcHRpb247CiAgICAgIGNsYXNzIElsbGVnYWxUaHJlYWRTdGF0ZUV4Y2VwdGlv
bjsKICAgICAgY2xhc3MgSW5jb21wYXRpYmxlQ2xhc3NDaGFuZ2VFcnJvcjsKICAgICAgY2xhc3Mg
SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbjsKICAgICAgY2xhc3MgSW5oZXJpdGFibGVUaHJlYWRM
b2NhbDsKICAgICAgY2xhc3MgSW5zdGFudGlhdGlvbkVycm9yOwogICAgICBjbGFzcyBJbnN0YW50
aWF0aW9uRXhjZXB0aW9uOwogICAgICBjbGFzcyBJbnRlZ2VyOwogICAgICBjbGFzcyBJbnRlcm5h
bEVycm9yOwogICAgICBjbGFzcyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgTGlu
a2FnZUVycm9yOwogICAgICBjbGFzcyBMb25nOwogICAgICBjbGFzcyBNYXRoOwogICAgICBjbGFz
cyBOZWdhdGl2ZUFycmF5U2l6ZUV4Y2VwdGlvbjsKICAgICAgY2xhc3MgTm9DbGFzc0RlZkZvdW5k
RXJyb3I7CiAgICAgIGNsYXNzIE5vU3VjaEZpZWxkRXJyb3I7CiAgICAgIGNsYXNzIE5vU3VjaEZp
ZWxkRXhjZXB0aW9uOwogICAgICBjbGFzcyBOb1N1Y2hNZXRob2RFcnJvcjsKICAgICAgY2xhc3Mg
Tm9TdWNoTWV0aG9kRXhjZXB0aW9uOwogICAgICBjbGFzcyBOdWxsUG9pbnRlckV4Y2VwdGlvbjsK
ICAgICAgY2xhc3MgTnVtYmVyOwogICAgICBjbGFzcyBOdW1iZXJGb3JtYXRFeGNlcHRpb247CiAg
ICAgIGNsYXNzIE9iamVjdDsKICAgICAgY2xhc3MgT3V0T2ZNZW1vcnlFcnJvcjsKICAgICAgY2xh
c3MgUGFja2FnZTsKICAgICAgY2xhc3MgUHJvY2VzczsKICAgICAgY2xhc3MgUnVubmFibGU7CiAg
ICAgIGNsYXNzIFJ1bnRpbWU7CiAgICAgIGNsYXNzIFJ1bnRpbWVFeGNlcHRpb247CiAgICAgIGNs
YXNzIFJ1bnRpbWVQZXJtaXNzaW9uOwogICAgICBjbGFzcyBTZWN1cml0eUNvbnRleHQ7CiAgICAg
IGNsYXNzIFNlY3VyaXR5RXhjZXB0aW9uOwogICAgICBjbGFzcyBTZWN1cml0eU1hbmFnZXI7CiAg
ICAgIGNsYXNzIFNob3J0OwogICAgICBjbGFzcyBTdGFja092ZXJmbG93RXJyb3I7CiAgICAgIGNs
YXNzIFN0cmljdE1hdGg7CiAgICAgIGNsYXNzIFN0cmluZzsKICAgICAgY2xhc3MgU3RyaW5nJENh
c2VJbnNlbnNpdGl2ZUNvbXBhcmF0b3I7CiAgICAgIGNsYXNzIFN0cmluZ0J1ZmZlcjsKICAgICAg
Y2xhc3MgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbjsKICAgICAgY2xhc3MgU3lzdGVt
OwogICAgICBjbGFzcyBUaHJlYWQ7CiAgICAgIGNsYXNzIFRocmVhZERlYXRoOwogICAgICBjbGFz
cyBUaHJlYWRHcm91cDsKICAgICAgY2xhc3MgVGhyZWFkTG9jYWw7CiAgICAgIGNsYXNzIFRocmVh
ZExvY2FsJFZhbHVlOwogICAgICBjbGFzcyBUaHJvd2FibGU7CiAgICAgIGNsYXNzIFVua25vd25F
cnJvcjsKICAgICAgY2xhc3MgVW5zYXRpc2ZpZWRMaW5rRXJyb3I7CiAgICAgIGNsYXNzIFVuc3Vw
cG9ydGVkQ2xhc3NWZXJzaW9uRXJyb3I7CiAgICAgIGNsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9u
RXhjZXB0aW9uOwogICAgICBjbGFzcyBWTUNsYXNzTG9hZGVyOwogICAgICBjbGFzcyBWTVNlY3Vy
aXR5TWFuYWdlcjsKICAgICAgY2xhc3MgVmVyaWZ5RXJyb3I7CiAgICAgIGNsYXNzIFZpcnR1YWxN
YWNoaW5lRXJyb3I7CiAgICAgIGNsYXNzIFZvaWQ7CiAgICAgIG5hbWVzcGFjZSByZWYKICAgICAg
ewogICAgICAgIGNsYXNzIFBoYW50b21SZWZlcmVuY2U7CiAgICAgICAgY2xhc3MgUmVmZXJlbmNl
OwogICAgICAgIGNsYXNzIFJlZmVyZW5jZVF1ZXVlOwogICAgICAgIGNsYXNzIFNvZnRSZWZlcmVu
Y2U7CiAgICAgICAgY2xhc3MgV2Vha1JlZmVyZW5jZTsKICAgICAgfTsKCiAgICAgIG5hbWVzcGFj
ZSByZWZsZWN0CiAgICAgIHsKICAgICAgICBjbGFzcyBBY2Nlc3NpYmxlT2JqZWN0OwogICAgICAg
IGNsYXNzIEFycmF5OwogICAgICAgIGNsYXNzIENvbnN0cnVjdG9yOwogICAgICAgIGNsYXNzIEZp
ZWxkOwogICAgICAgIGNsYXNzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CiAgICAgICAgY2xh
c3MgTWVtYmVyOwogICAgICAgIGNsYXNzIE1ldGhvZDsKICAgICAgICBjbGFzcyBNb2RpZmllcjsK
ICAgICAgICBjbGFzcyBSZWZsZWN0UGVybWlzc2lvbjsKICAgICAgfTsKICAgIH07CgogICAgbmFt
ZXNwYWNlIHV0aWwKICAgIHsKICAgICAgY2xhc3MgQWJzdHJhY3RDb2xsZWN0aW9uOwogICAgICBj
bGFzcyBBYnN0cmFjdExpc3Q7CiAgICAgIGNsYXNzIEFic3RyYWN0TGlzdCRBYnN0cmFjdExpc3RJ
dHI7CiAgICAgIGNsYXNzIEFic3RyYWN0TWFwOwogICAgICBjbGFzcyBBYnN0cmFjdFNlcXVlbnRp
YWxMaXN0OwogICAgICBjbGFzcyBBYnN0cmFjdFNldDsKICAgICAgY2xhc3MgQXJyYXlMaXN0Owog
ICAgICBjbGFzcyBBcnJheXM7CiAgICAgIGNsYXNzIEFycmF5cyRMaXN0SW1wbDsKICAgICAgY2xh
c3MgQmFzaWNNYXBFbnRyeTsKICAgICAgY2xhc3MgQml0U2V0OwogICAgICBjbGFzcyBDYWxlbmRh
cjsKICAgICAgY2xhc3MgQ29sbGVjdGlvbjsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnM7CiAgICAg
IGNsYXNzIENvbGxlY3Rpb25zJFJldmVyc2VDb21wYXJhdG9yOwogICAgICBjbGFzcyBDb2xsZWN0
aW9ucyRTeW5jaHJvbml6ZWRDb2xsZWN0aW9uOwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRTeW5j
aHJvbml6ZWRJdGVyYXRvcjsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkU3luY2hyb25pemVkTGlz
dDsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkU3luY2hyb25pemVkTGlzdEl0ZXJhdG9yOwogICAg
ICBjbGFzcyBDb2xsZWN0aW9ucyRTeW5jaHJvbml6ZWRNYXA7CiAgICAgIGNsYXNzIENvbGxlY3Rp
b25zJFN5bmNocm9uaXplZFNldDsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkU3luY2hyb25pemVk
U29ydGVkTWFwOwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRTeW5jaHJvbml6ZWRTb3J0ZWRTZXQ7
CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUNvbGxlY3Rpb247CiAgICAgIGNs
YXNzIENvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUl0ZXJhdG9yOwogICAgICBjbGFzcyBDb2xsZWN0
aW9ucyRVbm1vZGlmaWFibGVMaXN0OwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRVbm1vZGlmaWFi
bGVMaXN0SXRlcmF0b3I7CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFVubW9kaWZpYWJsZU1hcDsK
ICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlU2V0OwogICAgICBjbGFzcyBDb2xs
ZWN0aW9ucyRVbm1vZGlmaWFibGVTb3J0ZWRNYXA7CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFVu
bW9kaWZpYWJsZVNvcnRlZFNldDsKICAgICAgY2xhc3MgQ29tcGFyYXRvcjsKICAgICAgY2xhc3Mg
Q29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbjsKICAgICAgY2xhc3MgRGF0ZTsKICAgICAg
Y2xhc3MgRGljdGlvbmFyeTsKICAgICAgY2xhc3MgRW1wdHlTdGFja0V4Y2VwdGlvbjsKICAgICAg
Y2xhc3MgRW51bWVyYXRpb247CiAgICAgIGNsYXNzIEV2ZW50TGlzdGVuZXI7CiAgICAgIGNsYXNz
IEV2ZW50T2JqZWN0OwogICAgICBjbGFzcyBHcmVnb3JpYW5DYWxlbmRhcjsKICAgICAgY2xhc3Mg
SGFzaE1hcDsKICAgICAgY2xhc3MgSGFzaE1hcCRIYXNoRW50cnk7CiAgICAgIGNsYXNzIEhhc2hN
YXAkSGFzaEl0ZXJhdG9yOwogICAgICBjbGFzcyBIYXNoU2V0OwogICAgICBjbGFzcyBIYXNodGFi
bGU7CiAgICAgIGNsYXNzIEhhc2h0YWJsZSRFbnVtZXJhdG9yOwogICAgICBjbGFzcyBIYXNodGFi
bGUkSGFzaEVudHJ5OwogICAgICBjbGFzcyBIYXNodGFibGUkSGFzaEl0ZXJhdG9yOwogICAgICBj
bGFzcyBJZGVudGl0eUhhc2hNYXA7CiAgICAgIGNsYXNzIElkZW50aXR5SGFzaE1hcCRJZGVudGl0
eUl0ZXJhdG9yOwogICAgICBjbGFzcyBJdGVyYXRvcjsKICAgICAgY2xhc3MgTGlua2VkSGFzaE1h
cDsKICAgICAgY2xhc3MgTGlua2VkSGFzaE1hcCRMaW5rZWRIYXNoRW50cnk7CiAgICAgIGNsYXNz
IExpbmtlZExpc3Q7CiAgICAgIGNsYXNzIExpbmtlZExpc3QkRW50cnk7CiAgICAgIGNsYXNzIExp
bmtlZExpc3QkTGlua2VkTGlzdEl0cjsKICAgICAgY2xhc3MgTGlzdDsKICAgICAgY2xhc3MgTGlz
dEl0ZXJhdG9yOwogICAgICBjbGFzcyBMaXN0UmVzb3VyY2VCdW5kbGU7CiAgICAgIGNsYXNzIExv
Y2FsZTsKICAgICAgY2xhc3MgTWFwOwogICAgICBjbGFzcyBNYXAkRW50cnk7CiAgICAgIGNsYXNz
IE1hcCRNYXA7CiAgICAgIGNsYXNzIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKICAgICAgY2xh
c3MgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgT2JzZXJ2YWJsZTsKICAgICAg
Y2xhc3MgT2JzZXJ2ZXI7CiAgICAgIGNsYXNzIFByb3BlcnRpZXM7CiAgICAgIGNsYXNzIFByb3Bl
cnR5UGVybWlzc2lvbjsKICAgICAgY2xhc3MgUHJvcGVydHlSZXNvdXJjZUJ1bmRsZTsKICAgICAg
Y2xhc3MgUmFuZG9tOwogICAgICBjbGFzcyBSYW5kb21BY2Nlc3M7CiAgICAgIGNsYXNzIFJlc291
cmNlQnVuZGxlOwogICAgICBjbGFzcyBTZXQ7CiAgICAgIGNsYXNzIFNpbXBsZVRpbWVab25lOwog
ICAgICBjbGFzcyBTb3J0ZWRNYXA7CiAgICAgIGNsYXNzIFNvcnRlZFNldDsKICAgICAgY2xhc3Mg
U3RhY2s7CiAgICAgIGNsYXNzIFN0cmluZ1Rva2VuaXplcjsKICAgICAgY2xhc3MgU3ViTGlzdDsK
ICAgICAgY2xhc3MgVGltZVpvbmU7CiAgICAgIGNsYXNzIFRpbWVyOwogICAgICBjbGFzcyBUaW1l
ciRTY2hlZHVsZXI7CiAgICAgIGNsYXNzIFRpbWVyJFRhc2tRdWV1ZTsKICAgICAgY2xhc3MgVGlt
ZXJUYXNrOwogICAgICBjbGFzcyBUb29NYW55TGlzdGVuZXJzRXhjZXB0aW9uOwogICAgICBjbGFz
cyBUcmVlTWFwOwogICAgICBjbGFzcyBUcmVlTWFwJE5vZGU7CiAgICAgIGNsYXNzIFRyZWVNYXAk
U3ViTWFwOwogICAgICBjbGFzcyBUcmVlTWFwJFRyZWVJdGVyYXRvcjsKICAgICAgY2xhc3MgVHJl
ZU1hcCRWZXJpZnlSZXN1bHQ7CiAgICAgIGNsYXNzIFRyZWVTZXQ7CiAgICAgIGNsYXNzIFZlY3Rv
cjsKICAgICAgY2xhc3MgV2Vha0hhc2hNYXA7CiAgICAgIGNsYXNzIFdlYWtIYXNoTWFwJEVudHJ5
OwogICAgICBjbGFzcyBXZWFrSGFzaE1hcCRXZWFrQnVja2V0OwogICAgICBjbGFzcyBXZWFrSGFz
aE1hcCRXZWFrRW50cnlTZXQ7CiAgICAgIG5hbWVzcGFjZSBqYXIKICAgICAgewogICAgICAgIGNs
YXNzIEF0dHJpYnV0ZXM7CiAgICAgICAgY2xhc3MgQXR0cmlidXRlcyROYW1lOwogICAgICAgIGNs
YXNzIEphckVudHJ5OwogICAgICAgIGNsYXNzIEphckV4Y2VwdGlvbjsKICAgICAgICBjbGFzcyBK
YXJGaWxlOwogICAgICAgIGNsYXNzIEphckZpbGUkSmFyRW51bWVyYXRpb247CiAgICAgICAgY2xh
c3MgSmFySW5wdXRTdHJlYW07CiAgICAgICAgY2xhc3MgSmFyT3V0cHV0U3RyZWFtOwogICAgICAg
IGNsYXNzIE1hbmlmZXN0OwogICAgICB9OwoKICAgICAgbmFtZXNwYWNlIHppcAogICAgICB7CiAg
ICAgICAgY2xhc3MgQWRsZXIzMjsKICAgICAgICBjbGFzcyBDUkMzMjsKICAgICAgICBjbGFzcyBD
aGVja2VkSW5wdXRTdHJlYW07CiAgICAgICAgY2xhc3MgQ2hlY2tlZE91dHB1dFN0cmVhbTsKICAg
ICAgICBjbGFzcyBDaGVja3N1bTsKICAgICAgICBjbGFzcyBEYXRhRm9ybWF0RXhjZXB0aW9uOwog
ICAgICAgIGNsYXNzIERlZmxhdGVyOwogICAgICAgIGNsYXNzIERlZmxhdGVyT3V0cHV0U3RyZWFt
OwogICAgICAgIGNsYXNzIEdaSVBJbnB1dFN0cmVhbTsKICAgICAgICBjbGFzcyBHWklQT3V0cHV0
U3RyZWFtOwogICAgICAgIGNsYXNzIEluZmxhdGVyOwogICAgICAgIGNsYXNzIEluZmxhdGVySW5w
dXRTdHJlYW07CiAgICAgICAgY2xhc3MgWmlwQ29uc3RhbnRzOwogICAgICAgIGNsYXNzIFppcEVu
dHJ5OwogICAgICAgIGNsYXNzIFppcEVudW1lcmF0aW9uOwogICAgICAgIGNsYXNzIFppcEV4Y2Vw
dGlvbjsKICAgICAgICBjbGFzcyBaaXBGaWxlOwogICAgICAgIGNsYXNzIFppcElucHV0U3RyZWFt
OwogICAgICAgIGNsYXNzIFppcE91dHB1dFN0cmVhbTsKICAgICAgfTsKICAgIH07CiAgfTsKfTsK
CnR5cGVkZWYgc3RydWN0IGphdmE6Omxhbmc6Ok9iamVjdCogam9iamVjdDsKdHlwZWRlZiBjbGFz
cyBqYXZhOjpsYW5nOjpDbGFzcyogamNsYXNzOwp0eXBlZGVmIGNsYXNzIGphdmE6Omxhbmc6OlRo
cm93YWJsZSoganRocm93YWJsZTsKdHlwZWRlZiBjbGFzcyBqYXZhOjpsYW5nOjpTdHJpbmcqIGpz
dHJpbmc7CnN0cnVjdCBfSnZfSk5JRW52OwoKdHlwZWRlZiBzdHJ1Y3QgX0p2X0ZpZWxkICpqZmll
bGRJRDsKdHlwZWRlZiBzdHJ1Y3QgX0p2X01ldGhvZCAqam1ldGhvZElEOwoKZXh0ZXJuICJDIiBq
b2JqZWN0IF9Kdl9BbGxvY09iamVjdCAoamNsYXNzLCBqaW50KSBfX2F0dHJpYnV0ZV9fKChfX21h
bGxvY19fKSk7CmV4dGVybiAiQyIgam9iamVjdCBfSnZfQWxsb2NPYmplY3ROb0ZpbmFsaXplciAo
amNsYXNzLCBqaW50KSBfX2F0dHJpYnV0ZV9fKChfX21hbGxvY19fKSk7CmV4dGVybiAiQyIgam9i
amVjdCBfSnZfQWxsb2NPYmplY3ROb0luaXROb0ZpbmFsaXplciAoamNsYXNzLCBqaW50KSBfX2F0
dHJpYnV0ZV9fKChfX21hbGxvY19fKSk7CgogIGV4dGVybiAiQyIgam9iamVjdCBfSnZfQWxsb2NQ
dHJGcmVlT2JqZWN0IChqY2xhc3MsIGppbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2F0dHJpYnV0ZV9fKChfX21hbGxvY19fKSk7CgoKCgoKCgpleHRlcm4gIkMiIGpib29sZWFuIF9K
dl9Jc0luc3RhbmNlT2Yoam9iamVjdCwgamNsYXNzKTsKZXh0ZXJuICJDIiBqc3RyaW5nIF9Kdl9B
bGxvY1N0cmluZyhqc2l6ZSkgX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykpOwpleHRlcm4gIkMi
IGpzdHJpbmcgX0p2X05ld1N0cmluZyAoY29uc3QgamNoYXIqLCBqc2l6ZSkKICBfX2F0dHJpYnV0
ZV9fKChfX21hbGxvY19fKSk7CmV4dGVybiBqaW50IF9Kdl9Gb3JtYXRJbnQgKGpjaGFyKiBidWZl
bmQsIGppbnQgbnVtKTsKZXh0ZXJuICJDIiBqY2hhciogX0p2X0dldFN0cmluZ0NoYXJzIChqc3Ry
aW5nIHN0cik7CmV4dGVybiAiQyIgdm9pZCBfSnZfTW9uaXRvckVudGVyIChqb2JqZWN0KTsKZXh0
ZXJuICJDIiB2b2lkIF9Kdl9Nb25pdG9yRXhpdCAoam9iamVjdCk7CmV4dGVybiAiQyIganN0cmlu
ZyBfSnZfTmV3U3RyaW5nTGF0aW4xKGNvbnN0IGNoYXIqLCBqc2l6ZSkKICBfX2F0dHJpYnV0ZV9f
KChfX21hbGxvY19fKSk7CmV4dGVybiAiQyIganNpemUgX0p2X0dldFN0cmluZ1VURkxlbmd0aCAo
anN0cmluZyk7CmV4dGVybiAiQyIganNpemUgX0p2X0dldFN0cmluZ1VURlJlZ2lvbiAoanN0cmlu
ZywganNpemUsIGpzaXplLCBjaGFyICopOwoKZXh0ZXJuIGppbnQgX0p2X0NyZWF0ZUphdmFWTSAo
dm9pZCogKTsKCnZvaWQKX0p2X1RocmVhZFJ1biAoamF2YTo6bGFuZzo6VGhyZWFkKiB0aHJlYWQp
OwpqaW50Cl9Kdl9BdHRhY2hDdXJyZW50VGhyZWFkKGphdmE6Omxhbmc6OlRocmVhZCogdGhyZWFk
KTsKZXh0ZXJuICJDIiBqYXZhOjpsYW5nOjpUaHJlYWQqCl9Kdl9BdHRhY2hDdXJyZW50VGhyZWFk
KGpzdHJpbmcgbmFtZSwgamF2YTo6bGFuZzo6VGhyZWFkR3JvdXAqIGdyb3VwKTsKZXh0ZXJuICJD
IiBqaW50IF9Kdl9EZXRhY2hDdXJyZW50VGhyZWFkICh2b2lkKTsKCmV4dGVybiAiQyIgdm9pZCBf
SnZfVGhyb3cgKGp0aHJvd2FibGUpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKZXh0
ZXJuICJDIiB2b2lkKiBfSnZfTWFsbG9jIChqc2l6ZSkgX19hdHRyaWJ1dGVfXygoX19tYWxsb2Nf
XykpOwpleHRlcm4gIkMiIHZvaWQqIF9Kdl9SZWFsbG9jICh2b2lkICosIGpzaXplKTsKZXh0ZXJu
ICJDIiB2b2lkIF9Kdl9GcmVlICh2b2lkKik7CmV4dGVybiB2b2lkICgqX0p2X1JlZ2lzdGVyQ2xh
c3NIb29rKSAoamNsYXNzIGNsKTsKZXh0ZXJuICJDIiB2b2lkIF9Kdl9SZWdpc3RlckNsYXNzSG9v
a0RlZmF1bHQgKGpjbGFzcyk7Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9Kdl91c2hvcnQgX19h
dHRyaWJ1dGVfXygoX19tb2RlX18oX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfSnZf
dWludCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CgpzdHJ1Y3QgX0p2X1V0ZjhD
b25zdAp7CiAgX0p2X3VzaG9ydCBoYXNoOwogIF9Kdl91c2hvcnQgbGVuZ3RoOwogIGNoYXIgZGF0
YVsxXTsKfTsKIyAyMSAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW5jbHVkZS9qdm0uaCIgMgoKIyAx
ICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNsdWRlL2phdmEtYXNzZXJ0LmgiIDEKIyAxNiAiLi4v
Li4vLi4vZ2NjL2xpYmphdmEvaW5jbHVkZS9qYXZhLWFzc2VydC5oIgp2b2lkIF9Kdl9BYm9ydCAo
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKQogIF9fYXR0cmli
dXRlX18gKChfX25vcmV0dXJuX18pKTsKIyAyMyAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW5jbHVk
ZS9qdm0uaCIgMgojIDEgImluY2x1ZGUvamF2YS10aHJlYWRzLmgiIDEKIyAyMCAiaW5jbHVkZS9q
YXZhLXRocmVhZHMuaCIKIyAxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAxIDMKIyAxOCAiL3Vz
ci9pbmNsdWRlL3B0aHJlYWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMK
IyAyNTAgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9j
ZGVmcy5oIiAxIDMKIyAyNTEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNzggIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAx
IDMKIyAyNzkgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAxOSAiL3Vzci9pbmNsdWRl
L3B0aHJlYWQuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAxIDMKIyAyNiAiL3Vz
ci9pbmNsdWRlL3NjaGVkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMK
IyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEgIi94MS9lZ2NzL2J1aWxkL2dj
Yy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDEgIi94MS9lZ2NzL2J1aWxkL2djYy9pbmNsdWRl
L3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyAzMCAiL3Vzci9pbmNs
dWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0
eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191
X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBl
ZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFy
IF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJf
dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRl
ZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1
bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3Fh
ZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9fdWlk
X3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CnR5
cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlwZWRl
ZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVmIGlu
dCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19ybGlt
X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsK
CnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlw
ZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25n
IGludCBfX3RpbWVfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcg
aW50IF9fY2xvY2tfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fZmRfbWFzazsKIyAx
MDAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAg
ICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoK
CgoKICB9IF9fZmRfc2V0OwoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90
Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNi
bGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191
X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoK
dHlwZWRlZiBfX3VfbG9uZyBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7
CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBp
bnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRz
L3B0aHJlYWR0eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMg
NjggIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7
CiAgICBpbnQgc2NoZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRo
cmVhZHR5cGVzLmgiIDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQg
X19zdGF0dXM7CiAgaW50IF9fc3BpbmxvY2s7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFk
X2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGlu
dCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3Bh
cmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAg
c2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFj
a2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVm
IHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFk
X2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7
CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQg
aW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2
ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9f
bV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211
dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9t
dXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIHN0
cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndf
bG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwog
IF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndf
d3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRo
cmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwogIGlu
dCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNTEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIg
MwojIDI3ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAxIDMKIyA4MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7
CiAgICBsb25nIGludCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgMzAgIi91
c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgi
IDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBzY2hlZF9wYXJh
bQogIHsKICAgIGludCBzY2hlZF9wcmlvcml0eTsKICB9OwoKZXh0ZXJuICJDIiB7CgoKCmV4dGVy
biBpbnQgY2xvbmUgKGludCAoKl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hpbGRfc3Rh
Y2ssIGludCBfX2ZsYWdzLCB2b2lkICpfX2FyZykgdGhyb3cgKCk7CgoKCn0KIyAzMyAiL3Vzci9p
bmNsdWRlL3NjaGVkLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3NjaGVkX3Nl
dHBhcmFtIChfX3BpZF90IF9fcGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJh
bSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjaGVkX3NldHBhcmFtIChfX3BpZF90IF9fcGlkLCBf
X2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgX19zY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpf
X3BhcmFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3Bp
ZCwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9f
c2NoZWRfc2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksIF9fY29uc3Qg
c3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NoZWRf
c2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksIF9fY29uc3Qgc3RydWN0
IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3NjaGVkX2dl
dHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgc2NoZWRfZ2V0
c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fc2NoZWRf
eWllbGQgKHZvaWQpIHRocm93ICgpOwpleHRlcm4gaW50IHNjaGVkX3lpZWxkICh2b2lkKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IF9fc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3Jp
dGhtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19h
bGdvcml0aG0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19zY2hlZF9nZXRfcHJpb3JpdHlfbWlu
IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0
eV9taW4gKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3NjaGVkX3Jy
X2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93
ICgpOwpleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3Ry
dWN0IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwoKfQojIDIxICIvdXNyL2luY2x1ZGUvcHRocmVh
ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL3gxL2VnY3MvYnVpbGQvZ2NjL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAyIDMKIyA2MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fY2xvY2tfdCBjbG9j
a190OwojIDcxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX190aW1lX3QgdGltZV90
OwojIDk1ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsK
ICBpbnQgdG1fbWluOwogIGludCB0bV9ob3VyOwogIGludCB0bV9tZGF5OwogIGludCB0bV9tb247
CiAgaW50IHRtX3llYXI7CiAgaW50IHRtX3dkYXk7CiAgaW50IHRtX3lkYXk7CiAgaW50IHRtX2lz
ZHN0OwoKCiAgbG9uZyBpbnQgdG1fZ210b2ZmOwogIF9fY29uc3QgY2hhciAqdG1fem9uZTsKCgoK
Cn07CgoKCgpleHRlcm4gY2xvY2tfdCBjbG9jayAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRp
bWVfdCB0aW1lICh0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZGlm
ZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1lMCkgdGhyb3cgKCkKICAgICBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0
bSAqX190cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJmdGltZSAoY2hhciAqX19y
ZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBjaGFyICpzdHJwdGltZSAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hh
ciAqX19mbXQsIHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBzdHJ1Y3Qg
dG0gKmdtdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgpleHRlcm4g
c3RydWN0IHRtICpsb2NhbHRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKl9fZ210aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3Ry
aWN0IF9fdGltZXIsIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCmV4dGVy
biBzdHJ1Y3QgdG0gKmdtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVy
LCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gc3RydWN0
IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwgc3Ry
dWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICphc2N0
aW1lIChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0
aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFy
ICphc2N0aW1lX3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsIGNoYXIgKl9f
cmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25z
dCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGln
aHQ7CmV4dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsy
XTsKCgoKZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRh
eWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAo
X19jb25zdCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMgMjI4ICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAzCmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoK
CmV4dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IG5h
bm9zbGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsIHN0cnVj
dCB0aW1lc3BlYyAqX19yZW1haW5pbmcpIHRocm93ICgpOwojIDI1NyAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdl
dGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwojIDI3MiAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3RyaW5nLCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX19yZXNidWZwKSB0aHJvdyAoKTsK
CgoKCn0KIyAyMiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1
ZGUvc2lnbmFsLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuICJD
IiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNs
dWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBl
ZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBz
aXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzQgIi91c3Iv
aW5jbHVkZS9zaWduYWwuaCIgMiAzCiMgNDkgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp0eXBl
ZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CiMgMzYyICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMK
fQojIDI1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoK
CmV4dGVybiAiQyIgewojIDQ5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmVudW0KewogIFBU
SFJFQURfQ1JFQVRFX0pPSU5BQkxFLAoKICBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRAoKfTsKCmVu
dW0KewogIFBUSFJFQURfSU5IRVJJVF9TQ0hFRCwKCiAgUFRIUkVBRF9FWFBMSUNJVF9TQ0hFRAoK
fTsKCmVudW0KewogIFBUSFJFQURfU0NPUEVfU1lTVEVNLAoKICBQVEhSRUFEX1NDT1BFX1BST0NF
U1MKCn07CgplbnVtCnsKICBQVEhSRUFEX01VVEVYX0ZBU1RfTlAsCiAgUFRIUkVBRF9NVVRFWF9S
RUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QCgogICwKICBQVEhSRUFE
X01VVEVYX05PUk1BTCA9IFBUSFJFQURfTVVURVhfRkFTVF9OUCwKICBQVEhSRUFEX01VVEVYX1JF
Q1VSU0lWRSA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJS
T1JDSEVDSyA9IFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0RF
RkFVTFQgPSBQVEhSRUFEX01VVEVYX05PUk1BTAoKfTsKCmVudW0KewogIFBUSFJFQURfUFJPQ0VT
U19QUklWQVRFLAoKICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoKCmVudW0KewogIFBUSFJF
QURfUldMT0NLX1BSRUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRF
Ul9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJFQ1VSU0lWRV9OUCwKICBQ
VEhSRUFEX1JXTE9DS19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9O
UAp9OwoKCgoKCgpzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3Jv
dXRpbmUpICh2b2lkICopOwogIHZvaWQgKl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3Ry
dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJF
QURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAg
UFRIUkVBRF9DQU5DRUxfREVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoK
fTsKIyAxNDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2Ny
ZWF0ZSAocHRocmVhZF90ICpfX3RocmVhZCwgX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRy
LCB2b2lkICooKl9fc3RhcnRfcm91dGluZSkgKHZvaWQgKiksIHZvaWQgKl9fYXJnKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gcHRocmVhZF90IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3Qg
X190aHJlYWQyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9f
cmV0dmFsKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRl
cm4gaW50IHB0aHJlYWRfam9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1
cm4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBf
X3RoKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0aHJl
YWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rl
c3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX3NldGRldGFjaHN0YXRlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19k
ZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFj
aHN0YXRlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCAqX19kZXRhY2hzdGF0
ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0gKHB0
aHJlYWRfYXR0cl90ICpfX2F0dHIsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFt
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19j
b25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0p
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAocHRo
cmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9f
YXR0ciwgaW50ICpfX3BvbGljeSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldGluaGVyaXRzY2hlZCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9faW5oZXJpdCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19j
b25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgKl9faW5oZXJpdCkgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRy
LCBpbnQgX19zY29wZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2Nv
cGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50ICpfX3Njb3BlKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6ZSAocHRocmVhZF9hdHRy
X3QgKl9fYXR0ciwgc2l6ZV90IF9fZ3VhcmRzaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBw
dGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs
IHNpemVfdCAqX19ndWFyZHNpemUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFk
X2F0dHJfc2V0c3RhY2thZGRyIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNr
YWRkcikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkciAo
X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICoqX19zdGFja2FkZHIpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9h
dHRyX3QgKl9fYXR0ciwgc2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsIHNpemVfdCAqX19zdGFja3NpemUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJl
YWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9fcG9saWN5
LCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLCBp
bnQgKl9fcG9saWN5LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25jdXJyZW5jeSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5IChpbnQgX19sZXZlbCkgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19t
dXRleCwgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX211dGV4X2F0dHIpIHRocm93ICgp
OwoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRl
eCwgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX211dGV4X2F0dHIpIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3QgKl9f
bXV0ZXgpIHRocm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVh
ZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRl
eF90cnlsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwpleHRlcm4gaW50
IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKl9f
bXV0ZXgpIHRocm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9t
dXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF91
bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHRo
cmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0
cl90ICpfX2F0dHIpIHRocm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQg
KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3B0
aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhy
b3cgKCk7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAocHRocmVhZF9tdXRl
eGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRl
eGF0dHJfc2V0dHlwZSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAocHRocmVhZF9t
dXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBw
dGhyZWFkX211dGV4YXR0cl9nZXR0eXBlIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9f
YXR0ciwgaW50ICpfX2tpbmQpIHRocm93ICgpOwojIDMyMyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQu
aCIgMwpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19jb25k
LCBfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqX19jb25kX2F0dHIpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90
ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAo
cHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9j
b25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQsIHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRl
eCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAocHRo
cmVhZF9jb25kX3QgKl9fY29uZCwgcHRocmVhZF9tdXRleF90ICpfX211dGV4LCBfX2NvbnN0IHN0
cnVjdCB0aW1lc3BlYyAqX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90
ICpfX2F0dHIpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0
IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaywgX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJf
dCAqX19hdHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95
IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy
ZWFkX3J3bG9ja19yZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAq
X19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChw
dGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X3J3bG9ja190cnl3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19y
d2xvY2spIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQg
KHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9yd2xvY2thdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29u
c3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50ICpfX3BzaGFyZWQpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9y
d2xvY2thdHRyX3QgKl9fYXR0ciwgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgcHRocmVhZF9yd2xvY2thdHRyX2dldGtpbmRfbnAgKF9fY29uc3QgcHRocmVhZF9yd2xvY2th
dHRyX3QgKl9fYXR0ciwgaW50ICpfX3ByZWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX3J3bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwg
aW50IF9fcHJlZikgdGhyb3cgKCk7CiMgNDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4
dGVybiBpbnQgX19wdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LCB2b2lk
ICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhy
ZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LCB2b2lkICgqX19kZXN0cl9mdW5j
dGlvbikgKHZvaWQgKikpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0
ZSAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRf
c2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksIF9fY29uc3Qgdm9pZCAqX19wb2ludGVy
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlf
dCBfX2tleSwgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9p
ZCAqX19wdGhyZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsK
ZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRo
cm93ICgpOwojIDQ0NSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IF9fcHRo
cmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsIHZvaWQgKCpfX2luaXRf
cm91dGluZSkgKHZvaWQpKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhy
ZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQp
KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAoaW50
IF9fc3RhdGUsIGludCAqX19vbGRzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9zZXRjYW5jZWx0eXBlIChpbnQgX190eXBlLCBpbnQgKl9fb2xkdHlwZSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90IF9fdGhyZWFkKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCkgdGhyb3cgKCk7CiMgNDgx
ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBf
cHVzaCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwgdm9pZCAoKl9f
cm91dGluZSkgKHZvaWQgKiksIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKIyA0OTEgIi91c3IvaW5j
bHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVj
dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsIGludCBfX2V4ZWN1dGUpIHRocm93
ICgpOwojIDUwMiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVh
ZF9jbGVhbnVwX3B1c2hfZGVmZXIgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19i
dWZmZXIsIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLCB2b2lkICpfX2FyZykgdGhyb3cgKCk7
CiMgNTEzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2Ns
ZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZm
ZXIsIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z
aWd0aHJlYWQuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAzCmV4
dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrIChpbnQgX19ob3csIF9fY29uc3QgX19zaWdzZXRfdCAq
X19uZXdtYXNrLCBfX3NpZ3NldF90ICpfX29sZG1hc2spIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHB0aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkLCBpbnQgX19zaWdubykgdGhyb3cgKCk7
CiMgNTE5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyA1MzQgIi91c3IvaW5jbHVkZS9w
dGhyZWFkLmgiIDMKZXh0ZXJuIGludCBfX3B0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJl
KSAodm9pZCksIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLCB2b2lkICgqX19jaGlsZCkgKHZvaWQp
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJl
KSAodm9pZCksIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLCB2b2lkICgqX19jaGlsZCkgKHZvaWQp
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNf
bnAgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBfX3B0aHJlYWRfaW5pdGlhbGl6ZSAo
dm9pZCkgdGhyb3cgKCk7Cgp9CiMgMjEgImluY2x1ZGUvamF2YS10aHJlYWRzLmgiIDIKCgoKCgoK
dHlwZWRlZiBzdHJ1Y3QgX0p2X1RocmVhZF90CnsKCiAgaW50IGZsYWdzOwoKCiAgcHRocmVhZF90
IHRocmVhZDsKCgogIGphdmE6Omxhbmc6OlRocmVhZCAqdGhyZWFkX29iajsKCgoKICBwdGhyZWFk
X2NvbmRfdCB3YWl0X2NvbmQ7CiAgcHRocmVhZF9tdXRleF90IHdhaXRfbXV0ZXg7CgoKICBfSnZf
VGhyZWFkX3QgKm5leHQ7Cgp9IF9Kdl9UaHJlYWRfdDsKCnR5cGVkZWYgdm9pZCBfSnZfVGhyZWFk
U3RhcnRGdW5jIChqYXZhOjpsYW5nOjpUaHJlYWQgKik7CgoKCnR5cGVkZWYgc3RydWN0CnsKCiAg
X0p2X1RocmVhZF90ICpmaXJzdDsKCn0gX0p2X0NvbmRpdGlvblZhcmlhYmxlX3Q7Cgp0eXBlZGVm
IHN0cnVjdAp7CgoKCgogIHB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKCgogIHB0aHJlYWRfdCBvd25l
cjsKCgogIGludCBjb3VudDsKfSBfSnZfTXV0ZXhfdDsKCgoKCgoKaW5saW5lIGludApfSnZfUHRo
cmVhZENoZWNrTW9uaXRvciAoX0p2X011dGV4X3QgKm11KQp7CiAgcHRocmVhZF90IHNlbGYgPSBw
dGhyZWFkX3NlbGYoKTsKICBpZiAobXUtPm93bmVyID09IHNlbGYpCiAgICByZXR1cm4gMDsKICBl
bHNlIHJldHVybiAxOwp9CgoKCgoKaW50IF9Kdl9Db25kV2FpdCAoX0p2X0NvbmRpdGlvblZhcmlh
YmxlX3QgKmN2LCBfSnZfTXV0ZXhfdCAqbXUsCiAgICAgICAgICAgICAgICAgIGpsb25nIG1pbGxp
cywgamludCBuYW5vcyk7CgppbnQgX0p2X0NvbmROb3RpZnkgKF9Kdl9Db25kaXRpb25WYXJpYWJs
ZV90ICpjdiwgX0p2X011dGV4X3QgKm11KTsKCmludCBfSnZfQ29uZE5vdGlmeUFsbCAoX0p2X0Nv
bmRpdGlvblZhcmlhYmxlX3QgKmN2LCBfSnZfTXV0ZXhfdCAqbXUpOwoKaW5saW5lIHZvaWQKX0p2
X0NvbmRJbml0IChfSnZfQ29uZGl0aW9uVmFyaWFibGVfdCAqY3YpCnsKICBjdi0+Zmlyc3QgPSAw
Owp9CiMgMTEzICJpbmNsdWRlL2phdmEtdGhyZWFkcy5oIgppbmxpbmUgdm9pZApfSnZfTXV0ZXhJ
bml0IChfSnZfTXV0ZXhfdCAqbXUpCnsKCgoKCgoKICBwdGhyZWFkX211dGV4X2luaXQgKCZtdS0+
bXV0ZXgsIDApOwoKCiAgbXUtPmNvdW50ID0gMDsKICBtdS0+b3duZXIgPSAwOwp9CgppbmxpbmUg
aW50Cl9Kdl9NdXRleExvY2sgKF9Kdl9NdXRleF90ICptdSkKewogIHB0aHJlYWRfdCBzZWxmID0g
cHRocmVhZF9zZWxmICgpOwogIGlmIChtdS0+b3duZXIgPT0gc2VsZikKICAgIHsKICAgICAgbXUt
PmNvdW50Kys7CiAgICB9CiAgZWxzZQogICAgewojIDE0NyAiaW5jbHVkZS9qYXZhLXRocmVhZHMu
aCIKICAgICAgICBwdGhyZWFkX211dGV4X2xvY2sgKCZtdS0+bXV0ZXgpOwoKICAgICAgbXUtPmNv
dW50ID0gMTsKICAgICAgbXUtPm93bmVyID0gc2VsZjsKICAgIH0KICByZXR1cm4gMDsKfQoKaW5s
aW5lIGludApfSnZfTXV0ZXhVbmxvY2sgKF9Kdl9NdXRleF90ICptdSkKewogIGlmIChfSnZfUHRo
cmVhZENoZWNrTW9uaXRvciAobXUpKQogICAgewoKCgoKICAgICAgcmV0dXJuIDE7CiAgICB9Cgog
IG11LT5jb3VudC0tOwoKICBpZiAobXUtPmNvdW50ID09IDApCiAgICB7CiAgICAgIG11LT5vd25l
ciA9IDA7CiMgMTgwICJpbmNsdWRlL2phdmEtdGhyZWFkcy5oIgogICAgICAgIHB0aHJlYWRfbXV0
ZXhfdW5sb2NrICgmbXUtPm11dGV4KTsKCiAgICB9CiAgcmV0dXJuIDA7Cn0KIyAyMDUgImluY2x1
ZGUvamF2YS10aHJlYWRzLmgiCnZvaWQgX0p2X0luaXRUaHJlYWRzICh2b2lkKTsKCl9Kdl9UaHJl
YWRfdCAqX0p2X1RocmVhZEluaXREYXRhIChqYXZhOjpsYW5nOjpUaHJlYWQgKnRocmVhZCk7CnZv
aWQgX0p2X1RocmVhZERlc3Ryb3lEYXRhIChfSnZfVGhyZWFkX3QgKmRhdGEpOwoKaW5saW5lIGph
dmE6Omxhbmc6OlRocmVhZCAqCl9Kdl9UaHJlYWRDdXJyZW50ICh2b2lkKQp7CiAgZXh0ZXJuIHB0
aHJlYWRfa2V5X3QgX0p2X1RocmVhZEtleTsKICByZXR1cm4gKGphdmE6Omxhbmc6OlRocmVhZCAq
KSBwdGhyZWFkX2dldHNwZWNpZmljIChfSnZfVGhyZWFkS2V5KTsKfQojIDI3MyAiaW5jbHVkZS9q
YXZhLXRocmVhZHMuaCIKdHlwZWRlZiBwdGhyZWFkX3QgX0p2X1RocmVhZElkX3Q7CiMgMzA0ICJp
bmNsdWRlL2phdmEtdGhyZWFkcy5oIgpleHRlcm4gdm9sYXRpbGUKc3RydWN0IHNlbGZfY2FjaGVf
ZW50cnkgewogIHNpemVfdCBoaWdoX3NwX2JpdHM7CiAgcHRocmVhZF90IHNlbGY7Cn0gX0p2X3Nl
bGZfY2FjaGVbXTsKCnZvaWQgX0p2X1NlbGZfQ2FjaGVfSW5pdCgpOwoKX0p2X1RocmVhZElkX3QK
X0p2X1RocmVhZFNlbGZfb3V0X29mX2xpbmUodm9sYXRpbGUgc2VsZl9jYWNoZV9lbnRyeSAqc2Nl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaGlnaF9zcF9iaXRzKTsKCmlubGlu
ZSBfSnZfVGhyZWFkSWRfdApfSnZfVGhyZWFkU2VsZiAodm9pZCkKewogIGludCBkdW1teTsKICBz
aXplX3Qgc3AgPSAoc2l6ZV90KSgmZHVtbXkpOwogIHVuc2lnbmVkIGggPSAoKCh1bnNpZ25lZCBs
b25nKShzcCkgPj4gMTkpICYgKDEwMjQgLTEpKTsKICB2b2xhdGlsZSBzZWxmX2NhY2hlX2VudHJ5
ICpzY2UgPSBfSnZfc2VsZl9jYWNoZSArIGg7CiAgcHRocmVhZF90IGNhbmRpZGF0ZV9zZWxmID0g
c2NlIC0+IHNlbGY7CgogIGlmIChzY2UgLT4gaGlnaF9zcF9iaXRzID09IHNwID4+IDEyKQogICAg
ewoKCgoKICAgICAgcmV0dXJuIGNhbmRpZGF0ZV9zZWxmOwogICAgfQogIGVsc2UKICAgIHJldHVy
biBfSnZfVGhyZWFkU2VsZl9vdXRfb2ZfbGluZShzY2UsIHNwID4+IDEyKTsKfQojIDM1NSAiaW5j
bHVkZS9qYXZhLXRocmVhZHMuaCIKaW5saW5lIF9Kdl9UaHJlYWRfdCAqCl9Kdl9UaHJlYWRDdXJy
ZW50RGF0YSAodm9pZCkKewogIGV4dGVybiBwdGhyZWFkX2tleV90IF9Kdl9UaHJlYWREYXRhS2V5
OwogIHJldHVybiAoX0p2X1RocmVhZF90ICopIHB0aHJlYWRfZ2V0c3BlY2lmaWMgKF9Kdl9UaHJl
YWREYXRhS2V5KTsKfQoKaW5saW5lIHZvaWQKX0p2X1RocmVhZFlpZWxkICh2b2lkKQp7CgogIHNj
aGVkX3lpZWxkICgpOwoKfQoKdm9pZCBfSnZfVGhyZWFkUmVnaXN0ZXIgKF9Kdl9UaHJlYWRfdCAq
ZGF0YSk7CnZvaWQgX0p2X1RocmVhZFVuUmVnaXN0ZXIgKCk7Cgp2b2lkIF9Kdl9UaHJlYWRTZXRQ
cmlvcml0eSAoX0p2X1RocmVhZF90ICpkYXRhLCBqaW50IHByaW8pOwoKdm9pZCBfSnZfVGhyZWFk
U3RhcnQgKGphdmE6Omxhbmc6OlRocmVhZCAqdGhyZWFkLCBfSnZfVGhyZWFkX3QgKmRhdGEsCiAg
ICAgICAgICAgICAgICAgICAgICBfSnZfVGhyZWFkU3RhcnRGdW5jICptZXRoKTsKCnZvaWQgX0p2
X1RocmVhZFdhaXQgKHZvaWQpOwoKdm9pZCBfSnZfVGhyZWFkSW50ZXJydXB0IChfSnZfVGhyZWFk
X3QgKmRhdGEpOwojIDI0ICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNsdWRlL2p2bS5oIiAyCgoj
IDEgImluY2x1ZGUvamF2YS1nYy5oIiAxCiMgMTggImluY2x1ZGUvamF2YS1nYy5oIgpleHRlcm4g
IkMiCnsKICB2b2lkICpfSnZfTWFya09iaiAodm9pZCAqLCB2b2lkICosIHZvaWQgKiwgdm9pZCAq
KTsKICB2b2lkICpfSnZfTWFya0FycmF5ICh2b2lkICosIHZvaWQgKiwgdm9pZCAqLCB2b2lkICop
Owp9OwoKCgojIDEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbGFuZy9DbGFzcy5oIiAxCiMg
MTUgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbGFuZy9DbGFzcy5oIgojcHJhZ21hIGludGVy
ZmFjZQoKIyAxICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZhL2xhbmcvT2JqZWN0LmgiIDEKIyAx
NCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9sYW5nL09iamVjdC5oIgojcHJhZ21hIGludGVy
ZmFjZQoKCgoKCnN0cnVjdCBfSnZPYmplY3RQcmVmaXgKewpwcm90ZWN0ZWQ6CgogIHZpcnR1YWwg
dm9pZCBuYWNkXzEgKHZvaWQpIHt9OwoKCiAgICB2aXJ0dWFsIHZvaWQgbmFjZF8yICh2b2lkKSB7
fTsKCn07CgpjbGFzcyBqYXZhOjpsYW5nOjpPYmplY3QgOiBwdWJsaWMgX0p2T2JqZWN0UHJlZml4
CnsKcHJvdGVjdGVkOgogIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZSAodm9pZCk7CnB1YmxpYzoKCiAg
amNsYXNzIGdldENsYXNzICh2b2lkKTsKICB2aXJ0dWFsIGppbnQgaGFzaENvZGUgKHZvaWQpOwog
IHZvaWQgbm90aWZ5ICh2b2lkKTsKICB2b2lkIG5vdGlmeUFsbCAodm9pZCk7CiAgdm9pZCB3YWl0
IChqbG9uZyB0aW1lb3V0LCBqaW50IG5hbm9zKTsKICB2aXJ0dWFsIGpib29sZWFuIGVxdWFscyAo
am9iamVjdCBvYmopOwogIE9iamVjdCAodm9pZCk7CiAgdmlydHVhbCBqc3RyaW5nIHRvU3RyaW5n
ICh2b2lkKTsKICB2b2lkIHdhaXQgKHZvaWQpOwogIHZvaWQgd2FpdCAoamxvbmcgdGltZW91dCk7
CgogIGZyaWVuZCB2b2lkIF9Kdl9Nb25pdG9yRW50ZXIgKGpvYmplY3Qgb2JqKTsKICBmcmllbmQg
dm9pZCBfSnZfTW9uaXRvckV4aXQgKGpvYmplY3Qgb2JqKTsKICBmcmllbmQgdm9pZCBfSnZfSW5p
dGlhbGl6ZVN5bmNNdXRleCAodm9pZCk7CiAgZnJpZW5kIHZvaWQgX0p2X0ZpbmFsaXplT2JqZWN0
IChqb2JqZWN0IG9iaik7CgoKICBmcmllbmQgdm9pZCAqX0p2X01hcmtPYmogKHZvaWQgKiwgdm9p
ZCAqLCB2b2lkICosIHZvaWQgKik7CgoKICBmcmllbmQgdm9pZCAqX0p2X01hcmtBcnJheSAodm9p
ZCAqLCB2b2lkICosIHZvaWQgKiwgdm9pZCAqKTsKCgogIHN0YXRpYyBqYXZhOjpsYW5nOjpDbGFz
cyBjbGFzcyQ7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCBqb2JqZWN0IGNsb25lICh2b2lkKTsKCnBy
aXZhdGU6CiMgNzQgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbGFuZy9PYmplY3QuaCIKICAg
IHZvaWQgc3luY19pbml0ICh2b2lkKTsKfTsKIyAxOCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2
YS9sYW5nL0NsYXNzLmgiIDIKIyAxICJqYXZhL2xhbmcvU3RyaW5nLmgiIDEKCgoKCgojcHJhZ21h
IGludGVyZmFjZQoKCiMgMSAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvZ2NqL2FycmF5LmgiIDEKIyAx
NiAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvZ2NqL2FycmF5LmgiCmV4dGVybiAiSmF2YSIgewoKY2xh
c3MgX19KQXJyYXkgOiBwdWJsaWMgamF2YTo6bGFuZzo6T2JqZWN0CnsKcHJvdGVjdGVkOgoKCgog
IF9fSkFycmF5ICgpIDogbGVuZ3RoICgwKQogIHsKICB9CnB1YmxpYzoKICBjb25zdCBqc2l6ZSBs
ZW5ndGg7CiAgZnJpZW5kIGpzaXplIEp2R2V0QXJyYXlMZW5ndGggKF9fSkFycmF5Kik7Cn07Cgp0
ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBKQXJyYXkgOiBwdWJsaWMgX19KQXJyYXkKewogIFQgZGF0
YVswXTsKcHVibGljOgogIGZyaWVuZCBUKiBlbGVtZW50czw+KEpBcnJheTxUPiYgeCk7CiAgZnJp
ZW5kIFQqIGVsZW1lbnRzPD4oSkFycmF5PFQ+KiB4KTsKCgp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4K
aW5saW5lIFQqIGVsZW1lbnRzKEpBcnJheTxUPiYgeCkgeyByZXR1cm4geC5kYXRhOyB9CnRlbXBs
YXRlPGNsYXNzIFQ+CmlubGluZSBUKiBlbGVtZW50cyhKQXJyYXk8VD4qIHgpIHsgcmV0dXJuIHgt
PmRhdGE7IH0KCn07CgoKdHlwZWRlZiBfX0pBcnJheSAqamFycmF5Owp0eXBlZGVmIEpBcnJheTxq
b2JqZWN0PiAqam9iamVjdEFycmF5Owp0eXBlZGVmIEpBcnJheTxqYm9vbGVhbj4gKmpib29sZWFu
QXJyYXk7CnR5cGVkZWYgSkFycmF5PGpieXRlPiAqamJ5dGVBcnJheTsKdHlwZWRlZiBKQXJyYXk8
amNoYXI+ICpqY2hhckFycmF5Owp0eXBlZGVmIEpBcnJheTxqc2hvcnQ+ICpqc2hvcnRBcnJheTsK
dHlwZWRlZiBKQXJyYXk8amludD4gKmppbnRBcnJheTsKdHlwZWRlZiBKQXJyYXk8amxvbmc+ICpq
bG9uZ0FycmF5Owp0eXBlZGVmIEpBcnJheTxqZmxvYXQ+ICpqZmxvYXRBcnJheTsKdHlwZWRlZiBK
QXJyYXk8amRvdWJsZT4gKmpkb3VibGVBcnJheTsKdHlwZWRlZiBKQXJyYXk8anN0cmluZz4gKmpz
dHJpbmdBcnJheTsKCmV4dGVybiBqYXZhOjpsYW5nOjpDbGFzcyBfSnZfYnl0ZUNsYXNzLCBfSnZf
c2hvcnRDbGFzcywgX0p2X2ludENsYXNzLAogIF9Kdl9sb25nQ2xhc3MsIF9Kdl9ib29sZWFuQ2xh
c3MsIF9Kdl9jaGFyQ2xhc3MsIF9Kdl9mbG9hdENsYXNzLAogIF9Kdl9kb3VibGVDbGFzcywgX0p2
X3ZvaWRDbGFzczsKCgpleHRlcm4gIkMiIGpvYmplY3RBcnJheSBfSnZfTmV3T2JqZWN0QXJyYXko
anNpemUgbGVuZ3RoLCBqY2xhc3MsIGpvYmplY3QgaW5pdCk7CmV4dGVybiAiQyIgam9iamVjdCBf
SnZfTmV3UHJpbUFycmF5IChqY2xhc3MgZWx0eXBlLCBqaW50IGNvdW50KTsKCmV4dGVybiBpbmxp
bmUgam9iamVjdEFycmF5Ckp2TmV3T2JqZWN0QXJyYXkgKGpzaXplIGxlbmd0aCwgamNsYXNzIGNs
cywgam9iamVjdCBpbml0KQp7CiAgcmV0dXJuIF9Kdl9OZXdPYmplY3RBcnJheSAobGVuZ3RoLCBj
bHMsIGluaXQpOwp9CgpleHRlcm4gaW5saW5lIGpjaGFyQXJyYXkKSnZOZXdDaGFyQXJyYXkgKGpp
bnQgbGVuZ3RoKQp7CiAgcmV0dXJuIChqY2hhckFycmF5KSBfSnZfTmV3UHJpbUFycmF5ICgoJiBf
SnZfY2hhckNsYXNzKSwgbGVuZ3RoKTsKfQoKZXh0ZXJuIGlubGluZSBqYm9vbGVhbkFycmF5Ckp2
TmV3Qm9vbGVhbkFycmF5IChqaW50IGxlbmd0aCkKewogIHJldHVybiAoamJvb2xlYW5BcnJheSkg
X0p2X05ld1ByaW1BcnJheSAoKCYgX0p2X2Jvb2xlYW5DbGFzcyksIGxlbmd0aCk7Cn0KCmV4dGVy
biBpbmxpbmUgamJ5dGVBcnJheQpKdk5ld0J5dGVBcnJheSAoamludCBsZW5ndGgpCnsKICByZXR1
cm4gKGpieXRlQXJyYXkpIF9Kdl9OZXdQcmltQXJyYXkgKCgmIF9Kdl9ieXRlQ2xhc3MpLCBsZW5n
dGgpOwp9CgpleHRlcm4gaW5saW5lIGpzaG9ydEFycmF5Ckp2TmV3U2hvcnRBcnJheSAoamludCBs
ZW5ndGgpCnsKICByZXR1cm4gKGpzaG9ydEFycmF5KSBfSnZfTmV3UHJpbUFycmF5ICgoJiBfSnZf
c2hvcnRDbGFzcyksIGxlbmd0aCk7Cn0KCmV4dGVybiBpbmxpbmUgamludEFycmF5Ckp2TmV3SW50
QXJyYXkgKGppbnQgbGVuZ3RoKQp7CiAgcmV0dXJuIChqaW50QXJyYXkpIF9Kdl9OZXdQcmltQXJy
YXkgKCgmIF9Kdl9pbnRDbGFzcyksIGxlbmd0aCk7Cn0KCmV4dGVybiBpbmxpbmUgamxvbmdBcnJh
eQpKdk5ld0xvbmdBcnJheSAoamludCBsZW5ndGgpCnsKICByZXR1cm4gKGpsb25nQXJyYXkpIF9K
dl9OZXdQcmltQXJyYXkgKCgmIF9Kdl9sb25nQ2xhc3MpLCBsZW5ndGgpOwp9CgpleHRlcm4gaW5s
aW5lIGpmbG9hdEFycmF5Ckp2TmV3RmxvYXRBcnJheSAoamludCBsZW5ndGgpCnsKICByZXR1cm4g
KGpmbG9hdEFycmF5KSBfSnZfTmV3UHJpbUFycmF5ICgoJiBfSnZfZmxvYXRDbGFzcyksIGxlbmd0
aCk7Cn0KCmV4dGVybiBpbmxpbmUgamRvdWJsZUFycmF5Ckp2TmV3RG91YmxlQXJyYXkgKGppbnQg
bGVuZ3RoKQp7CiAgcmV0dXJuIChqZG91YmxlQXJyYXkpIF9Kdl9OZXdQcmltQXJyYXkgKCgmIF9K
dl9kb3VibGVDbGFzcyksIGxlbmd0aCk7Cn0KCgpleHRlcm4gIkMiIGpzdHJpbmdBcnJheSBKdkNv
bnZlcnRBcmd2KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CgppbmxpbmUganNpemUgSnZH
ZXRBcnJheUxlbmd0aCAoamFycmF5IGFycmF5KSB7IHJldHVybiBhcnJheS0+bGVuZ3RoOyB9CiMg
MTAgImphdmEvbGFuZy9TdHJpbmcuaCIgMgoKZXh0ZXJuICJKYXZhIgp7CiAgbmFtZXNwYWNlIGdu
dQogIHsKICAgIG5hbWVzcGFjZSBnY2oKICAgIHsKICAgICAgbmFtZXNwYWNlIHJ1bnRpbWUKICAg
ICAgewogICAgICAgIGNsYXNzIFN0cmluZ0J1ZmZlcjsKICAgICAgfQogICAgfQogIH0KfTsKCmNs
YXNzIDo6amF2YTo6bGFuZzo6U3RyaW5nIDogcHVibGljIDo6amF2YTo6bGFuZzo6T2JqZWN0CnsK
cHVibGljOgogIFN0cmluZyAoKTsKICBTdHJpbmcgKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwog
IFN0cmluZyAoOjpqYXZhOjpsYW5nOjpTdHJpbmdCdWZmZXIgKik7CnB1YmxpYzoKICBTdHJpbmcg
KDo6Z251OjpnY2o6OnJ1bnRpbWU6OlN0cmluZ0J1ZmZlciAqKTsKcHVibGljOgogIFN0cmluZyAo
amNoYXJBcnJheSk7CiAgU3RyaW5nIChqY2hhckFycmF5LCBqaW50LCBqaW50KTsKICBTdHJpbmcg
KGpieXRlQXJyYXkpOwogIFN0cmluZyAoamJ5dGVBcnJheSwgamludCwgamludCk7CiAgU3RyaW5n
IChqYnl0ZUFycmF5LCA6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBTdHJpbmcgKGpieXRlQXJy
YXksIGppbnQsIGppbnQsIDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIHN0YXRpYyA6OmphdmE6
Omxhbmc6OlN0cmluZyAqY29weVZhbHVlT2YgKGpjaGFyQXJyYXkpOwogIHN0YXRpYyA6OmphdmE6
Omxhbmc6OlN0cmluZyAqY29weVZhbHVlT2YgKGpjaGFyQXJyYXksIGppbnQsIGppbnQpOwogIFN0
cmluZyAoamJ5dGVBcnJheSwgamludCk7CiAgU3RyaW5nIChqYnl0ZUFycmF5LCBqaW50LCBqaW50
LCBqaW50KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9TdHJpbmcgKCkgeyByZXR1cm4gdGhp
czsgfQogIGpib29sZWFuIGVxdWFscyAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgamludCBo
YXNoQ29kZSAoKTsKICBqaW50IGxlbmd0aCAoKSB7IHJldHVybiBjb3VudDsgfQogIGpjaGFyIGNo
YXJBdCAoamludCk7CiAgdm9pZCBnZXRDaGFycyAoamludCwgamludCwgamNoYXJBcnJheSwgamlu
dCk7CiAgamJ5dGVBcnJheSBnZXRCeXRlcyAoKTsKICBqYnl0ZUFycmF5IGdldEJ5dGVzICg6Omph
dmE6Omxhbmc6OlN0cmluZyAqKTsKICB2b2lkIGdldEJ5dGVzIChqaW50LCBqaW50LCBqYnl0ZUFy
cmF5LCBqaW50KTsKICBqY2hhckFycmF5IHRvQ2hhckFycmF5ICgpOwogIGpib29sZWFuIGVxdWFs
c0lnbm9yZUNhc2UgKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIGppbnQgY29tcGFyZVRvICg6
OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBqaW50IGNvbXBhcmVUbyAoOjpqYXZhOjpsYW5nOjpP
YmplY3QgKik7CiAgamludCBjb21wYXJlVG9JZ25vcmVDYXNlICg6OmphdmE6Omxhbmc6OlN0cmlu
ZyAqKTsKICBqYm9vbGVhbiByZWdpb25NYXRjaGVzIChqaW50LCA6OmphdmE6Omxhbmc6OlN0cmlu
ZyAqLCBqaW50LCBqaW50KTsKICBqYm9vbGVhbiByZWdpb25NYXRjaGVzIChqYm9vbGVhbiwgamlu
dCwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCwgamludCk7CiAgamJvb2xlYW4gc3RhcnRz
V2l0aCAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgamJvb2xlYW4gc3RhcnRzV2l0aCAoOjpq
YXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCk7CiAgamJvb2xlYW4gZW5kc1dpdGggKDo6amF2YTo6
bGFuZzo6U3RyaW5nICopOwogIGppbnQgaW5kZXhPZiAoamludCk7CiAgamludCBpbmRleE9mIChq
aW50LCBqaW50KTsKICBqaW50IGluZGV4T2YgKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIGpp
bnQgaW5kZXhPZiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCk7CiAgamludCBsYXN0SW5k
ZXhPZiAoamludCk7CiAgamludCBsYXN0SW5kZXhPZiAoamludCwgamludCk7CiAgamludCBsYXN0
SW5kZXhPZiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgamludCBsYXN0SW5kZXhPZiAoOjpq
YXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCk7CiAgOjpqYXZhOjpsYW5nOjpDaGFyU2VxdWVuY2Ug
KnN1YlNlcXVlbmNlIChqaW50LCBqaW50KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqc3Vic3Ry
aW5nIChqaW50KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqc3Vic3RyaW5nIChqaW50LCBqaW50
KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqY29uY2F0ICg6OmphdmE6Omxhbmc6OlN0cmluZyAq
KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqcmVwbGFjZSAoamNoYXIsIGpjaGFyKTsKICA6Omph
dmE6Omxhbmc6OlN0cmluZyAqdG9Mb3dlckNhc2UgKDo6amF2YTo6dXRpbDo6TG9jYWxlICopOwog
IDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1VwcGVyQ2FzZSAoOjpqYXZhOjp1dGlsOjpMb2NhbGUg
Kik7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvTG93ZXJDYXNlICgpOwogIDo6amF2YTo6bGFu
Zzo6U3RyaW5nICp0b1VwcGVyQ2FzZSAoKTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqdHJpbSAo
KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVlT2YgKDo6amF2YTo6bGFuZzo6
T2JqZWN0ICopOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqdmFsdWVPZiAoamNoYXJB
cnJheSk7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5nICp2YWx1ZU9mIChqY2hhckFycmF5
LCBqaW50LCBqaW50KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVlT2YgKGpi
b29sZWFuKTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVlT2YgKGpjaGFyKTsK
ICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVlT2YgKGppbnQpOwogIHN0YXRpYyA6
OmphdmE6Omxhbmc6OlN0cmluZyAqdmFsdWVPZiAoamxvbmcpOwogIHN0YXRpYyA6OmphdmE6Omxh
bmc6OlN0cmluZyAqdmFsdWVPZiAoamZsb2F0KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJp
bmcgKnZhbHVlT2YgKGpkb3VibGUpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICppbnRlcm4gKCk7
CnByaXZhdGU6CiAgdm9pZCBpbml0ICgpOwogIHZvaWQgaW5pdCAoamNoYXJBcnJheSwgamludCwg
amludCwgamJvb2xlYW4pOwogIHZvaWQgaW5pdCAoamJ5dGVBcnJheSwgamludCwgamludCwgamlu
dCk7CiAgdm9pZCBpbml0IChqYnl0ZUFycmF5LCBqaW50LCBqaW50LCA6OmphdmE6Omxhbmc6OlN0
cmluZyAqKTsKICBzdGF0aWMgdm9pZCByZWhhc2ggKCk7CiAgOjpqYXZhOjpsYW5nOjpPYmplY3Qg
KmRhdGE7CiAgamludCBib2Zmc2V0OwogIGppbnQgY291bnQ7CiAgc3RhdGljIGNvbnN0IGpsb25n
IHNlcmlhbFZlcnNpb25VSUQgPSAtNjg0OTc5NDQ3MDc1NDY2NzcxMExMOwpwdWJsaWM6CiAgc3Rh
dGljIDo6amF2YTo6dXRpbDo6Q29tcGFyYXRvciAqQ0FTRV9JTlNFTlNJVElWRV9PUkRFUjsKICBm
cmllbmQgamNoYXIqIF9Kdl9HZXRTdHJpbmdDaGFycyAoanN0cmluZyBzdHIpOwogIGZyaWVuZCBq
c3RyaW5nKiBfSnZfU3RyaW5nRmluZFNsb3QgKGpjaGFyKiwgamludCwgamludCk7CiAgZnJpZW5k
IGpzdHJpbmcqIF9Kdl9TdHJpbmdHZXRTbG90IChqc3RyaW5nKTsKICBmcmllbmQganN0cmluZyBf
SnZfTmV3U3RyaW5nVXRmOENvbnN0IChfSnZfVXRmOENvbnN0KiBzdHIpOwogIGZyaWVuZCBqc3Ry
aW5nIF9Kdl9OZXdTdHJpbmdMYXRpbjEgKGNvbnN0IGNoYXIqLCBqc2l6ZSk7CiAgZnJpZW5kIGpz
dHJpbmcgX0p2X0FsbG9jU3RyaW5nIChqc2l6ZSk7CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNs
YXNzIGNsYXNzJDsKfTsKIyAxOSAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9sYW5nL0NsYXNz
LmgiIDIKIyAxICJqYXZhL25ldC9VUkwuaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCmV4
dGVybiAiSmF2YSIKewogIG5hbWVzcGFjZSBqYXZhCiAgewogICAgbmFtZXNwYWNlIG5ldAogICAg
ewogICAgICBjbGFzcyBVUkxDb25uZWN0aW9uOwogICAgICBjbGFzcyBVUkw7CiAgICAgIGNsYXNz
IFVSTFN0cmVhbUhhbmRsZXJGYWN0b3J5OwogICAgICBjbGFzcyBVUkxTdHJlYW1IYW5kbGVyOwog
ICAgfQogIH0KfTsKCmNsYXNzIDo6amF2YTo6bmV0OjpVUkwgOiBwdWJsaWMgOjpqYXZhOjpsYW5n
OjpPYmplY3QKewpwdWJsaWM6CiAgVVJMICg6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6
Omxhbmc6OlN0cmluZyAqLCBqaW50LCA6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBVUkwgKDo6
amF2YTo6bGFuZzo6U3RyaW5nICosIDo6amF2YTo6bGFuZzo6U3RyaW5nICosIDo6amF2YTo6bGFu
Zzo6U3RyaW5nICopOwogIFVSTCAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgOjpqYXZhOjpsYW5n
OjpTdHJpbmcgKiwgamludCwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgOjpqYXZhOjpuZXQ6OlVS
TFN0cmVhbUhhbmRsZXIgKik7CiAgVVJMICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBVUkwg
KDo6amF2YTo6bmV0OjpVUkwgKiwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgVVJMICg6Omph
dmE6Om5ldDo6VVJMICosIDo6amF2YTo6bGFuZzo6U3RyaW5nICosIDo6amF2YTo6bmV0OjpVUkxT
dHJlYW1IYW5kbGVyICopOwogIGpib29sZWFuIGVxdWFscyAoOjpqYXZhOjpsYW5nOjpPYmplY3Qg
Kik7CiAgOjpqYXZhOjpsYW5nOjpPYmplY3QgKmdldENvbnRlbnQgKCk7CiAgOjpqYXZhOjpsYW5n
OjpTdHJpbmcgKmdldEZpbGUgKCkgeyByZXR1cm4gZmlsZTsgfQogIDo6amF2YTo6bGFuZzo6U3Ry
aW5nICpnZXRQYXRoICgpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICpnZXRIb3N0ICgpIHsgcmV0
dXJuIGhvc3Q7IH0KICBqaW50IGdldFBvcnQgKCkgeyByZXR1cm4gcG9ydDsgfQogIDo6amF2YTo6
bGFuZzo6U3RyaW5nICpnZXRQcm90b2NvbCAoKSB7IHJldHVybiBwcm90b2NvbDsgfQogIDo6amF2
YTo6bGFuZzo6U3RyaW5nICpnZXRSZWYgKCkgeyByZXR1cm4gcmVmOyB9CiAgamludCBoYXNoQ29k
ZSAoKTsKICA6OmphdmE6Om5ldDo6VVJMQ29ubmVjdGlvbiAqb3BlbkNvbm5lY3Rpb24gKCk7CiAg
OjpqYXZhOjppbzo6SW5wdXRTdHJlYW0gKm9wZW5TdHJlYW0gKCk7CiAgamJvb2xlYW4gc2FtZUZp
bGUgKDo6amF2YTo6bmV0OjpVUkwgKik7CnB1YmxpYzoKICB2b2lkIHNldCAoOjpqYXZhOjpsYW5n
OjpTdHJpbmcgKiwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCwgOjpqYXZhOjpsYW5nOjpT
dHJpbmcgKiwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CnB1YmxpYzoKICBzdGF0aWMgdm9pZCBz
ZXRVUkxTdHJlYW1IYW5kbGVyRmFjdG9yeSAoOjpqYXZhOjpuZXQ6OlVSTFN0cmVhbUhhbmRsZXJG
YWN0b3J5ICopOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b0V4dGVybmFsRm9ybSAoKTsKICA6
OmphdmE6Omxhbmc6OlN0cmluZyAqdG9TdHJpbmcgKCk7CnByaXZhdGU6CiAgOjpqYXZhOjpuZXQ6
OlVSTFN0cmVhbUhhbmRsZXIgKnNldFVSTFN0cmVhbUhhbmRsZXIgKDo6amF2YTo6bGFuZzo6U3Ry
aW5nICopOwogIHZvaWQgcmVhZE9iamVjdCAoOjpqYXZhOjppbzo6T2JqZWN0SW5wdXRTdHJlYW0g
Kik7CiAgdm9pZCB3cml0ZU9iamVjdCAoOjpqYXZhOjppbzo6T2JqZWN0T3V0cHV0U3RyZWFtICop
OwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICpwcm90b2NvbDsKICA6OmphdmE6Omxhbmc6OlN0cmlu
ZyAqaG9zdDsKICBqaW50IHBvcnQ7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmZpbGU7CiAgOjpq
YXZhOjpsYW5nOjpTdHJpbmcgKnJlZjsKICBqaW50IGhhc2hDb2RlX187CiAgOjpqYXZhOjpuZXQ6
OlVSTFN0cmVhbUhhbmRsZXIgKmhhbmRsZXI7CiAgc3RhdGljIDo6amF2YTo6dXRpbDo6SGFzaHRh
YmxlICpoYW5kbGVyczsKICBzdGF0aWMgOjpqYXZhOjpuZXQ6OlVSTFN0cmVhbUhhbmRsZXJGYWN0
b3J5ICpmYWN0b3J5OwogIHN0YXRpYyBjb25zdCBqbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTc2
Mjc2Mjk2ODgzNjE1MjQxMTBMTDsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFz
cyBjbGFzcyQ7Cn07CiMgMjAgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbGFuZy9DbGFzcy5o
IiAyCiMgMSAiamF2YS9sYW5nL3JlZmxlY3QvTW9kaWZpZXIuaCIgMQoKCgoKCiNwcmFnbWEgaW50
ZXJmYWNlCgoKCmNsYXNzIDo6amF2YTo6bGFuZzo6cmVmbGVjdDo6TW9kaWZpZXIgOiBwdWJsaWMg
OjpqYXZhOjpsYW5nOjpPYmplY3QKewpwdWJsaWM6CiAgTW9kaWZpZXIgKCk7CiAgc3RhdGljIGpi
b29sZWFuIGlzQWJzdHJhY3QgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc0ZpbmFsIChqaW50
KTsKICBzdGF0aWMgamJvb2xlYW4gaXNJbnRlcmZhY2UgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVh
biBpc05hdGl2ZSAoamludCk7CiAgc3RhdGljIGpib29sZWFuIGlzUHJpdmF0ZSAoamludCk7CiAg
c3RhdGljIGpib29sZWFuIGlzUHJvdGVjdGVkIChqaW50KTsKICBzdGF0aWMgamJvb2xlYW4gaXNQ
dWJsaWMgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1N0YXRpYyAoamludCk7CiAgc3RhdGlj
IGpib29sZWFuIGlzU3RyaWN0IChqaW50KTsKICBzdGF0aWMgamJvb2xlYW4gaXNTeW5jaHJvbml6
ZWQgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1RyYW5zaWVudCAoamludCk7CiAgc3RhdGlj
IGpib29sZWFuIGlzVm9sYXRpbGUgKGppbnQpOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmlu
ZyAqdG9TdHJpbmcgKGppbnQpOwpwdWJsaWM6CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5n
QnVmZmVyICp0b1N0cmluZyAoamludCwgOjpqYXZhOjpsYW5nOjpTdHJpbmdCdWZmZXIgKik7CnB1
YmxpYzoKICBzdGF0aWMgY29uc3QgamludCBQVUJMSUMgPSAxTDsKICBzdGF0aWMgY29uc3Qgamlu
dCBQUklWQVRFID0gMkw7CiAgc3RhdGljIGNvbnN0IGppbnQgUFJPVEVDVEVEID0gNEw7CiAgc3Rh
dGljIGNvbnN0IGppbnQgU1RBVElDID0gOEw7CiAgc3RhdGljIGNvbnN0IGppbnQgRklOQUwgPSAx
Nkw7CiAgc3RhdGljIGNvbnN0IGppbnQgU1lOQ0hST05JWkVEID0gMzJMOwogIHN0YXRpYyBjb25z
dCBqaW50IFZPTEFUSUxFID0gNjRMOwogIHN0YXRpYyBjb25zdCBqaW50IFRSQU5TSUVOVCA9IDEy
OEw7CiAgc3RhdGljIGNvbnN0IGppbnQgTkFUSVZFID0gMjU2TDsKICBzdGF0aWMgY29uc3Qgamlu
dCBJTlRFUkZBQ0UgPSA1MTJMOwogIHN0YXRpYyBjb25zdCBqaW50IEFCU1RSQUNUID0gMTAyNEw7
CiAgc3RhdGljIGNvbnN0IGppbnQgU1RSSUNUID0gMjA0OEw7CnB1YmxpYzoKICBzdGF0aWMgY29u
c3QgamludCBTVVBFUiA9IDMyTDsKICBzdGF0aWMgY29uc3QgamludCBBTExfRkxBR1MgPSA0MDk1
TDsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgMjEg
Ii4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbGFuZy9DbGFzcy5oIiAyCiMgMSAiamF2YS9zZWN1
cml0eS9Qcm90ZWN0aW9uRG9tYWluLmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgpleHRl
cm4gIkphdmEiCnsKICBuYW1lc3BhY2UgamF2YQogIHsKICAgIG5hbWVzcGFjZSBzZWN1cml0eQog
ICAgewogICAgICBjbGFzcyBQcm90ZWN0aW9uRG9tYWluOwogICAgICBjbGFzcyBQZXJtaXNzaW9u
OwogICAgICBjbGFzcyBQZXJtaXNzaW9uQ29sbGVjdGlvbjsKICAgICAgY2xhc3MgQ29kZVNvdXJj
ZTsKICAgIH0KICB9Cn07CgpjbGFzcyA6OmphdmE6OnNlY3VyaXR5OjpQcm90ZWN0aW9uRG9tYWlu
IDogcHVibGljIDo6amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIFByb3RlY3Rpb25Eb21h
aW4gKDo6amF2YTo6c2VjdXJpdHk6OkNvZGVTb3VyY2UgKiwgOjpqYXZhOjpzZWN1cml0eTo6UGVy
bWlzc2lvbkNvbGxlY3Rpb24gKik7CiAgOjpqYXZhOjpzZWN1cml0eTo6Q29kZVNvdXJjZSAqZ2V0
Q29kZVNvdXJjZSAoKSB7IHJldHVybiBjb2RlX3NvdXJjZTsgfQogIDo6amF2YTo6c2VjdXJpdHk6
OlBlcm1pc3Npb25Db2xsZWN0aW9uICpnZXRQZXJtaXNzaW9ucyAoKSB7IHJldHVybiBwZXJtczsg
fQogIHZpcnR1YWwgamJvb2xlYW4gaW1wbGllcyAoOjpqYXZhOjpzZWN1cml0eTo6UGVybWlzc2lv
biAqKTsKICB2aXJ0dWFsIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1N0cmluZyAoKTsKcHJpdmF0
ZToKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmxpbmVzZXA7CiAgOjpqYXZhOjpzZWN1
cml0eTo6Q29kZVNvdXJjZSAqY29kZV9zb3VyY2U7CiAgOjpqYXZhOjpzZWN1cml0eTo6UGVybWlz
c2lvbkNvbGxlY3Rpb24gKnBlcm1zOwpwdWJsaWM6CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNs
YXNzIGNsYXNzJDsKfTsKIyAyMiAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9sYW5nL0NsYXNz
LmgiIDIKCgpleHRlcm4gIkMiIHZvaWQgX0p2X0luaXRDbGFzcyAoamNsYXNzIGtsYXNzKTsKZXh0
ZXJuICJDIiB2b2lkIF9Kdl9SZWdpc3RlckNsYXNzZXMgKGpjbGFzcyAqY2xhc3Nlcyk7CgoKZXh0
ZXJuICJDIiB2b2lkICpfSnZfTG9va3VwSW50ZXJmYWNlTWV0aG9kSWR4IChqY2xhc3Mga2xhc3Ms
IGpjbGFzcyBpZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgbWV0aF9pZHgpOwoKCgoKZW51bQp7CiAgSlZfU1RBVEVfTk9USElORyA9IDAsCgog
IEpWX1NUQVRFX1BSRUxPQURJTkcgPSAxLAogIEpWX1NUQVRFX0xPQURJTkcgPSAzLAogIEpWX1NU
QVRFX0xPQURFRCA9IDUsCgogIEpWX1NUQVRFX0NPTVBJTEVEID0gNiwKCiAgSlZfU1RBVEVfUFJF
UEFSRUQgPSA3LAogIEpWX1NUQVRFX0xJTktFRCA9IDksCgogIEpWX1NUQVRFX0lOX1BST0dSRVNT
ID0gMTAsCiAgSlZfU1RBVEVfRE9ORSA9IDEyLAoKICBKVl9TVEFURV9FUlJPUiA9IDE0Cn07Cgpz
dHJ1Y3QgX0p2X0ZpZWxkOwpzdHJ1Y3QgX0p2X1ZUYWJsZTsKdW5pb24gX0p2X3dvcmQ7CnN0cnVj
dCBfSnZfQXJyYXlWVGFibGU7CgpzdHJ1Y3QgX0p2X0NvbnN0YW50cwp7CiAgamludCBzaXplOwog
IGpieXRlICp0YWdzOwogIF9Kdl93b3JkICpkYXRhOwp9OwoKc3RydWN0IF9Kdl9NZXRob2QKewoK
ICBfSnZfVXRmOENvbnN0ICpuYW1lOwoKICBfSnZfVXRmOENvbnN0ICpzaWduYXR1cmU7CgogIF9K
dl91c2hvcnQgYWNjZmxhZ3M7CgogIF9Kdl91c2hvcnQgaW5kZXg7CgogIHZvaWQgKm5jb2RlOwoK
CiAgX0p2X1V0ZjhDb25zdCAqKnRocm93czsKCiAgX0p2X01ldGhvZCAqZ2V0TmV4dE1ldGhvZCAo
KQogIHsgcmV0dXJuIHRoaXMgKyAxOyB9Cn07CgoKdW5pb24gX0p2X0lEaXNwYXRjaFRhYmxlCnsK
ICBzdHJ1Y3QKICB7CgogICAganNob3J0IGlpbmRleDsKICAgIGpzaG9ydCBpdGFibGVfbGVuZ3Ro
OwoKICAgIHZvaWQgKippdGFibGU7CiAgfSBjbHM7CgogIHN0cnVjdAogIHsKCiAgICBqc2hvcnQg
KmlvZmZzZXRzOwogIH0gaWZhY2U7Cn07CgoKc3RydWN0IF9Kdl9pZmFjZXMKewogIGpjbGFzcyAq
bGlzdDsKICBqc2hvcnQgbGVuOwogIGpzaG9ydCBjb3VudDsKfTsKCnN0cnVjdCBfSnZfTWV0aG9k
U3ltYm9sCnsKICBfSnZfVXRmOENvbnN0ICpjbGFzc19uYW1lOwogIF9Kdl9VdGY4Q29uc3QgKm5h
bWU7CiAgX0p2X1V0ZjhDb25zdCAqc2lnbmF0dXJlOwp9OwoKc3RydWN0IF9Kdl9PZmZzZXRUYWJs
ZQp7CiAgamludCBzdGF0ZTsKICBqaW50IG9mZnNldHNbXTsKfTsKCgoKCgpjbGFzcyBqYXZhOjps
YW5nOjpDbGFzcyA6IHB1YmxpYyBqYXZhOjpsYW5nOjpPYmplY3QKewpwdWJsaWM6CiAgc3RhdGlj
IGpjbGFzcyBmb3JOYW1lIChqc3RyaW5nIGNsYXNzTmFtZSwgamJvb2xlYW4gaW5pdGlhbGl6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGphdmE6Omxhbmc6OkNsYXNzTG9hZGVyICpsb2FkZXIp
OwogIHN0YXRpYyBqY2xhc3MgZm9yTmFtZSAoanN0cmluZyBjbGFzc05hbWUpOwogIEpBcnJheTxq
Y2xhc3M+ICpnZXRDbGFzc2VzICh2b2lkKTsKCiAgamF2YTo6bGFuZzo6Q2xhc3NMb2FkZXIgKmdl
dENsYXNzTG9hZGVyICh2b2lkKTsKCiAgamF2YTo6bGFuZzo6cmVmbGVjdDo6Q29uc3RydWN0b3Ig
KmdldENvbnN0cnVjdG9yIChKQXJyYXk8amNsYXNzPiAqKTsKICBKQXJyYXk8amF2YTo6bGFuZzo6
cmVmbGVjdDo6Q29uc3RydWN0b3IgKj4gKmdldENvbnN0cnVjdG9ycyAodm9pZCk7CiAgamF2YTo6
bGFuZzo6cmVmbGVjdDo6Q29uc3RydWN0b3IgKmdldERlY2xhcmVkQ29uc3RydWN0b3IgKEpBcnJh
eTxqY2xhc3M+ICopOwogIEpBcnJheTxqYXZhOjpsYW5nOjpyZWZsZWN0OjpDb25zdHJ1Y3RvciAq
PiAqZ2V0RGVjbGFyZWRDb25zdHJ1Y3RvcnMgKHZvaWQpOwogIGphdmE6Omxhbmc6OnJlZmxlY3Q6
OkZpZWxkICpnZXREZWNsYXJlZEZpZWxkIChqc3RyaW5nKTsKICBKQXJyYXk8amF2YTo6bGFuZzo6
cmVmbGVjdDo6RmllbGQgKj4gKmdldERlY2xhcmVkRmllbGRzICh2b2lkKTsKICBqYXZhOjpsYW5n
OjpyZWZsZWN0OjpNZXRob2QgKmdldERlY2xhcmVkTWV0aG9kIChqc3RyaW5nLCBKQXJyYXk8amNs
YXNzPiAqKTsKICBKQXJyYXk8amF2YTo6bGFuZzo6cmVmbGVjdDo6TWV0aG9kICo+ICpnZXREZWNs
YXJlZE1ldGhvZHMgKHZvaWQpOwoKICBKQXJyYXk8amNsYXNzPiAqZ2V0RGVjbGFyZWRDbGFzc2Vz
ICh2b2lkKTsKICBqY2xhc3MgZ2V0RGVjbGFyaW5nQ2xhc3MgKHZvaWQpOwoKICBqYXZhOjpsYW5n
OjpyZWZsZWN0OjpGaWVsZCAqZ2V0RmllbGQgKGpzdHJpbmcpOwpwcml2YXRlOgogIGppbnQgX2dl
dEZpZWxkcyAoSkFycmF5PGphdmE6Omxhbmc6OnJlZmxlY3Q6OkZpZWxkICo+ICpyZXN1bHQsIGpp
bnQgb2Zmc2V0KTsKICBKQXJyYXk8amF2YTo6bGFuZzo6cmVmbGVjdDo6Q29uc3RydWN0b3IgKj4g
Kl9nZXRDb25zdHJ1Y3RvcnMgKGpib29sZWFuKTsKICBqYXZhOjpsYW5nOjpyZWZsZWN0OjpGaWVs
ZCAqZ2V0RmllbGQgKGpzdHJpbmcsIGppbnQpOwogIGppbnQgX2dldE1ldGhvZHMgKEpBcnJheTxq
YXZhOjpsYW5nOjpyZWZsZWN0OjpNZXRob2QgKj4gKnJlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICBqaW50IG9mZnNldCk7CiAgamF2YTo6bGFuZzo6cmVmbGVjdDo6RmllbGQgKmdldFByaXZhdGVG
aWVsZCAoanN0cmluZyk7CiAgamF2YTo6bGFuZzo6cmVmbGVjdDo6TWV0aG9kICpnZXRQcml2YXRl
TWV0aG9kIChqc3RyaW5nLCBKQXJyYXk8amNsYXNzPiAqKTsKICBqYXZhOjpzZWN1cml0eTo6UHJv
dGVjdGlvbkRvbWFpbiAqZ2V0UHJvdGVjdGlvbkRvbWFpbjAgKCk7CgpwdWJsaWM6CiAgSkFycmF5
PGphdmE6Omxhbmc6OnJlZmxlY3Q6OkZpZWxkICo+ICpnZXRGaWVsZHMgKHZvaWQpOwoKICBKQXJy
YXk8amNsYXNzPiAqZ2V0SW50ZXJmYWNlcyAodm9pZCk7CgogIHZvaWQgZ2V0U2lnbmF0dXJlIChq
YXZhOjpsYW5nOjpTdHJpbmdCdWZmZXIgKmJ1ZmZlcik7CiAgc3RhdGljIGpzdHJpbmcgZ2V0U2ln
bmF0dXJlIChKQXJyYXk8amNsYXNzPiAqLCBqYm9vbGVhbiBpc19jb25zdHJ1Y3Rvcik7CiAgamF2
YTo6bGFuZzo6cmVmbGVjdDo6TWV0aG9kICpnZXRNZXRob2QgKGpzdHJpbmcsIEpBcnJheTxqY2xh
c3M+ICopOwogIEpBcnJheTxqYXZhOjpsYW5nOjpyZWZsZWN0OjpNZXRob2QgKj4gKmdldE1ldGhv
ZHMgKHZvaWQpOwoKICBpbmxpbmUgamludCBnZXRNb2RpZmllcnMgKHZvaWQpCiAgICB7CiAgICAg
IHJldHVybiBhY2NmbGFnczsKICAgIH0KCiAganN0cmluZyBnZXROYW1lICh2b2lkKTsKCiAgamF2
YTo6bmV0OjpVUkwgKmdldFJlc291cmNlIChqc3RyaW5nIHJlc291cmNlTmFtZSk7CiAgamF2YTo6
aW86OklucHV0U3RyZWFtICpnZXRSZXNvdXJjZUFzU3RyZWFtIChqc3RyaW5nIHJlc291cmNlTmFt
ZSk7CiAgSkFycmF5PGpvYmplY3Q+ICpnZXRTaWduZXJzICh2b2lkKTsKCiAgaW5saW5lIGpjbGFz
cyBnZXRTdXBlcmNsYXNzICh2b2lkKQogICAgewogICAgICByZXR1cm4gc3VwZXJjbGFzczsKICAg
IH0KCiAgaW5saW5lIGpib29sZWFuIGlzQXJyYXkgKHZvaWQpCiAgICB7CiAgICAgIHJldHVybiBu
YW1lLT5kYXRhWzBdID09ICdbJzsKICAgIH0KCiAgaW5saW5lIGpjbGFzcyBnZXRDb21wb25lbnRU
eXBlICh2b2lkKQogICAgewogICAgICByZXR1cm4gaXNBcnJheSAoKSA/ICgqIChqY2xhc3MgKikg
Jm1ldGhvZHMpIDogMDsKICAgIH0KCiAgamJvb2xlYW4gaXNBc3NpZ25hYmxlRnJvbSAoamNsYXNz
IGNscyk7CiAgamJvb2xlYW4gaXNJbnN0YW5jZSAoam9iamVjdCBvYmopOwoKICBpbmxpbmUgamJv
b2xlYW4gaXNJbnRlcmZhY2UgKHZvaWQpCiAgewogICAgcmV0dXJuIChhY2NmbGFncyAmIGphdmE6
Omxhbmc6OnJlZmxlY3Q6Ok1vZGlmaWVyOjpJTlRFUkZBQ0UpICE9IDA7CiAgfQoKICBpbmxpbmUg
amJvb2xlYW4gaXNQcmltaXRpdmUgKHZvaWQpCiAgICB7CiAgICAgIHJldHVybiB2dGFibGUgPT0g
KChfSnZfVlRhYmxlICopIC0xKTsKICAgIH0KCiAgam9iamVjdCBuZXdJbnN0YW5jZSAodm9pZCk7
CiAganN0cmluZyB0b1N0cmluZyAodm9pZCk7CgoKICBqaW50IHNpemUgKHZvaWQpCiAgICB7CiAg
ICAgIHJldHVybiBzaXplX2luX2J5dGVzOwogICAgfQoKCiAgdm9pZCBmaW5hbGl6ZSAoKTsKCgoK
ICBDbGFzcyAoKTsKCiAgc3RhdGljIGphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKCnByaXZhdGU6
CgogIHZvaWQgY2hlY2tNZW1iZXJBY2Nlc3MgKGppbnQgZmxhZ3MpOwoKICB2b2lkIGluaXRpYWxp
emVDbGFzcyAodm9pZCk7CgoKICBmcmllbmQgX0p2X01ldGhvZCAqX0p2X0dldE1ldGhvZExvY2Fs
IChqY2xhc3Mga2xhc3MsIF9Kdl9VdGY4Q29uc3QgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0p2X1V0ZjhDb25zdCAqc2lnbmF0dXJlKTsKICBmcmllbmQg
amJvb2xlYW4gX0p2X0lzQXNzaWduYWJsZUZyb20oamNsYXNzLCBqY2xhc3MpOwogIGZyaWVuZCBq
Ym9vbGVhbiBfSnZfSW50ZXJmYWNlQXNzaWduYWJsZUZyb20gKGpjbGFzcywgamNsYXNzKTsKICBm
cmllbmQgdm9pZCAqX0p2X0xvb2t1cEludGVyZmFjZU1ldGhvZElkeCAoamNsYXNzIGtsYXNzLCBq
Y2xhc3MgaWZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBtZXRob2RfaWR4KTsKCiAgaW5saW5lIGZyaWVuZCB2b2lkCiAgX0p2X0luaXRDbGFzcyAo
amNsYXNzIGtsYXNzKQogIHsKICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChrbGFzcy0+c3RhdGUg
PT0gSlZfU1RBVEVfRE9ORSwgdHJ1ZSkpCiAgICAgIHJldHVybjsKICAgIGtsYXNzLT5pbml0aWFs
aXplQ2xhc3MgKCk7CiAgfQoKICBmcmllbmQgX0p2X01ldGhvZCogX0p2X0xvb2t1cERlY2xhcmVk
TWV0aG9kIChqY2xhc3MsIF9Kdl9VdGY4Q29uc3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfSnZfVXRmOENvbnN0Kik7CiAgZnJpZW5kIGpmaWVsZElE
IEp2R2V0Rmlyc3RJbnN0YW5jZUZpZWxkIChqY2xhc3MpOwogIGZyaWVuZCBqaW50IEp2TnVtSW5z
dGFuY2VGaWVsZHMgKGpjbGFzcyk7CiAgZnJpZW5kIGpmaWVsZElEIEp2R2V0Rmlyc3RTdGF0aWNG
aWVsZCAoamNsYXNzKTsKICBmcmllbmQgamludCBKdk51bVN0YXRpY0ZpZWxkcyAoamNsYXNzKTsK
CiAgZnJpZW5kIGpvYmplY3QgX0p2X0FsbG9jT2JqZWN0IChqY2xhc3MsIGppbnQpOwogIGZyaWVu
ZCB2b2lkICpfSnZfQWxsb2NPYmogKGppbnQsIGpjbGFzcyk7CiAgZnJpZW5kIHZvaWQgKl9Kdl9B
bGxvY1B0ckZyZWVPYmogKGppbnQsIGpjbGFzcyk7CiAgZnJpZW5kIHZvaWQgKl9Kdl9BbGxvY0Fy
cmF5IChqaW50LCBqY2xhc3MpOwoKICBmcmllbmQgam9iamVjdCBfSnZfSk5JX1RvUmVmbGVjdGVk
RmllbGQgKF9Kdl9KTklFbnYgKiwgamNsYXNzLCBqZmllbGRJRCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuKTsKICBmcmllbmQgam9iamVjdCBfSnZf
Sk5JX1RvUmVmbGVjdGVkTWV0aG9kIChfSnZfSk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuKTsKICBm
cmllbmQgamZpZWxkSUQgX0p2X0Zyb21SZWZsZWN0ZWRGaWVsZCAoamF2YTo6bGFuZzo6cmVmbGVj
dDo6RmllbGQgKik7CgogIGZyaWVuZCBqbWV0aG9kSUQgX0p2X0Zyb21SZWZsZWN0ZWRNZXRob2Qg
KGphdmE6Omxhbmc6OnJlZmxlY3Q6Ok1ldGhvZCAqKTsKICBmcmllbmQgam1ldGhvZElEIF9Kdl9G
cm9tUmVmbGVjdGVkQ29uc3RydWN0b3IgKGphdmE6Omxhbmc6OnJlZmxlY3Q6OkNvbnN0cnVjdG9y
ICopOwogIGZyaWVuZCBqaW50IEp2TnVtTWV0aG9kcyAoamNsYXNzKTsKICBmcmllbmQgam1ldGhv
ZElEIEp2R2V0Rmlyc3RNZXRob2QgKGpjbGFzcyk7CgoKICBmcmllbmQgY2xhc3MgamF2YTo6bGFu
Zzo6Q2xhc3NMb2FkZXI7CgogIGZyaWVuZCBjbGFzcyBqYXZhOjppbzo6T2JqZWN0T3V0cHV0U3Ry
ZWFtOwogIGZyaWVuZCBjbGFzcyBqYXZhOjppbzo6T2JqZWN0SW5wdXRTdHJlYW07CiAgZnJpZW5k
IGNsYXNzIGphdmE6OmlvOjpPYmplY3RTdHJlYW1DbGFzczsKCiAgZnJpZW5kIHZvaWQgX0p2X1dh
aXRGb3JTdGF0ZSAoamNsYXNzLCBpbnQpOwogIGZyaWVuZCB2b2lkIF9Kdl9SZWdpc3RlckNsYXNz
ZXMgKGpjbGFzcyAqY2xhc3Nlcyk7CiAgZnJpZW5kIHZvaWQgX0p2X1JlZ2lzdGVyQ2xhc3NIb29r
RGVmYXVsdCAoamNsYXNzIGtsYXNzKTsKICBmcmllbmQgdm9pZCBfSnZfUmVnaXN0ZXJJbml0aWF0
aW5nTG9hZGVyIChqY2xhc3MsamF2YTo6bGFuZzo6Q2xhc3NMb2FkZXIqKTsKICBmcmllbmQgdm9p
ZCBfSnZfVW5yZWdpc3RlckNsYXNzIChqY2xhc3MpOwogIGZyaWVuZCBqY2xhc3MgX0p2X0ZpbmRD
bGFzcyAoX0p2X1V0ZjhDb25zdCAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGphdmE6Omxhbmc6OkNsYXNzTG9hZGVyICpsb2FkZXIpOwogIGZyaWVuZCBqY2xhc3MgX0p2X0Zp
bmRDbGFzc0luQ2FjaGUgKF9Kdl9VdGY4Q29uc3QgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgamF2YTo6bGFuZzo6Q2xhc3NMb2FkZXIgKmxvYWRlcik7CiAgZnJp
ZW5kIHZvaWQgX0p2X05ld0FycmF5Q2xhc3MgKGpjbGFzcyBlbGVtZW50LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqYXZhOjpsYW5nOjpDbGFzc0xvYWRlciAqbG9hZGVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSnZfVlRhYmxlICphcnJheV92dGFibGUgPSAw
KTsKICBmcmllbmQgamNsYXNzIF9Kdl9OZXdDbGFzcyAoX0p2X1V0ZjhDb25zdCAqbmFtZSwgamNs
YXNzIHN1cGVyY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmE6Omxhbmc6
OkNsYXNzTG9hZGVyICpsb2FkZXIpOwogIGZyaWVuZCB2b2lkIF9Kdl9Jbml0TmV3Q2xhc3NGaWVs
ZHMgKGpjbGFzcyBrbGFzcyk7CgoKICBmcmllbmQgdm9pZCBfSnZfSW5pdFByaW1DbGFzcyAoamNs
YXNzLCBjaGFyICosIGNoYXIsIGludCwgX0p2X0FycmF5VlRhYmxlICopOwoKICBmcmllbmQgdm9p
ZCBfSnZfUHJlcGFyZUNvbXBpbGVkQ2xhc3MgKGpjbGFzcyk7CiAgZnJpZW5kIHZvaWQgX0p2X1By
ZXBhcmVDb25zdGFudFRpbWVUYWJsZXMgKGpjbGFzcyk7CiAgZnJpZW5kIGpzaG9ydCBfSnZfR2V0
SW50ZXJmYWNlcyAoamNsYXNzLCBfSnZfaWZhY2VzICopOwogIGZyaWVuZCB2b2lkIF9Kdl9HZW5l
cmF0ZUlUYWJsZSAoamNsYXNzLCBfSnZfaWZhY2VzICosIGpzaG9ydCAqKTsKICBmcmllbmQganN0
cmluZyBfSnZfR2V0TWV0aG9kU3RyaW5nKGpjbGFzcywgX0p2X1V0ZjhDb25zdCAqKTsKICBmcmll
bmQganNob3J0IF9Kdl9BcHBlbmRQYXJ0aWFsSVRhYmxlIChqY2xhc3MsIGpjbGFzcywgdm9pZCAq
KiwganNob3J0KTsKICBmcmllbmQganNob3J0IF9Kdl9GaW5kSUluZGV4IChqY2xhc3MgKiwganNo
b3J0ICosIGpzaG9ydCk7CiAgZnJpZW5kIHZvaWQgX0p2X0xpbmtPZmZzZXRUYWJsZSAoamNsYXNz
KTsKICBmcmllbmQgdm9pZCBfSnZfTGF5b3V0VlRhYmxlTWV0aG9kcyAoamNsYXNzIGtsYXNzKTsK
ICBmcmllbmQgdm9pZCBfSnZfU2V0VlRhYmxlRW50cmllcyAoamNsYXNzLCBfSnZfVlRhYmxlICop
OwogIGZyaWVuZCB2b2lkIF9Kdl9NYWtlVlRhYmxlIChqY2xhc3MpOwoKCgogIGlubGluZSBmcmll
bmQgamNsYXNzCiAgX0p2X0dldEFycmF5Q2xhc3MgKGpjbGFzcyBrbGFzcywgamF2YTo6bGFuZzo6
Q2xhc3NMb2FkZXIgKmxvYWRlcikKICB7CiAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoIWtsYXNz
LT5hcnJheWNsYXNzLCBmYWxzZSkpCiAgICAgIF9Kdl9OZXdBcnJheUNsYXNzIChrbGFzcywgbG9h
ZGVyKTsKICAgIHJldHVybiBrbGFzcy0+YXJyYXljbGFzczsKICB9CgoKICBmcmllbmQgamJvb2xl
YW4gX0p2X0lzSW50ZXJwcmV0ZWRDbGFzcyAoamNsYXNzKTsKICBmcmllbmQgdm9pZCBfSnZfSW5p
dEZpZWxkIChqb2JqZWN0LCBqY2xhc3MsIF9Kdl9GaWVsZCopOwogIGZyaWVuZCBpbnQgX0p2X0Rl
dGVybWluZVZUYWJsZUluZGV4IChqY2xhc3MsIF9Kdl9VdGY4Q29uc3QgKiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0p2X1V0ZjhDb25zdCopOwogIGZyaWVuZCB2b2lk
IF9Kdl9Jbml0RmllbGQgKGpvYmplY3QsIGpjbGFzcywgaW50KTsKICBmcmllbmQgX0p2X3dvcmQg
X0p2X1Jlc29sdmVQb29sRW50cnkgKGpjbGFzcywgaW50KTsKICBmcmllbmQgX0p2X01ldGhvZCAq
X0p2X1NlYXJjaE1ldGhvZEluQ2xhc3MgKGpjbGFzcyBjbHMsIGpjbGFzcyBrbGFzcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Kdl9VdGY4Q29uc3QgKm1l
dGhvZF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0p2X1V0ZjhDb25zdCAqbWV0aG9kX3NpZ25hdHVyZSk7CgogIGZyaWVuZCB2b2lkIF9Kdl9QcmVw
YXJlQ2xhc3MgKGpjbGFzcyk7CgogIGZyaWVuZCBjbGFzcyBfSnZfQ2xhc3NSZWFkZXI7CiAgZnJp
ZW5kIGNsYXNzIF9Kdl9JbnRlcnBDbGFzczsKICBmcmllbmQgY2xhc3MgX0p2X0ludGVycE1ldGhv
ZDsKCgoKICBmcmllbmQgdm9pZCAqX0p2X01hcmtPYmogKHZvaWQgKiwgdm9pZCAqLCB2b2lkICos
IHZvaWQgKik7CgoKICBmcmllbmQgY2xhc3MgX0p2X0J5dGVjb2RlVmVyaWZpZXI7CgoKICBqY2xh
c3MgbmV4dDsKCiAgX0p2X1V0ZjhDb25zdCAqbmFtZTsKCiAgX0p2X3VzaG9ydCBhY2NmbGFnczsK
CiAgamNsYXNzIHN1cGVyY2xhc3M7CgogIF9Kdl9Db25zdGFudHMgY29uc3RhbnRzOwoKCiAgX0p2
X01ldGhvZCAqbWV0aG9kczsKCgogIGpzaG9ydCBtZXRob2RfY291bnQ7CgogIGpzaG9ydCB2dGFi
bGVfbWV0aG9kX2NvdW50OwoKICBfSnZfRmllbGQgKmZpZWxkczsKCiAgamludCBzaXplX2luX2J5
dGVzOwoKICBqc2hvcnQgZmllbGRfY291bnQ7CgogIGpzaG9ydCBzdGF0aWNfZmllbGRfY291bnQ7
CgogIF9Kdl9WVGFibGUgKnZ0YWJsZTsKCiAgX0p2X09mZnNldFRhYmxlICpvdGFibGU7CgogIF9K
dl9NZXRob2RTeW1ib2wgKm90YWJsZV9zeW1zOwoKICBqY2xhc3MgKmludGVyZmFjZXM7CgogIGph
dmE6Omxhbmc6OkNsYXNzTG9hZGVyICpsb2FkZXI7CgogIGpzaG9ydCBpbnRlcmZhY2VfY291bnQ7
CgogIGpieXRlIHN0YXRlOwoKCiAgamF2YTo6bGFuZzo6VGhyZWFkICp0aHJlYWQ7CgogIGpzaG9y
dCBkZXB0aDsKCiAgamNsYXNzICphbmNlc3RvcnM7CgogIF9Kdl9JRGlzcGF0Y2hUYWJsZSAqaWR0
OwoKICBqY2xhc3MgYXJyYXljbGFzczsKCiAgamF2YTo6c2VjdXJpdHk6OlByb3RlY3Rpb25Eb21h
aW4gKnByb3RlY3Rpb25Eb21haW47Cn07CiMgMjcgImluY2x1ZGUvamF2YS1nYy5oIiAyCiMgMSAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz
CmV4dGVybiAiQyIgewoKCgoKIyAxICIveDEvZWdjcy9idWlsZC9nY2MvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCmV4dGVybiB2b2lkICog
bWVtY3B5ICh2b2lkICogX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqIF9fcmVzdHJp
Y3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCAqIG1lbW1vdmUg
KHZvaWQgKiBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqIF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIHZvaWQgKiBtZW1jY3B5ICh2b2lkICogX19kZXN0LCBfX2NvbnN0IHZv
aWQgKiBfX3NyYywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZv
aWQgKiBtZW1zZXQgKHZvaWQgKiBfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKiBfX3MxLCBfX2NvbnN0IHZvaWQgKiBf
X3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgKiBtZW1jaHIgKF9fY29u
c3Qgdm9pZCAqIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g
dm9pZCAqIHJhd21lbWNociAoX19jb25zdCB2b2lkICogX19zLCBpbnQgX19jKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJuY3B5
IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19y
ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7
CgoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpIHRocm93
ICgpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh
ciAqX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2Nv
bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cgKCk7CgpleHRlcm4gc2l6
ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgojIDEgIi91c3IvaW5jbHVk
ZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYg
c3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CiAgc3RydWN0IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNb
Nl07CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQg
Kl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2Nh
bGVfdDsKIyAxMDAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKZXh0ZXJuIGludCBfX3N0
cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIF9fbG9jYWxl
X3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rl
c3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gY2hhciAqX19zdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJv
dyAoKTsKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CiMgMTQ2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNo
YXIgKnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpOwoKZXh0ZXJu
IGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBjaGFyICpzdHJjaHJudWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29u
c3QgY2hhciAqX19yZWplY3QpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2Nv
bnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkgdGhyb3cgKCk7CgpleHRlcm4g
Y2hhciAqc3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQp
IHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNr
LCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3Ry
Y2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxl
KSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5
c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg
KnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2RlbGltKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sIGNoYXIgKipfX3Jl
c3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNo
YXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwgY2hh
ciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CiMgMTk0ICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDMKZXh0ZXJuIHZvaWQgKiBtZW1tZW0gKF9fY29uc3Qgdm9pZCAqIF9faGF5c3Rh
Y2ssIHNpemVfdCBfX2hheXN0YWNrbGVuLCBfX2NvbnN0IHZvaWQgKiBfX25lZWRsZSwgc2l6ZV90
IF9fbmVlZGxlbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICogX19tZW1wY3B5ICh2b2lk
ICogX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqIF9fcmVzdHJpY3QgX19zcmMsIHNp
emVfdCBfX24pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgKiBtZW1wY3B5ICh2b2lkICogX19yZXN0
cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqIF9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p
IHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykg
dGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJp
bmcsIHNpemVfdCBfX21heGxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3Ig
KGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cmVycm9yX3IgKGlu
dCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CmV4dGVy
biBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19i
dWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqIF9fcywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKiBf
X3NyYywgdm9pZCAqIF9fZGVzdCwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQg
Ynplcm8gKHZvaWQgKiBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmNt
cCAoX19jb25zdCB2b2lkICogX19zMSwgX19jb25zdCB2b2lkICogX19zMiwgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f
YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGlu
dCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZmZzIChpbnQgX19pKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKCgoKZXh0ZXJuIGludCBmZnNsIChsb25nIGludCBf
X2wpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKX19leHRlbnNpb25fXyBleHRl
cm4gaW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1
dGVfXyAoKGNvbnN0KSk7CgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcCAoX19jb25zdCBjaGFy
ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpIHRocm93ICgpOwpleHRlcm4gaW50IHN0cmNhc2Vj
bXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq
X19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21w
X2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9f
bG9jKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAoX19jb25zdCBjaGFy
ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2Mp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBf
X3N0cmluZ3AsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy
ICpfX3MyKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRo
cm93ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3Qs
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAq
c3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fc3JjKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVz
dHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p
IHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0
LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJu
IHZvaWQgKiBtZW1mcm9iICh2b2lkICogX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgp
OwojIDM1MCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KIyAyOCAiaW5jbHVkZS9qYXZhLWdj
LmgiIDIKCmV4dGVybiAiQyIgdm9pZCAqIEdDX2djal9tYWxsb2Moc2l6ZV90LCB2b2lkICopOwpl
eHRlcm4gIkMiIHZvaWQgKiBHQ19tYWxsb2NfYXRvbWljKHNpemVfdCk7CgpleHRlcm4gIkMiIHZv
aWQgKiBHQ19sb2NhbF9nY2pfbWFsbG9jKHNpemVfdCwgdm9pZCAqKTsKZXh0ZXJuICJDIiB2b2lk
ICogR0NfbG9jYWxfbWFsbG9jX2F0b21pYyhzaXplX3QpOwoKCmlubGluZSB2b2lkICoKX0p2X0Fs
bG9jT2JqIChqc2l6ZSBzaXplLCBqY2xhc3Mga2xhc3MpCnsKCgoKICByZXR1cm4gR0NfbG9jYWxf
Z2NqX21hbGxvYyAoc2l6ZSwga2xhc3MtPnZ0YWJsZSk7CgoKCn0KCmlubGluZSB2b2lkICoKX0p2
X0FsbG9jUHRyRnJlZU9iaiAoanNpemUgc2l6ZSwgamNsYXNzIGtsYXNzKQp7CgoKICAgIHZvaWQg
KiBvYmogPSBHQ19sb2NhbF9tYWxsb2NfYXRvbWljKHNpemUpOwoKCgogICooKF9Kdl9WVGFibGUg
KiopIG9iaikgPSBrbGFzcy0+dnRhYmxlOwoKCgoKCgoKICByZXR1cm4gb2JqOwp9CiMgMjYgIi4u
Ly4uLy4uL2djYy9saWJqYXZhL2luY2x1ZGUvanZtLmgiIDIKCgoKCiMgMSAiLi4vLi4vLi4vZ2Nj
L2xpYmphdmEvZ2NqL2NuaS5oIiAxCiMgMjMgIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9jbmku
aCIKZXh0ZXJuIGlubGluZSBqb2JqZWN0Ckp2QWxsb2NPYmplY3QgKGpjbGFzcyBjbHMpCnsKICBy
ZXR1cm4gX0p2X0FsbG9jT2JqZWN0IChjbHMsIGNscy0+c2l6ZSgpKTsKfQoKZXh0ZXJuIGlubGlu
ZSBqb2JqZWN0Ckp2QWxsb2NPYmplY3QgKGpjbGFzcyBjbHMsIGpzaXplIHN6KQp7CiAgcmV0dXJu
IF9Kdl9BbGxvY09iamVjdCAoY2xzLCBzeik7Cn0KCmV4dGVybiAiQyIganN0cmluZyBfSnZfTmV3
U3RyaW5nVVRGIChjb25zdCBjaGFyICpieXRlcyk7CmV4dGVybiAiQyIgdm9pZCBfSnZfSW5pdENs
YXNzIChqY2xhc3MpOwoKZXh0ZXJuIGlubGluZSB2b2lkCkp2SW5pdENsYXNzIChqY2xhc3MgY2xz
KQp7CiAgcmV0dXJuIF9Kdl9Jbml0Q2xhc3MgKGNscyk7Cn0KCmV4dGVybiBpbmxpbmUganN0cmlu
ZwpKdkFsbG9jU3RyaW5nIChqc2l6ZSBzeikKewogIHJldHVybiBfSnZfQWxsb2NTdHJpbmcgKHN6
KTsKfQoKZXh0ZXJuIGlubGluZSBqc3RyaW5nCkp2TmV3U3RyaW5nIChjb25zdCBqY2hhciAqY2hh
cnMsIGpzaXplIGxlbikKewogIHJldHVybiBfSnZfTmV3U3RyaW5nIChjaGFycywgbGVuKTsKfQoK
ZXh0ZXJuIGlubGluZSBqc3RyaW5nCkp2TmV3U3RyaW5nTGF0aW4xIChjb25zdCBjaGFyICpieXRl
cywganNpemUgbGVuKQp7CiAgcmV0dXJuIF9Kdl9OZXdTdHJpbmdMYXRpbjEgKGJ5dGVzLCBsZW4p
Owp9CgpleHRlcm4gaW5saW5lIGpzdHJpbmcKSnZOZXdTdHJpbmdMYXRpbjEgKGNvbnN0IGNoYXIg
KmJ5dGVzKQp7CiAgcmV0dXJuIF9Kdl9OZXdTdHJpbmdMYXRpbjEgKGJ5dGVzLCBzdHJsZW4gKGJ5
dGVzKSk7Cn0KCmV4dGVybiBpbmxpbmUgamNoYXIgKgpfSnZfR2V0U3RyaW5nQ2hhcnMgKGpzdHJp
bmcgc3RyKQp7CiAgcmV0dXJuIChqY2hhciopKChjaGFyKikgc3RyLT5kYXRhICsgc3RyLT5ib2Zm
c2V0KTsKfQoKZXh0ZXJuIGlubGluZSBqY2hhcioKSnZHZXRTdHJpbmdDaGFycyAoanN0cmluZyBz
dHIpCnsKICByZXR1cm4gX0p2X0dldFN0cmluZ0NoYXJzIChzdHIpOwp9CgpleHRlcm4gaW5saW5l
IGpzaXplCkp2R2V0U3RyaW5nVVRGTGVuZ3RoIChqc3RyaW5nIHN0cmluZykKewogIHJldHVybiBf
SnZfR2V0U3RyaW5nVVRGTGVuZ3RoIChzdHJpbmcpOwp9CgpleHRlcm4gaW5saW5lIGpzaXplCkp2
R2V0U3RyaW5nVVRGUmVnaW9uIChqc3RyaW5nIHN0ciwganNpemUgc3RhcnQsIGpzaXplIGxlbiwg
Y2hhciAqYnVmKQp7CiAgcmV0dXJuIF9Kdl9HZXRTdHJpbmdVVEZSZWdpb24gKHN0ciwgc3RhcnQs
IGxlbiwgYnVmKTsKfQoKZXh0ZXJuIGlubGluZSBqc3RyaW5nCkp2TmV3U3RyaW5nVVRGIChjb25z
dCBjaGFyICpieXRlcykKewogIHJldHVybiBfSnZfTmV3U3RyaW5nVVRGIChieXRlcyk7Cn0KCmNs
YXNzIEp2U3luY2hyb25pemUKewpwcml2YXRlOgogIGpvYmplY3Qgb2JqOwpwdWJsaWM6CiAgSnZT
eW5jaHJvbml6ZSAoY29uc3Qgam9iamVjdCAmbykgOiBvYmogKG8pCiAgICB7IF9Kdl9Nb25pdG9y
RW50ZXIgKG9iaik7IH0KICB+SnZTeW5jaHJvbml6ZSAoKQogICAgeyBfSnZfTW9uaXRvckV4aXQg
KG9iaik7IH0KfTsKCgpleHRlcm4gaW5saW5lIHZvaWQgKgpKdk1hbGxvYyAoanNpemUgc2l6ZSkK
ewogIHJldHVybiBfSnZfTWFsbG9jIChzaXplKTsKfQoKZXh0ZXJuIGlubGluZSB2b2lkCkp2RnJl
ZSAodm9pZCAqcHRyKQp7CiAgcmV0dXJuIF9Kdl9GcmVlIChwdHIpOwp9CgpleHRlcm4gaW5saW5l
IGppbnQKSnZDcmVhdGVKYXZhVk0gKHZvaWQqIHZtX2FyZ3MpCnsKICByZXR1cm4gX0p2X0NyZWF0
ZUphdmFWTSAodm1fYXJncyk7Cn0KCmV4dGVybiBpbmxpbmUgamF2YTo6bGFuZzo6VGhyZWFkKgpK
dkF0dGFjaEN1cnJlbnRUaHJlYWQgKGpzdHJpbmcgbmFtZSwgamF2YTo6bGFuZzo6VGhyZWFkR3Jv
dXAqIGdyb3VwKQp7CiAgcmV0dXJuIF9Kdl9BdHRhY2hDdXJyZW50VGhyZWFkIChuYW1lLCBncm91
cCk7Cn0KCmV4dGVybiBpbmxpbmUgamludApKdkRldGFjaEN1cnJlbnRUaHJlYWQgKHZvaWQpCnsK
ICByZXR1cm4gX0p2X0RldGFjaEN1cnJlbnRUaHJlYWQgKCk7Cn0KIyAzMSAiLi4vLi4vLi4vZ2Nj
L2xpYmphdmEvaW5jbHVkZS9qdm0uaCIgMgojIDEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9m
aWVsZC5oIiAxCiMgMTUgIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9maWVsZC5oIgojIDEgImph
dmEvbGFuZy9yZWZsZWN0L0ZpZWxkLmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKIyAxICJq
YXZhL2xhbmcvcmVmbGVjdC9BY2Nlc3NpYmxlT2JqZWN0LmgiIDEKCgoKCgojcHJhZ21hIGludGVy
ZmFjZQoKCgoKY2xhc3MgOjpqYXZhOjpsYW5nOjpyZWZsZWN0OjpBY2Nlc3NpYmxlT2JqZWN0IDog
cHVibGljIDo6amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIEFjY2Vzc2libGVPYmplY3Qg
KCk7CnB1YmxpYzoKICB2aXJ0dWFsIGpib29sZWFuIGlzQWNjZXNzaWJsZSAoKSB7IHJldHVybiBm
bGFnOyB9CiAgc3RhdGljIHZvaWQgc2V0QWNjZXNzaWJsZSAoSkFycmF5PCA6OmphdmE6Omxhbmc6
OnJlZmxlY3Q6OkFjY2Vzc2libGVPYmplY3QgKj4gKiwgamJvb2xlYW4pOwogIHZpcnR1YWwgdm9p
ZCBzZXRBY2Nlc3NpYmxlIChqYm9vbGVhbik7CnByaXZhdGU6CiAgc3RhdGljIHZvaWQgY2hlY2tQ
ZXJtaXNzaW9uICgpOwogIHZvaWQgc2VjdXJlU2V0QWNjZXNzaWJsZSAoamJvb2xlYW4pOwpwdWJs
aWM6CiAgamJvb2xlYW4gZmxhZzsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFz
cyBjbGFzcyQ7Cn07CiMgOSAiamF2YS9sYW5nL3JlZmxlY3QvRmllbGQuaCIgMgoKY2xhc3MgOjpq
YXZhOjpsYW5nOjpyZWZsZWN0OjpGaWVsZCA6IHB1YmxpYyA6OmphdmE6Omxhbmc6OnJlZmxlY3Q6
OkFjY2Vzc2libGVPYmplY3QKewpwdWJsaWM6CiAgRmllbGQgKCk7CnB1YmxpYzoKICBqYm9vbGVh
biBlcXVhbHMgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIDo6amF2YTo6bGFuZzo6Q2xhc3Mg
KmdldERlY2xhcmluZ0NsYXNzICgpIHsgcmV0dXJuIGRlY2xhcmluZ0NsYXNzOyB9CiAgOjpqYXZh
OjpsYW5nOjpTdHJpbmcgKmdldE5hbWUgKCk7CiAgOjpqYXZhOjpsYW5nOjpDbGFzcyAqZ2V0VHlw
ZSAoKTsKICBqaW50IGdldE1vZGlmaWVycyAoKTsKICBqaW50IGhhc2hDb2RlICgpOwogIGpib29s
ZWFuIGdldEJvb2xlYW4gKDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIGpjaGFyIGdldENoYXIg
KDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIGpieXRlIGdldEJ5dGUgKDo6amF2YTo6bGFuZzo6
T2JqZWN0ICopOwogIGpzaG9ydCBnZXRTaG9ydCAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAg
amludCBnZXRJbnQgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIGpsb25nIGdldExvbmcgKDo6
amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIGpmbG9hdCBnZXRGbG9hdCAoOjpqYXZhOjpsYW5nOjpP
YmplY3QgKik7CiAgamRvdWJsZSBnZXREb3VibGUgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwog
IDo6amF2YTo6bGFuZzo6T2JqZWN0ICpnZXQgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwpwcml2
YXRlOgogIGpib29sZWFuIGdldEJvb2xlYW4gKDo6amF2YTo6bGFuZzo6Q2xhc3MgKiwgOjpqYXZh
OjpsYW5nOjpPYmplY3QgKik7CiAgamNoYXIgZ2V0Q2hhciAoOjpqYXZhOjpsYW5nOjpDbGFzcyAq
LCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBqYnl0ZSBnZXRCeXRlICg6OmphdmE6Omxhbmc6
OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIGpzaG9ydCBnZXRTaG9ydCAoOjpq
YXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBqaW50IGdldElu
dCAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBqbG9u
ZyBnZXRMb25nICg6OmphdmE6Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICop
OwogIGpmbG9hdCBnZXRGbG9hdCAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxhbmc6
Ok9iamVjdCAqKTsKICBqZG91YmxlIGdldERvdWJsZSAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6
OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICA6OmphdmE6Omxhbmc6Ok9iamVjdCAqZ2V0ICg6Omph
dmE6Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwpwdWJsaWM6CiAgdm9p
ZCBzZXRCeXRlICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCBqYnl0ZSk7CiAgdm9pZCBzZXRTaG9y
dCAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwganNob3J0KTsKICB2b2lkIHNldEludCAoOjpqYXZh
OjpsYW5nOjpPYmplY3QgKiwgamludCk7CiAgdm9pZCBzZXRMb25nICg6OmphdmE6Omxhbmc6Ok9i
amVjdCAqLCBqbG9uZyk7CiAgdm9pZCBzZXRGbG9hdCAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwg
amZsb2F0KTsKICB2b2lkIHNldERvdWJsZSAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgamRvdWJs
ZSk7CiAgdm9pZCBzZXRDaGFyICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCBqY2hhcik7CiAgdm9p
ZCBzZXRCb29sZWFuICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCBqYm9vbGVhbik7CnByaXZhdGU6
CiAgdm9pZCBzZXRCeXRlICg6OmphdmE6Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2Jq
ZWN0ICosIGpieXRlKTsKICB2b2lkIHNldFNob3J0ICg6OmphdmE6Omxhbmc6OkNsYXNzICosIDo6
amF2YTo6bGFuZzo6T2JqZWN0ICosIGpzaG9ydCk7CiAgdm9pZCBzZXRJbnQgKDo6amF2YTo6bGFu
Zzo6Q2xhc3MgKiwgOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgamludCk7CiAgdm9pZCBzZXRMb25n
ICg6OmphdmE6Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIGpsb25nKTsK
ICB2b2lkIHNldEZsb2F0ICg6OmphdmE6Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2Jq
ZWN0ICosIGpmbG9hdCk7CiAgdm9pZCBzZXREb3VibGUgKDo6amF2YTo6bGFuZzo6Q2xhc3MgKiwg
OjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgamRvdWJsZSk7CiAgdm9pZCBzZXRDaGFyICg6OmphdmE6
Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIGpjaGFyKTsKICB2b2lkIHNl
dEJvb2xlYW4gKDo6amF2YTo6bGFuZzo6Q2xhc3MgKiwgOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwg
amJvb2xlYW4pOwogIHZvaWQgc2V0ICg6OmphdmE6Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFu
Zzo6T2JqZWN0ICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIDo6amF2YTo6bGFuZzo6Q2xhc3Mg
Kik7CnB1YmxpYzoKICB2b2lkIHNldCAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgOjpqYXZhOjps
YW5nOjpPYmplY3QgKik7CnByaXZhdGU6CiAgdm9pZCBzZXQgKDo6amF2YTo6bGFuZzo6Q2xhc3Mg
KiwgOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CnB1Ymxp
YzoKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9TdHJpbmcgKCk7CnByaXZhdGU6CiAgOjpqYXZh
OjpsYW5nOjpDbGFzcyAqZGVjbGFyaW5nQ2xhc3M7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKm5h
bWU7CiAgamludCBvZmZzZXQ7CiAgZnJpZW5kIGpmaWVsZElEIF9Kdl9Gcm9tUmVmbGVjdGVkRmll
bGQgKGphdmE6Omxhbmc6OnJlZmxlY3Q6OkZpZWxkICopOwogIGZyaWVuZCBqb2JqZWN0IF9Kdl9K
TklfVG9SZWZsZWN0ZWRGaWVsZCAoX0p2X0pOSUVudiosIGpjbGFzcywgamZpZWxkSUQsIGpib29s
ZWFuKTsKICBmcmllbmQgY2xhc3MgamF2YTo6bGFuZzo6Q2xhc3M7CnB1YmxpYzoKCiAgc3RhdGlj
IDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwp9OwojIDE2ICIuLi8uLi8uLi9nY2MvbGliamF2
YS9nY2ovZmllbGQuaCIgMgoKIyAxICJnbnUvZ2NqL1Jhd0RhdGEuaCIgMQoKCgoKCiNwcmFnbWEg
aW50ZXJmYWNlCgoKCmV4dGVybiAiSmF2YSIKewogIG5hbWVzcGFjZSBnbnUKICB7CiAgICBuYW1l
c3BhY2UgZ2NqCiAgICB7CiAgICAgIGNsYXNzIFJhd0RhdGE7CiAgICB9CiAgfQp9OwoKY2xhc3Mg
OjpnbnU6Omdjajo6UmF3RGF0YSA6IHB1YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnByaXZh
dGU6CiAgUmF3RGF0YSAoKTsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBj
bGFzcyQ7Cn07CiMgMTggIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9maWVsZC5oIiAyCgoKCgpz
dHJ1Y3QgX0p2X0ZpZWxkCnsKCiAgc3RydWN0IF9Kdl9VdGY4Q29uc3QqIG5hbWU7CgoKCgogIGpj
bGFzcyB0eXBlOwoKICBfSnZfdXNob3J0IGZsYWdzOwoKCgoKICBfSnZfdXNob3J0IGJzaXplOwoK
CiAgdW5pb24gewogICAgamludCBib2Zmc2V0OwogICAgdm9pZCogYWRkcjsKICB9IHU7CgoKICBq
Ym9vbGVhbiBpc1Jlc29sdmVkICgpCiAgeyByZXR1cm4gISAoZmxhZ3MgJiAweDgwMDApOyB9Cgog
IHB1YmxpYzoKCiAgaW50IGdldE9mZnNldCAoKSB7IHJldHVybiB1LmJvZmZzZXQ7IH0KCiAgam9i
amVjdCBnZXRPYmplY3RGaWVsZCAoam9iamVjdCBvYmopCiAgeyByZXR1cm4gKihqb2JqZWN0ICop
KChjaGFyICopb2JqICsgZ2V0T2Zmc2V0ICgpKTsgfQoKICBqZmllbGRJRCBnZXROZXh0RmllbGQg
KCkgeyByZXR1cm4gdGhpcyArIDE7IH0KCiAgamJvb2xlYW4gaXNSZWYgKCkKICAgIHsKICAgICAg
aWYgKCFpc1Jlc29sdmVkICgpKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgZmlyc3QgPSAoKF9K
dl9VdGY4Q29uc3QqKXR5cGUpLT5kYXRhWzBdOwogICAgICAgICAgcmV0dXJuIGZpcnN0ID09ICdb
JyB8fCBmaXJzdCA9PSAnTCc7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAg
ICAgcmV0dXJuICEgdHlwZS0+aXNQcmltaXRpdmUgKCk7CiAgICAgICAgfQogICAgfQoKICBqY2xh
c3MgZ2V0Q2xhc3MgKCkKICB7CgoKCiAgICByZXR1cm4gdHlwZTsKICB9CgoKICBpbnQgZ2V0TW9k
aWZpZXJzKCkKICB7CiAgICByZXR1cm4gZmxhZ3MgJiBqYXZhOjpsYW5nOjpyZWZsZWN0OjpNb2Rp
Zmllcjo6QUxMX0ZMQUdTOwogIH0KCgoKCgogIF9Kdl9VdGY4Q29uc3QgKiBnZXROYW1lVXRmOENv
bnN0IChqY2xhc3MpIHsgcmV0dXJuIG5hbWU7IH0KCgp9OwoKCgppbmxpbmUgamJ5dGUKX0p2X0dl
dFN0YXRpY0J5dGVGaWVsZCAoamNsYXNzLCBfSnZfRmllbGQqIGZpZWxkKQp7CiAgcmV0dXJuICog
KGpieXRlICopIGZpZWxkLT51LmFkZHI7Cn0KCmlubGluZSBqc2hvcnQKX0p2X0dldFN0YXRpY1No
b3J0RmllbGQgKGpjbGFzcywgX0p2X0ZpZWxkKiBmaWVsZCkKewogIHJldHVybiAqIChqc2hvcnQg
KikgZmllbGQtPnUuYWRkcjsKfQoKaW5saW5lIGppbnQKX0p2X0dldFN0YXRpY0ludEZpZWxkIChq
Y2xhc3MsIF9Kdl9GaWVsZCogZmllbGQpCnsKICByZXR1cm4gKiAoamludCAqKSBmaWVsZC0+dS5h
ZGRyOwp9CgppbmxpbmUgamxvbmcKX0p2X0dldFN0YXRpY0xvbmdGaWVsZCAoamNsYXNzLCBfSnZf
RmllbGQqIGZpZWxkKQp7CiAgcmV0dXJuICogKGpsb25nICopIGZpZWxkLT51LmFkZHI7Cn0KCmlu
bGluZSBqb2JqZWN0Cl9Kdl9HZXRPYmplY3RGaWVsZCAoam9iamVjdCBvYmosIF9Kdl9GaWVsZCog
ZmllbGQpCnsKICByZXR1cm4gZmllbGQtPmdldE9iamVjdEZpZWxkIChvYmopOwp9CgppbmxpbmUg
amJ5dGUKX0p2X0dldEJ5dGVGaWVsZCAoam9iamVjdCBvYmosIF9Kdl9GaWVsZCogZmllbGQpCnsK
ICByZXR1cm4gKiAoamJ5dGUgKikgKChjaGFyKikgb2JqICsgZmllbGQtPmdldE9mZnNldCAoKSk7
Cn0KCmlubGluZSBqc2hvcnQKX0p2X0dldFNob3J0RmllbGQgKGpvYmplY3Qgb2JqLCBfSnZfRmll
bGQqIGZpZWxkKQp7CiAgcmV0dXJuICogKGpzaG9ydCAqKSAoKGNoYXIqKSBvYmogKyBmaWVsZC0+
Z2V0T2Zmc2V0ICgpKTsKfQppbmxpbmUgamludApfSnZfR2V0SW50RmllbGQgKGpvYmplY3Qgb2Jq
LCBfSnZfRmllbGQqIGZpZWxkKQp7CiAgcmV0dXJuICogKGppbnQgKikgKChjaGFyKikgb2JqICsg
ZmllbGQtPmdldE9mZnNldCAoKSk7Cn0KaW5saW5lIGpsb25nCl9Kdl9HZXRMb25nRmllbGQgKGpv
YmplY3Qgb2JqLCBfSnZfRmllbGQqIGZpZWxkKQp7CiAgcmV0dXJuICogKGpsb25nICopICgoY2hh
ciopIG9iaiArIGZpZWxkLT5nZXRPZmZzZXQgKCkpOwp9CgpleHRlcm4gaW5saW5lIGpmaWVsZElE
Cl9Kdl9Gcm9tUmVmbGVjdGVkRmllbGQgKGphdmE6Omxhbmc6OnJlZmxlY3Q6OkZpZWxkICpmaWVs
ZCkKewogIHJldHVybiAoamZpZWxkSUQpICgoY2hhciAqKSBmaWVsZC0+ZGVjbGFyaW5nQ2xhc3Mt
PmZpZWxkcyArIGZpZWxkLT5vZmZzZXQpOwp9CgoKCmV4dGVybiBpbmxpbmUgamZpZWxkSUQKSnZH
ZXRGaXJzdEluc3RhbmNlRmllbGQgKGpjbGFzcyBrbGFzcykKewogIHJldHVybiAmKGtsYXNzLT5m
aWVsZHNba2xhc3MtPnN0YXRpY19maWVsZF9jb3VudF0pOwp9CgpleHRlcm4gaW5saW5lIGppbnQK
SnZOdW1JbnN0YW5jZUZpZWxkcyAoamNsYXNzIGtsYXNzKQp7CiAgcmV0dXJuIGtsYXNzLT5maWVs
ZF9jb3VudCAtIGtsYXNzLT5zdGF0aWNfZmllbGRfY291bnQ7Cn0KCmV4dGVybiBpbmxpbmUgamZp
ZWxkSUQKSnZHZXRGaXJzdFN0YXRpY0ZpZWxkIChqY2xhc3Mga2xhc3MpCnsKICByZXR1cm4gJihr
bGFzcy0+ZmllbGRzWzBdKTsKfQoKZXh0ZXJuIGlubGluZSBqaW50Ckp2TnVtU3RhdGljRmllbGRz
IChqY2xhc3Mga2xhc3MpCnsKICByZXR1cm4ga2xhc3MtPnN0YXRpY19maWVsZF9jb3VudDsKfQoK
ZXh0ZXJuIGlubGluZSBqYm9vbGVhbgpKdkZpZWxkSXNSZWYgKGpmaWVsZElEIGZpZWxkKQp7CiAg
cmV0dXJuIGZpZWxkLT5pc1JlZiAoKSAmJiBmaWVsZC0+dHlwZSAhPSAmZ251OjpnY2o6OlJhd0Rh
dGE6OmNsYXNzJDsKfQoKZXh0ZXJuIGlubGluZSBqb2JqZWN0Ckp2R2V0T2JqZWN0RmllbGQgKGpv
YmplY3Qgb2JqLCBfSnZfRmllbGQqIGZpZWxkKQp7CiAgcmV0dXJuIF9Kdl9HZXRPYmplY3RGaWVs
ZCAob2JqLCBmaWVsZCk7Cn0KIyAzMiAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW5jbHVkZS9qdm0u
aCIgMgoKCnN0cnVjdCBfSnZfVlRhYmxlCnsKCgoKICB0eXBlZGVmIHZvaWQgKnZ0YWJsZV9lbHQ7
CgogIGpjbGFzcyBjbGFzOwogIHZvaWQgKmdjX2Rlc2NyOwoKCgogIHZ0YWJsZV9lbHQgbWV0aG9k
WzFdOwojIDYwICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNsdWRlL2p2bS5oIgogIHZvaWQgKmdl
dF9tZXRob2QoaW50IGkpIHsgcmV0dXJuIG1ldGhvZFtpXTsgfQogIHZvaWQgc2V0X21ldGhvZChp
bnQgaSwgdm9pZCAqZnB0cikgeyBtZXRob2RbaV0gPSBmcHRyOyB9CiAgdm9pZCAqZ2V0X2ZpbmFs
aXplcigpIHsgcmV0dXJuIGdldF9tZXRob2QoMCk7IH0KCgogIHN0YXRpYyBzaXplX3QgdnRhYmxl
X2VsdF9zaXplKCkgeyByZXR1cm4gc2l6ZW9mKHZ0YWJsZV9lbHQpOyB9CgoKICBzdGF0aWMgamlu
dCBpZHhfdG9fb2Zmc2V0IChpbnQgaW5kZXgpCiAgewogICAgcmV0dXJuICgyICogc2l6ZW9mICh2
b2lkICopKSArIChpbmRleCAqIHZ0YWJsZV9lbHRfc2l6ZSAoKSk7CiAgfQogIHN0YXRpYyBfSnZf
VlRhYmxlICpuZXdfdnRhYmxlIChpbnQgY291bnQpOwp9OwoKCgoKCgpzdHJ1Y3QgX0p2X0FycmF5
VlRhYmxlIDogcHVibGljIF9Kdl9WVGFibGUKewogIHZ0YWJsZV9lbHQgZXh0cmFfbWV0aG9kWzUg
LSAxXTsKfTsKCnVuaW9uIF9Kdl93b3JkCnsKICBqb2JqZWN0IG87CiAgamludCBpOwogIGpmbG9h
dCBmOwogIGppbnQgaWFbMV07CiAgdm9pZCogcDsKIyAxMDAgIi4uLy4uLy4uL2djYy9saWJqYXZh
L2luY2x1ZGUvanZtLmgiCiAgamNsYXNzIGNsYXp6OwogIGpzdHJpbmcgc3RyaW5nOwogIHN0cnVj
dCBfSnZfRmllbGQgKmZpZWxkOwogIHN0cnVjdCBfSnZfVXRmOENvbnN0ICp1dGY4OwogIHN0cnVj
dCBfSnZfUmVzb2x2ZWRNZXRob2QgKnJtZXRob2Q7Cn07Cgp1bmlvbiBfSnZfd29yZDIKewogIGpp
bnQgaWFbMl07CiAgamxvbmcgbDsKICBqZG91YmxlIGQ7Cn07CiMgMTI5ICIuLi8uLi8uLi9nY2Mv
bGliamF2YS9pbmNsdWRlL2p2bS5oIgpleHRlcm4gaW50IF9Kdl9zdHJMZW5ndGhVdGY4KGNoYXIq
IHN0ciwgaW50IGxlbik7Cgp0eXBlZGVmIHN0cnVjdCBfSnZfVXRmOENvbnN0IFV0ZjhDb25zdDsK
X0p2X1V0ZjhDb25zdCAqX0p2X21ha2VVdGY4Q29uc3QgKGNoYXIgKnMsIGludCBsZW4pOwpfSnZf
VXRmOENvbnN0ICpfSnZfbWFrZVV0ZjhDb25zdCAoanN0cmluZyBzdHJpbmcpOwpleHRlcm4gamJv
b2xlYW4gX0p2X2VxdWFsVXRmOENvbnN0cyAoX0p2X1V0ZjhDb25zdCAqLCBfSnZfVXRmOENvbnN0
ICopOwpleHRlcm4gamJvb2xlYW4gX0p2X2VxdWFsIChfSnZfVXRmOENvbnN0ICosIGpzdHJpbmcs
IGppbnQpOwpleHRlcm4gamJvb2xlYW4gX0p2X2VxdWFsbiAoX0p2X1V0ZjhDb25zdCAqLCBqc3Ry
aW5nLCBqaW50KTsKCgoKCm5hbWVzcGFjZSBnY2oKewoKICBleHRlcm4gX0p2X1V0ZjhDb25zdCAq
dm9pZF9zaWduYXR1cmU7CiAgZXh0ZXJuIF9Kdl9VdGY4Q29uc3QgKmNsaW5pdF9uYW1lOwogIGV4
dGVybiBfSnZfVXRmOENvbnN0ICppbml0X25hbWU7CiAgZXh0ZXJuIF9Kdl9VdGY4Q29uc3QgKmZp
bml0X25hbWU7CgoKICBleHRlcm4gYm9vbCBydW50aW1lSW5pdGlhbGl6ZWQ7Cn07CgoKdHlwZWRl
ZiB2b2lkIF9Kdl9GaW5hbGl6ZXJGdW5jIChqb2JqZWN0KTsKCgp2b2lkICpfSnZfQWxsb2NPYmog
KGpzaXplIHNpemUsIGpjbGFzcyBjbCkgX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykpOwoKCnZv
aWQgKl9Kdl9BbGxvY1B0ckZyZWVPYmogKGpzaXplIHNpemUsIGpjbGFzcyBjbCkgX19hdHRyaWJ1
dGVfXygoX19tYWxsb2NfXykpOwoKdm9pZCAqX0p2X0FsbG9jQXJyYXkgKGpzaXplIHNpemUsIGpj
bGFzcyBjbCkgX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykpOwoKdm9pZCAqX0p2X0FsbG9jQnl0
ZXMgKGpzaXplIHNpemUpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKCgp2b2lkICpfSnZf
QWxsb2NSYXdPYmogKGpzaXplIHNpemUpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKCnZv
aWQgX0p2X1Rocm93Tm9NZW1vcnkoKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKCgp2
b2lkICpfSnZfQWxsb2NUcmFjZU9uZSAoanNpemUgc2l6ZSApOwoKdm9pZCAqX0p2X0FsbG9jVHJh
Y2VUd28gKGpzaXplIHNpemUgKTsKCnZvaWQgX0p2X0luaXRHQyAodm9pZCk7Cgp2b2lkIF9Kdl9S
ZWdpc3RlckZpbmFsaXplciAodm9pZCAqb2JqZWN0LCBfSnZfRmluYWxpemVyRnVuYyAqbWV0aG9k
KTsKCnZvaWQgKiBfSnZfQnVpbGRHQ0Rlc2NyKGpjbGFzcyk7CgoKCnZvaWQgKl9Kdl9NYWxsb2NV
bmNoZWNrZWQgKGpzaXplIHNpemUpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKCgoKdm9p
ZCBfSnZfR0NJbml0aWFsaXplRmluYWxpemVycyAodm9pZCAoKm5vdGlmaWVyKSAodm9pZCkpOwoK
dm9pZCBfSnZfUnVuRmluYWxpemVycyAodm9pZCk7Cgp2b2lkIF9Kdl9SdW5BbGxGaW5hbGl6ZXJz
ICh2b2lkKTsKCnZvaWQgX0p2X1J1bkdDICh2b2lkKTsKCnZvaWQgX0p2X0Rpc2FibGVHQyAodm9p
ZCk7CnZvaWQgX0p2X0VuYWJsZUdDICh2b2lkKTsKCgoKdm9pZCBfSnZfR0NSZWdpc3RlckRpc2Fw
cGVhcmluZ0xpbmsgKGpvYmplY3QgKm9ianApOwoKCmpib29sZWFuIF9Kdl9HQ0NhblJlY2xhaW1T
b2Z0UmVmZXJlbmNlIChqb2JqZWN0IG9iaik7CgoKbG9uZyBfSnZfR0NUb3RhbE1lbW9yeSAodm9p
ZCk7Cgpsb25nIF9Kdl9HQ0ZyZWVNZW1vcnkgKHZvaWQpOwoKCgp2b2lkIF9Kdl9HQ1NldEluaXRp
YWxIZWFwU2l6ZSAoc2l6ZV90IHNpemUpOwoKCgp2b2lkIF9Kdl9HQ1NldE1heGltdW1IZWFwU2l6
ZSAoc2l6ZV90IHNpemUpOwoKCgoKdm9pZCBfSnZfU2V0SW5pdGlhbEhlYXBTaXplIChjb25zdCBj
aGFyICphcmcpOwoKCgoKdm9pZCBfSnZfU2V0TWF4aW11bUhlYXBTaXplIChjb25zdCBjaGFyICph
cmcpOwoKZXh0ZXJuICJDIiB2b2lkIEp2UnVuTWFpbiAoamNsYXNzIGtsYXNzLCBpbnQgYXJnYywg
Y29uc3QgY2hhciAqKmFyZ3YpOwp2b2lkIF9Kdl9SdW5NYWluIChqY2xhc3Mga2xhc3MsIGNvbnN0
IGNoYXIgKm5hbWUsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKICAgICAgICAgICAgICAg
ICAgYm9vbCBpc19qYXIpOwoKCgoKCgppbmxpbmUgX0p2X1ZUYWJsZSAqCl9Kdl9WVGFibGU6Om5l
d192dGFibGUgKGludCBjb3VudCkKewogIHNpemVfdCBzaXplID0gc2l6ZW9mKF9Kdl9WVGFibGUp
ICsgKGNvdW50IC0gMSkgKiB2dGFibGVfZWx0X3NpemUgKCk7CiAgcmV0dXJuIChfSnZfVlRhYmxl
ICopIF9Kdl9BbGxvY0J5dGVzIChzaXplKTsKfQoKCmlubGluZSBqaW50Cl9Kdl9IYXNoQ29kZSAo
am9iamVjdCBvYmopCnsKCgoKICByZXR1cm4gKGppbnQpICgodW5zaWduZWQgbG9uZykgb2JqICUg
MHg3ZmZmZmZmZik7Cn0KCgoKCgoKaW5saW5lIGNoYXIgKgpfSnZfR2V0QXJyYXlFbGVtZW50RnJv
bUVsZW1lbnRUeXBlIChqb2JqZWN0IGFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqY2xhc3MgZWxlbWVudF90eXBlKQp7CiAgY2hhciAqZWx0czsKICBpZiAoZWxlbWVu
dF90eXBlID09ICgmIF9Kdl9ieXRlQ2xhc3MpKQogICAgZWx0cyA9IChjaGFyICopIGVsZW1lbnRz
ICgoamJ5dGVBcnJheSkgYXJyYXkpOwogIGVsc2UgaWYgKGVsZW1lbnRfdHlwZSA9PSAoJiBfSnZf
c2hvcnRDbGFzcykpCiAgICBlbHRzID0gKGNoYXIgKikgZWxlbWVudHMgKChqc2hvcnRBcnJheSkg
YXJyYXkpOwogIGVsc2UgaWYgKGVsZW1lbnRfdHlwZSA9PSAoJiBfSnZfaW50Q2xhc3MpKQogICAg
ZWx0cyA9IChjaGFyICopIGVsZW1lbnRzICgoamludEFycmF5KSBhcnJheSk7CiAgZWxzZSBpZiAo
ZWxlbWVudF90eXBlID09ICgmIF9Kdl9sb25nQ2xhc3MpKQogICAgZWx0cyA9IChjaGFyICopIGVs
ZW1lbnRzICgoamxvbmdBcnJheSkgYXJyYXkpOwogIGVsc2UgaWYgKGVsZW1lbnRfdHlwZSA9PSAo
JiBfSnZfYm9vbGVhbkNsYXNzKSkKICAgIGVsdHMgPSAoY2hhciAqKSBlbGVtZW50cyAoKGpib29s
ZWFuQXJyYXkpIGFycmF5KTsKICBlbHNlIGlmIChlbGVtZW50X3R5cGUgPT0gKCYgX0p2X2NoYXJD
bGFzcykpCiAgICBlbHRzID0gKGNoYXIgKikgZWxlbWVudHMgKChqY2hhckFycmF5KSBhcnJheSk7
CiAgZWxzZSBpZiAoZWxlbWVudF90eXBlID09ICgmIF9Kdl9mbG9hdENsYXNzKSkKICAgIGVsdHMg
PSAoY2hhciAqKSBlbGVtZW50cyAoKGpmbG9hdEFycmF5KSBhcnJheSk7CiAgZWxzZSBpZiAoZWxl
bWVudF90eXBlID09ICgmIF9Kdl9kb3VibGVDbGFzcykpCiAgICBlbHRzID0gKGNoYXIgKikgZWxl
bWVudHMgKChqZG91YmxlQXJyYXkpIGFycmF5KTsKICBlbHNlCiAgICBlbHRzID0gKGNoYXIgKikg
ZWxlbWVudHMgKChqb2JqZWN0QXJyYXkpIGFycmF5KTsKICByZXR1cm4gZWx0czsKfQoKZXh0ZXJu
ICJDIiB2b2lkIF9Kdl9UaHJvd0JhZEFycmF5SW5kZXggKGppbnQgYmFkX2luZGV4KTsKZXh0ZXJu
ICJDIiB2b2lkIF9Kdl9UaHJvd051bGxQb2ludGVyRXhjZXB0aW9uICh2b2lkKTsKZXh0ZXJuICJD
IiBqb2JqZWN0IF9Kdl9OZXdBcnJheSAoamludCB0eXBlLCBqaW50IHNpemUpCiAgX19hdHRyaWJ1
dGVfXygoX19tYWxsb2NfXykpOwpleHRlcm4gIkMiIGpvYmplY3QgX0p2X05ld011bHRpQXJyYXkg
KGpjbGFzcyBrbGFzcywgamludCBkaW1zLCAuLi4pCiAgX19hdHRyaWJ1dGVfXygoX19tYWxsb2Nf
XykpOwpleHRlcm4gIkMiIHZvaWQgKl9Kdl9DaGVja0Nhc3QgKGpjbGFzcyBrbGFzcywgam9iamVj
dCBvYmopOwpleHRlcm4gIkMiIHZvaWQgKl9Kdl9Mb29rdXBJbnRlcmZhY2VNZXRob2QgKGpjbGFz
cyBrbGFzcywgVXRmOENvbnN0ICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVXRmOENvbnN0ICpzaWduYXR1cmUpOwpleHRlcm4gIkMiIHZvaWQgKl9Kdl9M
b29rdXBJbnRlcmZhY2VNZXRob2RJZHggKGpjbGFzcyBrbGFzcywgamNsYXNzIGlmYWNlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXRoX2lkeCk7
CmV4dGVybiAiQyIgdm9pZCBfSnZfQ2hlY2tBcnJheVN0b3JlIChqb2JqZWN0IGFycmF5LCBqb2Jq
ZWN0IG9iaik7CmV4dGVybiAiQyIgdm9pZCBfSnZfUmVnaXN0ZXJDbGFzcyAoamNsYXNzIGtsYXNz
KTsKZXh0ZXJuICJDIiB2b2lkIF9Kdl9SZWdpc3RlckNsYXNzZXMgKGpjbGFzcyAqY2xhc3Nlcyk7
CmV4dGVybiAiQyIgdm9pZCBfSnZfUmVnaXN0ZXJSZXNvdXJjZSAodm9pZCAqdnB0cik7CmV4dGVy
biB2b2lkIF9Kdl9VbnJlZ2lzdGVyQ2xhc3MgKF9Kdl9VdGY4Q29uc3QqLCBqYXZhOjpsYW5nOjpD
bGFzc0xvYWRlciopOwpleHRlcm4gdm9pZCBfSnZfUmVzb2x2ZUZpZWxkIChfSnZfRmllbGQgKiwg
amF2YTo6bGFuZzo6Q2xhc3NMb2FkZXIqKTsKCmV4dGVybiBqY2xhc3MgX0p2X0ZpbmRDbGFzcyAo
X0p2X1V0ZjhDb25zdCAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhOjps
YW5nOjpDbGFzc0xvYWRlciAqbG9hZGVyKTsKZXh0ZXJuIGpjbGFzcyBfSnZfRmluZENsYXNzRnJv
bVNpZ25hdHVyZSAoY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqYXZhOjpsYW5nOjpDbGFzc0xvYWRlciAqbG9hZGVyKTsKZXh0ZXJuIHZvaWQgX0p2X0dl
dFR5cGVzRnJvbVNpZ25hdHVyZSAoam1ldGhvZElEIG1ldGhvZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgamNsYXNzIGRlY2xhcmluZ0NsYXNzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBKQXJyYXk8amNsYXNzPiAqKmFyZ190eXBlc19vdXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpjbGFzcyAqcmV0dXJuX3R5
cGVfb3V0KTsKCmV4dGVybiBqb2JqZWN0IF9Kdl9DYWxsQW55TWV0aG9kQSAoam9iamVjdCBvYmos
IGpjbGFzcyByZXR1cm5fdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
bWV0aG9kSUQgbWV0aCwgamJvb2xlYW4gaXNfY29uc3RydWN0b3IsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSkFycmF5PGpjbGFzcz4gKnBhcmFtZXRlcl90eXBlcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0QXJyYXkgYXJncyk7Cgp1bmlvbiBq
dmFsdWU7CmV4dGVybiBqdGhyb3dhYmxlIF9Kdl9DYWxsQW55TWV0aG9kQSAoam9iamVjdCBvYmos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamNsYXNzIHJldHVybl90eXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRoLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGlzX2NvbnN0cnVj
dG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBcnJheTxqY2xhc3M+
ICpwYXJhbWV0ZXJfdHlwZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
anZhbHVlICphcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1
ZSAqcmVzdWx0KTsKCmV4dGVybiBqb2JqZWN0IF9Kdl9OZXdNdWx0aUFycmF5IChqY2xhc3MsIGpp
bnQgbmRpbXMsIGppbnQqIGRpbXMpCiAgX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykpOwoKCmV4
dGVybiAiQyIKewogIGppbnQgX0p2X2RpdkkgKGppbnQsIGppbnQpOwogIGppbnQgX0p2X3JlbUkg
KGppbnQsIGppbnQpOwogIGpsb25nIF9Kdl9kaXZKIChqbG9uZywgamxvbmcpOwogIGpsb25nIF9K
dl9yZW1KIChqbG9uZywgamxvbmcpOwp9CgoKZXh0ZXJuIGNoYXIgKl9Kdl9UaGlzRXhlY3V0YWJs
ZSAodm9pZCk7CmV4dGVybiB2b2lkIF9Kdl9UaGlzRXhlY3V0YWJsZSAoY29uc3QgY2hhciAqKTsK
Cgp2b2lkICpfSnZfRmluZFN5bWJvbEluRXhlY3V0YWJsZSAoY29uc3QgY2hhciAqKTsKCgpleHRl
cm4gdm9pZCBfSnZfSk5JX0luaXQgKHZvaWQpOwoKCl9Kdl9KTklFbnYgKl9Kdl9HZXRDdXJyZW50
Sk5JRW52ICgpOwp2b2lkIF9Kdl9TZXRDdXJyZW50Sk5JRW52IChfSnZfSk5JRW52ICopOwoKc3Ry
dWN0IF9Kdl9KYXZhVk07Cl9Kdl9KYXZhVk0gKl9Kdl9HZXRKYXZhVk0gKCk7CgoKYm9vbCBfSnZf
VmVyaWZ5RmllbGRTaWduYXR1cmUgKF9Kdl9VdGY4Q29uc3Qqc2lnKTsKYm9vbCBfSnZfVmVyaWZ5
TWV0aG9kU2lnbmF0dXJlIChfSnZfVXRmOENvbnN0KnNpZyk7CmJvb2wgX0p2X1ZlcmlmeUNsYXNz
TmFtZSAodW5zaWduZWQgY2hhciogcHRyLCBfSnZfdXNob3J0IGxlbmd0aCk7CmJvb2wgX0p2X1Zl
cmlmeUNsYXNzTmFtZSAoX0p2X1V0ZjhDb25zdCAqbmFtZSk7CmJvb2wgX0p2X1ZlcmlmeUlkZW50
aWZpZXIgKF9Kdl9VdGY4Q29uc3QgKik7CmJvb2wgX0p2X0NsYXNzTmFtZVNhbWVQYWNrYWdlIChf
SnZfVXRmOENvbnN0ICpuYW1lMSwgX0p2X1V0ZjhDb25zdCAqbmFtZTIpOwoKCgojIDEgIi4uLy4u
Ly4uL2djYy9saWJqYXZhL2luY2x1ZGUvanZtcGkuaCIgMQojIDE3ICIuLi8uLi8uLi9nY2MvbGli
amF2YS9pbmNsdWRlL2p2bXBpLmgiCiMgMSAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW5jbHVkZS9q
bmkuaCIgMQojIDE3ICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNsdWRlL2puaS5oIgojIDEgImdj
ai9saWJnY2otY29uZmlnLmgiIDEKIyAxOCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW5jbHVkZS9q
bmkuaCIgMgoKIyAxICIveDEvZWdjcy9idWlsZC9nY2MvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMg
NDMgIi94MS9lZ2NzL2J1aWxkL2djYy9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19idWls
dGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgMTEwICIveDEvZWdjcy9idWlsZC9nY2MvaW5j
bHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CiMgMjAgIi4u
Ly4uLy4uL2djYy9saWJqYXZhL2luY2x1ZGUvam5pLmgiIDIKIyAyOSAiLi4vLi4vLi4vZ2NjL2xp
YmphdmEvaW5jbHVkZS9qbmkuaCIKIyAxICJnbnUvZ2NqL3J1bnRpbWUvSk5JV2Vha1JlZi5oIiAx
CgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCiMgMSAiamF2YS9sYW5nL3JlZi9XZWFrUmVmZXJlbmNl
LmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKIyAxICJqYXZhL2xhbmcvcmVmL1JlZmVyZW5j
ZS5oIiAxCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKZXh0ZXJuICJKYXZhIgp7CiAgbmFtZXNw
YWNlIGdudQogIHsKICAgIG5hbWVzcGFjZSBnY2oKICAgIHsKICAgICAgY2xhc3MgUmF3RGF0YTsK
ICAgIH0KICB9Cn07CgpjbGFzcyA6OmphdmE6Omxhbmc6OnJlZjo6UmVmZXJlbmNlIDogcHVibGlj
IDo6amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIFJlZmVyZW5jZSAoOjpqYXZhOjpsYW5n
OjpPYmplY3QgKik7CiAgUmVmZXJlbmNlICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCA6OmphdmE6
Omxhbmc6OnJlZjo6UmVmZXJlbmNlUXVldWUgKik7CnByaXZhdGU6CiAgdm9pZCBjcmVhdGUgKDo6
amF2YTo6bGFuZzo6T2JqZWN0ICopOwpwdWJsaWM6CiAgdmlydHVhbCA6OmphdmE6Omxhbmc6Ok9i
amVjdCAqZ2V0ICgpOwogIHZpcnR1YWwgdm9pZCBjbGVhciAoKTsKICB2aXJ0dWFsIGpib29sZWFu
IGlzRW5xdWV1ZWQgKCk7CiAgdmlydHVhbCBqYm9vbGVhbiBlbnF1ZXVlICgpOwpwdWJsaWM6CiAg
OjpnbnU6Omdjajo6UmF3RGF0YSAqcmVmZXJlbnQ7CiAgOjpnbnU6Omdjajo6UmF3RGF0YSAqY29w
eTsKICA6OmphdmE6Omxhbmc6OnJlZjo6UmVmZXJlbmNlUXVldWUgKnF1ZXVlOwogIDo6amF2YTo6
bGFuZzo6cmVmOjpSZWZlcmVuY2UgKm5leHRPblF1ZXVlOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6
Ok9iamVjdCAqbG9jazsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFz
cyQ7Cn07CiMgOSAiamF2YS9sYW5nL3JlZi9XZWFrUmVmZXJlbmNlLmgiIDIKCmNsYXNzIDo6amF2
YTo6bGFuZzo6cmVmOjpXZWFrUmVmZXJlbmNlIDogcHVibGljIDo6amF2YTo6bGFuZzo6cmVmOjpS
ZWZlcmVuY2UKewpwdWJsaWM6CiAgV2Vha1JlZmVyZW5jZSAoOjpqYXZhOjpsYW5nOjpPYmplY3Qg
Kik7CiAgV2Vha1JlZmVyZW5jZSAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgOjpqYXZhOjpsYW5n
OjpyZWY6OlJlZmVyZW5jZVF1ZXVlICopOwoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBj
bGFzcyQ7Cn07CiMgOSAiZ251L2djai9ydW50aW1lL0pOSVdlYWtSZWYuaCIgMgoKZXh0ZXJuICJK
YXZhIgp7CiAgbmFtZXNwYWNlIGdudQogIHsKICAgIG5hbWVzcGFjZSBnY2oKICAgIHsKICAgICAg
bmFtZXNwYWNlIHJ1bnRpbWUKICAgICAgewogICAgICAgIGNsYXNzIEpOSVdlYWtSZWY7CiAgICAg
IH0KICAgIH0KICB9Cn07CgpjbGFzcyA6OmdudTo6Z2NqOjpydW50aW1lOjpKTklXZWFrUmVmIDog
cHVibGljIDo6amF2YTo6bGFuZzo6cmVmOjpXZWFrUmVmZXJlbmNlCnsKcHVibGljOgogIEpOSVdl
YWtSZWYgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpD
bGFzcyBjbGFzcyQ7Cn07CiMgMzAgIi4uLy4uLy4uL2djYy9saWJqYXZhL2luY2x1ZGUvam5pLmgi
IDIKCnR5cGVkZWYgZ251OjpnY2o6OnJ1bnRpbWU6OkpOSVdlYWtSZWYgKmp3ZWFrOwoKdHlwZWRl
ZiBzdHJ1Y3QgX0p2X0pOSUVudiBKTklFbnY7CnR5cGVkZWYgc3RydWN0IF9Kdl9KYXZhVk0gSmF2
YVZNOwojIDE3MyAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW5jbHVkZS9qbmkuaCIKZXh0ZXJuICJD
Igp7CgoKCgpleHRlcm4gamludCBKTklfT25Mb2FkIChKYXZhVk0gKiwgdm9pZCAqKTsKZXh0ZXJu
IHZvaWQgSk5JX09uVW5sb2FkIChKYXZhVk0gKiwgdm9pZCAqKTsKCgoKZXh0ZXJuIGppbnQgSk5J
X0dldERlZmF1bHRKYXZhVk1Jbml0QXJncyAodm9pZCAqKTsKZXh0ZXJuIGppbnQgSk5JX0NyZWF0
ZUphdmFWTSAoSmF2YVZNICoqLCB2b2lkICoqLCB2b2lkICopOwpleHRlcm4gamludCBKTklfR2V0
Q3JlYXRlZEphdmFWTXMoSmF2YVZNICoqLCBqc2l6ZSwganNpemUgKik7CgoKfTsKCgp0eXBlZGVm
IHVuaW9uIGp2YWx1ZQp7CiAgamJvb2xlYW4gejsKICBqYnl0ZSBiOwogIGpjaGFyIGM7CiAganNo
b3J0IHM7CiAgamludCBpOwogIGpsb25nIGo7CiAgamZsb2F0IGY7CiAgamRvdWJsZSBkOwogIGpv
YmplY3QgbDsKfSBqdmFsdWU7CgoKdHlwZWRlZiB2b2lkICogKCpfSnZfZnVuYykgKC4uLik7CgoK
CgoKdHlwZWRlZiBzdHJ1Y3QKewogIGNoYXIgKm5hbWU7CiAgY2hhciAqc2lnbmF0dXJlOwogIHZv
aWQgKmZuUHRyOwp9IEpOSU5hdGl2ZU1ldGhvZDsKCnN0cnVjdCBKTklOYXRpdmVJbnRlcmZhY2UK
ewogIF9Kdl9mdW5jIHJlc2VydmVkMDsKICBfSnZfZnVuYyByZXNlcnZlZDE7CiAgX0p2X2Z1bmMg
cmVzZXJ2ZWQyOwogIF9Kdl9mdW5jIHJlc2VydmVkMzsKCiAgamludCAoKkdldFZlcnNpb24pIChK
TklFbnYgKik7CiAgamNsYXNzICgqRGVmaW5lQ2xhc3MpIChKTklFbnYgKiwgam9iamVjdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBqYnl0ZSAqLCBq
c2l6ZSk7CiAgamNsYXNzICgqRmluZENsYXNzKSAoSk5JRW52ICosIGNvbnN0IGNoYXIgKik7Cgog
IGptZXRob2RJRCAoKkZyb21SZWZsZWN0ZWRNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCk7CiAg
amZpZWxkSUQgKCpGcm9tUmVmbGVjdGVkRmllbGQpIChKTklFbnYgKiwgam9iamVjdCk7CiAgam9i
amVjdCAoKlRvUmVmbGVjdGVkTWV0aG9kKSAoSk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuKTsKCiAg
amNsYXNzICgqR2V0U3VwZXJjbGFzcykgKEpOSUVudiAqLCBqY2xhc3MpOwogIGpib29sZWFuICgq
SXNBc3NpZ25hYmxlRnJvbSkgKEpOSUVudiAqLCBqY2xhc3MsIGpjbGFzcyk7CgogIGpvYmplY3Qg
KCpUb1JlZmxlY3RlZEZpZWxkKSAoSk5JRW52ICosIGpjbGFzcywgamZpZWxkSUQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4pOwoKICBqaW50ICgq
VGhyb3cpIChKTklFbnYgKiwganRocm93YWJsZSk7CiAgamludCAoKlRocm93TmV3KSAoSk5JRW52
ICosIGpjbGFzcywgY29uc3QgY2hhciAqKTsKICBqdGhyb3dhYmxlICgqRXhjZXB0aW9uT2NjdXJy
ZWQpIChKTklFbnYgKik7CiAgdm9pZCAoKkV4Y2VwdGlvbkRlc2NyaWJlKSAoSk5JRW52ICopOwog
IHZvaWQgKCpFeGNlcHRpb25DbGVhcikgKEpOSUVudiAqKTsKICB2b2lkICgqRmF0YWxFcnJvcikg
KEpOSUVudiAqLCBjb25zdCBjaGFyICopOwoKICBqaW50ICgqUHVzaExvY2FsRnJhbWUpIChKTklF
bnYgKiwgamludCk7CiAgam9iamVjdCAoKlBvcExvY2FsRnJhbWUpIChKTklFbnYgKiwgam9iamVj
dCk7CgogIGpvYmplY3QgKCpOZXdHbG9iYWxSZWYpIChKTklFbnYgKiwgam9iamVjdCk7CiAgdm9p
ZCAoKkRlbGV0ZUdsb2JhbFJlZikgKEpOSUVudiAqLCBqb2JqZWN0KTsKICB2b2lkICgqRGVsZXRl
TG9jYWxSZWYpIChKTklFbnYgKiwgam9iamVjdCk7CiAgamJvb2xlYW4gKCpJc1NhbWVPYmplY3Qp
IChKTklFbnYgKiwgam9iamVjdCwgam9iamVjdCk7CgogIGpvYmplY3QgKCpOZXdMb2NhbFJlZikg
KEpOSUVudiAqLCBqb2JqZWN0KTsKICBqaW50ICgqRW5zdXJlTG9jYWxDYXBhY2l0eSkgKEpOSUVu
diAqLCBqaW50KTsKCiAgam9iamVjdCAoKkFsbG9jT2JqZWN0KSAoSk5JRW52ICosIGpjbGFzcyk7
CiAgam9iamVjdCAoKk5ld09iamVjdCkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwgLi4u
KTsKICBqb2JqZWN0ICgqTmV3T2JqZWN0VikgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0KTsKICBq
b2JqZWN0ICgqTmV3T2JqZWN0QSkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKik7CgogIGpjbGFz
cyAoKkdldE9iamVjdENsYXNzKSAoSk5JRW52ICosIGpvYmplY3QpOwogIGpib29sZWFuICgqSXNJ
bnN0YW5jZU9mKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcyk7CiAgam1ldGhvZElEICgqR2V0
TWV0aG9kSUQpIChKTklFbnYgKiwgamNsYXNzLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKTsKCiAgam9iamVjdCAo
KkNhbGxPYmplY3RNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAgam9iamVjdCAoKkNh
bGxPYmplY3RNZXRob2RWKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0KTsKICBqb2JqZWN0ICgq
Q2FsbE9iamVjdE1ldGhvZEEpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqKTsKICBqYm9vbGVh
biAoKkNhbGxCb29sZWFuTWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogIGpib29sZWFu
ICgqQ2FsbEJvb2xlYW5NZXRob2RWKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0KTsKICBqYm9v
bGVhbiAoKkNhbGxCb29sZWFuTWV0aG9kQSkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICopOwog
IGpieXRlICgqQ2FsbEJ5dGVNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAgamJ5dGUg
KCpDYWxsQnl0ZU1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIGpieXRlICgq
Q2FsbEJ5dGVNZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKik7CiAgamNoYXIgKCpD
YWxsQ2hhck1ldGhvZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICBqY2hhciAoKkNhbGxDaGFy
TWV0aG9kVikgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCk7CiAgamNoYXIgKCpDYWxsQ2hhck1l
dGhvZEEpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqKTsKICBqc2hvcnQgKCpDYWxsU2hvcnRN
ZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAganNob3J0ICgqQ2FsbFNob3J0TWV0aG9k
VikgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCk7CiAganNob3J0ICgqQ2FsbFNob3J0TWV0aG9k
QSkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAganZhbHVlICopOwogIGppbnQgKCpDYWxsSW50TWV0aG9kKSAo
Sk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuLi4pOwogIGppbnQgKCpDYWxsSW50TWV0aG9kVikgKEpOSUVudiAq
LCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFfbGlzdCk7CiAgamludCAoKkNhbGxJbnRNZXRob2RBKSAoSk5JRW52ICosIGpv
YmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqdmFsdWUgKik7CiAgamxvbmcgKCpDYWxsTG9uZ01ldGhvZCkgKEpOSUVudiAqLCBqb2Jq
ZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uKTsKICBqbG9uZyAoKkNhbGxMb25nTWV0aG9kVikgKEpOSUVudiAqLCBqb2JqZWN0LCBq
bWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFf
bGlzdCk7CiAgamxvbmcgKCpDYWxsTG9uZ01ldGhvZEEpIChKTklFbnYgKiwgam9iamVjdCwgam1l
dGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1
ZSAqKTsKICBqZmxvYXQgKCpDYWxsRmxvYXRNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgam1l
dGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7
CiAgamZsb2F0ICgqQ2FsbEZsb2F0TWV0aG9kVikgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9k
SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCk7
CiAgamZsb2F0ICgqQ2FsbEZsb2F0TWV0aG9kQSkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9k
SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICop
OwogIGpkb3VibGUgKCpDYWxsRG91YmxlTWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRo
b2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwog
IGpkb3VibGUgKCpDYWxsRG91YmxlTWV0aG9kVikgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9k
SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCk7
CiAgamRvdWJsZSAoKkNhbGxEb3VibGVNZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRo
b2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUg
Kik7CiAgdm9pZCAoKkNhbGxWb2lkTWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJ
RCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogIHZv
aWQgKCpDYWxsVm9pZE1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIHZvaWQg
KCpDYWxsVm9pZE1ldGhvZEEpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqKTsKCiAgam9iamVj
dCAoKkNhbGxOb252aXJ0dWFsT2JqZWN0TWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFz
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQs
IC4uLik7CiAgam9iamVjdCAoKkNhbGxOb252aXJ0dWFsT2JqZWN0TWV0aG9kVikgKEpOSUVudiAq
LCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgam1ldGhvZElELCB2YV9saXN0KTsKICBqb2JqZWN0ICgqQ2FsbE5vbnZpcnR1YWxPYmpl
Y3RNZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIGp2YWx1ZSAqKTsKICBqYm9vbGVh
biAoKkNhbGxOb252aXJ0dWFsQm9vbGVhbk1ldGhvZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xh
c3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElE
LCAuLi4pOwogIGpib29sZWFuICgqQ2FsbE5vbnZpcnR1YWxCb29sZWFuTWV0aG9kVikgKEpOSUVu
diAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGptZXRob2RJRCwgdmFfbGlzdCk7CiAgamJvb2xlYW4gKCpDYWxsTm9udmlydHVh
bEJvb2xlYW5NZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElELCBqdmFsdWUgKik7CiAg
amJ5dGUgKCpDYWxsTm9udmlydHVhbEJ5dGVNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgamNs
YXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJ
RCwgLi4uKTsKICBqYnl0ZSAoKkNhbGxOb252aXJ0dWFsQnl0ZU1ldGhvZFYpIChKTklFbnYgKiwg
am9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGptZXRob2RJRCwgdmFfbGlzdCk7CiAgamJ5dGUgKCpDYWxsTm9udmlydHVhbEJ5dGVNZXRo
b2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIGp2YWx1ZSAqKTsKICBqY2hhciAoKkNhbGxO
b252aXJ0dWFsQ2hhck1ldGhvZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElELCAuLi4pOwogIGpj
aGFyICgqQ2FsbE5vbnZpcnR1YWxDaGFyTWV0aG9kVikgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xh
c3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElE
LCB2YV9saXN0KTsKICBqY2hhciAoKkNhbGxOb252aXJ0dWFsQ2hhck1ldGhvZEEpIChKTklFbnYg
Kiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGptZXRob2RJRCwganZhbHVlICopOwogIGpzaG9ydCAoKkNhbGxOb252aXJ0dWFsU2hv
cnRNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgLi4uKTsKICBqc2hvcnQgKCpDYWxs
Tm9udmlydHVhbFNob3J0TWV0aG9kVikgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElELCB2YV9saXN0
KTsKICBqc2hvcnQgKCpDYWxsTm9udmlydHVhbFNob3J0TWV0aG9kQSkgKEpOSUVudiAqLCBqb2Jq
ZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
am1ldGhvZElELCBqdmFsdWUgKik7CiAgamludCAoKkNhbGxOb252aXJ0dWFsSW50TWV0aG9kKSAo
Sk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqbWV0aG9kSUQsIC4uLik7CiAgamludCAoKkNhbGxOb252aXJ0dWFsSW50
TWV0aG9kVikgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElELCB2YV9saXN0KTsKICBqaW50ICgqQ2Fs
bE5vbnZpcnR1YWxJbnRNZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIGp2YWx1ZSAq
KTsKICBqbG9uZyAoKkNhbGxOb252aXJ0dWFsTG9uZ01ldGhvZCkgKEpOSUVudiAqLCBqb2JqZWN0
LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1l
dGhvZElELCAuLi4pOwogIGpsb25nICgqQ2FsbE5vbnZpcnR1YWxMb25nTWV0aG9kVikgKEpOSUVu
diAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgam1ldGhvZElELCB2YV9saXN0KTsKICBqbG9uZyAoKkNhbGxOb252aXJ0dWFsTG9u
Z01ldGhvZEEpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwganZhbHVlICopOwogIGpmbG9hdCAo
KkNhbGxOb252aXJ0dWFsRmxvYXRNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgLi4u
KTsKICBqZmxvYXQgKCpDYWxsTm9udmlydHVhbEZsb2F0TWV0aG9kVikgKEpOSUVudiAqLCBqb2Jq
ZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
am1ldGhvZElELCB2YV9saXN0KTsKICBqZmxvYXQgKCpDYWxsTm9udmlydHVhbEZsb2F0TWV0aG9k
QSkgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgam1ldGhvZElELCBqdmFsdWUgKik7CiAgamRvdWJsZSAoKkNhbGxO
b252aXJ0dWFsRG91YmxlTWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIC4uLik7CiAg
amRvdWJsZSAoKkNhbGxOb252aXJ0dWFsRG91YmxlTWV0aG9kVikgKEpOSUVudiAqLCBqb2JqZWN0
LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1l
dGhvZElELCB2YV9saXN0KTsKICBqZG91YmxlICgqQ2FsbE5vbnZpcnR1YWxEb3VibGVNZXRob2RB
KSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIGp2YWx1ZSAqKTsKICB2b2lkICgqQ2FsbE5vbnZp
cnR1YWxWb2lkTWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIC4uLik7CiAgdm9pZCAo
KkNhbGxOb252aXJ0dWFsVm9pZE1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgdmFf
bGlzdCk7CiAgdm9pZCAoKkNhbGxOb252aXJ0dWFsVm9pZE1ldGhvZEEpIChKTklFbnYgKiwgam9i
amVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGptZXRob2RJRCwganZhbHVlICopOwoKICBqZmllbGRJRCAoKkdldEZpZWxkSUQpIChKTklFbnYg
KiwgamNsYXNzLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqKTsKCiAgam9iamVjdCAoKkdldE9iamVjdEZpZWxkKSAo
Sk5JRW52ICosIGpvYmplY3QsIGpmaWVsZElEKTsKICBqYm9vbGVhbiAoKkdldEJvb2xlYW5GaWVs
ZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqZmllbGRJRCk7CiAgamJ5dGUgKCpHZXRCeXRlRmllbGQp
IChKTklFbnYgKiwgam9iamVjdCwgamZpZWxkSUQpOwogIGpjaGFyICgqR2V0Q2hhckZpZWxkKSAo
Sk5JRW52ICosIGpvYmplY3QsIGpmaWVsZElEKTsKICBqc2hvcnQgKCpHZXRTaG9ydEZpZWxkKSAo
Sk5JRW52ICosIGpvYmplY3QsIGpmaWVsZElEKTsKICBqaW50ICgqR2V0SW50RmllbGQpIChKTklF
bnYgKiwgam9iamVjdCwgamZpZWxkSUQpOwogIGpsb25nICgqR2V0TG9uZ0ZpZWxkKSAoSk5JRW52
ICosIGpvYmplY3QsIGpmaWVsZElEKTsKICBqZmxvYXQgKCpHZXRGbG9hdEZpZWxkKSAoSk5JRW52
ICosIGpvYmplY3QsIGpmaWVsZElEKTsKICBqZG91YmxlICgqR2V0RG91YmxlRmllbGQpIChKTklF
bnYgKiwgam9iamVjdCwgamZpZWxkSUQpOwoKICB2b2lkICgqU2V0T2JqZWN0RmllbGQpIChKTklF
bnYgKiwgam9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqZmllbGRJRCwgam9iamVjdCk7CiAgdm9pZCAoKlNldEJvb2xlYW5GaWVsZCkgKEpOSUVudiAq
LCBqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpm
aWVsZElELCBqYm9vbGVhbik7CiAgdm9pZCAoKlNldEJ5dGVGaWVsZCkgKEpOSUVudiAqLCBqb2Jq
ZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpmaWVsZElE
LCBqYnl0ZSk7CiAgdm9pZCAoKlNldENoYXJGaWVsZCkgKEpOSUVudiAqLCBqb2JqZWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpmaWVsZElELCBqY2hhcik7
CiAgdm9pZCAoKlNldFNob3J0RmllbGQpIChKTklFbnYgKiwgam9iamVjdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZmllbGRJRCwganNob3J0KTsKICB2b2lk
ICgqU2V0SW50RmllbGQpIChKTklFbnYgKiwgam9iamVjdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqZmllbGRJRCwgamludCk7CiAgdm9pZCAoKlNldExvbmdG
aWVsZCkgKEpOSUVudiAqLCBqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpmaWVsZElELCBqbG9uZyk7CiAgdm9pZCAoKlNldEZsb2F0RmllbGQpIChK
TklFbnYgKiwgam9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqZmllbGRJRCwgamZsb2F0KTsKICB2b2lkICgqU2V0RG91YmxlRmllbGQpIChKTklFbnYg
Kiwgam9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
ZmllbGRJRCwgamRvdWJsZSk7CgogIGptZXRob2RJRCAoKkdldFN0YXRpY01ldGhvZElEKSAoSk5J
RW52ICosIGpjbGFzcywgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7CgogIGpvYmplY3QgKCpDYWxsU3RhdGljT2Jq
ZWN0TWV0aG9kKSAoSk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAgam9iamVjdCAoKkNhbGxTdGF0aWNP
YmplY3RNZXRob2RWKSAoSk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIGpvYmplY3QgKCpDYWxs
U3RhdGljT2JqZWN0TWV0aG9kQSkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKik7CiAgamJvb2xl
YW4gKCpDYWxsU3RhdGljQm9vbGVhbk1ldGhvZCkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJ
RCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogIGpi
b29sZWFuICgqQ2FsbFN0YXRpY0Jvb2xlYW5NZXRob2RWKSAoSk5JRW52ICosIGpjbGFzcywgam1l
dGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9s
aXN0KTsKICBqYm9vbGVhbiAoKkNhbGxTdGF0aWNCb29sZWFuTWV0aG9kQSkgKEpOSUVudiAqLCBq
Y2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAganZhbHVlICopOwogIGpieXRlICgqQ2FsbFN0YXRpY0J5dGVNZXRob2QpIChKTklFbnYg
KiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLi4uKT