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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

debug/2851: dbxout.c's concat loses information



>Number:         2851
>Category:       debug
>Synopsis:       dbxout.c's concat loses information
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed May 16 18:46:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Jeffrey D. Oldham
>Release:        unknown-1.0
>Organization:
>Environment:
dbx debugging, e.g., i686-pc-linux-gnu
>Description:
dbxout.c:dbxout_symbol_location()'s CONCAT code assumes a COMPLEX_TYPE type even though record types can also use CONCAT.  The current code hacks around the latter case, but it loses debugging information.
>How-To-Repeat:
cc1plus -g hoo.ii -quiet
>Fix:

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

dHlwZWRlZiBpbnQgcHRyZGlmZl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CgpuYW1l
c3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQoKZXh0
ZXJuICJDIiB7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsK
ICB9IGRpdl90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9u
ZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsK
ICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZf
dDsKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsK
CmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpOwoKZXh0
ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9u
ZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpOwoKX19leHRlbnNpb25f
XyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93
ICgpOwoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBz
dHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhy
b3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7
CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93
ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg
X19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwpfX2V4dGVuc2lvbl9fCmV4
dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19iYXNlKSB0aHJvdyAoKTsKdHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfc3RydWN0CnsKICBz
dHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1s2XTsKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQg
aW50ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50
ICpfX2N0eXBlX3RvdXBwZXI7Cn0gKl9fbG9jYWxlX3Q7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0
b2xfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgX19sb2NhbGVf
dCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9f
c3RydG9sbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7Cgpf
X2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJs
ZSBfX3N0cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gZmxv
YXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxv
bmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CmV4
dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7
CgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkgdGhyb3cg
KCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0IGNoYXIg
KiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dy
b3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGlu
dCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93
ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJu
YWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9f
CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29u
c3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqIF9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKmw2NGEgKGxv
bmcgaW50IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFy
ICpfX3MpIHRocm93ICgpOwoKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191
X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVk
IGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lv
bl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lv
bl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKdHlwZWRlZiBzaWduZWQgY2hhciBf
X2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQg
c2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZf
dDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191
aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2lu
dDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWlu
dDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3Qg
X19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90
Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlw
ZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVm
IF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3Nz
aXplX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19ybGltX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ybGlt
NjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50
IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7Cgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYg
Y2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIGxvbmcg
aW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIGludCBfX2ZkX21hc2s7CnR5cGVkZWYgc3RydWN0CiAgewoKICAgIF9fZmRfbWFz
ayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCiAgfSBfX2ZkX3Nl
dDsKCnR5cGVkZWYgaW50IF9fa2V5X3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lw
Y19waWRfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBf
X2Jsa2NudDY0X3Q7Cgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3Vf
cXVhZF90IF9fZnNibGtjbnQ2NF90OwoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5
cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCnR5cGVkZWYgX191X2xvbmcgX19pbm82
NF90OwoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fdF9z
Y2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKdHlwZWRl
ZiBpbnQgX19pbnRwdHJfdDsKCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IHNjaGVk
X3ByaW9yaXR5OwogIH07CgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9f
c3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVz
Y3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kZXRh
Y2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3Nj
aGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBf
X2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwog
IHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCnR5cGVkZWYgc3RydWN0CnsK
ICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3IgX19j
X3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVt
bXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9r
ZXlfdDsKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291
bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3Qg
X3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKdHlwZWRlZiBz
dHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKdHlwZWRl
ZiBpbnQgcHRocmVhZF9vbmNlX3Q7Cgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7
CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndfbG9jazsKICBpbnQgX19yd19yZWFkZXJz
OwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVh
ZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19y
d19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2tfdDsKCnR5cGVkZWYg
c3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcnds
b2NrYXR0cl90OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7Cgp0eXBlZGVm
IF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3Vf
aW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFk
X3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7
Cgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCnR5cGVk
ZWYgX19pbm82NF90IGlubzY0X3Q7Cgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7Cgp0eXBlZGVmIF9f
Z2lkX3QgZ2lkX3Q7Cgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCnR5cGVkZWYgX19ubGlua190
IG5saW5rX3Q7Cgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7Cgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7
Cgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKdHlw
ZWRlZiBfX2lkX3QgaWRfdDsKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7Cgp0eXBlZGVmIF9f
ZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKdHlwZWRlZiBfX2tl
eV90IGtleV90OwoKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCnR5cGVkZWYgX190aW1lX3Qg
dGltZV90OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50Owp0eXBlZGVmIGlu
dCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgaW50
IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50
IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgaW50
IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIHVu
c2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
X19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAo
KF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3Qg
X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsKCnR5cGVkZWYgaW50IF9fc2ln
X2F0b21pY190OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3Zh
bFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAgfSBfX3NpZ3Nl
dF90OwoKc3RydWN0IHRpbWVzcGVjCiAgewogICAgbG9uZyBpbnQgdHZfc2VjOwogICAgbG9uZyBp
bnQgdHZfbnNlYzsKICB9OwoKZXh0ZXJuICJDIiB7CgpzdHJ1Y3QgdGltZXZhbDsKCnR5cGVkZWYg
X19mZF9tYXNrIGZkX21hc2s7Cgp0eXBlZGVmIF9fZmRfc2V0IGZkX3NldDsKZXh0ZXJuIGludCBf
X3NlbGVjdCAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3Jp
dGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywgc3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkg
dGhyb3cgKCk7CgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVh
ZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywgc3RydWN0
IHRpbWV2YWwgKl9fdGltZW91dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9f
bmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0
ICpfX2V4Y2VwdGZkcywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RpbWVvdXQsIGNvbnN0IF9f
c2lnc2V0X3QgKl9fc2lnbWFzaykgdGhyb3cgKCk7Cgp9Cgp0eXBlZGVmIF9fYmxrY250X3QgYmxr
Y250X3Q7CnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CnR5cGVkZWYgX19mc2ZpbGNu
dF90IGZzZmlsY250X3Q7Cgp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVm
IF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2Zp
bGNudDY0X3Q7Cgp9CgpleHRlcm4gaW50MzJfdCByYW5kb20gKHZvaWQpIHRocm93ICgpOwoKZXh0
ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgpleHRlcm4g
dm9pZCAqIGluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAqIF9fc3RhdGVidWYs
IHNpemVfdCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkICogc2V0c3RhdGUgKHZv
aWQgKiBfX3N0YXRlYnVmKSB0aHJvdyAoKTsKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGlu
dDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBp
bnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50
MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmLCBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJv
dyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3Qg
cmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVu
c2lnbmVkIGludCBfX3NlZWQsIHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3RhdGVidWYsIHNpemVfdCBf
X3N0YXRlbGVuLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgp
OwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yICh2b2lkICogX19yZXN0cmljdCBfX3N0YXRlYnVmLCBz
dHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQg
X19zZWVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2Vl
ZCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRl
cm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAo
KTsKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg
aW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCmV4
dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IGpy
YW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCmV4dGVybiB2
b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25l
ZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhy
b3cgKCk7CmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzdd
KSB0aHJvdyAoKTsKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBp
bnQgeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBhWzNdOwogICAgdW5zaWduZWQgc2hvcnQg
aW50IGM7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgb2xkX3hbM107CiAgICBpbnQgaW5pdDsKICB9
OwoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3Qg
X19idWZmZXIsIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4g
aW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sIHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3Vs
dCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAq
X19yZXN0cmljdCBfX2J1ZmZlciwgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93
ICgpOwoKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNd
LCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBsb25nIGludCAqX19y
ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0
IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwgbG9uZyBpbnQgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0
IGludCBfX3hzdWJpWzNdLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVy
LCBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNy
YW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZl
cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19z
ZWVkMTZ2WzNdLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgpleHRl
cm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sIHN0cnVjdCBk
cmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgKiBtYWxsb2MgKHNp
emVfdCBfX3NpemUpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgKiBjYWxsb2MgKHNpemVfdCBfX25t
ZW1iLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkICogcmVhbGxvYyAodm9p
ZCAqIF9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZv
aWQgKiBfX3B0cikgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqIF9fcHRyKSB0
aHJvdyAoKTsKCmV4dGVybiAiQyIgewoKZXh0ZXJuIHZvaWQgKiBhbGxvY2EgKHNpemVfdCBfX3Np
emUpIHRocm93ICgpOwoKfQoKZXh0ZXJuIHZvaWQgKiB2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRo
cm93ICgpOwoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX25vcmV0dXJuX18pKTsKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9p
ZCkpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX29uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQg
X19zdGF0dXMsIHZvaWQgKiBfX2FyZyksIHZvaWQgKiBfX2FyZykgdGhyb3cgKCk7CgpleHRlcm4g
aW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiBfX2FyZyks
IHZvaWQgKiBfX2FyZykgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCmV4dGVybiB2b2lkIF9F
eGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18p
KTsKCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsK
CmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJv
dyAoKTsKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1
ZSwgaW50IF9fcmVwbGFjZSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCB1bnNldGVudiAoX19jb25z
dCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhy
b3cgKCk7CmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoK
ZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgpleHRlcm4gY2hh
ciAqY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgp
OwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUs
IGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7Cgp0eXBlZGVmIGludCAoKl9f
Y29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKdHlwZWRlZiBf
X2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCmV4dGVybiB2b2lkICogYnNlYXJjaCAoX19j
b25zdCB2b2lkICogX19rZXksIF9fY29uc3Qgdm9pZCAqIF9fYmFzZSwgc2l6ZV90IF9fbm1lbWIs
IHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKZXh0ZXJuIHZvaWQgcXNv
cnQgKHZvaWQgKiBfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBh
cl9mbl90IF9fY29tcGFyKTsKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBf
X3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18g
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KSB0aHJvdyAoKQog
ICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBkaXZfdCBkaXYgKGludCBf
X251bWVyLCBpbnQgX19kZW5vbSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwpleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20p
IHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25f
XyBleHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLCBsb25nIGxvbmcg
aW50IF9fZGVub20pIHRocm93ICgpCgogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
ZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19y
ZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCmV4dGVy
biBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJp
Y3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgpleHRlcm4gY2hh
ciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93
ICgpOwoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln
aXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJv
dyAoKTsKCmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhy
b3cgKCk7CgpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVz
dHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93
ICgpOwoKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGlu
dCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jl
c3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9y
IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2Rl
Y3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXpl
X3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJp
Y3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgp
OwpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gaW50
IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKZXh0ZXJuIHNp
emVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCB3Y3N0
b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X3B3Y3MsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3Qg
Y2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoq
X19yZXN0cmljdCBfX29wdGlvbnAsIF9fY29uc3QgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBf
X3Rva2VucywgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgpOwpleHRlcm4gdm9p
ZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoKZXh0ZXJuIGludCBncmFu
dHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19mZCkg
dGhyb3cgKCk7CgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIHRocm93ICgpOwoKZXh0
ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVu
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRocm93ICgpOwoKfQpuYW1lc3Bh
Y2Ugc3RkCnsKICB1c2luZyA6OmRpdl90OwogIHVzaW5nIDo6bGRpdl90OwogIGV4dGVybiAiQyIg
ZG91YmxlIGF0b2YoY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgaW50IGF0b2koY29uc3QgY2hh
ciopOwogIGV4dGVybiAiQyIgbG9uZyBpbnQgYXRvbChjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJD
IiBkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIqLCBjaGFyKiopOwogIGV4dGVybiAiQyIgZmxvYXQg
c3RydG9mKGNvbnN0IGNoYXIqLCBjaGFyKiopOwogIGV4dGVybiAiQyIgbG9uZyBpbnQgc3RydG9s
KGNvbnN0IGNoYXIqLCBjaGFyKiosIGludCk7CiAgZXh0ZXJuICJDIiB1bnNpZ25lZCBsb25nIGlu
dCBzdHJ0b3VsKGNvbnN0IGNoYXIqLCBjaGFyKiosIGludCk7CiAgZXh0ZXJuICJDIiBpbnQgcmFu
ZCh2b2lkKTsKICBleHRlcm4gIkMiIHZvaWQgc3JhbmQodW5zaWduZWQgaW50KTsKICBleHRlcm4g
IkMiIHZvaWQqIGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CiAgZXh0ZXJuICJDIiB2b2lkIGZyZWUo
dm9pZCopOwogIGV4dGVybiAiQyIgdm9pZCogbWFsbG9jKHNpemVfdCk7CiAgZXh0ZXJuICJDIiB2
b2lkKiByZWFsbG9jKHZvaWQqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgdm9pZCBhYm9ydCh2b2lk
KTsKICBleHRlcm4gIkMiIGludCBhdGV4aXQodm9pZCAoKmZ1bmMpKHZvaWQpKTsKICBleHRlcm4g
IkMiIHZvaWQgZXhpdChpbnQpOwogIGV4dGVybiAiQyIgdm9pZCBfRXhpdChpbnQpOwogIGV4dGVy
biAiQyIgY2hhcipnZXRlbnYoY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgaW50IHN5c3RlbShj
b25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiB2b2lkKiBic2VhcmNoKGNvbnN0IHZvaWQqLCBjb25z
dCB2b2lkKiwgc2l6ZV90LCBzaXplX3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAo
KmNvbXApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CiAgZXh0ZXJuICJDIiB2b2lkIHFz
b3J0KHZvaWQqLCBzaXplX3QsIHNpemVfdCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgq
Y29tcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKICBleHRlcm4gIkMiIGludCBhYnMo
aW50KTsKICBleHRlcm4gIkMiIGxvbmcgaW50IGxhYnMobG9uZyBpbnQpOwogIGV4dGVybiAiQyIg
ZGl2X3QgZGl2KGludCwgaW50KTsKICBleHRlcm4gIkMiIGxkaXZfdCBsZGl2KGxvbmcgaW50LCBs
b25nIGludCk7CiAgZXh0ZXJuICJDIiBpbnQgbWJsZW4oY29uc3QgY2hhciosIHNpemVfdCk7CiAg
ZXh0ZXJuICJDIiBpbnQgbWJ0b3djKHdjaGFyX3QqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBl
eHRlcm4gIkMiIGludCB3Y3RvbWIoY2hhciosIHdjaGFyX3QpOwogIGV4dGVybiAiQyIgc2l6ZV90
IG1ic3Rvd2NzKHdjaGFyX3QqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIHNp
emVfdCB3Y3N0b21icyhjaGFyKiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCk7CiAgZXh0ZXJuICJD
IiBsb25nIGRvdWJsZSBzdHJ0b2xkKGNvbnN0IGNoYXIqLCBjaGFyKiopOwoKfQoKZXh0ZXJuICJD
IiB7Cgp0eXBlZGVmIGxvbmcgZG91YmxlIGZsb2F0X3Q7Cgp0eXBlZGVmIGxvbmcgZG91YmxlIGRv
dWJsZV90OwpleHRlcm4gZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9f
YWNvcyAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gpOyBleHRl
cm4gZG91YmxlIF9fYXNpbiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGF0YW4gKGRvdWJs
ZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91Ymxl
IGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yIChk
b3VibGUgX195LCBkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgY29zIChkb3VibGUgX194KTsg
ZXh0ZXJuIGRvdWJsZSBfX2NvcyAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91
YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19zaW4gKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJs
ZSB0YW4gKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KTsKCmV4
dGVybiB2b2lkIHNpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19j
b3N4KTsgZXh0ZXJuIHZvaWQgX19zaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBk
b3VibGUgKl9fY29zeCk7CgpleHRlcm4gZG91YmxlIGNvc2ggKGRvdWJsZSBfX3gpOyBleHRlcm4g
ZG91YmxlIF9fY29zaCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIHNpbmggKGRvdWJsZSBf
X3gpOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIHRh
bmggKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fdGFuaCAoZG91YmxlIF9feCk7CgpleHRl
cm4gZG91YmxlIGFjb3NoIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3Vi
bGUgX194KTsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91Ymxl
IF9fYXNpbmggKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCk7
IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGV4cCAo
ZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19leHAgKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRv
dWJsZSBleHAxMCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91YmxlIF9f
eCk7CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX3Bv
dzEwIChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgZnJleHAgKGRvdWJsZSBfX3gsIGludCAq
X19leHBvbmVudCk7IGV4dGVybiBkb3VibGUgX19mcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4
cG9uZW50KTsKCmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50
KTsgZXh0ZXJuIGRvdWJsZSBfX2xkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCk7Cgpl
eHRlcm4gZG91YmxlIGxvZyAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJs
ZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUg
X19sb2cxMCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRv
dWJsZSAqX19pcHRyKTsgZXh0ZXJuIGRvdWJsZSBfX21vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAq
X19pcHRyKTsKCmV4dGVybiBkb3VibGUgZXhwbTEgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91Ymxl
IF9fZXhwbTEgKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCk7
IGV4dGVybiBkb3VibGUgX19sb2cxcCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGxvZ2Ig
KGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fbG9nYiAoZG91YmxlIF9feCk7CgpleHRlcm4g
ZG91YmxlIGV4cDIgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fZXhwMiAoZG91YmxlIF9f
eCk7CgpleHRlcm4gZG91YmxlIGxvZzIgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fbG9n
MiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSk7IGV4dGVybiBkb3VibGUgX19wb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKZXh0ZXJu
IGRvdWJsZSBzcXJ0IChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX3NxcnQgKGRvdWJsZSBf
X3gpOwoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4dGVy
biBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgpleHRlcm4gZG91Ymxl
IGNicnQgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fY2JydCAoZG91YmxlIF9feCk7Cgpl
eHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fY2VpbCAoZG91
YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2ZhYnMgKGRvdWJsZSBfX3gpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpOyBl
eHRlcm4gZG91YmxlIF9fZmxvb3IgKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBmbW9kIChk
b3VibGUgX194LCBkb3VibGUgX195KTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gs
IGRvdWJsZSBfX3kpOwoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGludCBfX2Zpbml0ZSAoZG91YmxlIF9fdmFs
dWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBpbnQgaXNpbmYgKGRvdWJs
ZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gaW50IGZpbml0
ZSAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBk
b3VibGUgaW5mbmFuIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl
eHRlcm4gZG91YmxlIF9faW5mbmFuIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKZXh0ZXJuIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KTsgZXh0
ZXJuIGRvdWJsZSBfX2RyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKZXh0ZXJuIGRvdWJs
ZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19zaWduaWZpY2FuZCAo
ZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUg
X195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2ln
biAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
ZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJsZSBf
X3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gaW50IGlzbmFuIChk
b3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGRvdWJs
ZSBqMCAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpOwpleHRlcm4gZG91Ymxl
IGoxIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUg
am4gKGludCwgZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2puIChpbnQsIGRvdWJsZSk7CmV4dGVy
biBkb3VibGUgeTAgKGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX195MCAoZG91YmxlKTsKZXh0ZXJu
IGRvdWJsZSB5MSAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpOwpleHRlcm4g
ZG91YmxlIHluIChpbnQsIGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX195biAoaW50LCBkb3VibGUp
OwoKZXh0ZXJuIGRvdWJsZSBlcmYgKGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX19lcmYgKGRvdWJs
ZSk7CmV4dGVybiBkb3VibGUgZXJmYyAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZmMgKGRv
dWJsZSk7CmV4dGVybiBkb3VibGUgbGdhbW1hIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fbGdh
bW1hIChkb3VibGUpOwpleHRlcm4gZG91YmxlIHRnYW1tYSAoZG91YmxlKTsgZXh0ZXJuIGRvdWJs
ZSBfX3RnYW1tYSAoZG91YmxlKTsKCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSk7IGV4dGVy
biBkb3VibGUgX19nYW1tYSAoZG91YmxlKTsKCmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKGRvdWJs
ZSwgaW50ICpfX3NpZ25nYW1wKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYV9yIChkb3VibGUsIGlu
dCAqX19zaWduZ2FtcCk7CgpleHRlcm4gZG91YmxlIHJpbnQgKGRvdWJsZSBfX3gpOyBleHRlcm4g
ZG91YmxlIF9fcmludCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91
YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g
ZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91Ymxl
IF9fbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91YmxlIHJlbWFpbmRlciAoZG91YmxlIF9feCwgZG91
YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19yZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBf
X3kpOwoKZXh0ZXJuIGRvdWJsZSBzY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbik7IGV4dGVy
biBkb3VibGUgX19zY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbik7CgpleHRlcm4gZG91Ymxl
IHNjYWxibiAoZG91YmxlIF9feCwgaW50IF9fbik7IGV4dGVybiBkb3VibGUgX19zY2FsYm4gKGRv
dWJsZSBfX3gsIGludCBfX24pOwoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCk7IGV4dGVy
biBpbnQgX19pbG9nYiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIHNjYWxibG4gKGRvdWJs
ZSBfX3gsIGxvbmcgaW50IF9fbik7IGV4dGVybiBkb3VibGUgX19zY2FsYmxuIChkb3VibGUgX194
LCBsb25nIGludCBfX24pOwoKZXh0ZXJuIGRvdWJsZSBuZWFyYnlpbnQgKGRvdWJsZSBfX3gpOyBl
eHRlcm4gZG91YmxlIF9fbmVhcmJ5aW50IChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgcm91
bmQgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fcm91bmQgKGRvdWJsZSBfX3gpOwoKZXh0
ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCmV4dGVybiBkb3VibGUgcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBp
bnQgKl9fcXVvKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSwgaW50ICpfX3F1byk7CgpleHRlcm4gbG9uZyBpbnQgbHJpbnQgKGRvdWJsZSBfX3gpOyBleHRl
cm4gbG9uZyBpbnQgX19scmludCAoZG91YmxlIF9feCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxs
cmludCAoZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50IChkb3VibGUg
X194KTsKCmV4dGVybiBsb25nIGludCBscm91bmQgKGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBp
bnQgX19scm91bmQgKGRvdWJsZSBfX3gpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kIChk
b3VibGUgX194KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kIChkb3VibGUgX194KTsK
CmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3Vi
bGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KTsKCmV4dGVybiBkb3VibGUgZm1heCAo
ZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19mbWF4IChkb3VibGUgX194
LCBkb3VibGUgX195KTsKCmV4dGVybiBkb3VibGUgZm1pbiAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSk7IGV4dGVybiBkb3VibGUgX19mbWluIChkb3VibGUgX194LCBkb3VibGUgX195KTsKCmV4dGVy
biBpbnQgX19mcGNsYXNzaWZ5IChkb3VibGUgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgpleHRlcm4gaW50IF9fc2lnbmJpdCAoZG91YmxlIF9fdmFsdWUpCiAgICAg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGRvdWJsZSBmbWEgKGRvdWJsZSBf
X3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opOyBleHRlcm4gZG91YmxlIF9fZm1hIChkb3VibGUg
X194LCBkb3VibGUgX195LCBkb3VibGUgX196KTsKZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCBf
X3gpOyBleHRlcm4gZmxvYXQgX19hY29zZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBhc2lu
ZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCk7CgpleHRlcm4g
ZmxvYXQgYXRhbmYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2F0YW5mIChmbG9hdCBfX3gp
OwoKZXh0ZXJuIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpOyBleHRlcm4gZmxv
YXQgX19hdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBjb3NmIChm
bG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19jb3NmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0
IHNpbmYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9feCk7CgpleHRl
cm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fdGFuZiAoZmxvYXQgX194
KTsKCmV4dGVybiB2b2lkIHNpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQg
Kl9fY29zeCk7IGV4dGVybiB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54
LCBmbG9hdCAqX19jb3N4KTsKCmV4dGVybiBmbG9hdCBjb3NoZiAoZmxvYXQgX194KTsgZXh0ZXJu
IGZsb2F0IF9fY29zaGYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0IF9f
eCk7IGV4dGVybiBmbG9hdCBfX3NpbmhmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IHRhbmhm
IChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KTsKCmV4dGVybiBm
bG9hdCBhY29zaGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NoZiAoZmxvYXQgX194
KTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2FzaW5o
ZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCk7IGV4dGVybiBm
bG9hdCBfX2F0YW5oZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBleHBmIChmbG9hdCBfX3gp
OyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IGV4cDEwZiAo
ZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fZXhwMTBmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZs
b2F0IHBvdzEwZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fcG93MTBmIChmbG9hdCBfX3gp
OwoKZXh0ZXJuIGZsb2F0IGZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpOyBleHRl
cm4gZmxvYXQgX19mcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KTsKCmV4dGVybiBm
bG9hdCBsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpOyBleHRlcm4gZmxvYXQgX19s
ZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpOwoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZs
b2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQg
bG9nMTBmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19sb2cxMGYgKGZsb2F0IF9feCk7Cgpl
eHRlcm4gZmxvYXQgbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cik7IGV4dGVybiBmbG9h
dCBfX21vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpOwoKZXh0ZXJuIGZsb2F0IGV4cG0x
ZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBfX3gpOwoKZXh0ZXJu
IGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9hdCBf
X3gpOwoKZXh0ZXJuIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19sb2di
ZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBleHAyZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZs
b2F0IF9fZXhwMmYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgbG9nMmYgKGZsb2F0IF9feCk7
IGV4dGVybiBmbG9hdCBfX2xvZzJmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZs
b2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9h
dCBfX3kpOwoKZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19z
cXJ0ZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBoeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQg
X195KTsgZXh0ZXJuIGZsb2F0IF9faHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7CgpleHRl
cm4gZmxvYXQgY2JydGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBf
X3gpOwoKZXh0ZXJuIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19jZWls
ZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChmbG9hdCBfX3gpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCk7
IGV4dGVybiBmbG9hdCBfX2Zsb29yZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBmbW9kZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19mbW9kZiAoZmxvYXQgX194LCBm
bG9hdCBfX3kpOwoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBf
X3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gaW50IGZpbml0ZWYg
KGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBmbG9h
dCBpbmZuYW5mIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl
cm4gZmxvYXQgX19pbmZuYW5mIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKZXh0ZXJuIGZsb2F0IGRyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7IGV4dGVybiBm
bG9hdCBfX2RyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7CgpleHRlcm4gZmxvYXQgc2lnbmlm
aWNhbmRmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9f
eCk7CgpleHRlcm4gZmxvYXQgY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9f
eCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZmxvYXQg
bmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg
ZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVl
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZmxvYXQgajBmIChmbG9hdCk7
IGV4dGVybiBmbG9hdCBfX2owZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCk7IGV4
dGVybiBmbG9hdCBfX2oxZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgam5mIChpbnQsIGZsb2F0KTsg
ZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHkwZiAoZmxvYXQp
OyBleHRlcm4gZmxvYXQgX195MGYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQpOyBl
eHRlcm4gZmxvYXQgX195MWYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50LCBmbG9hdCk7
IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCk7CgpleHRlcm4gZmxvYXQgZXJmZiAoZmxv
YXQpOyBleHRlcm4gZmxvYXQgX19lcmZmIChmbG9hdCk7CmV4dGVybiBmbG9hdCBlcmZjZiAoZmxv
YXQpOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgbGdhbW1hZiAo
ZmxvYXQpOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmIChmbG9hdCk7CmV4dGVybiBmbG9hdCB0Z2Ft
bWFmIChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX3RnYW1tYWYgKGZsb2F0KTsKCmV4dGVybiBmbG9h
dCBnYW1tYWYgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fZ2FtbWFmIChmbG9hdCk7CgpleHRlcm4g
ZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKTsgZXh0ZXJuIGZsb2F0IF9f
bGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKTsKCmV4dGVybiBmbG9hdCByaW50ZiAo
ZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxv
YXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBmbG9hdCBuZXh0dG93YXJkZiAo
ZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg
ZXh0ZXJuIGZsb2F0IF9fbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxv
YXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBfX3gs
IGZsb2F0IF9feSk7CgpleHRlcm4gZmxvYXQgc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0IF9fbik7
IGV4dGVybiBmbG9hdCBfX3NjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBfX24pOwoKZXh0ZXJuIGZs
b2F0IHNjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbik7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYg
KGZsb2F0IF9feCwgaW50IF9fbik7CgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KTsgZXh0
ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBzY2FsYmxuZiAoZmxv
YXQgX194LCBsb25nIGludCBfX24pOyBleHRlcm4gZmxvYXQgX19zY2FsYmxuZiAoZmxvYXQgX194
LCBsb25nIGludCBfX24pOwoKZXh0ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9feCk7IGV4
dGVybiBmbG9hdCBfX25lYXJieWludGYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgcm91bmRm
IChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19yb3VuZGYgKGZsb2F0IF9feCk7CgpleHRlcm4g
ZmxvYXQgdHJ1bmNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0
ZXJuIGZsb2F0IF9fdHJ1bmNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCmV4dGVybiBmbG9hdCByZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1
byk7IGV4dGVybiBmbG9hdCBfX3JlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9f
cXVvKTsKCmV4dGVybiBsb25nIGludCBscmludGYgKGZsb2F0IF9feCk7IGV4dGVybiBsb25nIGlu
dCBfX2xyaW50ZiAoZmxvYXQgX194KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxv
YXQgX194KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpOwoKZXh0
ZXJuIGxvbmcgaW50IGxyb3VuZGYgKGZsb2F0IF9feCk7IGV4dGVybiBsb25nIGludCBfX2xyb3Vu
ZGYgKGZsb2F0IF9feCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRmIChmbG9hdCBfX3gp
OyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZs
b2F0IGZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7IGV4dGVybiBmbG9hdCBfX2ZkaW1mIChm
bG9hdCBfX3gsIGZsb2F0IF9feSk7CgpleHRlcm4gZmxvYXQgZm1heGYgKGZsb2F0IF9feCwgZmxv
YXQgX195KTsgZXh0ZXJuIGZsb2F0IF9fZm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsKCmV4
dGVybiBmbG9hdCBmbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19m
bWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOwoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlmIChm
bG9hdCBfX3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBp
bnQgX19zaWduYml0ZiAoZmxvYXQgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgpleHRlcm4gZmxvYXQgZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9f
eik7IGV4dGVybiBmbG9hdCBfX2ZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3op
OwpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2wgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2Fjb3NsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFz
aW5sIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2lubCAobG9uZyBk
b3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUgX194KTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9u
ZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gp
OwoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2wgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2Nvc2wgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lu
bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lubCAobG9uZyBkb3Vi
bGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gpOyBleHRl
cm4gbG9uZyBkb3VibGUgX190YW5sIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIHZvaWQgc2lu
Y29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAq
X19jb3N4KTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGNv
c2hsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NobCAobG9uZyBk
b3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194KTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2luaGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9u
ZyBkb3VibGUgdGFuaGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Rh
bmhsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBk
b3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2hsIChsb25nIGRvdWJsZSBfX3gp
OwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGF0YW5obCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmhsIChs
b25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9f
eCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4g
bG9uZyBkb3VibGUgZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19leHAxMGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93MTBsIChs
b25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3cxMGwgKGxvbmcgZG91Ymxl
IF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAq
X19leHBvbmVudCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUgX194
LCBpbnQgKl9fZXhwb25lbnQpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGxkZXhwbCAobG9uZyBkb3Vi
bGUgX194LCBpbnQgX19leHBvbmVudCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xkZXhwbCAobG9u
ZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCk7CgpleHRlcm4gbG9uZyBkb3VibGUgbG9nbCAo
bG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nbCAobG9uZyBkb3VibGUg
X194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRv
dWJsZSBtb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRyKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fbW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0
cik7CgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3Vi
bGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cxcGwg
KGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91Ymxl
IF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0
ZXJuIGxvbmcgZG91YmxlIGV4cDJsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19leHAybCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cybCAo
bG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMmwgKGxvbmcgZG91Ymxl
IF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3dsIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSk7CgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9f
eCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIGh5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19oeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KTsKCmV4dGVybiBsb25nIGRvdWJsZSBjYnJ0bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fY2JydGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3Vi
bGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NlaWxsIChs
b25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGZhYnNsIChsb25nIGRvdWJsZSBf
X3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmFi
c2wgKGxvbmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Zt
b2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgpleHRlcm4gaW50IF9faXNp
bmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7Cgpl
eHRlcm4gaW50IF9fZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKZXh0ZXJuIGludCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBpbnQgZmluaXRlbCAobG9uZyBkb3Vi
bGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGxvbmcgZG91
YmxlIGluZm5hbmwgKGludCBfX2Vycm9yKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2luZm5hbmwgKGludCBfX2Vycm9yKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgpleHRlcm4gbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgX195KTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwg
KGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9u
ZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBjb3B5c2lnbmwgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5s
IChfX2NvbnN0IGNoYXIgKl9fdGFnYikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1
ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGludCBpc25hbmwgKGxvbmcg
ZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25n
IGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25n
IGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fajFsIChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGlu
dCwgbG9uZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9uZyBkb3Vi
bGUpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX3kwbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRv
dWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9u
ZyBkb3VibGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feW5s
IChpbnQsIGxvbmcgZG91YmxlKTsKCmV4dGVybiBsb25nIGRvdWJsZSBlcmZsIChsb25nIGRvdWJs
ZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmwgKGxvbmcgZG91YmxlKTsKZXh0ZXJuIGxvbmcg
ZG91YmxlIGVyZmNsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmNsIChs
b25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsIChsb25nIGRvdWJsZSk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWwgKGxvbmcgZG91YmxlKTsKZXh0ZXJuIGxvbmcgZG91
YmxlIHRnYW1tYWwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGdhbW1hbCAo
bG9uZyBkb3VibGUpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9uZyBkb3VibGUpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKTsKCmV4dGVybiBsb25nIGRv
dWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApOwoKZXh0
ZXJuIGxvbmcgZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0
ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0
dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbWFpbmRlcmwg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsKCmV4dGVybiBsb25nIGRvdWJsZSBz
Y2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbik7CgpleHRlcm4g
bG9uZyBkb3VibGUgc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKTsKCmV4dGVybiBp
bnQgaWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRv
dWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgaW50IF9fbik7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibG5sIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgaW50IF9fbik7CgpleHRlcm4gbG9uZyBkb3VibGUgbmVhcmJ5aW50bCAobG9u
ZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmVhcmJ5aW50bCAobG9uZyBkb3Vi
bGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSByb3VuZGwgKGxvbmcgZG91YmxlIF9feCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX3JvdW5kbCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25n
IGRvdWJsZSB0cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbXF1b2wgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19x
dW8pOwoKZXh0ZXJuIGxvbmcgaW50IGxyaW50bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxv
bmcgaW50IF9fbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpOwpleHRlcm4gbG9uZyBsb25nIGludCBs
bHJpbnRsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGwg
KGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUg
X194KTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194KTsKZXh0ZXJu
IGxvbmcgbG9uZyBpbnQgbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGxv
bmcgaW50IF9fbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUg
ZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsKCmV4dGVybiBs
b25nIGRvdWJsZSBmbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp
OwoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg
ZG91YmxlIF9feSk7CgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWwgKGxvbmcgZG91YmxlIF9fdmFs
dWUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGludCBfX3NpZ25i
aXRsIChsb25nIGRvdWJsZSBfX3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCmV4dGVybiBsb25nIGRvdWJsZSBmbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSwgbG9uZyBkb3VibGUgX196KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1hbCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feik7CmV4dGVybiBpbnQg
c2lnbmdhbTsKZW51bQogIHsKICAgIEZQX05BTiwKCiAgICBGUF9JTkZJTklURSwKCiAgICBGUF9a
RVJPLAoKICAgIEZQX1NVQk5PUk1BTCwKCiAgICBGUF9OT1JNQUwKCiAgfTsKdHlwZWRlZiBlbnVt
CnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAogIF9JU09D
Xwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJfVkVS
U0lPTjsKc3RydWN0IF9fZXhjZXB0aW9uCgogIHsKICAgIGludCB0eXBlOwogICAgY2hhciAqbmFt
ZTsKICAgIGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFyZzI7CiAgICBkb3VibGUgcmV0dmFsOwog
IH07CgpleHRlcm4gaW50IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93
ICgpOwp9Cm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2Nt
YXRoX3Bvd2VyKF9UcCwgdW5zaWduZWQgaW50KTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
IGlubGluZSBfVHAKICAgIF9fY21hdGhfYWJzKF9UcCBfX3gpCiAgICB7CiAgICAgIHJldHVybiBf
X3ggPCBfVHAoKSA/IC1fX3ggOiBfX3g7CiAgICB9CgogIGlubGluZSBsb25nCiAgYWJzKGxvbmcg
X19pKSB7IHJldHVybiA6OmxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRpdl90CiAgZGl2KGxvbmcg
X19pLCBsb25nIF9faikgeyByZXR1cm4gOjpsZGl2KF9faSwgX19qKTsgfQoKICBpbmxpbmUgZmxv
YXQKICBhYnMoZmxvYXQgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsgfQogIGlu
bGluZSBmbG9hdAogIGFjb3MoZmxvYXQgX194KSB7IHJldHVybiA6OmFjb3NmKF9feCk7IH0KCiAg
aW5saW5lIGZsb2F0CiAgYXNpbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXNpbmYoX194KTsgfQoK
ICBpbmxpbmUgZmxvYXQKICBhdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjphdGFuZihfX3gpOyB9
CgogIGlubGluZSBmbG9hdAogIGF0YW4yKGZsb2F0IF9feSwgZmxvYXQgX194KSB7IHJldHVybiA6
OmF0YW4yZihfX3ksIF9feCk7IH0KCiAgaW5saW5lIGZsb2F0CiAgY2VpbChmbG9hdCBfX3gpIHsg
cmV0dXJuIDo6Y2VpbGYoX194KTsgfQogIGlubGluZSBmbG9hdAogIGNvcyhmbG9hdCBfX3gpIHsg
cmV0dXJuIDo6Y29zZihfX3gpOyB9CgogIGlubGluZSBmbG9hdAogIGNvc2goZmxvYXQgX194KSB7
IHJldHVybiA6OmNvc2hmKF9feCk7IH0KCiAgaW5saW5lIGZsb2F0CiAgZXhwKGZsb2F0IF9feCkg
eyByZXR1cm4gOjpleHBmKF9feCk7IH0KCiAgaW5saW5lIGZsb2F0CiAgZmFicyhmbG9hdCBfX3gp
IHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CiAgaW5saW5lIGZsb2F0CiAgZmxvb3Io
ZmxvYXQgX194KSB7IHJldHVybiA6OmZsb29yZihfX3gpOyB9CgogIGlubGluZSBmbG9hdAogIGZt
b2QoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6Zm1vZGYoX194LCBfX3kpOyB9Cgog
IGlubGluZSBmbG9hdAogIGZyZXhwKGZsb2F0IF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpm
cmV4cGYoX194LCBfX2V4cCk7IH0KCiAgaW5saW5lIGZsb2F0CiAgbGRleHAoZmxvYXQgX194LCBp
bnQgX19leHApIHsgcmV0dXJuIDo6bGRleHBmKF9feCwgX19leHApOyB9CgogIGlubGluZSBmbG9h
dAogIGxvZyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9CgogIGlubGluZSBmbG9h
dAogIGxvZzEwKGZsb2F0IF9feCkgeyByZXR1cm4gOjpsb2cxMGYoX194KTsgfQoKICBpbmxpbmUg
ZmxvYXQKICBtb2RmKGZsb2F0IF9feCwgZmxvYXQqIF9faXB0cikgeyByZXR1cm4gOjptb2RmZihf
X3gsIF9faXB0cik7IH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwCiAg
ICBfX3Bvd19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikKICAgIHsKICAgICAgcmV0dXJuIF9fbiA8
IDAKICAgICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9feCwgLV9fbikKICAgICAgICA6IF9f
Y21hdGhfcG93ZXIoX194LCBfX24pOwogICAgfQoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQg
X194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6cG93ZihfX3gsIF9feSk7IH0KCiAgaW5saW5lIGZs
b2F0CiAgcG93KGZsb2F0IF9feCwgaW50IF9fbikKICB7CiAgICByZXR1cm4gX19wb3dfaGVscGVy
KF9feCwgX19uKTsKICB9CgogIGlubGluZSBmbG9hdAogIHNpbihmbG9hdCBfX3gpIHsgcmV0dXJu
IDo6c2luZihfX3gpOyB9CgogIGlubGluZSBmbG9hdAogIHNpbmgoZmxvYXQgX194KSB7IHJldHVy
biA6OnNpbmhmKF9feCk7IH0KICBpbmxpbmUgZmxvYXQKICBzcXJ0KGZsb2F0IF9feCkgeyByZXR1
cm4gOjpzcXJ0ZihfX3gpOyB9CgogIGlubGluZSBmbG9hdAogIHRhbihmbG9hdCBfX3gpIHsgcmV0
dXJuIDo6dGFuZihfX3gpOyB9CgogIGlubGluZSBmbG9hdAogIHRhbmgoZmxvYXQgX194KSB7IHJl
dHVybiA6OnRhbmhmKF9feCk7IH0KCiAgZXh0ZXJuICJDIiBkb3VibGUgYWNvcyhkb3VibGUgX194
KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgYXNpbihkb3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBk
b3VibGUgYXRhbihkb3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgYXRhbjIoZG91Ymxl
IF9feSwgZG91YmxlIF9feCk7CgogIGV4dGVybiAiQyIgZG91YmxlIGNlaWwoZG91YmxlIF9feCk7
CgogIGV4dGVybiAiQyIgZG91YmxlIGNvcyhkb3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBkb3Vi
bGUgY29zaChkb3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgZXhwKGRvdWJsZSBfX3gp
OwoKICBpbmxpbmUgZG91YmxlCiAgZmFicyhkb3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5f
ZmFicyhfX3gpOyB9CgogIGlubGluZSBkb3VibGUKICBhYnMoZG91YmxlIF9feCkgeyByZXR1cm4g
X19idWlsdGluX2ZhYnMoX194KTsgfQoKICBleHRlcm4gIkMiIGRvdWJsZSBmbG9vcihkb3VibGUg
X194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgZm1vZChkb3VibGUgX194LCBkb3VibGUgX195KTsK
CiAgZXh0ZXJuICJDIiBkb3VibGUgZnJleHAoZG91YmxlIF9feCwgaW50KiBfX2V4cCk7CgogIGV4
dGVybiAiQyIgZG91YmxlIGxkZXhwKGRvdWJsZSBfX3gsIGludCBfX2V4cCk7CgogIGV4dGVybiAi
QyIgZG91YmxlIGxvZyhkb3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgbG9nMTAoZG91
YmxlIF9feCk7CgogIGV4dGVybiAiQyIgZG91YmxlIG1vZGYoZG91YmxlIF9feCwgZG91YmxlKiBf
X2lwdHIpOwoKICBleHRlcm4gIkMiIGRvdWJsZSBwb3coZG91YmxlIF9feCwgZG91YmxlIF9feSk7
CgogIGlubGluZSBkb3VibGUKICBwb3coZG91YmxlIF9feCwgaW50IF9faSkKICB7CiAgICByZXR1
cm4gX19wb3dfaGVscGVyKF9feCwgX19pKTsKICB9CgogIGV4dGVybiAiQyIgZG91YmxlIHNpbihk
b3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgc2luaChkb3VibGUgX194KTsKCiAgZXh0
ZXJuICJDIiBkb3VibGUgc3FydChkb3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgdGFu
KGRvdWJsZSBfX3gpOwoKICBleHRlcm4gIkMiIGRvdWJsZSB0YW5oKGRvdWJsZSBfX3gpOwoKICBp
bmxpbmUgbG9uZyBkb3VibGUKICBhYnMobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0
aW5fZmFic2woX194KTsgfQogIGlubGluZSBsb25nIGRvdWJsZQogIGFjb3MobG9uZyBkb3VibGUg
X194KSB7IHJldHVybiA6OmFjb3NsKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXNp
bihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXNpbmwoX194KTsgfQoKICBpbmxpbmUgbG9u
ZyBkb3VibGUKICBhdGFuKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphdGFubChfX3gpOyB9
CgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4yKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3Vi
bGUgX194KSB7IHJldHVybiA6OmF0YW4ybChfX3ksIF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91
YmxlCiAgY2VpbChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y2VpbGwoX194KTsgfQogIGlu
bGluZSBsb25nIGRvdWJsZQogIGNvcyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y29zbChf
X3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvc2gobG9uZyBkb3VibGUgX194KSB7IHJl
dHVybiA6OmNvc2hsKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZXhwKGxvbmcgZG91
YmxlIF9feCkgeyByZXR1cm4gOjpleHBsKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg
ZmFicyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9CiAg
aW5saW5lIGxvbmcgZG91YmxlCiAgZmxvb3IobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmZs
b29ybChfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGZtb2QobG9uZyBkb3VibGUgX194
LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6Zm1vZGwoX194LCBfX3kpOyB9CgogIGlubGlu
ZSBsb25nIGRvdWJsZQogIGZyZXhwKGxvbmcgZG91YmxlIF9feCwgaW50KiBfX2V4cCkgeyByZXR1
cm4gOjpmcmV4cGwoX194LCBfX2V4cCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbGRleHAo
bG9uZyBkb3VibGUgX194LCBpbnQgX19leHApIHsgcmV0dXJuIDo6bGRleHBsKF9feCwgX19leHAp
OyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGxvZyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu
IDo6bG9nbChfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGxvZzEwKGxvbmcgZG91Ymxl
IF9feCkgeyByZXR1cm4gOjpsb2cxMGwoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBt
b2RmKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUqIF9faXB0cikgeyByZXR1cm4gOjptb2Rm
bChfX3gsIF9faXB0cik7IH0KICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6cG93bChfX3gsIF9feSk7IH0KCiAgaW5s
aW5lIGxvbmcgZG91YmxlCiAgcG93KGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikKICB7CiAgICBy
ZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19uKTsKICB9CgogIGlubGluZSBsb25nIGRvdWJsZQog
IHNpbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6c2lubChfX3gpOyB9CgogIGlubGluZSBs
b25nIGRvdWJsZQogIHNpbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnNpbmhsKF9feCk7
IH0KICBpbmxpbmUgbG9uZyBkb3VibGUKICBzcXJ0KGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4g
OjpzcXJ0bChfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHRhbihsb25nIGRvdWJsZSBf
X3gpIHsgcmV0dXJuIDo6dGFubChfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHRhbmgo
bG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbmhsKF9feCk7IH0KCn0KCm5hbWVzcGFjZSBz
dGQgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBfVHAKICAgIF9fY21hdGhf
cG93ZXIoX1RwIF9feCwgdW5zaWduZWQgaW50IF9fbikKICAgIHsKICAgICAgX1RwIF9feSA9IF9f
biAlIDIgPyBfX3ggOiAxOwoKICAgICAgd2hpbGUgKF9fbiA+Pj0gMSkKICAgICAgICB7CiAgICAg
ICAgICBfX3ggPSBfX3ggKiBfX3g7CiAgICAgICAgICBpZiAoX19uICUgMikKICAgICAgICAgICAg
X195ID0gX195ICogX194OwogICAgICAgIH0KCiAgICAgIHJldHVybiBfX3k7CiAgICB9Cn0KCnR5
cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CnR5cGVkZWYgX19nbnVjX3Zh
X2xpc3QgdmFfbGlzdDsKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6dmFfbGlzdDsKfQoKZXh0
ZXJuICJDIiB7Cgp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwoKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgd2ludF90Owp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChf
X21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0df
dWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnN0cnVjdCBfSU9f
anVtcF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKc3RydWN0
IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJ
TEUgKl9zYnVmOwoKICBpbnQgX3BvczsKfTsKCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFn
czsKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBf
SU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9w
dHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciog
X0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9i
YXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJz
OwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtz
aXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1u
OwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKICBf
SU9fbG9ja190ICpfbG9jazsKICBfX29mZjY0X3QgX29mZnNldDsKCiAgaW50IF91bnVzZWQyWzE2
XTsKCn07CgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVz
IF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRv
dXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwp0eXBlZGVm
IF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKiBfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNp
emVfdCBfX25ieXRlcyk7CnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKiBf
X2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbik7CnR5cGVkZWYgaW50IF9f
aW9fc2Vla19mbiAodm9pZCAqIF9fY29va2llLCBfX29mZl90IF9fcG9zLCBpbnQgX193KTsKCnR5
cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKiBfX2Nvb2tpZSk7Cgp0eXBlZGVmIF9faW9f
cmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29v
a2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1
bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsK
CnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAgX19pb193cml0ZV9mbiAq
d3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2VfZm4gKmNsb3NlOwp9IF9J
T19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNf
dCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlCnsKICBzdHJ1
Y3QgX0lPX0ZJTEUgX19maWxlOwogIGNvbnN0IHZvaWQgKl9fdnRhYmxlOwogIHZvaWQgKl9fY29v
a2llOwogIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jdGlvbnM7Cn07CgpleHRl
cm4gIkMiIHsKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpl
eHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fb3Zl
cmZsb3cgKF9JT19GSUxFICosIGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2dldGMgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lP
X0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19m
cCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93
ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cg
KCk7CgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0
ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9f
dmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwg
X19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9J
T192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3Qs
IF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKCmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9J
T19GSUxFICosIGludCwgX19zc2l6ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dl
dG4gKF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0
X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgp
OwpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGlu
dCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUg
KikgdGhyb3cgKCk7Cgp9Cgp0eXBlZGVmIF9fb2ZmX3QgZnBvc190OwoKdHlwZWRlZiBfX29mZjY0
X3QgZnBvczY0X3Q7CgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4
dGVybiBGSUxFICpzdGRlcnI7CgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2Zp
bGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xk
LCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2
b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9pZCkgdGhyb3cgKCk7Cgpl
eHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnRt
cG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25z
dCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkgdGhyb3cgKCk7CgpleHRlcm4gaW50
IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cg
KCk7CgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVu
YW1lLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4g
RklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0
aHJvdyAoKTsKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2ZpbGVuYW1lLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7Cgpl
eHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFt
ZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3Qg
Y2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQg
Kl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21v
ZGVzLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgpOwoKZXh0
ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywgc2l6
ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBzZXRidWYg
KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93
ICgpOwoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFy
ICpfX3Jlc3RyaWN0IF9fYnVmLCBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7Cgpl
eHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9f
cmVzdHJpY3QgX19idWYsIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc2V0
bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmcHJpbnRmIChG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p
IHRocm93ICgpOwoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRo
cm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnNwcmlu
dGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc25wcmludGYg
KGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19m
b3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgX192c25wcmludGYgKGNo
YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCgogICAgIF9fYXR0
cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwpleHRlcm4gaW50IHZz
bnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkK
CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7Cgpl
eHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2YsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQoKICAgICBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGlu
dCBfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZm10LCAuLi4pIHRocm93ICgpCgogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h
dF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqX19y
ZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pIHRocm93
ICgpCgogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkp
OwoKZXh0ZXJuIGludCB2ZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCgogICAgIF9fYXR0cmlidXRl
X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYg
KGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikgdGhyb3cgKCkK
ICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCmV4
dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5mIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4g
aW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCB2ZnNjYW5mIChG
SUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBf
X2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9y
bWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCmV4dGVybiBpbnQgdnNjYW5mIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQog
ICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSk7CgpleHRl
cm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCgog
ICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgpleHRl
cm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0YyAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJv
dyAoKTsKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBm
cHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGMg
KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHV0Y2hhciAo
aW50IF9fYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBf
X2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2Vk
IChpbnQgX19jKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpmZ2V0c191
bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cg
KCk7CmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5l
cHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsIEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hh
ciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19k
ZWxpbWl0ZXIsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIF9f
c3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsIHNpemVfdCAqX19y
ZXN0cmljdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJu
IGludCBmcHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKZXh0ZXJu
IGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBz
aXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsIHNpemVf
dCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVf
dCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwg
c2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKZXh0ZXJuIHNpemVf
dCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwg
c2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4g
c2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBz
aXplX3QgX19zaXplLCBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv
dyAoKTsKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwg
aW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwg
aW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpIHRocm93ICgpOwoKZXh0ZXJuIGludCBm
c2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBmc2Vla282NCAoRklMRSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwgaW50
IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9zKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19wb3MpIHRo
cm93ICgpOwoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBm
ZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3Vu
bG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tl
ZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNo
YXIgKl9fcykgdGhyb3cgKCk7CgpleHRlcm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBj
aGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJu
IF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCmV4dGVybiBpbnQgZmlsZW5v
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNo
YXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqY3Rlcm1p
ZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3Mp
IHRocm93ICgpOwoKc3RydWN0IG9ic3RhY2s7CgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChz
dHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRm
IChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmdzKSB0aHJvdyAoKTsKZXh0ZXJu
IHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZ0
cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgZnVubG9j
a2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKfQpuYW1lc3BhY2Ugc3RkCnsKICB1c2lu
ZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIGV4dGVybiAiQyIgaW50IHJlbW92ZShjb25z
dCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgcmVuYW1lKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFy
Kik7CiAgZXh0ZXJuICJDIiBGSUxFKiB0bXBmaWxlKHZvaWQpOwogIGV4dGVybiAiQyIgY2hhciog
dG1wbmFtKGNoYXIqKTsKICBleHRlcm4gIkMiIGludCBmY2xvc2UoRklMRSopOwogIGV4dGVybiAi
QyIgaW50IGZmbHVzaChGSUxFKik7CiAgZXh0ZXJuICJDIiBGSUxFKiBmb3Blbihjb25zdCBjaGFy
KiwgY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgRklMRSogZnJlb3Blbihjb25zdCBjaGFyKiwg
Y29uc3QgY2hhciosIEZJTEUqKTsKICBleHRlcm4gIkMiIHZvaWQgc2V0YnVmKEZJTEUqLCBjaGFy
Kik7CiAgZXh0ZXJuICJDIiBpbnQgc2V0dmJ1ZihGSUxFKiwgY2hhciosIGludCwgc2l6ZV90KTsK
ICBleHRlcm4gIkMiIGludCBmcHJpbnRmKEZJTEUqLCBjb25zdCBjaGFyKiwgLi4uKTsKICBleHRl
cm4gIkMiIGludCBmc2NhbmYoRklMRSosIGNvbnN0IGNoYXIqLCAuLi4pOwogIGV4dGVybiAiQyIg
aW50IHByaW50Zihjb25zdCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGludCBzY2FuZihjb25z
dCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGludCBzbnByaW50ZihjaGFyICosIHNpemVfdCwg
Y29uc3QgY2hhciosIC4uLik7CiAgZXh0ZXJuICJDIiBpbnQgc3ByaW50ZihjaGFyICosIGNvbnN0
IGNoYXIqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50IHNzY2FuZihjb25zdCBjaGFyKiwgY29uc3Qg
Y2hhciosIC4uLik7CiAgZXh0ZXJuICJDIiBpbnQgdmZwcmludGYoRklMRSosIGNvbnN0IGNoYXIq
LCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2ZnNjYW5mKEZJTEUqLCBjb25zdCBjaGFyKiwg
dmFfbGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgdnByaW50Zihjb25zdCBjaGFyKiwgdmFfbGlzdCk7
CiAgZXh0ZXJuICJDIiBpbnQgdnNjYW5mKGNvbnN0IGNoYXIqLCB2YV9saXN0KTsKICBleHRlcm4g
IkMiIGludCB2c25wcmludGYoY2hhciosIHNpemVfdCwgY29uc3QgY2hhciosIHZhX2xpc3QpOwog
IGV4dGVybiAiQyIgaW50IHZzcHJpbnRmKGNoYXIqLCBjb25zdCBjaGFyKiwgdmFfbGlzdCk7CiAg
ZXh0ZXJuICJDIiBpbnQgdnNzY2FuZihjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIHZhX2xpc3Qp
OwogIGV4dGVybiAiQyIgaW50IGZnZXRjKEZJTEUgKik7CiAgZXh0ZXJuICJDIiBjaGFyICpmZ2V0
cyhjaGFyKiwgaW50LCBGSUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZnB1dGMoaW50LCBGSUxFKik7
CiAgZXh0ZXJuICJDIiBpbnQgZnB1dHMoY29uc3QgY2hhciosIEZJTEUqKTsKICBleHRlcm4gIkMi
IGludCBnZXRjKEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBnZXRjaGFyKHZvaWQpOwogIGV4dGVy
biAiQyIgY2hhciAqZ2V0cyhjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgcHV0YyhpbnQsIEZJTEUq
KTsKICBleHRlcm4gIkMiIGludCBwdXRjaGFyKGludCk7CiAgZXh0ZXJuICJDIiBpbnQgcHV0cyhj
b25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgdW5nZXRjKGludCwgRklMRSopOwogIGV4dGVy
biAiQyIgc2l6ZV90IGZyZWFkKHZvaWQqLCBzaXplX3QsIHNpemVfdCwgRklMRSopOwogIGV4dGVy
biAiQyIgc2l6ZV90IGZ3cml0ZShjb25zdCB2b2lkKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUqKTsK
ICBleHRlcm4gIkMiIGludCBmZ2V0cG9zKEZJTEUqLCBmcG9zX3QqKTsKICBleHRlcm4gIkMiIGlu
dCBmc2VlayhGSUxFKiwgbG9uZyBpbnQsIGludCk7CiAgZXh0ZXJuICJDIiBpbnQgZnNldHBvcyhG
SUxFKiwgY29uc3QgZnBvc190Kik7CiAgZXh0ZXJuICJDIiBsb25nIGludCBmdGVsbChGSUxFKik7
CiAgZXh0ZXJuICJDIiB2b2lkIHJld2luZChGSUxFKik7CiAgZXh0ZXJuICJDIiB2b2lkIGNsZWFy
ZXJyKEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBmZW9mKEZJTEUqKTsKICBleHRlcm4gIkMiIGlu
dCBmZXJyb3IoRklMRSopOwogIGV4dGVybiAiQyIgdm9pZCBwZXJyb3IoY29uc3QgY2hhciopOwp9
Cgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IGNvdW50OwogIHdpbnRfdCB2YWx1ZTsKfSBtYnN0YXRl
X3Q7CnN0cnVjdCB0bTsKCmV4dGVybiAiQyIgewoKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSAod2No
YXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3Ny
YykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2NzbmNweSAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2NzY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
ZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVy
biB3Y2hhcl90ICp3Y3NuY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgd2NzY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikg
dGhyb3cgKCk7CgpleHRlcm4gaW50IHdjc25jbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19j
b25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgd2Nz
Y2FzZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRo
cm93ICgpOwoKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBf
X2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKZXh0ZXJuIGludCBf
X3djc2Nhc2VjbXBfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9f
czIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX3djc25jYXNlY21w
X2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3Qg
X19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgd2NzY29sbCAoX19j
b25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoKZXh0
ZXJuIHNpemVfdCB3Y3N4ZnJtICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsIF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf
X3djc2NvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIs
IF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBfX3djc3hmcm1fbCAo
d2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uLCBfX2xvY2Fs
ZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NkdXAgKF9fY29uc3Qgd2No
YXJfdCAqX19zKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHIgKF9fY29uc3Qgd2No
YXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2Nz
cmNociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCmV4
dGVybiBzaXplX3Qgd2NzY3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hh
cl90ICpfX3JlamVjdCkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IHdjc3NwbiAoX19jb25zdCB3
Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkgdGhyb3cgKCk7CgpleHRl
cm4gd2NoYXJfdCAqd2NzcGJyayAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hh
cl90ICpfX2FjY2VwdCkgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2Nzc3RyIChfX2NvbnN0
IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpIHRocm93ICgp
OwpleHRlcm4gd2NoYXJfdCAqd2NzdG9rICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVsaW0sIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fcHRy
KSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3QgX193Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19z
KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0
aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qgd2NzbmxlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHNp
emVfdCBfX21heGxlbikgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd21lbWNociAoX19jb25z
dCB3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsIF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiB3
Y2hhcl90ICp3bWVtY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsIF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90
ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpfX3MsIHdj
aGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiB3aW50X3QgYnRvd2MgKGlu
dCBfX2MpIHRocm93ICgpOwoKZXh0ZXJuIGludCB3Y3RvYiAod2ludF90IF9fYykgdGhyb3cgKCk7
CgpleHRlcm4gaW50IG1ic2luaXQgKF9fY29uc3QgbWJzdGF0ZV90ICpfX3BzKSB0aHJvdyAoKTsK
CmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwgbWJzdGF0ZV90ICpfX3ApIHRocm93
ICgpOwoKZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJf
dCBfX3djLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgpleHRlcm4gc2l6
ZV90IF9fbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLCBt
YnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IG1icmxl
biAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwgbWJzdGF0ZV90ICpf
X3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJf
dCAqX19yZXN0cmljdCBfX2RzdCwgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgpleHRlcm4g
c2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwgX19jb25zdCB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3Qg
X19wcykgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19kc3QsIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX25t
Yywgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7Cgpl
eHRlcm4gc2l6ZV90IHdjc25ydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsIF9fY29uc3Qg
d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX253Yywgc2l6ZV90IF9fbGVuLCBt
YnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CmV4dGVybiBpbnQgd2N3aWR0aCAo
d2ludF90IF9fYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IHdjc3dpZHRoIChfX2NvbnN0IHdjaGFy
X3QgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l
bmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgp
OwoKZXh0ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVy
biBsb25nIGludCB3Y3N0b2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVy
biB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cg
KCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvcSAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u
ZyBsb25nIGludCB3Y3N0b3VxIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3
Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4
dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGwgKF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i
YXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBp
bnQgd2NzdG91bGwgKF9fY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9u
ZyBpbnQgX193Y3N0b2xfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2Mp
IHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9sIChfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0
ciwgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9f
CmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwg
X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25l
ZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9j
YWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9sIChfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0
ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgX193Y3N0b2ZfbCAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fd2NzdG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRl
cm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApIHRocm93
ICgpOwoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3Jv
dXApIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9pbnRlcm5hbCAoX19j
b25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xf
aW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7Cgpl
eHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFy
X3QgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKiBfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBs
b25nIGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICogX19yZXN0
cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBp
bnQgX19ncm91cCkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25n
IGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJp
Y3QgX19ucHRyLCB3Y2hhcl90ICoqIF9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGlu
dCBfX2dyb3VwKSB0aHJvdyAoKTsKZXh0ZXJuIHdjaGFyX3QgKndjcGNweSAod2NoYXJfdCAqX19k
ZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3
Y3BuY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNpemVfdCBf
X24pIHRocm93ICgpOwp9Cm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWJzdGF0ZV90Owp9Cgpu
YW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90
cmFpdHM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp
dHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJU
PiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+
IHN0cmluZzsKCn0KCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0
aW9uKHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgogIHZvaWQKICBf
X3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQp
OwoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19s
ZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3Jh
bmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29u
c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv
aWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KCm5hbWVzcGFjZSBz
dGQKewoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4K
ICAgIGNsYXNzIGJhc2ljX2lvczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1i
dWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf
dHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAg
ICBjbGFzcyBiYXNpY19vc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3Ry
ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8
X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAg
ICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf
aXN0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBh
bGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh
clQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAg
IGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19m
aWxlYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBj
aGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+
ID4KICAgIGNsYXNzIGJhc2ljX29mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj
X2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8
X0NoYXJUPiA+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKICBjbGFzcyBpb3NfYmFz
ZTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1N0YXRlPiBzdHJ1Y3QgZnBvczsKCiAgdHlwZWRlZiBmcG9z
PG1ic3RhdGVfdD4gc3RyZWFtcG9zOwoKICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyPiBpb3M7CiAg
dHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4gc3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNf
aXN0cmVhbTxjaGFyPiBpc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3Ry
ZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07CiAgdHlwZWRlZiBi
YXNpY19zdHJpbmdidWY8Y2hhcj4gc3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0
cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxj
aGFyPiBvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0
cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBl
ZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJl
YW08Y2hhcj4gb2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07
Cn0KCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNsYXNzIGNvbXBs
ZXg7CiAgdGVtcGxhdGU8PiBjbGFzcyBjb21wbGV4PGZsb2F0PjsKICB0ZW1wbGF0ZTw+IGNsYXNz
IGNvbXBsZXg8ZG91YmxlPjsKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvbXBsZXg8bG9uZyBkb3VibGU+
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBhYnMoY29uc3QgY29tcGxleDxfVHA+Jik7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgYXJnKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIG5vcm0oY29uc3QgY29tcGxleDxfVHA+Jik7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IGNvbmooY29uc3QgY29tcGxleDxf
VHA+Jik7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gcG9sYXIoY29uc3Qg
X1RwJiwgY29uc3QgX1RwJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+
IGNvcyhjb25zdCBjb21wbGV4PF9UcD4mKTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBs
ZXg8X1RwPiBjb3NoKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4gY29tcGxleDxfVHA+IGV4cChjb25zdCBjb21wbGV4PF9UcD4mKTsKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBsb2coY29uc3QgY29tcGxleDxfVHA+Jik7CiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gbG9nMTAoY29uc3QgY29tcGxleDxfVHA+Jik7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gcG93KGNvbnN0IGNvbXBsZXg8
X1RwPiYsIGludCk7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gcG93KGNv
bnN0IGNvbXBsZXg8X1RwPiYsIGNvbnN0IF9UcCYpOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g
Y29tcGxleDxfVHA+IHBvdyhjb25zdCBjb21wbGV4PF9UcD4mLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGxleDxfVHA+Jik7CiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gcG93KGNvbnN0IF9UcCYsIGNvbnN0IGNvbXBsZXg8
X1RwPiYpOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IHNpbihjb25zdCBj
b21wbGV4PF9UcD4mKTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBzaW5o
KGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxf
VHA+IHNxcnQoY29uc3QgY29tcGxleDxfVHA+Jik7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBj
b21wbGV4PF9UcD4gdGFuKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4gY29tcGxleDxfVHA+IHRhbmgoY29uc3QgY29tcGxleDxfVHA+Jik7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgIGNsYXNzIGNvbXBsZXgKICAgIHsKICAgIHB1YmxpYzoKICAgICAg
dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgIGNvbXBsZXgoY29uc3QgX1RwJiA9IF9UcCgp
LCBjb25zdCBfVHAgJiA9IF9UcCgpKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAg
ICAgICBjb21wbGV4KGNvbnN0IGNvbXBsZXg8X1VwPiYpOwoKICAgICAgX1RwIHJlYWwoKSBjb25z
dDsKICAgICAgX1RwIGltYWcoKSBjb25zdDsKCiAgICAgIGNvbXBsZXg8X1RwPiYgb3BlcmF0b3I9
KGNvbnN0IF9UcCYpOwogICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yKz0oY29uc3QgX1RwJik7
CiAgICAgIGNvbXBsZXg8X1RwPiYgb3BlcmF0b3ItPShjb25zdCBfVHAmKTsKICAgICAgY29tcGxl
eDxfVHA+JiBvcGVyYXRvcio9KGNvbnN0IF9UcCYpOwogICAgICBjb21wbGV4PF9UcD4mIG9wZXJh
dG9yLz0oY29uc3QgX1RwJik7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CiAgICAgICAg
Y29tcGxleDxfVHA+JiBvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVXA+Jik7CiAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9VcD4KICAgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yKz0oY29uc3Qg
Y29tcGxleDxfVXA+Jik7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgICAgICBjb21w
bGV4PF9UcD4mIG9wZXJhdG9yLT0oY29uc3QgY29tcGxleDxfVXA+Jik7CiAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9VcD4KICAgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yKj0oY29uc3QgY29t
cGxleDxfVXA+Jik7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgICAgICBjb21wbGV4
PF9UcD4mIG9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVXA+Jik7CgogICAgcHJpdmF0ZToKICAg
ICAgX1RwIF9NX3JlYWwsIF9NX2ltYWc7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgX1RwCiAgICBjb21wbGV4PF9UcD46OnJlYWwoKSBjb25zdCB7IHJldHVybiBf
TV9yZWFsOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIGNv
bXBsZXg8X1RwPjo6aW1hZygpIGNvbnN0IHsgcmV0dXJuIF9NX2ltYWc7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgaW5saW5lCiAgICBjb21wbGV4PF9UcD46OmNvbXBsZXgoY29uc3Qg
X1RwJiBfX3IsIGNvbnN0IF9UcCYgX19pKQogICAgOiBfTV9yZWFsKF9fciksIF9NX2ltYWcoX19p
KSB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Vw
PgogICAgaW5saW5lCiAgICBjb21wbGV4PF9UcD46OmNvbXBsZXgoY29uc3QgY29tcGxleDxfVXA+
JiBfX3opCiAgICA6IF9NX3JlYWwoX196LnJlYWwoKSksIF9NX2ltYWcoX196LmltYWcoKSkgeyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbXBsZXg8X1RwPiYKICAgIGNvbXBsZXg8
X1RwPjo6b3BlcmF0b3I9KGNvbnN0IF9UcCYgX190KQogICAgewogICAgIF9NX3JlYWwgPSBfX3Q7
CiAgICAgX01faW1hZyA9IF9UcCgpOwogICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8X1RwPiYKICAgIGNvbXBsZXg8X1Rw
Pjo6b3BlcmF0b3IrPShjb25zdCBfVHAmIF9fdCkKICAgIHsKICAgICAgX01fcmVhbCArPSBfX3Q7
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
aW5saW5lIGNvbXBsZXg8X1RwPiYKICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3ItPShjb25zdCBf
VHAmIF9fdCkKICAgIHsKICAgICAgX01fcmVhbCAtPSBfX3Q7CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29tcGxleDxfVHA+JgogICAgY29t
cGxleDxfVHA+OjpvcGVyYXRvcio9KGNvbnN0IF9UcCYgX190KQogICAgewogICAgICBfTV9yZWFs
ICo9IF9fdDsKICAgICAgX01faW1hZyAqPSBfX3Q7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29tcGxleDxfVHA+JgogICAgY29tcGxleDxf
VHA+OjpvcGVyYXRvci89KGNvbnN0IF9UcCYgX190KQogICAgewogICAgICBfTV9yZWFsIC89IF9f
dDsKICAgICAgX01faW1hZyAvPSBfX3Q7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgogICAgY29tcGxl
eDxfVHA+JgogICAgY29tcGxleDxfVHA+OjpvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVXA+JiBf
X3opCiAgICB7CiAgICAgIF9NX3JlYWwgPSBfX3oucmVhbCgpOwogICAgICBfTV9pbWFnID0gX196
LmltYWcoKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CiAgICBjb21wbGV4PF9UcD4mCiAgICBjb21w
bGV4PF9UcD46Om9wZXJhdG9yKz0oY29uc3QgY29tcGxleDxfVXA+JiBfX3opCiAgICB7CiAgICAg
IF9NX3JlYWwgKz0gX196LnJlYWwoKTsKICAgICAgX01faW1hZyArPSBfX3ouaW1hZygpOwogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9VcD4KICAgIGNvbXBsZXg8X1RwPiYKICAgIGNvbXBsZXg8X1RwPjo6b3Bl
cmF0b3ItPShjb25zdCBjb21wbGV4PF9VcD4mIF9feikKICAgIHsKICAgICAgX01fcmVhbCAtPSBf
X3oucmVhbCgpOwogICAgICBfTV9pbWFnIC09IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X1VwPgogICAgY29tcGxleDxfVHA+JgogICAgY29tcGxleDxfVHA+OjpvcGVyYXRvcio9KGNvbnN0
IGNvbXBsZXg8X1VwPiYgX196KQogICAgewogICAgICBjb25zdCBfVHAgX19yID0gX01fcmVhbCAq
IF9fei5yZWFsKCkgLSBfTV9pbWFnICogX196LmltYWcoKTsKICAgICAgX01faW1hZyA9IF9NX3Jl
YWwgKiBfX3ouaW1hZygpICsgX01faW1hZyAqIF9fei5yZWFsKCk7CiAgICAgIF9NX3JlYWwgPSBf
X3I7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgogICAgY29tcGxleDxfVHA+JgogICAgY29tcGxleDxf
VHA+OjpvcGVyYXRvci89KGNvbnN0IGNvbXBsZXg8X1VwPiYgX196KQogICAgewogICAgICBjb25z
dCBfVHAgX19yID0gX01fcmVhbCAqIF9fei5yZWFsKCkgKyBfTV9pbWFnICogX196LmltYWcoKTsK
ICAgICAgY29uc3QgX1RwIF9fbiA9IG5vcm0oX196KTsKICAgICAgX01faW1hZyA9IChfTV9yZWFs
ICogX196LmltYWcoKSAtIF9NX2ltYWcgKiBfX3oucmVhbCgpKSAvIF9fbjsKICAgICAgX01fcmVh
bCA9IF9fciAvIF9fbjsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvcisoY29uc3QgY29t
cGxleDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gY29t
cGxleDxfVHA+IChfX3gpICs9IF9feTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvcisoY29uc3QgY29tcGxleDxfVHA+JiBfX3gs
IGNvbnN0IF9UcCYgX195KQogICAgeyByZXR1cm4gY29tcGxleDxfVHA+IChfX3gpICs9IF9feTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBv
cGVyYXRvcisoY29uc3QgX1RwJiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyBy
ZXR1cm4gY29tcGxleDxfVHA+IChfX3kpICs9IF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvci0oY29uc3QgY29tcGxleDxf
VHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gY29tcGxleDxf
VHA+IChfX3gpIC09IF9feTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg
Y29tcGxleDxfVHA+CiAgICBvcGVyYXRvci0oY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0
IF9UcCYgX195KQogICAgeyByZXR1cm4gY29tcGxleDxfVHA+IChfX3gpIC09IF9feTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRv
ci0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4g
Y29tcGxleDxfVHA+IChfX3gpIC09IF9feTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvciooY29uc3QgY29tcGxleDxfVHA+JiBf
X3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gY29tcGxleDxfVHA+IChf
X3gpICo9IF9feTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxl
eDxfVHA+CiAgICBvcGVyYXRvciooY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IF9UcCYg
X195KQogICAgeyByZXR1cm4gY29tcGxleDxfVHA+IChfX3gpICo9IF9feTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvciooY29u
c3QgX1RwJiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gY29tcGxl
eDxfVHA+IChfX3kpICo9IF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxp
bmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvci8oY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNv
bnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gY29tcGxleDxfVHA+IChfX3gpIC89
IF9feTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+
CiAgICBvcGVyYXRvci8oY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IF9UcCYgX195KQog
ICAgeyByZXR1cm4gY29tcGxleDxfVHA+IChfX3gpIC89IF9feTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvci8oY29uc3QgX1Rw
JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gY29tcGxleDxfVHA+
IChfX3gpIC89IF9feTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29t
cGxleDxfVHA+CiAgICBvcGVyYXRvcisoY29uc3QgY29tcGxleDxfVHA+JiBfX3gpCiAgICB7IHJl
dHVybiBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8
X1RwPgogICAgb3BlcmF0b3ItKGNvbnN0IGNvbXBsZXg8X1RwPiYgX194KQogICAgeyByZXR1cm4g
Y29tcGxleDxfVHA+KC1fX3gucmVhbCgpLCAtX194LmltYWcoKSk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgY29tcGxleDxf
VHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gX194LnJlYWwo
KSA9PSBfX3kucmVhbCgpICYmIF9feC5pbWFnKCkgPT0gX195LmltYWcoKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBjb21w
bGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICB7IHJldHVybiBfX3gucmVhbCgpID09
IF9feSAmJiBfX3guaW1hZygpID09IF9UcCgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9UcCYgX194LCBjb25zdCBjb21w
bGV4PF9UcD4mIF9feSkKICAgIHsgcmV0dXJuIF9feCA9PSBfX3kucmVhbCgpICYmIF9UcCgpID09
IF9feS5pbWFnKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGJvb2wK
ICAgIG9wZXJhdG9yIT0oY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1Rw
PiYgX195KQogICAgeyByZXR1cm4gX194LnJlYWwoKSAhPSBfX3kucmVhbCgpIHx8IF9feC5pbWFn
KCkgIT0gX195LmltYWcoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3IhPShjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBf
X3kpCiAgICB7IHJldHVybiBfX3gucmVhbCgpICE9IF9feSB8fCBfX3guaW1hZygpICE9IF9UcCgp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
ciE9KGNvbnN0IF9UcCYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKICAgIHsgcmV0dXJu
IF9feCAhPSBfX3kucmVhbCgpIHx8IF9UcCgpICE9IF9feS5pbWFnKCk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYsIGNvbXBsZXg8X1RwPiYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs
IHR5cGVuYW1lIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiwgY29uc3QgY29tcGxleDxfVHA+Jik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu
bGluZSBfVHAKICAgIHJlYWwoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7IHJldHVybiBf
X3oucmVhbCgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAg
IGltYWcoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7IHJldHVybiBfX3ouaW1hZygpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIGFicyhjb25zdCBj
b21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgX1RwIF9feCA9IF9fei5yZWFsKCk7CiAgICAg
IF9UcCBfX3kgPSBfX3ouaW1hZygpOwogICAgICBjb25zdCBfVHAgX19zID0gYWJzKF9feCkgKyBh
YnMoX195KTsKICAgICAgaWYgKF9fcyA9PSBfVHAoKSkKICAgICAgICByZXR1cm4gX19zOwogICAg
ICBfX3ggLz0gX19zOwogICAgICBfX3kgLz0gX19zOwogICAgICByZXR1cm4gX19zICogc3FydChf
X3ggKiBfX3ggKyBfX3kgKiBfX3kpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBpbmxpbmUgX1RwCiAgICBhcmcoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7IHJldHVy
biBhdGFuMihfX3ouaW1hZygpLCBfX3oucmVhbCgpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICBpbmxpbmUgX1RwCiAgICBub3JtKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAg
ewogICAgICBfVHAgX19yZXMgPSBhYnMoX196KTsKICAgICAgcmV0dXJuIF9fcmVzICogX19yZXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4K
ICAgIHBvbGFyKGNvbnN0IF9UcCYgX19yaG8sIGNvbnN0IF9UcCYgX190aGV0YSkKICAgIHsgcmV0
dXJuIGNvbXBsZXg8X1RwPihfX3JobyAqIGNvcyhfX3RoZXRhKSwgX19yaG8gKiBzaW4oX190aGV0
YSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4K
ICAgIGNvbmooY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7IHJldHVybiBjb21wbGV4PF9U
cD4oX196LnJlYWwoKSwgLV9fei5pbWFnKCkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIGNvcyhjb25zdCBjb21wbGV4PF9UcD4mIF9feikK
ICAgIHsKICAgICAgY29uc3QgX1RwIF9feCA9IF9fei5yZWFsKCk7CiAgICAgIGNvbnN0IF9UcCBf
X3kgPSBfX3ouaW1hZygpOwogICAgICByZXR1cm4gY29tcGxleDxfVHA+KGNvcyhfX3gpICogY29z
aChfX3kpLCAtc2luKF9feCkgKiBzaW5oKF9feSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBjb3NoKGNvbnN0IGNvbXBsZXg8X1Rw
PiYgX196KQogICAgewogICAgICBjb25zdCBfVHAgX194ID0gX196LnJlYWwoKTsKICAgICAgY29u
c3QgX1RwIF9feSA9IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiBjb21wbGV4PF9UcD4oY29zaChf
X3gpICogY29zKF9feSksIHNpbmgoX194KSAqIHNpbihfX3kpKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8X1RwPgogICAgZXhwKGNvbnN0IGNvbXBs
ZXg8X1RwPiYgX196KQogICAgeyByZXR1cm4gcG9sYXIoZXhwKF9fei5yZWFsKCkpLCBfX3ouaW1h
ZygpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+
CiAgICBsb2coY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7IHJldHVybiBjb21wbGV4PF9U
cD4obG9nKGFicyhfX3opKSwgYXJnKF9feikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIGxvZzEwKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196
KQogICAgeyByZXR1cm4gbG9nKF9feikgLyBsb2coX1RwKDEwLjApKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBzaW4oY29uc3QgY29tcGxl
eDxfVHA+JiBfX3opCiAgICB7CiAgICAgIGNvbnN0IF9UcCBfX3ggPSBfX3oucmVhbCgpOwogICAg
ICBjb25zdCBfVHAgX195ID0gX196LmltYWcoKTsKICAgICAgcmV0dXJuIGNvbXBsZXg8X1RwPihz
aW4oX194KSAqIGNvc2goX195KSwgY29zKF9feCkgKiBzaW5oKF9feSkpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBzaW5oKGNvbnN0
IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBjb25zdCBfVHAgX194ID0gX196LnJlYWwo
KTsKICAgICAgY29uc3QgX1RwIF9feSA9IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiBjb21wbGV4
PF9UcD4oc2luaChfX3gpICogY29zKF9feSksIGNvc2goX194KSAqIHNpbihfX3kpKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29tcGxleDxfVHA+CiAgICBzcXJ0KGNvbnN0
IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfVHAgX194ID0gX196LnJlYWwoKTsKICAg
ICAgX1RwIF9feSA9IF9fei5pbWFnKCk7CgogICAgICBpZiAoX194ID09IF9UcCgpKQogICAgICAg
IHsKICAgICAgICAgIF9UcCBfX3QgPSBzcXJ0KGFicyhfX3kpIC8gMik7CiAgICAgICAgICByZXR1
cm4gY29tcGxleDxfVHA+KF9fdCwgX195IDwgX1RwKCkgPyAtX190IDogX190KTsKICAgICAgICB9
CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfVHAgX190ID0gc3FydCgyICogKGFicyhf
X3opICsgYWJzKF9feCkpKTsKICAgICAgICAgIF9UcCBfX3UgPSBfX3QgLyAyOwogICAgICAgICAg
cmV0dXJuIF9feCA+IF9UcCgpCiAgICAgICAgICAgID8gY29tcGxleDxfVHA+KF9fdSwgX195IC8g
X190KQogICAgICAgICAgICA6IGNvbXBsZXg8X1RwPihhYnMoX195KSAvIF9fdCwgX195IDwgX1Rw
KCkgPyAtX191IDogX191KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIHRhbihjb25zdCBjb21wbGV4PF9UcD4mIF9f
eikKICAgIHsKICAgICAgcmV0dXJuIHNpbihfX3opIC8gY29zKF9feik7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIHRhbmgoY29uc3Qg
Y29tcGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAgIHJldHVybiBzaW5oKF9feikgLyBjb3NoKF9f
eik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9U
cD4KICAgIHBvdyhjb25zdCBjb21wbGV4PF9UcD4mIF9feiwgaW50IF9fbikKICAgIHsKICAgICAg
cmV0dXJuIF9fcG93X2hlbHBlcihfX3osIF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIHBvdyhjb25zdCBjb21wbGV4PF9UcD4m
IF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICB7CiAgICAgIHJldHVybiBleHAoX195ICogbG9nKF9f
eCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxf
VHA+CiAgICBwb3coY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYg
X195KQogICAgewogICAgICByZXR1cm4gZXhwKF9feSAqIGxvZyhfX3gpKTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8X1RwPgogICAgcG93KGNvbnN0
IF9UcCYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKICAgIHsKICAgICAgcmV0dXJuIGV4
cChfX3kgKiBsb2coX194KSk7CiAgICB9CgogIHRlbXBsYXRlPD4gY2xhc3MgY29tcGxleDxmbG9h
dD4KICB7CiAgcHVibGljOgogICAgdHlwZWRlZiBmbG9hdCB2YWx1ZV90eXBlOwoKICAgIGNvbXBs
ZXgoZmxvYXQgPSAwLjBmLCBmbG9hdCA9IDAuMGYpOwoKICAgIGV4cGxpY2l0IGNvbXBsZXgoY29u
c3QgY29tcGxleDxkb3VibGU+Jik7CiAgICBleHBsaWNpdCBjb21wbGV4KGNvbnN0IGNvbXBsZXg8
bG9uZyBkb3VibGU+Jik7CgogICAgZmxvYXQgcmVhbCgpIGNvbnN0OwogICAgZmxvYXQgaW1hZygp
IGNvbnN0OwoKICAgIGNvbXBsZXg8ZmxvYXQ+JiBvcGVyYXRvcj0oZmxvYXQpOwogICAgY29tcGxl
eDxmbG9hdD4mIG9wZXJhdG9yKz0oZmxvYXQpOwogICAgY29tcGxleDxmbG9hdD4mIG9wZXJhdG9y
LT0oZmxvYXQpOwogICAgY29tcGxleDxmbG9hdD4mIG9wZXJhdG9yKj0oZmxvYXQpOwogICAgY29t
cGxleDxmbG9hdD4mIG9wZXJhdG9yLz0oZmxvYXQpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICAgICAgY29tcGxleDxmbG9hdD4mb3BlcmF0b3I9KGNvbnN0IGNvbXBsZXg8X1RwPiYpOwog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgICBjb21wbGV4PGZsb2F0PiYgb3BlcmF0b3Ir
PShjb25zdCBjb21wbGV4PF9UcD4mKTsKICAgIHRlbXBsYXRlPGNsYXNzIF9UcD4KICAgICAgY29t
cGxleDxmbG9hdD4mIG9wZXJhdG9yLT0oY29uc3QgY29tcGxleDxfVHA+Jik7CiAgICB0ZW1wbGF0
ZTxjbGFzcyBfVHA+CiAgICAgIGNvbXBsZXg8ZmxvYXQ+JiBvcGVyYXRvcio9KGNvbnN0IGNvbXBs
ZXg8X1RwPiYpOwogICAgdGVtcGxhdGU8Y2xhc3MgX1RwPgogICAgICBjb21wbGV4PGZsb2F0PiZv
cGVyYXRvci89KGNvbnN0IGNvbXBsZXg8X1RwPiYpOwoKICBwcml2YXRlOgogICAgdHlwZWRlZiBf
X2NvbXBsZXhfXyBmbG9hdCBfQ29tcGxleFQ7CiAgICBfQ29tcGxleFQgX01fdmFsdWU7CgogICAg
Y29tcGxleChfQ29tcGxleFQgX196KSA6IF9NX3ZhbHVlKF9feikgeyB9CgogICAgZnJpZW5kIGNs
YXNzIGNvbXBsZXg8ZG91YmxlPjsKICAgIGZyaWVuZCBjbGFzcyBjb21wbGV4PGxvbmcgZG91Ymxl
PjsKICB9OwoKICBpbmxpbmUgZmxvYXQKICBjb21wbGV4PGZsb2F0Pjo6cmVhbCgpIGNvbnN0CiAg
eyByZXR1cm4gX19yZWFsX18gX01fdmFsdWU7IH0KCiAgaW5saW5lIGZsb2F0CiAgY29tcGxleDxm
bG9hdD46OmltYWcoKSBjb25zdAogIHsgcmV0dXJuIF9faW1hZ19fIF9NX3ZhbHVlOyB9CgogIGlu
bGluZQogIGNvbXBsZXg8ZmxvYXQ+Ojpjb21wbGV4KGZsb2F0IHIsIGZsb2F0IGkpCiAgewogICAg
X19yZWFsX18gX01fdmFsdWUgPSByOwogICAgX19pbWFnX18gX01fdmFsdWUgPSBpOwogIH0KCiAg
aW5saW5lIGNvbXBsZXg8ZmxvYXQ+JgogIGNvbXBsZXg8ZmxvYXQ+OjpvcGVyYXRvcj0oZmxvYXQg
X19mKQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX19mOwogICAgX19pbWFnX18gX01fdmFs
dWUgPSAwLjBmOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIGNvbXBsZXg8ZmxvYXQ+
JgogIGNvbXBsZXg8ZmxvYXQ+OjpvcGVyYXRvcis9KGZsb2F0IF9fZikKICB7CiAgICBfX3JlYWxf
XyBfTV92YWx1ZSArPSBfX2Y7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgY29tcGxl
eDxmbG9hdD4mCiAgY29tcGxleDxmbG9hdD46Om9wZXJhdG9yLT0oZmxvYXQgX19mKQogIHsKICAg
IF9fcmVhbF9fIF9NX3ZhbHVlIC09IF9fZjsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGlu
ZSBjb21wbGV4PGZsb2F0PiYKICBjb21wbGV4PGZsb2F0Pjo6b3BlcmF0b3IqPShmbG9hdCBfX2Yp
CiAgewogICAgX01fdmFsdWUgKj0gX19mOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5l
IGNvbXBsZXg8ZmxvYXQ+JgogIGNvbXBsZXg8ZmxvYXQ+OjpvcGVyYXRvci89KGZsb2F0IF9fZikK
ICB7CiAgICBfTV92YWx1ZSAvPSBfX2Y7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIGNvbXBsZXg8ZmxvYXQ+JgogIGNvbXBsZXg8ZmxvYXQ+
OjpvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgewogICAgX19yZWFsX18gX01f
dmFsdWUgPSBfX3oucmVhbCgpOwogICAgX19pbWFnX18gX01fdmFsdWUgPSBfX3ouaW1hZygpOwog
ICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSBj
b21wbGV4PGZsb2F0PiYKICBjb21wbGV4PGZsb2F0Pjo6b3BlcmF0b3IrPShjb25zdCBjb21wbGV4
PF9UcD4mIF9feikKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1ZSArPSBfX3oucmVhbCgpOwogICAg
X19pbWFnX18gX01fdmFsdWUgKz0gX196LmltYWcoKTsKICAgIHJldHVybiAqdGhpczsKICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PGZsb2F0PiYKICAgIGNv
bXBsZXg8ZmxvYXQ+OjpvcGVyYXRvci09KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewog
ICAgIF9fcmVhbF9fIF9NX3ZhbHVlIC09IF9fei5yZWFsKCk7CiAgICAgX19pbWFnX18gX01fdmFs
dWUgLT0gX196LmltYWcoKTsKICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PGZsb2F0PiYKICAgIGNvbXBsZXg8ZmxvYXQ+
OjpvcGVyYXRvcio9KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfQ29tcGxl
eFQgX190OwogICAgICBfX3JlYWxfXyBfX3QgPSBfX3oucmVhbCgpOwogICAgICBfX2ltYWdfXyBf
X3QgPSBfX3ouaW1hZygpOwogICAgICBfTV92YWx1ZSAqPSBfX3Q7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8Zmxv
YXQ+JgogICAgY29tcGxleDxmbG9hdD46Om9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVHA+JiBf
X3opCiAgICB7CiAgICAgIF9Db21wbGV4VCBfX3Q7CiAgICAgIF9fcmVhbF9fIF9fdCA9IF9fei5y
ZWFsKCk7CiAgICAgIF9faW1hZ19fIF9fdCA9IF9fei5pbWFnKCk7CiAgICAgIF9NX3ZhbHVlIC89
IF9fdDsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvbXBs
ZXg8ZG91YmxlPgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGRvdWJsZSB2YWx1ZV90eXBlOwoK
ICAgIGNvbXBsZXgoZG91YmxlID0wLjAsIGRvdWJsZSA9MC4wKTsKCiAgICBjb21wbGV4KGNvbnN0
IGNvbXBsZXg8ZmxvYXQ+Jik7CiAgICBleHBsaWNpdCBjb21wbGV4KGNvbnN0IGNvbXBsZXg8bG9u
ZyBkb3VibGU+Jik7CgogICAgZG91YmxlIHJlYWwoKSBjb25zdDsKICAgIGRvdWJsZSBpbWFnKCkg
Y29uc3Q7CgogICAgY29tcGxleDxkb3VibGU+JiBvcGVyYXRvcj0oZG91YmxlKTsKICAgIGNvbXBs
ZXg8ZG91YmxlPiYgb3BlcmF0b3IrPShkb3VibGUpOwogICAgY29tcGxleDxkb3VibGU+JiBvcGVy
YXRvci09KGRvdWJsZSk7CiAgICBjb21wbGV4PGRvdWJsZT4mIG9wZXJhdG9yKj0oZG91YmxlKTsK
ICAgIGNvbXBsZXg8ZG91YmxlPiYgb3BlcmF0b3IvPShkb3VibGUpOwoKICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgICAgY29tcGxleDxkb3VibGU+JiBvcGVyYXRvcj0oY29uc3QgY29tcGxl
eDxfVHA+Jik7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgIGNvbXBsZXg8ZG91Ymxl
PiYgb3BlcmF0b3IrPShjb25zdCBjb21wbGV4PF9UcD4mKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICAgICAgY29tcGxleDxkb3VibGU+JiBvcGVyYXRvci09KGNvbnN0IGNvbXBsZXg8X1Rw
PiYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgICBjb21wbGV4PGRvdWJsZT4mIG9w
ZXJhdG9yKj0oY29uc3QgY29tcGxleDxfVHA+Jik7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICAgIGNvbXBsZXg8ZG91YmxlPiYgb3BlcmF0b3IvPShjb25zdCBjb21wbGV4PF9UcD4mKTsK
CiAgcHJpdmF0ZToKICAgIHR5cGVkZWYgX19jb21wbGV4X18gZG91YmxlIF9Db21wbGV4VDsKICAg
IF9Db21wbGV4VCBfTV92YWx1ZTsKCiAgICBjb21wbGV4KF9Db21wbGV4VCBfX3opIDogX01fdmFs
dWUoX196KSB7IH0KCiAgICBmcmllbmQgY2xhc3MgY29tcGxleDxmbG9hdD47CiAgICBmcmllbmQg
Y2xhc3MgY29tcGxleDxsb25nIGRvdWJsZT47CiAgfTsKCiAgaW5saW5lIGRvdWJsZQogIGNvbXBs
ZXg8ZG91YmxlPjo6cmVhbCgpIGNvbnN0CiAgeyByZXR1cm4gX19yZWFsX18gX01fdmFsdWU7IH0K
CiAgaW5saW5lIGRvdWJsZQogIGNvbXBsZXg8ZG91YmxlPjo6aW1hZygpIGNvbnN0CiAgeyByZXR1
cm4gX19pbWFnX18gX01fdmFsdWU7IH0KCiAgaW5saW5lCiAgY29tcGxleDxkb3VibGU+Ojpjb21w
bGV4KGRvdWJsZSBfX3IsIGRvdWJsZSBfX2kpCiAgewogICAgX19yZWFsX18gX01fdmFsdWUgPSBf
X3I7CiAgICBfX2ltYWdfXyBfTV92YWx1ZSA9IF9faTsKICB9CgogIGlubGluZSBjb21wbGV4PGRv
dWJsZT4mCiAgY29tcGxleDxkb3VibGU+OjpvcGVyYXRvcj0oZG91YmxlIF9fZCkKICB7CiAgICBf
X3JlYWxfXyBfTV92YWx1ZSA9IF9fZDsKICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gMC4wOwogICAg
cmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIGNvbXBsZXg8ZG91YmxlPiYKICBjb21wbGV4PGRv
dWJsZT46Om9wZXJhdG9yKz0oZG91YmxlIF9fZCkKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1ZSAr
PSBfX2Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgY29tcGxleDxkb3VibGU+Jgog
IGNvbXBsZXg8ZG91YmxlPjo6b3BlcmF0b3ItPShkb3VibGUgX19kKQogIHsKICAgIF9fcmVhbF9f
IF9NX3ZhbHVlIC09IF9fZDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4
PGRvdWJsZT4mCiAgY29tcGxleDxkb3VibGU+OjpvcGVyYXRvcio9KGRvdWJsZSBfX2QpCiAgewog
ICAgX01fdmFsdWUgKj0gX19kOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIGNvbXBs
ZXg8ZG91YmxlPiYKICBjb21wbGV4PGRvdWJsZT46Om9wZXJhdG9yLz0oZG91YmxlIF9fZCkKICB7
CiAgICBfTV92YWx1ZSAvPSBfX2Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxkb3VibGU+JgogICAgY29tcGxleDxkb3Vi
bGU+OjpvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9fcmVh
bF9fIF9NX3ZhbHVlID0gX196LnJlYWwoKTsKICAgICAgX19pbWFnX18gX01fdmFsdWUgPSBfX3ou
aW1hZygpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICAgIGlubGluZSBjb21wbGV4PGRvdWJsZT4mCiAgICBjb21wbGV4PGRvdWJsZT46Om9wZXJh
dG9yKz0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9fcmVhbF9fIF9NX3Zh
bHVlICs9IF9fei5yZWFsKCk7CiAgICAgIF9faW1hZ19fIF9NX3ZhbHVlICs9IF9fei5pbWFnKCk7
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
aW5saW5lIGNvbXBsZXg8ZG91YmxlPiYKICAgIGNvbXBsZXg8ZG91YmxlPjo6b3BlcmF0b3ItPShj
b25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgX19yZWFsX18gX01fdmFsdWUgLT0g
X196LnJlYWwoKTsKICAgICAgX19pbWFnX18gX01fdmFsdWUgLT0gX196LmltYWcoKTsKICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg
Y29tcGxleDxkb3VibGU+JgogICAgY29tcGxleDxkb3VibGU+OjpvcGVyYXRvcio9KGNvbnN0IGNv
bXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfQ29tcGxleFQgX190OwogICAgICBfX3JlYWxf
XyBfX3QgPSBfX3oucmVhbCgpOwogICAgICBfX2ltYWdfXyBfX3QgPSBfX3ouaW1hZygpOwogICAg
ICBfTV92YWx1ZSAqPSBfX3Q7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8ZG91YmxlPiYKICAgIGNvbXBsZXg8ZG91
YmxlPjo6b3BlcmF0b3IvPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgX0Nv
bXBsZXhUIF9fdDsKICAgICAgX19yZWFsX18gX190ID0gX196LnJlYWwoKTsKICAgICAgX19pbWFn
X18gX190ID0gX196LmltYWcoKTsKICAgICAgX01fdmFsdWUgLz0gX190OwogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPD4gY2xhc3MgY29tcGxleDxsb25nIGRvdWJsZT4KICB7
CiAgcHVibGljOgogICAgdHlwZWRlZiBsb25nIGRvdWJsZSB2YWx1ZV90eXBlOwoKICAgIGNvbXBs
ZXgobG9uZyBkb3VibGUgPSAwLjBMLCBsb25nIGRvdWJsZSA9IDAuMEwpOwoKICAgIGNvbXBsZXgo
Y29uc3QgY29tcGxleDxmbG9hdD4mKTsKICAgIGNvbXBsZXgoY29uc3QgY29tcGxleDxkb3VibGU+
Jik7CgogICAgbG9uZyBkb3VibGUgcmVhbCgpIGNvbnN0OwogICAgbG9uZyBkb3VibGUgaW1hZygp
IGNvbnN0OwoKICAgIGNvbXBsZXg8bG9uZyBkb3VibGU+JiBvcGVyYXRvcj0gKGxvbmcgZG91Ymxl
KTsKICAgIGNvbXBsZXg8bG9uZyBkb3VibGU+JiBvcGVyYXRvcis9IChsb25nIGRvdWJsZSk7CiAg
ICBjb21wbGV4PGxvbmcgZG91YmxlPiYgb3BlcmF0b3ItPSAobG9uZyBkb3VibGUpOwogICAgY29t
cGxleDxsb25nIGRvdWJsZT4mIG9wZXJhdG9yKj0gKGxvbmcgZG91YmxlKTsKICAgIGNvbXBsZXg8
bG9uZyBkb3VibGU+JiBvcGVyYXRvci89IChsb25nIGRvdWJsZSk7CgogICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPgogICAgICBjb21wbGV4PGxvbmcgZG91YmxlPiYgb3BlcmF0b3I9KGNvbnN0IGNv
bXBsZXg8X1RwPiYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgICBjb21wbGV4PGxv
bmcgZG91YmxlPiYgb3BlcmF0b3IrPShjb25zdCBjb21wbGV4PF9UcD4mKTsKICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgICAgY29tcGxleDxsb25nIGRvdWJsZT4mIG9wZXJhdG9yLT0oY29u
c3QgY29tcGxleDxfVHA+Jik7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgIGNvbXBs
ZXg8bG9uZyBkb3VibGU+JiBvcGVyYXRvcio9KGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogICAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgICBjb21wbGV4PGxvbmcgZG91YmxlPiYgb3BlcmF0b3Iv
PShjb25zdCBjb21wbGV4PF9UcD4mKTsKCiAgcHJpdmF0ZToKICAgIHR5cGVkZWYgX19jb21wbGV4
X18gbG9uZyBkb3VibGUgX0NvbXBsZXhUOwogICAgX0NvbXBsZXhUIF9NX3ZhbHVlOwoKICAgIGNv
bXBsZXgoX0NvbXBsZXhUIF9feikgOiBfTV92YWx1ZShfX3opIHsgfQoKICAgIGZyaWVuZCBjbGFz
cyBjb21wbGV4PGZsb2F0PjsKICAgIGZyaWVuZCBjbGFzcyBjb21wbGV4PGRvdWJsZT47CiAgfTsK
CiAgaW5saW5lCiAgY29tcGxleDxsb25nIGRvdWJsZT46OmNvbXBsZXgobG9uZyBkb3VibGUgX19y
LCBsb25nIGRvdWJsZSBfX2kpCiAgewogICAgX19yZWFsX18gX01fdmFsdWUgPSBfX3I7CiAgICBf
X2ltYWdfXyBfTV92YWx1ZSA9IF9faTsKICB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvbXBs
ZXg8bG9uZyBkb3VibGU+OjpyZWFsKCkgY29uc3QKICB7IHJldHVybiBfX3JlYWxfXyBfTV92YWx1
ZTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6aW1hZygp
IGNvbnN0CiAgeyByZXR1cm4gX19pbWFnX18gX01fdmFsdWU7IH0KCiAgaW5saW5lIGNvbXBsZXg8
bG9uZyBkb3VibGU+JgogIGNvbXBsZXg8bG9uZyBkb3VibGU+OjpvcGVyYXRvcj0obG9uZyBkb3Vi
bGUgX19yKQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX19yOwogICAgX19pbWFnX18gX01f
dmFsdWUgPSAwLjBMOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIGNvbXBsZXg8bG9u
ZyBkb3VibGU+JgogIGNvbXBsZXg8bG9uZyBkb3VibGU+OjpvcGVyYXRvcis9KGxvbmcgZG91Ymxl
IF9fcikKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1ZSArPSBfX3I7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQoKICBpbmxpbmUgY29tcGxleDxsb25nIGRvdWJsZT4mCiAgY29tcGxleDxsb25nIGRvdWJs
ZT46Om9wZXJhdG9yLT0obG9uZyBkb3VibGUgX19yKQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVl
IC09IF9fcjsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4PGxvbmcgZG91
YmxlPiYKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6b3BlcmF0b3IqPShsb25nIGRvdWJsZSBfX3Ip
CiAgewogICAgX19yZWFsX18gX01fdmFsdWUgKj0gX19yOwogICAgcmV0dXJuICp0aGlzOwogIH0K
CiAgaW5saW5lIGNvbXBsZXg8bG9uZyBkb3VibGU+JgogIGNvbXBsZXg8bG9uZyBkb3VibGU+Ojpv
cGVyYXRvci89KGxvbmcgZG91YmxlIF9fcikKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1ZSAvPSBf
X3I7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bmxpbmUgY29tcGxleDxsb25nIGRvdWJsZT4mCiAgICBjb21wbGV4PGxvbmcgZG91YmxlPjo6b3Bl
cmF0b3I9KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfX3JlYWxfXyBfTV92
YWx1ZSA9IF9fei5yZWFsKCk7CiAgICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gX196LmltYWcoKTsK
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bmxpbmUgY29tcGxleDxsb25nIGRvdWJsZT4mCiAgICBjb21wbGV4PGxvbmcgZG91YmxlPjo6b3Bl
cmF0b3IrPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgX19yZWFsX18gX01f
dmFsdWUgKz0gX196LnJlYWwoKTsKICAgICAgX19pbWFnX18gX01fdmFsdWUgKz0gX196LmltYWco
KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBpbmxpbmUgY29tcGxleDxsb25nIGRvdWJsZT4mCiAgICBjb21wbGV4PGxvbmcgZG91YmxlPjo6
b3BlcmF0b3ItPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgX19yZWFsX18g
X01fdmFsdWUgLT0gX196LnJlYWwoKTsKICAgICAgX19pbWFnX18gX01fdmFsdWUgLT0gX196Lmlt
YWcoKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgY29tcGxleDxsb25nIGRvdWJsZT4mCiAgICBjb21wbGV4PGxvbmcgZG91Ymxl
Pjo6b3BlcmF0b3IqPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgX0NvbXBs
ZXhUIF9fdDsKICAgICAgX19yZWFsX18gX190ID0gX196LnJlYWwoKTsKICAgICAgX19pbWFnX18g
X190ID0gX196LmltYWcoKTsKICAgICAgX01fdmFsdWUgKj0gX190OwogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PGxv
bmcgZG91YmxlPiYKICAgIGNvbXBsZXg8bG9uZyBkb3VibGU+OjpvcGVyYXRvci89KGNvbnN0IGNv
bXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfQ29tcGxleFQgX190OwogICAgICBfX3JlYWxf
XyBfX3QgPSBfX3oucmVhbCgpOwogICAgICBfX2ltYWdfXyBfX3QgPSBfX3ouaW1hZygpOwogICAg
ICBfTV92YWx1ZSAvPSBfX3Q7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgaW5saW5lCiAg
Y29tcGxleDxmbG9hdD46OmNvbXBsZXgoY29uc3QgY29tcGxleDxkb3VibGU+JiBfX3opCiAgOiBf
TV92YWx1ZShfQ29tcGxleFQoX196Ll9NX3ZhbHVlKSkgeyB9CgogIGlubGluZQogIGNvbXBsZXg8
ZmxvYXQ+Ojpjb21wbGV4KGNvbnN0IGNvbXBsZXg8bG9uZyBkb3VibGU+JiBfX3opCiAgOiBfTV92
YWx1ZShfQ29tcGxleFQoX196Ll9NX3ZhbHVlKSkgeyB9CgogIGlubGluZQogIGNvbXBsZXg8ZG91
YmxlPjo6Y29tcGxleChjb25zdCBjb21wbGV4PGZsb2F0PiYgX196KQogIDogX01fdmFsdWUoX0Nv
bXBsZXhUKF9fei5fTV92YWx1ZSkpIHsgfQoKICBpbmxpbmUKICBjb21wbGV4PGRvdWJsZT46OmNv
bXBsZXgoY29uc3QgY29tcGxleDxsb25nIGRvdWJsZT4mIF9feikKICB7CiAgICBfX3JlYWxfXyBf
TV92YWx1ZSA9IF9fei5yZWFsKCk7CiAgICBfX2ltYWdfXyBfTV92YWx1ZSA9IF9fei5pbWFnKCk7
CiAgfQoKICBpbmxpbmUKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6Y29tcGxleChjb25zdCBjb21w
bGV4PGZsb2F0PiYgX196KQogIDogX01fdmFsdWUoX0NvbXBsZXhUKF9fei5fTV92YWx1ZSkpIHsg
fQoKICBpbmxpbmUKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6Y29tcGxleChjb25zdCBjb21wbGV4
PGRvdWJsZT4mIF9feikKICA6IF9NX3ZhbHVlKF9Db21wbGV4VChfX3ouX01fdmFsdWUpKSB7IH0K
fQoKdGVtcGxhdGUgPGludCBEaW0sIGNsYXNzIFQ+CmNsYXNzIEVuZ2luZQp7CnB1YmxpYzoKICBF
bmdpbmUgKFQgdmFsID0gVCgpKSB7fQp9OwoKaW50IG1haW4oKQp7CiAgRW5naW5lPDEsIHN0ZDo6
Y29tcGxleDxkb3VibGU+ID4gZTsKICByZXR1cm4gMDsKfQo=


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]