public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
From: alexander.puchmayr@jku.at
To: gcc-gnats@gcc.gnu.org
Subject: optimization/8412: Code generation problem with -march=k6
Date: Thu, 31 Oct 2002 02:56:00 -0000	[thread overview]
Message-ID: <20021031104751.30825.qmail@sources.redhat.com> (raw)


>Number:         8412
>Category:       optimization
>Synopsis:       Code generation problem with -march=k6
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Thu Oct 31 02:56:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     alexander.puchmayr@jku.at
>Release:        gcc version 3.2
>Organization:
>Environment:
i586
>Description:
The attached file (from xine-lib-0.9.13-r1), src/libfaad/syntax.i produces an ICE when compiling with -march=k6 and -funroll-loops. The file compiles fine with
-march=i586, athlon, athlon-xp, i686, pentium4, this it seems to be a k6 related problem.

Error-Message:

syntax.c: In function `section_data':
syntax.c:804: unrecognizable insn:
(insn 863 880 865 (set (reg:SI 280)
        (zero_extend:SI (reg/v:QI 74))) -1 (nil)
    (nil))
syntax.c:804: Internal compiler error in extract_insn, at recog.c:2148
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
>How-To-Repeat:
invoke gcc3-2 with:

gcc -march=k6 -O3 -funroll-loops -c syntax.i
>Fix:
Use i586 instead of k6
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/x-csrc; name="syntax.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="syntax.i"

IyAxICJzeW50YXguYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEg
InN5bnRheC5jIgojIDMwICJzeW50YXguYyIKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEg
MwojIDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVy
ZXMuaCIgMSAzCiMgMjgzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAz
CiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUv
c3R1YnMuaCIgMSAzCiMgMzEzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjYgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4
Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIwMSAiL3Vzci9saWIv
Z2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVm
IHVuc2lnbmVkIGludCBzaXplX3Q7CiMgMjk0ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu
dXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgd2NoYXJfdDsK
IyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgojIDk0ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAg
fSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9u
ZyBpbnQgcmVtOwogIH0gbGRpdl90OwojIDEzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4
dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkgOwoKCgpleHRlcm4gZG91
YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRy
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9u
ZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIpIDsKIyAxNjMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gbG9uZyBp
bnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg
X19iYXNlKSA7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0
cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i
YXNlKQogICAgIDsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0
b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19l
eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIDsK
IyAyNTAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gZG91YmxlIF9fc3RydG9kX2lu
dGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXAp
CiAgICAgOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIDsKZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3Vw
KSA7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9f
c3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv
bmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25l
ZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgOwoK
CgoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQpzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKQp7CiAgcmV0dXJuIF9fc3Ry
dG9kX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9u
ZyBpbnQKc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9s
X2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CmV4dGVybiBfX2lubGlu
ZSB1bnNpZ25lZCBsb25nIGludApzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewog
IHJldHVybiBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7
Cn0KIyAzMjUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpfX2V4dGVuc2lvbl9fIGV4dGVybiBf
X2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkKewog
IHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7
Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApz
dHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvdWxsX2lu
dGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18g
ZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBf
X2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBf
X2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcg
bG9uZyBpbnQKc3RydG91bGwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4g
X19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4
dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1
cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSk7Cn0KZXh0ZXJuIF9faW5s
aW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVybiAoaW50KSBzdHJ0
b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0KZXh0ZXJuIF9faW5saW5l
IGxvbmcgaW50CmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvbCAo
X19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18gZXh0
ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7
CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0K
IyAzODQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBp
bnQgX19uKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
MSAzCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoKCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAx
ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNp
Z25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25n
OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRf
dDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91
c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsK
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50
IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRl
ZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsK
Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9f
ZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0
eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsK
dHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVm
IF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3Vf
aW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90
IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5
cGVkZWYgX191X2xvbmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0
eXBlZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxb
Ml07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAq
X19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBs
b25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVm
IGludCBfX2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYg
aW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoK
CnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxr
Y250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcg
X19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRl
ZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRf
dDsKCgp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19v
ZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
cHRocmVhZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1
ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2No
ZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi
IDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAg
aW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1
Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MK
ewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3Nj
aGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2Nv
cGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAq
X19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0
eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9w
dGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0
cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5z
aWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21f
cmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAg
aW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhy
ZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRo
cmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CiMgMTQwICIv
dXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
aW50IHB0aHJlYWRfdDsKIyAxNDQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDMx
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hh
cjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBl
ZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191
X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBlZGVmIF9f
bG9mZl90IGxvZmZfdDsKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm9fdDsKIyA2MSAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYg
X19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBf
X25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgoKCnR5cGVk
ZWYgX19vZmY2NF90IG9mZl90OwojIDk5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlw
ZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYg
X19zc2l6ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRl
ZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTMyICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMK
IyA3MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKIyA4
MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsK
IyA5NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90Owoj
IDEzMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKIyAxNDYgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4y
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAy
IDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE5MCAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9p
bnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2ln
bmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5
cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
RElfXykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX3dvcmRfXykpKTsKIyAyMTIgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2Vu
ZGlhbi5oIiAyIDMKIyAyMTMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIv
dXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl
Y3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMKIyAzMiAiL3Vzci9p
bmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQu
aCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCnR5cGVkZWYgaW50IF9f
c2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGlu
dCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAgfSBf
X3NpZ3NldF90OwojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoKdHlwZWRl
ZiBfX3NpZ3NldF90IHNpZ3NldF90OwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAz
CiMgMTA2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIF9f
dGltZV90IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKIyA0NSAiL3Vzci9pbmNs
dWRlL3N5cy9zZWxlY3QuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAz
CiMgNjcgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXZhbAogIHsKICAg
IF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsKICB9OwojIDQ3ICIv
dXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3Vz
ZWNvbmRzX3Q7CgoKCgoKdHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7CgoKCgoKCgp0eXBlZGVm
IHN0cnVjdAogIHsKCgoKCgoKICAgIF9fZmRfbWFzayBfX2Zkc19iaXRzWzEwMjQgLyAoOCAqIHNp
emVvZiAoX19mZF9tYXNrKSldOwoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNr
IGZkX21hc2s7CiMgOTUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKCgoKCgoKCmV4dGVy
biBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAog
ICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAg
ICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpIDsKIyAxMTggIi91c3Iv
aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKCiMgMjE2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjE5ICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwojIDI0MyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o
IiAzCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnQ2
NF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnRfdDsKIyAy
NjIgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoKIyAzOTEgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMiAzCgoKCgoKCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIDsKCgpleHRlcm4g
dm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmlu
aXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIDsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0
YXRlIChjaGFyICpfX3N0YXRlYnVmKSA7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAg
ICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwog
ICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3NlcDsKICAg
IGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5k
b21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAq
X19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGlu
dCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIDsKCmV4dGVybiBpbnQgaW5pdHN0
YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwK
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOwoKZXh0ZXJu
IGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCgoK
ZXh0ZXJuIGludCByYW5kICh2b2lkKSA7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50
IF9fc2VlZCkgOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIDsK
CgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgOwpleHRlcm4gZG91YmxlIGVyYW5k
NDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGxy
YW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGlu
dCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIDsKZXh0ZXJu
IGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0
ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSA7CmV4dGVybiB1bnNpZ25lZCBz
aG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgOwpleHRl
cm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgOwoKCgoKCnN0
cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAg
dW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19j
OwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBp
bnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVz
dHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGlu
dCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAq
X19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0
cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQg
Kl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNo
b3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf
ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50
ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBk
cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBs
b25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5z
aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg
bG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAo
bG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICA7
CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAog
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgOwoKZXh0
ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAogICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIDsKIyA1MjcgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QgX19zaXpl
KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6
ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j
X18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3Np
emUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lk
ICpfX3B0cikgOwoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIDsKCgoKIyAxICIv
dXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMK
IyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCgoKCgoKCmV4dGVybiB2
b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIDsKCgoKCgoKIyA1NDcgIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXplX3QgX19zaXplKSBfX2F0
dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDU2MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
CmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7
CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIDsKCgoKCmV4dGVy
biBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcp
LCB2b2lkICpfX2FyZykKICAgICA7CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVz
KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMgNTg3ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoK
ZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoK
CgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIDsKCgoKCgpleHRlcm4gaW50IHNl
dGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9f
cmVwbGFjZSkKICAgICA7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25h
bWUpIDsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgOwojIDYyMyAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsK
IyA2MzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIg
Kl9fdGVtcGxhdGUpIF9fYXNtX18gKCIiICJta3N0ZW1wNjQiKTsKIyA2NTAgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgOwoK
CgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSA7CiMgNjcyICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz
dHJpY3QgX19yZXNvbHZlZCkgOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChf
X2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwojIDY4OSAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAzCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0
IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXpl
X3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQg
KHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAg
ICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBf
X3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxv
bmcgaW50IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDcxMCAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5v
bSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAo
bG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CiMgNzI4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIg
KmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2Rl
Y3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwoKCgoKZXh0
ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0
cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikg
OwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNo
YXIgKl9fYnVmKSA7CgoKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUs
IGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNw
dCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91
YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz
dHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWdj
dnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKCgoK
CmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9f
cmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Np
Z24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19s
ZW4pIDsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGlu
dCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0
IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVf
dCBfX2xlbikgOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQg
X19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGlu
dCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmlj
dCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUg
X192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj
dCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNo
YXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgOwoKCgoKCgpleHRlcm4gaW50IG1i
bGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWJ0b3dj
ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgd2N0b21iIChj
aGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoKZXh0ZXJuIHNpemVfdCB3Y3N0
b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pCiAgICAgOwoKCgoKCgoK
ZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIDsKIyA4NTggIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xv
YWRhdmdbXSwgaW50IF9fbmVsZW0pIDsKCgoKCgoKIyAzMSAic3ludGF4LmMiIDIKIyAxICIvdXNy
L2luY2x1ZGUvbWVtb3J5LmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvbWVtb3J5LmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi
IDMKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgpleHRl
cm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0
ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6
ZV90IF9fbikKICAgICA7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJp
Y3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIDsKCgoKCmV4dGVybiB2b2lkICptZW1z
ZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWVtY21w
IChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAg
ICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2Nv
bnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CiMgNzcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAq
c3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fc3JjKQogICAgIDsKCmV4dGVybiBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9f
ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ny
Yywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgOwoKZXh0ZXJuIGNo
YXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSA7CgoKZXh0ZXJu
IGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAg
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0
IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9fY29uc3QgY2hhciAq
X19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf
X24pIDsKIyAxMjAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyZHVw
IChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNTUg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNo
YXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hh
ciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwojIDE2NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBzaXplX3Qg
c3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29u
c3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBf
X2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
ZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNo
YXIgKl9fbmVlZGxlKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwojIDE4NyAiL3Vz
ci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJp
Y3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICA7CgoKCmV4dGVy
biBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOwoKZXh0ZXJuIGNoYXIg
KnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZl
X3B0cikgOwojIDIxOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBzaXplX3Qgc3Ry
bGVuIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMgMjI5
ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19l
cnJudW0pIDsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAq
X19idWYsIHNpemVfdCBfX2J1ZmxlbikgOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAq
X19zLCBzaXplX3QgX19uKSA7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9f
c3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gdm9pZCBiemVybyAodm9p
ZCAqX19zLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZvaWQgKl9f
czEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQg
X19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4IChf
X2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
CmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMg
MjcyICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2Nv
bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEs
IF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKIyAyOTQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3Ry
c2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCiAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSA7CiMgMzU3ICIvdXNyL2luY2x1ZGUvc3Ry
aW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcuaCIgMSAzCiMgMzU4ICIvdXNy
L2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5o
IiAxIDMKIyAzNzcgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gdm9pZCAq
X19yYXdtZW1jaHIgKGNvbnN0IHZvaWQgKl9fcywgaW50IF9fYyk7CiMgNDA1ICIvdXNyL2luY2x1
ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RyY3B5X3NtYWxs
IChjaGFyICosIF9fdWludDE2X3QsIF9fdWludDE2X3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX191aW50MzJfdCwgX191aW50MzJfdCwgc2l6ZV90KTsKZXh0ZXJuIF9f
aW5saW5lIGNoYXIgKgpfX3N0cmNweV9zbWFsbCAoY2hhciAqX19kZXN0LAogICAgICAgICAgICAg
ICAgX191aW50MTZfdCBfX3NyYzBfMiwgX191aW50MTZfdCBfX3NyYzRfMiwKICAgICAgICAgICAg
ICAgIF9fdWludDMyX3QgX19zcmMwXzQsIF9fdWludDMyX3QgX19zcmM0XzQsCiAgICAgICAgICAg
ICAgICBzaXplX3QgX19zcmNsZW4pCnsKICB1bmlvbiB7CiAgICBfX3VpbnQzMl90IF9fdWk7CiAg
ICBfX3VpbnQxNl90IF9fdXNpOwogICAgdW5zaWduZWQgY2hhciBfX3VjOwogIH0gKl9fdSA9ICh2
b2lkICopIF9fZGVzdDsKICBzd2l0Y2ggKCh1bnNpZ25lZCBpbnQpIF9fc3JjbGVuKQogICAgewog
ICAgY2FzZSAxOgogICAgICBfX3UtPl9fdWMgPSAnXDAnOwogICAgICBicmVhazsKICAgIGNhc2Ug
MjoKICAgICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOwogICAgICBicmVhazsKICAgIGNhc2UgMzoK
ICAgICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICh2
b2lkICopKChjaGFyICopIF9fdSArIDIpOwogICAgICBfX3UtPl9fdWMgPSAnXDAnOwogICAgICBi
cmVhazsKICAgIGNhc2UgNDoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIGJyZWFr
OwogICAgY2FzZSA1OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19l
eHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VjID0g
J1wwJzsKICAgICAgYnJlYWs7CiAgICBjYXNlIDY6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80
OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOwog
ICAgICBfX3UtPl9fdXNpID0gX19zcmM0XzI7CiAgICAgIGJyZWFrOwogICAgY2FzZSA3OgogICAg
ICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAq
KSgoY2hhciAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOwogICAgICBf
X3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDIpOwogICAgICBfX3Ut
Pl9fdWMgPSAnXDAnOwogICAgICBicmVhazsKICAgIGNhc2UgODoKICAgICAgX191LT5fX3VpID0g
X19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191
ICsgNCk7CiAgICAgIF9fdS0+X191aSA9IF9fc3JjNF80OwogICAgICBicmVhazsKICAgIH0KICBy
ZXR1cm4gX19kZXN0Owp9CiMgODkzICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0
ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQg
X19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMSAoX19jb25zdCBj
aGFyICpfX3MsIGludCBfX3JlamVjdCkKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7
CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVq
ZWN0KQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lubGlu
ZSBzaXplX3QgX19zdHJjc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3JlamVjdDIpOwpleHRl
cm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBf
X3JlamVjdDEsIGludCBfX3JlamVjdDIpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAw
OwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3Jl
amVjdDEKICAgICAgICAgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDIpCiAgICArK19fcmVz
dWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNz
cG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IF9fcmVqZWN0MiwgaW50IF9fcmVqZWN0Myk7CmV4dGVy
biBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f
cmVqZWN0MSwgaW50IF9fcmVqZWN0MiwKICAgICAgICAgICAgICBpbnQgX19yZWplY3QzKQp7CiAg
cmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3aGlsZSAoX19zW19fcmVzdWx0XSAhPSAn
XDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QxCiAgICAgICAgICYmIF9fc1tfX3Jlc3Vs
dF0gIT0gX19yZWplY3QyICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QzKQogICAgKytfX3Jl
c3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KIyA5NTAgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmlu
ZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2MxIChfX2NvbnN0IGNoYXIg
Kl9fcywgaW50IF9fYWNjZXB0KTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9jMSAo
X19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdCkKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jl
c3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0KQogICAgKytfX3Jl
c3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJz
cG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyKTsKZXh0ZXJuIF9faW5saW5lIHNpemVf
dApfX3N0cnNwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2Fj
Y2VwdDIpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19f
cmVzdWx0XSA9PSBfX2FjY2VwdDEgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDIpCiAgICAr
K19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBf
X3N0cnNwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIsIGludCBfX2FjY2VwdDMpOwpl
eHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ryc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50
IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MiwgaW50IF9fYWNjZXB0MykKewogIHJlZ2lzdGVyIHNp
emVfdCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MSB8
fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MgogICAgICAgICB8fCBfX3NbX19yZXN1bHRdID09
IF9fYWNjZXB0MykKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgMTAwNyAi
L3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0
cnBicmtfYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0Mik7CmV4dGVybiBfX2lubGluZSBj
aGFyICoKX19zdHJwYnJrX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwgaW50
IF9fYWNjZXB0MikKewoKICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQx
ICYmICpfX3MgIT0gX19hY2NlcHQyKQogICAgKytfX3M7CiAgcmV0dXJuICpfX3MgPT0gJ1wwJyA/
ICgodm9pZCAqKTApIDogKGNoYXIgKikgKHNpemVfdCkgX19zOwp9CgpleHRlcm4gX19pbmxpbmUg
Y2hhciAqX19zdHJwYnJrX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIsIGludCBfX2Fj
Y2VwdDMpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RycGJya19jMyAoX19jb25zdCBjaGFy
ICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIsCiAgICAgICAgICAgICAgaW50IF9f
YWNjZXB0MykKewoKICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQxICYm
ICpfX3MgIT0gX19hY2NlcHQyCiAgICAgICAgICYmICpfX3MgIT0gX19hY2NlcHQzKQogICAgKytf
X3M7CiAgcmV0dXJuICpfX3MgPT0gJ1wwJyA/ICgodm9pZCAqKTApIDogKGNoYXIgKikgKHNpemVf
dCkgX19zOwp9CiMgMTA1OSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBf
X2lubGluZSBjaGFyICpfX3N0cnRva19yXzFjIChjaGFyICpfX3MsIGNoYXIgX19zZXAsIGNoYXIg
KipfX25leHRwKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnRva19yXzFjIChjaGFyICpf
X3MsIGNoYXIgX19zZXAsIGNoYXIgKipfX25leHRwKQp7CiAgY2hhciAqX19yZXN1bHQ7CiAgaWYg
KF9fcyA9PSAoKHZvaWQgKikwKSkKICAgIF9fcyA9ICpfX25leHRwOwogIHdoaWxlICgqX19zID09
IF9fc2VwKQogICAgKytfX3M7CiAgX19yZXN1bHQgPSAoKHZvaWQgKikwKTsKICBpZiAoKl9fcyAh
PSAnXDAnKQogICAgewogICAgICBfX3Jlc3VsdCA9IF9fcysrOwogICAgICB3aGlsZSAoKl9fcyAh
PSAnXDAnKQogICAgICAgIGlmICgqX19zKysgPT0gX19zZXApCiAgICAgICAgICB7CiAgICAgICAg
ICAgIF9fc1stMV0gPSAnXDAnOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAg
Kl9fbmV4dHAgPSBfX3M7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgMTA5MSAiL3Vzci9p
bmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBjaGFyICpfX3N0cnNlcF9nIChjaGFyICoq
X19zdHJpbmdwLCBfX2NvbnN0IGNoYXIgKl9fZGVsaW0pOwojIDExMDkgIi91c3IvaW5jbHVkZS9i
aXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfMWMgKGNoYXIg
KipfX3MsIGNoYXIgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ryc2VwXzFj
IChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwg
PSAqX19zOwogIGlmIChfX3JldHZhbCAhPSAoKHZvaWQgKikwKSAmJiAoKl9fcyA9IChfX2V4dGVu
c2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19yZWplY3QpICYmIChfX3JlamVjdCkgPT0g
J1wwJyA/IChjaGFyICopIF9fcmF3bWVtY2hyIChfX3JldHZhbCwgX19yZWplY3QpIDogc3RyY2hy
IChfX3JldHZhbCwgX19yZWplY3QpKSkpICE9ICgodm9pZCAqKTApKQogICAgKigqX19zKSsrID0g
J1wwJzsKICByZXR1cm4gX19yZXR2YWw7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNl
cF8yYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyKTsKZXh0ZXJu
IF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF8yYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEs
IGNoYXIgX19yZWplY3QyKQp7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOwogIGlm
IChfX3JldHZhbCAhPSAoKHZvaWQgKikwKSkKICAgIHsKICAgICAgcmVnaXN0ZXIgY2hhciAqX19j
cCA9IF9fcmV0dmFsOwogICAgICB3aGlsZSAoMSkKICAgICAgICB7CiAgICAgICAgICBpZiAoKl9f
Y3AgPT0gJ1wwJykKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fY3AgPSAoKHZvaWQgKikw
KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoKl9fY3AgPT0g
X19yZWplY3QxIHx8ICpfX2NwID09IF9fcmVqZWN0MikKICAgICAgICAgICAgewogICAgICAgICAg
ICAgICpfX2NwKysgPSAnXDAnOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAg
ICAgICAgICArK19fY3A7CiAgICAgICAgfQogICAgICAqX19zID0gX19jcDsKICAgIH0KICByZXR1
cm4gX19yZXR2YWw7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNlcF8zYyAoY2hhciAq
Kl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgX19yZWplY3QzKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpf
X3N0cnNlcF8zYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyLCBj
aGFyIF9fcmVqZWN0MykKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAo
X19yZXR2YWwgIT0gKCh2b2lkICopMCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3Ag
PSBfX3JldHZhbDsKICAgICAgd2hpbGUgKDEpCiAgICAgICAgewogICAgICAgICAgaWYgKCpfX2Nw
ID09ICdcMCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2NwID0gKCh2b2lkICopMCk7
CiAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCpfX2NwID09IF9f
cmVqZWN0MSB8fCAqX19jcCA9PSBfX3JlamVjdDIgfHwgKl9fY3AgPT0gX19yZWplY3QzKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgKl9fY3ArKyA9ICdcMCc7CiAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICsrX19jcDsKICAgICAgICB9CiAgICAgICpfX3Mg
PSBfX2NwOwogICAgfQogIHJldHVybiBfX3JldHZhbDsKfQojIDExOTAgIi91c3IvaW5jbHVkZS9i
aXRzL3N0cmluZzIuaCIgMwpleHRlcm4gY2hhciAqX19zdHJkdXAgKF9fY29uc3QgY2hhciAqX19z
dHJpbmcpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMTIwOSAiL3Vzci9pbmNsdWRl
L2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBjaGFyICpfX3N0cm5kdXAgKF9fY29uc3QgY2hhciAq
X19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsK
IyAzNjEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCgojIDMxICIvdXNyL2luY2x1ZGUv
bWVtb3J5LmgiIDIgMwojIDMyICJzeW50YXguYyIgMgojIDEgImNvbW1vbi5oIiAxCiMgMTE2ICJj
b21tb24uaCIKIyAxICIvdXNyL2luY2x1ZGUvaW50dHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5j
bHVkZS9pbnR0eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAxIDMKIyAyNyAi
L3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIg
MSAzCiMgMjggIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvd29yZHNpemUuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCiMgNDkg
Ii91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsK
dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludDE2X3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIGlu
dCB1aW50MzJfdDsKCgoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25n
IGludCB1aW50NjRfdDsKCgoKCgoKdHlwZWRlZiBzaWduZWQgY2hhciBpbnRfbGVhc3Q4X3Q7CnR5
cGVkZWYgc2hvcnQgaW50IGludF9sZWFzdDE2X3Q7CnR5cGVkZWYgaW50IGludF9sZWFzdDMyX3Q7
CgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50IGludF9sZWFzdDY0X3Q7CgoK
CnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50X2xlYXN0OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNo
b3J0IGludCB1aW50X2xlYXN0MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9sZWFzdDMy
X3Q7CgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRf
bGVhc3Q2NF90OwoKCgoKCgp0eXBlZGVmIHNpZ25lZCBjaGFyIGludF9mYXN0OF90OwoKCgoKCnR5
cGVkZWYgaW50IGludF9mYXN0MTZfdDsKdHlwZWRlZiBpbnQgaW50X2Zhc3QzMl90OwpfX2V4dGVu
c2lvbl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRfZmFzdDY0X3Q7CgoKCnR5cGVkZWYgdW5z
aWduZWQgY2hhciB1aW50X2Zhc3Q4X3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9m
YXN0MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9mYXN0MzJfdDsKX19leHRlbnNpb25f
Xwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludF9mYXN0NjRfdDsKIyAxMjYgIi91
c3IvaW5jbHVkZS9zdGRpbnQuaCIgMwp0eXBlZGVmIGludCBpbnRwdHJfdDsKCgp0eXBlZGVmIHVu
c2lnbmVkIGludCB1aW50cHRyX3Q7CiMgMTM4ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKX19l
eHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50bWF4X3Q7Cl9fZXh0ZW5zaW9uX18K
dHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRtYXhfdDsKIyAyOSAiL3Vzci9pbmNs
dWRlL2ludHR5cGVzLmgiIDIgMwoKCgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fZ3djaGFyX3Q7CiMg
Mjc0ICIvdXNyL2luY2x1ZGUvaW50dHlwZXMuaCIgMwoKIyAyODggIi91c3IvaW5jbHVkZS9pbnR0
eXBlcy5oIiAzCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBsb25nIGludCBxdW90OwogICAg
bG9uZyBsb25nIGludCByZW07CiAgfSBpbWF4ZGl2X3Q7CgoKCgoKZXh0ZXJuIGludG1heF90IGlt
YXhhYnMgKGludG1heF90IF9fbikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy
biBpbWF4ZGl2X3QgaW1heGRpdiAoaW50bWF4X3QgX19udW1lciwgaW50bWF4X3QgX19kZW5vbSkK
ICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnRtYXhfdCBzdHJ0
b2ltYXggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CgoKZXh0
ZXJuIHVpbnRtYXhfdCBzdHJ0b3VtYXggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UpIDsKCgpleHRlcm4gaW50bWF4X3Qgd2NzdG9pbWF4IChfX2NvbnN0IF9fZ3dj
aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2d3
Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKZXh0ZXJu
IHVpbnRtYXhfdCB3Y3N0b3VtYXggKF9fY29uc3QgX19nd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2d3Y2hhcl90ICoqIF9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgOwojIDM5NiAiL3Vzci9pbmNsdWRlL2ludHR5cGVz
LmgiIDMKZXh0ZXJuIF9faW5saW5lIGludG1heF90CnN0cnRvaW1heCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IG5wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IGVuZHB0ciwKICAgICAgICAgICBpbnQg
YmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKG5wdHIsIGVuZHB0ciwgYmFzZSwg
MCk7Cn0KIyA0MTQgIi91c3IvaW5jbHVkZS9pbnR0eXBlcy5oIiAzCmV4dGVybiBfX2lubGluZSB1
aW50bWF4X3QKc3RydG91bWF4IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgbnB0ciwgY2hhciAq
Kl9fcmVzdHJpY3QgZW5kcHRyLAogICAgICAgICAgIGludCBiYXNlKQp7CiAgcmV0dXJuIF9fc3Ry
dG91bGxfaW50ZXJuYWwgKG5wdHIsIGVuZHB0ciwgYmFzZSwgMCk7Cn0KCgoKX19leHRlbnNpb25f
XwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfaW50ZXJuYWwgKF9fY29uc3QgX19nd2No
YXJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgpleHRlcm4gX19pbmxpbmUg
aW50bWF4X3QKd2NzdG9pbWF4IChfX2NvbnN0IF9fZ3djaGFyX3QgKl9fcmVzdHJpY3QgbnB0ciwg
X19nd2NoYXJfdCAqKl9fcmVzdHJpY3QgZW5kcHRyLAogICAgICAgICAgIGludCBiYXNlKQp7CiAg
cmV0dXJuIF9fd2NzdG9sbF9pbnRlcm5hbCAobnB0ciwgZW5kcHRyLCBiYXNlLCAwKTsKfQoKCgoK
X19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3djc3RvdWxsX2lu
dGVybmFsIChfX2NvbnN0IF9fZ3djaGFyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nd2NoYXJfdCAqKgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19ncm91cCkgOwoKCmV4dGVybiBfX2lubGluZSB1aW50bWF4X3QKd2NzdG91
bWF4IChfX2NvbnN0IF9fZ3djaGFyX3QgKl9fcmVzdHJpY3QgbnB0ciwgX19nd2NoYXJfdCAqKl9f
cmVzdHJpY3QgZW5kcHRyLAogICAgICAgICAgIGludCBiYXNlKQp7CiAgcmV0dXJuIF9fd2NzdG91
bGxfaW50ZXJuYWwgKG5wdHIsIGVuZHB0ciwgYmFzZSwgMCk7Cn0KCgoKCgojIDExNyAiY29tbW9u
LmgiIDIKCgoKCgoKICB0eXBlZGVmIGZsb2F0IHJlYWxfdDsKIyAxNDEgImNvbW1vbi5oIgojIDEg
Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCgoK
CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1
ZGUvbWF0aC5oIiAyIDMKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDEg
MwojIDQxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL21hdGgu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9p
bmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194
KSA7IGV4dGVybiBkb3VibGUgX19hY29zIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIGFz
aW4gKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2FzaW4gKGRvdWJsZSBfX3gpIDsKCmV4
dGVybiBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91
YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkg
OyBleHRlcm4gZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIDsKCgpleHRl
cm4gZG91YmxlIGNvcyAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fY29zIChkb3VibGUg
X194KSA7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9f
c2luIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHRhbiAoZG91YmxlIF9feCkgOyBleHRl
cm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KSA7CiMgNzggIi91c3IvaW5jbHVkZS9iaXRzL21h
dGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgY29zaCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91
YmxlIF9fY29zaCAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194
KSA7IGV4dGVybiBkb3VibGUgX19zaW5oIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHRh
bmggKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIDsKCgoK
ZXh0ZXJuIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYWNvc2gg
KGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIDsgZXh0ZXJu
IGRvdWJsZSBfX2FzaW5oIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIGF0YW5oIChkb3Vi
bGUgX194KSA7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkgOwoKCgoKCmV4dGVy
biBkb3VibGUgZXhwIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19leHAgKGRvdWJsZSBf
X3gpIDsKIyAxMDYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3Vi
bGUgZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgOyBleHRlcm4gZG91YmxlIF9f
ZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgOwoKCmV4dGVybiBkb3VibGUgbGRl
eHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSA7IGV4dGVybiBkb3VibGUgX19sZGV4cCAo
ZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIDsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91Ymxl
IF9feCkgOyBleHRlcm4gZG91YmxlIF9fbG9nIChkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRvdWJs
ZSBsb2cxMCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKGRvdWJsZSBfX3gp
IDsKCgpleHRlcm4gZG91YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSA7IGV4
dGVybiBkb3VibGUgX19tb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgOwoKCgpleHRl
cm4gZG91YmxlIGV4cG0xIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91
YmxlIF9feCkgOwoKCmV4dGVybiBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRv
dWJsZSBfX2xvZzFwIChkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChkb3VibGUg
X194KSA7IGV4dGVybiBkb3VibGUgX19sb2diIChkb3VibGUgX194KSA7CiMgMTQzICIvdXNyL2lu
Y2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwg
ZG91YmxlIF9feSkgOyBleHRlcm4gZG91YmxlIF9fcG93IChkb3VibGUgX194LCBkb3VibGUgX195
KSA7CgoKZXh0ZXJuIGRvdWJsZSBzcXJ0IChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19z
cXJ0IChkb3VibGUgX194KSA7CgoKCmV4dGVybiBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJsZSBfX2h5cG90IChkb3VibGUgX194LCBkb3VibGUgX195
KSA7CgoKCgpleHRlcm4gZG91YmxlIGNicnQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBf
X2NicnQgKGRvdWJsZSBfX3gpIDsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjZWlsIChkb3VibGUgX194
KSA7IGV4dGVybiBkb3VibGUgX19jZWlsIChkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRvdWJsZSBm
YWJzIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3Vi
bGUgX19mYWJzIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0
ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fZmxvb3IgKGRv
dWJsZSBfX3gpIDsKCgpleHRlcm4gZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp
IDsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsKCgoKCmV4
dGVybiBpbnQgX19pc2luZiAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlIChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZiAoZG91YmxlIF9fdmFsdWUpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZSAoZG91YmxlIF9f
dmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGRyZW0g
KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJsZSBfX2RyZW0gKGRvdWJsZSBf
X3gsIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGRvdWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9f
eCkgOyBleHRlcm4gZG91YmxlIF9fc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpIDsKCgoKCmV4dGVy
biBkb3VibGUgY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcHlzaWduIChkb3VibGUgX194LCBkb3Vi
bGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMjA5ICIvdXNyL2luY2x1ZGUv
Yml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBf
X3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAo
ZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19qMCAoZG91YmxlKSA7CmV4dGVybiBkb3VibGUgajEg
KGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgOwpleHRlcm4gZG91YmxlIGpu
IChpbnQsIGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fam4gKGludCwgZG91YmxlKSA7CmV4dGVy
biBkb3VibGUgeTAgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9feTAgKGRvdWJsZSkgOwpleHRl
cm4gZG91YmxlIHkxIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpIDsKZXh0
ZXJuIGRvdWJsZSB5biAoaW50LCBkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRv
dWJsZSkgOwoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBf
X2VyZiAoZG91YmxlKSA7CmV4dGVybiBkb3VibGUgZXJmYyAoZG91YmxlKSA7IGV4dGVybiBkb3Vi
bGUgX19lcmZjIChkb3VibGUpIDsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWEgKGRvdWJsZSkgOyBleHRl
cm4gZG91YmxlIF9fbGdhbW1hIChkb3VibGUpIDsKIyAyMzggIi91c3IvaW5jbHVkZS9iaXRzL21h
dGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSkgOyBleHRlcm4gZG91Ymxl
IF9fZ2FtbWEgKGRvdWJsZSkgOwoKCgoKCgpleHRlcm4gZG91YmxlIGxnYW1tYV9yIChkb3VibGUs
IGludCAqX19zaWduZ2FtcCkgOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hX3IgKGRvdWJsZSwgaW50
ICpfX3NpZ25nYW1wKSA7CgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgOyBl
eHRlcm4gZG91YmxlIF9fcmludCAoZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3VibGUgbmV4dGFm
dGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gZG91YmxlIHJlbWFpbmRlciAoZG91
YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRlcm4gZG91YmxlIF9fcmVtYWluZGVyIChkb3VibGUg
X194LCBkb3VibGUgX195KSA7CgoKCmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX24pIDsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19u
KSA7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibiAoZG91YmxlIF9feCwgaW50IF9fbikgOyBleHRl
cm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSA7CgoKCmV4dGVybiBpbnQg
aWxvZ2IgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGludCBfX2lsb2diIChkb3VibGUgX194KSA7CiMg
NjQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDgyICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1
ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkgOyBl
eHRlcm4gZmxvYXQgX19hY29zZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgYXNpbmYgKGZs
b2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hc2luZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxv
YXQgYXRhbmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hdGFuZiAoZmxvYXQgX194KSA7
CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgOyBleHRlcm4gZmxv
YXQgX19hdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGNvc2Yg
KGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19jb3NmIChmbG9hdCBfX3gpIDsKCmV4dGVybiBm
bG9hdCBzaW5mIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fc2luZiAoZmxvYXQgX194KSA7
CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3RhbmYgKGZs
b2F0IF9feCkgOwojIDc4ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4g
ZmxvYXQgY29zaGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19jb3NoZiAoZmxvYXQgX194
KSA7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19zaW5o
ZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgdGFuaGYgKGZsb2F0IF9feCkgOyBleHRlcm4g
ZmxvYXQgX190YW5oZiAoZmxvYXQgX194KSA7CgoKCmV4dGVybiBmbG9hdCBhY29zaGYgKGZsb2F0
IF9feCkgOyBleHRlcm4gZmxvYXQgX19hY29zaGYgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0
IGFzaW5oZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSA7
CgpleHRlcm4gZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXRhbmhm
IChmbG9hdCBfX3gpIDsKCgoKCgpleHRlcm4gZmxvYXQgZXhwZiAoZmxvYXQgX194KSA7IGV4dGVy
biBmbG9hdCBfX2V4cGYgKGZsb2F0IF9feCkgOwojIDEwNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0
aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25l
bnQpIDsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkg
OwoKCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIDsgZXh0
ZXJuIGZsb2F0IF9fbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSA7CgoKZXh0ZXJu
IGZsb2F0IGxvZ2YgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19sb2dmIChmbG9hdCBfX3gp
IDsKCgpleHRlcm4gZmxvYXQgbG9nMTBmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9n
MTBmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxvYXQgbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQg
Kl9faXB0cikgOyBleHRlcm4gZmxvYXQgX19tb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRy
KSA7CgoKCmV4dGVybiBmbG9hdCBleHBtMWYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19l
eHBtMWYgKGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgOyBl
eHRlcm4gZmxvYXQgX19sb2cxcGYgKGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBsb2diZiAo
ZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2xvZ2JmIChmbG9hdCBfX3gpIDsKIyAxNDMgIi91
c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBwb3dmIChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19wb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSkgOwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3Nx
cnRmIChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIGZsb2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9h
dCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9faHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoK
CgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fY2JydGYg
KGZsb2F0IF9feCkgOwoKCgoKCgpleHRlcm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgOyBleHRl
cm4gZmxvYXQgX19jZWlsZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGZhYnNmIChmbG9h
dCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmFic2Yg
KGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBm
bG9vcmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19mbG9vcmYgKGZsb2F0IF9feCkgOwoK
CmV4dGVybiBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0
IF9fZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7CgoKCgpleHRlcm4gaW50IF9faXNpbmZm
IChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGlu
dCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CgoKCmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVmIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGRyZW1mIChmbG9hdCBfX3gsIGZsb2F0
IF9feSkgOyBleHRlcm4gZmxvYXQgX19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsKCgoK
ZXh0ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3Np
Z25pZmljYW5kZiAoZmxvYXQgX194KSA7CgoKCgpleHRlcm4gZmxvYXQgY29weXNpZ25mIChmbG9h
dCBfX3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxv
YXQgX19jb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CiMgMjA5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4g
aW50IF9faXNuYW5mIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9fajBm
IChmbG9hdCkgOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19qMWYg
KGZsb2F0KSA7CmV4dGVybiBmbG9hdCBqbmYgKGludCwgZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9f
am5mIChpbnQsIGZsb2F0KSA7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KSA7IGV4dGVybiBmbG9h
dCBfX3kwZiAoZmxvYXQpIDsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0
IF9feTFmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgeW5mIChpbnQsIGZsb2F0KSA7IGV4dGVybiBm
bG9hdCBfX3luZiAoaW50LCBmbG9hdCkgOwoKCgoKCmV4dGVybiBmbG9hdCBlcmZmIChmbG9hdCkg
OyBleHRlcm4gZmxvYXQgX19lcmZmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgZXJmY2YgKGZsb2F0
KSA7IGV4dGVybiBmbG9hdCBfX2VyZmNmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgbGdhbW1hZiAo
ZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQpIDsKIyAyMzggIi91c3IvaW5j
bHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBnYW1tYWYgKGZsb2F0KSA7IGV4
dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpIDsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZf
ciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmX3IgKGZs
b2F0LCBpbnQgKl9fc2lnbmdhbXApIDsKCgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChmbG9hdCBf
X3gpIDsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBu
ZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOyBleHRlcm4gZmxvYXQgX19uZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChm
bG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgOwoKCgpleHRlcm4gZmxvYXQgc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0
IF9fbikgOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKSA7CgoK
CgpleHRlcm4gZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSA7IGV4dGVybiBmbG9h
dCBfX3NjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbikgOwoKCgpleHRlcm4gaW50IGlsb2diZiAo
ZmxvYXQgX194KSA7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9feCkgOwojIDgzICIvdXNy
L2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA5OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMv
bWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSBfX3gp
IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIGFzaW5sIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sIChs
b25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxvbmcgZG91Ymxl
IF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25n
IGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRvdWJsZSBf
X3ksIGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NsIChsb25nIGRv
dWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAobG9uZyBkb3VibGUgX194KSA7
CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25n
IGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRh
bmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sIChsb25nIGRv
dWJsZSBfX3gpIDsKIyA3OCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJu
IGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fY29zaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmhsIChs
b25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2luaGwgKGxvbmcgZG91Ymxl
IF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgpleHRlcm4gbG9u
ZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
YWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2luaGwgKGxv
bmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2luaGwgKGxvbmcgZG91Ymxl
IF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KSA7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBkb3VibGUgX194KSA7CgoKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUg
X19leHBsIChsb25nIGRvdWJsZSBfX3gpIDsKIyAxMDYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhj
YWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50
ICpfX2V4cG9uZW50KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUg
X194LCBpbnQgKl9fZXhwb25lbnQpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbGRleHBsIChsb25n
IGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xkZXhw
bCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgOwoKCmV4dGVybiBsb25nIGRvdWJs
ZSBsb2dsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nbCAobG9u
ZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUg
X194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3VibGUgX194KSA7CgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIG1vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpf
X2lwdHIpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgKl9faXB0cikgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRv
dWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbTFsIChsb25nIGRvdWJsZSBfX3gp
IDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBk
b3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2di
bCAobG9uZyBkb3VibGUgX194KSA7CiMgMTQzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMu
aCIgMwpleHRlcm4gbG9uZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93bCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9f
eCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zcXJ0bCAobG9uZyBkb3VibGUgX194KSA7CgoKCmV4
dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIDsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjYnJ0bCAobG9uZyBkb3VibGUgX194
KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NicnRsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBm
YWJzbCAobG9uZyBkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gp
IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRl
cm4gbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ztb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSkgOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVsIChsb25nIGRv
dWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50
IGlzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCmV4dGVybiBpbnQgZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWdu
aWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaWduaWZp
Y2FuZGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvcHlzaWdu
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDIwOSAiL3Vz
ci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBk
b3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50
IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2owbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIGoxbCAobG9uZyBk
b3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajFsIChsb25nIGRvdWJsZSkgOwpleHRlcm4g
bG9uZyBkb3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2pubCAoaW50LCBsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRv
dWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwgKGxvbmcgZG91YmxlKSA7CmV4dGVybiBs
b25nIGRvdWJsZSB5MWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAo
bG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkg
OyBleHRlcm4gbG9uZyBkb3VibGUgX195bmwgKGludCwgbG9uZyBkb3VibGUpIDsKCgoKCgpleHRl
cm4gbG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
ZXJmbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmNsIChsb25nIGRvdWJs
ZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxv
bmcgZG91YmxlIGxnYW1tYWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xn
YW1tYWwgKGxvbmcgZG91YmxlKSA7CiMgMjM4ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMu
aCIgMwpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSA7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJs
ZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIDsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSA7CgoKCgoK
CmV4dGVybiBsb25nIGRvdWJsZSByaW50bCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25n
IGRvdWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUg
bmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dGFmdGVybCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAo
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
c2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgOwoKCgoKZXh0ZXJuIGxv
bmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19zY2FsYm5sIChsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIDsKCgoKZXh0ZXJu
IGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25n
IGRvdWJsZSBfX3gpIDsKIyAxMDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDExMyAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMwpleHRlcm4gaW50IHNpZ25nYW07CiMgMjQwICIvdXNyL2luY2x1
ZGUvbWF0aC5oIiAzCnR5cGVkZWYgZW51bQp7CiAgX0lFRUVfID0gLTEsCiAgX1NWSURfLAogIF9Y
T1BFTl8sCiAgX1BPU0lYXywKICBfSVNPQ18KfSBfTElCX1ZFUlNJT05fVFlQRTsKCgoKCmV4dGVy
biBfTElCX1ZFUlNJT05fVFlQRSBfTElCX1ZFUlNJT047CiMgMjY1ICIvdXNyL2luY2x1ZGUvbWF0
aC5oIiAzCnN0cnVjdCBleGNlcHRpb24KCiAgewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1l
OwogICAgZG91YmxlIGFyZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAg
fTsKCgoKCmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IGV4Y2VwdGlvbiAqX19leGMpOwojIDM1
MCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxp
bmUuaCIgMSAzCiMgMjkxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJu
IF9faW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlKSA7IGV4dGVybiBfX2lubGluZSBkb3VibGUg
X19zZ24gKGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4w
ID8gMS4wIDogLTEuMCk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQpIDsg
ZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQgX194KSB7IHJldHVybiBfX3ggPT0g
MC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9IGV4dGVybiBfX2lubGluZSBs
b25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBfX2lubGluZSBsb25nIGRv
dWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6
IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfQoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBf
X3BvdzIgKGRvdWJsZSkgOyBleHRlcm4gX19pbmxpbmUgZG91YmxlIF9fcG93MiAoZG91YmxlIF9f
eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBf
X2V4cG9uZW50OyBfX2V4dGVuc2lvbl9fIGxvbmcgbG9uZyBpbnQgX19wID0gKGxvbmcgbG9uZyBp
bnQpIF9feDsgaWYgKF9feCA9PSAobG9uZyBkb3VibGUpIF9fcCkgeyBfX2FzbSBfX3ZvbGF0aWxl
X18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKDEuMCksICJ1IiAoX194KSk7IHJl
dHVybiBfX3ZhbHVlOyB9IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZAklJXN0KDApXG5cdCIgImZy
bmRpbnQJCQkjIGludCh4KVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4
KVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCkpIC0gMVxuXHQiIDogIj10IiAoX192YWx1ZSks
ICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7IF9fYXNtIF9f
dm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1
IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQg
X19wb3cyZiAoZmxvYXQpIDsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fcG93MmYgKGZsb2F0IF9f
eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBf
X2V4cG9uZW50OyBfX2V4dGVuc2lvbl9fIGxvbmcgbG9uZyBpbnQgX19wID0gKGxvbmcgbG9uZyBp
bnQpIF9feDsgaWYgKF9feCA9PSAobG9uZyBkb3VibGUpIF9fcCkgeyBfX2FzbSBfX3ZvbGF0aWxl
X18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKDEuMCksICJ1IiAoX194KSk7IHJl
dHVybiBfX3ZhbHVlOyB9IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZAklJXN0KDApXG5cdCIgImZy
bmRpbnQJCQkjIGludCh4KVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4
KVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCkpIC0gMVxuXHQiIDogIj10IiAoX192YWx1ZSks
ICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7IF9fYXNtIF9f
dm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1
IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBk
b3VibGUgX19wb3cybCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91Ymxl
IF9fcG93MmwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl
OyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBfX2V4dGVuc2lvbl9fIGxvbmcgbG9u
ZyBpbnQgX19wID0gKGxvbmcgbG9uZyBpbnQpIF9feDsgaWYgKF9feCA9PSAobG9uZyBkb3VibGUp
IF9fcCkgeyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAi
MCIgKDEuMCksICJ1IiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9fYXNtIF9fdm9sYXRpbGVf
XyAoImZsZAklJXN0KDApXG5cdCIgImZybmRpbnQJCQkjIGludCh4KVxuXHQiICJmeGNoXG5cdCIg
ImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4KVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCkpIC0g
MVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsg
X192YWx1ZSArPSAxLjA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3Zh
bHVlKSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsg
fQojIDM4NSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGlu
ZSBsb25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IHJlZ2lzdGVy
IGxvbmcgZG91YmxlIF9fdGVtcDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXngg
LSAxID0gMl4oeCAqIGxvZzIoZSkpIC0gMVxuXHQiICJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIo
ZSlcblx0IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxu
XHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlcblx0IiAi
ZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgImZzY2FsZQkJCSMgMl4o
eCAqIGxvZzIoZSkpIC0gMl4oaW50KHggKiBsb2cyKGUpKSlcblx0IiA6ICI9dCIgKF9fdmFsdWUp
LCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZz
Y2FsZQkJCSMgMl5pbnQoeCAqIGxvZzIoZSkpXG5cdCIgOiAiPXQiIChfX3RlbXApIDogIjAiICgx
LjApLCAidSIgKF9fZXhwb25lbnQpKTsgX190ZW1wIC09IDEuMDsgcmV0dXJuIF9fdGVtcCArIF9f
dmFsdWUgPzogX194OyB9CiMgNDA1ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMK
ZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBleHAgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBk
b3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19hc20gX192
b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXnggPSAyXih4ICogbG9nMihlKSlcblx0IiAiZm11bAkl
JXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkj
IGludCh4ICogbG9nMihlKSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3Qo
eCAqIGxvZzIoZSkpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxu
XHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192
YWx1ZSArPSAxLjA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVl
KSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfSBl
eHRlcm4gX19pbmxpbmUgZmxvYXQgZXhwZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IF9fYXNtIF9fdm9s
YXRpbGVfXyAoImZsZGwyZQkJCSMgZV54ID0gMl4oeCAqIGxvZzIoZSkpXG5cdCIgImZtdWwJJSVz
dCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBp
bnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHgg
KiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0
IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fdmFs
dWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkg
OiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0
ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBf
X2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCA9IDJeKHggKiBsb2cyKGUpKVxuXHQi
ICJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJu
ZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJ
IyBmcmFjdCh4ICogbG9nMihlKSlcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUp
KSkgLSAxXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9f
eCkpOyBfX3ZhbHVlICs9IDEuMDsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIg
KF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3Zh
bHVlOyB9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX2V4cGwgKGxvbmcgZG91YmxlIF9f
eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBf
X2V4cG9uZW50OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCA9IDJeKHggKiBs
b2cyKGUpKVxuXHQiICJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0IiAiZnN0CSUlc3Qo
MSlcblx0IiAiZnJuZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQiICJmeGNoXG5cdCIgImZz
dWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0
KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVu
dCkgOiAiMCIgKF9feCkpOyBfX3ZhbHVlICs9IDEuMDsgX19hc20gX192b2xhdGlsZV9fICgiZnNj
YWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7
IHJldHVybiBfX3ZhbHVlOyB9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSB0YW4gKGRvdWJsZSBf
X3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X192YWx1ZTIgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsgX19hc20gX192b2xhdGlsZV9f
ICgiZnB0YW4iIDogIj10IiAoX192YWx1ZTIpLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7
IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCB0YW5mIChmbG9hdCBfX3gp
IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192
YWx1ZTIgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsgX19hc20gX192b2xhdGlsZV9fICgi
ZnB0YW4iIDogIj10IiAoX192YWx1ZTIpLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJl
dHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRv
dWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBk
b3VibGUgX192YWx1ZTIgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsgX19hc20gX192b2xh
dGlsZV9fICgiZnB0YW4iIDogIj10IiAoX192YWx1ZTIpLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAo
X194KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgNDI1ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s
aW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91Ymxl
IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18g
KCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgx
KSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgYXRhbjJmIChmbG9h
dCBfX3ksIGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBf
X3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAo
X195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBk
b3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10
IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192
YWx1ZTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91Ymxl
IF9feSwgbG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9f
YXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwg
InUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CgoKZXh0ZXJuIF9faW5saW5l
IGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB7IHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3Rzdwkl
JWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCks
ICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxp
bmUgZmxvYXQgZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB7IHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3Rzdwkl
JWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCks
ICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxp
bmUgbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7
IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZw
cmVtXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192
YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1
ZTsgfQojIDQ0MCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lu
bGluZSBkb3VibGUgc3FydCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7
IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194
KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgc3FydGYgKGZsb2F0
IF9feCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNx
cnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4
dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAi
PXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KZXh0ZXJuIF9f
aW5saW5lIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBs
b25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAo
X19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgoKZXh0ZXJuIF9faW5s
aW5lIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFicyAoX194
KTsgfQpleHRlcm4gX19pbmxpbmUgZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgeyByZXR1cm4gX19i
dWlsdGluX2ZhYnNmIChfX3gpOyB9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBmYWJzbCAo
bG9uZyBkb3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2wgKF9feCk7IH0KZXh0ZXJu
IF9faW5saW5lIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4g
X19idWlsdGluX2ZhYnNsIChfX3gpOyB9CgoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIHNp
biAoZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRp
bGVfXyAoImZzaW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVz
dWx0OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBzaW5mIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIg
ZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW4iIDogIj10IiAoX19yZXN1
bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBsb25n
IGRvdWJsZSBzaW5sIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19y
ZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAi
IChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGNvcyAo
ZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVf
XyAoImZjb3MiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0
OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgZmxv
YXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZjb3MiIDogIj10IiAoX19yZXN1bHQp
IDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRv
dWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1
bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZjb3MiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChf
X3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGxvZyAoZG91
YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAo
ImZsZGxuMjsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0
KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgbG9nZiAoZmxv
YXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm
bGRsbjI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgx
KSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGxvZ2wg
KGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20g
X192b2xhdGlsZV9fICgiZmxkbG4yOyBmeGNoOyBmeWwyeCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAi
MCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9CmV4dGVybiBfX2lubGluZSBk
b3VibGUgbG9nMTAgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2Fz
bSBfX3ZvbGF0aWxlX18gKCJmbGRsZzI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6
ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5l
IGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2Fz
bSBfX3ZvbGF0aWxlX18gKCJmbGRsZzI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6
ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5l
IGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsZzI7IGZ4Y2g7IGZ5bDJ4IiA6
ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7
IH0KCmV4dGVybiBfX2lubGluZSBkb3VibGUgYXNpbiAoZG91YmxlIF9feCkgeyByZXR1cm4gX19h
dGFuMmwgKF9feCwgX19zcXJ0bCAoMS4wIC0gX194ICogX194KSk7IH0gZXh0ZXJuIF9faW5saW5l
IGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHsgcmV0dXJuIF9fYXRhbjJsIChfX3gsIF9fc3FydGwg
KDEuMCAtIF9feCAqIF9feCkpOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhc2lubCAo
bG9uZyBkb3VibGUgX194KSB7IHJldHVybiBfX2F0YW4ybCAoX194LCBfX3NxcnRsICgxLjAgLSBf
X3ggKiBfX3gpKTsgfQpleHRlcm4gX19pbmxpbmUgZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gpIHsg
cmV0dXJuIF9fYXRhbjJsIChfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpLCBfX3gpOyB9IGV4dGVy
biBfX2lubGluZSBmbG9hdCBhY29zZiAoZmxvYXQgX194KSB7IHJldHVybiBfX2F0YW4ybCAoX19z
cXJ0bCAoMS4wIC0gX194ICogX194KSwgX194KTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3Vi
bGUgYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19hdGFuMmwgKF9fc3FydGwgKDEu
MCAtIF9feCAqIF9feCksIF9feCk7IH0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGF0YW4gKGRv
dWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18g
KCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7
IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgYXRhbmYgKGZsb2F0IF9f
eCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsg
ZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4g
X19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJs
ZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVf
XyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSki
KTsgcmV0dXJuIF9fcmVzdWx0OyB9CgpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24x
bCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxv
bmcgZG91YmxlIF9feCkgeyBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgbG9uZyBkb3VibGUgX194bGQ7
IHVuc2lnbmVkIGludCBfX3hpWzNdOyB9IF9fbiA9IHsgX194bGQ6IF9feCB9OyBfX24uX194aVsy
XSA9IChfX24uX194aVsyXSAmIDB4ODAwMCkgfCAweDNmZmY7IF9fbi5fX3hpWzFdID0gMHg4MDAw
MDAwMDsgX19uLl9feGlbMF0gPSAwOyByZXR1cm4gX19uLl9feGxkOyB9CiMgNDc5ICIvdXNyL2lu
Y2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBzaW5oIChk
b3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2Zh
YnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSArIF9fZXht
MSkgKiBfX3NnbjFsIChfX3gpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBzaW5oZiAoZmxvYXQg
X194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNsIChf
X3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSArIF9fZXhtMSkgKiBf
X3NnbjFsIChfX3gpOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBk
b3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2Zh
YnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSArIF9fZXht
MSkgKiBfX3NnbjFsIChfX3gpOyB9CgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgY29zaCAoZG91
YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4ID0gX19leHBsIChfX3gpOyByZXR1
cm4gMC41ICogKF9fZXggKyAxLjAgLyBfX2V4KTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgY29z
aGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4ID0gX19leHBsIChfX3gp
OyByZXR1cm4gMC41ICogKF9fZXggKyAxLjAgLyBfX2V4KTsgfSBleHRlcm4gX19pbmxpbmUgbG9u
ZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf
X2V4ID0gX19leHBsIChfX3gpOyByZXR1cm4gMC41ICogKF9fZXggKyAxLjAgLyBfX2V4KTsgfQoK
CgpleHRlcm4gX19pbmxpbmUgZG91YmxlIHRhbmggKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKC1fX2ZhYnNsIChfX3ggKyBfX3gpKTsgcmV0dXJu
IF9fZXhtMSAvIChfX2V4bTEgKyAyLjApICogX19zZ24xbCAoLV9feCk7IH0gZXh0ZXJuIF9faW5s
aW5lIGZsb2F0IHRhbmhmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0x
ID0gX19leHBtMWwgKC1fX2ZhYnNsIChfX3ggKyBfX3gpKTsgcmV0dXJuIF9fZXhtMSAvIChfX2V4
bTEgKyAyLjApICogX19zZ24xbCAoLV9feCk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91Ymxl
IHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0g
X19leHBtMWwgKC1fX2ZhYnNsIChfX3ggKyBfX3gpKTsgcmV0dXJuIF9fZXhtMSAvIChfX2V4bTEg
KyAyLjApICogX19zZ24xbCAoLV9feCk7IH0KCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgZmxv
b3IgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGls
ZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQg
X19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9f
Y3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRj
dyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAi
PXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIg
OiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQg
Zmxvb3JmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xh
dGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBp
bnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7
IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJm
bGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIg
OiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAl
MCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9u
ZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1
bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIg
OiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNt
IF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0
aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9s
YXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfQojIDUw
MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3Vi
bGUgY2VpbCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3Zv
bGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0
IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cp
KTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAo
ImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50
IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3
ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBm
bG9hdCBjZWlsZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9f
dm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hv
cnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19j
dykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxl
ICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRp
bnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxk
Y3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5l
IGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGls
ZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAl
MCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9f
YXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3Zv
bGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9f
dm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfQoj
IDUyMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBk
b3VibGUKbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX3kpCnsKICByZWdpc3RlciBsb25nIGRvdWJs
ZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkg
OiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0K
CgoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBleHBtMSAoZG91YmxlIF9feCkgeyByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBy
ZWdpc3RlciBsb25nIGRvdWJsZSBfX3RlbXA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGwyZQkJ
CSMgZV54IC0gMSA9IDJeKHggKiBsb2cyKGUpKSAtIDFcblx0IiAiZm11bAklJXN0KDEpCQkjIHgg
KiBsb2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9n
MihlKSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkp
XG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiICJmc2NhbGUJ
CQkjIDJeKHggKiBsb2cyKGUpKSAtIDJeKGludCh4ICogbG9nMihlKSkpXG5cdCIgOiAiPXQiIChf
X3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxl
X18gKCJmc2NhbGUJCQkjIDJeaW50KHggKiBsb2cyKGUpKVxuXHQiIDogIj10IiAoX190ZW1wKSA6
ICIwIiAoMS4wKSwgInUiIChfX2V4cG9uZW50KSk7IF9fdGVtcCAtPSAxLjA7IHJldHVybiBfX3Rl
bXAgKyBfX3ZhbHVlID86IF9feDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgZXhwbTFmIChmbG9h
dCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX19leHBvbmVudDsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOyBfX2FzbSBfX3ZvbGF0
aWxlX18gKCJmbGRsMmUJCQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAxXG5cdCIgImZt
dWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50
CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZy
YWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAt
IDFcblx0IiAiZnNjYWxlCQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAqIGxvZzIoZSkp
KVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsg
X19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihlKSlcblx0IiA6
ICI9dCIgKF9fdGVtcCkgOiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOyBfX3RlbXAgLT0g
MS4wOyByZXR1cm4gX190ZW1wICsgX192YWx1ZSA/OiBfX3g7IH0gZXh0ZXJuIF9faW5saW5lIGxv
bmcgZG91YmxlIGV4cG0xbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fdGVtcDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXnggLSAxID0g
Ml4oeCAqIGxvZzIoZSkpIC0gMVxuXHQiICJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0
IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQiICJm
eGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlcblx0IiAiZjJ4bTEJ
CQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgImZzY2FsZQkJCSMgMl4oeCAqIGxv
ZzIoZSkpIC0gMl4oaW50KHggKiBsb2cyKGUpKSlcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUi
IChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZQkJ
CSMgMl5pbnQoeCAqIGxvZzIoZSkpXG5cdCIgOiAiPXQiIChfX3RlbXApIDogIjAiICgxLjApLCAi
dSIgKF9fZXhwb25lbnQpKTsgX190ZW1wIC09IDEuMDsgcmV0dXJuIF9fdGVtcCArIF9fdmFsdWUg
PzogX194OyB9CgoKCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gp
IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4w
IC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBf
X3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5
bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9f
dmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB7IHJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAq
IDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxz
ZSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6
ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9
IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgeyBy
ZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAw
LjUgKiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7
IGVsc2UgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhw
MSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1
ZTsgfQojIDU1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lu
bGluZSBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195
ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChf
X3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBleHRlcm4g
X19pbmxpbmUgZmxvYXQgYXNpbmhmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRs
IChfX3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBleHRl
cm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0
ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAq
IF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFs
IChfX3gpKTsgfQoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkg
eyByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCAr
IDEuMCkpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgeyByZXR1
cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkp
OyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkg
eyByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCAr
IDEuMCkpOyB9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgeyBy
ZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxv
ZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBleHRl
cm4gX19pbmxpbmUgZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsgX195
KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcg
ZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f
eSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAo
MS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9CgoKCgpleHRlcm4gX19pbmxpbmUgZG91Ymxl
IGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBf
X3ggKyBfX3kgKiBfX3kpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBoeXBvdGYgKGZsb2F0IF9f
eCwgZmxvYXQgX195KSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9
IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9
CgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3Zv
bGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6
ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBsb2di
ZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxv
bmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10
IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsg
fSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgeyBy
ZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7
IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayksICI9dSIg
KF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA2NTIgIi91c3IvaW5j
bHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIGRyZW0gKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVy
IGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZz
dHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIg
KF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3Zh
bHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp
IHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19h
c20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxu
XHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAo
X194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGlu
ZSBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsg
cmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20g
X192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQi
ICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194
KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9CiMgNjY1ICIvdXNyL2luY2x1
ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGludApfX2Zpbml0ZSAoZG91
YmxlIF9feCkKewogIHJldHVybiAoX19leHRlbnNpb25fXwogICAgICAgICAgKCgoKCh1bmlvbiB7
IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0pIHtfX2Q6IF9feH0pLl9faVsxXQogICAgICAgICAg
ICAgfCAweDgwMGZmZmZmdSkgKyAxKSA+PiAzMSkpOwp9CgoKCmV4dGVybiBfX2lubGluZSBkb3Vi
bGUgX19jb3NobTEgKGRvdWJsZSkgOyBleHRlcm4gX19pbmxpbmUgZG91YmxlIF9fY29zaG0xIChk
b3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2Zh
YnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSkgKiBfX2V4
bTE7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fY29zaG0xZiAoZmxvYXQpIDsgZXh0ZXJuIF9f
aW5saW5lIGZsb2F0IF9fY29zaG0xZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEg
LyAoX19leG0xICsgMS4wKSkgKiBfX2V4bTE7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91Ymxl
IF9fY29zaG0xbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9f
Y29zaG0xbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9
IF9fZXhwbTFsIChfX2ZhYnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0x
ICsgMS4wKSkgKiBfX2V4bTE7IH0KCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBfX2Fjb3NoMXAg
KGRvdWJsZSkgOyBleHRlcm4gX19pbmxpbmUgZG91YmxlIF9fYWNvc2gxcCAoZG91YmxlIF9feCkg
eyByZXR1cm4gbG9nMXBsIChfX3ggKyBfX3NxcnRsIChfX3gpICogX19zcXJ0bCAoX194ICsgMi4w
KSk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fYWNvc2gxcGYgKGZsb2F0KSA7IGV4dGVybiBf
X2lubGluZSBmbG9hdCBfX2Fjb3NoMXBmIChmbG9hdCBfX3gpIHsgcmV0dXJuIGxvZzFwbCAoX194
ICsgX19zcXJ0bCAoX194KSAqIF9fc3FydGwgKF9feCArIDIuMCkpOyB9IGV4dGVybiBfX2lubGlu
ZSBsb25nIGRvdWJsZSBfX2Fjb3NoMXBsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gX19pbmxpbmUg
bG9uZyBkb3VibGUgX19hY29zaDFwbCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBsb2cxcGwg
KF9feCArIF9fc3FydGwgKF9feCkgKiBfX3NxcnRsIChfX3ggKyAyLjApKTsgfQojIDM1MSAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNDExICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCgojIDE0
MiAiY29tbW9uLmgiIDIKIyAxNzYgImNvbW1vbi5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgICByZWFs
X3QgcmU7CiAgICByZWFsX3QgaW07Cn0gY29tcGxleF90OwoKCgp1aW50MzJfdCBpbnRfbG9nMih1
aW50MzJfdCB2YWwpOwojIDMzICJzeW50YXguYyIgMgojIDEgInN5bnRheC5oIiAxCiMgMjkgInN5
bnRheC5oIgojIDEgImJpdHMuaCIgMQojIDI5ICJiaXRzLmgiCiMgMSAiYW5hbHlzaXMuaCIgMQoj
IDMwICJiaXRzLmgiIDIKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9iaXRmaWxlCnsKCiAgICAgICAg
dWludDMyX3QgYnVmYTsKICAgICAgICB1aW50MzJfdCBidWZiOwogICAgICAgIHVpbnQzMl90IHBv
czsKICAgICAgICB1aW50MzJfdCAqdGFpbDsKICAgICAgICB1aW50MzJfdCAqc3RhcnQ7Cn0gYml0
ZmlsZTsKIyA1OCAiYml0cy5oIgp2b2lkIGZhYWRfaW5pdGJpdHMoYml0ZmlsZSAqbGQsIHZvaWQg
KmJ1ZmZlcik7CnVpbnQ4X3QgZmFhZF9ieXRlX2FsaWduKGJpdGZpbGUgKmxkKTsKdWludDMyX3Qg
ZmFhZF9nZXRfcHJvY2Vzc2VkX2JpdHMoYml0ZmlsZSAqbGQpOwoKCnN0YXRpYyB1aW50MzJfdCBm
YWFkX3Nob3diaXRzKGJpdGZpbGUgKmxkLCB1aW50OF90IGJpdHMpCnsKICAgIGludDMyX3QgbmJp
dCA9IChiaXRzICsgbGQtPnBvcykgLSAzMjsKICAgIGlmIChuYml0ID4gMCkKICAgIHsKICAgICAg
ICByZXR1cm4gKChsZC0+YnVmYSAmICgweGZmZmZmZmZmID4+IGxkLT5wb3MpKSA8PCBuYml0KSB8
CiAgICAgICAgICAgIChsZC0+YnVmYiA+PiAoMzIgLSBuYml0KSk7CiAgICB9IGVsc2UgewogICAg
ICAgIHJldHVybiAobGQtPmJ1ZmEgJiAoMHhmZmZmZmZmZiA+PiBsZC0+cG9zKSkgPj4gKDMyIC0g
bGQtPnBvcyAtIGJpdHMpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBmYWFkX2ZsdXNoYml0cyhiaXRm
aWxlICpsZCwgdWludDhfdCBiaXRzKQp7CiAgICAgICAgbGQtPnBvcyArPSBiaXRzOwoKICAgICAg
ICBpZiAobGQtPnBvcyA+PSAzMikKICAgICAgICB7CiAgICAgICAgICAgICAgICB1aW50MzJfdCB0
bXA7CgogICAgICAgICAgICAgICAgbGQtPmJ1ZmEgPSBsZC0+YnVmYjsKICAgICAgICAgICAgICAg
IHRtcCA9ICoodWludDMyX3QqKWxkLT50YWlsOwoKICAgICAgICAgICAgICAgICgodG1wKSA9ICgg
KCh0bXApJjB4ZmYpPDwyNCkgfCAoKCh0bXApJjB4ZmYwMCk8PDgpIHwgKCgodG1wKT4+OCkmMHhm
ZjAwKSB8ICgoKHRtcCk+PjI0KSYweGZmKSk7CgogICAgICAgICAgICAgICAgbGQtPmJ1ZmIgPSB0
bXA7CiAgICAgICAgICAgICAgICBsZC0+dGFpbCsrOwogICAgICAgICAgICAgICAgbGQtPnBvcyAt
PSAzMjsKICAgICAgICB9Cn0KCgpzdGF0aWMgdWludDMyX3QgZmFhZF9nZXRiaXRzKGJpdGZpbGUg
KmxkLCB1aW50OF90IG4gKQp7CiAgICAgICAgdWludDMyX3QgcmV0ID0gZmFhZF9zaG93Yml0cyhs
ZCwgbik7CiAgICAgICAgZmFhZF9mbHVzaGJpdHMobGQsIG4pOwoKCgoKCgogICAgICAgIHJldHVy
biByZXQ7Cn0KCnN0YXRpYyB1aW50OF90IGZhYWRfZ2V0MWJpdChiaXRmaWxlICpsZCApCnsKICAg
IHJldHVybiAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDEgKTsKfQojIDMwICJzeW50YXguaCIg
MgojIDg3ICJzeW50YXguaCIKdHlwZWRlZiBzdHJ1Y3QKewogICAgdWludDhfdCBlbGVtZW50X2lu
c3RhbmNlX3RhZzsKICAgIHVpbnQ4X3Qgb2JqZWN0X3R5cGU7CiAgICB1aW50OF90IHNmX2luZGV4
OwogICAgdWludDhfdCBudW1fZnJvbnRfY2hhbm5lbF9lbGVtZW50czsKICAgIHVpbnQ4X3QgbnVt
X3NpZGVfY2hhbm5lbF9lbGVtZW50czsKICAgIHVpbnQ4X3QgbnVtX2JhY2tfY2hhbm5lbF9lbGVt
ZW50czsKICAgIHVpbnQ4X3QgbnVtX2xmZV9jaGFubmVsX2VsZW1lbnRzOwogICAgdWludDhfdCBu
dW1fYXNzb2NfZGF0YV9lbGVtZW50czsKICAgIHVpbnQ4X3QgbnVtX3ZhbGlkX2NjX2VsZW1lbnRz
OwogICAgdWludDhfdCBtb25vX21peGRvd25fcHJlc2VudDsKICAgIHVpbnQ4X3QgbW9ub19taXhk
b3duX2VsZW1lbnRfbnVtYmVyOwogICAgdWludDhfdCBzdGVyZW9fbWl4ZG93bl9wcmVzZW50Owog
ICAgdWludDhfdCBzdGVyZW9fbWl4ZG93bl9lbGVtZW50X251bWJlcjsKICAgIHVpbnQ4X3QgbWF0
cml4X21peGRvd25faWR4X3ByZXNlbnQ7CiAgICB1aW50OF90IHBzZXVkb19zdXJyb3VuZF9lbmFi
bGU7CiAgICB1aW50OF90IG1hdHJpeF9taXhkb3duX2lkeDsKICAgIHVpbnQ4X3QgZnJvbnRfZWxl
bWVudF9pc19jcGVbMTZdOwogICAgdWludDhfdCBmcm9udF9lbGVtZW50X3RhZ19zZWxlY3RbMTZd
OwogICAgdWludDhfdCBzaWRlX2VsZW1lbnRfaXNfY3BlWzE2XTsKICAgIHVpbnQ4X3Qgc2lkZV9l
bGVtZW50X3RhZ19zZWxlY3RbMTZdOwogICAgdWludDhfdCBiYWNrX2VsZW1lbnRfaXNfY3BlWzE2
XTsKICAgIHVpbnQ4X3QgYmFja19lbGVtZW50X3RhZ19zZWxlY3RbMTZdOwogICAgdWludDhfdCBs
ZmVfZWxlbWVudF90YWdfc2VsZWN0WzE2XTsKICAgIHVpbnQ4X3QgYXNzb2NfZGF0YV9lbGVtZW50
X3RhZ19zZWxlY3RbMTZdOwogICAgdWludDhfdCBjY19lbGVtZW50X2lzX2luZF9zd1sxNl07CiAg
ICB1aW50OF90IHZhbGlkX2NjX2VsZW1lbnRfdGFnX3NlbGVjdFsxNl07CgogICAgdWludDhfdCBj
aGFubmVsczsKCiAgICB1aW50OF90IGNvbW1lbnRfZmllbGRfYnl0ZXM7CiAgICB1aW50OF90IGNv
bW1lbnRfZmllbGRfZGF0YVsyNTddOwp9IHByb2dyYW1fY29uZmlnOwoKdHlwZWRlZiBzdHJ1Y3QK
ewogICAgdWludDE2X3Qgc3luY3dvcmQ7CiAgICB1aW50OF90IGlkOwogICAgdWludDhfdCBsYXll
cjsKICAgIHVpbnQ4X3QgcHJvdGVjdGlvbl9hYnNlbnQ7CiAgICB1aW50OF90IHByb2ZpbGU7CiAg
ICB1aW50OF90IHNmX2luZGV4OwogICAgdWludDhfdCBwcml2YXRlX2JpdDsKICAgIHVpbnQ4X3Qg
Y2hhbm5lbF9jb25maWd1cmF0aW9uOwogICAgdWludDhfdCBvcmlnaW5hbDsKICAgIHVpbnQ4X3Qg
aG9tZTsKICAgIHVpbnQ4X3QgZW1waGFzaXM7CiAgICB1aW50OF90IGNvcHlyaWdodF9pZGVudGlm
aWNhdGlvbl9iaXQ7CiAgICB1aW50OF90IGNvcHlyaWdodF9pZGVudGlmaWNhdGlvbl9zdGFydDsK
ICAgIHVpbnQxNl90IGFhY19mcmFtZV9sZW5ndGg7CiAgICB1aW50MTZfdCBhZHRzX2J1ZmZlcl9m
dWxsbmVzczsKICAgIHVpbnQ4X3Qgbm9fcmF3X2RhdGFfYmxvY2tzX2luX2ZyYW1lOwogICAgdWlu
dDE2X3QgY3JjX2NoZWNrOwp9IGFkdHNfaGVhZGVyOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgdWlu
dDhfdCBjb3B5cmlnaHRfaWRfcHJlc2VudDsKICAgIGludDhfdCBjb3B5cmlnaHRfaWRbMTBdOwog
ICAgdWludDhfdCBvcmlnaW5hbF9jb3B5OwogICAgdWludDhfdCBob21lOwogICAgdWludDhfdCBi
aXRzdHJlYW1fdHlwZTsKICAgIHVpbnQzMl90IGJpdHJhdGU7CiAgICB1aW50OF90IG51bV9wcm9n
cmFtX2NvbmZpZ19lbGVtZW50czsKICAgIHVpbnQzMl90IGFkaWZfYnVmZmVyX2Z1bGxuZXNzOwoK
ICAgIHByb2dyYW1fY29uZmlnIHBjZTsKfSBhZGlmX2hlYWRlcjsKCnR5cGVkZWYgc3RydWN0CnsK
ICAgIHVpbnQ4X3QgbGFzdF9iYW5kOwogICAgdWludDhfdCBkYXRhX3ByZXNlbnQ7CiAgICB1aW50
MTZfdCBsYWc7CiAgICB1aW50OF90IGxhZ191cGRhdGU7CiAgICB1aW50OF90IGNvZWY7CiAgICB1
aW50OF90IGxvbmdfdXNlZFs1MV07CiAgICB1aW50OF90IHNob3J0X3VzZWRbOF07CiAgICB1aW50
OF90IHNob3J0X2xhZ19wcmVzZW50WzhdOwogICAgdWludDhfdCBzaG9ydF9sYWdbOF07Cn0gbHRw
X2luZm87Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICB1aW50OF90IGxpbWl0OwogICAgdWludDhfdCBw
cmVkaWN0b3JfcmVzZXQ7CiAgICB1aW50OF90IHByZWRpY3Rvcl9yZXNldF9ncm91cF9udW1iZXI7
CiAgICB1aW50OF90IHByZWRpY3Rpb25fdXNlZFs0MV07Cn0gcHJlZF9pbmZvOwoKdHlwZWRlZiBz
dHJ1Y3QKewogICAgdWludDhfdCBudW1iZXJfcHVsc2U7CiAgICB1aW50OF90IHB1bHNlX3N0YXJ0
X3NmYjsKICAgIHVpbnQ4X3QgcHVsc2Vfb2Zmc2V0WzRdOwogICAgdWludDhfdCBwdWxzZV9hbXBb
NF07Cn0gcHVsc2VfaW5mbzsKCnR5cGVkZWYgc3RydWN0CnsKICAgIHVpbnQ4X3Qgbl9maWx0Wzhd
OwogICAgdWludDhfdCBjb2VmX3Jlc1s4XTsKICAgIHVpbnQ4X3QgbGVuZ3RoWzhdWzRdOwogICAg
dWludDhfdCBvcmRlcls4XVs0XTsKICAgIHVpbnQ4X3QgZGlyZWN0aW9uWzhdWzRdOwogICAgdWlu
dDhfdCBjb2VmX2NvbXByZXNzWzhdWzRdOwogICAgdWludDhfdCBjb2VmWzhdWzRdWzMyXTsKfSB0
bnNfaW5mbzsKCnR5cGVkZWYgc3RydWN0CnsKICAgIHVpbnQ4X3QgcHJlc2VudDsKCiAgICB1aW50
OF90IG51bV9iYW5kczsKICAgIHVpbnQ4X3QgcGNlX2luc3RhbmNlX3RhZzsKICAgIHVpbnQ4X3Qg
ZXhjbHVkZWRfY2huc19wcmVzZW50OwogICAgdWludDhfdCBiYW5kX3RvcFsxN107CiAgICB1aW50
OF90IHByb2dfcmVmX2xldmVsOwogICAgdWludDhfdCBkeW5fcm5nX3NnblsxN107CiAgICB1aW50
OF90IGR5bl9ybmdfY3RsWzE3XTsKICAgIHVpbnQ4X3QgZXhjbHVkZV9tYXNrWzY0XTsKICAgIHVp
bnQ4X3QgYWRkaXRpb25hbF9leGNsdWRlZF9jaG5zWzY0XTsKCiAgICByZWFsX3QgY3RybDE7CiAg
ICByZWFsX3QgY3RybDI7Cn0gZHJjX2luZm87Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICB1aW50OF90
IG1heF9zZmI7CgogICAgdWludDhfdCBudW1fc3diOwogICAgdWludDhfdCBudW1fd2luZG93X2dy
b3VwczsKICAgIHVpbnQ4X3QgbnVtX3dpbmRvd3M7CiAgICB1aW50OF90IHdpbmRvd19zZXF1ZW5j
ZTsKICAgIHVpbnQ4X3Qgd2luZG93X2dyb3VwX2xlbmd0aFs4XTsKICAgIHVpbnQ4X3Qgd2luZG93
X3NoYXBlOwogICAgdWludDhfdCBzY2FsZV9mYWN0b3JfZ3JvdXBpbmc7CiAgICB1aW50MTZfdCBz
ZWN0X3NmYl9vZmZzZXRbOF1bMTUqOF07CiAgICB1aW50MTZfdCBzd2Jfb2Zmc2V0WzUyXTsKCiAg
ICB1aW50OF90IHNlY3RfY2JbOF1bMTUqOF07CiAgICB1aW50MTZfdCBzZWN0X3N0YXJ0WzhdWzE1
KjhdOwogICAgdWludDE2X3Qgc2VjdF9lbmRbOF1bMTUqOF07CiAgICB1aW50OF90IHNmYl9jYls4
XVs4KjE1XTsKICAgIHVpbnQ4X3QgbnVtX3NlY1s4XTsKCiAgICB1aW50OF90IGdsb2JhbF9nYWlu
OwogICAgdWludDE2X3Qgc2NhbGVfZmFjdG9yc1s4XVs1MV07CgogICAgdWludDhfdCBtc19tYXNr
X3ByZXNlbnQ7CiAgICB1aW50OF90IG1zX3VzZWRbOF1bNTFdOwoKICAgIHVpbnQ4X3QgcHVsc2Vf
ZGF0YV9wcmVzZW50OwogICAgdWludDhfdCB0bnNfZGF0YV9wcmVzZW50OwogICAgdWludDhfdCBn
YWluX2NvbnRyb2xfZGF0YV9wcmVzZW50OwogICAgdWludDhfdCBwcmVkaWN0b3JfZGF0YV9wcmVz
ZW50OwoKICAgIHB1bHNlX2luZm8gcHVsOwogICAgdG5zX2luZm8gdG5zOwogICAgcHJlZF9pbmZv
IHByZWQ7CiAgICBsdHBfaW5mbyBsdHA7CiAgICBsdHBfaW5mbyBsdHAyOwoKCgogICAgdWludDE2
X3QgbGVuZ3RoX29mX3Jlb3JkZXJlZF9zcGVjdHJhbF9kYXRhOwogICAgdWludDhfdCBsZW5ndGhf
b2ZfbG9uZ2VzdF9jb2Rld29yZDsKCn0gaWNfc3RyZWFtOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAg
dWludDhfdCBlbGVfaWQ7CgogICAgdWludDhfdCBjaGFubmVsOwogICAgdWludDhfdCBwYWlyZWRf
Y2hhbm5lbDsKCiAgICB1aW50OF90IGVsZW1lbnRfaW5zdGFuY2VfdGFnOwogICAgdWludDhfdCBj
b21tb25fd2luZG93OwoKICAgIGljX3N0cmVhbSBpY3MxOwogICAgaWNfc3RyZWFtIGljczI7Cn0g
ZWxlbWVudDsKCgp1aW50OF90IEdBU3BlY2lmaWNDb25maWcoYml0ZmlsZSAqbGQsIHVpbnQ4X3Qg
KmNoYW5uZWxDb25maWd1cmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBv
YmplY3RfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFhY1NlY3Rpb25E
YXRhUmVzaWxpZW5jZUZsYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphYWNT
Y2FsZWZhY3RvckRhdGFSZXNpbGllbmNlRmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQ4X3QgKmFhY1NwZWN0cmFsRGF0YVJlc2lsaWVuY2VGbGFnLAogICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDhfdCAqZnJhbWVMZW5ndGhGbGFnKTsKdWludDhfdCByYXdfZGF0YV9ibG9jayhi
aXRmaWxlICpsZCwgaW50MTZfdCAqKipzcGVjX2RhdGEsIHJlYWxfdCAqKipzcGVjX2NvZWYsCiAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCAqKipzeW50YXhfZWxlbWVudHMsCiAgICAgICAg
ICAgICAgICAgICAgICAgdWludDhfdCAqY2hhbm5lbHMsIHVpbnQ4X3QgKmVsZSwgdWludDhfdCAq
Y2hfZWxlLAogICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGZyYW1lX2xlbiwgdWludDhf
dCBzZl9pbmRleCwgdWludDhfdCBvYmplY3RfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICBk
cmNfaW5mbyAqZHJjKTsKdWludDhfdCBzaW5nbGVfbGZlX2NoYW5uZWxfZWxlbWVudChlbGVtZW50
ICpzY2UsIGJpdGZpbGUgKmxkLCBpbnQxNl90ICpzcGVjX2RhdGEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDhfdCBzZl9pbmRleCwgdWludDhfdCBvYmplY3RfdHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBmcmFtZV9sZW4KCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLHVpbnQ4X3QgYWFjU2VjdGlvbkRhdGFS
ZXNpbGllbmNlRmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90
IGFhY1NjYWxlZmFjdG9yRGF0YVJlc2lsaWVuY2VGbGFnLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQ4X3QgYWFjU3BlY3RyYWxEYXRhUmVzaWxpZW5jZUZsYWcKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKdWludDhfdCBjaGFubmVsX3BhaXJfZWxl
bWVudChlbGVtZW50ICpjcGUsIGJpdGZpbGUgKmxkLCBpbnQxNl90ICpzcGVjX2RhdGExLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QgKnNwZWNfZGF0YTIsIHVpbnQ4X3Qgc2Zf
aW5kZXgsIHVpbnQ4X3Qgb2JqZWN0X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDE2X3QgZnJhbWVfbGVuCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICx1aW50OF90
IGFhY1NlY3Rpb25EYXRhUmVzaWxpZW5jZUZsYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDhfdCBhYWNTY2FsZWZhY3RvckRhdGFSZXNpbGllbmNlRmxhZywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50OF90IGFhY1NwZWN0cmFsRGF0YVJlc2lsaWVuY2VGbGFnCgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CnVpbnQxNl90IGRhdGFfc3RyZWFtX2VsZW1l
bnQoYml0ZmlsZSAqbGQpOwp1aW50OF90IHByb2dyYW1fY29uZmlnX2VsZW1lbnQocHJvZ3JhbV9j
b25maWcgKnBjZSwgYml0ZmlsZSAqbGQpOwp1aW50OF90IGZpbGxfZWxlbWVudChiaXRmaWxlICps
ZCwgZHJjX2luZm8gKmRyYwoKCgogICAgICAgICAgICAgICAgICAgICApOwp1aW50OF90IGFkdHNf
ZnJhbWUoYWR0c19oZWFkZXIgKmFkdHMsIGJpdGZpbGUgKmxkKTsKdm9pZCBnZXRfYWRpZl9oZWFk
ZXIoYWRpZl9oZWFkZXIgKmFkaWYsIGJpdGZpbGUgKmxkKTsKCgoKc3RhdGljIHVpbnQ4X3QgaW5k
aXZpZHVhbF9jaGFubmVsX3N0cmVhbShlbGVtZW50ICplbGUsIGJpdGZpbGUgKmxkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNfc3RyZWFtICppY3MsIHVpbnQ4X3Qgc2Nh
bF9mbGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCAqc3Bl
Y19kYXRhLCB1aW50OF90IHNmX2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDhfdCBvYmplY3RfdHlwZSwgdWludDE2X3QgZnJhbWVfbGVuCgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLHVpbnQ4X3QgYWFjU2VjdGlvbkRhdGFSZXNpbGll
bmNlRmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWFj
U2NhbGVmYWN0b3JEYXRhUmVzaWxpZW5jZUZsYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50OF90IGFhY1NwZWN0cmFsRGF0YVJlc2lsaWVuY2VGbGFnCgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKc3RhdGljIHVpbnQ4X3QgaWNzX2luZm8o
aWNfc3RyZWFtICppY3MsIGJpdGZpbGUgKmxkLCB1aW50OF90IGNvbW1vbl93aW5kb3csCiAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZnNfaW5kZXgsIHVpbnQ4X3Qgb2JqZWN0X3R5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGZyYW1lX2xlbik7CnN0YXRpYyB2b2lk
IHNlY3Rpb25fZGF0YShpY19zdHJlYW0gKmljcywgYml0ZmlsZSAqbGQKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAsdWludDhfdCBhYWNTZWN0aW9uRGF0YVJlc2lsaWVuY2VGbGFnCgogICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKc3RhdGljIHVpbnQ4X3Qgc2NhbGVfZmFjdG9yX2RhdGEoaWNf
c3RyZWFtICppY3MsIGJpdGZpbGUgKmxkCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsdWludDhfdCBhYWNTY2FsZWZhY3RvckRhdGFSZXNpbGllbmNlRmxhZwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKc3RhdGljIHZvaWQgZ2Fpbl9jb250cm9sX2RhdGEoYml0
ZmlsZSAqbGQsIGljX3N0cmVhbSAqaWNzKTsKc3RhdGljIHVpbnQ4X3Qgc3BlY3RyYWxfZGF0YShp
Y19zdHJlYW0gKmljcywgYml0ZmlsZSAqbGQsIGludDE2X3QgKnNwZWN0cmFsX2RhdGEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgZnJhbWVfbGVuKTsKc3RhdGljIHVpbnQx
Nl90IGV4dGVuc2lvbl9wYXlsb2FkKGJpdGZpbGUgKmxkLCBkcmNfaW5mbyAqZHJjLCB1aW50MTZf
dCBjb3VudCk7Cgp1aW50OF90IHJlb3JkZXJlZF9zcGVjdHJhbF9kYXRhKGljX3N0cmVhbSAqaWNz
LCBiaXRmaWxlICpsZCwgaW50MTZfdCAqc3BlY3RyYWxfZGF0YSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50MTZfdCBmcmFtZV9sZW4sIHVpbnQ4X3QgYWFjU2VjdGlvbkRhdGFS
ZXNpbGllbmNlRmxhZyk7CgpzdGF0aWMgdm9pZCBwdWxzZV9kYXRhKHB1bHNlX2luZm8gKnB1bCwg
Yml0ZmlsZSAqbGQpOwpzdGF0aWMgdm9pZCB0bnNfZGF0YShpY19zdHJlYW0gKmljcywgdG5zX2lu
Zm8gKnRucywgYml0ZmlsZSAqbGQpOwpzdGF0aWMgdm9pZCBsdHBfZGF0YShpY19zdHJlYW0gKmlj
cywgbHRwX2luZm8gKmx0cCwgYml0ZmlsZSAqbGQsCiAgICAgICAgICAgICAgICAgICAgIHVpbnQ4
X3Qgb2JqZWN0X3R5cGUpOwpzdGF0aWMgdWludDhfdCBhZHRzX2ZpeGVkX2hlYWRlcihhZHRzX2hl
YWRlciAqYWR0cywgYml0ZmlsZSAqbGQpOwpzdGF0aWMgdm9pZCBhZHRzX3ZhcmlhYmxlX2hlYWRl
cihhZHRzX2hlYWRlciAqYWR0cywgYml0ZmlsZSAqbGQpOwpzdGF0aWMgdm9pZCBhZHRzX2Vycm9y
X2NoZWNrKGFkdHNfaGVhZGVyICphZHRzLCBiaXRmaWxlICpsZCk7CnN0YXRpYyB1aW50OF90IGR5
bmFtaWNfcmFuZ2VfaW5mbyhiaXRmaWxlICpsZCwgZHJjX2luZm8gKmRyYyk7CnN0YXRpYyB1aW50
OF90IGV4Y2x1ZGVkX2NoYW5uZWxzKGJpdGZpbGUgKmxkLCBkcmNfaW5mbyAqZHJjKTsKIyAzNCAi
c3ludGF4LmMiIDIKIyAxICJzcGVjcmVjLmgiIDEKIyAzNyAic3BlY3JlYy5oIgp1aW50OF90IHdp
bmRvd19ncm91cGluZ19pbmZvKGljX3N0cmVhbSAqaWNzLCB1aW50OF90IGZzX2luZGV4LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgb2JqZWN0X3R5cGUsIHVpbnQxNl90IGZy
YW1lX2xlbik7CnZvaWQgcXVhbnRfdG9fc3BlYyhpY19zdHJlYW0gKmljcywgcmVhbF90ICpzcGVj
X2RhdGEsIHVpbnQxNl90IGZyYW1lX2xlbik7CnZvaWQgYnVpbGRfdGFibGVzKHJlYWxfdCAqaXFf
dGFibGUsIHJlYWxfdCAqcG93Ml90YWJsZSk7CnZvaWQgaW52ZXJzZV9xdWFudGl6YXRpb24ocmVh
bF90ICp4X2ludnF1YW50LCBpbnQxNl90ICp4X3F1YW50LCByZWFsX3QgKmlxX3RhYmxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGZyYW1lX2xlbik7CnZvaWQgYXBwbHlfc2Nh
bGVmYWN0b3JzKGljX3N0cmVhbSAqaWNzLCByZWFsX3QgKnhfaW52cXVhbnQsIHJlYWxfdCAqcG93
Ml90YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgZnJhbWVfbGVuKTsKIyAz
NSAic3ludGF4LmMiIDIKIyAxICJodWZmbWFuLmgiIDEKIyAzNCAiaHVmZm1hbi5oIgojIDEgImNv
ZGVib29rL2hjYi5oIiAxCiMgNzQgImNvZGVib29rL2hjYi5oIgp0eXBlZGVmIHN0cnVjdAp7CiAg
ICB1aW50OF90IG9mZnNldDsKICAgIHVpbnQ4X3QgZXh0cmFfYml0czsKfSBoY2I7CgoKdHlwZWRl
ZiBzdHJ1Y3QKewogICAgdWludDhfdCBiaXRzOwogICAgaW50OF90IHg7CiAgICBpbnQ4X3QgeTsK
fSBoY2JfMl9wYWlyOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgdWludDhfdCBiaXRzOwogICAgaW50
OF90IHg7CiAgICBpbnQ4X3QgeTsKICAgIGludDhfdCB2OwogICAgaW50OF90IHc7Cn0gaGNiXzJf
cXVhZDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICB1aW50OF90IGlzX2xlYWY7CiAgICBpbnQ4X3Qg
ZGF0YVs0XTsKfSBoY2JfYmluX3F1YWQ7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICB1aW50OF90IGlz
X2xlYWY7CiAgICBpbnQ4X3QgZGF0YVsyXTsKfSBoY2JfYmluX3BhaXI7CgpleHRlcm4gaGNiIGhj
YjFfMVtdOwpleHRlcm4gaGNiIGhjYjJfMVtdOwpleHRlcm4gaGNiIGhjYjRfMVtdOwpleHRlcm4g
aGNiIGhjYjZfMVtdOwpleHRlcm4gaGNiIGhjYjhfMVtdOwpleHRlcm4gaGNiIGhjYjEwXzFbXTsK
ZXh0ZXJuIGhjYiBoY2IxMV8xW107CgpleHRlcm4gaGNiXzJfcXVhZCBoY2IxXzJbXTsKZXh0ZXJu
IGhjYl8yX3F1YWQgaGNiMl8yW107CmV4dGVybiBoY2JfMl9xdWFkIGhjYjRfMltdOwpleHRlcm4g
aGNiXzJfcGFpciBoY2I2XzJbXTsKZXh0ZXJuIGhjYl8yX3BhaXIgaGNiOF8yW107CmV4dGVybiBo
Y2JfMl9wYWlyIGhjYjEwXzJbXTsKZXh0ZXJuIGhjYl8yX3BhaXIgaGNiMTFfMltdOwoKZXh0ZXJu
IGhjYl9iaW5fcXVhZCBoY2IzW107CmV4dGVybiBoY2JfYmluX3BhaXIgaGNiNVtdOwpleHRlcm4g
aGNiX2Jpbl9wYWlyIGhjYjdbXTsKZXh0ZXJuIGhjYl9iaW5fcGFpciBoY2I5W107CgpleHRlcm4g
dWludDhfdCBoY2Jfc2ZbXVsyXTsKIyAzNSAiaHVmZm1hbi5oIiAyCgoKc3RhdGljIGludDhfdCBo
dWZmbWFuX3NjYWxlX2ZhY3RvcihiaXRmaWxlICpsZCkKewogICAgdWludDE2X3Qgb2Zmc2V0ID0g
MDsKCiAgICB3aGlsZSAoaGNiX3NmW29mZnNldF1bMV0pCiAgICB7CiAgICAgICAgdWludDhfdCBi
ID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgICAgICk7CiAgICAgICAgb2Zmc2V0ICs9IGhjYl9z
ZltvZmZzZXRdW2JdOwoKICAgICAgICBpZiAob2Zmc2V0ID4gMjQwKQogICAgICAgIHsKCiAgICAg
ICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGhjYl9zZltvZmZz
ZXRdWzBdOwp9CgoKc3RhdGljIGhjYiAqaGNiX3RhYmxlW10gPSB7CiAgICAwLCBoY2IxXzEsIGhj
YjJfMSwgMCwgaGNiNF8xLCAwLCBoY2I2XzEsIDAsIGhjYjhfMSwgMCwgaGNiMTBfMSwgaGNiMTFf
MQp9OwoKc3RhdGljIGhjYl8yX3F1YWQgKmhjYl8yX3F1YWRfdGFibGVbXSA9IHsKICAgIDAsIGhj
YjFfMiwgaGNiMl8yLCAwLCBoY2I0XzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAKfTsKCnN0YXRpYyBo
Y2JfMl9wYWlyICpoY2JfMl9wYWlyX3RhYmxlW10gPSB7CiAgICAwLCAwLCAwLCAwLCAwLCAwLCBo
Y2I2XzIsIDAsIGhjYjhfMiwgMCwgaGNiMTBfMiwgaGNiMTFfMgp9OwoKc3RhdGljIGhjYl9iaW5f
cGFpciAqaGNiX2Jpbl90YWJsZVtdID0gewogICAgMCwgMCwgMCwgMCwgMCwgaGNiNSwgMCwgaGNi
NywgMCwgaGNiOSwgMCwgMAp9OwoKc3RhdGljIHVpbnQ4X3QgaGNiTltdID0geyAwLCA1LCA1LCAw
LCA1LCAwLCA1LCAwLCA1LCAwLCA2LCA1IH07CgpzdGF0aWMgaW50IGhjYl8yX3F1YWRfdGFibGVf
c2l6ZVtdID0geyAwLCAxMTQsIDg2LCAwLCAxODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKc3Rh
dGljIGludCBoY2JfMl9wYWlyX3RhYmxlX3NpemVbXSA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMTI2
LCAwLCA4MywgMCwgMjEwLCAzNzMgfTsKc3RhdGljIGludCBoY2JfYmluX3RhYmxlX3NpemVbXSA9
IHsgMCwgMCwgMCwgMTYxLCAwLCAxNjEsIDAsIDEyNywgMCwgMzM3LCAwLCAwIH07CgpzdGF0aWMg
dWludDhfdCBodWZmbWFuX3NwZWN0cmFsX2RhdGEodWludDhfdCBjYiwgYml0ZmlsZSAqbGQsIGlu
dDE2X3QgKnNwKQp7CiAgICB1aW50MzJfdCBjdzsKICAgIHVpbnQxNl90IG9mZnNldCA9IDA7CiAg
ICB1aW50OF90IGV4dHJhX2JpdHM7CgogICAgc3dpdGNoIChjYikKICAgIHsKICAgIGNhc2UgMToK
ICAgIGNhc2UgMjoKICAgIGNhc2UgNDoKCiAgICAgICAgY3cgPSBmYWFkX3Nob3diaXRzKGxkLCBo
Y2JOW2NiXSk7CiAgICAgICAgb2Zmc2V0ID0gaGNiX3RhYmxlW2NiXVtjd10ub2Zmc2V0OwogICAg
ICAgIGV4dHJhX2JpdHMgPSBoY2JfdGFibGVbY2JdW2N3XS5leHRyYV9iaXRzOwoKICAgICAgICBp
ZiAoZXh0cmFfYml0cykKICAgICAgICB7CgogICAgICAgICAgICBmYWFkX2ZsdXNoYml0cyhsZCwg
aGNiTltjYl0pOwogICAgICAgICAgICBvZmZzZXQgKz0gKHVpbnQxNl90KWZhYWRfc2hvd2JpdHMo
bGQsIGV4dHJhX2JpdHMpOwogICAgICAgICAgICBmYWFkX2ZsdXNoYml0cyhsZCwgaGNiXzJfcXVh
ZF90YWJsZVtjYl1bb2Zmc2V0XS5iaXRzIC0gaGNiTltjYl0pOwogICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgIGZhYWRfZmx1c2hiaXRzKGxkLCBoY2JfMl9xdWFkX3RhYmxlW2NiXVtvZmZzZXRd
LmJpdHMpOwogICAgICAgIH0KCiAgICAgICAgaWYgKG9mZnNldCA+IGhjYl8yX3F1YWRfdGFibGVf
c2l6ZVtjYl0pCiAgICAgICAgewoKCiAgICAgICAgICAgIHJldHVybiAxMDsKICAgICAgICB9Cgog
ICAgICAgIHNwWzBdID0gaGNiXzJfcXVhZF90YWJsZVtjYl1bb2Zmc2V0XS54OwogICAgICAgIHNw
WzFdID0gaGNiXzJfcXVhZF90YWJsZVtjYl1bb2Zmc2V0XS55OwogICAgICAgIHNwWzJdID0gaGNi
XzJfcXVhZF90YWJsZVtjYl1bb2Zmc2V0XS52OwogICAgICAgIHNwWzNdID0gaGNiXzJfcXVhZF90
YWJsZVtjYl1bb2Zmc2V0XS53OwoKICAgICAgICByZXR1cm4gMDsKCiAgICBjYXNlIDY6CiAgICBj
YXNlIDg6CiAgICBjYXNlIDEwOgogICAgY2FzZSAxMToKCgogICAgY2FzZSAxNjogY2FzZSAxNzog
Y2FzZSAxODogY2FzZSAxOTogY2FzZSAyMDogY2FzZSAyMTogY2FzZSAyMjogY2FzZSAyMzoKICAg
IGNhc2UgMjQ6IGNhc2UgMjU6IGNhc2UgMjY6IGNhc2UgMjc6IGNhc2UgMjg6IGNhc2UgMjk6IGNh
c2UgMzA6IGNhc2UgMzE6CgoKICAgICAgICBpZiAoY2IgPj0gMTYpCiAgICAgICAgICAgIGNiID0g
MTE7CgogICAgICAgIGN3ID0gZmFhZF9zaG93Yml0cyhsZCwgaGNiTltjYl0pOwogICAgICAgIG9m
ZnNldCA9IGhjYl90YWJsZVtjYl1bY3ddLm9mZnNldDsKICAgICAgICBleHRyYV9iaXRzID0gaGNi
X3RhYmxlW2NiXVtjd10uZXh0cmFfYml0czsKCiAgICAgICAgaWYgKGV4dHJhX2JpdHMpCiAgICAg
ICAgewoKICAgICAgICAgICAgZmFhZF9mbHVzaGJpdHMobGQsIGhjYk5bY2JdKTsKICAgICAgICAg
ICAgb2Zmc2V0ICs9ICh1aW50MTZfdClmYWFkX3Nob3diaXRzKGxkLCBleHRyYV9iaXRzKTsKICAg
ICAgICAgICAgZmFhZF9mbHVzaGJpdHMobGQsIGhjYl8yX3BhaXJfdGFibGVbY2JdW29mZnNldF0u
Yml0cyAtIGhjYk5bY2JdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmYWFkX2ZsdXNo
Yml0cyhsZCwgaGNiXzJfcGFpcl90YWJsZVtjYl1bb2Zmc2V0XS5iaXRzKTsKICAgICAgICB9Cgog
ICAgICAgIGlmIChvZmZzZXQgPiBoY2JfMl9wYWlyX3RhYmxlX3NpemVbY2JdKQogICAgICAgIHsK
CgogICAgICAgICAgICByZXR1cm4gMTA7CiAgICAgICAgfQoKICAgICAgICBzcFswXSA9IGhjYl8y
X3BhaXJfdGFibGVbY2JdW29mZnNldF0ueDsKICAgICAgICBzcFsxXSA9IGhjYl8yX3BhaXJfdGFi
bGVbY2JdW29mZnNldF0ueTsKCiAgICAgICAgcmV0dXJuIDA7CgogICAgY2FzZSAzOgoKICAgICAg
ICB3aGlsZSAoIWhjYjNbb2Zmc2V0XS5pc19sZWFmKQogICAgICAgIHsKICAgICAgICAgICAgdWlu
dDhfdCBiID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICBv
ZmZzZXQgKz0gaGNiM1tvZmZzZXRdLmRhdGFbYl07CiAgICAgICAgfQoKICAgICAgICBpZiAob2Zm
c2V0ID4gaGNiX2Jpbl90YWJsZV9zaXplW2NiXSkKICAgICAgICB7CgoKICAgICAgICAgICAgcmV0
dXJuIDEwOwogICAgICAgIH0KCiAgICAgICAgc3BbMF0gPSBoY2IzW29mZnNldF0uZGF0YVswXTsK
ICAgICAgICBzcFsxXSA9IGhjYjNbb2Zmc2V0XS5kYXRhWzFdOwogICAgICAgIHNwWzJdID0gaGNi
M1tvZmZzZXRdLmRhdGFbMl07CiAgICAgICAgc3BbM10gPSBoY2IzW29mZnNldF0uZGF0YVszXTsK
CiAgICAgICAgcmV0dXJuIDA7CgogICAgY2FzZSA1OgogICAgY2FzZSA3OgogICAgY2FzZSA5OgoK
ICAgICAgICB3aGlsZSAoIWhjYl9iaW5fdGFibGVbY2JdW29mZnNldF0uaXNfbGVhZikKICAgICAg
ICB7CiAgICAgICAgICAgIHVpbnQ4X3QgYiA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICAgICAg
ICAgKTsKICAgICAgICAgICAgb2Zmc2V0ICs9IGhjYl9iaW5fdGFibGVbY2JdW29mZnNldF0uZGF0
YVtiXTsKICAgICAgICB9CgogICAgICAgIGlmIChvZmZzZXQgPiBoY2JfYmluX3RhYmxlX3NpemVb
Y2JdKQogICAgICAgIHsKCgogICAgICAgICAgICByZXR1cm4gMTA7CiAgICAgICAgfQoKICAgICAg
ICBzcFswXSA9IGhjYl9iaW5fdGFibGVbY2JdW29mZnNldF0uZGF0YVswXTsKICAgICAgICBzcFsx
XSA9IGhjYl9iaW5fdGFibGVbY2JdW29mZnNldF0uZGF0YVsxXTsKCiAgICAgICAgcmV0dXJuIDA7
CgogICAgZGVmYXVsdDoKCiAgICAgICAgcmV0dXJuIDExOwogICAgfQoKICAgIHJldHVybiAwOwp9
CgpzdGF0aWMgdm9pZCBodWZmbWFuX3NpZ25fYml0cyhiaXRmaWxlICpsZCwgaW50MTZfdCAqc3As
IHVpbnQ4X3QgbGVuKQp7CiAgICB1aW50OF90IGk7CgogICAgZm9yKGkgPSAwOyBpIDwgbGVuOyBp
KyspCiAgICB7CiAgICAgICAgaWYoc3BbaV0pCiAgICAgICAgewogICAgICAgICAgICBpZihmYWFk
X2dldDFiaXQobGQKICAgICAgICAgICAgICAgICkgJiAxKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICBzcFtpXSA9IC1zcFtpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoK
c3RhdGljIGludDMyX3QgaHVmZm1hbl9nZXRlc2NhcGUoYml0ZmlsZSAqbGQsIGludDE2X3Qgc3Ap
CnsKICAgIHVpbnQ4X3QgbmVnLCBpOwogICAgaW50MzJfdCBqLCBvZmY7CgogICAgaWYgKHNwIDwg
MCkgewogICAgICAgIGlmKHNwICE9IC0xNikKICAgICAgICAgICAgcmV0dXJuIHNwOwogICAgICAg
IG5lZyA9IDE7CiAgICB9IGVsc2UgewogICAgICAgIGlmKHNwICE9IDE2KQogICAgICAgICAgICBy
ZXR1cm4gc3A7CiAgICAgICAgbmVnID0gMDsKICAgIH0KCiAgICBmb3IgKGkgPSA0OyA7IGkrKykK
ICAgIHsKICAgICAgICBpZiAoZmFhZF9nZXQxYml0KGxkCiAgICAgICAgICAgICkgPT0gMCkKICAg
ICAgICB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KIyAyNjMgImh1ZmZtYW4u
aCIKICAgICAgICBvZmYgPSBmYWFkX2dldGJpdHMobGQsIGkKICAgICAgICAgICAgKTsKCgoKCiAg
ICBqID0gb2ZmICsgKDE8PGkpOwogICAgaWYgKG5lZykKICAgICAgICBqID0gLWo7CgogICAgcmV0
dXJuIGo7Cn0KIyAzNiAic3ludGF4LmMiIDIKCiMgMSAiZGF0YS5oIiAxCiMgMjkgImRhdGEuaCIK
ZXh0ZXJuIHVpbnQ4X3QgbnVtX3N3Yl8xMDI0X3dpbmRvd1tdOwoKZXh0ZXJuIHVpbnQ4X3QgbnVt
X3N3Yl81MTJfd2luZG93W107CgpleHRlcm4gdWludDhfdCBudW1fc3diXzEyOF93aW5kb3dbXTsK
ZXh0ZXJuIHVpbnQxNl90ICpzd2Jfb2Zmc2V0XzEwMjRfd2luZG93W107CgpleHRlcm4gdWludDE2
X3QgKnN3Yl9vZmZzZXRfNTEyX3dpbmRvd1tdOwoKZXh0ZXJuIHVpbnQxNl90ICpzd2Jfb2Zmc2V0
XzEyOF93aW5kb3dbXTsKZXh0ZXJuIHVpbnQ4X3QgcHJlZF9zZmJfbWF4W107CmV4dGVybiB1aW50
MzJfdCBzYW1wbGVfcmF0ZXNbXTsKIyAzOCAic3ludGF4LmMiIDIKIyAxICJwdWxzZS5oIiAxCiMg
MjkgInB1bHNlLmgiCnZvaWQgcHVsc2VfZGVjb2RlKGljX3N0cmVhbSAqaWNzLCBpbnQxNl90ICpz
cGVjX2NvZWYpOwojIDM5ICJzeW50YXguYyIgMgoKCgoKCgoKdWludDhfdCBHQVNwZWNpZmljQ29u
ZmlnKGJpdGZpbGUgKmxkLCB1aW50OF90ICpjaGFubmVsQ29uZmlndXJhdGlvbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQ4X3Qgb2JqZWN0X3R5cGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50OF90ICphYWNTZWN0aW9uRGF0YVJlc2lsaWVuY2VGbGFnLAogICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDhfdCAqYWFjU2NhbGVmYWN0b3JEYXRhUmVzaWxpZW5jZUZsYWcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphYWNTcGVjdHJhbERhdGFSZXNpbGllbmNl
RmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmZyYW1lTGVuZ3RoRmxhZykK
ewogICAgdWludDhfdCBkZXBlbmRzT25Db3JlQ29kZXIsIGV4dGVuc2lvbkZsYWc7CiAgICB1aW50
MTZfdCBjb3JlQ29kZXJEZWxheTsKICAgIHByb2dyYW1fY29uZmlnIHBjZTsKCgogICAgKmZyYW1l
TGVuZ3RoRmxhZyA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICk7CgogICAgZGVwZW5kc09uQ29y
ZUNvZGVyID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgKTsKICAgIGlmIChkZXBlbmRzT25Db3Jl
Q29kZXIgPT0gMSkKICAgIHsKICAgICAgICBjb3JlQ29kZXJEZWxheSA9ICh1aW50MTZfdClmYWFk
X2dldGJpdHMobGQsIDE0CiAgICAgICAgICAgICk7CiAgICB9CgogICAgZXh0ZW5zaW9uRmxhZyA9
IGZhYWRfZ2V0MWJpdChsZCApOwogICAgaWYgKCpjaGFubmVsQ29uZmlndXJhdGlvbiA9PSAwKQog
ICAgewogICAgICAgIHByb2dyYW1fY29uZmlnX2VsZW1lbnQoJnBjZSwgbGQpOwogICAgICAgICpj
aGFubmVsQ29uZmlndXJhdGlvbiA9IHBjZS5jaGFubmVsczsKCiAgICAgICAgaWYgKHBjZS5udW1f
dmFsaWRfY2NfZWxlbWVudHMpCiAgICAgICAgICAgIHJldHVybiAtMzsKICAgIH0KCiAgICBpZiAo
ZXh0ZW5zaW9uRmxhZyA9PSAxKQogICAgewoKICAgICAgICBpZiAob2JqZWN0X3R5cGUgPj0gMTcp
CiAgICAgICAgewogICAgICAgICAgICAqYWFjU2VjdGlvbkRhdGFSZXNpbGllbmNlRmxhZyA9IGZh
YWRfZ2V0MWJpdChsZAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgKmFhY1NjYWxlZmFj
dG9yRGF0YVJlc2lsaWVuY2VGbGFnID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgICAgICAgICAp
OwogICAgICAgICAgICAqYWFjU3BlY3RyYWxEYXRhUmVzaWxpZW5jZUZsYWcgPSBmYWFkX2dldDFi
aXQobGQKICAgICAgICAgICAgICAgICk7CgoKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7
Cn0KIyAxMDUgInN5bnRheC5jIgp1aW50OF90IHByb2dyYW1fY29uZmlnX2VsZW1lbnQocHJvZ3Jh
bV9jb25maWcgKnBjZSwgYml0ZmlsZSAqbGQpCnsKICAgIHVpbnQ4X3QgaTsKCiAgICBwY2UtPmNo
YW5uZWxzID0gMDsKCiAgICBwY2UtPmVsZW1lbnRfaW5zdGFuY2VfdGFnID0gKHVpbnQ4X3QpZmFh
ZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgKTsKCiAgICBwY2UtPm9iamVjdF90eXBlID0gKHVpbnQ4
X3QpZmFhZF9nZXRiaXRzKGxkLCAyCiAgICAgICAgKTsKICAgIHBjZS0+c2ZfaW5kZXggPSAodWlu
dDhfdClmYWFkX2dldGJpdHMobGQsIDQKICAgICAgICApOwogICAgcGNlLT5udW1fZnJvbnRfY2hh
bm5lbF9lbGVtZW50cyA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAgICk7CiAg
ICBwY2UtPm51bV9zaWRlX2NoYW5uZWxfZWxlbWVudHMgPSAodWludDhfdClmYWFkX2dldGJpdHMo
bGQsIDQKICAgICAgICApOwogICAgcGNlLT5udW1fYmFja19jaGFubmVsX2VsZW1lbnRzID0gKHVp
bnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgKTsKICAgIHBjZS0+bnVtX2xmZV9jaGFu
bmVsX2VsZW1lbnRzID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCAyCiAgICAgICAgKTsKICAg
IHBjZS0+bnVtX2Fzc29jX2RhdGFfZWxlbWVudHMgPSAodWludDhfdClmYWFkX2dldGJpdHMobGQs
IDMKICAgICAgICApOwogICAgcGNlLT5udW1fdmFsaWRfY2NfZWxlbWVudHMgPSAodWludDhfdClm
YWFkX2dldGJpdHMobGQsIDQKICAgICAgICApOwoKICAgIHBjZS0+bW9ub19taXhkb3duX3ByZXNl
bnQgPSBmYWFkX2dldDFiaXQobGQKICAgICAgICApOwogICAgaWYgKHBjZS0+bW9ub19taXhkb3du
X3ByZXNlbnQgPT0gMSkKICAgIHsKICAgICAgICBwY2UtPm1vbm9fbWl4ZG93bl9lbGVtZW50X251
bWJlciA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAgICAgICApOwogICAgfQoK
ICAgIHBjZS0+c3RlcmVvX21peGRvd25fcHJlc2VudCA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAg
ICk7CiAgICBpZiAocGNlLT5zdGVyZW9fbWl4ZG93bl9wcmVzZW50ID09IDEpCiAgICB7CiAgICAg
ICAgcGNlLT5zdGVyZW9fbWl4ZG93bl9lbGVtZW50X251bWJlciA9ICh1aW50OF90KWZhYWRfZ2V0
Yml0cyhsZCwgNAogICAgICAgICAgICApOwogICAgfQoKICAgIHBjZS0+bWF0cml4X21peGRvd25f
aWR4X3ByZXNlbnQgPSBmYWFkX2dldDFiaXQobGQKICAgICAgICApOwogICAgaWYgKHBjZS0+bWF0
cml4X21peGRvd25faWR4X3ByZXNlbnQgPT0gMSkKICAgIHsKICAgICAgICBwY2UtPm1hdHJpeF9t
aXhkb3duX2lkeCA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgMgogICAgICAgICAgICApOwog
ICAgICAgIHBjZS0+cHNldWRvX3N1cnJvdW5kX2VuYWJsZSA9IGZhYWRfZ2V0MWJpdChsZAogICAg
ICAgICAgICApOwogICAgfQoKICAgIGZvciAoaSA9IDA7IGkgPCBwY2UtPm51bV9mcm9udF9jaGFu
bmVsX2VsZW1lbnRzOyBpKyspCiAgICB7CiAgICAgICAgaWYgKChwY2UtPmZyb250X2VsZW1lbnRf
aXNfY3BlW2ldID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgICAgICkpICYgMSkKICAgICAgICB7
CiAgICAgICAgICAgIHBjZS0+Y2hhbm5lbHMgKz0gMjsKICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICBwY2UtPmNoYW5uZWxzKys7CiAgICAgICAgfQogICAgICAgIHBjZS0+ZnJvbnRfZWxlbWVu
dF90YWdfc2VsZWN0W2ldID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgICAg
ICk7CiAgICB9CgogICAgZm9yIChpID0gMDsgaSA8IHBjZS0+bnVtX3NpZGVfY2hhbm5lbF9lbGVt
ZW50czsgaSsrKQogICAgewogICAgICAgIGlmICgocGNlLT5zaWRlX2VsZW1lbnRfaXNfY3BlW2ld
ID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgICAgICkpICYgMSkKICAgICAgICB7CiAgICAgICAg
ICAgIHBjZS0+Y2hhbm5lbHMgKz0gMjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwY2Ut
PmNoYW5uZWxzKys7CiAgICAgICAgfQogICAgICAgIHBjZS0+c2lkZV9lbGVtZW50X3RhZ19zZWxl
Y3RbaV0gPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDQKICAgICAgICAgICAgKTsKICAgIH0K
CiAgICBmb3IgKGkgPSAwOyBpIDwgcGNlLT5udW1fYmFja19jaGFubmVsX2VsZW1lbnRzOyBpKysp
CiAgICB7CiAgICAgICAgaWYgKChwY2UtPmJhY2tfZWxlbWVudF9pc19jcGVbaV0gPSBmYWFkX2dl
dDFiaXQobGQKICAgICAgICAgICAgKSkgJiAxKQogICAgICAgIHsKICAgICAgICAgICAgcGNlLT5j
aGFubmVscyArPSAyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBjZS0+Y2hhbm5lbHMr
KzsKICAgICAgICB9CiAgICAgICAgcGNlLT5iYWNrX2VsZW1lbnRfdGFnX3NlbGVjdFtpXSA9ICh1
aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAgICAgICApOwogICAgfQoKICAgIGZvciAo
aSA9IDA7IGkgPCBwY2UtPm51bV9sZmVfY2hhbm5lbF9lbGVtZW50czsgaSsrKQogICAgewogICAg
ICAgIHBjZS0+Y2hhbm5lbHMrKzsKICAgICAgICBwY2UtPmxmZV9lbGVtZW50X3RhZ19zZWxlY3Rb
aV0gPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDQKICAgICAgICAgICAgKTsKICAgIH0KCiAg
ICBmb3IgKGkgPSAwOyBpIDwgcGNlLT5udW1fYXNzb2NfZGF0YV9lbGVtZW50czsgaSsrKQogICAg
ICAgIHBjZS0+YXNzb2NfZGF0YV9lbGVtZW50X3RhZ19zZWxlY3RbaV0gPSAodWludDhfdClmYWFk
X2dldGJpdHMobGQsIDQKICAgICAgICApOwoKICAgIGZvciAoaSA9IDA7IGkgPCBwY2UtPm51bV92
YWxpZF9jY19lbGVtZW50czsgaSsrKQogICAgewoKICAgICAgICBwY2UtPmNoYW5uZWxzICs9IDI7
CgogICAgICAgIHBjZS0+Y2NfZWxlbWVudF9pc19pbmRfc3dbaV0gPSBmYWFkX2dldDFiaXQobGQK
ICAgICAgICAgICAgKTsKICAgICAgICBwY2UtPnZhbGlkX2NjX2VsZW1lbnRfdGFnX3NlbGVjdFtp
XSA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAgICAgICApOwogICAgfQoKICAg
IGZhYWRfYnl0ZV9hbGlnbihsZCk7CgogICAgcGNlLT5jb21tZW50X2ZpZWxkX2J5dGVzID0gKHVp
bnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCA4CiAgICAgICAgKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwg
cGNlLT5jb21tZW50X2ZpZWxkX2J5dGVzOyBpKyspCiAgICB7CiAgICAgICAgcGNlLT5jb21tZW50
X2ZpZWxkX2RhdGFbaV0gPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDgKICAgICAgICAgICAg
KTsKICAgIH0KICAgIHBjZS0+Y29tbWVudF9maWVsZF9kYXRhW2ldID0gMDsKCiAgICByZXR1cm4g
MDsKfQoKCgp1aW50OF90IHNpbmdsZV9sZmVfY2hhbm5lbF9lbGVtZW50KGVsZW1lbnQgKnNjZSwg
Yml0ZmlsZSAqbGQsIGludDE2X3QgKnNwZWNfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50OF90IHNmX2luZGV4LCB1aW50OF90IG9iamVjdF90eXBlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGZyYW1lX2xlbgoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsdWludDhfdCBhYWNTZWN0aW9uRGF0YVJlc2lsaWVu
Y2VGbGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWFjU2Nh
bGVmYWN0b3JEYXRhUmVzaWxpZW5jZUZsYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDhfdCBhYWNTcGVjdHJhbERhdGFSZXNpbGllbmNlRmxhZwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApCnsKICAgIGljX3N0cmVhbSAqaWNzID0gJihzY2UtPmlj
czEpOwoKCgoKICAgIHNjZS0+ZWxlbWVudF9pbnN0YW5jZV90YWcgPSAodWludDhfdClmYWFkX2dl
dGJpdHMobGQsIDQKICAgICAgICApOwoKICAgIHJldHVybiBpbmRpdmlkdWFsX2NoYW5uZWxfc3Ry
ZWFtKHNjZSwgbGQsIGljcywgMCwgc3BlY19kYXRhLCBzZl9pbmRleCwKICAgICAgICBvYmplY3Rf
dHlwZSwgZnJhbWVfbGVuCgogICAgICAgICxhYWNTZWN0aW9uRGF0YVJlc2lsaWVuY2VGbGFnLAog
ICAgICAgIGFhY1NjYWxlZmFjdG9yRGF0YVJlc2lsaWVuY2VGbGFnLAogICAgICAgIGFhY1NwZWN0
cmFsRGF0YVJlc2lsaWVuY2VGbGFnCgogICAgICAgICk7Cn0KCgp1aW50OF90IGNoYW5uZWxfcGFp
cl9lbGVtZW50KGVsZW1lbnQgKmNwZSwgYml0ZmlsZSAqbGQsIGludDE2X3QgKnNwZWNfZGF0YTEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCAqc3BlY19kYXRhMiwgdWludDhf
dCBzZl9pbmRleCwgdWludDhfdCBvYmplY3RfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MTZfdCBmcmFtZV9sZW4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLHVp
bnQ4X3QgYWFjU2VjdGlvbkRhdGFSZXNpbGllbmNlRmxhZywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50OF90IGFhY1NjYWxlZmFjdG9yRGF0YVJlc2lsaWVuY2VGbGFnLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWFjU3BlY3RyYWxEYXRhUmVzaWxpZW5jZUZs
YWcKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQp7CiAgICB1aW50OF90IHJlc3VsdDsK
ICAgIGljX3N0cmVhbSAqaWNzMSA9ICYoY3BlLT5pY3MxKTsKICAgIGljX3N0cmVhbSAqaWNzMiA9
ICYoY3BlLT5pY3MyKTsKCgoKCiAgICBjcGUtPmVsZW1lbnRfaW5zdGFuY2VfdGFnID0gKHVpbnQ4
X3QpZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgKTsKCiAgICBpZiAoKGNwZS0+Y29tbW9uX3dp
bmRvdyA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICkpICYgMSkKICAgIHsKCiAgICAgICAgaWYg
KChyZXN1bHQgPSBpY3NfaW5mbyhpY3MxLCBsZCwgY3BlLT5jb21tb25fd2luZG93LCBzZl9pbmRl
eCwKICAgICAgICAgICAgb2JqZWN0X3R5cGUsIGZyYW1lX2xlbikpID4gMCkKICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKCiAgICAgICAgaWNzMS0+bXNfbWFza19wcmVzZW50ID0gKHVpbnQ4X3Qp
ZmFhZF9nZXRiaXRzKGxkLCAyCiAgICAgICAgICAgICk7CiAgICAgICAgaWYgKGljczEtPm1zX21h
c2tfcHJlc2VudCA9PSAxKQogICAgICAgIHsKICAgICAgICAgICAgdWludDhfdCBnLCBzZmI7CiAg
ICAgICAgICAgIGZvciAoZyA9IDA7IGcgPCBpY3MxLT5udW1fd2luZG93X2dyb3VwczsgZysrKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKHNmYiA9IDA7IHNmYiA8IGljczEtPm1h
eF9zZmI7IHNmYisrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljczEt
Pm1zX3VzZWRbZ11bc2ZiXSA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICAgICAgICAgICAgICAg
ICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBt
ZW1jcHkoaWNzMiwgaWNzMSwgc2l6ZW9mKGljX3N0cmVhbSkpOwogICAgfSBlbHNlIHsKICAgICAg
ICBpY3MxLT5tc19tYXNrX3ByZXNlbnQgPSAwOwogICAgfQoKICAgIGlmICgocmVzdWx0ID0gaW5k
aXZpZHVhbF9jaGFubmVsX3N0cmVhbShjcGUsIGxkLCBpY3MxLCAwLCBzcGVjX2RhdGExLAogICAg
ICAgIHNmX2luZGV4LCBvYmplY3RfdHlwZSwgZnJhbWVfbGVuCgogICAgICAgICxhYWNTZWN0aW9u
RGF0YVJlc2lsaWVuY2VGbGFnLAogICAgICAgIGFhY1NjYWxlZmFjdG9yRGF0YVJlc2lsaWVuY2VG
bGFnLAogICAgICAgIGFhY1NwZWN0cmFsRGF0YVJlc2lsaWVuY2VGbGFnCgogICAgICAgICkpID4g
MCkKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgaWYgKChyZXN1bHQgPSBpbmRpdmlkdWFsX2No
YW5uZWxfc3RyZWFtKGNwZSwgbGQsIGljczIsIDAsIHNwZWNfZGF0YTIsCiAgICAgICAgc2ZfaW5k
ZXgsIG9iamVjdF90eXBlLCBmcmFtZV9sZW4KCiAgICAgICAgLGFhY1NlY3Rpb25EYXRhUmVzaWxp
ZW5jZUZsYWcsCiAgICAgICAgYWFjU2NhbGVmYWN0b3JEYXRhUmVzaWxpZW5jZUZsYWcsCiAgICAg
ICAgYWFjU3BlY3RyYWxEYXRhUmVzaWxpZW5jZUZsYWcKCiAgICAgICAgKSkgPiAwKQogICAgICAg
IHJldHVybiByZXN1bHQ7CgogICAgcmV0dXJuIDA7Cn0KCgpzdGF0aWMgdWludDhfdCBpY3NfaW5m
byhpY19zdHJlYW0gKmljcywgYml0ZmlsZSAqbGQsIHVpbnQ4X3QgY29tbW9uX3dpbmRvdywKICAg
ICAgICAgICAgICAgICAgICB1aW50OF90IHNmX2luZGV4LCB1aW50OF90IG9iamVjdF90eXBlLCB1
aW50MTZfdCBmcmFtZV9sZW4pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZh
YWRfZ2V0MWJpdChsZAogICAgICAgICk7CiAgICBpY3MtPndpbmRvd19zZXF1ZW5jZSA9ICh1aW50
OF90KWZhYWRfZ2V0Yml0cyhsZCwgMgogICAgICAgICk7CiAgICBpY3MtPndpbmRvd19zaGFwZSA9
IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICk7CgogICAgaWYgKGljcy0+d2luZG93X3NlcXVlbmNl
ID09IDB4MikKICAgIHsKICAgICAgICBpY3MtPm1heF9zZmIgPSAodWludDhfdClmYWFkX2dldGJp
dHMobGQsIDQKICAgICAgICAgICAgKTsKICAgICAgICBpY3MtPnNjYWxlX2ZhY3Rvcl9ncm91cGlu
ZyA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNwogICAgICAgICAgICApOwogICAgfSBlbHNl
IHsKICAgICAgICBpY3MtPm1heF9zZmIgPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDYKICAg
ICAgICAgICAgKTsKCiAgICAgICAgaWYgKChpY3MtPnByZWRpY3Rvcl9kYXRhX3ByZXNlbnQgPSBm
YWFkX2dldDFiaXQobGQKICAgICAgICAgICAgKSkgJiAxKQogICAgICAgIHsKICAgICAgICAgICAg
aWYgKG9iamVjdF90eXBlID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHVpbnQ4
X3Qgc2ZiOwoKICAgICAgICAgICAgICAgIGljcy0+cHJlZC5saW1pdCA9ICgoKGljcy0+bWF4X3Nm
YikgPCAocHJlZF9zZmJfbWF4W3NmX2luZGV4XSkpID8gKGljcy0+bWF4X3NmYikgOiAocHJlZF9z
ZmJfbWF4W3NmX2luZGV4XSkpOwoKICAgICAgICAgICAgICAgIGlmICgoaWNzLT5wcmVkLnByZWRp
Y3Rvcl9yZXNldCA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICAgICAgICAgICAgICkpICYgMSkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY3MtPnByZWQucHJlZGljdG9y
X3Jlc2V0X2dyb3VwX251bWJlciA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNQogICAgICAg
ICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZv
ciAoc2ZiID0gMDsgc2ZiIDwgaWNzLT5wcmVkLmxpbWl0OyBzZmIrKykKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICBpY3MtPnByZWQucHJlZGljdGlvbl91c2VkW3NmYl0gPSBm
YWFkX2dldDFiaXQobGQKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAo
KGljcy0+bHRwLmRhdGFfcHJlc2VudCA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICAgICAgICAg
ICAgICkpICYgMSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBsdHBfZGF0
YShpY3MsICYoaWNzLT5sdHApLCBsZCwgb2JqZWN0X3R5cGUpOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgaWYgKGNvbW1vbl93aW5kb3cpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgaWYgKChpY3MtPmx0cDIuZGF0YV9wcmVzZW50ID0gZmFhZF9nZXQxYml0
KGxkCiAgICAgICAgICAgICAgICAgICAgICAgICkpICYgMSkKICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGx0cF9kYXRhKGljcywgJihpY3MtPmx0cDIpLCBsZCwg
b2JqZWN0X3R5cGUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfQoKICAgICAgICB9CiAgICB9CgoKICAgIHJldHVybiB3aW5kb3dfZ3JvdXBpbmdf
aW5mbyhpY3MsIHNmX2luZGV4LCBvYmplY3RfdHlwZSwgZnJhbWVfbGVuKTsKfQoKCnN0YXRpYyB2
b2lkIHB1bHNlX2RhdGEocHVsc2VfaW5mbyAqcHVsLCBiaXRmaWxlICpsZCkKewogICAgdWludDhf
dCBpOwoKICAgIHB1bC0+bnVtYmVyX3B1bHNlID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCAy
CiAgICAgICAgKTsKICAgIHB1bC0+cHVsc2Vfc3RhcnRfc2ZiID0gKHVpbnQ4X3QpZmFhZF9nZXRi
aXRzKGxkLCA2CiAgICAgICAgKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgcHVsLT5udW1iZXJfcHVs
c2UrMTsgaSsrKSB7CiAgICAgICAgcHVsLT5wdWxzZV9vZmZzZXRbaV0gPSAodWludDhfdClmYWFk
X2dldGJpdHMobGQsIDUKICAgICAgICAgICAgKTsKICAgICAgICBwdWwtPnB1bHNlX2FtcFtpXSA9
ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAgICAgICApOwogICAgfQp9CgoKdWlu
dDE2X3QgZGF0YV9zdHJlYW1fZWxlbWVudChiaXRmaWxlICpsZCkKewogICAgdWludDhfdCBieXRl
X2FsaWduZWQ7CiAgICB1aW50MTZfdCBpLCBjb3VudDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAgICk7CiAgICBieXRlX2FsaWduZWQg
PSBmYWFkX2dldDFiaXQobGQKICAgICAgICApOwogICAgY291bnQgPSBmYWFkX2dldGJpdHMobGQs
IDgKICAgICAgICApOwogICAgaWYgKGNvdW50ID09IDI1NSkKICAgIHsKICAgICAgICBjb3VudCAr
PSBmYWFkX2dldGJpdHMobGQsIDgKICAgICAgICAgICAgKTsKICAgIH0KICAgIGlmIChieXRlX2Fs
aWduZWQpCiAgICAgICAgZmFhZF9ieXRlX2FsaWduKGxkKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKICAgIHsKICAgICAgICBmYWFkX2dldGJpdHMobGQsIDgKICAgICAgICAgICAg
KTsKICAgIH0KCiAgICByZXR1cm4gY291bnQ7Cn0KCgp1aW50OF90IGZpbGxfZWxlbWVudChiaXRm
aWxlICpsZCwgZHJjX2luZm8gKmRyYwoKCgogICAgICAgICAgICAgICAgICAgICApCnsKICAgIHVp
bnQxNl90IGNvdW50OwoKCgoKCiAgICBjb3VudCA9ICh1aW50MTZfdClmYWFkX2dldGJpdHMobGQs
IDQKICAgICAgICApOwogICAgaWYgKGNvdW50ID09IDE1KQogICAgewogICAgICAgIGNvdW50ICs9
ICh1aW50MTZfdClmYWFkX2dldGJpdHMobGQsIDgKICAgICAgICAgICAgKSAtIDE7CiAgICB9CiMg
NDk5ICJzeW50YXguYyIKICAgICAgICB3aGlsZSAoY291bnQgPiAwKQogICAgICAgIHsKICAgICAg
ICAgICAgY291bnQgLT0gZXh0ZW5zaW9uX3BheWxvYWQobGQsIGRyYywgY291bnQpOwogICAgICAg
IH0KCgoKCiAgICByZXR1cm4gMDsKfQoKCnN0YXRpYyB2b2lkIGdhaW5fY29udHJvbF9kYXRhKGJp
dGZpbGUgKmxkLCBpY19zdHJlYW0gKmljcykKewogICAgdWludDhfdCBiZCwgd2QsIGFkOwogICAg
dWludDhfdCBhZGp1c3RfbnVtWzRdWzhdOwogICAgdWludDhfdCBhbGV2Y29kZVs0XVs4XVs4XTsK
ICAgIHVpbnQ4X3QgYWxvY2NvZGVbNF1bOF1bOF07CgogICAgdWludDhfdCBtYXhfYmFuZCA9ICh1
aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgMgogICAgICAgICk7CgogICAgaWYgKGljcy0+d2luZG93
X3NlcXVlbmNlID09IDB4MCkKICAgIHsKICAgICAgICBmb3IgKGJkID0gMTsgYmQgPD0gbWF4X2Jh
bmQ7IGJkKyspCiAgICAgICAgewogICAgICAgICAgICBmb3IgKHdkPTA7IHdkPDE7IHdkKyspCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFkanVzdF9udW1bYmRdW3dkXSA9ICh1aW50OF90
KWZhYWRfZ2V0Yml0cyhsZCwgMwogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAg
ICAgZm9yIChhZCA9IDA7IGFkIDwgYWRqdXN0X251bVtiZF1bd2RdOyBhZCsrKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgIGFsZXZjb2RlW2JkXVt3ZF1bYWRdID0gKHVpbnQ4
X3QpZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAg
ICAgICAgICAgICAgYWxvY2NvZGVbYmRdW3dkXVthZF0gPSAodWludDhfdClmYWFkX2dldGJpdHMo
bGQsIDUKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoaWNzLT53aW5kb3dfc2VxdWVuY2UgPT0g
MHgxKSB7CiAgICAgICAgZm9yIChiZCA9IDE7IGJkIDw9IG1heF9iYW5kOyBiZCsrKQogICAgICAg
IHsKICAgICAgICAgICAgZm9yICh3ZCA9IDA7IHdkIDwgMjsgd2QrKykKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgYWRqdXN0X251bVtiZF1bd2RdID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRz
KGxkLCAzCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBmb3IgKGFkID0g
MDsgYWQgPCBhZGp1c3RfbnVtW2JkXVt3ZF07IGFkKyspCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgYWxldmNvZGVbYmRdW3dkXVthZF0gPSAodWludDhfdClmYWFkX2dldGJp
dHMobGQsIDQKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBp
ZiAod2QgPT0gMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGFsb2Njb2RlW2JkXVt3ZF1bYWRdID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGFsb2Njb2RlW2JkXVt3ZF1bYWRdID0gKHVpbnQ4X3QpZmFh
ZF9nZXRiaXRzKGxkLCAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAg
IH0gZWxzZSBpZiAoaWNzLT53aW5kb3dfc2VxdWVuY2UgPT0gMHgyKSB7CiAgICAgICAgZm9yIChi
ZCA9IDE7IGJkIDw9IG1heF9iYW5kOyBiZCsrKQogICAgICAgIHsKICAgICAgICAgICAgZm9yKHdk
PTA7IHdkPDg7IHdkKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFkanVzdF9udW1b
YmRdW3dkXSA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgMwogICAgICAgICAgICAgICAgICAg
ICk7CgogICAgICAgICAgICAgICAgZm9yIChhZCA9IDA7IGFkIDwgYWRqdXN0X251bVtiZF1bd2Rd
OyBhZCsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGFsZXZjb2RlW2Jk
XVt3ZF1bYWRdID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgICAgICAgICAg
ICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgYWxvY2NvZGVbYmRdW3dkXVthZF0gPSAodWlu
dDhfdClmYWFkX2dldGJpdHMobGQsIDIKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoaWNzLT53
aW5kb3dfc2VxdWVuY2UgPT0gMHgzKSB7CiAgICAgICAgZm9yIChiZCA9IDE7IGJkIDw9IG1heF9i
YW5kOyBiZCsrKQogICAgICAgIHsKICAgICAgICAgICAgZm9yICh3ZCA9IDA7IHdkIDwgMjsgd2Qr
KykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYWRqdXN0X251bVtiZF1bd2RdID0gKHVp
bnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCAzCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAg
ICAgICAgICBmb3IgKGFkID0gMDsgYWQgPCBhZGp1c3RfbnVtW2JkXVt3ZF07IGFkKyspCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgYWxldmNvZGVbYmRdW3dkXVthZF0gPSAo
dWludDhfdClmYWFkX2dldGJpdHMobGQsIDQKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAg
ICAgICAgICAgICAgICAgICAgaWYgKHdkID09IDApCiAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgICBhbG9jY29kZVtiZF1bd2RdW2FkXSA9ICh1aW50OF90KWZhYWRf
Z2V0Yml0cyhsZCwgNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBhbG9jY29kZVtiZF1bd2Rd
W2FkXSA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICB9Cn0KCgpzdGF0aWMgdWludDhfdCBpbmRpdmlkdWFsX2NoYW5u
ZWxfc3RyZWFtKGVsZW1lbnQgKmVsZSwgYml0ZmlsZSAqbGQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpY19zdHJlYW0gKmljcywgdWludDhfdCBzY2FsX2ZsYWcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90ICpzcGVjX2RhdGEsIHVpbnQ4
X3Qgc2ZfaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90
IG9iamVjdF90eXBlLCB1aW50MTZfdCBmcmFtZV9sZW4KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsdWludDhfdCBhYWNTZWN0aW9uRGF0YVJlc2lsaWVuY2VGbGFnLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhYWNTY2FsZWZhY3RvckRh
dGFSZXNpbGllbmNlRmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQ4X3QgYWFjU3BlY3RyYWxEYXRhUmVzaWxpZW5jZUZsYWcKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApCnsKICAgIHVpbnQ4X3QgcmVzdWx0OwoKICAgIGljcy0+Z2xvYmFs
X2dhaW4gPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDgKICAgICAgICApOwoKICAgIGlmICgh
ZWxlLT5jb21tb25fd2luZG93ICYmICFzY2FsX2ZsYWcpCiAgICB7CiAgICAgICAgaWYgKChyZXN1
bHQgPSBpY3NfaW5mbyhpY3MsIGxkLCBlbGUtPmNvbW1vbl93aW5kb3csIHNmX2luZGV4LAogICAg
ICAgICAgICBvYmplY3RfdHlwZSwgZnJhbWVfbGVuKSkgPiAwKQogICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgfQogICAgc2VjdGlvbl9kYXRhKGljcywgbGQKCiAgICAgICAgLGFhY1NlY3Rp
b25EYXRhUmVzaWxpZW5jZUZsYWcKCiAgICAgICAgKTsKICAgIGlmICgocmVzdWx0ID0gc2NhbGVf
ZmFjdG9yX2RhdGEoaWNzLCBsZAoKICAgICAgICAsYWFjU2NhbGVmYWN0b3JEYXRhUmVzaWxpZW5j
ZUZsYWcKCiAgICAgICAgKSkgPiAwKQogICAgICAgIHJldHVybiByZXN1bHQ7CgogICAgaWYgKCFz
Y2FsX2ZsYWcpCiAgICB7CgoKCgoKCiAgICAgICAgaWYgKChpY3MtPnB1bHNlX2RhdGFfcHJlc2Vu
dCA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICAgICApKSAmIDEpCiAgICAgICAgewogICAgICAg
ICAgICBwdWxzZV9kYXRhKCYoaWNzLT5wdWwpLCBsZCk7CiAgICAgICAgfQoKCiAgICAgICAgaWYg
KChpY3MtPnRuc19kYXRhX3ByZXNlbnQgPSBmYWFkX2dldDFiaXQobGQKICAgICAgICAgICAgKSkg
JiAxKQogICAgICAgIHsKCgogICAgICAgICAgICBpZiAoKG9iamVjdF90eXBlICE9IDE3KSAmJiAo
b2JqZWN0X3R5cGUgIT0gMTkpCgoKCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAg
dG5zX2RhdGEoaWNzLCAmKGljcy0+dG5zKSwgbGQpOwogICAgICAgIH0KCgogICAgICAgIGlmICgo
aWNzLT5nYWluX2NvbnRyb2xfZGF0YV9wcmVzZW50ID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAg
ICAgICkpICYgMSkKICAgICAgICB7CgoKCiAgICAgICAgICAgIGdhaW5fY29udHJvbF9kYXRhKGxk
LCBpY3MpOwoKICAgICAgICB9CiAgICB9CgoKICAgIGlmICghYWFjU3BlY3RyYWxEYXRhUmVzaWxp
ZW5jZUZsYWcpCiAgICB7CgoKICAgICAgICBpZiAoIChvYmplY3RfdHlwZSA9PSAxNykgfHwgKG9i
amVjdF90eXBlID09IDE5KQoKCgogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBp
ZiAoaWNzLT50bnNfZGF0YV9wcmVzZW50KQogICAgICAgICAgICAgICAgdG5zX2RhdGEoaWNzLCAm
KGljcy0+dG5zKSwgbGQpOwogICAgICAgIH0KCgoKICAgICAgICBpZiAoKHJlc3VsdCA9IHNwZWN0
cmFsX2RhdGEoaWNzLCBsZCwgc3BlY19kYXRhLCBmcmFtZV9sZW4pKSA+IDApCiAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CgogICAgfSBlbHNlIHsKICAgICAgICBpY3MtPmxlbmd0aF9vZl9yZW9y
ZGVyZWRfc3BlY3RyYWxfZGF0YSA9ICh1aW50MTZfdClmYWFkX2dldGJpdHMobGQsIDE0CiAgICAg
ICAgICAgICk7CgogICAgICAgIGljcy0+bGVuZ3RoX29mX2xvbmdlc3RfY29kZXdvcmQgPSAodWlu
dDhfdClmYWFkX2dldGJpdHMobGQsIDYKICAgICAgICAgICAgKTsKICAgICAgICBpZiAoaWNzLT5s
ZW5ndGhfb2ZfbG9uZ2VzdF9jb2Rld29yZCA+PSA0OSkKICAgICAgICAgICAgaWNzLT5sZW5ndGhf
b2ZfbG9uZ2VzdF9jb2Rld29yZCA9IDQ5OwoKCgoKICAgICAgICBpZiAoaWNzLT50bnNfZGF0YV9w
cmVzZW50KQogICAgICAgICAgICB0bnNfZGF0YShpY3MsICYoaWNzLT50bnMpLCBsZCk7CgoKICAg
ICAgICBpZiAoKHJlc3VsdCA9IHJlb3JkZXJlZF9zcGVjdHJhbF9kYXRhKGljcywgbGQsIHNwZWNf
ZGF0YSwgZnJhbWVfbGVuLAogICAgICAgICAgICBhYWNTZWN0aW9uRGF0YVJlc2lsaWVuY2VGbGFn
KSkgPiAwKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAg
ICB9CgoKCiAgICBpZiAoaWNzLT5wdWxzZV9kYXRhX3ByZXNlbnQpCiAgICB7CiAgICAgICAgaWYg
KGljcy0+d2luZG93X3NlcXVlbmNlICE9IDB4MikKICAgICAgICAgICAgcHVsc2VfZGVjb2RlKGlj
cywgc3BlY19kYXRhKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAyOwogICAgfQoK
ICAgIHJldHVybiAwOwp9CgoKc3RhdGljIHZvaWQgc2VjdGlvbl9kYXRhKGljX3N0cmVhbSAqaWNz
LCBiaXRmaWxlICpsZAoKICAgICAgICAgICAgICAgICAgICAgICAgICx1aW50OF90IGFhY1NlY3Rp
b25EYXRhUmVzaWxpZW5jZUZsYWcKCiAgICAgICAgICAgICAgICAgICAgICAgICApCnsKICAgIHVp
bnQ4X3QgZzsKICAgIHVpbnQ4X3Qgc2VjdF9lc2NfdmFsLCBzZWN0X2JpdHM7CgogICAgaWYgKGlj
cy0+d2luZG93X3NlcXVlbmNlID09IDB4MikKICAgICAgICBzZWN0X2JpdHMgPSAzOwogICAgZWxz
ZQogICAgICAgIHNlY3RfYml0cyA9IDU7CiAgICBzZWN0X2VzY192YWwgPSAoMTw8c2VjdF9iaXRz
KSAtIDE7CgogICAgZm9yIChnID0gMDsgZyA8IGljcy0+bnVtX3dpbmRvd19ncm91cHM7IGcrKykK
ICAgIHsKICAgICAgICB1aW50MTZfdCBrID0gMDsKICAgICAgICB1aW50OF90IGkgPSAwOwoKICAg
ICAgICB3aGlsZSAoayA8IGljcy0+bWF4X3NmYikKICAgICAgICB7CiAgICAgICAgICAgIHVpbnQ4
X3Qgc2ZiOwogICAgICAgICAgICB1aW50OF90IHNlY3RfbGVuX2luY3I7CiAgICAgICAgICAgIHVp
bnQxNl90IHNlY3RfbGVuID0gMDsKICAgICAgICAgICAgdWludDhfdCBzZWN0X2NiX2JpdHMgPSA0
OwoKCiAgICAgICAgICAgIGlmIChhYWNTZWN0aW9uRGF0YVJlc2lsaWVuY2VGbGFnKQogICAgICAg
ICAgICAgICAgc2VjdF9jYl9iaXRzID0gNTsKCgogICAgICAgICAgICBpY3MtPnNlY3RfY2JbZ11b
aV0gPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIHNlY3RfY2JfYml0cwogICAgICAgICAgICAg
ICAgKTsKCgogICAgICAgICAgICBpZiAoIWFhY1NlY3Rpb25EYXRhUmVzaWxpZW5jZUZsYWcgfHwK
ICAgICAgICAgICAgICAgIChpY3MtPnNlY3RfY2JbZ11baV0gPCAxMSkgfHwKICAgICAgICAgICAg
ICAgIChpY3MtPnNlY3RfY2JbZ11baV0gPiAxMSAmJiBpY3MtPnNlY3RfY2JbZ11baV0gPCAxNikp
CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICB3aGlsZSAoKHNlY3RfbGVuX2luY3IgPSAo
dWludDhfdClmYWFkX2dldGJpdHMobGQsIHNlY3RfYml0cwogICAgICAgICAgICAgICAgICAgICkp
ID09IHNlY3RfZXNjX3ZhbCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBz
ZWN0X2xlbiArPSBzZWN0X2VzY192YWw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgc2VjdF9sZW5faW5jciA9IDE7CiAgICAgICAgICAgIH0K
CgogICAgICAgICAgICBzZWN0X2xlbiArPSBzZWN0X2xlbl9pbmNyOwoKICAgICAgICAgICAgaWNz
LT5zZWN0X3N0YXJ0W2ddW2ldID0gazsKICAgICAgICAgICAgaWNzLT5zZWN0X2VuZFtnXVtpXSA9
IGsgKyBzZWN0X2xlbjsKCiAgICAgICAgICAgIGZvciAoc2ZiID0gazsgc2ZiIDwgayArIHNlY3Rf
bGVuOyBzZmIrKykKICAgICAgICAgICAgICAgIGljcy0+c2ZiX2NiW2ddW3NmYl0gPSBpY3MtPnNl
Y3RfY2JbZ11baV07CgogICAgICAgICAgICBrICs9IHNlY3RfbGVuOwogICAgICAgICAgICBpKys7
CiAgICAgICAgfQogICAgICAgIGljcy0+bnVtX3NlY1tnXSA9IGk7CiAgICB9Cn0KIyA4MTcgInN5
bnRheC5jIgpzdGF0aWMgdWludDhfdCBkZWNvZGVfc2NhbGVfZmFjdG9ycyhpY19zdHJlYW0gKmlj
cywgYml0ZmlsZSAqbGQpCnsKICAgIHVpbnQ4X3QgZywgc2ZiOwogICAgaW50OF90IHQ7CiAgICBp
bnQ4X3Qgbm9pc2VfcGNtX2ZsYWcgPSAxOwoKICAgIGludDE2X3Qgc2NhbGVfZmFjdG9yID0gaWNz
LT5nbG9iYWxfZ2FpbjsKICAgIGludDE2X3QgaXNfcG9zaXRpb24gPSAwOwogICAgaW50MTZfdCBu
b2lzZV9lbmVyZ3kgPSBpY3MtPmdsb2JhbF9nYWluIC0gOTA7CgogICAgZm9yIChnID0gMDsgZyA8
IGljcy0+bnVtX3dpbmRvd19ncm91cHM7IGcrKykKICAgIHsKICAgICAgICBmb3IgKHNmYiA9IDA7
IHNmYiA8IGljcy0+bWF4X3NmYjsgc2ZiKyspCiAgICAgICAgewogICAgICAgICAgICBzd2l0Y2gg
KGljcy0+c2ZiX2NiW2ddW3NmYl0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgY2FzZSAwOgog
ICAgICAgICAgICAgICAgaWNzLT5zY2FsZV9mYWN0b3JzW2ddW3NmYl0gPSAwOwogICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgIGNhc2UgMTQ6CgoK
ICAgICAgICAgICAgICAgIHQgPSBodWZmbWFuX3NjYWxlX2ZhY3RvcihsZCk7CiAgICAgICAgICAg
ICAgICBpZiAodCA8IDApCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDk7CiAgICAgICAgICAg
ICAgICBpc19wb3NpdGlvbiArPSAodCAtIDYwKTsKICAgICAgICAgICAgICAgIGljcy0+c2NhbGVf
ZmFjdG9yc1tnXVtzZmJdID0gaXNfcG9zaXRpb247CgogICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgIGNhc2UgMTM6CgoKICAgICAgICAgICAgICAgIGlmIChub2lzZV9wY21fZmxhZykK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBub2lzZV9wY21fZmxhZyA9IDA7
CiAgICAgICAgICAgICAgICAgICAgdCA9IGZhYWRfZ2V0Yml0cyhsZCwgOQogICAgICAgICAgICAg
ICAgICAgICAgICApIC0gMjU2OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICB0ID0gaHVmZm1hbl9zY2FsZV9mYWN0b3IobGQpOwogICAgICAgICAgICAgICAgICAg
IGlmICh0IDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDk7CiAgICAgICAgICAg
ICAgICAgICAgdCAtPSA2MDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG5vaXNl
X2VuZXJneSArPSB0OwogICAgICAgICAgICAgICAgaWNzLT5zY2FsZV9mYWN0b3JzW2ddW3NmYl0g
PSBub2lzZV9lbmVyZ3k7CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2Ug
MTI6CiAgICAgICAgICAgICAgICByZXR1cm4gMzsKICAgICAgICAgICAgZGVmYXVsdDoKCgogICAg
ICAgICAgICAgICAgdCA9IGh1ZmZtYW5fc2NhbGVfZmFjdG9yKGxkKTsKICAgICAgICAgICAgICAg
IGlmICh0IDwgMCkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gOTsKICAgICAgICAgICAgICAg
IHNjYWxlX2ZhY3RvciArPSAodCAtIDYwKTsKICAgICAgICAgICAgICAgIGlmIChzY2FsZV9mYWN0
b3IgPCAwKQogICAgICAgICAgICAgICAgICAgIHJldHVybiA0OwogICAgICAgICAgICAgICAgaWNz
LT5zY2FsZV9mYWN0b3JzW2ddW3NmYl0gPSBzY2FsZV9mYWN0b3I7CgogICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCgpz
dGF0aWMgdWludDhfdCBzY2FsZV9mYWN0b3JfZGF0YShpY19zdHJlYW0gKmljcywgYml0ZmlsZSAq
bGQKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICx1aW50OF90IGFhY1NjYWxlZmFj
dG9yRGF0YVJlc2lsaWVuY2VGbGFnCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
CnsKCiAgICBpZiAoIWFhY1NjYWxlZmFjdG9yRGF0YVJlc2lsaWVuY2VGbGFnKQogICAgewoKICAg
ICAgICByZXR1cm4gZGVjb2RlX3NjYWxlX2ZhY3RvcnMoaWNzLCBsZCk7CgogICAgfSBlbHNlIHsK
IyA5NzUgInN5bnRheC5jIgogICAgfQoKfQoKCnN0YXRpYyB2b2lkIHRuc19kYXRhKGljX3N0cmVh
bSAqaWNzLCB0bnNfaW5mbyAqdG5zLCBiaXRmaWxlICpsZCkKewogICAgdWludDhfdCB3LCBmaWx0
LCBpLCBzdGFydF9jb2VmX2JpdHMsIGNvZWZfYml0czsKICAgIHVpbnQ4X3Qgbl9maWx0X2JpdHMg
PSAyOwogICAgdWludDhfdCBsZW5ndGhfYml0cyA9IDY7CiAgICB1aW50OF90IG9yZGVyX2JpdHMg
PSA1OwoKICAgIGlmIChpY3MtPndpbmRvd19zZXF1ZW5jZSA9PSAweDIpCiAgICB7CiAgICAgICAg
bl9maWx0X2JpdHMgPSAxOwogICAgICAgIGxlbmd0aF9iaXRzID0gNDsKICAgICAgICBvcmRlcl9i
aXRzID0gMzsKICAgIH0KCiAgICBmb3IgKHcgPSAwOyB3IDwgaWNzLT5udW1fd2luZG93czsgdysr
KQogICAgewogICAgICAgIHRucy0+bl9maWx0W3ddID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxk
LCBuX2ZpbHRfYml0cwogICAgICAgICAgICApOwoKICAgICAgICBpZiAodG5zLT5uX2ZpbHRbd10p
CiAgICAgICAgewogICAgICAgICAgICBpZiAoKHRucy0+Y29lZl9yZXNbd10gPSBmYWFkX2dldDFi
aXQobGQKICAgICAgICAgICAgICAgICkpICYgMSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgc3RhcnRfY29lZl9iaXRzID0gNDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgIHN0YXJ0X2NvZWZfYml0cyA9IDM7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg
IGZvciAoZmlsdCA9IDA7IGZpbHQgPCB0bnMtPm5fZmlsdFt3XTsgZmlsdCsrKQogICAgICAgIHsK
ICAgICAgICAgICAgdG5zLT5sZW5ndGhbd11bZmlsdF0gPSAodWludDhfdClmYWFkX2dldGJpdHMo
bGQsIGxlbmd0aF9iaXRzCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB0bnMtPm9yZGVy
W3ddW2ZpbHRdID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCBvcmRlcl9iaXRzCiAgICAgICAg
ICAgICAgICApOwogICAgICAgICAgICBpZiAodG5zLT5vcmRlclt3XVtmaWx0XSkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgdG5zLT5kaXJlY3Rpb25bd11bZmlsdF0gPSBmYWFkX2dldDFi
aXQobGQKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgdG5zLT5jb2VmX2Nv
bXByZXNzW3ddW2ZpbHRdID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgICAgICAgICAgICAgKTsK
CiAgICAgICAgICAgICAgICBjb2VmX2JpdHMgPSBzdGFydF9jb2VmX2JpdHMgLSB0bnMtPmNvZWZf
Y29tcHJlc3Nbd11bZmlsdF07CiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG5zLT5v
cmRlclt3XVtmaWx0XTsgaSsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
IHRucy0+Y29lZlt3XVtmaWx0XVtpXSA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgY29lZl9i
aXRzCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICB9Cn0KCgoKCgoKCnN0YXRpYyB2b2lkIGx0cF9kYXRhKGljX3N0
cmVhbSAqaWNzLCBsdHBfaW5mbyAqbHRwLCBiaXRmaWxlICpsZCwKICAgICAgICAgICAgICAgICAg
ICAgdWludDhfdCBvYmplY3RfdHlwZSkKewogICAgdWludDhfdCBzZmIsIHc7CgoKICAgIGlmIChv
YmplY3RfdHlwZSA9PSAyMykKICAgIHsKICAgICAgICBsdHAtPmxhZ191cGRhdGUgPSAodWludDhf
dClmYWFkX2dldGJpdHMobGQsIDEKICAgICAgICAgICAgKTsKCiAgICAgICAgaWYgKGx0cC0+bGFn
X3VwZGF0ZSkKICAgICAgICB7CiAgICAgICAgICAgIGx0cC0+bGFnID0gKHVpbnQxNl90KWZhYWRf
Z2V0Yml0cyhsZCwgMTAKICAgICAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfSBlbHNlIHsK
CiAgICAgICAgbHRwLT5sYWcgPSAodWludDE2X3QpZmFhZF9nZXRiaXRzKGxkLCAxMQogICAgICAg
ICAgICApOwoKICAgIH0KCiAgICBsdHAtPmNvZWYgPSAodWludDhfdClmYWFkX2dldGJpdHMobGQs
IDMKICAgICAgICApOwoKICAgIGlmIChpY3MtPndpbmRvd19zZXF1ZW5jZSA9PSAweDIpCiAgICB7
CiAgICAgICAgZm9yICh3ID0gMDsgdyA8IGljcy0+bnVtX3dpbmRvd3M7IHcrKykKICAgICAgICB7
CiAgICAgICAgICAgIGlmICgobHRwLT5zaG9ydF91c2VkW3ddID0gZmFhZF9nZXQxYml0KGxkCiAg
ICAgICAgICAgICAgICApKSAmIDEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGx0cC0+
c2hvcnRfbGFnX3ByZXNlbnRbd10gPSBmYWFkX2dldDFiaXQobGQKICAgICAgICAgICAgICAgICAg
ICApOwogICAgICAgICAgICAgICAgaWYgKGx0cC0+c2hvcnRfbGFnX3ByZXNlbnRbd10pCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbHRwLT5zaG9ydF9sYWdbd10gPSAodWlu
dDhfdClmYWFkX2dldGJpdHMobGQsIDQKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAg
bHRwLT5sYXN0X2JhbmQgPSAoaWNzLT5tYXhfc2ZiIDwgNDAgPyBpY3MtPm1heF9zZmIgOiA0MCk7
CgogICAgICAgIGZvciAoc2ZiID0gMDsgc2ZiIDwgbHRwLT5sYXN0X2JhbmQ7IHNmYisrKQogICAg
ICAgIHsKICAgICAgICAgICAgbHRwLT5sb25nX3VzZWRbc2ZiXSA9IGZhYWRfZ2V0MWJpdChsZAog
ICAgICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9Cn0KCgoKCnN0YXRpYyB1aW50OF90IHVu
c2lnbmVkX2NiW10gPSB7IDAsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDAs
IDAsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEsIDEsIDEsIDEsIDEs
IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEKfTsKCgpzdGF0aWMgdWludDhfdCBzcGVjdHJh
bF9kYXRhKGljX3N0cmVhbSAqaWNzLCBiaXRmaWxlICpsZCwgaW50MTZfdCAqc3BlY3RyYWxfZGF0
YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBmcmFtZV9sZW4pCnsKICAg
IGludDhfdCBpOwogICAgdWludDhfdCBnLCBpbmM7CiAgICBpbnQxNl90ICpzcDsKICAgIHVpbnQx
Nl90IGssIHAgPSAwOwogICAgdWludDhfdCBncm91cHMgPSAwOwogICAgdWludDhfdCBzZWN0X2Ni
OwogICAgdWludDhfdCByZXN1bHQ7CiAgICB1aW50MTZfdCBuc2hvcnQgPSBmcmFtZV9sZW4vODsK
CiAgICBzcCA9IHNwZWN0cmFsX2RhdGE7CiAgICBmb3IgKGkgPSBmcmFtZV9sZW4vMTYtMTsgaSA+
PSAwOyAtLWkpCiAgICB7CiAgICAgICAgKnNwKysgPSAwOyAqc3ArKyA9IDA7ICpzcCsrID0gMDsg
KnNwKysgPSAwOwogICAgICAgICpzcCsrID0gMDsgKnNwKysgPSAwOyAqc3ArKyA9IDA7ICpzcCsr
ID0gMDsKICAgICAgICAqc3ArKyA9IDA7ICpzcCsrID0gMDsgKnNwKysgPSAwOyAqc3ArKyA9IDA7
CiAgICAgICAgKnNwKysgPSAwOyAqc3ArKyA9IDA7ICpzcCsrID0gMDsgKnNwKysgPSAwOwogICAg
fQoKICAgIGZvcihnID0gMDsgZyA8IGljcy0+bnVtX3dpbmRvd19ncm91cHM7IGcrKykKICAgIHsK
ICAgICAgICBwID0gZ3JvdXBzKm5zaG9ydDsKCiAgICAgICAgZm9yIChpID0gMDsgaSA8IGljcy0+
bnVtX3NlY1tnXTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgc2VjdF9jYiA9IGljcy0+c2Vj
dF9jYltnXVtpXTsKCiAgICAgICAgICAgIGlmICgoc2VjdF9jYiA9PSAwKSB8fAogICAgICAgICAg
ICAgICAgKHNlY3RfY2IgPT0gMTMpIHx8CiAgICAgICAgICAgICAgICAoc2VjdF9jYiA9PSAxNSkg
fHwKICAgICAgICAgICAgICAgIChzZWN0X2NiID09IDE0KSkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgcCArPSAoaWNzLT5zZWN0X3NmYl9vZmZzZXRbZ11baWNzLT5zZWN0X2VuZFtnXVtp
XV0gLQogICAgICAgICAgICAgICAgICAgIGljcy0+c2VjdF9zZmJfb2Zmc2V0W2ddW2ljcy0+c2Vj
dF9zdGFydFtnXVtpXV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZm9y
IChrID0gaWNzLT5zZWN0X3NmYl9vZmZzZXRbZ11baWNzLT5zZWN0X3N0YXJ0W2ddW2ldXTsKICAg
ICAgICAgICAgICAgICAgICAgayA8IGljcy0+c2VjdF9zZmJfb2Zmc2V0W2ddW2ljcy0+c2VjdF9l
bmRbZ11baV1dOyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3AgPSBz
cGVjdHJhbF9kYXRhICsgcDsKCiAgICAgICAgICAgICAgICAgICAgaW5jID0gKHNlY3RfY2IgPCA1
KSA/IDQgOiAyOwoKICAgICAgICAgICAgICAgICAgICBpZiAoKHJlc3VsdCA9IGh1ZmZtYW5fc3Bl
Y3RyYWxfZGF0YShzZWN0X2NiLCBsZCwgc3ApKSA+IDApCiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKHVuc2lnbmVkX2NiW3NlY3Rf
Y2JdKQogICAgICAgICAgICAgICAgICAgICAgICBodWZmbWFuX3NpZ25fYml0cyhsZCwgc3AsIGlu
Yyk7CiAgICAgICAgICAgICAgICAgICAgayArPSBpbmM7CiAgICAgICAgICAgICAgICAgICAgcCAr
PSBpbmM7CiAgICAgICAgICAgICAgICAgICAgaWYgKChzZWN0X2NiID09IDExKSB8fCAoc2VjdF9j
YiA+PSAxNikpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBz
cFswXSA9IGh1ZmZtYW5fZ2V0ZXNjYXBlKGxkLCBzcFswXSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHNwWzFdID0gaHVmZm1hbl9nZXRlc2NhcGUobGQsIHNwWzFdKTsKICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAg
Z3JvdXBzICs9IGljcy0+d2luZG93X2dyb3VwX2xlbmd0aFtnXTsKICAgIH0KCiAgICByZXR1cm4g
MDsKfQoKCnN0YXRpYyB1aW50MTZfdCBleHRlbnNpb25fcGF5bG9hZChiaXRmaWxlICpsZCwgZHJj
X2luZm8gKmRyYywgdWludDE2X3QgY291bnQpCnsKICAgIHVpbnQxNl90IGksIG47CiAgICB1aW50
OF90IGV4dGVuc2lvbl90eXBlID0gZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgKTsKCiAgICBz
d2l0Y2ggKGV4dGVuc2lvbl90eXBlKQogICAgewogICAgY2FzZSAxMToKICAgICAgICBkcmMtPnBy
ZXNlbnQgPSAxOwogICAgICAgIG4gPSBkeW5hbWljX3JhbmdlX2luZm8obGQsIGRyYyk7CiAgICAg
ICAgcmV0dXJuIG47CiAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWFk
X2dldGJpdHMobGQsIDQKICAgICAgICAgICAgKTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291
bnQtMTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFh
ZF9nZXRiaXRzKGxkLCA4CiAgICAgICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICByZXR1
cm4gY291bnQ7CiAgICBkZWZhdWx0OgogICAgICAgIGZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAg
ICAgICApOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudC0xOyBpKyspCiAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFhZF9nZXRiaXRzKGxkLCA4CiAgICAg
ICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjb3VudDsKICAgIH0KfQoKCnN0
YXRpYyB1aW50OF90IGR5bmFtaWNfcmFuZ2VfaW5mbyhiaXRmaWxlICpsZCwgZHJjX2luZm8gKmRy
YykKewogICAgdWludDhfdCBpLCBuID0gMTsKICAgIHVpbnQ4X3QgYmFuZF9pbmNyOwoKICAgIGRy
Yy0+bnVtX2JhbmRzID0gMTsKCiAgICBpZiAoZmFhZF9nZXQxYml0KGxkCiAgICAgICAgKSAmIDEp
CiAgICB7CiAgICAgICAgZHJjLT5wY2VfaW5zdGFuY2VfdGFnID0gKHVpbnQ4X3QpZmFhZF9nZXRi
aXRzKGxkLCA0CiAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWFkX2dldGJpdHMobGQsIDQKICAgICAgICAgICAgKTsKICAgICAgICBuKys7
CiAgICB9CgogICAgZHJjLT5leGNsdWRlZF9jaG5zX3ByZXNlbnQgPSBmYWFkX2dldDFiaXQobGQK
ICAgICAgICApOwogICAgaWYgKGRyYy0+ZXhjbHVkZWRfY2huc19wcmVzZW50ID09IDEpCiAgICB7
CiAgICAgICAgbiArPSBleGNsdWRlZF9jaGFubmVscyhsZCwgZHJjKTsKICAgIH0KCiAgICBpZiAo
ZmFhZF9nZXQxYml0KGxkCiAgICAgICAgKSAmIDEpCiAgICB7CiAgICAgICAgYmFuZF9pbmNyID0g
ZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAgICAgICApOwog
ICAgICAgIG4rKzsKICAgICAgICBkcmMtPm51bV9iYW5kcyArPSBiYW5kX2luY3I7CgogICAgICAg
IGZvciAoaSA9IDA7IGkgPCBkcmMtPm51bV9iYW5kczsgaSsrKTsKICAgICAgICB7CiAgICAgICAg
ICAgIGRyYy0+YmFuZF90b3BbaV0gPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDgKICAgICAg
ICAgICAgICAgICk7CiAgICAgICAgICAgIG4rKzsKICAgICAgICB9CiAgICB9CgogICAgaWYgKGZh
YWRfZ2V0MWJpdChsZAogICAgICAgICkgJiAxKQogICAgewogICAgICAgIGRyYy0+cHJvZ19yZWZf
bGV2ZWwgPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDcKICAgICAgICAgICAgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWFkX2dldDFiaXQo
bGQKICAgICAgICAgICAgKTsKICAgICAgICBuKys7CiAgICB9CgogICAgZm9yIChpID0gMDsgaSA8
IGRyYy0+bnVtX2JhbmRzOyBpKyspCiAgICB7CiAgICAgICAgZHJjLT5keW5fcm5nX3NnbltpXSA9
IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICAgICApOwogICAgICAgIGRyYy0+ZHluX3JuZ19jdGxb
aV0gPSAodWludDhfdClmYWFkX2dldGJpdHMobGQsIDcKICAgICAgICAgICAgKTsKICAgICAgICBu
Kys7CiAgICB9CgogICAgcmV0dXJuIG47Cn0KCgpzdGF0aWMgdWludDhfdCBleGNsdWRlZF9jaGFu
bmVscyhiaXRmaWxlICpsZCwgZHJjX2luZm8gKmRyYykKewogICAgdWludDhfdCBpLCBuID0gMDsK
ICAgIHVpbnQ4X3QgbnVtX2V4Y2xfY2hhbiA9IDc7CgogICAgZm9yIChpID0gMDsgaSA8IDc7IGkr
KykKICAgIHsKICAgICAgICBkcmMtPmV4Y2x1ZGVfbWFza1tpXSA9IGZhYWRfZ2V0MWJpdChsZAog
ICAgICAgICAgICApOwogICAgfQogICAgbisrOwoKICAgIHdoaWxlICgoZHJjLT5hZGRpdGlvbmFs
X2V4Y2x1ZGVkX2NobnNbbi0xXSA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICkpID09IDEpCiAg
ICB7CiAgICAgICAgZm9yIChpID0gbnVtX2V4Y2xfY2hhbjsgaSA8IG51bV9leGNsX2NoYW4rNzsg
aSsrKQogICAgICAgIHsKICAgICAgICAgICAgZHJjLT5leGNsdWRlX21hc2tbaV0gPSBmYWFkX2dl
dDFiaXQobGQKICAgICAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIG4rKzsKICAgICAg
ICBudW1fZXhjbF9jaGFuICs9IDc7CiAgICB9CgogICAgcmV0dXJuIG47Cn0KCgoKCnZvaWQgZ2V0
X2FkaWZfaGVhZGVyKGFkaWZfaGVhZGVyICphZGlmLCBiaXRmaWxlICpsZCkKewogICAgdWludDhf
dCBpOwoKICAgICAgICAgICAgICAgICAgICAgICBmYWFkX2dldGJpdHMobGQsIDgKICAgICAgICAp
OwogICAgICAgICAgICAgICAgICAgICAgIGZhYWRfZ2V0Yml0cyhsZCwgOAogICAgICAgICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgZmFhZF9nZXRiaXRzKGxkLCA4CiAgICAgICAgKTsKICAgICAg
ICAgICAgICAgICAgICAgICBmYWFkX2dldGJpdHMobGQsIDgKICAgICAgICApOwogICAgYWRpZi0+
Y29weXJpZ2h0X2lkX3ByZXNlbnQgPSBmYWFkX2dldDFiaXQobGQKICAgICAgICApOwogICAgaWYo
YWRpZi0+Y29weXJpZ2h0X2lkX3ByZXNlbnQpCiAgICB7CiAgICAgICAgZm9yIChpID0gMDsgaSA8
IDcyLzg7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGFkaWYtPmNvcHlyaWdodF9pZFtpXSA9
IChpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCA4CiAgICAgICAgICAgICAgICApOwogICAgICAgIH0K
ICAgICAgICBhZGlmLT5jb3B5cmlnaHRfaWRbaV0gPSAwOwogICAgfQogICAgYWRpZi0+b3JpZ2lu
YWxfY29weSA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICk7CiAgICBhZGlmLT5ob21lID0gZmFh
ZF9nZXQxYml0KGxkCiAgICAgICAgKTsKICAgIGFkaWYtPmJpdHN0cmVhbV90eXBlID0gZmFhZF9n
ZXQxYml0KGxkCiAgICAgICAgKTsKICAgIGFkaWYtPmJpdHJhdGUgPSBmYWFkX2dldGJpdHMobGQs
IDIzCiAgICAgICAgKTsKICAgIGFkaWYtPm51bV9wcm9ncmFtX2NvbmZpZ19lbGVtZW50cyA9ICh1
aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgNAogICAgICAgICk7CgogICAgZm9yIChpID0gMDsgaSA8
IGFkaWYtPm51bV9wcm9ncmFtX2NvbmZpZ19lbGVtZW50cyArIDE7IGkrKykKICAgIHsKICAgICAg
ICBpZihhZGlmLT5iaXRzdHJlYW1fdHlwZSA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgYWRp
Zi0+YWRpZl9idWZmZXJfZnVsbG5lc3MgPSBmYWFkX2dldGJpdHMobGQsIDIwCiAgICAgICAgICAg
ICAgICApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFkaWYtPmFkaWZfYnVmZmVyX2Z1
bGxuZXNzID0gMDsKICAgICAgICB9CgogICAgICAgIHByb2dyYW1fY29uZmlnX2VsZW1lbnQoJmFk
aWYtPnBjZSwgbGQpOwogICAgfQp9CgoKdWludDhfdCBhZHRzX2ZyYW1lKGFkdHNfaGVhZGVyICph
ZHRzLCBiaXRmaWxlICpsZCkKewoKICAgIGlmIChhZHRzX2ZpeGVkX2hlYWRlcihhZHRzLCBsZCkp
CiAgICAgICAgcmV0dXJuIDU7CiAgICBhZHRzX3ZhcmlhYmxlX2hlYWRlcihhZHRzLCBsZCk7CiAg
ICBhZHRzX2Vycm9yX2NoZWNrKGFkdHMsIGxkKTsKCiAgICByZXR1cm4gMDsKfQoKCnN0YXRpYyB1
aW50OF90IGFkdHNfZml4ZWRfaGVhZGVyKGFkdHNfaGVhZGVyICphZHRzLCBiaXRmaWxlICpsZCkK
ewogICAgdWludDE2X3QgaTsKICAgIHVpbnQ4X3Qgc3luY19lcnIgPSAxOwoKCiAgICBmb3IgKGkg
PSAwOyBpIDwgNzY4OyBpKyspCiAgICB7CiAgICAgICAgYWR0cy0+c3luY3dvcmQgPSAodWludDE2
X3QpZmFhZF9zaG93Yml0cyhsZCwgMTIpOwogICAgICAgIGlmIChhZHRzLT5zeW5jd29yZCAhPSAw
eEZGRikKICAgICAgICB7CiAgICAgICAgICAgIGZhYWRfZ2V0Yml0cyhsZCwgOAogICAgICAgICAg
ICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzeW5jX2VyciA9IDA7CiAgICAg
ICAgICAgIGZhYWRfZ2V0Yml0cyhsZCwgMTIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAg
IGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGlmIChzeW5jX2VycikKICAgICAgICByZXR1cm4g
NTsKCiAgICBhZHRzLT5pZCA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICk7CiAgICBhZHRzLT5s
YXllciA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgMgogICAgICAgICk7CiAgICBhZHRzLT5w
cm90ZWN0aW9uX2Fic2VudCA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICk7CiAgICBhZHRzLT5w
cm9maWxlID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCAyCiAgICAgICAgKTsKICAgIGFkdHMt
PnNmX2luZGV4ID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRzKGxkLCA0CiAgICAgICAgKTsKICAgIGFk
dHMtPnByaXZhdGVfYml0ID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgKTsKICAgIGFkdHMtPmNo
YW5uZWxfY29uZmlndXJhdGlvbiA9ICh1aW50OF90KWZhYWRfZ2V0Yml0cyhsZCwgMwogICAgICAg
ICk7CiAgICBhZHRzLT5vcmlnaW5hbCA9IGZhYWRfZ2V0MWJpdChsZAogICAgICAgICk7CiAgICBh
ZHRzLT5ob21lID0gZmFhZF9nZXQxYml0KGxkCiAgICAgICAgKTsKICAgIGlmIChhZHRzLT5pZCA9
PSAwKQogICAgewogICAgICAgIGFkdHMtPmVtcGhhc2lzID0gKHVpbnQ4X3QpZmFhZF9nZXRiaXRz
KGxkLCAyCiAgICAgICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCgpzdGF0aWMgdm9p
ZCBhZHRzX3ZhcmlhYmxlX2hlYWRlcihhZHRzX2hlYWRlciAqYWR0cywgYml0ZmlsZSAqbGQpCnsK
ICAgIGFkdHMtPmNvcHlyaWdodF9pZGVudGlmaWNhdGlvbl9iaXQgPSBmYWFkX2dldDFiaXQobGQK
ICAgICAgICApOwogICAgYWR0cy0+Y29weXJpZ2h0X2lkZW50aWZpY2F0aW9uX3N0YXJ0ID0gZmFh
ZF9nZXQxYml0KGxkCiAgICAgICAgKTsKICAgIGFkdHMtPmFhY19mcmFtZV9sZW5ndGggPSAodWlu
dDE2X3QpZmFhZF9nZXRiaXRzKGxkLCAxMwogICAgICAgICk7CiAgICBhZHRzLT5hZHRzX2J1ZmZl
cl9mdWxsbmVzcyA9ICh1aW50MTZfdClmYWFkX2dldGJpdHMobGQsIDExCiAgICAgICAgKTsKICAg
IGFkdHMtPm5vX3Jhd19kYXRhX2Jsb2Nrc19pbl9mcmFtZSA9ICh1aW50OF90KWZhYWRfZ2V0Yml0
cyhsZCwgMgogICAgICAgICk7Cn0KCgpzdGF0aWMgdm9pZCBhZHRzX2Vycm9yX2NoZWNrKGFkdHNf
aGVhZGVyICphZHRzLCBiaXRmaWxlICpsZCkKewogICAgaWYgKGFkdHMtPnByb3RlY3Rpb25fYWJz
ZW50ID09IDApCiAgICB7CiAgICAgICAgYWR0cy0+Y3JjX2NoZWNrID0gKHVpbnQxNl90KWZhYWRf
Z2V0Yml0cyhsZCwgMTYKICAgICAgICAgICAgKTsKICAgIH0KfQo=


             reply	other threads:[~2002-10-31 10:56 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-10-31  2:56 alexander.puchmayr [this message]
2002-10-31  4:07 paolo
2003-01-28  7:06 Jim Bray

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20021031104751.30825.qmail@sources.redhat.com \
    --to=alexander.puchmayr@jku.at \
    --cc=gcc-gnats@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).