public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/8014: Internal compiler error in `output_die'
@ 2002-09-23 18:06 milgramjh
  0 siblings, 0 replies; 2+ messages in thread
From: milgramjh @ 2002-09-23 18:06 UTC (permalink / raw)
  To: gcc-gnats


>Number:         8014
>Category:       c++
>Synopsis:       Internal compiler error in `output_die'
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Sep 23 18:06:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     J. Milgram
>Release:        gcc-2.95.3
>Organization:
>Environment:
mips-sgi-irix6.5
Reading specs from /usr/people/milgram/local/gcc295/lib/gcc-lib/mips-sgi-irix6.5/2.95.3/specs
gcc version 2.95.3 20010315 (release)
>Description:
Compiling octave-2.0.16 (seen also in 2.0.17)
cd src ; make
gcc -c  -I. -I.. -I../liboctave -I../src -I../libcruft/misc  -I../glob -I../glob -DHAVE_CONFIG_H -fno-rtti -fno-exceptions -fno-implicit-templates -g -O2 -Wall sighandlers.cc
sighandlers.cc:649: Internal compiler error in `output_die', at dwarf2out.c:5433
Please submit a full bug report.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
>How-To-Repeat:
gcc was built on same machine
gcc was configured ./configure --prefix=/usr/people/milgram/local
>Fix:

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

IyAxICJzaWdoYW5kbGVycy5jYyIKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIuLi9jb25m
aWcuaCIgMQogCiAKCiAKCgoKIAoKCiAKIAoKIAogCgogCiAKCiAKCiAKCiAKIAoKIAoKCiAKCgog
CgoKIAoKCiAKCgogCgoKIAogCgogCgoKCiAKIAoKIAogCgogCiAKCiAKIAoKIAoKIAoKIAogCgog
CgoKIAogCgogCgoKCgoKCiAKCiAKCgogCiAKCiAKCgogCiAKCiAKIAoKIAoKCgogCgogCgogCgoK
IAoKCiAKIAoKCiAKCiAKCiAKICAKCiAKCgogCgoKIAoKCiAKIAoKIAoKCiAKIAoKIAoKCiAKIAoK
IAoKCiAKIAoKIAogCgogCgoKIAogCgogCgoKIAogCgogCiAKCiAKCgoKIAoKCgogCiAKCiAKCgog
CgoKIAogCgogCgoKIAogCgogCiAKCiAKIAoKIAogCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgog
CgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAK
CgogCiAKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAK
CgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCiAKCiAKIAoKIAoKCiAKCgogCgoKIAoKCiAKCgog
CiAKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKIAoKIAogCgogCgoKIAoK
CiAKCgogCgoKIAoKCiAKIAoKIAoKCiAKCgogCgoKIAogCgogCgoKIAogCgogCgoKIAoKCiAKCgog
CgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKIAoKIAoKCiAKCgog
CgoKIAoKCiAKCgogCgoKIAoKCiAKIAoKIAogCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKIAoKIAoK
CiAKIAoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAogCgogCgoKIAoKCiAK
CgogCgoKIAoKCiAKIAoKIAogCgogCgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjQgInNp
Z2hhbmRsZXJzLmNjIiAyCgoKCiMgMSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUv
bGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9jc3RkbGliIiAxIDMKIAogCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMK
CgoKZXh0ZXJuICJDIiB7CgojaWRlbnQgICIkUmV2aXNpb246IDEuNzggJCIKIAoKCgoKCgoKCgoK
CgoKCgoKIAogCgogCiAKIAoKIAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0YW5kYXJkcy5oIiAxIDMK
CgogCgoKCgoKCgoKCgoKCgoKCiNpZGVudCAgIiRJZDogc3RhbmRhcmRzLmgsdiAxLjE5IDE5OTcv
MTIvMTUgMjE6MzA6MjUganBoIEV4cCAkIgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMK
CiMgMSAiL3Vzci9pbmNsdWRlL3NnaWRlZnMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgpleHRlcm4g
IkMiIHsKCgojaWRlbnQgICIkUmV2aXNpb246IDEuMTEgJCIKCiAKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgogCgoKCgoKCgoKCiAKCgoKCgoKCQkgCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCnR5cGVkZWYg
aW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCAgX191aW50MzJfdDsKCgoKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCSAKdHlwZWRlZiBsb25nIGxvbmcgX19p
bnQ2NF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgX191aW50NjRfdDsKCiMgMjE0ICIv
dXNyL2luY2x1ZGUvc2dpZGVmcy5oIiAzCgoKCgoKdHlwZWRlZiBfX2ludDMyX3QgX19wc2ludF90
Owp0eXBlZGVmIF9fdWludDMyX3QgX19wc3Vuc2lnbmVkX3Q7CgoKCgoKCgogCgoKCgoKCgoKCgoK
IAp0eXBlZGVmIF9faW50MzJfdCBfX3NjaW50X3Q7CnR5cGVkZWYgX191aW50MzJfdCBfX3NjdW5z
aWduZWRfdDsKCgoKCgoKfQoKCgojIDM1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoK
CgogCgoKCiAKCgojIDY0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKdHlwZWRlZglzdHJ1Y3QgewoJIGludAlxdW90OwoJIGludAlyZW07Cgl9IGRp
dl90OwoKdHlwZWRlZiBzdHJ1Y3QgewoJIGxvbmcJcXVvdDsKCSBsb25nCXJlbTsKCX0gbGRpdl90
OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQJc2l6ZV90OwoKCgoKCgoKCgoKdHlwZWRlZiBpbnQJ
c3NpemVfdDsKCgoKCgoKCgoKCnR5cGVkZWYgbG9uZyB3Y2hhcl90OwoKCgoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvbG9jYWxlX2F0dHIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMi
IHsKCiNpZGVudCAgIiRSZXZpc2lvbjogMS40ICQiCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCnR5
cGVkZWYgc3RydWN0IHsKCiAgICB1bnNpZ25lZCBpbnQJX2NsYXNzIFsgMjU3IF07CiAgICBzaWdu
ZWQgc2hvcnQJX2xvd2VyIFsgMjU3IF07CiAgICBzaWduZWQgc2hvcnQJX3VwcGVyIFsgMjU3IF07
CgogICAgY2hhcgkJX2Nzd2lkdGggWyA3IF07CiAgICBjaGFyCQlfZmlsbCBbIDEgXTsKCiAgICAg
Cgp9IF9fY3R5cGVfdDsKCiAKdHlwZWRlZiBpbnQJKCpfX2lzc2V0X2Z1bmNfdCkoaW50KTsKCgoK
Cgl0eXBlZGVmIGxvbmcJd2ludF90OwoKCgoKCiAKdHlwZWRlZiBpbnQJKCpfX2lzY29kZXNldF9m
dW5jX3QpKGludCwgd2ludF90KTsKCiAKdHlwZWRlZiBzdHJ1Y3QgX19hdHRyIHsKCiAgICBfX2N0
eXBlX3QgKgkJX2N0eXBlX3RibDsJIAoKICAgIHN0cnVjdCBfY3NpbmZvIHsJCQkgCgl1bnNpZ25l
ZCBjaGFyCV9ldWN3aWR0aFszXTsJIAoJdW5zaWduZWQgY2hhcglfc2Nyd2lkdGhbM107CSAKCXVu
c2lnbmVkIGNoYXIJX21iX2N1cl9tYXg7CSAKICAgIH0gX2NzaW5mbzsKCiAgICBzdHJ1Y3QgX2V1
Y19mdW5jIHsJCQkgCglpbnQJCV9pc19ldWM7CSAKCV9faXNzZXRfZnVuY190CV9pc3NldDI7CSAK
CV9faXNzZXRfZnVuY190CV9pc3NldDM7CSAKCV9faXNjb2Rlc2V0X2Z1bmNfdCBfaXNjb2Rlc2V0
OwkgCiAgICB9IF9ldWNfZnVuYzsKCiAgICBzdHJ1Y3QgX2NvbGxhdGVfcmVzIHsJCSAKCXVuc2ln
bmVkIGNoYXIJX2NvbGxfYXNfY21wOwkgCiAgICB9IF9jb2xsYXRlX3JlczsKCiAgICB2b2lkICoJ
CV9maWxsWzE1XTsJIAp9IF9fYXR0cl90OwoKCgogCmV4dGVybiBfX2F0dHJfdCBfX2xpYmNfYXR0
cjsKCgp9CgoKIyAxMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCgoKCgogCmV4
dGVybiBkb3VibGUgYXRvZihjb25zdCBjaGFyICopOwpleHRlcm4gaW50IGF0b2koY29uc3QgY2hh
ciAqKTsKZXh0ZXJuIGxvbmcgaW50IGF0b2woY29uc3QgY2hhciAqKTsKZXh0ZXJuIGRvdWJsZSBz
dHJ0b2QoY29uc3QgY2hhciAqLCBjaGFyICoqKTsKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbChjb25z
dCBjaGFyICosIGNoYXIgKiosIGludCk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3Vs
KGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0ZXJuIGludCByYW5kKHZvaWQpOwpleHRl
cm4gdm9pZCBzcmFuZCh1bnNpZ25lZCBpbnQpOwpleHRlcm4gdm9pZCAqY2FsbG9jKHNpemVfdCwg
c2l6ZV90KTsKZXh0ZXJuIHZvaWQgZnJlZSh2b2lkICopOwpleHRlcm4gdm9pZCAqbWFsbG9jKHNp
emVfdCk7CmV4dGVybiB2b2lkICpyZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKCgoKCgoKCmV4dGVy
biB2b2lkIGFib3J0KHZvaWQpOwpleHRlcm4gaW50IGF0ZXhpdCh2b2lkICgqKSh2b2lkKSk7CmV4
dGVybiB2b2lkIGV4aXQoaW50KTsKCgoKCmV4dGVybiBjaGFyICpnZXRlbnYoY29uc3QgY2hhciAq
KTsKZXh0ZXJuIGludCBzeXN0ZW0oY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgKmJzZWFyY2go
Y29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCwgc2l6ZV90LAoJaW50ICgqKShjb25z
dCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwpleHRlcm4gdm9pZCBxc29ydCh2b2lkICosIHNpemVf
dCwgc2l6ZV90LAoJaW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwoKCgoKaW5s
aW5lIGludCBhYnMoaW50IHgpIHtyZXR1cm4geCA+IDAgPyB4IDogLXg7fQoKCgoKCgoKCgpleHRl
cm4gZGl2X3QgZGl2KGludCwgaW50KTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMobG9uZyk7CgoKCgpl
eHRlcm4gbGRpdl90IGxkaXYobG9uZywgbG9uZyk7CmV4dGVybiBpbnQgbWJ0b3djKHdjaGFyX3Qg
KiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gaW50IG1ibGVuKGNvbnN0IGNoYXIgKiwg
c2l6ZV90KTsKZXh0ZXJuIGludCB3Y3RvbWIoY2hhciAqLCB3Y2hhcl90KTsKZXh0ZXJuIHNpemVf
dCBtYnN0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHNpemVf
dCB3Y3N0b21icyhjaGFyICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKCgoJIApleHRlcm4g
aW50IHB1dGVudihjb25zdCBjaGFyICopOwpleHRlcm4gZG91YmxlCWRyYW5kNDgodm9pZCk7CmV4
dGVybiBkb3VibGUJZXJhbmQ0OCh1bnNpZ25lZCBzaG9ydCBbM10pOwpleHRlcm4gbG9uZwlscmFu
ZDQ4KHZvaWQpOwpleHRlcm4gbG9uZwlucmFuZDQ4KHVuc2lnbmVkIHNob3J0IFszXSk7CmV4dGVy
biBsb25nCW1yYW5kNDgodm9pZCk7CmV4dGVybiBsb25nCWpyYW5kNDgodW5zaWduZWQgc2hvcnQg
WzNdKTsKZXh0ZXJuIHZvaWQJc3JhbmQ0OChsb25nKTsKZXh0ZXJuIHZvaWQJbGNvbmc0OCh1bnNp
Z25lZCBzaG9ydCBpbnQgWzddKTsKZXh0ZXJuIHZvaWQgICAgIHNldGtleShjb25zdCBjaGFyICop
OwpleHRlcm4gdW5zaWduZWQgc2hvcnQgKiBzZWVkNDgodW5zaWduZWQgc2hvcnQgaW50IFszXSk7
CgoKCgkgCmV4dGVybiBsb25nIGE2NGwoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmVjdnQo
ZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpmY3Z0KGRvdWJsZSwgaW50
LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqZ2N2dChkb3VibGUsIGludCwgY2hhciAqKTsK
ZXh0ZXJuIGludCBnZXRzdWJvcHQoY2hhciAqKiwgY2hhciAqIGNvbnN0ICosIGNoYXIgKiopOwpl
eHRlcm4gaW50IGdyYW50cHQoaW50KTsKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSh1bnNpZ25lZCBp
bnQsIGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKmw2NGEobG9uZyk7CmV4dGVybiBjaGFy
ICpta3RlbXAoY2hhciAqKTsKZXh0ZXJuIGludCBta3N0ZW1wKGNoYXIgKik7CmV4dGVybiBjaGFy
ICpwdHNuYW1lKGludCk7CmV4dGVybiBsb25nIHJhbmRvbSh2b2lkKTsKZXh0ZXJuIGNoYXIgKnJl
YWxwYXRoKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnNldHN0YXRlKGNvbnN0
IGNoYXIgKik7CmV4dGVybiB2b2lkIHNyYW5kb20odW5zaWduZWQpOwpleHRlcm4gaW50IHR0eXNs
b3Qodm9pZCk7CmV4dGVybiBpbnQgdW5sb2NrcHQoaW50KTsKZXh0ZXJuIHZvaWQgKnZhbGxvYyhz
aXplX3QpOwoKCgoKCgoKZXh0ZXJuIGludCByYW5kX3IodW5zaWduZWQgaW50ICopOwoKCgoJIAoj
IDEgIi4uL2xpYm9jdGF2ZS9nZXRvcHQuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJu
ICJDIiB7CgoKIAoKCgoKCmV4dGVybiBjaGFyICpvcHRhcmc7CgogCgoKCgoKCgoKCgoKZXh0ZXJu
IGludCBvcHRpbmQ7CgogCgoKZXh0ZXJuIGludCBvcHRlcnI7CgogCgpleHRlcm4gaW50IG9wdG9w
dDsKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3Qgb3B0aW9uCnsKCiAgY29uc3QgY2hhciAq
bmFtZTsKCgoKICAgCgogIGludCBoYXNfYXJnOwogIGludCAqZmxhZzsKICBpbnQgdmFsOwp9OwoK
IAoKCgoKCgoKCgoKCgpleHRlcm4gaW50IGdldG9wdCAoKTsKCmV4dGVybiBpbnQgZ2V0b3B0X2xv
bmcgKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwgY29uc3QgY2hhciAqc2hvcnRvcHRzLAoJ
CSAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZCk7CmV4
dGVybiBpbnQgZ2V0b3B0X2xvbmdfb25seSAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LAoJ
CQkgICAgIGNvbnN0IGNoYXIgKnNob3J0b3B0cywKCQkgICAgICAgICAgICAgY29uc3Qgc3RydWN0
IG9wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZCk7CgogCmV4dGVybiBpbnQgX2dldG9wdF9p
bnRlcm5hbCAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LAoJCQkgICAgIGNvbnN0IGNoYXIg
KnNob3J0b3B0cywKCQkgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHMs
IGludCAqbG9uZ2luZCwKCQkJICAgICBpbnQgbG9uZ19vbmx5KTsKCgoKCgoKCgoKfQoKCgojIDI1
MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCmV4dGVybiBpbnQgYXRjaGVja3BvaW50KHZv
aWQgKCopKHZvaWQpKTsKZXh0ZXJuIGludCBhdHJlc3RhcnQodm9pZCAoKikodm9pZCkpOwpleHRl
cm4gaW50IGR1cDIoaW50LCBpbnQpOwpleHRlcm4gaW50IGdldHB3KGludCwgY2hhciAqKTsKZXh0
ZXJuIGNoYXIgKmdldGN3ZChjaGFyICosIHNpemVfdCk7CmV4dGVybiBjaGFyICpnZXRsb2dpbih2
b2lkKTsKZXh0ZXJuIGNoYXIgKmdldHBhc3MoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBpc2F0
dHkoaW50KTsKZXh0ZXJuIHZvaWQgbDN0b2wobG9uZyAqLCBjb25zdCBjaGFyICosIGludCk7CmV4
dGVybiB2b2lkIGx0b2wzKGNoYXIgKiwgY29uc3QgbG9uZyAqLCBpbnQpOwpleHRlcm4gdm9pZCAq
bWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpOwoKCgoKCgoKCSAKCmV4dGVybiBsb25nIGRvdWJsZSBh
dG9sZChjb25zdCBjaGFyICopOwpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZChjb25zdCBjaGFy
ICpucHRyLCBjaGFyICoqZW5kcHRyKTsKZXh0ZXJuIGNoYXIgKnFlY3Z0KGxvbmcgZG91YmxlLCBp
bnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpxZmN2dChsb25nIGRvdWJsZSwgaW50LCBp
bnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqcWdjdnQobG9uZyBkb3VibGUsIGludCwgY2hhciAq
KTsKZXh0ZXJuIGNoYXIgKmVjdnRsKGxvbmcgZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4
dGVybiBjaGFyICpmY3Z0bChsb25nIGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4g
Y2hhciAqZ2N2dGwobG9uZyBkb3VibGUsIGludCwgY2hhciAqKTsKCgoKCiAKCgoKCgoKCnR5cGVk
ZWYgc3RydWN0IHsKCSBfX2ludDY0X3QJcXVvdDsKCSBfX2ludDY0X3QJcmVtOwoJfSBsbGRpdl90
OwoKZXh0ZXJuIF9faW50NjRfdCBhdG9sbChjb25zdCBjaGFyICopOwpleHRlcm4gX19pbnQ2NF90
IHN0cnRvbGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4gX191aW50NjRfdCBz
dHJ0b3VsbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CmV4dGVybiBfX2ludDY0X3QgbGxh
YnMoX19pbnQ2NF90KTsKCgoKCmV4dGVybiBsbGRpdl90IGxsZGl2KF9faW50NjRfdCwgX19pbnQ2
NF90KTsKCgoKCgoKCmV4dGVybiBjaGFyICplY3Z0X3IoZG91YmxlLCBpbnQsIGludCAqLCBpbnQg
KiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmZjdnRfcihkb3VibGUsIGludCwgaW50ICosIGludCAq
LCBjaGFyICopOwoKZXh0ZXJuIGNoYXIgKnFlY3Z0X3IobG9uZyBkb3VibGUsIGludCwgaW50ICos
IGludCAqLCBjaGFyICopOwpleHRlcm4gY2hhciAqcWZjdnRfcihsb25nIGRvdWJsZSwgaW50LCBp
bnQgKiwgaW50ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICplY3Z0bF9yKGxvbmcgZG91YmxlLCBp
bnQsIGludCAqLCBpbnQgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmZjdnRsX3IobG9uZyBkb3Vi
bGUsIGludCwgaW50ICosIGludCAqLCBjaGFyICopOwoKCgoKCgp9CgoKIyAzNDMgIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMwoKCgojIDYgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1
L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvY3N0ZGxpYiIgMiAzCgoKCiNwcmFnbWEgaW50ZXJmYWNlICJjc3RkbGliIgoKCmV4dGVy
biAiQysrIiB7CgoKCgppbmxpbmUgbG9uZyAgIGFicyhsb25nIHgpCQl7IHJldHVybiB4ID49IDAg
PyB4IDogLXg7IH0KCiAKCn0gIAoKCiMgMjcgInNpZ2hhbmRsZXJzLmNjIiAyCgojIDEgIi91c3Iv
cGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUv
Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3NpZ25hbCIgMSAzCiAKIAoKCgojIDEg
Ii91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCgoKCmV4dGVybiAiQyIgewoKI2lkZW50ICAiJFJl
dmlzaW9uOiAxLjU3ICQiCiAKCgoKCgoKCgoKCgoKCgoKCiAKIAoKIAogCiAKCiAKCgoKCgoKCgoK
IyAxMDggIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Np
Z25hbC5oIiAxIDMKIAoKCgoKCgoKCgoKIAogCgogCiAKIAoKCgoKCmV4dGVybiAiQyIgewoKCgoj
aWRlbnQgCSIkUmV2aXNpb246IDMuMTQ0ICQiCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgogCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKIAogCgogCiAKIAoKCgoKI2lkZW50IAkiJFJldmlzaW9u
OiAzLjEzOSAkIgoKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1Y2hhcl90Owp0eXBlZGVm
IHVuc2lnbmVkIHNob3J0ICB1c2hvcnRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgdWludF90
Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICB1bG9uZ190OwoKIAoKIyAxICIvdXNyL2luY2x1ZGUv
c3lzL3B0aHJlYWQuaCIgMSAzCgoKCgpleHRlcm4gIkMiIHsKCgogCgoKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgCQlwdGhyZWFkX3Q7CQkgCgoKdHlwZWRlZiBzdHJ1Y3QgeyBsb25nIF9fRFs1XTsgfSBw
dGhyZWFkX2F0dHJfdDsJCSAKdHlwZWRlZiBzdHJ1Y3QgeyBsb25nIF9fRFs4XTsgfSBwdGhyZWFk
X211dGV4X3Q7CSAKdHlwZWRlZiBzdHJ1Y3QgeyBsb25nIF9fRFsyXTsgfSBwdGhyZWFkX211dGV4
YXR0cl90OwkgCnR5cGVkZWYgc3RydWN0IHsgbG9uZyBfX0RbOF07IH0gcHRocmVhZF9jb25kX3Q7
CQkgCnR5cGVkZWYgc3RydWN0IHsgbG9uZyBfX0RbMl07IH0gcHRocmVhZF9jb25kYXR0cl90Owkg
CnR5cGVkZWYgc3RydWN0IHsgbG9uZyBfX0RbMTZdOyB9IHB0aHJlYWRfcndsb2NrX3Q7CSAKdHlw
ZWRlZiBzdHJ1Y3QgeyBsb25nIF9fRFs0XTsgfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsJIAp0eXBl
ZGVmIGludAkJCXB0aHJlYWRfa2V5X3Q7CQkgCnR5cGVkZWYgaW50CQkJcHRocmVhZF9vbmNlX3Q7
CQkgCgoKCgp9CgoKCiMgNDAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCiAKdHlw
ZWRlZgljaGFyICoJCWFkZHJfdDsJCSAKdHlwZWRlZgljaGFyICoJCWNhZGRyX3Q7CSAKCnR5cGVk
ZWYJX19pbnQ2NF90CWRhZGRyX3Q7CSAKCgoKdHlwZWRlZglsb25nCQlwZ25vX3Q7CQkgCnR5cGVk
ZWYJX191aW50MzJfdAlwZm5fdDsJCSAKdHlwZWRlZglzaG9ydAkJY250X3Q7CQkgCnR5cGVkZWYg
dW5zaWduZWQgbG9uZwliYXNpY3RpbWVfdDsKdHlwZWRlZiBfX2ludDY0X3QJbWljcm9fdDsKIAoK
Cgp0eXBlZGVmIF9faW50MzJfdAlwZ2NudF90OwkgCgp0eXBlZGVmIGVudW0geyBCX0ZBTFNFLCBC
X1RSVUUgfSBib29sZWFuX3Q7CgoKIAoKCgoKCgoKCnR5cGVkZWYgbG9uZwkJCWlkX3Q7CSAKCQkJ
CQkgCgkJCQkJIAoJCQkJCSAKCQkJCQkgCgoKCgoKIAoKCnR5cGVkZWYgdWxvbmdfdAltYWpvcl90
OwkgCnR5cGVkZWYgdWxvbmdfdAltaW5vcl90OwkgCgoKCgoKCiAKCgoKCgoKCgoKCnR5cGVkZWYJ
dXNob3J0X3Qgb19tb2RlX3Q7CQkgCnR5cGVkZWYgc2hvcnQJb19kZXZfdDsJCSAKdHlwZWRlZgl1
c2hvcnRfdCBvX3VpZF90OwkJIAp0eXBlZGVmCW9fdWlkX3QJb19naWRfdDsJCSAKdHlwZWRlZglz
aG9ydAlvX25saW5rX3Q7CQkgCnR5cGVkZWYgc2hvcnQJb19waWRfdDsJCSAKdHlwZWRlZiBfX3Vp
bnQzMl90IG9faW5vX3Q7CQkgCgoKdHlwZWRlZgl1bnNpZ25lZCBsb25nCW1vZGVfdDsJCSAKdHlw
ZWRlZgl1bnNpZ25lZCBsb25nCWRldl90OwkJIAp0eXBlZGVmCWxvbmcJCXVpZF90Owp0eXBlZGVm
CWxvbmcJCWdpZF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJbmxpbmtfdDsJIAp0eXBlZGVmIGxv
bmcJCXBpZF90OwkJIAoKCgoKCgoKCgoKdHlwZWRlZiBpbnQgdGlkX3Q7ICAgICAgICAgICAgICAg
ICAgICAgICAKCnR5cGVkZWYgZGV2X3QJdmVydGV4X2hkbF90OwkJIAoKCnR5cGVkZWYJX191aW50
NjRfdAlpbm9fdDsJCSAKCgoKdHlwZWRlZiBfX3VpbnQ2NF90CWlubzY0X3Q7CSAKCgoKCgoKCgp0
eXBlZGVmIF9faW50NjRfdAlvZmZfdDsJCSAKCgoKCgoKCnR5cGVkZWYJX19pbnQ2NF90CW9mZjY0
X3Q7CSAKCgp0eXBlZGVmIF9fc2NpbnRfdAlfX3Njb2ZmX3Q7CSAKCnR5cGVkZWYgX19zY29mZl90
CXNjb2ZmX3Q7CSAKCgoKCSAKdHlwZWRlZglfX2ludDY0X3QJYmxrY250NjRfdDsKdHlwZWRlZglf
X3VpbnQ2NF90CWZzYmxrY250NjRfdDsKdHlwZWRlZglfX3VpbnQ2NF90CWZzZmlsY250NjRfdDsK
CgoKdHlwZWRlZglfX2ludDY0X3QJYmxrY250X3Q7CSAKdHlwZWRlZglfX3VpbnQ2NF90CWZzYmxr
Y250X3Q7CSAKdHlwZWRlZglfX3VpbnQ2NF90CWZzZmlsY250X3Q7CSAKCgoKCgoKdHlwZWRlZgls
b25nCQlzd2Jsa190Owp0eXBlZGVmCXVuc2lnbmVkIGxvbmcJcGFkZHJfdDsJIAp0eXBlZGVmCXVu
c2lnbmVkIGxvbmcJaW9wYWRkcl90OwkgCnR5cGVkZWYJaW50CQlrZXlfdDsJCSAKdHlwZWRlZgl1
bnNpZ25lZCBjaGFyCXVzZV90OwkJIAp0eXBlZGVmCWxvbmcJCXN5c2lkX3Q7CnR5cGVkZWYJc2hv
cnQJCWluZGV4X3Q7Cgp0eXBlZGVmIHNpZ25lZCBzaG9ydAluYXNpZF90OyAgICAgICAgIAp0eXBl
ZGVmIHNpZ25lZCBzaG9ydAljbm9kZWlkX3Q7CSAKdHlwZWRlZglzaWduZWQgY2hhciAgCXBhcnRp
ZF90OwkgCnR5cGVkZWYgc2lnbmVkIHNob3J0IAltb2R1bGVpZF90OwkgCnR5cGVkZWYgc2lnbmVk
IHNob3J0IAljbW9kdWxlaWRfdDsJIAoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgCWxvY2tfdDsJCSAK
dHlwZWRlZglzaWduZWQgc2hvcnQJY3B1aWRfdDsJIAp0eXBlZGVmCXVuc2lnbmVkIGNoYXIJcHJp
X3Q7CQkgCnR5cGVkZWYgX191aW50NjRfdAlhY2N1bV90OwkgCnR5cGVkZWYgX19pbnQ2NF90CXBy
aWRfdDsJCSAKdHlwZWRlZiBfX2ludDY0X3QJYXNoX3Q7CQkgCnR5cGVkZWYgc2hvcnQJCWNlbGxf
dDsJCSAKdHlwZWRlZiBpbnQJCWNyZWRpZF90OwkgCnR5cGVkZWYgX19pbnQ2NF90CWppZF90OwkJ
IAoKIyAyMTQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoKCiMgMjI0ICIvdXNyL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDMKCgoKCgp0eXBlZGVmCWxvbmcJCXRpbWVfdDsJCSAKCgoKCgoKCgoK
dHlwZWRlZglsb25nCQljbG9ja190OyAgCgoKCgoKCiMgMjU0ICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMKCgoKCnR5cGVkZWYgaW50ICAgICAgICAgICAgIGNsb2NraWRfdDsKCgoKdHlwZWRl
ZiBpbnQJCXRpbWVyX3Q7CgoKCiAKCgoKCnR5cGVkZWYJdW5zaWduZWQgaW50CXVzZWNvbmRzX3Q7
CgoKIAoKCgp0eXBlZGVmIF9fc2N1bnNpZ25lZF90CWJpdG51bV90OwkgCnR5cGVkZWYgX19zY3Vu
c2lnbmVkX3QJYml0bGVuX3Q7CSAKCgp0eXBlZGVmIGludCBwcm9jZXNzb3JpZF90OwkJIAp0eXBl
ZGVmIGludCB0b2lkX3Q7CQkJIAp0eXBlZGVmCWxvbmcgKnFhZGRyX3Q7CQkgICAgICAgCnR5cGVk
ZWYgX191aW50MzJfdCBpbnN0X3Q7CQkgCgogCgoKCgoKCnR5cGVkZWYgX191aW50NjRfdCBtYWNo
cmVnX3Q7CgoKIAoKCgoKCgp0eXBlZGVmIF9fdWludDY0X3QgZnByZWdfdDsKCgogCgoKCgoKCgp0
eXBlZGVmIHNpZ25lZCBjaGFyICAgICAgICAgICAgIGludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBj
aGFyICAgICAgICAgICB1aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCAgICAgICAgICAgIGlu
dDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgICAgICAgdWludDE2X3Q7CnR5cGVkZWYg
c2lnbmVkIGludCAgICAgICAgICAgICAgaW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAg
ICAgICAgICB1aW50MzJfdDsKdHlwZWRlZiBfX2ludDY0X3QgCQlpbnQ2NF90Owp0eXBlZGVmIF9f
dWludDY0X3QJCXVpbnQ2NF90Owp0eXBlZGVmIF9faW50NjRfdCAJCWludG1heF90Owp0eXBlZGVm
IF9fdWludDY0X3QJCXVpbnRtYXhfdDsKdHlwZWRlZiBzaWduZWQgbG9uZyBpbnQgICAgICAgICBp
bnRwdHJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCAgICAgICB1aW50cHRyX3Q7CgoKIAoK
Cgp0eXBlZGVmCXVuc2lnbmVkIGNoYXIJdV9pbnQ4X3Q7CnR5cGVkZWYJdW5zaWduZWQgc2hvcnQJ
dV9pbnQxNl90Owp0eXBlZGVmCV9fdWludDMyX3QJdV9pbnQzMl90OwoKCiAKCgoKCgoKCgoKCgoK
CgoKIAoKCgp0eXBlZGVmCWxvbmcJaG9zdGlkX3Q7CgogCgoKCgoKCgoKIAoKCgojIDEgIi91c3Iv
aW5jbHVkZS9zeXMvYnNkX3R5cGVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgojaWRlbnQg
CSIkUmV2aXNpb246IDEuMiAkIgoKIAoKCgoKdHlwZWRlZglzdHJ1Y3QgeyBpbnQgclsxXTsgfSAq
CXBoeXNhZHI7CnR5cGVkZWYJdW5zaWduZWQgY2hhcgl1bmNoYXI7CnR5cGVkZWYJdW5zaWduZWQg
Y2hhcgl1X2NoYXI7CnR5cGVkZWYJdW5zaWduZWQgc2hvcnQJdXNob3J0Owp0eXBlZGVmCXVuc2ln
bmVkIHNob3J0CXVfc2hvcnQ7CnR5cGVkZWYJdW5zaWduZWQgaW50CXVpbnQ7CnR5cGVkZWYJdW5z
aWduZWQgaW50CXVfaW50Owp0eXBlZGVmCXVuc2lnbmVkIGxvbmcJdWxvbmc7CnR5cGVkZWYJdW5z
aWduZWQgbG9uZwl1X2xvbmc7CnR5cGVkZWYJc3RydWN0CV9xdWFkIHsgbG9uZyB2YWxbMl07IH0g
cXVhZDsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIAoKCgoKCgoK
CgoKCgoKCgogCiAKIAoKIAogCiAKIAoKCgoKI2lkZW50IAkiJFJldmlzaW9uOiAxLjE3ICQiCgoK
ZXh0ZXJuICJDIiB7CgoKCgogCgoKCgoKCiAKCgoKCgoKCgoKCnR5cGVkZWYJbG9uZwlmZF9tYXNr
X3Q7CnR5cGVkZWYJdW5zaWduZWQgbG9uZwl1ZmRfbWFza190OwoKCgoKCgoKCgoKdHlwZWRlZiBz
dHJ1Y3QgZmRfc2V0IHsKCgoKCWZkX21hc2tfdAlmZHNfYml0c1soKCggMTAyNCAgKSsoKCAgKGlu
dCkoc2l6ZW9mKGZkX21hc2tfdCkgKiA4ICkgICktMSkpLyggIChpbnQpKHNpemVvZihmZF9tYXNr
X3QpICogOCApICApKSBdOwp9IGZkX3NldDsKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmlu
Zy5oIiAxIDMKCgoKZXh0ZXJuICJDIiB7CgojaWRlbnQgICIkUmV2aXNpb246IDEuNDEgJCIKIAoK
CgoKCgoKCgoKCgoKCgoKIAogCiAKCiAKIAogCiAKCiAKCgoKCgoKIyA0OCAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAzCgoKCgoKCgoKCgoKCgoKCgogCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lk
ICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1lbW1vdmUodm9pZCAqLCBj
b25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJjcHkoY2hhciAqLCBjb25zdCBj
aGFyICopOwpleHRlcm4gY2hhciAqc3RybmNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90
KTsKZXh0ZXJuIGNoYXIgKnN0cmNhdChjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFy
ICpzdHJuY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCAqbWVt
Y2NweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwpleHRlcm4gaW50IG1lbWNt
cChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBzdHJjbXAo
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0cmNvbGwoY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0cm5jbXAoY29uc3QgY2hhciAqLCBjb25z
dCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBzaXplX3Qgc3RyeGZybShjaGFyICosIGNvbnN0IGNo
YXIgKiwgc2l6ZV90KTsKCmV4dGVybiB2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqLCBpbnQsIHNp
emVfdCk7CmV4dGVybiBjaGFyICpzdHJjaHIoY29uc3QgY2hhciAqLCBpbnQpOwoKZXh0ZXJuIHNp
emVfdCBzdHJjc3BuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKI3ByYWdtYSBpbnRfdG9f
dW5zaWduZWQgc3RyY3NwbgoKZXh0ZXJuIGNoYXIgKnN0cnBicmsoY29uc3QgY2hhciAqLCBjb25z
dCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RycmNocihjb25zdCBjaGFyICosIGludCk7CgpleHRl
cm4gc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiNwcmFnbWEgaW50
X3RvX3Vuc2lnbmVkIHN0cnNwbgoKZXh0ZXJuIGNoYXIgKnN0cnN0cihjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKik7CgpleHRlcm4gY2hhciAqc3RydG9rKGNoYXIgKiwgY29uc3QgY2hhciAqKTsK
ZXh0ZXJuIHZvaWQgKm1lbXNldCh2b2lkICosIGludCwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnN0
cmVycm9yKGludCk7CmV4dGVybiBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7CiNwcmFnbWEg
aW50X3RvX3Vuc2lnbmVkIHN0cmxlbgoKCmV4dGVybiBpbnQgZmZzKGludCk7CiAKZXh0ZXJuIGlu
dCBzdHJjYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBzdHJu
Y2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKCgoKZXh0ZXJuIGNo
YXIgKnN0cmR1cChjb25zdCBjaGFyICopOwoKCgpleHRlcm4gY2hhciAqc3RydG9rX3IoY2hhciAq
LCBjb25zdCBjaGFyICosIGNoYXIgKiopOwoKCiMgMTMyICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi
IDMKCgoKfQoKCiMgMjA1ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKCiMgODAgIi91c3Iv
aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgojIDkxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVj
dC5oIiAzCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCnR5cGVkZWYJbG9uZwlmZF9tYXNrOwoK
CgoKCgoKCn0KCgojIDQ0ICIvdXNyL2luY2x1ZGUvc3lzL2JzZF90eXBlcy5oIiAyIDMKCgoKIyAz
NzMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCgp0eXBlZGVmIF9fdWludDY0X3Qg
a19zaWdzZXRfdDsJIAoKCgoKCgoKCgojIDQ5OCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
CgoKCiMgODIgIi91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDIgMwoKIAoKCgoKCgoKCiAKCgoK
CgoKCgogCnR5cGVkZWYgdm9pZCAJKCpTSUdfUEYpIChpbnQgKTsKCgoKCgoKCgogCgoKIyAxICIv
dXNyL2luY2x1ZGUvc3lzL3NpZ2V2ZW50LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiNpZGVu
dCAJIiRSZXZpc2lvbjogMS44ICQiCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoKCnR5cGVk
ZWYgdW5pb24gc2lndmFsIHsKCWludAlzaXZhbF9pbnQ7Cgl2b2lkCSpzaXZhbF9wdHI7Cn0gc2ln
dmFsX3Q7CgoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuaW9uIG5vdGlmeWluZm8gIHsKCWludAluaXNp
Z25vIDsJCQkgCgl2b2lkCSgqIG5pZnVuYyApIChzaWd2YWxfdCk7CSAJIAp9IG5vdGlmeWluZm9f
dDsKCnR5cGVkZWYgc3RydWN0IHNpZ2V2ZW50IHsKCWludAkJCXNpZ2V2X25vdGlmeTsKCW5vdGlm
eWluZm9fdAkJc2lnZXZfbm90aWZ5aW5mbzsKCXNpZ3ZhbF90CQlzaWdldl92YWx1ZTsKCXZvaWQg
CQkJKCpzaWdldl9ub3RpZnlfZnVuY3Rpb24pIChzaWd2YWxfdCk7CiAgICAgICAgcHRocmVhZF9h
dHRyX3QgCQkqc2lnZXZfbm90aWZ5X2F0dHJpYnV0ZXM7Cgl1bnNpZ25lZCBsb25nCQlzaWdldl9y
ZXNlcnZlZFsxMV07Cgl1bnNpZ25lZCBsb25nCQlzaWdldl9wYWRbNl07Cn0gc2lnZXZlbnRfdDsK
CgoKCgoKCgoKfQoKCgojIDExNCAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMiAzCgoKCgog
CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMSAzCiAKCgoKCgoKCgoKCiAKIAog
CgogCiAKIAogCgoKCgojaWRlbnQgICIkUmV2aXNpb246IDEuMjYgJCIKCgpleHRlcm4gIkMiIHsK
CgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCnR5cGVkZWYgc3RydWN0IF9fc2lnaW5m
byB7CglpbnQJc2lfc2lnbm87CQkgCglpbnQgCXNpX2NvZGU7CQkgCglpbnQJc2lfZXJybm87CQkg
Cgl1bmlvbiB7CgoJCWludAlzaV9wYWRbKCgxMjggIC8gc2l6ZW9mKF9faW50MzJfdCkpIC0gMykg
XTsJIAoKCQlzdHJ1Y3QgewkJCSAKCQkJcGlkX3QJX19waWQ7CQkgCgkJCXVuaW9uIHsKCQkJCXN0
cnVjdCB7CgkJCQkJdWlkX3QJX191aWQ7CgkJCQl9IF9fa2lsbDsKCQkJCXN0cnVjdCB7CgkJCQkJ
Y2xvY2tfdCBfX3V0aW1lOwoJCQkJCWludCBfX3N0YXR1czsKCQkJCQljbG9ja190IF9fc3RpbWU7
CgkJCQkJaW50IF9fc3dhcDsKCQkJCX0gX19jbGQ7CgkJCX0gX19wZGF0YTsKCQl9IF9fcHJvYzsJ
CQkKCgkJc3RydWN0IHsJIAoJCQl2b2lkIAkqX19hZGRyOwkgCgkJfSBfX2ZhdWx0OwoKCQlzdHJ1
Y3QgewkJCSAKCQkgCgkJCWludAlfX2ZkOwkgCgkJCWxvbmcJX19iYW5kOwoJCX0gX19maWxlOwoK
CQl1bmlvbiBzaWd2YWwJX192YWx1ZTsKCgoKCX0gX19kYXRhOwoKfSBzaWdpbmZvX3Q7CgoKCgoK
CgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCn0KCgoKIyAxMjEgIi91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDIgMwoK
CgogCgoKCgp0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAKICAgICAgICBfX3VpbnQz
Ml90IF9fc2lnYml0c1s0XTsKfSBzaWdzZXRfdDsKCgogCnR5cGVkZWYgdW5pb24gX19zaWdoYW5k
bGVyIHsKICAgIAl2b2lkICAoKnNhX2hhbmRsZXIxKShpbnQgKTsgIAoKICAgIAl2b2lkICgqc2Ff
c2lnYWN0aW9uMSkoaW50LCBzaWdpbmZvX3QgKiwgdm9pZCAqKTsKCn0gX19zaWdoYW5kbGVyX3Q7
CgoKCgoKdHlwZWRlZiBzdHJ1Y3Qgc2lnYWN0aW9uIHsKCWludCBzYV9mbGFnczsJCQkgCiAgICAJ
X19zaWdoYW5kbGVyX3Qgc2Ffc2lnaGFuZGxlcjsJIAoJc2lnc2V0X3Qgc2FfbWFzazsJCSAKCQkJ
CQkgCglpbnQgc2FfcmVzdlsyXTsKfSBzaWdhY3Rpb25fdDsKIAoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKIAogCgoKCgoKCgogCgoKCQkJCQkgCgogCgoJCQkJCSAKCQkJCQkgCgoKIAoKCnN0cnVjdCBz
aWdzdGFjayB7Cgl2b2lkCSpzc19zcDsJCQkgCglpbnQJc3Nfb25zdGFjazsJCSAKfTsKCiAKCgoK
IAoKCgoKIAoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdWNvbnRleHQuaCIgMSAzCiAKCgoKCgoK
CgoKCiAKCgoKCgoKCgoKCgoKCiNpZGVudCAgIiRSZXZpc2lvbjogMS4zNiAkIgoKCmV4dGVybiAi
QyIgewoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfc2lnYWx0
c3RhY2sgewoJdm9pZAkqc3Nfc3A7CglzaXplX3QJc3Nfc2l6ZTsKCWludAlzc19mbGFnczsKfSBz
dGFja190OwoKCgoKCgoKCgogCgoKIyAxMTkgIi91c3IvaW5jbHVkZS9zeXMvdWNvbnRleHQuaCIg
MwoKCiAKCgoKCgoKCgp0eXBlZGVmIG1hY2hyZWdfdCBncmVnX3Q7CgoKIAoKdHlwZWRlZiBncmVn
X3QgZ3JlZ3NldF90WzM3IF07CgoKCgp0eXBlZGVmIHN0cnVjdCBfX2ZwcmVnc2V0IHsKCXVuaW9u
IHsKCQlkb3VibGUJCV9fZnBfZHJlZ3NbMzJdOwoKCQlzdHJ1Y3QgewoJCQlfX3VpbnQzMl90CV9m
cF9maWxsOwoJCQlmbG9hdAkJX2ZwX2ZyZWdzOwoJCX0gX19mcF9mcmVnc1szMl07CgoKCgoKCgkJ
bWFjaHJlZ190CV9fZnBfcmVnc1szMl07Cgl9IF9fZnBfcjsKCV9fdWludDMyX3QgCV9fZnBfY3Ny
OwoJX191aW50MzJfdAlfX2ZwX3BhZDsKfSBmcHJlZ3NldF90OwoKdHlwZWRlZiBzdHJ1Y3QgewoJ
Z3JlZ3NldF90CV9fZ3JlZ3M7CSAKCWZwcmVnc2V0X3QgCV9fZnByZWdzOwkgCn0gbWNvbnRleHRf
dDsKCnR5cGVkZWYgc3RydWN0IF9fdWNvbnRleHQgewoJdW5zaWduZWQgbG9uZwl1Y19mbGFnczsK
CXN0cnVjdCBfX3Vjb250ZXh0ICp1Y19saW5rOwoJc2lnc2V0X3QgICAJdWNfc2lnbWFzazsKCXN0
YWNrX3QgCXVjX3N0YWNrOwoJbWNvbnRleHRfdCAJdWNfbWNvbnRleHQ7Cglsb25nCQl1Y19maWxs
ZXJbNDldOwp9IHVjb250ZXh0X3Q7CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgoKCgojIDIyMyAiL3Vzci9pbmNsdWRlL3N5cy91Y29udGV4dC5oIiAzCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMyOCAiL3Vzci9pbmNsdWRlL3N5cy91Y29udGV4dC5o
IiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCn0KCgojIDIxNiAiL3Vzci9pbmNsdWRlL3N5cy9z
aWduYWwuaCIgMiAzCgoKCiMgMjY1ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzCgoKCgog
CgoKCmV4dGVybiB2b2lkCSgqYnNkX3NpZ25hbChpbnQsIHZvaWQgKCopKGludCkpKShpbnQpOwpl
eHRlcm4gaW50CWtpbGxwZyhwaWRfdCwgaW50KTsKZXh0ZXJuIGludAlzaWdzdGFjayhzdHJ1Y3Qg
c2lnc3RhY2sgKiwgc3RydWN0IHNpZ3N0YWNrICopOwoKCgoKCmV4dGVybiB2b2lkIAkoKnNpZ25h
bChpbnQsdm9pZCAgKCopKGludCApKSkoaW50ICk7CgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgp0
eXBlZGVmIHN0cnVjdCBzaWdjb250ZXh0IHsKCV9fdWludDMyX3QJc2NfcmVnbWFzazsJIAoJX191
aW50MzJfdAlzY19zdGF0dXM7CSAKCV9fdWludDY0X3QJc2NfcGM7CQkgCgkgCgoKCV9fdWludDY0
X3QJc2NfcmVnc1szMl07CSAKCSAKCgoJX191aW50NjRfdAlzY19mcHJlZ3NbMzJdOwkgCglfX3Vp
bnQzMl90CXNjX293bmVkZnA7CSAKCV9fdWludDMyX3QJc2NfZnBjX2NzcjsJIAoJX191aW50MzJf
dAlzY19mcGNfZWlyOwkgCgkJCQkJIAoJX191aW50MzJfdAlzY19zc2ZsYWdzOwkgCglfX3VpbnQ2
NF90CXNjX21kaGk7CSAKCV9fdWludDY0X3QJc2NfbWRsbzsKCSAKCgoJX191aW50NjRfdAlzY19j
YXVzZTsJIAoJX191aW50NjRfdAlzY19iYWR2YWRkcjsJIAoJX191aW50NjRfdAlzY190cmlnZ2Vy
c2F2ZTsJIAoJc2lnc2V0X3QJc2Nfc2lnc2V0OwkgCglfX3VpbnQ2NF90CXNjX2ZwX3JvdW5kZWRf
cmVzdWx0OwkgCglfX3VpbnQ2NF90CXNjX3BhZFszMV07Cn0gc2lnY29udGV4dF90OwoKIAoKCgoK
IAoKCiAKCgoKCgoKCgoKCgoKCgojIDM2NiAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMwoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCn0KCgoKIyAxMDkgIi91c3IvaW5jbHVkZS9zaWduYWwu
aCIgMiAzCgoKCiAKdHlwZWRlZiBpbnQgCXNpZ19hdG9taWNfdDsKZXh0ZXJuIGludCByYWlzZShp
bnQpOwoKCgoKZXh0ZXJuIGludCBraWxsKHBpZF90LCBpbnQpOwoKZXh0ZXJuIGludCBzaWdhY3Rp
b24oaW50LCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICosIHN0cnVjdCBzaWdhY3Rpb24gKik7CmV4
dGVybiBpbnQgc2lncGVuZGluZyhzaWdzZXRfdCAqKTsKZXh0ZXJuIGludCBzaWdwcm9jbWFzayhp
bnQsIGNvbnN0IHNpZ3NldF90ICosIHNpZ3NldF90ICopOwpleHRlcm4gaW50IHNpZ3N1c3BlbmQo
Y29uc3Qgc2lnc2V0X3QgKik7CmV4dGVybiBpbnQgc2lnYWRkc2V0KHNpZ3NldF90ICosIGludCk7
CmV4dGVybiBpbnQgc2lnZGVsc2V0KHNpZ3NldF90ICosIGludCk7CmV4dGVybiBpbnQgc2lnZW1w
dHlzZXQoc2lnc2V0X3QgKik7CmV4dGVybiBpbnQgc2lnZmlsbHNldChzaWdzZXRfdCAqKTsKZXh0
ZXJuIGludCBzaWdpc21lbWJlcihjb25zdCBzaWdzZXRfdCAqLCBpbnQpOwoKCgogCgoKIyAxICIv
dXNyL2luY2x1ZGUvc3lzL3RpbWVzcGVjLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKI2lkZW50
IAkiJFJldmlzaW9uOiAxLjUgJCIKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCgoKCgog
CgoKCnR5cGVkZWYgc3RydWN0IHRpbWVzcGVjICB7CgoKCgl0aW1lX3QgIHR2X3NlYzsJCSAKCgoK
Cglsb25nICAgIHR2X25zZWM7Cgp9IHRpbWVzcGVjX3Q7CgoKfQoKCgojIDEzNiAiL3Vzci9pbmNs
dWRlL3NpZ25hbC5oIiAyIDMKCgpleHRlcm4gaW50IHNpZ3F1ZXVlKHBpZF90ICwgaW50LCBjb25z
dCB1bmlvbiBzaWd2YWwpOwpleHRlcm4gaW50IHNpZ3dhaXRpbmZvKGNvbnN0IHNpZ3NldF90ICos
IHNpZ2luZm9fdCAqKTsKZXh0ZXJuIGludCBzaWd0aW1lZHdhaXQoY29uc3Qgc2lnc2V0X3QgKiwg
c2lnaW5mb190ICosIGNvbnN0IHRpbWVzcGVjX3QgKik7CmV4dGVybiBpbnQgc2lnd2FpdChjb25z
dCBzaWdzZXRfdCAqLCBpbnQgKik7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbChwdGhyZWFk
X3QsIGludCk7CmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrKGludCwgY29uc3Qgc2lnc2V0X3Qg
Kiwgc2lnc2V0X3QgKik7CgoKCiAKCgoKZXh0ZXJuIGludCBzaWdwYXVzZShpbnQpOwoKZXh0ZXJu
IHZvaWQgICgqc2lnc2V0KGludCx2b2lkICAoKikoaW50ICkpKShpbnQgKTsKCmV4dGVybiBpbnQg
c2lnaG9sZChpbnQpOwpleHRlcm4gaW50IHNpZ3JlbHNlKGludCk7CmV4dGVybiBpbnQgc2lnaWdu
b3JlKGludCk7CmV4dGVybiBpbnQgc2lnaW50ZXJydXB0KGludCwgaW50KTsKCmV4dGVybiBpbnQg
X3NpZ2FsdHN0YWNrIChjb25zdCBzdGFja190ICosIHN0YWNrX3QgKik7CgoKCgoKCgoKCgoKZXh0
ZXJuIGNoYXIgKl9zeXNfc2lnbGlzdFtdOwpleHRlcm4gaW50IF9zeXNfbnNpZzsKCgojIDEgIi91
c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAxIDMKIAoKCgoKCgoKCgoKIAogCgogCiAKIAoKCgoK
ZXh0ZXJuICJDIiB7CgoKI2lkZW50ICAiJFJldmlzaW9uOiAxLjExICQiCgoKCiAKCgoKCgoKCgoK
CiAKCgoKCgp0eXBlZGVmIGVudW0gaWR0eXBlIHsKCgoKCVBfUElELAkJIAoJUF9QUElELAkJIAoJ
UF9QR0lELAkJIAoJCQkgCglQX1NJRCwJCSAKCVBfQ0lELAkJIAoJUF9VSUQsCQkgCglQX0dJRCwJ
CSAKCVBfQUxMCQkgCn0gaWR0eXBlX3Q7CgoKCiAKCgoKdHlwZWRlZiBlbnVtIGlkb3AgewoJUE9Q
X0RJRkYsCSAKCQkJIAoJCQkgCglQT1BfQU5ELAkgCgkJCSAKCQkJIAoJUE9QX09SLAkJIAoJCQkg
CgkJCSAKCVBPUF9YT1IJCSAKCQkJIAoJCQkgCn0gaWRvcF90OwoKIAoKCgp0eXBlZGVmIHN0cnVj
dCBwcm9jc2V0IHsKCWlkb3BfdAkJcF9vcDsJIAoJCQkJIAoJCQkJIAoJCQkJIAoKCWlkdHlwZV90
CXBfbGlkdHlwZTsKCQkJCSAKCQkJCSAKCWlkX3QJCXBfbGlkOwkgCgoJaWR0eXBlX3QJcF9yaWR0
eXBlOwoJCQkJIAoJCQkJIAoJaWRfdAkJcF9yaWQ7CSAKfSBwcm9jc2V0X3Q7CgogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgp9CgoKCiMgMTgwICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKZXh0
ZXJuIGludCAoKnNzaWduYWwoaW50LCBpbnQgKCopKGludCkpKShpbnQpOwpleHRlcm4gaW50IGdz
aWduYWwoaW50KTsKZXh0ZXJuIGludCBzaWdzZW5kKGlkdHlwZV90LCBpZF90LCBpbnQpOwpleHRl
cm4gaW50IHNpZ3NlbmRzZXQoY29uc3QgcHJvY3NldF90ICosIGludCk7CgogCgoKCgoKCiAKCgoK
CgpleHRlcm4gaW50IHNnaV9hbHRlcnNpZ3MoaW50LCBzaWdzZXRfdCAqLCBpbnRbXSk7CmV4dGVy
biBpbnQgc2dpX3NpZ2Zmc2V0KHNpZ3NldF90ICosIGludCk7CmV4dGVybiBpbnQgc2dpX2R1bXBz
ZXQoc2lnc2V0X3QgKik7CgoKCgoKCgp9CgoKIyA2ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2Fs
L2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL2NzaWduYWwiIDIgMwoKCiMgMjggInNpZ2hhbmRsZXJzLmNjIiAyCgoKIyAx
ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1p
cml4Ni41LzIuOTUuMy9pbmNsdWRlL25ldyIgMSAzCiAKIAoKCgoKI3ByYWdtYSBpbnRlcmZhY2Ug
Im5ldyIKIyAxICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9t
aXBzLXNnaS1pcml4Ni41LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCgoK
CgoKIAoKIAoKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2Nh
bC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50ICBwdHJkaWZmX3Q7CgoKCgoKCgoKCiAKCgoKCiAKCiAK
CgoKIyAxODcgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21p
cHMtc2dpLWlyaXg2LjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKIAoKCgoKIAoK
CgojIDI2OCAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlw
cy1zZ2ktaXJpeDYuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoK
CiAKCiAKCiMgMzE3ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxp
Yi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgojIDggIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xp
Yi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zL2luY2x1ZGUvbmV3IiAyIDMKCiMgMSAi
L3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJp
eDYuNS8yLjk1LjMvaW5jbHVkZS9leGNlcHRpb24iIDEgMwogCiAKCgoKCiNwcmFnbWEgaW50ZXJm
YWNlICJleGNlcHRpb24iCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgpjbGFzcyBl
eGNlcHRpb24gewpwdWJsaWM6CiAgZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmV4Y2VwdGlv
biAoKSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3Q7Cn07CgpjbGFzcyBi
YWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBiYWRfZXhjZXB0aW9u
ICgpIHsgfQogIHZpcnR1YWwgfmJhZF9leGNlcHRpb24gKCkgeyB9Cn07Cgp0eXBlZGVmIHZvaWQg
KCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7CnR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxl
cikgKCk7Cgp0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlICh0ZXJtaW5hdGVfaGFuZGxl
cik7CnZvaWQgdGVybWluYXRlICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKdW5l
eHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkICh1bmV4cGVjdGVkX2hhbmRsZXIpOwp2b2lk
IHVuZXhwZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwpib29sIHVuY2F1
Z2h0X2V4Y2VwdGlvbiAoKTsKCn0gIAoKfSAgCgoKIyA5ICIvdXNyL3Blb3BsZS9taWxncmFtL2xv
Y2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy9pbmNsdWRlL25l
dyIgMiAzCgoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQgewoKICBjbGFzcyBiYWRfYWxs
b2MgOiBwdWJsaWMgZXhjZXB0aW9uIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHdoYXQoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICJiYWRfYWxsb2MiOyB9CiAgfTsKCiAgc3Ry
dWN0IG5vdGhyb3dfdCB7fTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CiAgdHlw
ZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVy
IChuZXdfaGFuZGxlcik7Cgp9ICAKCiAKdm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3QpIHRocm93
IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QpIHRocm93IChz
dGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICopIHRocm93KCk7CnZv
aWQgb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3
IChzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3Ig
bmV3W10gKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJh
dG9yIGRlbGV0ZSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQg
b3BlcmF0b3IgZGVsZXRlW10gKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygp
OwoKIAppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93
KCkgeyByZXR1cm4gcGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHNpemVfdCwg
dm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KfSAgCgoKIyAzMCAic2lnaGFu
ZGxlcnMuY2MiIDIKCgojIDEgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9n
Y2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
aW9zdHJlYW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJm
YWNlCgoKCiMgMSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIv
bWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1i
dWYuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoK
CiAgIAoKCgpleHRlcm4gIkMiIHsKIyAxICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5
NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL2xpYmlvLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91
c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2
LjUvMi45NS4zLy4uLy4uLy4uLy4uL21pcHMtc2dpLWlyaXg2LjUvaW5jbHVkZS9fR19jb25maWcu
aCIgMSAzCiAgCgoKCgoKCgoKCnR5cGVkZWYgICAgICAgICAgaW50ICAgX0dfaW50OF90IF9fYXR0
cmlidXRlX18oKF9fbW9kZV9fKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgIF9HX3Vp
bnQ4X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkpOwp0eXBlZGVmICAgICAgICAg
IGludCAgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJX18pKSk7CnR5cGVk
ZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fSElf
XykpKTsKdHlwZWRlZiAgICAgICAgICBpbnQgIF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXygoX19t
b2RlX18oX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJp
YnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQ2
NF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgX0dfdWludDY0X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ESV9fKSkpOwoKX19leHRl
bnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBfR19sbG9uZzsKX19leHRlbnNpb25fXyB0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgbG9uZyBfR191bGxvbmc7CgoKCgoKCgoKdHlwZWRlZiBsb25nIF9HX2Ns
b2NrX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19kZXZfdDsKdHlwZWRlZiBfR19sbG9uZyBf
R19mcG9zX3Q7CnR5cGVkZWYgbG9uZyBfR19naWRfdDsKdHlwZWRlZiBfR191bGxvbmcgX0dfaW5v
X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19tb2RlX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBfR19ubGlua190Owp0eXBlZGVmIF9HX2xsb25nIF9HX29mZl90Owp0eXBlZGVmIGxvbmcgX0df
cGlkX3Q7CgoKCnR5cGVkZWYgaW50ICBfR19wdHJkaWZmX3Q7CnR5cGVkZWYgaW50ICAgX0dfc2ln
c2V0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgaW50ICBfR19zaXplX3Q7CnR5cGVkZWYgbG9uZyBf
R190aW1lX3Q7CnR5cGVkZWYgbG9uZyBfR191aWRfdDsKdHlwZWRlZiBsb25nIF9HX3djaGFyX3Q7
CgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IF9HX3NzaXplX3Q7CnR5cGVkZWYgdW5zaWduZWQg
aW50IF9HX3dpbnRfdDsKdHlwZWRlZiBjaGFyICogX0dfdmFfbGlzdDsKCgoKCgoKCgoKCgoKCgoK
CgojIDEgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMt
c2dpLWlyaXg2LjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAi
L3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJp
eDYuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIv
dXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4
Ni41LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUv
bGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CiAKCgoKCiAKCiAKCgoKIyAxODcgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xp
Yi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoK
CgoKIAoKCgoKIAoKCgojIDI2OCAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGli
L2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoK
CgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5
NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDg2ICIvdXNyL3Blb3BsZS9taWxncmFtL2xv
Y2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8u
Li9taXBzLXNnaS1pcml4Ni41L2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCiMgMzAgIi91c3Iv
cGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUv
Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMiAzCgoKCgoKCgoKCgoK
CgoKCgoKIyA1NSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIv
bWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9saWJpby5o
IiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgojaWRlbnQgICIkUmV2aXNpb246IDEuMyAkIgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKIyA1OSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIv
bWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9saWJpby5o
IiAyIDMKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgojIDEwNCAiL3Vzci9wZW9w
bGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1
LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9saWJpby5oIiAzCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IF9JT19qdW1w
X3Q7ICBzdHJ1Y3QgX0lPX0ZJTEU7CgogCiMgMTc1ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2Fs
L2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL2xpYmlvLmgiIDMKCgoKCgoKCgoKICAgIHR5cGVkZWYgdm9pZCBfSU9fbG9j
a190OwoKCgoKCiAKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25l
eHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKICAgCgogICAKICBpbnQgX3BvczsKIyAyMDgg
Ii91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWly
aXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMwoKfTsKCnN0
cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsJCSAKCgogICAKICAgCiAgY2hhciogX0lPX3Jl
YWRfcHRyOwkgCiAgY2hhciogX0lPX3JlYWRfZW5kOwkgCiAgY2hhciogX0lPX3JlYWRfYmFzZTsJ
IAogIGNoYXIqIF9JT193cml0ZV9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX3B0cjsJIAogIGNo
YXIqIF9JT193cml0ZV9lbmQ7CSAKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CSAKICBjaGFyKiBfSU9f
YnVmX2VuZDsJIAogICAKICBjaGFyICpfSU9fc2F2ZV9iYXNlOyAgCiAgY2hhciAqX0lPX2JhY2t1
cF9iYXNlOyAgIAogIGNoYXIgKl9JT19zYXZlX2VuZDsgIAoKICBzdHJ1Y3QgX0lPX21hcmtlciAq
X21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBp
bnQgX2Jsa3NpemU7CgoKCiAgX0dfb2ZmX3QgIF9vZmZzZXQ7CgoKCiAgIAogIHVuc2lnbmVkIHNo
b3J0IF9jdXJfY29sdW1uOwogIGNoYXIgX3VudXNlZDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCiAg
IAoKCgoKCgoKCn07CgoKCgoKCgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CmV4dGVybiBzdHJ1
Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fc3RkaW5fLCBfSU9fc3Rkb3V0XywgX0lPX3N0ZGVycl87CgoK
CgoKIAp0eXBlZGVmIHN0cnVjdAp7CiAgX0dfc3NpemVfdCAgKCpyZWFkKSAgKHN0cnVjdCBfSU9f
RklMRSAqLCB2b2lkICosIF9HX3NzaXplX3QgKSAgOwogIF9HX3NzaXplX3QgICgqd3JpdGUpICAo
c3RydWN0IF9JT19GSUxFICosIGNvbnN0IHZvaWQgKiwgX0dfc3NpemVfdCApICA7CiAgX0dfb2Zm
X3QgICgqc2VlaykgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgX0dfb2ZmX3QgLCBpbnQpICA7CiAgaW50
ICgqY2xvc2UpICAoc3RydWN0IF9JT19GSUxFICopICA7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlv
bnNfdDsKCiAKc3RydWN0IF9JT19jb29raWVfZmlsZQp7CiAgc3RydWN0IF9JT19GSUxFIGZpbGU7
CiAgY29uc3Qgdm9pZCAqdnRhYmxlOwogIHZvaWQgKmNvb2tpZTsKICBfSU9fY29va2llX2lvX2Z1
bmN0aW9uc190IGlvX2Z1bmN0aW9uczsKfTsKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBf
X3VuZGVyZmxvdyAgKF9JT19GSUxFICopICA7CmV4dGVybiBpbnQgX191ZmxvdyAgKF9JT19GSUxF
ICopICA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAgKF9JT19GSUxFICosIGludCkgIDsKCgoKCgoK
CgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICA7CmV4dGVy
biBpbnQgX0lPX3B1dGMgIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgIDsKZXh0ZXJuIGludCBf
SU9fZmVvZiAgKF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgIChfSU9f
RklMRSAqX19mcCkgIDsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAgKF9JT19GSUxFICpf
X2ZwKSAgOwoKIAoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsK
ZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGludCBf
SU9fZnRyeWxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQg
X0lPX3Zmc2NhbmYgIChfSU9fRklMRSAqLCBjb25zdCBjaGFyICosIF9HX3ZhX2xpc3QgLCBpbnQg
KikgIDsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgIChfSU9fRklMRSAqLCBjb25zdCBjaGFyICos
IF9HX3ZhX2xpc3QgKSAgOwpleHRlcm4gX0dfc3NpemVfdCAgX0lPX3BhZG4gIChfSU9fRklMRSAq
LCBpbnQsIF9HX3NzaXplX3QgKSAgOwpleHRlcm4gX0dfc2l6ZV90ICBfSU9fc2dldG4gIChfSU9f
RklMRSAqLCB2b2lkICosIF9HX3NpemVfdCApICA7CgoKCgoKZXh0ZXJuIF9HX29mZl90ICBfSU9f
c2Vla29mZiAgKF9JT19GSUxFICosIF9HX29mZl90ICwgaW50LCBpbnQpICA7CmV4dGVybiBfR19v
ZmZfdCAgX0lPX3NlZWtwb3MgIChfSU9fRklMRSAqLCBfR19vZmZfdCAsIGludCkgIDsKCgpleHRl
cm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAgKF9JT19GSUxFICopICA7CgoKfQoKCgojIDM2
ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1p
cml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAyIDMK
Cn0KIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJl
YW07ICAKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoKIAoKCgoKCgoKdHlwZWRlZiBf
R19vZmZfdCAgc3RyZWFtb2ZmOwp0eXBlZGVmIF9HX29mZl90ICBzdHJlYW1wb3M7Cgp0eXBlZGVm
IF9HX3NzaXplX3QgIHN0cmVhbXNpemU7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19mbXRmbGFn
czsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsKCnN0cnVjdCBfaW9zX2ZpZWxkcwp7
ICAKICAgIHN0cmVhbWJ1ZiAqX3N0cmJ1ZjsKICAgIG9zdHJlYW0qIF90aWU7CiAgICBpbnQgX3dp
ZHRoOwogICAgX19mbXRmbGFncyBfZmxhZ3M7CiAgICBzaG9ydCAgX2ZpbGw7CiAgICBfX2lvc3Rh
dGUgX3N0YXRlOwogICAgX19pb3N0YXRlIF9leGNlcHRpb25zOwogICAgaW50IF9wcmVjaXNpb247
CgogICAgdm9pZCAqX2FycmF5czsgIAp9OwoKCgoKCgoKCgoKCgoKCgojIDEyNCAiL3Vzci9wZW9w
bGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1
LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCmNsYXNzIGlvcyA6
IHB1YmxpYyBfaW9zX2ZpZWxkcyB7CiAgaW9zJiBvcGVyYXRvcj0oaW9zJik7ICAgCiAgaW9zIChj
b25zdCBpb3MmKTsgIAogIHB1YmxpYzoKICAgIHR5cGVkZWYgX19mbXRmbGFncyBmbXRmbGFnczsK
ICAgIHR5cGVkZWYgaW50IGlvc3RhdGU7CiAgICB0eXBlZGVmIGludCBvcGVubW9kZTsKICAgIHR5
cGVkZWYgX0dfc3NpemVfdCAgc3RyZWFtc2l6ZTsKICAgIGVudW0gaW9fc3RhdGUgewoJZ29vZGJp
dCA9IDAgLAoJZW9mYml0ID0gMSAsCglmYWlsYml0ID0gMiAsCgliYWRiaXQgPSA0ICB9OwogICAg
ZW51bSBvcGVuX21vZGUgewoJaW4gPSAxICwKCW91dCA9IDIgLAoJYXRlID0gNCAsCglhcHAgPSA4
ICwKCXRydW5jID0gMTYgLAoJbm9jcmVhdGUgPSAzMiAsCglub3JlcGxhY2UgPSA2NCAsCgliaW4g
PSAxMjggLCAgCgliaW5hcnkgPSAxMjggIH07CiAgICBlbnVtIHNlZWtfZGlyIHsgYmVnLCBjdXIs
IGVuZH07CiAgICB0eXBlZGVmIGVudW0gc2Vla19kaXIgc2Vla2RpcjsKICAgICAKICAgIGVudW0g
eyBza2lwd3M9IDAxICwKCSAgIGxlZnQ9IDAyICwgcmlnaHQ9IDA0ICwgaW50ZXJuYWw9IDAxMCAs
CgkgICBkZWM9IDAyMCAsIG9jdD0gMDQwICwgaGV4PSAwMTAwICwKCSAgIHNob3diYXNlPSAwMjAw
ICwgc2hvd3BvaW50PSAwNDAwICwKCSAgIHVwcGVyY2FzZT0gMDEwMDAgLCBzaG93cG9zPSAwMjAw
MCAsCgkgICBzY2llbnRpZmljPSAwNDAwMCAsIGZpeGVkPSAwMTAwMDAgLAoJICAgdW5pdGJ1Zj0g
MDIwMDAwICwgc3RkaW89IDA0MDAwMCAKCgoKCSAgIH07CiAgICBlbnVtIHsgIAoJYmFzZWZpZWxk
PWRlYytvY3QraGV4LAoJZmxvYXRmaWVsZCA9IHNjaWVudGlmaWMrZml4ZWQsCglhZGp1c3RmaWVs
ZCA9IGxlZnQrcmlnaHQraW50ZXJuYWwKICAgIH07CgojIDE3NyAiL3Vzci9wZW9wbGUvbWlsZ3Jh
bS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCiAgICBvc3RyZWFtKiB0aWUoKSBj
b25zdCB7IHJldHVybiBfdGllOyB9CiAgICBvc3RyZWFtKiB0aWUob3N0cmVhbSogdmFsKSB7IG9z
dHJlYW0qIHNhdmU9X3RpZTsgX3RpZT12YWw7IHJldHVybiBzYXZlOyB9CgogICAgIAogICAgc2hv
cnQgIGZpbGwoKSBjb25zdCB7IHJldHVybiBfZmlsbDsgfQogICAgc2hvcnQgIGZpbGwoc2hvcnQg
IG5ld2YpCgl7c2hvcnQgIG9sZGYgPSBfZmlsbDsgX2ZpbGwgPSBuZXdmOyByZXR1cm4gb2xkZjt9
CiAgICBmbXRmbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9mbGFnczsgfQogICAgZm10Zmxh
Z3MgZmxhZ3MoZm10ZmxhZ3MgbmV3X3ZhbCkgewoJZm10ZmxhZ3Mgb2xkX3ZhbCA9IF9mbGFnczsg
X2ZsYWdzID0gbmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAgIGludCBwcmVjaXNpb24oKSBj
b25zdCB7IHJldHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJlY2lzaW9uKGludCBuZXdwKSB7
Cgl1bnNpZ25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lvbjsgX3ByZWNpc2lvbiA9ICh1bnNpZ25l
ZCBzaG9ydCluZXdwOwoJcmV0dXJuIG9sZHA7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3Mg
dmFsKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzIHw9IHZhbDsgcmV0dXJu
IG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsLCBmbXRmbGFncyBtYXNr
KSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzID0gKF9mbGFncyAmIH5tYXNr
KSB8ICh2YWwgJiBtYXNrKTsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHVuc2V0Zihm
bXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzICY9IH5t
YXNrOyByZXR1cm4gb2xkYml0czsgfQogICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX3dp
ZHRoOyB9CiAgICBpbnQgd2lkdGgoaW50IHZhbCkgeyBpbnQgc2F2ZSA9IF93aWR0aDsgX3dpZHRo
ID0gdmFsOyByZXR1cm4gc2F2ZTsgfQoKCgoKICAgIHZvaWQgX3Rocm93X2ZhaWx1cmUoKSBjb25z
dCB7IH0KCiAgICB2b2lkIGNsZWFyKGlvc3RhdGUgc3RhdGUgPSAwKSB7Cglfc3RhdGUgPSBfc3Ry
YnVmID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90
aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlvc3RhdGUgZmxhZykgeyBfc3RhdGUgfD0g
ZmxhZzsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAg
dm9pZCBzZXRzdGF0ZShpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7ICAKCWlmIChfc3Rh
dGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgaW50IGdvb2QoKSBjb25z
dCB7IHJldHVybiBfc3RhdGUgPT0gMDsgfQogICAgaW50IGVvZigpIGNvbnN0IHsgcmV0dXJuIF9z
dGF0ZSAmIGlvczo6ZW9mYml0OyB9CiAgICBpbnQgZmFpbCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0
ZSAmIChpb3M6OmJhZGJpdHxpb3M6OmZhaWxiaXQpOyB9CiAgICBpbnQgYmFkKCkgY29uc3QgeyBy
ZXR1cm4gX3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0KICAgIGlvc3RhdGUgcmRzdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIF9zdGF0ZTsgfQogICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdCB7IHJldHVybiBm
YWlsKCkgPyAodm9pZCopMCA6ICh2b2lkKikoLTEpOyB9CiAgICBpbnQgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gZmFpbCgpOyB9CiAgICBpb3N0YXRlIGV4Y2VwdGlvbnMoKSBjb25zdCB7IHJl
dHVybiBfZXhjZXB0aW9uczsgfQogICAgdm9pZCBleGNlcHRpb25zKGlvc3RhdGUgZW5hYmxlKSB7
CglfZXhjZXB0aW9ucyA9IGVuYWJsZTsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93
X2ZhaWx1cmUoKTsgfQoKICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBjb25zdCB7IHJldHVybiBfc3Ry
YnVmOyB9CiAgICBzdHJlYW1idWYqIHJkYnVmKHN0cmVhbWJ1ZiAqX3MpIHsKICAgICAgc3RyZWFt
YnVmICpfb2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9zOyBjbGVhciAoKTsgcmV0dXJuIF9vbGQ7
IH0KCiAgICBzdGF0aWMgaW50IHN5bmNfd2l0aF9zdGRpbyhpbnQgb24pOwogICAgc3RhdGljIHZv
aWQgc3luY193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0YXRpYyBm
bXRmbGFncyBiaXRhbGxvYygpOwogICAgc3RhdGljIGludCB4YWxsb2MoKTsKICAgIHZvaWQqJiBw
d29yZChpbnQpOwogICAgdm9pZCogcHdvcmQoaW50KSBjb25zdDsKICAgIGxvbmcmIGl3b3JkKGlu
dCk7CiAgICBsb25nIGl3b3JkKGludCkgY29uc3Q7CgoKCgoKCgoKCiAgICAgCiAgICBjbGFzcyBJ
bml0IHsKICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7IH0KICAgIH07CgogIHByb3RlY3RlZDoK
ICAgIGlubGluZSBpb3Moc3RyZWFtYnVmKiBzYiA9IDAsIG9zdHJlYW0qIHRpZV90byA9IDApOwog
ICAgaW5saW5lIHZpcnR1YWwgfmlvcygpOwogICAgaW5saW5lIHZvaWQgaW5pdChzdHJlYW1idWYq
IHNiLCBvc3RyZWFtKiB0aWUgPSAwKTsKfTsKCgoKCnR5cGVkZWYgaW9zOjpzZWVrX2RpciBfc2Vl
a19kaXI7CgoKIAogCiAKIAogCgogCiAKY2xhc3Mgc3RyZWFtbWFya2VyIDogcHJpdmF0ZSBfSU9f
bWFya2VyIHsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7CiAgICB2b2lkIHNldF9vZmZzZXQo
aW50IG9mZnNldCkgeyBfcG9zID0gb2Zmc2V0OyB9CiAgcHVibGljOgogICAgc3RyZWFtbWFya2Vy
KHN0cmVhbWJ1ZiAqc2IpOwogICAgfnN0cmVhbW1hcmtlcigpOwogICAgaW50IHNhdmluZygpIHsg
cmV0dXJuICAxOyB9CiAgICBpbnQgZGVsdGEoc3RyZWFtbWFya2VyJik7CiAgICBpbnQgZGVsdGEo
KTsKfTsKCnN0cnVjdCBzdHJlYW1idWYgOiBwdWJsaWMgX0lPX0ZJTEUgeyAgCiAgICBmcmllbmQg
Y2xhc3MgaW9zOwogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07CiAgICBmcmllbmQgY2xhc3Mgb3N0
cmVhbTsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1tYXJrZXI7CiAgICBjb25zdCB2b2lkIComX3Z0
YWJsZSgpIHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgoX0lPX0ZJTEUqKXRoaXMgKyAxKTsgfQog
IHByb3RlY3RlZDoKICAgIHN0YXRpYyBzdHJlYW1idWYqIF9saXN0X2FsbDsgIAogICAgX0lPX0ZJ
TEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAgIHZvaWQgX3VuX2xpbmsoKTsKICAg
IHZvaWQgX2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBjb25zdAogICAgICB7IHJldHVybiBf
ZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX3B0cjsgfQogICAgY2hh
ciogcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9wdHI7IH0KICAgIGNoYXIqIGVncHRy
KCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2VuZCA6
IF9JT19yZWFkX2VuZDsgfQogICAgY2hhciogZXBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3Jp
dGVfZW5kOyB9CiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9iYXNl
OyB9CiAgICBjaGFyKiBlYmFjaygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEw
MCAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9CiAgICBjaGFyKiBiYXNlKCkgY29u
c3QgeyByZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFyKiBlYnVmKCkgY29uc3QgeyByZXR1
cm4gX0lPX2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9l
bmQgLSBfSU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIgYykgeyAqX0lPX3dy
aXRlX3B0cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsgcmV0dXJuIF9mbGFncyA7IH0KICAg
IGludCB4ZmxhZ3MoaW50IGYpIHtpbnQgZmwgPSBfZmxhZ3MgOyBfZmxhZ3MgID0gZjsgcmV0dXJu
IGZsO30KICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFncyAgfD0gZjsgfQogICAgdm9p
ZCB4c2V0ZmxhZ3MoaW50IGYsIGludCBtYXNrKQogICAgICB7IF9mbGFncyAgPSAoX2ZsYWdzICAm
IH5tYXNrKSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1bXAoaW50IG4pCiAgICAgIHsgX2Zs
YWdzICAmIDB4MTAwICA/IChfSU9fc2F2ZV9iYXNlKz1uKTooX0lPX3JlYWRfcHRyKz1uKTt9CiAg
ICB2b2lkIHBidW1wKGludCBuKSB7IF9JT193cml0ZV9wdHIgKz0gbjsgfQogICAgdm9pZCBzZXRi
KGNoYXIqIGIsIGNoYXIqIGViLCBpbnQgYT0wKTsKICAgIHZvaWQgc2V0cChjaGFyKiBwLCBjaGFy
KiBlcCkKICAgICAgeyBfSU9fd3JpdGVfYmFzZT1fSU9fd3JpdGVfcHRyPXA7IF9JT193cml0ZV9l
bmQ9ZXA7IH0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hhciogZywgY2hhciAqZWcpIHsKICAg
ICAgaWYgKF9mbGFncyAgJiAweDEwMCApIF9JT19mcmVlX2JhY2t1cF9hcmVhKHRoaXMpOyAKICAg
ICAgX0lPX3JlYWRfYmFzZSA9IGViOyBfSU9fcmVhZF9wdHIgPSBnOyBfSU9fcmVhZF9lbmQgPSBl
ZzsgfQogICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBfc2hvcnRidWY7IH0KCiAgICBpbnQg
aW5fYmFja3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9CiAgICAgCiAgICBjaGFyICpH
YmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jh
c2U7IH0KICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9f
c2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNoYXIgKkJiYXNlKCkgeyByZXR1
cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQogICAgY2hh
ciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUJw
dHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19zYXZlX2VuZDsg
fQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICpl
TnB0cigpIHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50IGhhdmVfYmFja3VwKCkgeyBy
ZXR1cm4gX0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBpbnQgaGF2ZV9tYXJrZXJzKCkg
eyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9pZCBmcmVlX2JhY2t1cF9hcmVh
KCk7CiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGludCBwdXRfbW9kZSgpIHsgcmV0
dXJuIF9mbGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90b19nZXRfbW9kZSgpOwogICAg
CiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoKICAgIHN0YXRpYyBpbnQgZmx1
c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGluZWJ1ZmZlcmVkKCk7ICAKICAg
IHZpcnR1YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAo
LTEpICk7ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCB1
ZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwogCiAgICB2aXJ0dWFs
IHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0
dWFsIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFs
IHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6Omlu
fGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtwb3Moc3RyZWFtcG9zIHBvcywg
aW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKCiAgICBzdHJlYW1wb3MgcHVic2Vla29mZihz
dHJlYW1vZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpCiAgICAg
IHsgcmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAgc3RyZWFtcG9z
IHB1YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KQog
ICAgICB7IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQogICAgc3RyZWFt
cG9zIHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6
b3V0KTsKICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlv
czo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBp
bnQgbGVuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2Nh
dGUoKTsKCiAgICBpbnQgc2Vla21hcmsoc3RyZWFtbWFya2VyJiBtYXJrLCBpbnQgZGVsdGEgPSAw
KTsKICAgIGludCBzcHV0YmFja2MoY2hhciBjKTsKICAgIGludCBzdW5nZXRjKCk7CiAgICBpbnQg
dW5idWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDIgID8gMSA6IDA7IH0KICAgIGludCBsaW5l
YnVmZmVyZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIwMCAgPyAxIDogMDsgfQogICAgdm9pZCB1
bmJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDIgOyBlbHNlIF9mbGFncyAmPSB+
MiA7IH0KICAgIHZvaWQgbGluZWJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDB4
MjAwIDsgZWxzZSBfZmxhZ3MgJj0gfjB4MjAwIDsgfQogICAgaW50IGFsbG9jYXRlKCkgeyAgCglp
ZiAoYmFzZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7CgllbHNlIHJldHVybiBkb2FsbG9j
YXRlKCk7IH0KICAgICAKICAgIHZvaWQgYWxsb2NidWYoKSB7IGlmIChiYXNlKCkgPT0gX19udWxs
ICkgZG9hbGxvY2J1ZigpOyB9CiAgICB2b2lkIGRvYWxsb2NidWYoKTsKICAgIGludCBpbl9hdmFp
bCgpIHsgcmV0dXJuIF9JT19yZWFkX2VuZCAtIF9JT19yZWFkX3B0cjsgfQogICAgaW50IG91dF93
YWl0aW5nKCkgeyByZXR1cm4gX0lPX3dyaXRlX3B0ciAtIF9JT193cml0ZV9iYXNlOyB9CiAgICBz
dHJlYW1zaXplIHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4geHNw
dXRuKHMsIG4pOyB9CiAgICBzdHJlYW1zaXplIHBhZG4oY2hhciBwYWQsIHN0cmVhbXNpemUgbikg
eyByZXR1cm4gX0lPX3BhZG4odGhpcywgcGFkLCBuKTsgfQogICAgc3RyZWFtc2l6ZSBzZ2V0bihj
aGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19zZ2V0bih0aGlzLCBzLCBuKTsgfQog
ICAgaW50IGlnbm9yZShpbnQpOwogICAgaW50IGdldF9jb2x1bW4oKTsKICAgIGludCBzZXRfY29s
dW1uKGludCk7CiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1ZiwgX0dfc2l6ZV90ICBuLCBjaGFy
IGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7CiAgICBpbnQgc3B1dGMoaW50IGMpIHsgcmV0dXJu
IF9JT19wdXRjKGMsIHRoaXMpOyB9CiAgICBpbnQgc2J1bXBjKCkgeyByZXR1cm4gX0lPX2dldGMo
dGhpcyk7IH0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuICgoICB0aGlzICApLT5fSU9fcmVhZF9w
dHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYmIF9fdW5kZXJmbG93ICggIHRoaXMgICkg
PT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWduZWQgY2hhciAqKSAoICB0aGlzICApLT5fSU9fcmVh
ZF9wdHIpICA7IH0KICAgIGludCBzbmV4dGMoKSB7CglpZiAoX0lPX3JlYWRfcHRyID49IF9JT19y
ZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlzKSA9PSAoLTEpICkKCSAgcmV0dXJuICgtMSkgOwoJ
ZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRjKCk7IH0KICAgIHZvaWQgc3Rvc3NjKCkg
eyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5kKSBfSU9fcmVhZF9wdHIrKzsgfQogICAg
aW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwLCBpb3MqIHN0cmVhbSA9
IF9fbnVsbCApOwogICAgaW50IHNjYW4oY2hhciBjb25zdCAqZm10MCAuLi4pOwogICAgaW50IHZm
b3JtKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwKTsKICAgIGludCBmb3JtKGNoYXIg
Y29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hh
ciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0
ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2Vl
ayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2UoKTsKICAg
IHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAoKCgoKfTsKCiAKIAoKY2xhc3MgZmlsZWJ1
ZiA6IHB1YmxpYyBzdHJlYW1idWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5pdCgpOwogIHB1
YmxpYzoKICAgIHN0YXRpYyBjb25zdCBpbnQgb3BlbnByb3Q7ICAKICAgIGZpbGVidWYoKTsKICAg
IGZpbGVidWYoaW50IGZkKTsKICAgIGZpbGVidWYoaW50IGZkLCBjaGFyKiBwLCBpbnQgbGVuKTsK
CgoKICAgIH5maWxlYnVmKCk7CiAgICBmaWxlYnVmKiBhdHRhY2goaW50IGZkKTsKICAgIGZpbGVi
dWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOwogICAgZmls
ZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBtb2RlLCBpbnQg
cHJvdCA9IDA2NjQpOwogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0dWFsIGlu
dCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkgKTsKICAgIGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1
cm4gX2ZpbGVubyA+PSAwOyB9CiAgICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBpc19vcGVuKCkg
PyBfZmlsZW5vIDogKC0xKSA7IH0KICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0dWFsIGlu
dCBkb2FsbG9jYXRlKCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwg
X3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFt
YnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0bihjb25z
dCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywg
c3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6ICAKIAog
ICAgaW50IGlzX3JlYWRpbmcoKSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7IH0KICAgIGNo
YXIqIGN1cl9wdHIoKSB7IHJldHVybiBpc19yZWFkaW5nKCkgPyAgZ3B0cigpIDogcHB0cigpOyB9
CiAgICAgCiAgICBjaGFyKiBmaWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0KICAgICAKICAg
IHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUgc2l6ZSk7
CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAg
ICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXplKTsK
ICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAogICAgdmlydHVhbCBpbnQgc3lzX2Ns
b3NlKCk7CgoKCgp9OwoKaW5saW5lIHZvaWQgaW9zOjppbml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJl
YW0qIHRpZV90bykgewoJCV9zdGF0ZSA9IHNiID8gaW9zOjpnb29kYml0IDogaW9zOjpiYWRiaXQ7
IF9leGNlcHRpb25zPTA7CgkJX3N0cmJ1Zj1zYjsgX3RpZSA9IHRpZV90bzsgX3dpZHRoPTA7IF9m
aWxsPScgJzsKCgkJX2ZsYWdzPWlvczo6c2tpcHdzfGlvczo6ZGVjOwoKCgoJCV9wcmVjaXNpb249
NjsgX2FycmF5cyA9IDA7IH0KCmlubGluZSBpb3M6OmlvcyhzdHJlYW1idWYqIHNiLCBvc3RyZWFt
KiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3RvKTsgfQoKaW5saW5lIGlvczo6fmlvcygpIHsKCgoK
ICAgICAKICAgICAKICAgIG9wZXJhdG9yIGRlbGV0ZVtdIChfYXJyYXlzKTsKfQp9ICAKCiMgMzEg
Ii91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWly
aXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMiAzCgoK
ZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdHlwZWRlZiBpb3Mm
ICgqX19tYW5pcCkoaW9zJik7CnR5cGVkZWYgaXN0cmVhbSYgKCpfX2ltYW5pcCkoaXN0cmVhbSYp
Owp0eXBlZGVmIG9zdHJlYW0mICgqX19vbWFuaXApKG9zdHJlYW0mKTsKCmV4dGVybiBpc3RyZWFt
JiB3cyhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7
CmV4dGVybiBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5k
cyhvc3RyZWFtJiBvdXRzKTsKCmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewog
ICAgIAogICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgogICAgb3N0cmVhbSgpIHsgfQogICAg
b3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVkPSBfX251bGwgKTsKICAgIGludCBv
cGZ4KCkgewoJaWYgKCFnb29kKCkpIHJldHVybiAwOwoJZWxzZSB7IGlmIChfdGllKSBfdGllLT5m
bHVzaCgpOyAgOyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgIDsKCQkgIGlmIChmbGFn
cygpICYgKGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkgICAgICBkb19vc2Z4KCk7IH0KICAg
IG9zdHJlYW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9zdHJidWYtPnNw
dXRjKGMpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgY2hh
ciAqcywgc3RyZWFtc2l6ZSBuKTsKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHVuc2lnbmVkIGNo
YXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMs
IG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXpl
IG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFt
JiB3cml0ZShjb25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRl
KChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1wb3MpOwogICAg
b3N0cmVhbSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxw
KCk7CiAgICBvc3RyZWFtJiBmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgb3N0cmVh
bSYgdmZvcm0oY29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsKCiAgICBvc3Ry
ZWFtJiBvcGVyYXRvcjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVk
IGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAg
b3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9y
PDwoY29uc3QgdW5zaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNo
YXIqKXM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMpCgl7
IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRv
cjw8KGNvbnN0IHZvaWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7CiAgICBv
c3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9y
PDwobG9uZyBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsKCiAg
ICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBsb25nIG4pOwogICAgX19l
eHRlbnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBuKTsKCiAg
ICBvc3RyZWFtJiBvcGVyYXRvcjw8KHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgoaW50KW4p
O30KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgbikge3JldHVybiBvcGVy
YXRvcjw8KCh1bnNpZ25lZCBpbnQpbik7fQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBi
KSB7IHJldHVybiBvcGVyYXRvcjw8KChpbnQpYik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
KGRvdWJsZSBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZmxvYXQgbikgeyByZXR1cm4gb3Bl
cmF0b3I8PCgoZG91YmxlKW4pOyB9CgoKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgZG91
YmxlIG4pIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKICAgIG9zdHJlYW0mIG9w
ZXJhdG9yPDwoX19vbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7IH0KICAgIG9z
dHJlYW0mIG9wZXJhdG9yPDwoX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAq
dGhpczt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHN0cmVhbWJ1ZiopOwoKCgp9OwoKY2xhc3Mg
aXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGlvcwp7CiAgICAgCnByb3RlY3RlZDoKICAgIF9HX3Np
emVfdCAgX2djb3VudDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBwdWJsaWM6CiAgICBpc3RyZWFt
KCk6IF9nY291bnQgKDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRp
ZWQ9IF9fbnVsbCApOwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBk
ZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxl
biwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxp
bSk7IH0KICAgIGlzdHJlYW0mIGdldChjaGFyJiBjKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25l
ZCBjaGFyJiBjKSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5l
KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0
bGluZSh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyBy
ZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0
KHNpZ25lZCBjaGFyJiBjKSAgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVhbSYg
Z2V0KHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1
cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKHNp
Z25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0
bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChjaGFyICpw
dHIsIHN0cmVhbXNpemUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIgKnB0ciwg
c3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBp
c3RyZWFtJiByZWFkKHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1
cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpwdHIsIHN0
cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0
cmVhbSYgZ2V0KHN0cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0m
IGdldHMoY2hhciAqKnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGludCBuZWVk
ID0gMCkgewoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9Cgll
bHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1ZigpLT5pbl9hdmFp
bCgpIDwgbmVlZCkpIF90aWUtPmZsdXNoKCk7CgkgIGlmICghbmVlZCAmJiAoZmxhZ3MoKSAmIGlv
czo6c2tpcHdzKSkgcmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9
CiAgICBpbnQgaXBmeDAoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyBy
ZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllKSBfdGllLT5mbHVzaCgpOwoJICBp
ZiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1
cm4gMTsKCX0KICAgIH0KICAgIGludCBpcGZ4MSgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlv
czo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgcmRi
dWYoKS0+aW5fYXZhaWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwoJICByZXR1cm4gMTsKCX0KICAg
IH0KICAgIHZvaWQgaXNmeCgpIHsgIDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgpKSBy
ZXR1cm4gKC0xKSA7CgkJZWxzZSB7IGludCBjaCA9IF9zdHJidWYtPnNidW1wYygpOwoJCSAgICAg
ICBpZiAoY2ggPT0gKC0xKSApIHNldChpb3M6OmVvZmJpdCk7CgkJICAgICAgIGlzZngoKTsKCQkg
ICAgICAgcmV0dXJuIGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVlaygpOwogICAgX0dfc2l6ZV90
ICBnY291bnQoKSB7IHJldHVybiBfZ2NvdW50OyB9CiAgICBpc3RyZWFtJiBpZ25vcmUoaW50IG49
MSwgaW50IGRlbGltID0gKC0xKSApOwogICAgaW50IHN5bmMgKCk7CiAgICBpc3RyZWFtJiBzZWVr
ZyhzdHJlYW1wb3MpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwog
ICAgc3RyZWFtcG9zIHRlbGxnKCk7CiAgICBpc3RyZWFtJiBwdXRiYWNrKGNoYXIgY2gpIHsKCWlm
IChnb29kKCkgJiYgX3N0cmJ1Zi0+c3B1dGJhY2tjKGNoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpi
YWRiaXQpOwoJcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHVuZ2V0KCkgewoJaWYgKGdvb2Qo
KSAmJiBfc3RyYnVmLT5zdW5nZXRjKCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJl
dHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwog
ICAgaXN0cmVhbSYgdnNjYW4oY29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsK
CgoKCgoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciopOwogICAgaXN0cmVhbSYgb3BlcmF0
b3I+Pih1bnNpZ25lZCBjaGFyKiBwKSB7IHJldHVybiBvcGVyYXRvcj4+KChjaGFyKilwKTsgfQog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hhcipwKSB7IHJldHVybiBvcGVyYXRvcj4+
KChjaGFyKilwKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyJiBjKTsKICAgIGlzdHJl
YW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hhciYgYykge3JldHVybiBvcGVyYXRvcj4+KChjaGFy
JiljKTt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9w
ZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oaW50Jik7CiAgICBp
c3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcmKTsKCiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9w
ZXJhdG9yPj4obG9uZyBsb25nJik7CiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9y
Pj4odW5zaWduZWQgbG9uZyBsb25nJik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaG9ydCYp
OwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmKTsKICAgIGlzdHJlYW0mIG9w
ZXJhdG9yPj4odW5zaWduZWQgbG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25l
ZCBzaG9ydCYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oYm9vbCYpOwoKICAgIGlzdHJlYW0m
IG9wZXJhdG9yPj4oZmxvYXQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oZG91YmxlJik7CiAg
ICBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJik7CiAgICBpc3RyZWFtJiBvcGVyYXRv
cj4+KCBfX21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAgIGlz
dHJlYW0mIG9wZXJhdG9yPj4oX19pbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7
IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc3RyZWFtYnVmKik7Cn07CgpjbGFzcyBpb3N0cmVh
bSA6IHB1YmxpYyBpc3RyZWFtLCBwdWJsaWMgb3N0cmVhbQp7CiAgcHVibGljOgogICAgaW9zdHJl
YW0oKSB7IH0KICAgIGlvc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxs
ICk7Cn07CgpjbGFzcyBfSU9faXN0cmVhbV93aXRoYXNzaWduIDogcHVibGljIGlzdHJlYW0gewpw
dWJsaWM6CiAgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KGlzdHJlYW0mKTsKICBf
SU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYg
cmhzKQogICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3RyZWFtJj4gKHJocykp
OyB9Cn07CgpjbGFzcyBfSU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGljIG9zdHJlYW0gewpw
dWJsaWM6CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9zdHJlYW0mKTsKICBf
SU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYg
cmhzKQogICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxvc3RyZWFtJj4gKHJocykp
OyB9Cn07CgpleHRlcm4gX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBjaW47CiAKZXh0ZXJuIF9JT19v
c3RyZWFtX3dpdGhhc3NpZ24gY291dCwgY2VycjsKCmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNz
aWduIGNsb2cKCgoKOwoKZXh0ZXJuIGlzdHJlYW0mIGxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJu
IGlzdHJlYW0mIHVubG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgbG9jayhvc3Ry
ZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIHVubG9jayhvc3RyZWFtJiBvdXRzKTsKCnN0cnVj
dCBJb3N0cmVhbV9pbml0IHsgfSA7ICAgCgppbmxpbmUgaW9zJiBkZWMoaW9zJiBpKQp7IGkuc2V0
Zihpb3M6OmRlYywgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxp
bmUgaW9zJiBoZXgoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmhleCwgaW9zOjpkZWN8aW9zOjpoZXh8
aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBvY3QoaW9zJiBpKQp7IGkuc2V0Zihp
b3M6Om9jdCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQp9ICAKCgoj
IDMyICJzaWdoYW5kbGVycy5jYyIgMgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg
MSAzCgoKCmV4dGVybiAiQyIgewoKI2lkZW50ICAiJFJldmlzaW9uOiAxLjEzNyAkIgogCgoKCgoK
CgoKCgoKCgoKCgogCiAKCiAKIAogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAK
CgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgojIDEg
Ii91c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDEgMwogCiAKCiAKIAogCgogCgoKCgoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgog
CgogCgoKCgkJCQkJIAoKCQkJCQkgCgoKCgkJCQkJIAoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCiMgMTg5ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAzCgoKCiMgMjc4ICIvdXNy
L2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCiAKCgpleHRlcm4gaW50IGFjY2Vzcyhjb25zdCBjaGFy
ICosIGludCk7CmV4dGVybiB1bnNpZ25lZCBhbGFybSh1bnNpZ25lZCk7CmV4dGVybiBpbnQgY2hk
aXIoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBjaG93bihjb25zdCBjaGFyICosIHVpZF90LCBn
aWRfdCk7CmV4dGVybiBpbnQgY2xvc2UoaW50KTsKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQoY2hhciAq
KTsKZXh0ZXJuIGNoYXIgKmN1c2VyaWQoY2hhciAqKTsKZXh0ZXJuIGludCBkdXAoaW50KTsKZXh0
ZXJuIGludCBkdXAyKGludCwgaW50KTsKZXh0ZXJuIGludCBleGVjbChjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludCBleGVjbGUoY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICosIC4uLik7CmV4dGVybiBpbnQgZXhlY2xwKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
LCAuLi4pOwpleHRlcm4gaW50IGV4ZWN2KGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKik7CmV4
dGVybiBpbnQgZXhlY3ZlKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKiwgY2hhciAqY29uc3Qg
Kik7CmV4dGVybiBpbnQgZXhlY3ZwKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKik7CmV4dGVy
biB2b2lkIF9leGl0KGludCk7CmV4dGVybiBwaWRfdCBmb3JrKHZvaWQpOwpleHRlcm4gbG9uZyBm
cGF0aGNvbmYoaW50LCBpbnQpOwoKZXh0ZXJuIGNoYXIgKmdldGN3ZChjaGFyICosIHNpemVfdCk7
ICAgICAKZXh0ZXJuIGdpZF90IGdldGVnaWQodm9pZCk7CmV4dGVybiB1aWRfdCBnZXRldWlkKHZv
aWQpOwpleHRlcm4gZ2lkX3QgZ2V0Z2lkKHZvaWQpOwoKCgpleHRlcm4gaW50IGdldGdyb3Vwcyhp
bnQsIGdpZF90ICopOwoKZXh0ZXJuIGNoYXIgKmdldGxvZ2luKHZvaWQpOwoKCgpleHRlcm4gcGlk
X3QgZ2V0cGdycCh2b2lkKTsKCmV4dGVybiBwaWRfdCBnZXRwaWQodm9pZCk7CmV4dGVybiBwaWRf
dCBnZXRwcGlkKHZvaWQpOwpleHRlcm4gdWlkX3QgZ2V0dWlkKHZvaWQpOwpleHRlcm4gaW50IGlz
YXR0eShpbnQpOwoKZXh0ZXJuIGludCBsaW5rKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK
ZXh0ZXJuIGludCBsaW5rZm9sbG93KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIyAzMzQg
Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwoKZXh0ZXJuIG9mZl90IGxzZWVrKGludCwgb2ZmX3Qs
IGludCk7CmV4dGVybiBsb25nIHBhdGhjb25mKGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJuIGlu
dCBwYXVzZSh2b2lkKTsKZXh0ZXJuIGludCBwaXBlKGludCAqKTsKZXh0ZXJuIHNzaXplX3QgcmVh
ZChpbnQsIHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBybWRpcihjb25zdCBjaGFyICopOwpl
eHRlcm4gaW50IHNldGdpZChnaWRfdCk7CmV4dGVybiBpbnQgc2V0cGdpZChwaWRfdCwgcGlkX3Qp
OwpleHRlcm4gcGlkX3Qgc2V0c2lkKHZvaWQpOwpleHRlcm4gaW50IHNldHVpZCh1aWRfdCk7CmV4
dGVybiB1bnNpZ25lZCBzbGVlcCh1bnNpZ25lZCk7CmV4dGVybiBsb25nIHN5c2NvbmYoaW50KTsK
ZXh0ZXJuIHBpZF90IHRjZ2V0cGdycChpbnQpOwpleHRlcm4gaW50IHRjc2V0cGdycChpbnQsIHBp
ZF90KTsKZXh0ZXJuIGNoYXIgKnR0eW5hbWUoaW50KTsKZXh0ZXJuIGludCB1bmxpbmsoY29uc3Qg
Y2hhciAqKTsKZXh0ZXJuIHNzaXplX3Qgd3JpdGUoaW50LCBjb25zdCB2b2lkICosIHNpemVfdCk7
CgoKIAoKCmV4dGVybiBpbnQgZmRhdGFzeW5jKGludCk7CgoKCiAKCgpleHRlcm4gaW50IGZzeW5j
KGludCk7CgoKCiAKCgpleHRlcm4gaW50IGZ0cnVuY2F0ZShpbnQsIG9mZl90KTsJCgoKCiAKCgpl
eHRlcm4gaW50IGdldGxvZ2luX3IoY2hhciAqLCBzaXplX3QpOwpleHRlcm4gaW50IHR0eW5hbWVf
cihpbnQsIGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayh2b2lkICgq
KSh2b2lkKSwgdm9pZCAoKikodm9pZCksIHZvaWQgKCopKHZvaWQpKTsKCgoKIAoKCgpleHRlcm4g
c2l6ZV90ICAgY29uZnN0cihpbnQsIGNoYXIgKiwgc2l6ZV90KTsKCgoKIAoKCmV4dGVybiBpbnQg
Y2hyb290KGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgbmljZShpbnQpOwpleHRlcm4gY2hhciAg
ICAgKmNyeXB0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgICAgIGVu
Y3J5cHQoY2hhciAqLCBpbnQpOwpleHRlcm4gY2hhciAgICAgKmdldHBhc3MoY29uc3QgY2hhciAq
KTsKZXh0ZXJuIHZvaWQgICAgIHN3YWIoY29uc3Qgdm9pZCAqLCB2b2lkICosIHNzaXplX3QpOwoK
CgogCgoKZXh0ZXJuIGludCBicmsodm9pZCAqKTsKZXh0ZXJuIGludCBmY2hvd24oaW50LCB1aWRf
dCwgZ2lkX3QpOwpleHRlcm4gaW50IGZjaGRpcihpbnQpOwpleHRlcm4gaW50IGdldGR0YWJsZXNp
emUodm9pZCk7CmV4dGVybiBsb25nIGdldGhvc3RpZCh2b2lkKTsKZXh0ZXJuIGludCBnZXRob3N0
bmFtZShjaGFyICosIHNpemVfdCk7CmV4dGVybiBpbnQgZ2V0cGFnZXNpemUodm9pZCk7CmV4dGVy
biBwaWRfdCBnZXRwZ2lkKHBpZF90KTsKZXh0ZXJuIHBpZF90IGdldHNpZChwaWRfdCk7CmV4dGVy
biBjaGFyICpnZXR3ZChjaGFyICopOwpleHRlcm4gaW50IGxjaG93bihjb25zdCBjaGFyICosIHVp
ZF90LCBnaWRfdCk7CmV4dGVybiBpbnQgbG9ja2YoaW50LCBpbnQsIG9mZl90KTsKZXh0ZXJuIGlu
dCByZWFkbGluayhjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKnNi
cmsoc3NpemVfdCk7CgoKCmV4dGVybiBwaWRfdCBzZXRwZ3JwKHZvaWQpOwoKCgpleHRlcm4gaW50
IHNldHJlZ2lkKGdpZF90LCBnaWRfdCk7CiMgNDM5ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMK
CmV4dGVybiBpbnQgc2V0cmV1aWQodWlkX3QsIHVpZF90KTsKZXh0ZXJuIGludCBzeW1saW5rKGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgc3luYyh2b2lkKTsKZXh0ZXJu
IGludCB0cnVuY2F0ZShjb25zdCBjaGFyICosIG9mZl90KTsKZXh0ZXJuIHVzZWNvbmRzX3QgdWFs
YXJtKHVzZWNvbmRzX3QsIHVzZWNvbmRzX3QpOwpleHRlcm4gaW50IHVzbGVlcCh1c2Vjb25kc190
KTsKCgoKCgoKCgoKCgoKCgpleHRlcm4gc3NpemVfdCBwcmVhZChpbnQsIHZvaWQgKiwgc2l6ZV90
LCBvZmZfdCk7CmV4dGVybiBzc2l6ZV90IHB3cml0ZShpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90
LCBvZmZfdCk7CgoKIAoKCgoKIAoKCnN0cnVjdCB0aW1ldmFsOwpleHRlcm4gaW50IHNlbGVjdChp
bnQsIGZkX3NldCAqLCBmZF9zZXQgKiwgZmRfc2V0ICosIHN0cnVjdCB0aW1ldmFsICopOwoKCiAK
CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAxIDMKIAogCiAKCiAKIAogCiAKCgoKI2lk
ZW50IAkiQCgjKXV0cy0zYjI6aW8vdWlvLmgJMS4yIgojaWRlbnQgCSIkUmV2aXNpb246IDEuMjIg
JCIKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBpb3ZlYyB7CiAg
ICAgICAgdm9pZCAqaW92X2Jhc2U7CiAgICAgICAgc2l6ZV90ICBpb3ZfbGVuOwp9IGlvdmVjX3Q7
CgoKCmV4dGVybiBzc2l6ZV90IHJlYWR2KGludCwgY29uc3Qgc3RydWN0IGlvdmVjICosIGludCk7
CmV4dGVybiBzc2l6ZV90IHdyaXRldihpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQpOwoK
CiMgODcgIi91c3IvaW5jbHVkZS9zeXMvdWlvLmgiIDMKCgoKfQoKCiMgNDgwICIvdXNyL2luY2x1
ZGUvdW5pc3RkLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvdXRpbWUuaCIgMSAzCgoKCmV4dGVy
biAiQyIgewoKI2lkZW50ICAiJFJldmlzaW9uOiAxLjkgJCIKIAoKCgoKCgoKCgoKCgoKCgoKIAog
CiAKCiAKIAogCiAKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdXRpbWUuaCIgMSAzCiAKIAogCgog
CiAKIAogCgoKCgogCgoKCnN0cnVjdCB1dGltYnVmIHsKCXRpbWVfdCBhY3RpbWU7CQkgCgl0aW1l
X3QgbW9kdGltZTsJCSAKfTsKCgojIDM0ICIvdXNyL2luY2x1ZGUvdXRpbWUuaCIgMiAzCgoKZXh0
ZXJuIGludCB1dGltZShjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB1dGltYnVmICopOwoKCn0K
CgojIDQ4MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3Jl
X2NvbXAuaCIgMSAzCgoKCmV4dGVybiAiQyIgewoKI2lkZW50ICAiJFJldmlzaW9uOiAxLjEgJCIK
IAoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBjaGFyICpyZV9jb21wKGNvbnN0IGNoYXIgKik7CmV4
dGVybiBpbnQgcmVfZXhlYyhjb25zdCBjaGFyICopOwoKCn0KCgojIDQ4MiAiL3Vzci9pbmNsdWRl
L3VuaXN0ZC5oIiAyIDMKCmV4dGVybiBpbnQgYWNjdChjb25zdCBjaGFyICopOwpleHRlcm4gdm9p
ZCBleGl0KGludCk7CmV4dGVybiBjaGFyICpnZXR0eHQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICopOwpleHRlcm4gaW50IHByb2ZpbCh1bnNpZ25lZCBzaG9ydCAqLCB1bnNpZ25lZCBpbnQsIHVu
c2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKZXh0ZXJuIGludCBwdHJhY2UoaW50LCBwaWRfdCwg
aW50LCBpbnQpOwpleHRlcm4gaW50IHJlbmFtZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7
CSAKZXh0ZXJuIGludCBzZXRldWlkKHVpZF90KTsKZXh0ZXJuIGludCBzZXRlZ2lkKGdpZF90KTsK
ZXh0ZXJuIGludCBzdGltZShjb25zdCB0aW1lX3QgKik7CmV4dGVybiBvZmZfdCB0ZWxsKGludCk7
CgoKCnN0cnVjdCBhY2N0X3NwaTsJIApleHRlcm4gaW50IGF0Zm9ya19jaGlsZCh2b2lkICgqZnVu
Yykodm9pZCkpOwpleHRlcm4gaW50IGF0Zm9ya19jaGlsZF9wcmVwZW5kKHZvaWQgKCpmdW5jKSh2
b2lkKSk7CmV4dGVybiBpbnQgYXRmb3JrX3BhcmVudCh2b2lkICgqZnVuYykoaW50LCBpbnQpKTsK
ZXh0ZXJuIGludCBhdGZvcmtfcHJlKHZvaWQgKCpmdW5jKSh2b2lkKSk7CmV4dGVybiBpbnQgYXRz
cHJvY19jaGlsZCh2b2lkICgqZnVuYykodm9pZCkpOwpleHRlcm4gaW50IGF0c3Byb2NfcGFyZW50
KHZvaWQgKCpmdW5jKShpbnQsIGludCkpOwpleHRlcm4gaW50IGF0c3Byb2NfcHJlKHZvaWQgKCpm
dW5jKSh1bnNpZ25lZCBpbnQpKTsKZXh0ZXJuIHZvaWQgYnNldChjaGFyICosIGJpdG51bV90KTsK
ZXh0ZXJuIHZvaWQgYmNscihjaGFyICosIGJpdG51bV90KTsKZXh0ZXJuIGludCBidHN0KGNoYXIg
KiwgYml0bnVtX3QpOwpleHRlcm4gdm9pZCBiZnNldChjaGFyICosIGJpdG51bV90LCBiaXRsZW5f
dCk7CmV4dGVybiB2b2lkIGJmY2xyKGNoYXIgKiwgYml0bnVtX3QsIGJpdGxlbl90KTsKZXh0ZXJu
IGJpdGxlbl90IGJmdHN0c2V0KGNoYXIgKiwgYml0bnVtX3QsIGJpdGxlbl90KTsKZXh0ZXJuIGJp
dGxlbl90IGJmdHN0Y2xyKGNoYXIgKiwgYml0bnVtX3QsIGJpdGxlbl90KTsKZXh0ZXJuIGludCBC
U0RjaG93bihjb25zdCBjaGFyICosIHVpZF90LCBnaWRfdCk7CmV4dGVybiBpbnQgQlNEZHVwMihp
bnQsIGludCk7CmV4dGVybiBpbnQgQlNEZmNob3duKGludCwgdWlkX3QsIGdpZF90KTsKZXh0ZXJu
IGludCBCU0RnZXRwZ3JwKGludCk7CmV4dGVybiBpbnQgQlNEc2V0cGdycChpbnQsIGludCk7CmV4
dGVybiBpbnQgQlNEc2V0Z3JvdXBzKGludCwgaW50ICopOwpleHRlcm4gaW50IEJTRGdldGdyb3Vw
cyhpbnQsIGludCAqKTsKZXh0ZXJuIGludCBfZGFlbW9uaXplKGludCwgaW50LCBpbnQsIGludCk7
CmV4dGVybiBhc2hfdCBnZXRhc2godm9pZCk7CmV4dGVybiBpbnQgZ2V0ZHRhYmxlaGkodm9pZCk7
CmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFtZShjaGFyICosIGludCk7CmV4dGVybiBwcmlkX3QgZ2V0
cHJpZCh2b2lkKTsKZXh0ZXJuIGNoYXIgKl9nZXRwdHkoaW50ICosIGludCwgbW9kZV90LCBpbnQp
OwpleHRlcm4gaW50IGdldHNwaW5mbyhzdHJ1Y3QgYWNjdF9zcGkgKik7CmV4dGVybiBpbnQgbWlu
Y29yZShjYWRkcl90LCBzaXplX3QsIGNoYXIgKik7CmV4dGVybiBpbnQgbXBpbih2b2lkICosIHNp
emVfdCk7CmV4dGVybiBpbnQgbXVucGluKHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBuZXdh
cnJheXNlc3Modm9pZCk7CmV4dGVybiBwaWRfdCBwY3JlYXRlbChjb25zdCBjaGFyICosIGNvbnN0
IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIHBpZF90IHBjcmVhdGVscChjb25zdCBjaGFyICosIGNvbnN0
IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIHBpZF90IHBjcmVhdGV2KGNvbnN0IGNoYXIgKiwgY2hhciAq
Y29uc3QgKik7CmV4dGVybiBwaWRfdCBwY3JlYXRldmUoY29uc3QgY2hhciAqLCBjaGFyICpjb25z
dCAqLCBjaGFyICpjb25zdCAqKTsKZXh0ZXJuIHBpZF90IHBjcmVhdGV2cChjb25zdCBjaGFyICos
IGNoYXIgKmNvbnN0ICopOwoKZXh0ZXJuIHNzaXplX3QgcHJlYWQ2NChpbnQsIHZvaWQgKiwgc2l6
ZV90LCBvZmY2NF90KTsKZXh0ZXJuIHNzaXplX3QgcHdyaXRlNjQoaW50LCBjb25zdCB2b2lkICos
IHNpemVfdCwgb2ZmNjRfdCk7CgpleHRlcm4gaW50IHJleGVjbChjZWxsX3QsIGNvbnN0IGNoYXIg
KiwgY29uc3QgY2hhciAqLCAuLi4pOwpleHRlcm4gaW50IHJleGVjbGUoY2VsbF90LCBjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludCByZXhlY2xwKGNlbGxfdCwgY29u
c3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQgcmV4ZWN2KGNlbGxfdCwg
Y29uc3QgY2hhciAqLCBjaGFyICpjb25zdCAqKTsKZXh0ZXJuIGludCByZXhlY3ZlKGNlbGxfdCwg
Y29uc3QgY2hhciAqLCBjaGFyICpjb25zdCAqLCBjaGFyICpjb25zdCAqKTsKZXh0ZXJuIGludCBy
ZXhlY3ZwKGNlbGxfdCwgY29uc3QgY2hhciAqLCBjaGFyICpjb25zdCAqKTsKZXh0ZXJuIGZsb2F0
IF9zcXJ0X3MoZmxvYXQpOwpleHRlcm4gZG91YmxlIF9zcXJ0X2QoZG91YmxlKTsKZXh0ZXJuIGlu
dCBzZXRhc2goYXNoX3QpOwpleHRlcm4gaW50IHNldGRvbWFpbm5hbWUoY29uc3QgY2hhciAqLCBp
bnQpOwoKCgpleHRlcm4gaW50IHNldGdyb3VwcyhpbnQsIGNvbnN0IGdpZF90ICopOwoKZXh0ZXJu
IGludCBzZXRob3N0aWQoaW50KTsKZXh0ZXJuIGludCBzZXRob3N0bmFtZShjb25zdCBjaGFyICos
IGludCk7CmV4dGVybiBpbnQgc2V0cHJpZChwcmlkX3QpOwpleHRlcm4gaW50IHNldHJnaWQoZ2lk
X3QpOwpleHRlcm4gaW50IHNldHJ1aWQodWlkX3QpOwpleHRlcm4gaW50IHNldHNwaW5mbyhzdHJ1
Y3QgYWNjdF9zcGkgKik7CmV4dGVybiBpbnQgc2dpa29wdChjb25zdCBjaGFyICosIGNoYXIgKiwg
aW50KTsKZXh0ZXJuIGxvbmcgc2dpbmFwKGxvbmcpOwpleHRlcm4gb2ZmNjRfdCB0ZWxsNjQoaW50
KTsKZXh0ZXJuIGludCB2aGFuZ3VwKHZvaWQpOwoKIAoKCgpleHRlcm4gaW50IGZhdHRhY2goaW50
LCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IGZkZXRhY2goY29uc3QgY2hhciAqKTsKZXh0ZXJu
IGludCBpb2N0bChpbnQsIGludCwgLi4uKTsKCgoKCgkgCmV4dGVybiBpbnQgZnRydW5jYXRlNjQo
aW50LCBvZmY2NF90KTsKZXh0ZXJuIGludCBsb2NrZjY0KGludCwgaW50LCBvZmY2NF90KTsKZXh0
ZXJuIG9mZjY0X3QgbHNlZWs2NChpbnQsIG9mZjY0X3QsIGludCk7CmV4dGVybiBpbnQgdHJ1bmNh
dGU2NChjb25zdCBjaGFyICosIG9mZjY0X3QpOwoKCgoKCn0KCgojIDM4ICJzaWdoYW5kbGVycy5j
YyIgMgoKCgojIDEgImVycm9yLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpjbGFzcyBv
c3Ryc3RyZWFtOwoKCgoKCmV4dGVybiB2b2lkIG1lc3NhZ2UgKGNvbnN0IGNoYXIgKm5hbWUsIGNv
bnN0IGNoYXIgKmZtdCwgLi4uKTsKZXh0ZXJuIHZvaWQgdXNhZ2UgKGNvbnN0IGNoYXIgKmZtdCwg
Li4uKTsKZXh0ZXJuIHZvaWQgd2FybmluZyAoY29uc3QgY2hhciAqZm10LCAuLi4pOwpleHRlcm4g
dm9pZCBlcnJvciAoY29uc3QgY2hhciAqZm10LCAuLi4pOwpleHRlcm4gdm9pZCBwYXJzZV9lcnJv
ciAoY29uc3QgY2hhciAqZm10LCAuLi4pOwpleHRlcm4gdm9pZCBwYW5pYyAoY29uc3QgY2hhciAq
Zm10LCAuLi4pIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKSA7CgogCmV4dGVybiBpbnQg
ZXJyb3Jfc3RhdGU7CgogCiAKIApleHRlcm4gaW50IGJ1ZmZlcl9lcnJvcl9tZXNzYWdlczsKCiAK
ZXh0ZXJuIG9zdHJzdHJlYW0gKmVycm9yX21lc3NhZ2VfYnVmZmVyOwoKZXh0ZXJuIHZvaWQgc3lt
Ym9sc19vZl9lcnJvciAodm9pZCk7CgoKCiAKCgoKCiMgNDEgInNpZ2hhbmRsZXJzLmNjIiAyCgoj
IDEgImlucHV0LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgojIDEgIi91c3IvcGVv
cGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45
NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0ZGlvIiAxIDMKIAogCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwoKCgpleHRlcm4gIkMiIHsKCiNpZGVudCAgIiRSZXZpc2lv
bjogMS43NiAkIgogCgoKCgoKCgoKCgoKCgoKCgogCiAKCiAKIAogCgogCgoKCgoKCgoKIyA0OCAi
L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgojIDU5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoK
Cgp0eXBlZGVmIF9faW50NjRfdAlmcG9zX3Q7CgoKCgoKIAoKCgoKCgojIDg2ICIvdXNyL2luY2x1
ZGUvc3RkaW8uaCIgMwoKCgoKCgoKIAp0eXBlZGVmCV9faW50NjRfdAlmcG9zNjRfdDsKCgoKCgog
CgoKdHlwZWRlZiBjaGFyICp2YV9saXN0OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTQw
ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
Cgp0eXBlZGVmIHN0cnVjdAkgCgogCgoKCgoKCgpfX2ZpbGVfcwoKewoKCWludAkJX2NudDsJIAoK
CgoKCXVuc2lnbmVkIGNoYXIJKl9wdHI7CSAKCXVuc2lnbmVkIGNoYXIJKl9iYXNlOwkgCgoKCgoK
CXVuc2lnbmVkIGNoYXIJX2ZsYWc7CSAKCXVuc2lnbmVkIGNoYXIJX29fZmlsZTsJIAoJdW5zaWdu
ZWQgc2hvcnQJX2ZpbGU7CSAKCgoKCn0gRklMRTsKCmV4dGVybiBGSUxFCQlfX2lvYlsxMDAgXTsJ
CgpleHRlcm4gRklMRQkJKl9sYXN0YnVmOwpleHRlcm4gdW5zaWduZWQgY2hhciAJKl9idWZlbmR0
YWJbXTsKZXh0ZXJuIHVuc2lnbmVkIGNoYXIJIF9zaWJ1ZltdLCBfc29idWZbXTsKCgpleHRlcm4g
aW50CXJlbW92ZShjb25zdCBjaGFyICopOwpleHRlcm4gaW50CXJlbmFtZShjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFCSp0bXBmaWxlKHZvaWQpOwpleHRlcm4gY2hhcgkq
dG1wbmFtKGNoYXIgKik7CmV4dGVybiBpbnQJZmNsb3NlKEZJTEUgKik7CmV4dGVybiBpbnQJZmZs
dXNoKEZJTEUgKik7CmV4dGVybiBGSUxFCSpmb3Blbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg
Kik7CmV4dGVybiBGSUxFCSpmcmVvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBGSUxF
ICopOwpleHRlcm4gdm9pZAlzZXRidWYoRklMRSAqLCBjaGFyICopOwpleHRlcm4gaW50CXNldHZi
dWYoRklMRSAqLCBjaGFyICosIGludCwgc2l6ZV90KTsKIApleHRlcm4gaW50CWZwcmludGYoRklM
RSAqLCBjb25zdCBjaGFyICosIC4uLik7CiAKZXh0ZXJuIGludAlmc2NhbmYoRklMRSAqLCBjb25z
dCBjaGFyICosIC4uLik7CiAKZXh0ZXJuIGludAlwcmludGYoY29uc3QgY2hhciAqLCAuLi4pOwog
CmV4dGVybiBpbnQJc2NhbmYoY29uc3QgY2hhciAqLCAuLi4pOwoKIApleHRlcm4gaW50CXNucHJp
bnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CgogCmV4dGVybiBpbnQJc3By
aW50ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIApleHRlcm4gaW50CXNzY2FuZihjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludAl2ZnByaW50ZihGSUxFICos
IGNvbnN0IGNoYXIgKiwgICBjaGFyICopOwpleHRlcm4gaW50CXZwcmludGYoY29uc3QgY2hhciAq
LCAgIGNoYXIgKik7CgpleHRlcm4gaW50CXZzbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3Qg
Y2hhciAqLCAgIGNoYXIgKik7CgpleHRlcm4gaW50CXZzcHJpbnRmKGNoYXIgKiwgY29uc3QgY2hh
ciAqLCAgIGNoYXIgKik7CiMgMjU2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKZXh0ZXJuIGlu
dAlmZ2V0YyhGSUxFICopOwpleHRlcm4gY2hhcgkqZmdldHMoY2hhciAqLCBpbnQsIEZJTEUgKik7
IApleHRlcm4gaW50CWZwdXRjKGludCwgRklMRSAqKTsKZXh0ZXJuIGludAlmcHV0cyhjb25zdCBj
aGFyICosIEZJTEUgKik7CmV4dGVybiBpbnQJZ2V0YyhGSUxFICopOwpleHRlcm4gaW50CWdldGNo
YXIodm9pZCk7CmV4dGVybiBjaGFyCSpnZXRzKGNoYXIgKik7CmV4dGVybiBpbnQJcHV0YyhpbnQs
IEZJTEUgKik7CmV4dGVybiBpbnQJcHV0Y2hhcihpbnQpOwpleHRlcm4gaW50CXB1dHMoY29uc3Qg
Y2hhciAqKTsKZXh0ZXJuIGludAl1bmdldGMoaW50LCBGSUxFICopOwpleHRlcm4gc2l6ZV90CWZy
ZWFkKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7CiNwcmFnbWEgaW50X3RvX3Vuc2ln
bmVkIGZyZWFkCmV4dGVybiBzaXplX3QJZndyaXRlKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXpl
X3QsIEZJTEUgKik7CiNwcmFnbWEgaW50X3RvX3Vuc2lnbmVkIGZ3cml0ZQpleHRlcm4gaW50CWZn
ZXRwb3MoRklMRSAqLCBmcG9zX3QgKik7CmV4dGVybiBpbnQJZnNlZWsoRklMRSAqLCBsb25nLCBp
bnQpOwpleHRlcm4gaW50CWZzZXRwb3MoRklMRSAqLCBjb25zdCBmcG9zX3QgKik7CmV4dGVybiBs
b25nCWZ0ZWxsKEZJTEUgKik7CmV4dGVybiB2b2lkCXJld2luZChGSUxFICopOwpleHRlcm4gdm9p
ZAljbGVhcmVycihGSUxFICopOwpleHRlcm4gaW50CWZlb2YoRklMRSAqKTsKZXh0ZXJuIGludAlm
ZXJyb3IoRklMRSAqKTsKZXh0ZXJuIHZvaWQJcGVycm9yKGNvbnN0IGNoYXIgKik7CgpleHRlcm4g
aW50CV9fZmlsYnVmKEZJTEUgKik7CQpleHRlcm4gaW50CV9fZmxzYnVmKGludCwgRklMRSAqKTsJ
CgoKCSAKZXh0ZXJuIEZJTEUgICAgKmZkb3BlbihpbnQsIGNvbnN0IGNoYXIgKik7CmV4dGVybiBp
bnQJZmlsZW5vKEZJTEUgKik7CgoKCgkgCmV4dGVybiB2b2lkCWZsb2NrZmlsZShGSUxFICopOwpl
eHRlcm4gaW50CWZ0cnlsb2NrZmlsZShGSUxFICopOwpleHRlcm4gdm9pZAlmdW5sb2NrZmlsZShG
SUxFICopOwpleHRlcm4gaW50CWdldGNfdW5sb2NrZWQoRklMRSAqKTsKZXh0ZXJuIGludAlwdXRj
X3VubG9ja2VkKGludCwgRklMRSAqKTsKZXh0ZXJuIGludAlnZXRjaGFyX3VubG9ja2VkKHZvaWQp
OwpleHRlcm4gaW50CXB1dGNoYXJfdW5sb2NrZWQoaW50KTsKCgoKZXh0ZXJuIEZJTEUJKnBvcGVu
KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludAlwY2xvc2UoRklMRSAqKTsK
CgoJIAoKZXh0ZXJuIGNoYXIJKmN0ZXJtaWQoY2hhciAqKTsKZXh0ZXJuIGNoYXIJKmN1c2VyaWQo
Y2hhciAqKTsKZXh0ZXJuIGNoYXIJKnRlbXBuYW0oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICop
OwpleHRlcm4gaW50CWdldHcoRklMRSAqKTsKZXh0ZXJuIGludAlwdXR3KGludCwgRklMRSAqKTsK
CgoKCgkgCmV4dGVybiBjaGFyCSpta3RlbXAoY2hhciAqKTsKZXh0ZXJuIGludAlta3N0ZW1wKGNo
YXIgKik7CmV4dGVybiBpbnQJc2V0YnVmZmVyKEZJTEUgKiwgY2hhciAqLCBpbnQpOwpleHRlcm4g
aW50CXNldGxpbmVidWYoRklMRSAqKTsKZXh0ZXJuIGludAlzeXN0ZW0oY29uc3QgY2hhciAqKTsK
CgoKCSAKZXh0ZXJuIG9mZl90CWZ0ZWxsbyhGSUxFICopOwpleHRlcm4gaW50CWZzZWVrbyhGSUxF
ICosIG9mZl90LCBpbnQpOwoKCgoJIApleHRlcm4gaW50CWZnZXRwb3M2NChGSUxFICosIGZwb3M2
NF90ICopOwpleHRlcm4gRklMRQkqZm9wZW42NChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7
CmV4dGVybiBGSUxFCSpmcmVvcGVuNjQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUg
Kik7CmV4dGVybiBpbnQJZnNlZWs2NChGSUxFICosIF9faW50NjRfdCwgaW50KTsKZXh0ZXJuIGlu
dAlmc2Vla282NChGSUxFICosIG9mZjY0X3QsIGludCk7CmV4dGVybiBpbnQJZnNldHBvczY0KEZJ
TEUgKiwgY29uc3QgZnBvczY0X3QgKik7CmV4dGVybiBfX2ludDY0X3QgZnRlbGw2NChGSUxFICop
OwpleHRlcm4gb2ZmNjRfdAlmdGVsbG82NChGSUxFICopOwpleHRlcm4gRklMRQkqdG1wZmlsZTY0
KHZvaWQpOwoKCgpleHRlcm4gaW50CV9fc2VtcHV0YyhpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQJ
X19zZW1nZXRjKEZJTEUgKik7CmV4dGVybiBpbnQJX191c19yc3RocmVhZF9zdGRpbzsKCgoKZXh0
ZXJuIGNoYXIJKmN0ZXJtaWRfcihjaGFyICopOwoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgogCgoK
CgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiMgNDQ3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg
MwoKCgoKCgoKfQoKCiMgNiAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2dj
Yy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9j
c3RkaW8iIDIgMwoKCiMgMjggImlucHV0LmgiIDIKCgojIDEgIi91c3IvcGVvcGxlL21pbGdyYW0v
bG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4u
Ly4uL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAxIDMKIAoKCgoKIyAxICIvdXNyL3Blb3BsZS9taWxn
cmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAxIDMKIAogCgogCiAKIAogCiAK
CiAKIAogCiAKCiAKIAogCgogCiAKIAogCiAKCiAKIAoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoK
IyAxICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNn
aS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdGRkZWYiIDEgMwog
CiAKCgoKIyAxICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9t
aXBzLXNnaS1pcml4Ni41LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNDIgIi91c3Iv
cGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUv
Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgNiAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2Nh
bC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9jc3RkZGVmIiAyIDMKCgojIDM1ICIvdXNyL3Blb3BsZS9taWxncmFtL2xv
Y2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCiMgMSAiL3Vzci9wZW9wbGUvbWls
Z3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvc3RyYWl0cy5oIiAxIDMKIAogCgogCiAKIAogCiAK
CiAKIAogCiAKCiAKIAogCgogCiAKIAogCiAKCiAKIAoKCgoKCiAKI3ByYWdtYSBpbnRlcmZhY2Ug
InN0ZC9zdHJhaXRzLmgiCgoKCgpleHRlcm4gIkMrKyIgewp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQ+
CnN0cnVjdCBzdHJpbmdfY2hhcl90cmFpdHMgewogIHR5cGVkZWYgY2hhclQgY2hhcl90eXBlOyAg
CgogICAKCiAgc3RhdGljIHZvaWQgYXNzaWduIChjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5
cGUmIGMyKQogICAgeyBjMSA9IGMyOyB9CiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0IGNoYXJfdHlw
ZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgPT0gYzIpOyB9CiAg
c3RhdGljIGJvb2wgbmUgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIp
CiAgICB7IHJldHVybiAhKGMxID09IGMyKTsgfQogIHN0YXRpYyBib29sIGx0IChjb25zdCBjaGFy
X3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxIDwgYzIpOyB9
CiAgc3RhdGljIGNoYXJfdHlwZSBlb3MgKCkgeyByZXR1cm4gY2hhcl90eXBlKCk7IH0gIAogIHN0
YXRpYyBib29sIGlzX2RlbChjaGFyX3R5cGUgYSkgeyByZXR1cm4gMDsgfQogICAKICAKICAgCgog
IHN0YXRpYyBpbnQgY29tcGFyZSAoY29uc3QgY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBl
KiBzMiwgc2l6ZV90IG4pCiAgICB7CiAgICAgIHNpemVfdCBpOwogICAgICBmb3IgKGkgPSAwOyBp
IDwgbjsgKytpKQoJaWYgKG5lIChzMVtpXSwgczJbaV0pKQoJICByZXR1cm4gbHQgKHMxW2ldLCBz
MltpXSkgPyAtMSA6IDE7CgogICAgICByZXR1cm4gMDsKICAgIH0KICAgIAogIHN0YXRpYyBzaXpl
X3QgbGVuZ3RoIChjb25zdCBjaGFyX3R5cGUqIHMpCiAgICB7CiAgICAgIHNpemVfdCBsID0gMDsK
ICAgICAgd2hpbGUgKG5lICgqcysrLCBlb3MgKCkpKQoJKytsOwogICAgICByZXR1cm4gbDsKICAg
IH0KCiAgc3RhdGljIGNoYXJfdHlwZSogY29weSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90
eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7CiAgICAgIGZvciAoOyBuLS07ICkKCWFzc2lnbiAoczFb
bl0sIHMyW25dKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQoKICBzdGF0aWMgY2hhcl90eXBlKiBt
b3ZlIChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsK
ICAgICAgY2hhcl90eXBlIGFbbl07CiAgICAgIHNpemVfdCBpOwogICAgICBmb3IgKGkgPSAwOyBp
IDwgbjsgKytpKQoJYXNzaWduIChhW2ldLCBzMltpXSk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBu
OyArK2kpCglhc3NpZ24gKHMxW2ldLCBhW2ldKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQoKICBz
dGF0aWMgY2hhcl90eXBlKiBzZXQgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSYgYywg
c2l6ZV90IG4pCiAgICB7CiAgICAgIGZvciAoOyBuLS07ICkKCWFzc2lnbiAoczFbbl0sIGMpOwog
ICAgICByZXR1cm4gczE7CiAgICB9Cn07CgpjbGFzcyBpc3RyZWFtOwpjbGFzcyBvc3RyZWFtOwoj
IDEgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dp
LWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY2N0eXBlIiAxIDMKIAog
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwoKCgpleHRlcm4gIkMiIHsKCiNpZGVu
dCAgIiRSZXZpc2lvbjogMS4yOSAkIgogCgoKCgoKCgoKCgoKCgoKCgogCiAKCiAKIAogCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgaXNhbG51bShpbnQpOwpl
eHRlcm4gaW50IGlzYWxwaGEoaW50KTsKZXh0ZXJuIGludCBpc2NudHJsKGludCk7CmV4dGVybiBp
bnQgaXNkaWdpdChpbnQpOwpleHRlcm4gaW50IGlzZ3JhcGgoaW50KTsKZXh0ZXJuIGludCBpc2xv
d2VyKGludCk7CmV4dGVybiBpbnQgaXNwcmludChpbnQpOwpleHRlcm4gaW50IGlzcHVuY3QoaW50
KTsKZXh0ZXJuIGludCBpc3NwYWNlKGludCk7CmV4dGVybiBpbnQgX19pc2JsYW5rKGludCk7CmV4
dGVybiBpbnQgaXN1cHBlcihpbnQpOwpleHRlcm4gaW50IGlzeGRpZ2l0KGludCk7CmV4dGVybiBp
bnQgdG9sb3dlcihpbnQpOwpleHRlcm4gaW50IHRvdXBwZXIoaW50KTsKCiAKZXh0ZXJuIGludCBp
c2FzY2lpKGludCk7ICAgICAgICAKZXh0ZXJuIGludCB0b2FzY2lpKGludCk7ICAgICAgICAKCmV4
dGVybiBpbnQgX3RvbG93ZXIoaW50KTsKZXh0ZXJuIGludCBfdG91cHBlcihpbnQpOwoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTQzICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwoKCgp9
CgoKIyA2ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBz
LXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NjdHlwZSIgMiAz
CgoKIyAxMDUgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21p
cHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFp
dHMuaCIgMiAzCgojIDEgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2Mt
bGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0
cmluZyIgMSAzCiAKIAoKCgoKCgojIDk0ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5
NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL2NzdHJpbmciIDMKCgoKIyAxMDYgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2Nj
Mjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAzCgoKc3RydWN0IHN0cmluZ19jaGFyX3RyYWl0cyA8
Y2hhcj4gewogIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CgogIHN0YXRpYyB2b2lkIGFzc2lnbiAo
Y2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgYzEgPSBjMjsgfQogIHN0
YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUgJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikK
ICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBzdGF0aWMgYm9vbCBuZSAoY29uc3QgY2hhcl90
eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSAhPSBjMik7IH0K
ICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBj
MikKICAgIHsgcmV0dXJuIChjMSA8IGMyKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUgZW9zICgpIHsg
cmV0dXJuIDA7IH0KICBzdGF0aWMgYm9vbCBpc19kZWwoY2hhcl90eXBlIGEpIHsgcmV0dXJuICgo
X19saWJjX2F0dHIuX2N0eXBlX3RibC0+X2NsYXNzKzEpWyBhIF0gJiAoMHgwMDAwMDAwOCAgfCAw
eDgwMDAwMDAwICkgKSA7IH0KCiAgc3RhdGljIGludCBjb21wYXJlIChjb25zdCBjaGFyX3R5cGUq
IHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsgcmV0dXJuIG1lbWNtcCAo
czEsIHMyLCBuKTsgfQogIHN0YXRpYyBzaXplX3QgbGVuZ3RoIChjb25zdCBjaGFyX3R5cGUqIHMp
CiAgICB7IHJldHVybiBzdHJsZW4gKHMpOyB9CiAgc3RhdGljIGNoYXJfdHlwZSogY29weSAoY2hh
cl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7IHJldHVybiAo
Y2hhcl90eXBlKikgbWVtY3B5IChzMSwgczIsIG4pOyB9CiAgc3RhdGljIGNoYXJfdHlwZSogbW92
ZSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7IHJl
dHVybiAoY2hhcl90eXBlKikgbWVtbW92ZSAoczEsIHMyLCBuKTsgfQogIHN0YXRpYyBjaGFyX3R5
cGUqIHNldCAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlJiBjLCBzaXplX3QgbikKICAg
IHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1zZXQgKHMxLCBjLCBuKTsgfQp9OwoKIyAxNTkgIi91
c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2
LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMwoKfSAg
CgojIDM2ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBz
LXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmlu
Zy5oIiAyIDMKCgogCiMgMSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2dj
Yy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9h
bGxvYy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL3Blb3BsZS9taWxncmFtL2xv
Y2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKIAogCiAKIAogCiAKIAog
CiAKIAogCgoKIAoKIAogCiAKIAogCiAKIAoKCgoKCgoKCiMgMTQ4ICIvdXNyL3Blb3BsZS9taWxn
cmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoK
CiMgMTc4ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBz
LXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcu
aCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjM0ICIvdXNyL3Blb3BsZS9t
aWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCiMgMjQ4ICIvdXNyL3Bl
b3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIu
OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiMg
MzE2ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNn
aS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIg
MwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiMgMTggIi91c3Iv
cGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUv
Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2MuaCIgMiAzCgoKCiMgMSAiL3Vz
ci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYu
NS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCgoKCgoKCgoKCgoKCiMg
MSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2kt
aXJpeDYuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQyICIvdXNyL3Blb3BsZS9t
aWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAzCgojIDUzICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5
NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKCgoKIyAxICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2Fs
L2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9t
aXBzLXNnaS1pcml4Ni41L2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwogCgoKCgoKCgoKIyAxOSAiL3Vz
ci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYu
NS8yLjk1LjMvLi4vLi4vLi4vLi4vbWlwcy1zZ2ktaXJpeDYuNS9pbmNsdWRlL2Fzc2VydC5oIiAz
CgoKCgogCgpleHRlcm4gIkMiIHsKZXh0ZXJuIHZvaWQgX19lcHJpbnRmIChjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKiwgdW5zaWduZWQsIGNvbnN0IGNoYXIgKikKICAgIF9fYXR0cmlidXRlX18g
KChub3JldHVybikpOwp9CgoKCgoKCgoKCgoKCiMgNTIgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9j
YWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4u
L21pcHMtc2dpLWlyaXg2LjUvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCgojIDU2ICIvdXNyL3Blb3Bs
ZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUu
My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKCgoKCgoKCgoKCgoj
IDc4ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNn
aS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAz
CgojIDg3ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBz
LXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5o
IiAzCgojIDk3ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9t
aXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxv
Yy5oIiAzCgojIDExNSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1s
aWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf
YWxsb2MuaCIgMwoKCiAKCgoKCgoKIAoKCgoKCiAKIAoKCgoKCgoKCgp0ZW1wbGF0ZSA8aW50IF9f
aW5zdD4KY2xhc3MgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGUgewoKcHJpdmF0ZToKCiAgc3RhdGlj
IHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsKICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxs
b2Modm9pZCosIHNpemVfdCk7CgoKICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21f
aGFuZGxlcikoKTsKCgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19u
KQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICBpZiAoMCA9PSBfX3Jl
c3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7CiAgICByZXR1cm4gX19yZXN1bHQ7
CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICApCiAgewog
ICAgZnJlZShfX3ApOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBz
aXplX3QgICwgc2l6ZV90IF9fbmV3X3N6KQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxv
YyhfX3AsIF9fbmV3X3N6KTsKICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29v
bV9yZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgc3Rh
dGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKl9fZikoKSkpKCkKICB7CiAg
ICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICBfX21h
bGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAgIHJldHVybihfX29sZCk7CiAgfQoKfTsK
CiAKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7CgoKdGVtcGxhdGUg
PGludCBfX2luc3Q+CnZvaWQqCl9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29v
bV9tYWxsb2Moc2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgp
OwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9j
X2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBf
X215X21hbGxvY19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4
aXQoMSkgOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVz
dWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQp
OwogICAgfQp9Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVt
cGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQp7CiAg
ICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAg
ICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9j
X29vbV9oYW5kbGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgY2Vy
ciA8PCAib3V0IG9mIG1lbW9yeSIgPDwgZW5kbDsgZXhpdCgxKSA7IH0KICAgICAgICAoKl9fbXlf
bWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsK
ICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7CiAgICB9Cn0KCnR5cGVkZWYg
X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9jX2FsbG9jOwoKdGVtcGxhdGU8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIHNpbXBsZV9hbGxvYyB7CgpwdWJsaWM6CiAgICBzdGF0
aWMgX1RwKiBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7IHJldHVybiAwID09IF9fbiA/IDAg
OiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0
aWMgX1RwKiBhbGxvY2F0ZSh2b2lkKQogICAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxv
Y2F0ZShzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19w
LCBzaXplX3QgX19uKQogICAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9f
cCwgX19uICogc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAq
IF9fcCkKICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9Cn07
CgogCiAKIAogCiAKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgZGVidWdfYWxsb2MgewoK
cHJpdmF0ZToKCiAgZW51bSB7X1NfZXh0cmEgPSA4fTsgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgCgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBh
bGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxv
Yzo6YWxsb2NhdGUoX19uICsgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19u
OwogICAgcmV0dXJuIF9fcmVzdWx0ICsgX1NfZXh0cmE7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFs
bG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChj
aGFyKilfX3AgLSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QqKV9fcmVhbF9wID09
IF9fbiApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4i
LAkgICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNn
aS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAs
ICAgMjYzICwgICIqKHNpemVfdCopX19yZWFsX3AgPT0gX19uIiApLCAwKSApKSA7CiAgICBfQWxs
b2M6OmRlYWxsb2NhdGUoX19yZWFsX3AsIF9fbiArIF9TX2V4dHJhKTsKICB9CgogIHN0YXRpYyB2
b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdf
c3opCiAgewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0cmE7CiAgICAo
KHZvaWQpICgoICooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiApID8gMCA6IChfX2Vwcmlu
dGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvdXNyL3Blb3BsZS9taWxn
cmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAsICAgMjcwICwgICIqKHNpemVfdCop
X19yZWFsX3AgPT0gX19vbGRfc3oiICksIDApICkpIDsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNo
YXIqKQogICAgICBfQWxsb2M6OnJlYWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6ICsgX1NfZXh0
cmEsIF9fbmV3X3N6ICsgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uZXdf
c3o7CiAgICByZXR1cm4gX19yZXN1bHQgKyBfU19leHRyYTsKICB9Cgp9OwoKCgoKCgoKCgoKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKdGVtcGxh
dGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZSB7Cgpwcml2YXRlOgogICAKICAgCgogICAgZW51bSB7X0FMSUdOID0gOH07CiAgICBlbnVtIHtf
TUFYX0JZVEVTID0gMTI4fTsKICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRFUy9fQUxJ
R059OwoKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAoc2l6ZV90IF9fYnl0ZXMpCiAgICB7
IHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKSAmIH4oX0FMSUdOIC0gMSkpOyB9Cgpwcml2
YXRlIDoKICB1bmlvbiBfT2JqIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGlu
azsKICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOyAgICAgCiAgfTsKcHJpdmF0ZToKCgoK
CiAgICBzdGF0aWMgX09iaiogICBfU19mcmVlX2xpc3RbX05GUkVFTElTVFNdOwoKICBzdGF0aWMg
IHNpemVfdCBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRlcykgewogICAgICAgIHJldHVy
biAoKChfX2J5dGVzKSArIF9BTElHTi0xKS9fQUxJR04gLSAxKTsKICB9CgogICAKICBzdGF0aWMg
dm9pZCogX1NfcmVmaWxsKHNpemVfdCBfX24pOwogICAKICAgCiAgc3RhdGljIGNoYXIqIF9TX2No
dW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgogICAKICBzdGF0aWMgY2hh
ciogX1Nfc3RhcnRfZnJlZTsKICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7CiAgc3RhdGljIHNp
emVfdCBfU19oZWFwX3NpemU7CgoKCgoKCgoKCgoKCgoKCiMgMzg5ICIvdXNyL3Blb3BsZS9taWxn
cmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKICAgIGNsYXNzIF9Mb2NrIHsK
ICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIF9Mb2NrKCkgeyAgOyB9CiAgICAgICAgICAgIH5f
TG9jaygpIHsgIDsgfQogICAgfTsKICAgIGZyaWVuZCBjbGFzcyBfTG9jazsKCnB1YmxpYzoKCiAg
IAogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIF9PYmoqICAqIF9f
bXlfZnJlZV9saXN0OwogICAgX09iaiogICBfX3Jlc3VsdDsKCiAgICBpZiAoX19uID4gKHNpemVf
dCkgX01BWF9CWVRFUykgewogICAgICAgIHJldHVybihtYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9f
bikpOwogICAgfQogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlz
dF9pbmRleChfX24pOwogICAgIAogICAgIAogICAgIAoKCgoKICAgIF9fcmVzdWx0ID0gKl9fbXlf
ZnJlZV9saXN0OwogICAgaWYgKF9fcmVzdWx0ID09IDApIHsKICAgICAgICB2b2lkKiBfX3IgPSBf
U19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgIH0KICAg
ICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgcmV0
dXJuIChfX3Jlc3VsdCk7CiAgfTsKCiAgIAogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCog
X19wLCBzaXplX3QgX19uKQogIHsKICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CiAgICBfT2Jq
KiAgKiBfX215X2ZyZWVfbGlzdDsKCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykg
ewogICAgICAgIG1hbGxvY19hbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7CiAgICAgICAgcmV0
dXJuOwogICAgfQogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlz
dF9pbmRleChfX24pOwogICAgIAoKCgoKICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpf
X215X2ZyZWVfbGlzdDsKICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKICAgICAKICB9CgogIHN0
YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3Qg
X19uZXdfc3opOwoKfSA7Cgp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTwgZmFsc2Ug
LCAwPiBhbGxvYzsKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+IHNp
bmdsZV9jbGllbnRfYWxsb2M7CgoKCiAKIAogCiAKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBp
bnQgX19pbnN0PgpjaGFyKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu
c3Q+OjpfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpCnsKICAg
IGNoYXIqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25v
YmpzOwogICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRfZnJl
ZTsKCiAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsKICAgICAgICBfX3Jl
c3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5
dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgaWYgKF9fYnl0ZXNfbGVm
dCA+PSBfX3NpemUpIHsKICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6
ZSk7CiAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgICAgX19y
ZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9i
eXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIHsKICAgICAgICBzaXpl
X3QgX19ieXRlc190b19nZXQgPQoJICAyICogX190b3RhbF9ieXRlcyArIF9TX3JvdW5kX3VwKF9T
X2hlYXBfc2l6ZSA+PiA0KTsKICAgICAgICAgCiAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDAp
IHsKICAgICAgICAgICAgX09iaiogICogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAg
ICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoK
ICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9
ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9T
X3N0YXJ0X2ZyZWU7CiAgICAgICAgfQogICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFs
bG9jKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9mcmVlKSB7CiAg
ICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAgICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0
OwoJICAgIF9PYmoqIF9fcDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAKICAgICAgICAgICAgZm9yIChfX2kgPSBfX3NpemU7IF9faSA8PSBfTUFYX0JZVEVTOyBfX2kg
Kz0gX0FMSUdOKSB7CiAgICAgICAgICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlz
dCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAgICAgICBfX3AgPSAqX19teV9m
cmVlX2xpc3Q7CiAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApIHsKICAgICAgICAgICAgICAg
ICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAg
ICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAgICAgICAg
ICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAgICAgICAg
IHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICB9CgkgICAgX1NfZW5kX2ZyZWUgPSAwOwkgCiAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAo
Y2hhciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIF9TX2hlYXBf
c2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2Zy
ZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXpl
LCBfX25vYmpzKSk7CiAgICB9Cn0KCgogCiAKIAp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGlu
dCBfX2luc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z
dD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQp7CiAgICBpbnQgX19ub2JqcyA9IDIwOwogICAgY2hh
ciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CiAgICBfT2JqKiAgKiBf
X215X2ZyZWVfbGlzdDsKICAgIF9PYmoqIF9fcmVzdWx0OwogICAgX09iaiogX19jdXJyZW50X29i
ajsKICAgIF9PYmoqIF9fbmV4dF9vYmo7CiAgICBpbnQgX19pOwoKICAgIGlmICgxID09IF9fbm9i
anMpIHJldHVybihfX2NodW5rKTsKICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsg
X1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCiAgICAgCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9f
Y2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1
bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspIHsKICAgICAgICBfX2N1cnJl
bnRfb2JqID0gX19uZXh0X29iajsKICAgICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgoY2hhciop
X19uZXh0X29iaiArIF9fbik7CiAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgewogICAg
ICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBf
TV9mcmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICB9CiAgICByZXR1
cm4oX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4Kdm9pZCoK
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQq
IF9fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX29sZF9zeiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBfX25ld19zeikKewogICAgdm9pZCogX19yZXN1bHQ7CiAgICBz
aXplX3QgX19jb3B5X3N6OwoKICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMg
JiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxs
b2MoX19wLCBfX25ld19zeikpOwogICAgfQogICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9
PSBfU19yb3VuZF91cChfX25ld19zeikpIHJldHVybihfX3ApOwogICAgX19yZXN1bHQgPSBhbGxv
Y2F0ZShfX25ld19zeik7CiAgICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29s
ZF9zeiA6IF9fbmV3X3N6OwogICAgbWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9zeik7CiAg
ICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgcmV0dXJuKF9fcmVzdWx0KTsKfQoKCgoK
CgoKCgoKCgoKCgojIDYwMiAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2dj
Yy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z
dGxfYWxsb2MuaCIgMwoKCiMgNjg5ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9s
aWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0bF9hbGxvYy5oIiAzCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0
PgpjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19z
dGFydF9mcmVlID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hh
ciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZW5kX2Zy
ZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzaXplX3QgX19k
ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0g
MDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X09iaiogIApfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+IDo6X1NfZnJlZV9saXN0WwogICAgX05GUkVFTElTVFMK
XSA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCB9Owog
CiAKIAoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFz
cyBhbGxvY2F0b3IgewogIHR5cGVkZWYgYWxsb2MgX0FsbG9jOyAgICAgICAgICAgCnB1YmxpYzoK
ICB0eXBlZGVmIHNpemVfdCAgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICBkaWZm
ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25z
dCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsKICB0
eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwICAgICAgICB2
YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0
eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0b3IoKSAgIHt9CiAg
YWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpICAge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4g
YWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpICAge30KICB+YWxsb2NhdG9yKCkgICB7
fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsg
fQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJl
dHVybiAmX194OyB9CgogICAKICAgCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25z
dCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRpY19jYXN0PF9UcCo+KF9B
bGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgICAgICAgICAgICAgIDog
MDsKICB9CgogICAKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24p
CiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICBz
aXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCAgCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6
ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192
YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkg
eyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gewog
IHR5cGVkZWYgc2l6ZV90ICAgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgZGlm
ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNv
bnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICB2YWx1ZV90eXBl
OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFs
bG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz
IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0
IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4m
LCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCiAKIAogCiAKIAog
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfX2FsbG9jYXRvciB7
CiAgX0FsbG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAgdHlwZWRlZiBzaXplX3QgICAgc2l6ZV90
eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCog
ICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBl
ZGVmIF9UcCYgICAgICAgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZl
cmVuY2U7CiAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFz
cyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0Fs
bG9jPiBvdGhlcjsKICB9OwoKICBfX2FsbG9jYXRvcigpICAge30KICBfX2FsbG9jYXRvcihjb25z
dCBfX2FsbG9jYXRvciYgX19hKSAgCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRl
cmx5aW5nX2FsbG9jKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNv
bnN0IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkgIAogICAgOiBfX3VuZGVybHlpbmdf
YWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB+X19hbGxvY2F0b3IoKSAgIHt9Cgog
IHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAg
Y29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJu
ICZfX3g7IH0KCiAgIAogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCog
PSAwKSB7CiAgICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0PF9UcCo+KF9f
dW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgOiAw
OwogIH0KCiAgIAogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikK
ICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1Rw
KSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgIAogICAgeyByZXR1cm4gc2l6ZV90
KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25z
dCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3kocG9p
bnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNs
YXNzIF9fYWxsb2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6ZV90ICAgICAgc2l6
ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg
dm9pZCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7
CiAgdHlwZWRlZiB2b2lkICAgICAgICB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
MT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4g
b3RoZXI7CiAgfTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2Ey
KQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5n
X2FsbG9jOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsK
ICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxs
b2M7Cn0KCgogCiAKIAoKdGVtcGxhdGUgPGludCBpbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1
ZTsKfQoKCnRlbXBsYXRlIDxpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNl
Owp9CgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu
c3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLCBfX2luc3Q+JikKewogIHJldHVybiB0cnVlOwp9CgoKdGVtcGxhdGUgPGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z
dD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gdHJ1ZTsK
fQoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
ZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdf
YWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KCgogCiAKIAogCiAKIAoKIAogCiAK
IAogCiAKCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBjb25zdCBib29s
IF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6
ICAgcmViaW5kPF9UcD46Om90aGVyCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0
czxfVHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgogCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfVHAxPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9jYXRvcjxfVHAx
PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVk
ZWYgc2ltcGxlX2FsbG9jPF9UcCwgYWxsb2M+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgYWxsb2Nh
dG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQg
X19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl
PF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsK
ICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z
dD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf
VHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgp7CiAgc3Rh
dGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9h
bGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgog
ICAgICAgICAgX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9y
X3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0Fs
bG9jX3RyYWl0czxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJv
b2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRl
YnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9U
cCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKIAogCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0
czxfVHAsCiAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2Fs
bG9jX3RlbXBsYXRlPF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5j
ZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw
LCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4K
c3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0
b3I8X1RwMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2lu
c3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0
eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9f
aW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9f
YWxsb2NhdG9yPF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CnsKICBzdGF0aWMgY29uc3Qg
Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwg
ZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8
X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgoKCgoKIAoK
CgoKCiAKIAogCiMgMjEgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2Mt
bGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxs
b2MuaCIgMiAzCgoKCiMgNDAgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9n
Y2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
YWxsb2MuaCIgMwoKCgoKIAogCiAKIyAzOSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2My
OTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMiAzCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVh
bTsgY2xhc3Mgb3N0cmVhbTsKCiMgMSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUv
bGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9pdGVyYXRvciIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91
c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2
LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3JlbG9wcy5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewog
IHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9v
bCBvcGVyYXRvcj4oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuIF9f
eSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShj
b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IF9UcCYg
X194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCiAKCgoKIAog
CiAKIyAzMSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlw
cy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIg
MiAzCgojIDEgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21p
cHMtc2dpLWlyaXg2LjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0MiAiL3Vzci9w
ZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8y
Ljk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKIyAzMiAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2Nh
bC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9pdGVyYXRvciIgMiAzCgoKCgoKCiMgMSAiL3Vzci9wZW9wbGUvbWlsZ3Jh
bS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKIAoKc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0
IG91dHB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1
YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZyA6IHB1YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IHJhbmRvbV9hY2Nl
c3NfaXRlcmF0b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwoK
IAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgaW5w
dXRfaXRlcmF0b3IgewogIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn
b3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBf
RGlzdGFuY2UgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAg
ICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9
OwoKc3RydWN0IG91dHB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFn
IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90
eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICAg
ICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5j
ZT4gc3RydWN0IGZvcndhcmRfaXRlcmF0b3IgewogIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90
YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICB2YWx1
ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAg
ICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
RGlzdGFuY2U+IHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAg
ICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAg
ICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgICAgICAgICBy
ZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVj
dCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50
ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07Cgoj
IDk4ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNn
aS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5o
IiAzCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRz
IHsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0
b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgICAg
ICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2Vf
dHlwZSAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9p
bnRlciAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVm
ZXJlbmNlICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0
IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgICBwb2lu
dGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4g
ewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7
CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl
ZiBjb25zdCBfVHAqICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9U
cCYgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CgogCiAKIAogCgogCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVy
YXRvcl9jYXRlZ29yeQpfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikKewogIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0Nh
dGVnb3J5OwogIHJldHVybiBfQ2F0ZWdvcnkoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgpp
bmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpf
X2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSo+KDApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+
Ojp2YWx1ZV90eXBlKgpfX3ZhbHVlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRp
Y19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqPigwKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKaXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXIm
IF9faSkgeyByZXR1cm4gX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpOyB9CgoKdGVtcGxhdGUgPGNs
YXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlKgpkaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fZGlz
dGFuY2VfdHlwZShfX2kpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgp2YWx1ZV90eXBlKGNvbnN0IF9J
dGVyJiBfX2kpIHsgcmV0dXJuIF9fdmFsdWVfdHlwZShfX2kpOyB9CgoKCgoKIyAyNTkgIi91c3Iv
cGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUv
Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQg
X19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3Rh
ZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4K
aW5saW5lIHZvaWQgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgCiAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgCiAgICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf
dGFnKQp7CiAgX19uICs9IF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBkaXN0YW5jZShfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19s
YXN0LCBfRGlzdGFuY2UmIF9fbikKewogIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24s
IGl0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+
OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIHdo
aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytfX2ZpcnN0OyArK19fbjsKICB9CiAgcmV0
dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5l
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJl
bmNlX3R5cGUKX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZykgewogIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0
b3I+OjpkaWZmZXJlbmNlX3R5cGUKZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSAKICAgIF9DYXRlZ29yeTsKICByZXR1
cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFu
Y2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpIHsK
ICB3aGlsZSAoX19uLS0pICsrX19pOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRp
cmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwgCiAgICAgICAgICAgICAgICAg
ICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIGlmIChfX24gPj0gMCkKICAgIHdo
aWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUgKF9fbisrKSAtLV9faTsKfQoKCgoK
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4K
aW5saW5lIHZvaWQgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFu
Y2UgX19uLCAKICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn
KSB7CiAgX19pICs9IF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFz
cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rp
c3RhbmNlIF9fbikgewogIF9fYWR2YW5jZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19p
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBiYWNrX2luc2VydF9pdGVy
YXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBl
ZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRf
aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAg
ICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNl
X3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2
b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgYmFja19pbnNlcnRfaXRl
cmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGJhY2tfaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFp
bmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7IAogICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192
YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250
YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2lu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlz
OyB9Cn07CgojIDM3OCAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1s
aWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf
aXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgYmFja19p
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gp
IHsKICByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvciB7CnBy
b3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250
YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3Jf
dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1
ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAg
ICAgICAgICAgIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9D
b250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBmcm9udF9pbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZh
bHVlX3R5cGUmIF9fdmFsdWUpIHsgCiAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7
CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8
X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9
Cn07CgojIDQxNyAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIv
bWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRl
cmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgZnJvbnRfaW5z
ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkg
ewogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGluc2VydF9pdGVyYXRvciB7CnByb3RlY3Rl
ZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0
b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJf
dHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
dHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAg
ICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAg
ICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBp
bnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVy
YXRvciBfX2kpIAogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9p
dGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5l
cjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChp
dGVyLCBfX3ZhbHVlKTsKICAgICsraXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGlu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9
CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4g
KnRoaXM7IH0KfTsKCiMgNDU5ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIv
Z2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9J
dGVyYXRvcj4KaW5saW5lIAppbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gaW5zZXJ0ZXIoX0Nv
bnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFp
bmVyOjppdGVyYXRvciBfX2l0ZXI7CiAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PihfX3gsIF9faXRlcihfX2kpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0
ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmLCAKICAgICAgICAgIGNs
YXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdD4gCgoKCgpjbGFzcyByZXZlcnNlX2JpZGlyZWN0aW9u
YWxfaXRlcmF0b3IgewogIHR5cGVkZWYgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9C
aWRpcmVjdGlvbmFsSXRlcmF0b3IsIF9UcCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1JlZmVyZW5jZSwgX0Rpc3RhbmNlPiAgX1NlbGY7CnByb3RlY3RlZDoKICBf
QmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIGJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAg
ICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAg
ICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNlICAgICAgICAgICAgICAgICByZWZl
cmVuY2U7CgogIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQg
cmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX194
KQogICAgOiBjdXJyZW50KF9feCkge30KICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGJhc2UoKSBj
b25zdCB7IHJldHVybiBjdXJyZW50OyB9CiAgX1JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7
CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAq
LS1fX3RtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3Bl
cmF0b3IqKCkpOyB9CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAg
cmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190
bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYm
IG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9T
ZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJy
ZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCiMgNTUwICIvdXNyL3Blb3BsZS9taWxncmFt
L2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9C
aUl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4K
aW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9p
dGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwgCiAgICBjb25zdCBy
ZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFu
Y2U+JiBfX3kpCnsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9CgoKCiAKIAog
CiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KY2xhc3MgcmV2ZXJzZV9pdGVyYXRvciAK
ewpwcm90ZWN0ZWQ6CiAgX0l0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAg
ICAgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAg
ICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcmF0b3I+Ojpwb2ludGVyCiAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZQogICAgICAgICAgcmVmZXJlbmNl
OwoKICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogIHR5cGVkZWYgcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxmOwoKcHVibGljOgogIHJldmVyc2VfaXRlcmF0b3IoKSB7
fQogIGV4cGxpY2l0IHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3VycmVu
dChfX3gpIHt9CgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgX1NlbGYmIF9feCkgOiBjdXJyZW50
KF9feC5jdXJyZW50KSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CiAgcmV2ZXJzZV9pdGVy
YXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgOiBjdXJyZW50KF9f
eC5iYXNlKCkpIHt9CgogICAgCiAgaXRlcmF0b3JfdHlwZSBiYXNlKCkgY29uc3QgeyByZXR1cm4g
Y3VycmVudDsgfQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICBfSXRlcmF0b3Ig
X190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KCiAgcG9pbnRlciBvcGVy
YXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCgogIF9TZWxmJiBvcGVy
YXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBv
cGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsK
ICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJl
bnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBf
U2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0K
CiAgX1NlbGYgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVy
biBfU2VsZihjdXJyZW50IC0gX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yKz0oZGlmZmVyZW5j
ZV90eXBlIF9fbikgewogICAgY3VycmVudCAtPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQog
IF9TZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4g
X1NlbGYoY3VycmVudCArIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvci09KGRpZmZlcmVuY2Vf
dHlwZSBfX24pIHsKICAgIGN1cnJlbnQgKz0gX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBy
ZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAq
KCp0aGlzICsgX19uKTsgfSAgCn07IAogCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs
IAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PiYgX195KSB7CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRl
cmF0b3I8X0l0ZXJhdG9yPiYgX194LCAKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgPCBfX3gu
YmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKb3BlcmF0b3ItKGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LCAKICAgICAgICAgIGNvbnN0IHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgLSBfX3gu
YmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgcmV2ZXJzZV9pdGVy
YXRvcjxfSXRlcmF0b3I+IApvcGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVy
YXRvcjxfSXRlcmF0b3I+JiBfX3gpIHsKICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0
b3I+KF9feC5iYXNlKCkgLSBfX24pOwp9CgojIDgwNSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2Nh
bC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0Rpc3QgPSBwdHJkaWZmX3Q+IApjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09IDw+ICAoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9p
dGVyYXRvciYpOwpwcm90ZWN0ZWQ6CiAgaXN0cmVhbSogX01fc3RyZWFtOwogIF9UcCBfTV92YWx1
ZTsKICBib29sIF9NX2VuZF9tYXJrZXI7CiAgdm9pZCBfTV9yZWFkKCkgewogICAgX01fZW5kX21h
cmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICAgIGlmIChfTV9lbmRfbWFya2Vy
KSAqX01fc3RyZWFtID4+IF9NX3ZhbHVlOwogICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFt
KSA/IHRydWUgOiBmYWxzZTsKICB9CnB1YmxpYzoKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3Rh
ZyAgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiBfRGlzdCAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0
eXBlZGVmIGNvbnN0IF9UcCogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYg
ICAgICAgICAgcmVmZXJlbmNlOwoKICBpc3RyZWFtX2l0ZXJhdG9yKCkgOiBfTV9zdHJlYW0oJmNp
biksIF9NX2VuZF9tYXJrZXIoZmFsc2UpIHt9CiAgaXN0cmVhbV9pdGVyYXRvcihpc3RyZWFtJiBf
X3MpIDogX01fc3RyZWFtKCZfX3MpIHsgX01fcmVhZCgpOyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbHVlOyB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNv
bnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBf
RGlzdD4mIG9wZXJhdG9yKysoKSB7IAogICAgX01fcmVhZCgpOyAKICAgIHJldHVybiAqdGhpczsK
ICB9CiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiBvcGVyYXRvcisrKGludCkgIHsKICAg
IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4gX190bXAgPSAqdGhpczsKICAgIF9NX3JlYWQo
KTsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07CgojIDg2NCAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9s
b2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtX2l0
ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JiBfX3kpIHsKICByZXR1cm4gKF9feC5f
TV9zdHJlYW0gPT0gX195Ll9NX3N0cmVhbSAmJgogICAgICAgICAgX194Ll9NX2VuZF9tYXJrZXIg
PT0gX195Ll9NX2VuZF9tYXJrZXIpIHx8CiAgICAgICAgIF9feC5fTV9lbmRfbWFya2VyID09IGZh
bHNlICYmIF9feS5fTV9lbmRfbWFya2VyID09IGZhbHNlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpjbGFzcyBvc3RyZWFtX2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIG9zdHJlYW0qIF9NX3N0cmVh
bTsKICBjb25zdCBjaGFyKiBfTV9zdHJpbmc7CnB1YmxpYzoKICB0eXBlZGVmIG91dHB1dF9pdGVy
YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAg
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlw
ZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQg
ICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW0mIF9f
cykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQogIG9zdHJlYW1faXRlcmF0b3Io
b3N0cmVhbSYgX19zLCBjb25zdCBjaGFyKiBfX2MpIAogICAgOiBfTV9zdHJlYW0oJl9fcyksIF9N
X3N0cmluZyhfX2MpICB7fQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3I9KGNvbnN0
IF9UcCYgX192YWx1ZSkgeyAKICAgICpfTV9zdHJlYW0gPDwgX192YWx1ZTsKICAgIGlmIChfTV9z
dHJpbmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5nOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBv
c3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgb3N0
cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0gCiAgb3N0
cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0gCn07
CgojIDkwNyAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlw
cy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0
b3IuaCIgMwoKCiAKCgoKIAogCiAKIyAzOCAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2My
OTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9pdGVyYXRvciIgMiAzCgoKCgogCiAKIAojIDQ0ICIvdXNyL3Blb3BsZS9taWxncmFt
L2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgojIDU2ICIvdXNyL3Blb3Bs
ZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUu
My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAzCgoKIyAxICIvdXNy
L3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41
LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2Nhc3NlcnQiIDEgMwogCiAKCgoKIyAx
ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1p
cml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9taXBzLXNnaS1pcml4Ni41L2luY2x1ZGUvYXNzZXJ0
LmgiIDEgMwogCgoKCgoKCgoKIyAxOSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUv
bGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vbWlwcy1zZ2kt
aXJpeDYuNS9pbmNsdWRlL2Fzc2VydC5oIiAzCgoKCgogCgpleHRlcm4gIkMiIHsKZXh0ZXJuIHZv
aWQgX19lcHJpbnRmIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQsIGNvbnN0
IGNoYXIgKikKICAgIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwp9CgoKCgoKCgoKCgoKCiMg
NTIgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dp
LWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL21pcHMtc2dpLWlyaXg2LjUvaW5jbHVkZS9hc3Nl
cnQuaCIgMwoKCgojIDYgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2Mt
bGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY2Fz
c2VydCIgMiAzCgoKIyA1OCAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2dj
Yy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z
dGQvYmFzdHJpbmcuaCIgMiAzCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh
aXRzID0gc3RyaW5nX2NoYXJfdHJhaXRzPGNoYXJUPiwKCSAgY2xhc3MgQWxsb2NhdG9yID0gYWxs
b2MgPgpjbGFzcyBiYXNpY19zdHJpbmcKewpwcml2YXRlOgogIHN0cnVjdCBSZXAgewogICAgc2l6
ZV90IGxlbiwgcmVzLCByZWY7CiAgICBib29sIHNlbGZpc2g7CgogICAgY2hhclQqIGRhdGEgKCkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyVCAqPih0aGlzICsgMSk7IH0KICAgIGNoYXJU
JiBvcGVyYXRvcltdIChzaXplX3QgcykgeyByZXR1cm4gZGF0YSAoKSBbc107IH0KICAgIGNoYXJU
KiBncmFiICgpIHsgaWYgKHNlbGZpc2gpIHJldHVybiBjbG9uZSAoKTsgKytyZWY7IHJldHVybiBk
YXRhICgpOyB9CiMgMTA4ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2Nj
LWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0
ZC9iYXN0cmluZy5oIiAzCgogICAgdm9pZCByZWxlYXNlICgpIHsgaWYgKC0tcmVmID09IDApIGRl
bGV0ZSB0aGlzOyB9CgoKICAgIGlubGluZSBzdGF0aWMgdm9pZCAqIG9wZXJhdG9yIG5ldyAoc2l6
ZV90LCBzaXplX3QpOwogICAgaW5saW5lIHN0YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9p
ZCAqKTsKICAgIGlubGluZSBzdGF0aWMgUmVwKiBjcmVhdGUgKHNpemVfdCk7CiAgICBjaGFyVCog
Y2xvbmUgKCk7CgogICAgaW5saW5lIHZvaWQgY29weSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBz
aXplX3QpOwogICAgaW5saW5lIHZvaWQgbW92ZSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXpl
X3QpOwogICAgaW5saW5lIHZvaWQgc2V0ICAoc2l6ZV90LCBjb25zdCBjaGFyVCwgICBzaXplX3Qp
OwoKICAgIGlubGluZSBzdGF0aWMgYm9vbCBleGNlc3Nfc2xvcCAoc2l6ZV90LCBzaXplX3QpOwog
ICAgaW5saW5lIHN0YXRpYyBzaXplX3QgZnJvYl9zaXplIChzaXplX3QpOwoKICBwcml2YXRlOgog
ICAgUmVwICZvcGVyYXRvcj0gKGNvbnN0IFJlcCAmKTsKICB9OwoKcHVibGljOgogCiAgdHlwZWRl
ZgkgICB0cmFpdHMJCXRyYWl0c190eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzOjpjaGFy
X3R5cGUJdmFsdWVfdHlwZTsKICB0eXBlZGVmCSAgIEFsbG9jYXRvcgkJYWxsb2NhdG9yX3R5cGU7
CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgY2hh
clQmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJUKiBwb2ludGVyOwogIHR5cGVkZWYg
Y29uc3QgY2hhclQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBwb2ludGVyIGl0ZXJhdG9yOwog
IHR5cGVkZWYgY29uc3RfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJz
ZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJz
ZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICBzdGF0
aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCnBy
aXZhdGU6CiAgUmVwICpyZXAgKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXAg
Kj4oZGF0KSAtIDE7IH0KICB2b2lkIHJlcHVwIChSZXAgKnApIHsgcmVwICgpLT5yZWxlYXNlICgp
OyBkYXQgPSBwLT5kYXRhICgpOyB9CgpwdWJsaWM6CiAgY29uc3QgY2hhclQqIGRhdGEgKCkgY29u
c3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+ZGF0YSgpOyB9CiAgc2l6ZV90eXBlIGxlbmd0aCAoKSBj
b25zdAogICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgc2l6ZSAoKSBjb25z
dAogICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgY2FwYWNpdHkgKCkgY29u
c3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+cmVzOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplICgpIGNv
bnN0CiAgICB7IHJldHVybiAobnBvcyAtIDEpL3NpemVvZiAoY2hhclQpOyB9CQkgCiAgYm9vbCBl
bXB0eSAoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZSAoKSA9PSAwOyB9CgogCiAgYmFzaWNfc3Ry
aW5nJiBvcGVyYXRvcj0gKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyKQogICAgewogICAgICBpZiAo
JnN0ciAhPSB0aGlzKSB7IHJlcCAoKS0+cmVsZWFzZSAoKTsgZGF0ID0gc3RyLnJlcCAoKS0+Z3Jh
YiAoKTsgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIGV4cGxpY2l0IGJhc2ljX3N0cmlu
ZyAoKTogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBiYXNp
Y19zdHJpbmcmIHN0cik6IGRhdCAoc3RyLnJlcCAoKS0+Z3JhYiAoKSkgeyB9CiAgYmFzaWNfc3Ry
aW5nIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4g
PSBucG9zKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoc3RyLCBwb3MsIG4p
OyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICA6IGRh
dCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChzLCBuKTsgfQogIGJhc2ljX3N0cmluZyAoY29u
c3QgY2hhclQqIHMpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChzKTsgfQog
IGJhc2ljX3N0cmluZyAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICA6IGRhdCAobmlsUmVwLmdy
YWIgKCkpIHsgYXNzaWduIChuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9y
PgogICAgYmFzaWNfc3RyaW5nKElucHV0SXRlcmF0b3IgX19iZWdpbiwgSW5wdXRJdGVyYXRvciBf
X2VuZCkKCgoKICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKF9fYmVnaW4sIF9f
ZW5kKTsgfQoKICB+YmFzaWNfc3RyaW5nICgpCiAgICB7IHJlcCAoKS0+cmVsZWFzZSAoKTsgfQoK
ICB2b2lkIHN3YXAgKGJhc2ljX3N0cmluZyAmcykgeyBjaGFyVCAqZCA9IGRhdDsgZGF0ID0gcy5k
YXQ7IHMuZGF0ID0gZDsgfQoKICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoY29uc3QgYmFzaWNfc3Ry
aW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwLAoJCQlzaXplX3R5cGUgbiA9IG5wb3MpCiAgICB7
IHJldHVybiByZXBsYWNlIChsZW5ndGggKCksIDAsIHN0ciwgcG9zLCBuKTsgfQogIGJhc2ljX3N0
cmluZyYgYXBwZW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiBy
ZXBsYWNlIChsZW5ndGggKCksIDAsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKGNv
bnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gYXBwZW5kIChzLCB0cmFpdHM6Omxlbmd0aCAocykp
OyB9CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyBy
ZXR1cm4gcmVwbGFjZSAobGVuZ3RoICgpLCAwLCBuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJ
bnB1dEl0ZXJhdG9yPgogICAgYmFzaWNfc3RyaW5nJiBhcHBlbmQoSW5wdXRJdGVyYXRvciBmaXJz
dCwgSW5wdXRJdGVyYXRvciBsYXN0KQoKCgogICAgeyByZXR1cm4gcmVwbGFjZSAoaWVuZCAoKSwg
aWVuZCAoKSwgZmlyc3QsIGxhc3QpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNoYXJUIF9fYykKICB7
IGFwcGVuZCgxLCBfX2MpOyB9CiAgCiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGJhc2lj
X3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwKCQkJc2l6ZV90eXBlIG4gPSBucG9zKQog
ICAgeyByZXR1cm4gcmVwbGFjZSAoMCwgbnBvcywgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3Ry
aW5nJiBhc3NpZ24gKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJl
cGxhY2UgKDAsIG5wb3MsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGNo
YXJUKiBzKQogICAgeyByZXR1cm4gYXNzaWduIChzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAg
YmFzaWNfc3RyaW5nJiBhc3NpZ24gKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4g
cmVwbGFjZSAoMCwgbnBvcywgbiwgYyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRv
cj4KICAgIGJhc2ljX3N0cmluZyYgYXNzaWduKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRl
cmF0b3IgbGFzdCkKCgoKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGliZWdpbiAoKSwgaWVuZCAoKSwg
Zmlyc3QsIGxhc3QpOyB9CgogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjb25zdCBjaGFyVCog
cykKICAgIHsgcmV0dXJuIGFzc2lnbiAocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAo
Y2hhclQgYykKICAgIHsgcmV0dXJuIGFzc2lnbiAoMSwgYyk7IH0KCiAgYmFzaWNfc3RyaW5nJiBv
cGVyYXRvcis9IChjb25zdCBiYXNpY19zdHJpbmcmIHJocykKICAgIHsgcmV0dXJuIGFwcGVuZCAo
cmhzKTsgfQogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgY2hhclQqIHMpCiAgICB7
IHJldHVybiBhcHBlbmQgKHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChjaGFyVCBj
KQogICAgeyByZXR1cm4gYXBwZW5kICgxLCBjKTsgfQoKICBiYXNpY19zdHJpbmcmIGluc2VydCAo
c2l6ZV90eXBlIHBvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLAoJCQlzaXplX3R5cGUgcG9z
MiA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvczEsIDAs
IHN0ciwgcG9zMiwgbik7IH0KICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBvcywg
Y29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCAw
LCBzLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zLCBjb25zdCBj
aGFyVCogcykKICAgIHsgcmV0dXJuIGluc2VydCAocG9zLCBzLCB0cmFpdHM6Omxlbmd0aCAocykp
OyB9CiAgYmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuLCBj
aGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCAwLCBuLCBjKTsgfQogIGl0ZXJhdG9y
IGluc2VydChpdGVyYXRvciBwLCBjaGFyVCBjKQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGli
ZWdpbiAoKTsKICAgICAgaW5zZXJ0IChwIC0gaWJlZ2luICgpLCAxLCBjKTsgc2VsZmlzaCAoKTsK
ICAgICAgcmV0dXJuIGliZWdpbiAoKSArIF9fbzsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRv
ciBwLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgc2l6ZV90eXBlIF9fbyA9IHAgLSBpYmVn
aW4gKCk7CiAgICAgIGluc2VydCAocCAtIGliZWdpbiAoKSwgbiwgYyk7IHNlbGZpc2ggKCk7CiAg
ICAgIHJldHVybiBpYmVnaW4gKCkgKyBfX287IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVy
YXRvcj4KICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIHAsIElucHV0SXRlcmF0b3IgZmlyc3QsIElu
cHV0SXRlcmF0b3IgbGFzdCkKCgoKICAgIHsgcmVwbGFjZSAocCwgcCwgZmlyc3QsIGxhc3QpOyB9
CgogIGJhc2ljX3N0cmluZyYgZXJhc2UgKHNpemVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9
IG5wb3MpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4sIChzaXplX3R5cGUpMCwgKGNoYXJU
KTApOyB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgcCkKICAgIHsgc2l6ZV90eXBlIF9fbyA9
IHAgLSBiZWdpbigpOwogICAgICByZXBsYWNlIChfX28sIDEsIChzaXplX3R5cGUpMCwgKGNoYXJU
KTApOyBzZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJlZ2luKCkgKyBfX287IH0KICBpdGVyYXRv
ciBlcmFzZShpdGVyYXRvciBmLCBpdGVyYXRvciBsKQogICAgeyBzaXplX3R5cGUgX19vID0gZiAt
IGliZWdpbigpOwogICAgICByZXBsYWNlIChfX28sIGwtZiwgKHNpemVfdHlwZSkwLCAoY2hhclQp
MCk7c2VsZmlzaCAoKTsKICAgICAgcmV0dXJuIGliZWdpbigpICsgX19vOyB9CgogIGJhc2ljX3N0
cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSwgY29uc3QgYmFzaWNf
c3RyaW5nJiBzdHIsCgkJCSBzaXplX3R5cGUgcG9zMiA9IDAsIHNpemVfdHlwZSBuMiA9IG5wb3Mp
OwogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBj
b25zdCBjaGFyVCogcywKCQkJIHNpemVfdHlwZSBuMik7CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNl
IChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1
cm4gcmVwbGFjZSAocG9zLCBuMSwgcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0
cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBzaXplX3R5cGUgbjIs
IGNoYXJUIGMpOwogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90
eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4sIDEsIGMpOyB9CiAg
YmFzaWNfc3RyaW5nJiByZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGJh
c2ljX3N0cmluZyYgc3RyKQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGky
IC0gaTEsIHN0cik7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVy
YXRvciBpMiwgY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFj
ZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBs
YWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1
cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIHMpOyB9CiAgYmFzaWNfc3RyaW5n
JiByZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIHNpemVfdHlwZSBuLCBjaGFyVCBj
KQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIG4sIGMpOyB9
CgogIHRlbXBsYXRlPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcmIHJlcGxh
Y2UoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLAoJCQkgIElucHV0SXRlcmF0b3IgajEsIElucHV0
SXRlcmF0b3IgajIpOwoKCgoKCnByaXZhdGU6CiAgc3RhdGljIGNoYXJUIGVvcyAoKSB7IHJldHVy
biB0cmFpdHM6OmVvcyAoKTsgfQogIHZvaWQgdW5pcXVlICgpIHsgaWYgKHJlcCAoKS0+cmVmID4g
MSkgYWxsb2MgKGxlbmd0aCAoKSwgdHJ1ZSk7IH0KICB2b2lkIHNlbGZpc2ggKCkgeyB1bmlxdWUg
KCk7IHJlcCAoKS0+c2VsZmlzaCA9IHRydWU7IH0KCnB1YmxpYzoKICBjaGFyVCBvcGVyYXRvcltd
IChzaXplX3R5cGUgcG9zKSBjb25zdAogICAgewogICAgICBpZiAocG9zID09IGxlbmd0aCAoKSkK
CXJldHVybiBlb3MgKCk7CiAgICAgIHJldHVybiBkYXRhICgpW3Bvc107CiAgICB9CgogIHJlZmVy
ZW5jZSBvcGVyYXRvcltdIChzaXplX3R5cGUgcG9zKQogICAgeyBzZWxmaXNoICgpOyByZXR1cm4g
KCpyZXAgKCkpW3Bvc107IH0KCiAgcmVmZXJlbmNlIGF0IChzaXplX3R5cGUgcG9zKQogICAgewog
ICAgICAoKHZvaWQpICgoICEoIHBvcyA+PSBsZW5ndGggKCkgKSApID8gMCA6IChfX2VwcmludGYg
KCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvdXNyL3Blb3BsZS9taWxncmFt
L2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAsICAgMzIzICwgICIhKHBvcyA+PSBs
ZW5ndGggKCkpIiApLCAwKSApKSAgOwogICAgICByZXR1cm4gKCp0aGlzKVtwb3NdOwogICAgfQog
IGNvbnN0X3JlZmVyZW5jZSBhdCAoc2l6ZV90eXBlIHBvcykgY29uc3QKICAgIHsKICAgICAgKCh2
b2lkKSAoKCAhKCBwb3MgPj0gbGVuZ3RoICgpICkgKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6
IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwJICAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9n
Y2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgLCAgIDMyOCAsICAiIShwb3MgPj0gbGVuZ3RoICgp
KSIgKSwgMCkgKSkgIDsKICAgICAgcmV0dXJuIGRhdGEgKClbcG9zXTsKICAgIH0KCnByaXZhdGU6
CiAgdm9pZCB0ZXJtaW5hdGUgKCkgY29uc3QKICAgIHsgdHJhaXRzOjphc3NpZ24gKCgqcmVwICgp
KVtsZW5ndGggKCldLCBlb3MgKCkpOyB9CgpwdWJsaWM6CiAgY29uc3QgY2hhclQqIGNfc3RyICgp
IGNvbnN0CiAgICB7IGlmIChsZW5ndGggKCkgPT0gMCkgcmV0dXJuICIiOyB0ZXJtaW5hdGUgKCk7
IHJldHVybiBkYXRhICgpOyB9CiAgdm9pZCByZXNpemUgKHNpemVfdHlwZSBuLCBjaGFyVCBjKTsK
ICB2b2lkIHJlc2l6ZSAoc2l6ZV90eXBlIG4pCiAgICB7IHJlc2l6ZSAobiwgZW9zICgpKTsgfQog
IHZvaWQgcmVzZXJ2ZSAoc2l6ZV90eXBlKSB7IH0KCiAgc2l6ZV90eXBlIGNvcHkgKGNoYXJUKiBz
LCBzaXplX3R5cGUgbiwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0OwoKICBzaXplX3R5cGUgZmlu
ZCAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAg
eyByZXR1cm4gZmluZCAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90
eXBlIGZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29u
c3Q7CiAgc2l6ZV90eXBlIGZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gMCkg
Y29uc3QKICAgIHsgcmV0dXJuIGZpbmQgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQog
IHNpemVfdHlwZSBmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3Q7CgogIHNp
emVfdHlwZSByZmluZCAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSBu
cG9zKSBjb25zdAogICAgeyByZXR1cm4gcmZpbmQgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0
aCgpKTsgfQogIHNpemVfdHlwZSByZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3Ms
IHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBz
aXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChzLCBwb3MsIHRy
YWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgcmZpbmQgKGNoYXJUIGMsIHNpemVfdHlw
ZSBwb3MgPSBucG9zKSBjb25zdDsKCiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNvbnN0IGJh
c2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZp
bmRfZmlyc3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlw
ZSBmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBl
IG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6
ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X29mIChzLCBwb3Ms
IHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY2hhclQg
Yywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kIChjLCBwb3MpOyB9
CgogIHNpemVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXpl
X3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfbGFzdF9vZiAoc3RyLmRh
dGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9vZiAoY29u
c3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5
cGUgZmluZF9sYXN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNv
bnN0CiAgICB7IHJldHVybiBmaW5kX2xhc3Rfb2YgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMp
KTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSBu
cG9zKSBjb25zdAogICAgeyByZXR1cm4gcmZpbmQgKGMsIHBvcyk7IH0KCiAgc2l6ZV90eXBlIGZp
bmRfZmlyc3Rfbm90X29mIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9
IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X25vdF9vZiAoc3RyLmRhdGEoKSwgcG9z
LCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfbm90X29mIChjb25zdCBj
aGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBm
aW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25z
dAogICAgeyByZXR1cm4gZmluZF9maXJzdF9ub3Rfb2YgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGgg
KHMpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBl
IHBvcyA9IDApIGNvbnN0OwoKICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY29uc3QgYmFz
aWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4g
ZmluZF9sYXN0X25vdF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6
ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBz
aXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGNo
YXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfbGFz
dF9ub3Rfb2YgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5k
X2xhc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3Q7CgogIGJh
c2ljX3N0cmluZyBzdWJzdHIgKHNpemVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3Mp
IGNvbnN0CiAgICB7IHJldHVybiBiYXNpY19zdHJpbmcgKCp0aGlzLCBwb3MsIG4pOyB9CgogIGlu
dCBjb21wYXJlIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsIHNp
emVfdHlwZSBuID0gbnBvcykgY29uc3Q7CiAgIAogIGludCBjb21wYXJlIChjb25zdCBjaGFyVCog
cywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIGludCBjb21wYXJlIChjb25z
dCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBjb21wYXJl
IChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KCiAgaXRlcmF0b3IgYmVnaW4gKCkgeyBz
ZWxmaXNoICgpOyByZXR1cm4gJigqdGhpcylbMF07IH0KICBpdGVyYXRvciBlbmQgKCkgeyBzZWxm
aXNoICgpOyByZXR1cm4gJigqdGhpcylbbGVuZ3RoICgpXTsgfQoKcHJpdmF0ZToKICBpdGVyYXRv
ciBpYmVnaW4gKCkgY29uc3QgeyByZXR1cm4gJigqcmVwICgpKVswXTsgfQogIGl0ZXJhdG9yIGll
bmQgKCkgY29uc3QgeyByZXR1cm4gJigqcmVwICgpKVtsZW5ndGggKCldOyB9CgpwdWJsaWM6CiAg
Y29uc3RfaXRlcmF0b3IgYmVnaW4gKCkgY29uc3QgeyByZXR1cm4gaWJlZ2luICgpOyB9CiAgY29u
c3RfaXRlcmF0b3IgZW5kICgpIGNvbnN0IHsgcmV0dXJuIGllbmQgKCk7IH0KCiAgcmV2ZXJzZV9p
dGVyYXRvciAgICAgICByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yIChlbmQgKCkp
OyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4g
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciAoZW5kICgpKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgICAg
ICAgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IgKGJlZ2luICgpKTsgfQogIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yIChiZWdpbiAoKSk7IH0KCnByaXZhdGU6CiAgdm9pZCBhbGxvYyAoc2l6ZV90eXBl
IHNpemUsIGJvb2wgc2F2ZSk7CiAgc3RhdGljIHNpemVfdHlwZSBfZmluZCAoY29uc3QgY2hhclQq
IHB0ciwgY2hhclQgYywgc2l6ZV90eXBlIHhwb3MsIHNpemVfdHlwZSBsZW4pOwogIGlubGluZSBi
b29sIGNoZWNrX3JlYWxsb2MgKHNpemVfdHlwZSBzKSBjb25zdDsKCiAgc3RhdGljIFJlcCBuaWxS
ZXA7CiAgY2hhclQgKmRhdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPiB0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIElu
cHV0SXRlcmF0b3IgajEsIElucHV0SXRlcmF0b3IgajIpCgoKCgoKewogIGNvbnN0IHNpemVfdHlw
ZSBsZW4gPSBsZW5ndGggKCk7CiAgc2l6ZV90eXBlIHBvcyA9IGkxIC0gaWJlZ2luICgpOwogIHNp
emVfdHlwZSBuMSA9IGkyIC0gaTE7CiAgc2l6ZV90eXBlIG4yID0gajIgLSBqMTsKCiAgKCh2b2lk
KSAoKCAhKCBwb3MgPiBsZW4gKSApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFz
c2VydGlvbiBgJXMnXG4iLAkgICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIv
Z2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L3N0ZC9iYXN0cmluZy5oIiAsICAgNDQxICwgICIhKHBvcyA+IGxlbikiICksIDApICkpICA7CiAg
aWYgKG4xID4gbGVuIC0gcG9zKQogICAgbjEgPSBsZW4gLSBwb3M7CiAgKCh2b2lkKSAoKCAhKCBs
ZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIgKSApID8gMCA6IChfX2VwcmludGYgKCIlczoldTog
ZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2dj
YzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAsICAgNDQ0ICwgICIhKGxlbiAtIG4xID4gbWF4X3Np
emUgKCkgLSBuMikiICksIDApICkpICA7CiAgc2l6ZV90IG5ld2xlbiA9IGxlbiAtIG4xICsgbjI7
CgogIGlmIChjaGVja19yZWFsbG9jIChuZXdsZW4pKQogICAgewogICAgICBSZXAgKnAgPSBSZXA6
OmNyZWF0ZSAobmV3bGVuKTsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgcG9zKTsKICAgICAg
cC0+Y29weSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7
CiAgICAgIGZvciAoOyBqMSAhPSBqMjsgKytqMSwgKytwb3MpCgl0cmFpdHM6OmFzc2lnbiAoKCpw
KVtwb3NdLCAqajEpOwogICAgICByZXB1cCAocCk7CiAgICB9CiAgZWxzZQogICAgewogICAgICBy
ZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBu
MSkpOwogICAgICBmb3IgKDsgajEgIT0gajI7ICsrajEsICsrcG9zKQoJdHJhaXRzOjphc3NpZ24g
KCgqcmVwICgpKVtwb3NdLCAqajEpOwogICAgfQogIHJlcCAoKS0+bGVuID0gbmV3bGVuOwoKICBy
ZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj4Kb3BlcmF0b3IrIChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj4mIGxocywKCSAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
PiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAo
bGhzKTsKICBzdHIuYXBwZW5kIChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjb25zdCBjaGFyVCogbGhz
LCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewog
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3Ry
LmFwcGVuZCAocmhzKTsKICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAoY2hhclQgbGhzLCBjb25zdCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKDEsIGxocyk7CiAgc3RyLmFwcGVuZCAocmhzKTsK
ICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh
c3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+Cm9wZXJhdG9yKyAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj4gc3RyIChsaHMpOwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0
cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRv
cisgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBj
aGFyVCByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3Ry
IChsaHMpOwogIHN0ci5hcHBlbmQgKDEsIHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wK
b3BlcmF0b3I9PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
JiBsaHMsCgkgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID09IDApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApv
cGVyYXRvcj09IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPT0g
MCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0
b3I+CmlubGluZSBib29sCm9wZXJhdG9yPT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMu
Y29tcGFyZSAocmhzKSA9PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPSAoY29uc3QgY2hhclQq
IGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMp
CnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpICE9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRv
ciE9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywg
Y29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgIT0gMCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cmlu
bGluZSBib29sCm9wZXJhdG9yPCAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+JiBsaHMsCgkgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpIDwgMCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGlu
ZSBib29sCm9wZXJhdG9yPCAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChs
aHMpID4gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPCAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1cm4g
KGxocy5jb21wYXJlIChyaHMpIDwgMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPiAoY29uc3QgY2hh
clQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBy
aHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpIDwgMCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJh
dG9yPiAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMs
IGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID4gMCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cmlu
bGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFy
ZSAobGhzKSA+PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PSAoY29uc3QgYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICBy
ZXR1cm4gKGxocy5jb21wYXJlIChyaHMpIDw9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs
IGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChj
b25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPD0gMCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBi
b29sCm9wZXJhdG9yPj0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhz
KSA+PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMp
ICE9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs
b2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj4gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID4g
MCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0
b3I+CmlubGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8PSAw
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID49IDAp
Owp9CgpjbGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFtOwp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs
IGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBpc3RyZWFtJgpvcGVyYXRvcj4+IChpc3Ry
ZWFtJiwgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Jik7CnRlbXBsYXRl
IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+IG9zdHJlYW0mCm9w
ZXJhdG9yPDwgKG9zdHJlYW0mLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj4mKTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4gaXN0cmVhbSYKZ2V0bGluZSAoaXN0cmVhbSYsIGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPiYsIGNoYXJUIGRlbGltID0gJ1xuJyk7Cgp9ICAKCiMgMSAiL3Vz
ci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYu
NS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2MiIDEgMwog
CiAKCiAKIAogCiAKIAoKIAogCiAKIAoKIAogCiAKCiAKIAogCiAKIAoKIAogCgpleHRlcm4gIkMr
KyIgewp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgppbmxpbmUgdm9pZCAqIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6
UmVwOjoKb3BlcmF0b3IgbmV3IChzaXplX3Qgcywgc2l6ZV90IGV4dHJhKQp7CiAgcmV0dXJuIEFs
bG9jYXRvcjo6YWxsb2NhdGUocyArIGV4dHJhICogc2l6ZW9mIChjaGFyVCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9p
ZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6Cm9wZXJhdG9y
IGRlbGV0ZSAodm9pZCAqIHB0cikKewogIEFsbG9jYXRvcjo6ZGVhbGxvY2F0ZShwdHIsIHNpemVv
ZihSZXApICsKCQkJcmVpbnRlcnByZXRfY2FzdDxSZXAgKj4ocHRyKS0+cmVzICoKCQkJc2l6ZW9m
IChjaGFyVCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgppbmxpbmUgc2l6ZV90IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6UmVwOjoKZnJvYl9zaXplIChzaXplX3QgcykKewogIHNpemVfdCBpID0gMTY7CiAg
d2hpbGUgKGkgPCBzKSBpICo9IDI7CiAgcmV0dXJuIGk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy
VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcCAqCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0
cywgQWxsb2NhdG9yPjo6UmVwOjoKY3JlYXRlIChzaXplX3QgZXh0cmEpCnsKICBleHRyYSA9IGZy
b2Jfc2l6ZSAoZXh0cmEgKyAxKTsKICBSZXAgKnAgPSBuZXcgKGV4dHJhKSBSZXA7CiAgcC0+cmVz
ID0gZXh0cmE7CiAgcC0+cmVmID0gMTsKICBwLT5zZWxmaXNoID0gZmFsc2U7CiAgcmV0dXJuIHA7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+
CmNoYXJUICogYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6Ogpj
bG9uZSAoKQp7CiAgUmVwICpwID0gUmVwOjpjcmVhdGUgKGxlbik7CiAgcC0+Y29weSAoMCwgZGF0
YSAoKSwgbGVuKTsKICBwLT5sZW4gPSBsZW47CiAgcmV0dXJuIHAtPmRhdGEgKCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBi
b29sIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKZXhjZXNz
X3Nsb3AgKHNpemVfdCBzLCBzaXplX3QgcikKewogIHJldHVybiAyICogKHMgPD0gMTYgPyAxNiA6
IHMpIDwgcjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4KaW5saW5lIGJvb2wgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+OjoKY2hlY2tfcmVhbGxvYyAoYmFzaWNfc3RyaW5nOjpzaXplX3R5cGUgcykgY29uc3QKewog
IHMgKz0gc2l6ZW9mIChjaGFyVCk7CiAgcmVwICgpLT5zZWxmaXNoID0gZmFsc2U7CiAgcmV0dXJu
IChyZXAgKCktPnJlZiA+IDEKCSAgfHwgcyA+IGNhcGFjaXR5ICgpCgkgIHx8IFJlcDo6ZXhjZXNz
X3Nsb3AgKHMsIGNhcGFjaXR5ICgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CnZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjoKYWxsb2MgKGJhc2ljX3N0cmluZzo6c2l6ZV90eXBlIF9fc2l6ZSwgYm9v
bCBfX3NhdmUpCnsKICBpZiAoISBjaGVja19yZWFsbG9jIChfX3NpemUpKQogICAgcmV0dXJuOwoK
ICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAoX19zaXplKTsKCiAgaWYgKF9fc2F2ZSkKICAgIHsKICAg
ICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgbGVuZ3RoICgpKTsKICAgICAgcC0+bGVuID0gbGVuZ3Ro
ICgpOwogICAgfQogIGVsc2UKICAgIHAtPmxlbiA9IDA7CgogIHJlcHVwIChwKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLAoJ
IGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zMiwgc2l6ZV90eXBlIG4yKQp7
CiAgY29uc3Qgc2l6ZV90IGxlbjIgPSBzdHIubGVuZ3RoICgpOwoKICBpZiAocG9zMSA9PSAwICYm
IG4xID49IGxlbmd0aCAoKSAmJiBwb3MyID09IDAgJiYgbjIgPj0gbGVuMikKICAgIHJldHVybiBv
cGVyYXRvcj0gKHN0cik7CgogICgodm9pZCkgKCggISggcG9zMiA+IGxlbjIgKSApID8gMCA6IChf
X2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvdXNyL3Blb3Bs
ZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUu
My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIgLCAgIDEyNiAsICAi
IShwb3MyID4gbGVuMikiICksIDApICkpICA7CgogIGlmIChuMiA+IGxlbjIgLSBwb3MyKQogICAg
bjIgPSBsZW4yIC0gcG9zMjsKCiAgcmV0dXJuIHJlcGxhY2UgKHBvczEsIG4xLCBzdHIuZGF0YSAo
KSArIHBvczIsIG4yKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjpSZXA6Ogpjb3B5IChzaXplX3QgcG9zLCBjb25zdCBjaGFyVCAqcywgc2l6ZV90
IG4pCnsKICBpZiAobikKICAgIHRyYWl0czo6Y29weSAoZGF0YSAoKSArIHBvcywgcywgbik7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cmlu
bGluZSB2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoK
bW92ZSAoc2l6ZV90IHBvcywgY29uc3QgY2hhclQgKnMsIHNpemVfdCBuKQp7CiAgaWYgKG4pCiAg
ICB0cmFpdHM6Om1vdmUgKGRhdGEgKCkgKyBwb3MsIHMsIG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj4mCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPjo6CnJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQq
IHMsIHNpemVfdHlwZSBuMikKewogIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBsZW5ndGggKCk7CiAg
KCh2b2lkKSAoKCAhKCBwb3MgPiBsZW4gKSApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFp
bGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5
NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0ZC9iYXN0cmluZy5jYyIgLCAgIDE1NiAsICAiIShwb3MgPiBsZW4pIiApLCAwKSAp
KSAgOwogIGlmIChuMSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogICgodm9pZCkg
KCggISggbGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yICkgKSA/IDAgOiAoX19lcHJpbnRmICgi
JXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwJICAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9s
b2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2MiICwgICAxNTkgLCAgIiEobGVuIC0gbjEg
PiBtYXhfc2l6ZSAoKSAtIG4yKSIgKSwgMCkgKSkgIDsKICBzaXplX3QgbmV3bGVuID0gbGVuIC0g
bjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5ld2xlbikpCiAgICB7CiAgICAgIFJlcCAq
cCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBwLT5jb3B5ICgwLCBkYXRhICgpLCBwb3Mp
OwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9z
ICsgbjEpKTsKICAgICAgcC0+Y29weSAocG9zLCBzLCBuMik7CiAgICAgIHJlcHVwIChwKTsKICAg
IH0KICBlbHNlCiAgICB7CiAgICAgIHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkgKyBw
b3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIHJlcCAoKS0+Y29weSAocG9zLCBzLCBu
Mik7CiAgICB9CiAgcmVwICgpLT5sZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5l
IHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpzZXQg
KHNpemVfdCBwb3MsIGNvbnN0IGNoYXJUIGMsIHNpemVfdCBuKQp7CiAgdHJhaXRzOjpzZXQgIChk
YXRhICgpICsgcG9zLCBjLCBuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+JiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChz
aXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIHNpemVfdHlwZSBuMiwgY2hhclQgYykKewogIGNv
bnN0IHNpemVfdCBsZW4gPSBsZW5ndGggKCk7CiAgKCh2b2lkKSAoKCAhKCBwb3MgPiBsZW4gKSAp
ID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIv
dXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4
Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIgLCAg
IDE5MiAsICAiIShwb3MgPiBsZW4pIiApLCAwKSApKSAgOwogIGlmIChuMSA+IGxlbiAtIHBvcykK
ICAgIG4xID0gbGVuIC0gcG9zOwogICgodm9pZCkgKCggISggbGVuIC0gbjEgPiBtYXhfc2l6ZSAo
KSAtIG4yICkgKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVz
J1xuIiwJICAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlw
cy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJp
bmcuY2MiICwgICAxOTUgLCAgIiEobGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yKSIgKSwgMCkg
KSkgIDsKICBzaXplX3QgbmV3bGVuID0gbGVuIC0gbjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxs
b2MgKG5ld2xlbikpCiAgICB7CiAgICAgIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwog
ICAgICBwLT5jb3B5ICgwLCBkYXRhICgpLCBwb3MpOwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwg
ZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgcC0+c2V0ICAocG9z
LCBjLCBuMik7CiAgICAgIHJlcHVwIChwKTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHJlcCAo
KS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7
CiAgICAgIHJlcCAoKS0+c2V0ICAocG9zLCBjLCBuMik7CiAgICB9CiAgcmVwICgpLT5sZW4gPSBu
ZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0
cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj46OgpyZXNpemUgKHNpemVfdHlwZSBuLCBjaGFyVCBjKQp7CiAgKCh2b2lkKSAo
KCAhKCBuID4gbWF4X3NpemUgKCkgKSApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVk
IGFzc2VydGlvbiBgJXMnXG4iLAkgICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9s
aWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0ZC9iYXN0cmluZy5jYyIgLCAgIDIyMCAsICAiIShuID4gbWF4X3NpemUgKCkpIiApLCAw
KSApKSAgOwoKICBpZiAobiA+IGxlbmd0aCAoKSkKICAgIGFwcGVuZCAobiAtIGxlbmd0aCAoKSwg
Yyk7CiAgZWxzZQogICAgZXJhc2UgKG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz
IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj46Ogpjb3B5IChjaGFyVCogcywgc2l6ZV90eXBlIG4sIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsK
ICAoKHZvaWQpICgoICEoIHBvcyA+IGxlbmd0aCAoKSApICkgPyAwIDogKF9fZXByaW50ZiAoIiVz
OiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsCSAgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9j
YWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4u
L2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmNjIiAsICAgMjMzICwgICIhKHBvcyA+IGxlbmd0
aCAoKSkiICksIDApICkpICA7CgogIGlmIChuID4gbGVuZ3RoICgpIC0gcG9zKQogICAgbiA9IGxl
bmd0aCAoKSAtIHBvczsKCiAgdHJhaXRzOjpjb3B5IChzLCBkYXRhICgpICsgcG9zLCBuKTsKICBy
ZXR1cm4gbjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5
cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZCAoY29uc3Qg
Y2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90IHhw
b3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgKyBuIDw9IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYg
KHRyYWl0czo6ZXEgKGRhdGEgKCkgW3hwb3NdLCAqcykKCSYmIHRyYWl0czo6Y29tcGFyZSAoZGF0
YSAoKSArIHhwb3MsIHMsIG4pID09IDApCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9z
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5
cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKX2ZpbmQgKGNvbnN0
IGNoYXJUKiBwdHIsIGNoYXJUIGMsIHNpemVfdHlwZSB4cG9zLCBzaXplX3R5cGUgbGVuKQp7CiAg
Zm9yICg7IHhwb3MgPCBsZW47ICsreHBvcykKICAgIGlmICh0cmFpdHM6OmVxIChwdHIgW3hwb3Nd
LCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPjo6CmZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsK
ICByZXR1cm4gX2ZpbmQgKGRhdGEgKCksIGMsIHBvcywgbGVuZ3RoICgpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUg
cG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGlmIChuID4gbGVuZ3RoICgpKQogICAgcmV0dXJu
IG5wb3M7CgogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gbjsKICBpZiAoeHBvcyA+IHBvcykK
ICAgIHhwb3MgPSBwb3M7CgogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOyApCiAgICBpZiAodHJh
aXRzOjplcSAoZGF0YSAoKSBbeHBvc10sICpzKQoJJiYgdHJhaXRzOjpjb21wYXJlIChkYXRhICgp
ICsgeHBvcywgcywgbikgPT0gMCkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJmaW5kIChjaGFyVCBjLCBzaXplX3R5
cGUgcG9zKSBjb25zdAp7CiAgaWYgKDEgPiBsZW5ndGggKCkpCiAgICByZXR1cm4gbnBvczsKCiAg
c2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOwogIGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9
IHBvczsKCiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7ICkKICAgIGlmICh0cmFpdHM6OmVxIChk
YXRhICgpIFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFy
VCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9
IHBvczsKICBmb3IgKDsgeHBvcyA8IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKF9maW5kIChz
LCBkYXRhICgpIFt4cG9zXSwgMCwgbikgIT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0
dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90
eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfbGFzdF9v
ZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAg
aWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0
aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9z
OyB4cG9zLS0gPiAwOykKICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pICE9
IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNp
emVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAg
Zm9yICg7IHhwb3MgPCBsZW5ndGggKCk7ICsreHBvcykKICAgIGlmIChfZmluZCAocywgZGF0YSAo
KSBbeHBvc10sIDAsIG4pID09IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9z
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X25vdF9vZiAo
Y2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwogIGZv
ciAoOyB4cG9zIDwgbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAodHJhaXRzOjpuZSAoZGF0YSAo
KSBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9sYXN0X25vdF9vZiAoY29uc3QgY2hhclQq
IHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09
IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYg
KHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykK
ICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pID09IG5wb3MpCiAgICAgIHJl
dHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz
IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj46OgpmaW5kX2xhc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAg
aWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0
aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9z
OyB4cG9zLS0gPiAwOykKICAgIGlmICh0cmFpdHM6Om5lIChkYXRhICgpIFt4cG9zXSwgYykpCiAg
ICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs
IGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbnQgYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+OjoKY29tcGFyZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNp
emVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgKCh2b2lkKSAoKCAhKCBwb3MgPiBs
ZW5ndGggKCkgKSApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBg
JXMnXG4iLAkgICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9t
aXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0
cmluZy5jYyIgLCAgIDM5OSAsICAiIShwb3MgPiBsZW5ndGggKCkpIiApLCAwKSApKSAgOwoKICBz
aXplX3QgcmxlbiA9IGxlbmd0aCAoKSAtIHBvczsKICBpZiAocmxlbiA+IG4pCiAgICBybGVuID0g
bjsKICBpZiAocmxlbiA+IHN0ci5sZW5ndGggKCkpCiAgICBybGVuID0gc3RyLmxlbmd0aCAoKTsK
ICBpbnQgciA9IHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHBvcywgc3RyLmRhdGEgKCksIHJs
ZW4pOwogIGlmIChyICE9IDApCiAgICByZXR1cm4gcjsKICBpZiAocmxlbiA9PSBuKQogICAgcmV0
dXJuIDA7CiAgcmV0dXJuIChsZW5ndGggKCkgLSBwb3MpIC0gc3RyLmxlbmd0aCAoKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW50IGJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNvbXBhcmUgKGNvbnN0IGNo
YXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogICgodm9pZCkgKCgg
ISggcG9zID4gbGVuZ3RoICgpICkgKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBh
c3NlcnRpb24gYCVzJ1xuIiwJICAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGli
L2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9zdGQvYmFzdHJpbmcuY2MiICwgICA0MTggLCAgIiEocG9zID4gbGVuZ3RoICgpKSIgKSwgMCkg
KSkgIDsKCiAgc2l6ZV90IHJsZW4gPSBsZW5ndGggKCkgLSBwb3M7CiAgaWYgKHJsZW4gPiBuKQog
ICAgcmxlbiA9IG47CiAgaW50IHIgPSB0cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyBwb3MsIHMs
IHJsZW4pOwogIGlmIChyICE9IDApCiAgICByZXR1cm4gcjsKICByZXR1cm4gKGxlbmd0aCAoKSAt
IHBvcykgLSBuOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+CmlzdHJlYW0gJgpvcGVyYXRvcj4+IChpc3RyZWFtICZpcywgYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ICZzKQp7CiAgaW50IHcgPSBpcy53aWR0aCAo
MCk7CiAgaWYgKGlzLmlwZngwICgpKQogICAgewogICAgICByZWdpc3RlciBzdHJlYW1idWYgKnNi
ID0gaXMucmRidWYgKCk7CiAgICAgIHMucmVzaXplICgwKTsKICAgICAgd2hpbGUgKDEpCgl7Cgkg
IGludCBjaCA9IHNiLT5zYnVtcGMgKCk7CgkgIGlmIChjaCA9PSAoLTEpICkKCSAgICB7CgkgICAg
ICBpcy5zZXRzdGF0ZSAoaW9zOjplb2ZiaXQpOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICBlbHNl
IGlmICh0cmFpdHM6OmlzX2RlbCAoY2gpKQoJICAgIHsKCSAgICAgIHNiLT5zdW5nZXRjICgpOwoJ
ICAgICAgYnJlYWs7CgkgICAgfQoJICBzICs9IHN0YXRpY19jYXN0PGNoYXJUPiAoY2gpOwoJICBp
ZiAoLS13ID09IDEpCgkgICAgYnJlYWs7Cgl9CiAgICB9CgogIGlzLmlzZnggKCk7CiAgaWYgKHMu
bGVuZ3RoICgpID09IDApCiAgICBpcy5zZXRzdGF0ZSAoaW9zOjpmYWlsYml0KTsKCiAgcmV0dXJu
IGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgpvc3RyZWFtICYKb3BlcmF0b3I8PCAob3N0cmVhbSAmbywgY29uc3QgYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBzKQp7CiAgcmV0dXJuIG8ud3JpdGUgKHMuZGF0
YSAoKSwgcy5sZW5ndGggKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgppc3RyZWFtJgpnZXRsaW5lIChpc3RyZWFtICZpcywgYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBzLCBjaGFyVCBkZWxpbSkKewogIGlm
IChpcy5pcGZ4MSAoKSkKICAgIHsKICAgICAgX0dfc2l6ZV90ICBjb3VudCA9IDA7CiAgICAgIHN0
cmVhbWJ1ZiAqc2IgPSBpcy5yZGJ1ZiAoKTsKICAgICAgcy5yZXNpemUgKDApOwoKICAgICAgd2hp
bGUgKDEpCgl7CgkgIGludCBjaCA9IHNiLT5zYnVtcGMgKCk7CgkgIGlmIChjaCA9PSAoLTEpICkK
CSAgICB7CgkgICAgICBpcy5zZXRzdGF0ZSAoY291bnQgPT0gMAoJCQkgICA/IChpb3M6OmZhaWxi
aXR8aW9zOjplb2ZiaXQpCgkJCSAgIDogaW9zOjplb2ZiaXQpOwoJICAgICAgYnJlYWs7CgkgICAg
fQoKCSAgKytjb3VudDsKCgkgIGlmIChjaCA9PSBkZWxpbSkKCSAgICBicmVhazsKCgkgIHMgKz0g
c3RhdGljX2Nhc3Q8Y2hhclQ+IChjaCk7CgoJICBpZiAocy5sZW5ndGggKCkgPT0gcy5ucG9zIC0g
MSkKCSAgICB7CgkgICAgICBpcy5zZXRzdGF0ZSAoaW9zOjpmYWlsYml0KTsKCSAgICAgIGJyZWFr
OwoJICAgIH0KCX0KICAgIH0KCiAgIAogICAKICBpcy5pc2Z4ICgpOwoKICByZXR1cm4gaXM7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwCmJhc2ljX3N0cmluZzxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpuaWxSZXAgPSB7IDAsIDAsIDEsIGZhbHNlIH07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpjb25z
dCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Om5wb3M7Cgp9ICAKIyA2NTUgIi91
c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2
LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoK
CgojIDYgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMt
c2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAyIDMK
CgpleHRlcm4gIkMrKyIgewp0eXBlZGVmIGJhc2ljX3N0cmluZyA8Y2hhcj4gc3RyaW5nOwogCn0g
IAoKCiMgMzAgImlucHV0LmgiIDIKCgpleHRlcm4gaW50IG9jdGF2ZV9yZWFkIChjaGFyICpidWYs
IHVuc2lnbmVkIG1heF9zaXplKTsKZXh0ZXJuIEZJTEUgKmdldF9pbnB1dF9mcm9tX2ZpbGUgKGNv
bnN0IHN0cmluZyYgbmFtZSwgaW50IHdhcm4gPSAxKTsKZXh0ZXJuIEZJTEUgKmdldF9pbnB1dF9m
cm9tX3N0ZGluICh2b2lkKTsKZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV9yZWFkbGluZSAodm9pZCk7
CgogCmV4dGVybiBzdHJpbmcgY3VycmVudF9ldmFsX3N0cmluZzsKCiAKZXh0ZXJuIGludCBnZXRf
aW5wdXRfZnJvbV9ldmFsX3N0cmluZzsKCiAKZXh0ZXJuIGludCByZWFkaW5nX2Zjbl9maWxlOwoK
IApleHRlcm4gc3RyaW5nIGN1cnJfZmNuX2ZpbGVfbmFtZTsKCiAKZXh0ZXJuIHN0cmluZyBjdXJy
X2Zjbl9maWxlX2Z1bGxfbmFtZTsKCiAKZXh0ZXJuIGludCByZWFkaW5nX3NjcmlwdF9maWxlOwoK
IApleHRlcm4gRklMRSAqZmZfaW5zdHJlYW07CgogCmV4dGVybiBpbnQgaW50ZXJhY3RpdmU7Cgog
CmV4dGVybiBpbnQgZm9yY2VkX2ludGVyYWN0aXZlOwoKIApleHRlcm4gaW50IHByb21wdGZsYWc7
CgogCmV4dGVybiBzdHJpbmcgY3VycmVudF9pbnB1dF9saW5lOwoKIApleHRlcm4gYm9vbCBvY3Rh
dmVfY29tcGxldGlvbl9tYXRjaGVzX2NhbGxlZDsKCiAKZXh0ZXJuIGJvb2wgb2N0YXZlX2luaXRp
YWxpemVkX3JlYWRsaW5lOwoKY2hhciAqZ251X3JlYWRsaW5lIChjb25zdCBjaGFyICpzLCBib29s
IGZvcmNlX3JlYWRsaW5lID0gZmFsc2UpOwoKZXh0ZXJuIHN0cmluZyBWcHM0OwoKZXh0ZXJuIGRv
dWJsZSBWbGFzdF9wcm9tcHRfdGltZTsKCmV4dGVybiB2b2lkIHN5bWJvbHNfb2ZfaW5wdXQgKHZv
aWQpOwoKCgogCgoKCgojIDQyICJzaWdoYW5kbGVycy5jYyIgMgoKIyAxICJsb2FkLXNhdmUuaCIg
MQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIG9zdHJlYW07CgpjbGFzcyBvY3RhdmVf
dmFsdWU7CgoKCmV4dGVybiBpbnQgc2F2ZV9hc2NpaV9kYXRhIChvc3RyZWFtJiBvcywgY29uc3Qg
b2N0YXZlX3ZhbHVlJiB0LAoJCQkgICAgY29uc3Qgc3RyaW5nJiBuYW1lID0gc3RyaW5nICgpLAoJ
CQkgICAgaW50IHN0cmlwX25hbl9hbmRfaW5mID0gMCwKCQkJICAgIGludCBtYXJrX2FzX2dsb2Jh
bCA9IDAsIGludCBwcmVjaXNpb24gPSAwKTsKCmV4dGVybiBpbnQgc2F2ZV90aHJlZV9kIChvc3Ry
ZWFtJiBvcywgY29uc3Qgb2N0YXZlX3ZhbHVlJiB0LAoJCQkgaW50IHBhcmFtZXRyaWMgPSAwKTsK
CmV4dGVybiB2b2lkIHNhdmVfdXNlcl92YXJpYWJsZXMgKHZvaWQpOwoKZXh0ZXJuIHZvaWQgc3lt
Ym9sc19vZl9sb2FkX3NhdmUgKHZvaWQpOwoKCgogCgoKCgojIDQzICJzaWdoYW5kbGVycy5jYyIg
MgoKIyAxICJwYWdlci5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNy
L3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41
LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cnN0cmVhbS5oIiAxIDMKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKIyAxICIvdXNyL3Bl
b3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIu
OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmZpbGUuaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgdm9pZCAqKCpfSU9fYWxsb2NfdHlw
ZSkgIChfR19zaXplX3QgKSAgOwp0eXBlZGVmIHZvaWQgKCpfSU9fZnJlZV90eXBlKSAgKHZvaWQq
KSAgOwoKc3RydWN0IF9JT19zdHJfZmllbGRzCnsKICBfSU9fYWxsb2NfdHlwZSBfYWxsb2NhdGVf
YnVmZmVyOwogIF9JT19mcmVlX3R5cGUgX2ZyZWVfYnVmZmVyOwp9OwoKIAoKCgoKc3RydWN0IF9J
T19zdHJlYW1idWYKewogIHN0cnVjdCBfSU9fRklMRSBfZjsKICBjb25zdCB2b2lkICpfdnRhYmxl
Owp9OwoKdHlwZWRlZiBzdHJ1Y3QgX0lPX3N0cmZpbGVfCnsKICBzdHJ1Y3QgX0lPX3N0cmVhbWJ1
ZiBfc2JmOwogIHN0cnVjdCBfSU9fc3RyX2ZpZWxkcyBfczsKfSBfSU9fc3RyZmlsZTsKCiAKCgoK
IAoKCiMgMzMgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21p
cHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Ryc3RyZWFt
LmgiIDIgMwoKCmV4dGVybiAiQysrIiB7CmNsYXNzIHN0cnN0cmVhbWJ1ZiA6IHB1YmxpYyBzdHJl
YW1idWYKewogIHN0cnVjdCBfSU9fc3RyX2ZpZWxkcyBfczsKICBmcmllbmQgY2xhc3MgaXN0cnN0
cmVhbTsKCiAgICB2b2lkIGluaXRfZHluYW1pYyhfSU9fYWxsb2NfdHlwZSBhbGxvYywgX0lPX2Zy
ZWVfdHlwZSBmcmVlLAoJCSAgICAgIGludCBpbml0aWFsX3NpemUgPSAwKTsKICAgIHZvaWQgaW5p
dF9zdGF0aWMoY2hhciAqcHRyLCBpbnQgc2l6ZSwgY2hhciAqcHN0YXJ0KTsKICAgIHZvaWQgaW5p
dF9yZWFkb25seShjb25zdCBjaGFyICpwdHIsIGludCBzaXplKTsKICBwcm90ZWN0ZWQ6CiAgICB2
aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgPSAoLTEpICk7CiAgICB2aXJ0dWFsIGludCB1bmRlcmZs
b3coKTsKICAgIHZpcnR1YWwgaW50IHBiYWNrZmFpbChpbnQgYyk7CiAgcHVibGljOgogICAgdmly
dHVhbCB+c3Ryc3RyZWFtYnVmKCk7CiAgICBzdHJzdHJlYW1idWYoKSB7IGluaXRfZHluYW1pYygw
LCAwKTsgfQogICAgc3Ryc3RyZWFtYnVmKGludCBpbml0aWFsX3NpemUpIHsgaW5pdF9keW5hbWlj
KDAsIDAsIGluaXRpYWxfc2l6ZSk7IH0KICAgIHN0cnN0cmVhbWJ1Zih2b2lkICooKl9fYWxsb2Mp
KF9HX3NpemVfdCApLCB2b2lkICgqX19mcmVlKSh2b2lkKikpCgl7IGluaXRfZHluYW1pYyhfX2Fs
bG9jLCBfX2ZyZWUpOyB9CiAgICBzdHJzdHJlYW1idWYoY2hhciAqcHRyLCBpbnQgc2l6ZSwgY2hh
ciAqcHN0YXJ0ID0gX19udWxsICkKCXsgaW5pdF9zdGF0aWMocHRyLCBzaXplLCBwc3RhcnQpOyB9
CiAgICBzdHJzdHJlYW1idWYodW5zaWduZWQgY2hhciAqcHRyLCBpbnQgc2l6ZSwgdW5zaWduZWQg
Y2hhciAqcHN0YXJ0ID0gX19udWxsICkKCXsgaW5pdF9zdGF0aWMoKGNoYXIqKXB0ciwgc2l6ZSwg
KGNoYXIqKXBzdGFydCk7IH0KICAgIHN0cnN0cmVhbWJ1Zihjb25zdCBjaGFyICpwdHIsIGludCBz
aXplKQoJeyBpbml0X3JlYWRvbmx5KHB0ciwgc2l6ZSk7IH0KICAgIHN0cnN0cmVhbWJ1Zihjb25z
dCB1bnNpZ25lZCBjaGFyICpwdHIsIGludCBzaXplKQoJeyBpbml0X3JlYWRvbmx5KChjb25zdCBj
aGFyKilwdHIsIHNpemUpOyB9CiAgICBzdHJzdHJlYW1idWYoc2lnbmVkIGNoYXIgKnB0ciwgaW50
IHNpemUsIHNpZ25lZCBjaGFyICpwc3RhcnQgPSBfX251bGwgKQoJeyBpbml0X3N0YXRpYygoY2hh
ciopcHRyLCBzaXplLCAoY2hhciopcHN0YXJ0KTsgfQogICAgc3Ryc3RyZWFtYnVmKGNvbnN0IHNp
Z25lZCBjaGFyICpwdHIsIGludCBzaXplKQoJeyBpbml0X3JlYWRvbmx5KChjb25zdCBjaGFyKilw
dHIsIHNpemUpOyB9CiAgICAgCiAgICBpbnQgZnJvemVuKCkgeyByZXR1cm4gX2ZsYWdzICYgMSAg
PyAxIDogMDsgfQogICAgdm9pZCBmcmVlemUoaW50IG49MSkKCXsgaWYgKCgoIHRoaXMgKS0+X3Mu
X2FsbG9jYXRlX2J1ZmZlciAhPSAoX0lPX2FsbG9jX3R5cGUpMCkgKQoJICAgIHsgaWYgKG4pIF9m
bGFncyB8PSAxIDsgZWxzZSBfZmxhZ3MgJj0gfjEgOyB9IH0KICAgIF9HX3NzaXplX3QgIHBjb3Vu
dCgpOwogICAgY2hhciAqc3RyKCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVh
bW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKfTsKCmNsYXNzIHN0
cnN0cmVhbWJhc2UgOiB2aXJ0dWFsIHB1YmxpYyBpb3MgewogIHByb3RlY3RlZDoKICAgIHN0cnN0
cmVhbWJ1ZiBfX215X3NiOwogIHB1YmxpYzoKICAgIHN0cnN0cmVhbWJ1ZiogcmRidWYoKSB7IHJl
dHVybiAmX19teV9zYjsgfQogIHByb3RlY3RlZDoKICAgIHN0cnN0cmVhbWJhc2UoKSB7IGluaXQg
KCZfX215X3NiKTsgfQogICAgc3Ryc3RyZWFtYmFzZShjaGFyICpjcCwgaW50IG4sIGludCBtb2Rl
PWlvczo6b3V0KTsKfTsKCmNsYXNzIGlzdHJzdHJlYW0gOiBwdWJsaWMgc3Ryc3RyZWFtYmFzZSwg
cHVibGljIGlzdHJlYW0gewogIHB1YmxpYzoKICAgIGlzdHJzdHJlYW0oY29uc3QgY2hhciosIGlu
dD0wKTsKfTsKCmNsYXNzIG9zdHJzdHJlYW0gOiBwdWJsaWMgc3Ryc3RyZWFtYmFzZSwgcHVibGlj
IG9zdHJlYW0gewogIHB1YmxpYzoKICAgIG9zdHJzdHJlYW0oKSB7IH0KICAgIG9zdHJzdHJlYW0o
Y2hhciAqY3AsIGludCBuLCBpbnQgbW9kZT1pb3M6Om91dCkgOnN0cnN0cmVhbWJhc2UoY3Asbixt
b2RlKXt9CiAgICBfR19zc2l6ZV90ICBwY291bnQoKSB7IHJldHVybiAoKHN0cnN0cmVhbWJ1Ziop
X3N0cmJ1ZiktPnBjb3VudCgpOyB9CiAgICBjaGFyICpzdHIoKSB7IHJldHVybiAoKHN0cnN0cmVh
bWJ1ZiopX3N0cmJ1ZiktPnN0cigpOyB9CiAgICB2b2lkIGZyZWV6ZShpbnQgbiA9IDEpIHsgKChz
dHJzdHJlYW1idWYqKV9zdHJidWYpLT5mcmVlemUobik7IH0KICAgIGludCBmcm96ZW4oKSB7IHJl
dHVybiAoKHN0cnN0cmVhbWJ1ZiopX3N0cmJ1ZiktPmZyb3plbigpOyB9Cn07CgpjbGFzcyBzdHJz
dHJlYW0gOiBwdWJsaWMgc3Ryc3RyZWFtYmFzZSwgcHVibGljIGlvc3RyZWFtIHsKICBwdWJsaWM6
CiAgc3Ryc3RyZWFtKCkgeyB9CiAgICBzdHJzdHJlYW0oY2hhciAqY3AsIGludCBuLCBpbnQgbW9k
ZT1pb3M6Om91dCkgOnN0cnN0cmVhbWJhc2UoY3Asbixtb2RlKXt9CiAgICBfR19zc2l6ZV90ICBw
Y291bnQoKSB7IHJldHVybiAoKHN0cnN0cmVhbWJ1ZiopX3N0cmJ1ZiktPnBjb3VudCgpOyB9CiAg
ICBjaGFyICpzdHIoKSB7IHJldHVybiAoKHN0cnN0cmVhbWJ1ZiopX3N0cmJ1ZiktPnN0cigpOyB9
CiAgICB2b2lkIGZyZWV6ZShpbnQgbiA9IDEpIHsgKChzdHJzdHJlYW1idWYqKV9zdHJidWYpLT5m
cmVlemUobik7IH0KICAgIGludCBmcm96ZW4oKSB7IHJldHVybiAoKHN0cnN0cmVhbWJ1ZiopX3N0
cmJ1ZiktPmZyb3plbigpOyB9Cn07Cn0gIAoKCiMgMjkgInBhZ2VyLmgiIDIKCgoKCgoKY2xhc3MK
b2N0YXZlX3BhZ2VyX2J1ZiA6IHB1YmxpYyBzdHJzdHJlYW1idWYKewpwdWJsaWM6CgogIG9jdGF2
ZV9wYWdlcl9idWYgKGludCBzaXplID0gMCkgOiBzdHJzdHJlYW1idWYgKHNpemUpIHsgfQoKcHJv
dGVjdGVkOgoKICBpbnQgc3luYyAodm9pZCk7Cn07CgpjbGFzcwpvY3RhdmVfcGFnZXJfc3RyZWFt
IDogcHVibGljIG9zdHJlYW0Kewpwcm90ZWN0ZWQ6CgogIG9jdGF2ZV9wYWdlcl9zdHJlYW0gKHZv
aWQpOwoKcHVibGljOgoKICB+b2N0YXZlX3BhZ2VyX3N0cmVhbSAodm9pZCk7CgogIHN0YXRpYyBv
Y3RhdmVfcGFnZXJfc3RyZWFtJiBzdHJlYW0gKHZvaWQpOwoKcHJpdmF0ZToKCiAgc3RhdGljIG9j
dGF2ZV9wYWdlcl9zdHJlYW0gKmluc3RhbmNlOwoKICBvY3RhdmVfcGFnZXJfYnVmICpwYjsKCiAg
IAoKICBvY3RhdmVfcGFnZXJfc3RyZWFtIChjb25zdCBvY3RhdmVfcGFnZXJfc3RyZWFtJik7Cgog
IG9jdGF2ZV9wYWdlcl9zdHJlYW0mIG9wZXJhdG9yID0gKGNvbnN0IG9jdGF2ZV9wYWdlcl9zdHJl
YW0mKTsKfTsKCmNsYXNzCm9jdGF2ZV9kaWFyeV9idWYgOiBwdWJsaWMgc3Ryc3RyZWFtYnVmCnsK
cHVibGljOgoKICBvY3RhdmVfZGlhcnlfYnVmIChpbnQgc2l6ZSA9IDApIDogc3Ryc3RyZWFtYnVm
IChzaXplKSB7IH0KCnByb3RlY3RlZDoKCiAgaW50IHN5bmMgKHZvaWQpOwp9OwoKY2xhc3MKb2N0
YXZlX2RpYXJ5X3N0cmVhbSA6IHB1YmxpYyBvc3RyZWFtCnsKcHJvdGVjdGVkOgoKICBvY3RhdmVf
ZGlhcnlfc3RyZWFtICh2b2lkKTsKCnB1YmxpYzoKCiAgfm9jdGF2ZV9kaWFyeV9zdHJlYW0gKHZv
aWQpOwoKICBzdGF0aWMgb2N0YXZlX2RpYXJ5X3N0cmVhbSYgc3RyZWFtICh2b2lkKTsKCnByaXZh
dGU6CgogIHN0YXRpYyBvY3RhdmVfZGlhcnlfc3RyZWFtICppbnN0YW5jZTsKCiAgb2N0YXZlX2Rp
YXJ5X2J1ZiAqZGI7CgogICAKCiAgb2N0YXZlX2RpYXJ5X3N0cmVhbSAoY29uc3Qgb2N0YXZlX2Rp
YXJ5X3N0cmVhbSYpOwoKICBvY3RhdmVfZGlhcnlfc3RyZWFtJiBvcGVyYXRvciA9IChjb25zdCBv
Y3RhdmVfZGlhcnlfc3RyZWFtJik7Cn07CgoKCgoKZXh0ZXJuIHZvaWQgZmx1c2hfb2N0YXZlX3N0
ZG91dCAodm9pZCk7CgpleHRlcm4gdm9pZCBzeW1ib2xzX29mX3BhZ2VyICh2b2lkKTsKCgoKIAoK
CgoKIyA0NCAic2lnaGFuZGxlcnMuY2MiIDIKCiMgMSAic2lnaGFuZGxlcnMuaCIgMQogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCiMgMSAiLi4vbGlib2N0YXZlL0FycmF5LmgiIDEKIAogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgoKCmNsYXNzIGlkeF92
ZWN0b3I7CgogCiAKCgoKCgogCiAKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBBcnJheQp7CnBy
aXZhdGU6CgogCgogIGNsYXNzIEFycmF5UmVwCiAgewogIHB1YmxpYzoKCiAgICBUICpkYXRhOwog
ICAgaW50IGxlbjsKICAgIGludCBjb3VudDsKCiAgICBBcnJheVJlcCYgb3BlcmF0b3IgPSAoY29u
c3QgQXJyYXlSZXAmIGEpOwoKICAgIEFycmF5UmVwIChUICpkLCBpbnQgbCkgOiBkYXRhIChkKSwg
bGVuIChsKSwgY291bnQgKDEpIHsgfQoKICAgIEFycmF5UmVwICh2b2lkKSA6IGRhdGEgKDApLCBs
ZW4gKDApLCBjb3VudCAoMSkgeyB9CgogICAgQXJyYXlSZXAgKGludCBuKSA6IGRhdGEgKG5ldyBU
IFtuXSksIGxlbiAobiksIGNvdW50ICgxKSB7IH0KCiAgICBBcnJheVJlcCAoY29uc3QgQXJyYXlS
ZXAmIGEpCiAgICAgIDogZGF0YSAobmV3IFQgW2EubGVuXSksIGxlbiAoYS5sZW4pLCBjb3VudCAo
MSkKCXsKCSAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykKCSAgICBkYXRhW2ldID0gYS5k
YXRhW2ldOwoJfQoKICAgIH5BcnJheVJlcCAodm9pZCkgeyBkZWxldGUgW10gZGF0YTsgfQoKICAg
IGludCBsZW5ndGggKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGxlbjsgfQoKICAgIFQmIGVsZW0gKGlu
dCBuKSB7IHJldHVybiBkYXRhW25dOyB9CgogICAgVCBlbGVtIChpbnQgbikgY29uc3QgeyByZXR1
cm4gZGF0YVtuXTsgfQoKICAgIHZvaWQgcXNvcnQgKGludCAoKmNvbXBhcmUpIChjb25zdCB2b2lk
ICosIGNvbnN0IHZvaWQgKikpCiAgICAgIHsKCTo6cXNvcnQgKGRhdGEsIGxlbiwgc2l6ZW9mIChU
KSwgY29tcGFyZSk7CiAgICAgIH0KICB9OwoKICB2b2lkIG1ha2VfdW5pcXVlICh2b2lkKQogICAg
ewogICAgICBpZiAocmVwLT5jb3VudCA+IDEpCgl7CgkgIC0tcmVwLT5jb3VudDsKCSAgcmVwID0g
bmV3IEFycmF5UmVwICgqcmVwKTsKCX0KICAgIH0KCgogIGlkeF92ZWN0b3IgKmlkeDsKICBpbnQg
bWF4X2luZGljZXM7CiAgaW50IGlkeF9jb3VudDsKCgpwcm90ZWN0ZWQ6CgogIEFycmF5UmVwICpy
ZXA7CgogIEFycmF5IChUICpkLCBpbnQgbCkKICAgIHsKICAgICAgcmVwID0gbmV3IEFycmF5UmVw
IChkLCBsKTsKCgogICAgICBpZHggPSAwOwogICAgICBtYXhfaW5kaWNlcyA9IDE7CiAgICAgIGlk
eF9jb3VudCA9IDA7CgogICAgfQoKcHVibGljOgoKICBBcnJheSAodm9pZCkKICAgIHsKICAgICAg
cmVwID0gbmV3IEFycmF5UmVwICgpOwoKCiAgICAgIGlkeCA9IDA7CiAgICAgIG1heF9pbmRpY2Vz
ID0gMTsKICAgICAgaWR4X2NvdW50ID0gMDsKCiAgICB9CgogIEFycmF5IChpbnQgbikKICAgIHsK
ICAgICAgcmVwID0gbmV3IEFycmF5UmVwIChuKTsKCgogICAgICBpZHggPSAwOwogICAgICBtYXhf
aW5kaWNlcyA9IDE7CiAgICAgIGlkeF9jb3VudCA9IDA7CgogICAgfQoKICBBcnJheSAoaW50IG4s
IGNvbnN0IFQmIHZhbCk7CgogIEFycmF5IChjb25zdCBBcnJheTxUPiYgYSkKICAgIHsKICAgICAg
cmVwID0gYS5yZXA7CiAgICAgIHJlcC0+Y291bnQrKzsKCgogICAgICBtYXhfaW5kaWNlcyA9IGEu
bWF4X2luZGljZXM7CiAgICAgIGlkeF9jb3VudCA9IDA7CiAgICAgIGlkeCA9IDA7CgogICAgfQoK
ICB+QXJyYXkgKHZvaWQpOwoKICBBcnJheTxUPiYgb3BlcmF0b3IgPSAoY29uc3QgQXJyYXk8VD4m
IGEpOwoKICBpbnQgY2FwYWNpdHkgKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHJlcC0+bGVuZ3RoICgp
OyB9CiAgaW50IGxlbmd0aCAodm9pZCkgY29uc3QgeyByZXR1cm4gcmVwLT5sZW5ndGggKCk7IH0K
CiAgIAoKICBUJiB4ZWxlbSAoaW50IG4pIHsgcmV0dXJuIHJlcC0+ZWxlbSAobik7IH0KICBUIHhl
bGVtIChpbnQgbikgY29uc3QgeyByZXR1cm4gcmVwLT5lbGVtIChuKTsgfQoKICAgCiAgIAogICAK
CiAgVCYgY2hlY2tlbGVtIChpbnQgbikKICAgIHsKICAgICAgaWYgKG4gPCAwIHx8IG4gPj0gcmVw
LT5sZW5ndGggKCkpCglyZXR1cm4gcmFuZ2VfZXJyb3IgKCJUJiBBcnJheTxUPjo6Y2hlY2tlbGVt
Iiwgbik7CiAgICAgIGVsc2UKCXsKCSAgbWFrZV91bmlxdWUgKCk7CgkgIHJldHVybiB4ZWxlbSAo
bik7Cgl9CiAgICB9CgogIFQmIGVsZW0gKGludCBuKQogICAgewogICAgICBtYWtlX3VuaXF1ZSAo
KTsKICAgICAgcmV0dXJuIHhlbGVtIChuKTsKICAgIH0KCgoKCiAgVCYgb3BlcmF0b3IgKCkgKGlu
dCBuKSB7IHJldHVybiBlbGVtIChuKTsgfQoKCiAgVCBjaGVja2VsZW0gKGludCBuKSBjb25zdAog
ICAgewogICAgICBpZiAobiA8IDAgfHwgbiA+PSByZXAtPmxlbmd0aCAoKSkKCXJldHVybiByYW5n
ZV9lcnJvciAoIlQgQXJyYXk8VD46OmNoZWNrZWxlbSIsIG4pOwogICAgICBlbHNlCglyZXR1cm4g
eGVsZW0gKG4pOwogICAgfQoKICBUIGVsZW0gKGludCBuKSBjb25zdCB7IHJldHVybiB4ZWxlbSAo
bik7IH0KCgoKCiAgVCBvcGVyYXRvciAoKSAoaW50IG4pIGNvbnN0IHsgcmV0dXJuIGVsZW0gKG4p
OyB9CgoKICB2b2lkIHJlc2l6ZSAoaW50IG4pOwogIHZvaWQgcmVzaXplIChpbnQgbiwgY29uc3Qg
VCYgdmFsKTsKCiAgY29uc3QgVCAqZGF0YSAodm9pZCkgY29uc3QgeyByZXR1cm4gcmVwLT5kYXRh
OyB9CgogIFQgKmZvcnRyYW5fdmVjICh2b2lkKTsKCiAgQXJyYXk8VD4mIHFzb3J0IChpbnQgKCpj
b21wYXJlKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQogICAgewogICAgICBtYWtlX3Vu
aXF1ZSAoKTsKCiAgICAgIHJlcC0+cXNvcnQgKGNvbXBhcmUpOwoKICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICBUIHJhbmdlX2Vycm9yIChjb25zdCBjaGFyICpmY24sIGludCBuKSBjb25zdDsK
ICBUJiByYW5nZV9lcnJvciAoY29uc3QgY2hhciAqZmNuLCBpbnQgbik7CgoKICB2b2lkIHNldF9t
YXhfaW5kaWNlcyAoaW50IG1pKSB7IG1heF9pbmRpY2VzID0gbWk7IH0KCiAgdm9pZCBjbGVhcl9p
bmRleCAodm9pZCk7CgogIHZvaWQgc2V0X2luZGV4IChjb25zdCBpZHhfdmVjdG9yJiBpKTsKCiAg
aW50IGluZGV4X2NvdW50ICh2b2lkKSBjb25zdCB7IHJldHVybiBpZHhfY291bnQ7IH0KCiAgaWR4
X3ZlY3RvciAqZ2V0X2lkeCAodm9pZCkgY29uc3QgeyByZXR1cm4gaWR4OyB9CgogIHZvaWQgbWF5
YmVfZGVsZXRlX2VsZW1lbnRzIChpZHhfdmVjdG9yJiBpKTsKCiAgQXJyYXk8VD4gdmFsdWUgKHZv
aWQpOwoKICBBcnJheTxUPiBpbmRleCAoaWR4X3ZlY3RvciYgaSkgY29uc3Q7Cgp9OwoKdGVtcGxh
dGUgPGNsYXNzIExULCBjbGFzcyBSVD4KaW50IGFzc2lnbiAoQXJyYXk8TFQ+JiBsaHMsIGNvbnN0
IEFycmF5PFJUPiYgcmhzKTsKCgoKIAoKCgoKIyAyOCAic2lnaGFuZGxlcnMuaCIgMgoKCiMgMSAi
c3lzd2FpdC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIyAxICIv
dXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMSAzCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgojaWRlbnQg
ICIkUmV2aXNpb246IDEuNDYgJCIKCgpleHRlcm4gIkMiIHsKCgogCgoKCgogCgoKCgoKCgoKCiAK
CgoKCnR5cGVkZWYgdW5pb24gd2FpdAl7CglpbnQJd19zdGF0dXM7CQkgCgkgCgoKCXN0cnVjdCB7
CgoKCgoKCgoJCXVuc2lnbmVkIGludAl3X0ZpbGxlcjoxNiwJIAoJCQkJd19SZXRjb2RlOjgsCSAK
CQkJCXdfQ29yZWR1bXA6MSwJIAoJCQkJd19UZXJtc2lnOjc7CSAKCgl9IHdfVDsKCSAKCgoKCglz
dHJ1Y3QgewoKCgoKCgoJCXVuc2lnbmVkIGludAl3X0ZpbGxlcjoxNiwJIAoJCQkJd19TdG9wc2ln
OjgsCSAKCQkJCXdfU3RvcHZhbDo4OwkgCgoJfSB3X1M7Cn0gd2FpdF90OwoKCgoKCgoKCgoKCgoK
IAoKCiAKCgoKCgoKCgoKCiMgMTIyICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMwoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5o
IiAxIDMKIAoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCiAKCgoKCnN0cnVjdCB0aW1ldmFs
IHsKCgoKICAgICAgICB0aW1lX3QgIHR2X3NlYzsgICAgICAgICAgCiAgICAgICAgbG9uZyAgICB0
dl91c2VjOyAgICAgICAgIAp9OwoKIAoKCgoKc3RydWN0IF9faXJpeDVfdGltZXZhbCB7CiAgICAg
ICAgX19pbnQzMl90ICAgIHR2X3NlYzsgICAgICAgICAgCiAgICAgICAgX19pbnQzMl90ICAgIHR2
X3VzZWM7ICAgICAgICAgCn07CgoKIAoKCgoKCgoKCgogCgoKCgoKCnN0cnVjdAlydXNhZ2UgewoJ
c3RydWN0IHRpbWV2YWwgcnVfdXRpbWU7CSAKCXN0cnVjdCB0aW1ldmFsIHJ1X3N0aW1lOwkgCgoK
Cglsb25nCXJ1X21heHJzczsKCglsb25nCXJ1X2l4cnNzOwkJIAoJbG9uZwlydV9pZHJzczsJCSAK
CWxvbmcJcnVfaXNyc3M7CQkgCglsb25nCXJ1X21pbmZsdDsJCSAKCWxvbmcJcnVfbWFqZmx0OwkJ
IAoJbG9uZwlydV9uc3dhcDsJCSAKCWxvbmcJcnVfaW5ibG9jazsJCSAKCWxvbmcJcnVfb3VibG9j
azsJCSAKCWxvbmcJcnVfbXNnc25kOwkJIAoJbG9uZwlydV9tc2dyY3Y7CQkgCglsb25nCXJ1X25z
aWduYWxzOwkJIAoJbG9uZwlydV9udmNzdzsJCSAKCWxvbmcJcnVfbml2Y3N3OwkJIAoKCn07Cgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBfX3VpbnQ2NF90
IHJsaW1fdDsKCgoKCnN0cnVjdCBybGltaXQgewoJcmxpbV90CXJsaW1fY3VyOwkJIAoJcmxpbV90
CXJsaW1fbWF4OwkJIAp9OwoKCnR5cGVkZWYgX191aW50NjRfdCBybGltNjRfdDsKCnN0cnVjdCBy
bGltaXQ2NCB7CglybGltNjRfdAlybGltX2N1cjsKCXJsaW02NF90CXJsaW1fbWF4OwkJCn07CQkK
CgojIDE2NiAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzCgoKZXh0ZXJuIGludCBnZXRy
bGltaXQoaW50LCBzdHJ1Y3QgcmxpbWl0ICopOwpleHRlcm4gaW50IHNldHJsaW1pdChpbnQsIGNv
bnN0IHN0cnVjdCBybGltaXQgKik7CmV4dGVybiBpbnQgZ2V0cHJpb3JpdHkoaW50LCBpZF90KTsK
ZXh0ZXJuIGludCBzZXRwcmlvcml0eShpbnQsIGlkX3QsIGludCk7CmV4dGVybiBpbnQgZ2V0cnVz
YWdlKGludCwgc3RydWN0IHJ1c2FnZSAqKTsKCgpleHRlcm4gaW50IGdldHJsaW1pdDY0KGludCwg
c3RydWN0IHJsaW1pdDY0ICopOwpleHRlcm4gaW50IHNldHJsaW1pdDY0KGludCwgY29uc3Qgc3Ry
dWN0IHJsaW1pdDY0ICopOwoKCgoKCn0KCgoKIyAxNTMgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5o
IiAyIDMKCgoKCgoKCgoKZXh0ZXJuIHBpZF90IHdhaXRwaWQocGlkX3QsIGludCAqLCBpbnQpOwoK
CgoKCmV4dGVybiBwaWRfdCB3YWl0KGludCAqKTsKCgoKCgoKZXh0ZXJuIHBpZF90IHdhaXQzKGlu
dCAqLCBpbnQsIHN0cnVjdCBydXNhZ2UgKik7CgpleHRlcm4gaW50IHdhaXRpZChpZHR5cGVfdCwg
aWRfdCwgc2lnaW5mb190ICosIGludCk7CgoKCgoKfQoKCgojIDM3ICJzeXN3YWl0LmgiIDIKCgoK
IyA0OSAic3lzd2FpdC5oIgoKCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIyAzMCAi
c2lnaGFuZGxlcnMuaCIgMgoKCiAKCgoKCgoKCiAKCgojIDUxICJzaWdoYW5kbGVycy5oIgoKCgoK
CgoKCgp0eXBlZGVmIHZvaWQgIHNpZ19oYW5kbGVyIChpbnQpOwoKIAoKc3RydWN0Cm9jdGF2ZV9p
bnRlcnJ1cHRfaGFuZGxlcgp7CgogIHNpZ19oYW5kbGVyICppbnRfaGFuZGxlcjsKCgoKCgp9OwoK
IAogCmV4dGVybiBpbnQgcGlwZV9oYW5kbGVyX2Vycm9yX2NvdW50OwoKIApleHRlcm4gaW50IGNh
bl9pbnRlcnJ1cHQ7CgpleHRlcm4gc2lnX2hhbmRsZXIgKm9jdGF2ZV9zZXRfc2lnbmFsX2hhbmRs
ZXIgKGludCwgc2lnX2hhbmRsZXIgKik7CgpleHRlcm4gdm9pZCBpbnN0YWxsX3NpZ25hbF9oYW5k
bGVycyAodm9pZCk7CgpleHRlcm4gb2N0YXZlX2ludGVycnVwdF9oYW5kbGVyIG9jdGF2ZV9jYXRj
aF9pbnRlcnJ1cHRzICh2b2lkKTsKCmV4dGVybiBvY3RhdmVfaW50ZXJydXB0X2hhbmRsZXIgb2N0
YXZlX2lnbm9yZV9pbnRlcnJ1cHRzICh2b2lkKTsKCmV4dGVybiBvY3RhdmVfaW50ZXJydXB0X2hh
bmRsZXIKb2N0YXZlX3NldF9pbnRlcnJ1cHRfaGFuZGxlciAoY29uc3Qgdm9sYXRpbGUgb2N0YXZl
X2ludGVycnVwdF9oYW5kbGVyJik7CgpleHRlcm4gdm9pZCBvY3RhdmVfc2F2ZV9zaWduYWxfbWFz
ayAodm9pZCk7CgpleHRlcm4gdm9pZCBvY3RhdmVfcmVzdG9yZV9zaWduYWxfbWFzayAodm9pZCk7
CgogCgogCgoKZXh0ZXJuIGNoYXIgKnN5c19zaWdsaXN0W107CgoKIAoKY2xhc3MKb2N0YXZlX2No
aWxkCnsKcHVibGljOgoKICB0eXBlZGVmIHZvaWQgKCpkZWFkX2NoaWxkX2hhbmRsZXIpIChwaWRf
dCwgaW50KTsKCiAgb2N0YXZlX2NoaWxkIChwaWRfdCBpZCA9IC0xLCBkZWFkX2NoaWxkX2hhbmRs
ZXIgZiA9IDApCiAgICA6IHBpZCAoaWQpLCBoYW5kbGVyIChmKSB7IH0KCiAgb2N0YXZlX2NoaWxk
IChjb25zdCBvY3RhdmVfY2hpbGQmIG9jKQogICAgOiBwaWQgKG9jLnBpZCksIGhhbmRsZXIgKG9j
LmhhbmRsZXIpIHsgfQoKICBvY3RhdmVfY2hpbGQmIG9wZXJhdG9yID0gKGNvbnN0IG9jdGF2ZV9j
aGlsZCYgb2MpCiAgICB7CiAgICAgIGlmICgmb2MgIT0gdGhpcykKCXsKCSAgcGlkID0gb2MucGlk
OwoJICBoYW5kbGVyID0gb2MuaGFuZGxlcjsKCX0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB+b2N0YXZlX2NoaWxkICh2b2lkKSB7IH0KCiAgIAogIHBpZF90IHBpZDsKCiAgIAogIGRlYWRf
Y2hpbGRfaGFuZGxlciBoYW5kbGVyOwp9OwoKY2xhc3MKb2N0YXZlX2NoaWxkX2xpc3QKewpwcm90
ZWN0ZWQ6CgogIG9jdGF2ZV9jaGlsZF9saXN0ICh2b2lkKSA6IGxpc3QgKDApLCBjdXJyX2xlbiAo
MCkgeyB9CgpwdWJsaWM6CgogIH5vY3RhdmVfY2hpbGRfbGlzdCAodm9pZCkgeyB9CgogIHN0YXRp
YyB2b2lkIGluc2VydCAocGlkX3QgcGlkLCBvY3RhdmVfY2hpbGQ6OmRlYWRfY2hpbGRfaGFuZGxl
ciBmKTsKCiAgc3RhdGljIHZvaWQgcmVtb3ZlIChwaWRfdCBwaWQpOwoKICBzdGF0aWMgaW50IGxl
bmd0aCAodm9pZCkgeyByZXR1cm4gaW5zdGFuY2UgPyBpbnN0YW5jZS0+Y3Vycl9sZW4gOiAwOyB9
CgogIHN0YXRpYyBvY3RhdmVfY2hpbGQmIGVsZW0gKGludCBpKQogICAgewogICAgICBzdGF0aWMg
b2N0YXZlX2NoaWxkIGZvbzsKCiAgICAgIGlmIChpbnN0YW5jZSkKCXsKCSAgaW50IG4gPSBsZW5n
dGggKCk7CgoJICBpZiAoaSA+PSAwICYmIGkgPCBuKQoJICAgIHJldHVybiBpbnN0YW5jZS0+bGlz
dCAoaSk7Cgl9CgogICAgICByZXR1cm4gZm9vOwogICAgfQoKcHJpdmF0ZToKCiAgQXJyYXk8b2N0
YXZlX2NoaWxkPiBsaXN0OwoKICBpbnQgY3Vycl9sZW47CgogIHN0YXRpYyBvY3RhdmVfY2hpbGRf
bGlzdCAqaW5zdGFuY2U7CgogIHZvaWQgZG9faW5zZXJ0IChwaWRfdCBwaWQsIG9jdGF2ZV9jaGls
ZDo6ZGVhZF9jaGlsZF9oYW5kbGVyIGYpOwoKICB2b2lkIGRvX3JlbW92ZSAocGlkX3QgcGlkKTsK
fTsKCgoKIAoKCgoKIyA0NSAic2lnaGFuZGxlcnMuY2MiIDIKCiMgMSAic3lzd2FpdC5oIiAxCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA3MyAic3lzd2FpdC5oIgoKCiAKCgoKCiMgNDYgInNpZ2hh
bmRsZXJzLmNjIiAyCgojIDEgInRvcGxldi5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgpjbGFzcyBvY3RhdmVfdmFsdWU7CmNsYXNzIG9jdGF2ZV92YWx1ZV9saXN0OwpjbGFzcyB0cmVl
X2Z1bmN0aW9uOwpjbGFzcyB0cmVlX3N0YXRlbWVudF9saXN0OwpjbGFzcyBjaGFyTWF0cml4OwoK
CgpleHRlcm4gdm9pZCBjbGVhbl91cF9mb3JfZXhpdCAodm9pZCk7CgpleHRlcm4gdm9pZCBjbGVh
bl91cF9hbmRfZXhpdCAoaW50KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkgOwoKZXh0
ZXJuIHZvaWQgcGFyc2VfYW5kX2V4ZWN1dGUgKEZJTEUgKmYsIGludCBwcmludCA9IDApOwoKZXh0
ZXJuIHZvaWQgcGFyc2VfYW5kX2V4ZWN1dGUgKGNvbnN0IHN0cmluZyYgcywgaW50IHByaW50ID0g
MCwKCQkJICAgICAgIGludCB2ZXJib3NlID0gMCwKCQkJICAgICAgIGNvbnN0IGNoYXIgKndhcm5f
Zm9yID0gMCk7CgpleHRlcm4gb2N0YXZlX3ZhbHVlIGV2YWxfc3RyaW5nIChjb25zdCBzdHJpbmcm
LCBpbnQgcHJpbnQsCgkJCQkgIGludCYgcGFyc2Vfc3RhdHVzKTsKCgpleHRlcm4gb2N0YXZlX3Zh
bHVlX2xpc3QKZmV2YWwgKGNvbnN0IHN0cmluZyYgbmFtZSwgY29uc3Qgb2N0YXZlX3ZhbHVlX2xp
c3QmIGFyZ3MsIGludCBuYXJnb3V0KTsKCmV4dGVybiBvY3RhdmVfdmFsdWVfbGlzdApmZXZhbCAo
Y29uc3Qgb2N0YXZlX3ZhbHVlX2xpc3QmIGFyZ3MsIGludCBuYXJnb3V0KTsKCmV4dGVybiBpbnQg
bWFpbl9sb29wICh2b2lkKTsKCmV4dGVybiB2b2lkIGRvX29jdGF2ZV9hdGV4aXQgKHZvaWQpOwoK
ZXh0ZXJuIHZvaWQgc3ltYm9sc19vZl90b3BsZXYgKHZvaWQpOwoKIApleHRlcm4gc3RyaW5nIFZw
cm9ncmFtX2ludm9jYXRpb25fbmFtZTsKCiAKZXh0ZXJuIHN0cmluZyBWcHJvZ3JhbV9uYW1lOwoK
IApleHRlcm4gc3RyaW5nIFZ1c2VyX25hbWU7CgogCmV4dGVybiBzdHJpbmcgVmhvc3RfbmFtZTsK
CiAKZXh0ZXJuIHN0cmluZyBWaG9tZV9kaXJlY3Rvcnk7CgogCmV4dGVybiBpbnQgdXNpbmdfcmVh
ZGxpbmU7CgogCmV4dGVybiBpbnQgcmVhZGluZ19zdGFydHVwX21lc3NhZ2VfcHJpbnRlZDsKCiAK
ZXh0ZXJuIGludCBjdXJyZW50X2NvbW1hbmRfbnVtYmVyOwoKIApleHRlcm4gaW50IHF1aXR0aW5n
X2dyYWNlZnVsbHk7CgogCmV4dGVybiB0cmVlX3N0YXRlbWVudF9saXN0ICpnbG9iYWxfY29tbWFu
ZDsKCiAKZXh0ZXJuIHRyZWVfZnVuY3Rpb24gKmN1cnJfZnVuY3Rpb247CgogCmV4dGVybiBpbnQg
aW5wdXRfZnJvbV9zdGFydHVwX2ZpbGU7CgogCiAKZXh0ZXJuIGludCBpbnB1dF9mcm9tX2NvbW1h
bmRfbGluZV9maWxlOwoKCgogCgoKCgojIDQ3ICJzaWdoYW5kbGVycy5jYyIgMgoKIyAxICJ1dGls
cy5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgaXN0cmVhbTsKY2xhc3Mgb3N0
cnN0cmVhbTsKCgoKIyAxICIuLi9saWJvY3RhdmUvbG8tdXRpbHMuaCIgMQogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgTklOVCAoZG91YmxlIHgpOwpleHRlcm4gZG91YmxlIERf
TklOVCAoZG91YmxlIHgpOwoKCgogCgoKCgojIDMxICJ1dGlscy5oIiAyCgoKY2xhc3Mgb2N0YXZl
X3ZhbHVlX2xpc3Q7CmNsYXNzIHN0cmluZ192ZWN0b3I7CgpleHRlcm4gY2hhciAqc3Ryc2F2ZSAo
Y29uc3QgY2hhciAqKTsKCmV4dGVybiBzdHJpbmcgc2VhcmNoX3BhdGhfZm9yX2ZpbGUgKGNvbnN0
IHN0cmluZyYsIGNvbnN0IHN0cmluZyYpOwpleHRlcm4gc3RyaW5nIGZpbGVfaW5fcGF0aCAoY29u
c3Qgc3RyaW5nJiwgY29uc3Qgc3RyaW5nJik7CmV4dGVybiBzdHJpbmcgZmNuX2ZpbGVfaW5fcGF0
aCAoY29uc3Qgc3RyaW5nJik7CmV4dGVybiBzdHJpbmcgb2N0X2ZpbGVfaW5fcGF0aCAoY29uc3Qg
c3RyaW5nJik7CgpleHRlcm4gIkMiIHZvaWQganVtcF90b190b3BfbGV2ZWwgKHZvaWQpIF9fYXR0
cmlidXRlX18gKChfX25vcmV0dXJuX18pKSA7CgpleHRlcm4gaW50IGFsbW9zdF9tYXRjaCAoY29u
c3Qgc3RyaW5nJiBzdGQsIGNvbnN0IHN0cmluZyYgcywKCQkJIGludCBtaW5fbWF0Y2hfbGVuID0g
MSwgaW50IGNhc2Vfc2VucyA9IDEpOwoKZXh0ZXJuIGludAprZXl3b3JkX2FsbW9zdF9tYXRjaCAo
Y29uc3QgY2hhciAqKnN0ZCwgaW50ICptaW5fbGVuLAoJCSAgICAgIGNvbnN0IHN0cmluZyYgcywg
aW50IG1pbl90b2tzX3RvX21hdGNoLAoJCSAgICAgIGludCBtYXhfdG9rcyk7CgpleHRlcm4gaW50
IGVtcHR5X2FyZyAoY29uc3QgY2hhciAqbmFtZSwgaW50IG5yLCBpbnQgbmMpOwoKZXh0ZXJuIGNv
bnN0IGNoYXIgKnVuZG9fc3RyaW5nX2VzY2FwZSAoY2hhciBjKTsKCmV4dGVybiBzdHJpbmcgZG9f
c3RyaW5nX2VzY2FwZXMgKGNvbnN0IHN0cmluZyYgcyk7CgpleHRlcm4gc3RyaW5nIHVuZG9fc3Ry
aW5nX2VzY2FwZXMgKGNvbnN0IHN0cmluZyYgcyk7CgpleHRlcm4gdm9pZCBvY3RfcHV0ZW52IChj
b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgpleHRlcm4gaW50IGNoZWNrX3ByZWZlcmVuY2Ug
KGNvbnN0IHN0cmluZyYgdmFyKTsKCmV4dGVybiAiQyIgdm9pZCBvY3RhdmVfdXNsZWVwICh1bnNp
Z25lZCBpbnQgdXNlY29uZHMpOwoKZXh0ZXJuICJDIiBpbnQgb2N0YXZlX3N0cmNhc2VjbXAgKGNv
bnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMik7CgpleHRlcm4gIkMiIGludCBvY3RhdmVfc3Ry
bmNhc2VjbXAgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pOwoKCgog
CgoKCgojIDQ4ICJzaWdoYW5kbGVycy5jYyIgMgoKCiAKIAppbnQgcGlwZV9oYW5kbGVyX2Vycm9y
X2NvdW50ID0gMDsKCiAKaW50IGNhbl9pbnRlcnJ1cHQgPSAwOwoKIAogCiAKIAogCiAKIAoKCnN0
YXRpYyBzaWdzZXRfdCBvY3RhdmVfc2lnbmFsX21hc2s7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCnZvaWQKb2N0YXZlX3NhdmVfc2lnbmFsX21hc2sgKHZvaWQpCnsKCiAgc2lncHJvY21h
c2sgKDAsIDAsICZvY3RhdmVfc2lnbmFsX21hc2spOwoKfQoKdm9pZApvY3RhdmVfcmVzdG9yZV9z
aWduYWxfbWFzayAodm9pZCkKewoKICBzaWdwcm9jbWFzayAoMyAsICZvY3RhdmVfc2lnbmFsX21h
c2ssIDApOwoKfQoKc3RhdGljIHZvaWQKbXlfZnJpZW5kbHlfZXhpdCAoY29uc3QgY2hhciAqc2ln
X25hbWUsIGludCBzaWdfbnVtYmVyKQp7CiAgc3RhdGljIGJvb2wgYmVlbl90aGVyZV9kb25lX3Ro
YXQgPSBmYWxzZTsKCiAgaWYgKGJlZW5fdGhlcmVfZG9uZV90aGF0KQogICAgewoKICAgICAgb2N0
YXZlX3NldF9zaWduYWxfaGFuZGxlciAoNiAsICgoU0lHX1BGKTBMKSApOwoKCiAgICAgIGNlcnIg
PDwgImVycm9yOiBhdHRlbXB0ZWQgY2xlYW4gdXAgYXBwYXJlbnRseSBmYWlsZWQgLS0gYWJvcnRp
bmcuLi5cbiI7CgogICAgICBhYm9ydCAoKTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIGJlZW5f
dGhlcmVfZG9uZV90aGF0ID0gdHJ1ZTsKCiAgICAgIGNlcnIgPDwgImVycm9yOiAiIDw8IHNpZ19u
YW1lIDw8ICIgLS0gc3RvcHBpbmcgbXlzZWxmLi4uXG4iOwoKICAgICAgc2F2ZV91c2VyX3Zhcmlh
YmxlcyAoKTsKCiAgICAgIGNsZWFuX3VwX2Zvcl9leGl0ICgpOwoKICAgICAgaWYgKHNpZ19udW1i
ZXIgPCAwKQoJZXhpdCAoMSk7CiAgICAgIGVsc2UKCXsKCSAgb2N0YXZlX3NldF9zaWduYWxfaGFu
ZGxlciAoc2lnX251bWJlciwgKChTSUdfUEYpMEwpICk7CgoJICBraWxsIChnZXRwaWQgKCksIHNp
Z19udW1iZXIpOwoJfQogICAgfQp9CgogCgpzdGF0aWMgdm9pZApvY3RhdmVfbmV3X2hhbmRsZXIg
KHZvaWQpCnsKICBjZXJyIDw8ICJlcnJvcjogbWVtb3J5IGV4aGF1c3RlZCAtLSB0cnlpbmcgdG8g
cmV0dXJuIHRvIHByb21wdFxuIjsKCiAgaWYgKGNhbl9pbnRlcnJ1cHQpCiAgICB7CiAgICAgIGp1
bXBfdG9fdG9wX2xldmVsICgpOwogICAgICBwYW5pYyAoImltcG9zc2libGUgc3RhdGUgcmVhY2hl
ZCBpbiBmaWxlIGAlcycgYXQgbGluZSAlZCIsICJzaWdoYW5kbGVycy5jYyIsIDE1OSkgOwogICAg
fQogIGVsc2UKICAgIG15X2ZyaWVuZGx5X2V4aXQgKCJvcGVyYXRvciBuZXciLCA2ICApOwp9Cgpz
aWdfaGFuZGxlciAqCm9jdGF2ZV9zZXRfc2lnbmFsX2hhbmRsZXIgKGludCBzaWcsIHNpZ19oYW5k
bGVyICpoYW5kbGVyKQp7CgogIHN0cnVjdCBzaWdhY3Rpb24gYWN0LCBvYWN0OwogIGFjdC4gc2Ff
c2lnaGFuZGxlci5zYV9oYW5kbGVyMSAgPSBoYW5kbGVyOwogIGFjdC5zYV9mbGFncyA9IDA7CiAg
c2lnZW1wdHlzZXQgKCZhY3Quc2FfbWFzayk7CiAgc2lnZW1wdHlzZXQgKCZvYWN0LnNhX21hc2sp
OwogIHNpZ2FjdGlvbiAoc2lnLCAmYWN0LCAmb2FjdCk7CiAgcmV0dXJuIG9hY3QuIHNhX3NpZ2hh
bmRsZXIuc2FfaGFuZGxlcjEgOwoKCgp9CgpzdGF0aWMgdm9pZCAKZ2VuZXJpY19zaWdfaGFuZGxl
ciAoaW50IHNpZykKewogIG15X2ZyaWVuZGx5X2V4aXQgKHN5c19zaWdsaXN0W3NpZ10sIHNpZyk7
CgogIHJldHVybiA7Cn0KCiAKCnN0YXRpYyB2b2lkIApzaWdjaGxkX2hhbmRsZXIgKGludCAgKQp7
CiAgdm9sYXRpbGUgb2N0YXZlX2ludGVycnVwdF9oYW5kbGVyIHNhdmVkX2ludGVycnVwdF9oYW5k
bGVyCiAgICAgPSBvY3RhdmVfaWdub3JlX2ludGVycnVwdHMgKCk7CgogICAKICAgCiAgIAoKCgoK
CgogIHNpZ3NldF90IHNldCwgb3NldDsKCiAgZG8geyBzaWdlbXB0eXNldCAoJiAgIHNldCAgKTsg
c2lnYWRkc2V0ICgmICAgc2V0ICAsICAxOCAgKTsgc2lnZW1wdHlzZXQgKCYgICAgb3NldCAgKTsg
c2lncHJvY21hc2sgKDEgLCAmICAgc2V0ICAsICYgICAgb3NldCAgKTsgfSB3aGlsZSAoMCkgIDsK
CiAgaW50IG4gPSBvY3RhdmVfY2hpbGRfbGlzdDo6bGVuZ3RoICgpOwoKICBmb3IgKGludCBpID0g
MDsgaSA8IG47IGkrKykKICAgIHsKICAgICAgb2N0YXZlX2NoaWxkJiBlbHQgPSBvY3RhdmVfY2hp
bGRfbGlzdDo6ZWxlbSAoaSk7CgogICAgICBwaWRfdCBwaWQgPSBlbHQucGlkOwoKICAgICAgaWYg
KHBpZCA+IDApCgl7CgkgIGludCBzdGF0dXM7CgoJICBpZiAod2FpdHBpZCAocGlkLCAmc3RhdHVz
LCAwMTAwICkgPiAwKQoJICAgIHsKCSAgICAgIGVsdC5waWQgPSAtMTsKCgkgICAgICBvY3RhdmVf
Y2hpbGQ6OmRlYWRfY2hpbGRfaGFuZGxlciBmID0gZWx0LmhhbmRsZXI7CgoJICAgICAgaWYgKGYp
CgkJZiAocGlkLCBzdGF0dXMpOwoKCSAgICAgIGJyZWFrOwoJICAgIH0KCX0KICAgIH0KCiAgb2N0
YXZlX3NldF9pbnRlcnJ1cHRfaGFuZGxlciAoc2F2ZWRfaW50ZXJydXB0X2hhbmRsZXIpOwoKICBz
aWdwcm9jbWFzayAoMyAsICYgb3NldCAsIDApIDsKCgoKCgogIGRvIHsgfSB3aGlsZSAoMCkgOwoK
ICBkbyB7IH0gd2hpbGUgKDApIDsKCiAgcmV0dXJuIDsKfQoKIyAyNjkgInNpZ2hhbmRsZXJzLmNj
IgoKCiMgMjg5ICJzaWdoYW5kbGVycy5jYyIKCgogCiAKIAogCiAKCnN0YXRpYyB2b2lkIApzaWdp
bnRfaGFuZGxlciAoaW50IHNpZykKewogIGRvIHsgfSB3aGlsZSAoMCkgOwoKICBkbyB7IH0gd2hp
bGUgKDApIDsKCiAgaWYgKGNhbl9pbnRlcnJ1cHQpCiAgICB7CiAgICAgIGp1bXBfdG9fdG9wX2xl
dmVsICgpOwogICAgICBwYW5pYyAoImltcG9zc2libGUgc3RhdGUgcmVhY2hlZCBpbiBmaWxlIGAl
cycgYXQgbGluZSAlZCIsICJzaWdoYW5kbGVycy5jYyIsIDMwNykgOwogICAgfQoKICByZXR1cm4g
Owp9CgpzdGF0aWMgdm9pZCAKc2lncGlwZV9oYW5kbGVyIChpbnQgICkKewogIGRvIHsgfSB3aGls
ZSAoMCkgOwoKICBkbyB7IH0gd2hpbGUgKDApIDsKCiAgaWYgKHBpcGVfaGFuZGxlcl9lcnJvcl9j
b3VudCsrID09IDApCiAgICBjZXJyIDw8ICJ3YXJuaW5nOiBicm9rZW4gcGlwZVxuIjsKCiAgIAoK
ICBpZiAocGlwZV9oYW5kbGVyX2Vycm9yX2NvdW50ICA+IDEwMCkKICAgIGp1bXBfdG9fdG9wX2xl
dmVsICgpOwoKICByZXR1cm4gOwp9CgpvY3RhdmVfaW50ZXJydXB0X2hhbmRsZXIKb2N0YXZlX2Nh
dGNoX2ludGVycnVwdHMgKHZvaWQpCnsKICBvY3RhdmVfaW50ZXJydXB0X2hhbmRsZXIgcmV0dmFs
OwoKCiAgcmV0dmFsLmludF9oYW5kbGVyID0gb2N0YXZlX3NldF9zaWduYWxfaGFuZGxlciAoMiAs
IHNpZ2ludF9oYW5kbGVyKTsKCgoKCgoKICByZXR1cm4gcmV0dmFsOwp9CgpvY3RhdmVfaW50ZXJy
dXB0X2hhbmRsZXIKb2N0YXZlX2lnbm9yZV9pbnRlcnJ1cHRzICh2b2lkKQp7CiAgb2N0YXZlX2lu
dGVycnVwdF9oYW5kbGVyIHJldHZhbDsKCgogIHJldHZhbC5pbnRfaGFuZGxlciA9IG9jdGF2ZV9z
ZXRfc2lnbmFsX2hhbmRsZXIgKDIgLCAoKFNJR19QRikxTCkgKTsKCgoKCgoKICByZXR1cm4gcmV0
dmFsOwp9CgpvY3RhdmVfaW50ZXJydXB0X2hhbmRsZXIKb2N0YXZlX3NldF9pbnRlcnJ1cHRfaGFu
ZGxlciAoY29uc3Qgdm9sYXRpbGUgb2N0YXZlX2ludGVycnVwdF9oYW5kbGVyJiBoKQp7CiAgb2N0
YXZlX2ludGVycnVwdF9oYW5kbGVyIHJldHZhbDsKCgogIHJldHZhbC5pbnRfaGFuZGxlciA9IG9j
dGF2ZV9zZXRfc2lnbmFsX2hhbmRsZXIgKDIgLCBoLmludF9oYW5kbGVyKTsKCgoKCgoKICByZXR1
cm4gcmV0dmFsOwp9CgogCgp2b2lkCmluc3RhbGxfc2lnbmFsX2hhbmRsZXJzICh2b2lkKQp7CiAg
c2V0X25ld19oYW5kbGVyIChvY3RhdmVfbmV3X2hhbmRsZXIpOwoKICBvY3RhdmVfY2F0Y2hfaW50
ZXJydXB0cyAoKTsKCgogIG9jdGF2ZV9zZXRfc2lnbmFsX2hhbmRsZXIgKDYgLCBnZW5lcmljX3Np
Z19oYW5kbGVyKTsKCgoKICBvY3RhdmVfc2V0X3NpZ25hbF9oYW5kbGVyICgxNCAsIGdlbmVyaWNf
c2lnX2hhbmRsZXIpOwoKCgogIG9jdGF2ZV9zZXRfc2lnbmFsX2hhbmRsZXIgKDEwICwgZ2VuZXJp
Y19zaWdfaGFuZGxlcik7CgoKCiAgb2N0YXZlX3NldF9zaWduYWxfaGFuZGxlciAoMTggLCBzaWdj
aGxkX2hhbmRsZXIpOwoKCiAgIAogICAKCgogIG9jdGF2ZV9zZXRfc2lnbmFsX2hhbmRsZXIgKDcg
LCBnZW5lcmljX3NpZ19oYW5kbGVyKTsKCgoKCgoKICBvY3RhdmVfc2V0X3NpZ25hbF9oYW5kbGVy
ICg4ICwgZ2VuZXJpY19zaWdfaGFuZGxlcik7CgoKCgogIG9jdGF2ZV9zZXRfc2lnbmFsX2hhbmRs
ZXIgKDEgLCBnZW5lcmljX3NpZ19oYW5kbGVyKTsKCgoKICBvY3RhdmVfc2V0X3NpZ25hbF9oYW5k
bGVyICg0ICwgZ2VuZXJpY19zaWdfaGFuZGxlcik7CgoKICAgCiAgIAoKCiAgb2N0YXZlX3NldF9z
aWduYWxfaGFuZGxlciAoMjIgLCAoKFNJR19QRikxTCkgKTsKCgoKICBvY3RhdmVfc2V0X3NpZ25h
bF9oYW5kbGVyICg2ICwgZ2VuZXJpY19zaWdfaGFuZGxlcik7CgoKCgoKCgogIG9jdGF2ZV9zZXRf
c2lnbmFsX2hhbmRsZXIgKDEzICwgc2lncGlwZV9oYW5kbGVyKTsKCgoKICBvY3RhdmVfc2V0X3Np
Z25hbF9oYW5kbGVyICgyMiAsICgoU0lHX1BGKTFMKSApOwoKCgogIG9jdGF2ZV9zZXRfc2lnbmFs
X2hhbmRsZXIgKDI5ICwgZ2VuZXJpY19zaWdfaGFuZGxlcik7CgoKICAgCgoKICBvY3RhdmVfc2V0
X3NpZ25hbF9oYW5kbGVyICgzICwgZ2VuZXJpY19zaWdfaGFuZGxlcik7CgoKCiAgb2N0YXZlX3Nl
dF9zaWduYWxfaGFuZGxlciAoMTEgLCBnZW5lcmljX3NpZ19oYW5kbGVyKTsKCgogICAKCgogIG9j
dGF2ZV9zZXRfc2lnbmFsX2hhbmRsZXIgKDEyICwgZ2VuZXJpY19zaWdfaGFuZGxlcik7CgoKCiAg
b2N0YXZlX3NldF9zaWduYWxfaGFuZGxlciAoMTUgLCBnZW5lcmljX3NpZ19oYW5kbGVyKTsKCgoK
ICBvY3RhdmVfc2V0X3NpZ25hbF9oYW5kbGVyICg1ICwgZ2VuZXJpY19zaWdfaGFuZGxlcik7CgoK
ICAgCiAgIAogICAKICAgCgoKICBvY3RhdmVfc2V0X3NpZ25hbF9oYW5kbGVyICgxNiAsIGdlbmVy
aWNfc2lnX2hhbmRsZXIpOwoKCgogIG9jdGF2ZV9zZXRfc2lnbmFsX2hhbmRsZXIgKDE3ICwgZ2Vu
ZXJpY19zaWdfaGFuZGxlcik7CgoKCiAgb2N0YXZlX3NldF9zaWduYWxfaGFuZGxlciAoMjggLCBn
ZW5lcmljX3NpZ19oYW5kbGVyKTsKCgoKCgoKCgoKICBvY3RhdmVfc2V0X3NpZ25hbF9oYW5kbGVy
ICgzMCAsIGdlbmVyaWNfc2lnX2hhbmRsZXIpOwoKCgogIG9jdGF2ZV9zZXRfc2lnbmFsX2hhbmRs
ZXIgKDMxICwgZ2VuZXJpY19zaWdfaGFuZGxlcik7Cgp9CgojIDYxOCAic2lnaGFuZGxlcnMuY2Mi
CgoKb2N0YXZlX2NoaWxkX2xpc3QgKm9jdGF2ZV9jaGlsZF9saXN0OjppbnN0YW5jZSA9IDA7Cgp2
b2lkCm9jdGF2ZV9jaGlsZF9saXN0Ojpkb19pbnNlcnQgKHBpZF90IHBpZCwgb2N0YXZlX2NoaWxk
OjpkZWFkX2NoaWxkX2hhbmRsZXIgZikKewogICAKICAgCgogIGJvb2wgZW5sYXJnZSA9IHRydWU7
CgogIGZvciAoaW50IGkgPSAwOyBpIDwgY3Vycl9sZW47IGkrKykKICAgIHsKICAgICAgb2N0YXZl
X2NoaWxkJiB0bXAgPSBsaXN0IChpKTsKCiAgICAgIGlmICh0bXAucGlkIDwgMCkKCXsKCSAgbGlz
dCAoaSkgPSBvY3RhdmVfY2hpbGQgKHBpZCwgZik7CgkgIGVubGFyZ2UgPSBmYWxzZTsKCSAgYnJl
YWs7Cgl9CiAgICB9CgogIGlmIChlbmxhcmdlKQogICAgewogICAgICBpbnQgdG90YWxfbGVuID0g
bGlzdC5sZW5ndGggKCk7CgogICAgICBpZiAoY3Vycl9sZW4gPT0gdG90YWxfbGVuKQoJewoJICBp
ZiAodG90YWxfbGVuID09IDApCgkgICAgbGlzdC5yZXNpemUgKDE2KTsKCSAgZWxzZQoJICAgIGxp
c3QucmVzaXplICh0b3RhbF9sZW4gKiAyKTsKCX0KCiAgICAgIGxpc3QgKGN1cnJfbGVuKSA9IG9j
dGF2ZV9jaGlsZCAocGlkLCBmKTsKICAgICAgY3Vycl9sZW4rKzsKICAgIH0KfQoKdm9pZApvY3Rh
dmVfY2hpbGRfbGlzdDo6aW5zZXJ0IChwaWRfdCBwaWQsIG9jdGF2ZV9jaGlsZDo6ZGVhZF9jaGls
ZF9oYW5kbGVyIGYpCnsKICBpZiAoISBpbnN0YW5jZSkKICAgIGluc3RhbmNlID0gbmV3IG9jdGF2
ZV9jaGlsZF9saXN0ICgpOwoKICBpZiAoaW5zdGFuY2UpCiAgICBpbnN0YW5jZS0+ZG9faW5zZXJ0
IChwaWQsIGYpOwogIGVsc2UKICAgIHBhbmljICgiaW1wb3NzaWJsZSBzdGF0ZSByZWFjaGVkIGlu
IGZpbGUgYCVzJyBhdCBsaW5lICVkIiwgInNpZ2hhbmRsZXJzLmNjIiwgNjY4KSA7Cn0KCnZvaWQK
b2N0YXZlX2NoaWxkX2xpc3Q6OmRvX3JlbW92ZSAocGlkX3QgcGlkKQp7CiAgIAoKICBmb3IgKGlu
dCBpID0gMDsgaSA8IGN1cnJfbGVuOyBpKyspCiAgICB7CiAgICAgIG9jdGF2ZV9jaGlsZCYgdG1w
ID0gbGlzdCAoaSk7CgogICAgICBpZiAodG1wLnBpZCA9PSBwaWQpCgl7CgkgIHRtcC5waWQgPSAt
MTsKCSAgYnJlYWs7Cgl9CiAgICB9Cn0KCnZvaWQKb2N0YXZlX2NoaWxkX2xpc3Q6OnJlbW92ZSAo
cGlkX3QgcGlkKQp7CiAgaWYgKCEgaW5zdGFuY2UpCiAgICBpbnN0YW5jZSA9IG5ldyBvY3RhdmVf
Y2hpbGRfbGlzdCAoKTsKCiAgaWYgKGluc3RhbmNlKQogICAgaW5zdGFuY2UtPmRvX3JlbW92ZSAo
cGlkKTsKICBlbHNlCiAgICBwYW5pYyAoImltcG9zc2libGUgc3RhdGUgcmVhY2hlZCBpbiBmaWxl
IGAlcycgYXQgbGluZSAlZCIsICJzaWdoYW5kbGVycy5jYyIsIDY5NykgOwp9CgogCgoKCgo=


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

* Re: c++/8014: Internal compiler error in `output_die'
@ 2002-10-28 14:31 reichelt
  0 siblings, 0 replies; 2+ messages in thread
From: reichelt @ 2002-10-28 14:31 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, milgramjh, nobody

Synopsis: Internal compiler error in `output_die'

State-Changed-From-To: open->closed
State-Changed-By: reichelt
State-Changed-When: Mon Oct 28 14:31:09 2002
State-Changed-Why:
    Fixed in 3.0.x and more recent versions.
    
    BTW, the bug in gcc 2.95.3 can be triggered with the
    following small code snippet:
    
    -------------------------snip here---------------------
    struct A
    {
      ~A() { }
    };
    
    struct B
    {
      static A& foo ()
        {
          static A a;
          return a;
        }
    };
    
    void bar ()
    {
      B::foo ();
    }
    -------------------------snip here---------------------

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


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

end of thread, other threads:[~2002-10-28 22:31 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-09-23 18:06 c++/8014: Internal compiler error in `output_die' milgramjh
2002-10-28 14:31 reichelt

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