c/10137: -m128bit-long-double leads to coredump building glibc (snippet contained)

hagan@cih.com hagan@cih.com
Tue Mar 18 20:26:00 GMT 2003


>Number:         10137
>Category:       c
>Synopsis:       -m128bit-long-double leads to coredump building glibc (snippet contained)
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Mar 18 16:26:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     hagan@cih.com
>Release:        gcc-3.2.2
>Organization:
>Environment:
gentoo linux 1.4pre
>Description:

gcc -m128bit-long-double -c -o gscanner.bug.o gscanner.bug.c
gscanner.c: In function `g_scanner_get_token_i':
gscanner.c:1197: internal error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.

(fault)

gcc -c -o gscanner.bug.o gscanner.bug.c

(success)


gcc -v
Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.2/specs
Configured with: /var/tmp/portage/gcc-3.2.2/work/gcc-3.2.2/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/3.2 --includedir=/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.2/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/3.2 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info --enable-shared --host=i686-pc-linux-gnu --target=i686-pc-linux-gnu --with-system-zlib --enable-languages=c,c++,ada,f77,objc,java --enable-threads=posix --enable-long-long --disable-checking --enable-cstdio=stdio --enable-clocale=generic --enable-__cxa_atexit --enable-version-specific-runtime-libs --with-gxx-include-dir=/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.2/include/g++-v3 --with-local-prefix=/usr/local --enable-shared --enable-nls --without-included-gettext
Thread model: posix
gcc version 3.2.2

>How-To-Repeat:
readily reproducible with attached file
>Fix:

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

IyAxICJnc2Nhbm5lci5jIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMg
MSAiZ3NjYW5uZXIuYyIKIyAzNCAiZ3NjYW5uZXIuYyIKIyAxICIuLi9jb25maWcuaCIgMQojIDM1
ICJnc2Nhbm5lci5jIiAyCgojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAxIDMKIyAyOSAiL3Vz
ci9pbmNsdWRlL2Vycm5vLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg
MjkxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2Rl
ZnMuaCIgMSAzCiMgMjkyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzIwICIvdXNy
L2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAz
CiMgMzIxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzAgIi91c3IvaW5jbHVkZS9l
cnJuby5oIiAyIDMKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAxIDMKIyAy
NSAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9l
cnJuby5oIiAxIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEgMwojIDUgIi91
c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAyIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJy
bm8uaCIgMiAzCiMgMzggIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKZXh0ZXJuIGludCAq
X19lcnJub19sb2NhdGlvbiAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDM3
ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAzCiMgNTkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAz
CgojIDM3ICJnc2Nhbm5lci5jIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAz
MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMTMgIi91c3IvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVm
IHVuc2lnbmVkIGludCBzaXplX3Q7CiMgMzI1ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBsb25nIGludCB3Y2hhcl90
OwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiMgOTMgIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMwoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVt
OwogIH0gZGl2X3Q7CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAg
IGxvbmcgaW50IHJlbTsKICB9IGxkaXZfdDsKCgoKIyAxMzcgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMwpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIDsKCgoKCmV4
dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFy
ICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCl9fZXh0ZW5zaW9uX18g
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIpIDsKCiMgMTc0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK
CgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fYmFzZSkgOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCgpfX2V4dGVu
c2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQg
bG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9u
ZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBz
dHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg
X19iYXNlKQogICAgIDsKCiMgMjY0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRv
dWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2dyb3VwKQogICAgIDsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICA7CmV4
dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19ncm91cCkgOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCmV4dGVybiB1bnNp
Z25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgoKX19leHRlbnNpb25f
XwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKX19leHRlbnNpb25f
XwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2Nv
bnN0IGNoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBf
X2dyb3VwKQogICAgIDsKCgoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp
CnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4
dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpCnsK
ICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7
Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg
ICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2Vu
ZHB0ciwgX19iYXNlLCAwKTsKfQoKIyAzNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpfX2V4
dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg
ICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19l
bmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWdu
ZWQgbG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJl
dHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9
CgoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAo
X19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lu
bGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBfX3Jl
c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICBpbnQg
X19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs
IF9fYmFzZSwgMCk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBj
aGFyICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQg
KikwKSk7Cn0KZXh0ZXJuIF9faW5saW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikK
ewogIHJldHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAx
MCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRy
KQp7CiAgcmV0dXJuIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsK
fQoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAo
X19jb25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAq
KikgKCh2b2lkICopMCksIDEwKTsKfQoKIyA0MDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpl
eHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwg
KF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5j
bHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90
eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5z
aWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBs
b25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBl
ZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90
Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNo
b3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVm
IHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBs
b25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5
cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRl
ZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3Vf
aW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50
IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7
CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRl
ZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVm
IHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50
IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190
aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGlu
dCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9u
ZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50
IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsK
CgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2Nu
dDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRf
dCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRl
ZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0
X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rf
c2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBl
ZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoK
CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91c3Iv
aW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2No
ZWQuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IF9fc2No
ZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwojIDI0ICIvdXNyL2lu
Y2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2Nr
CnsKICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYg
c3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRl
ZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9f
c2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBf
X2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50
IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3Np
emU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJl
YWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRo
cmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFk
X2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0
eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9w
dGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFk
X2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QK
ewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGlu
dCBwdGhyZWFkX29uY2VfdDsKIyAxNDAgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5o
IiAzCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDE0NCAiL3Vzci9pbmNs
dWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAz
CgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0
eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9f
cXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNp
ZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgoKCnR5cGVkZWYgX19p
bm82NF90IGlub190OwojIDYxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBf
X2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21v
ZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBf
X3VpZF90IHVpZF90OwoKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmX3Q7CiMgOTkgIi91c3Iv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0eXBlZGVm
IF9faWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVm
IF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVk
ZWYgX19rZXlfdCBrZXlfdDsKIyAxMzIgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDc0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoK
dHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CgoKCiMgOTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK
dHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgMTA0ICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAzCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDIgMwojIDE0NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK
IyAxNDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgdW5zaWduZWQg
bG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxOTAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0
eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5
cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5
cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5
cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7CgoK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf
X1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2lu
dDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIGludCBy
ZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CiMgMjEyICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEg
MwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9l
bmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMjEzICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu
aCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIg
MwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDIzICIvdXNyL2luY2x1
ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVk
ZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNp
emVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsKIyAzNSAiL3Vzci9p
bmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsK
CgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDExNiAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25n
IGludCB0dl9uc2VjOwogIH07CiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvYml0
cy90aW1lLmgiIDMKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBf
X3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu
aCIgMiAzCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCnR5cGVkZWYg
bG9uZyBpbnQgX19mZF9tYXNrOwojIDY3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCnR5
cGVkZWYgc3RydWN0CiAgewoKCgoKCgogICAgX19mZF9tYXNrIF9fZmRzX2JpdHNbMTAyNCAvICg4
ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2Zk
X21hc2sgZmRfbWFzazsKIyA5OSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwoKCgoKCgoK
ZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRm
ZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAg
ICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgOwojIDEyMiAi
L3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwoKIyAyMTYgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMTkg
Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCiMgMjQzICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2Js
a2NudDY0X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudF90
OwojIDI2MiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgojIDQxNSAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkgOwoKCmV4
dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIDsKCgoKCgpleHRlcm4gY2hh
ciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgOwoKCgpleHRlcm4gY2hhciAq
c2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIDsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQog
IHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3Rh
dGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2Vw
OwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0
IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQz
Ml90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWdu
ZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgOwoKZXh0ZXJuIGludCBp
bml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRl
YnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSA7Cgpl
eHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIDsK
CgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSA7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWdu
ZWQgaW50IF9fc2VlZCkgOwoKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19z
ZWVkKSA7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGRvdWJs
ZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25n
IGludCBscmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBz
aG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSA7
CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkg
OwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgOwpleHRlcm4gdW5z
aWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10p
IDsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIDsK
CgoKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFsz
XTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQg
aW50IF9fYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25n
IGxvbmcgaW50IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0
OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBz
aG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4
X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUg
Kl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRy
YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxv
bmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNp
Z25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBk
cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBs
b25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChz
dHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAg
ICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBqcmFuZDQ4
X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBzcmFu
ZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIp
CiAgICAgOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2
dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIp
IDsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwK
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CgoK
CgoKCgoKCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18g
KChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6
ZV90IF9fc2l6ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgoKZXh0
ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSBfX2F0dHJpYnV0
ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIDsKCgoK
CmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgOwoKCgojIDEgIi91c3IvaW5jbHVkZS9h
bGxvY2EuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi91c3IvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKCgoKCgpleHRlcm4gdm9pZCAqYWxsb2Nh
IChzaXplX3QgX19zaXplKSA7CgoKCgoKCiMgNTc3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIg
MwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAo
KF9fbWFsbG9jX18pKTsKIyA1OTAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCmV4dGVybiB2
b2lkIGFib3J0ICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVy
biBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIDsKCgoKCgpleHRlcm4gaW50IG9u
X2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAq
X19hcmcpCiAgICAgOwoKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIF9fYXR0
cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCiMgNjIyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDMKCgpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgoKZXh0
ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoKCgpl
eHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIDsKCgoKCgpleHRlcm4gaW50IHNldGVu
diAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVw
bGFjZSkKICAgICA7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUp
IDsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgOwojIDY2MSAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKIyA2
NzIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9f
dGVtcGxhdGUpIF9fYXNtX18gKCIiICJta3N0ZW1wNjQiKTsKIyA2ODggIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgOwoKCgoK
CmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgOwoKIyA3MTIgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0
cmljdCBfX3Jlc29sdmVkKSA7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9f
Y29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKCgoKCgoKCmV4dGVybiB2b2lkICpic2Vh
cmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90
IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9f
bm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9f
Y29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCgoKCgoKCgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1l
ciwgaW50IF9fZGVub20pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4g
bGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIyA3NzYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpf
X3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19z
aWduKSA7CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz
dHJpY3QgX19zaWduKSA7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGlu
dCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBk
b3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19y
ZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4dGVybiBjaGFyICpx
ZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAg
ICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4
dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFy
ICpfX2J1ZikgOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u
ZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpf
X3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBfX2xlbikgOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGlu
dCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBp
bnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAg
ICAgICAgICAgc2l6ZV90IF9fbGVuKSA7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp
Y3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBj
aGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBxZmN2dF9y
IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAg
aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAg
ICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CgoKCgoK
CgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgOwoKCmV4
dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVy
biBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgOwoKCgpleHRlcm4gc2l6
ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoKZXh0
ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24p
CiAgICAgOwoKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3Bv
bnNlKSA7CiMgOTA4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBnZXRsb2Fk
YXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSA7CgoKCgoKCiMgMzggImdzY2Fu
bmVyLmMiIDIKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2lu
Y2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMi4yL2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBf
X2dudWNfdmFfbGlzdDsKIyAxMTAgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4yLjIvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7
CiMgMzkgImdzY2FubmVyLmMiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI4
ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5j
bHVkZS9zdHJpbmcuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3Ry
aWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0
IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVz
dCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICA7CgoKCgoKCmV4dGVybiB2
b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jl
c3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgaW50IF9fYywgc2l6ZV90IF9fbikK
ICAgICA7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXpl
X3QgX19uKSA7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25z
dCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCmV4dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXpl
X3QgX19uKQogICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCiMgODAgIi91c3IvaW5j
bHVkZS9zdHJpbmcuaCIgMwoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgOwoKZXh0ZXJuIGNo
YXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJu
IGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX3NyYykKICAgICA7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0
cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFy
ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy
ICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4
dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIp
CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0g
KGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoKIyAxMjYgIi91c3IvaW5jbHVk
ZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgX19h
dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNjAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIg
MwoKCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNo
YXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKCgoKCgoK
ZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpf
X3JlamVjdCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90
IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25z
dCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3Rh
Y2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICA7CgoKCgpleHRlcm4gY2hhciAqX19zdHJ0
b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hh
ciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKIyAyMjgg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0
IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgojIDI0MSAiL3Vzci9pbmNs
dWRlL3N0cmluZy5oIiAzCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIDsK
CgoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBz
aXplX3QgX19idWZsZW4pIDsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6
ZV90IF9fbikgOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9p
ZCAqX19kZXN0LCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywg
c2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2Nv
bnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBj
aGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4g
aW50IGZmcyAoaW50IF9faSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDI4NyAiL3Vz
ci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFy
ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0
IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CiMgMzA5ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hh
ciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgOwojIDM3MiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nLmgiIDEgMwojIDM3MyAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMSAzCiMg
Mzg5ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIHZvaWQgKl9fcmF3bWVt
Y2hyIChjb25zdCB2b2lkICpfX3MsIGludCBfX2MpOwojIDkxOSAiL3Vzci9pbmNsdWRlL2JpdHMv
c3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJjc3BuX2MxIChfX2NvbnN0
IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0KTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cmNz
cG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QpCnsKICByZWdpc3RlciBzaXpl
X3QgX19yZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19f
cmVzdWx0XSAhPSBfX3JlamVjdCkKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9
CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpfX3Ms
IGludCBfX3JlamVjdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
X19yZWplY3QyKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cmNzcG5fYzIgKF9fY29uc3Qg
Y2hhciAqX19zLCBpbnQgX19yZWplY3QxLCBpbnQgX19yZWplY3QyKQp7CiAgcmVnaXN0ZXIgc2l6
ZV90IF9fcmVzdWx0ID0gMDsKICB3aGlsZSAoX19zW19fcmVzdWx0XSAhPSAnXDAnICYmIF9fc1tf
X3Jlc3VsdF0gIT0gX19yZWplY3QxCiAgICAgICAgICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWpl
Y3QyKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lubGlu
ZSBzaXplX3QgX19zdHJjc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3JlamVjdDIsIGludCBf
X3JlamVjdDMpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMyAoX19jb25zdCBj
aGFyICpfX3MsIGludCBfX3JlamVjdDEsIGludCBfX3JlamVjdDIsCiAgICAgICAgICAgICAgaW50
IF9fcmVqZWN0MykKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CiAgd2hpbGUgKF9f
c1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MQogICAgICAg
ICAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MiAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVq
ZWN0MykKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgOTc2ICIvdXNyL2lu
Y2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cnNwbl9j
MSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdCk7CmV4dGVybiBfX2lubGluZSBzaXpl
X3QKX19zdHJzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQpCnsKICByZWdp
c3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVzdWx0XSA9PSBfX2Fj
Y2VwdCkKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxp
bmUgc2l6ZV90IF9fc3Ryc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0Mik7CmV4dGVy
biBfX2lubGluZSBzaXplX3QKX19zdHJzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19h
Y2NlcHQxLCBpbnQgX19hY2NlcHQyKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsK
CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQxIHx8IF9fc1tfX3Jlc3VsdF0gPT0g
X19hY2NlcHQyKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBf
X2lubGluZSBzaXplX3QgX19zdHJzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2Nl
cHQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyLCBp
bnQgX19hY2NlcHQzKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9jMyAoX19jb25z
dCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIsIGludCBfX2FjY2VwdDMp
CnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVzdWx0
XSA9PSBfX2FjY2VwdDEgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDIKICAgICAgICAgfHwg
X19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDMpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jl
c3VsdDsKfQojIDEwMzMgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19p
bmxpbmUgY2hhciAqX19zdHJwYnJrX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIpOwpl
eHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RycGJya19jMiAoX19jb25zdCBjaGFyICpfX3MsIGlu
dCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIpCnsKCiAgd2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAq
X19zICE9IF9fYWNjZXB0MSAmJiAqX19zICE9IF9fYWNjZXB0MikKICAgICsrX19zOwogIHJldHVy
biAqX19zID09ICdcMCcgPyAoKHZvaWQgKikwKSA6IChjaGFyICopIChzaXplX3QpIF9fczsKfQoK
ZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RycGJya19jMyAoX19jb25zdCBjaGFyICpfX3MsIGlu
dCBfX2FjY2VwdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19h
Y2NlcHQyLCBpbnQgX19hY2NlcHQzKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnBicmtf
YzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLCBpbnQgX19hY2NlcHQyLAogICAg
ICAgICAgICAgIGludCBfX2FjY2VwdDMpCnsKCiAgd2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19z
ICE9IF9fYWNjZXB0MSAmJiAqX19zICE9IF9fYWNjZXB0MgogICAgICAgICAmJiAqX19zICE9IF9f
YWNjZXB0MykKICAgICsrX19zOwogIHJldHVybiAqX19zID09ICdcMCcgPyAoKHZvaWQgKikwKSA6
IChjaGFyICopIChzaXplX3QpIF9fczsKfQojIDEwODUgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmlu
ZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJ0b2tfcl8xYyAoY2hhciAqX19zLCBj
aGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJ0
b2tfcl8xYyAoY2hhciAqX19zLCBjaGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCkKewogIGNoYXIg
Kl9fcmVzdWx0OwogIGlmIChfX3MgPT0gKCh2b2lkICopMCkpCiAgICBfX3MgPSAqX19uZXh0cDsK
ICB3aGlsZSAoKl9fcyA9PSBfX3NlcCkKICAgICsrX19zOwogIF9fcmVzdWx0ID0gKCh2b2lkICop
MCk7CiAgaWYgKCpfX3MgIT0gJ1wwJykKICAgIHsKICAgICAgX19yZXN1bHQgPSBfX3MrKzsKICAg
ICAgd2hpbGUgKCpfX3MgIT0gJ1wwJykKICAgICAgICBpZiAoKl9fcysrID09IF9fc2VwKQogICAg
ICAgICAgewogICAgICAgICAgICBfX3NbLTFdID0gJ1wwJzsKICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICB9CiAgICAgICpfX25leHRwID0gX19zOwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsK
fQojIDExMTcgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gY2hhciAqX19z
dHJzZXBfZyAoY2hhciAqKl9fc3RyaW5ncCwgX19jb25zdCBjaGFyICpfX2RlbGltKTsKIyAxMTM1
ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9f
c3Ryc2VwXzFjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0KTsKZXh0ZXJuIF9faW5saW5lIGNo
YXIgKgpfX3N0cnNlcF8xYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdCkKewogIHJlZ2lzdGVy
IGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19yZXR2YWwgIT0gKCh2b2lkICopMCkgJiYg
KCpfX3MgPSAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKF9fcmVqZWN0KSAm
JiAoX19yZWplY3QpID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAoX19yZXR2YWwsIF9f
cmVqZWN0KSA6IHN0cmNociAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSAhPSAoKHZvaWQgKikwKSkK
ICAgICooKl9fcykrKyA9ICdcMCc7CiAgcmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxp
bmUgY2hhciAqX19zdHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9f
cmVqZWN0Mik7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJzZXBfMmMgKGNoYXIgKipfX3Ms
IGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MikKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0
dmFsID0gKl9fczsKICBpZiAoX19yZXR2YWwgIT0gKCh2b2lkICopMCkpCiAgICB7CiAgICAgIHJl
Z2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAgICAgd2hpbGUgKDEpCiAgICAgICAgewog
ICAgICAgICAgaWYgKCpfX2NwID09ICdcMCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBf
X2NwID0gKCh2b2lkICopMCk7CiAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAg
ICAgaWYgKCpfX2NwID09IF9fcmVqZWN0MSB8fCAqX19jcCA9PSBfX3JlamVjdDIpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAqX19jcCsrID0gJ1wwJzsKICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgfQogICAgICAgICAgKytfX2NwOwogICAgICAgIH0KICAgICAgKl9fcyA9IF9f
Y3A7CiAgICB9CiAgcmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19z
dHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fcmVqZWN0Myk7CmV4dGVybiBf
X2lubGluZSBjaGFyICoKX19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBj
aGFyIF9fcmVqZWN0MiwgY2hhciBfX3JlamVjdDMpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZh
bCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsICE9ICgodm9pZCAqKTApKQogICAgewogICAgICByZWdp
c3RlciBjaGFyICpfX2NwID0gX19yZXR2YWw7CiAgICAgIHdoaWxlICgxKQogICAgICAgIHsKICAg
ICAgICAgIGlmICgqX19jcCA9PSAnXDAnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19j
cCA9ICgodm9pZCAqKTApOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAg
IGlmICgqX19jcCA9PSBfX3JlamVjdDEgfHwgKl9fY3AgPT0gX19yZWplY3QyIHx8ICpfX2NwID09
IF9fcmVqZWN0MykKICAgICAgICAgICAgewogICAgICAgICAgICAgICpfX2NwKysgPSAnXDAnOwog
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICArK19fY3A7CiAgICAg
ICAgfQogICAgICAqX19zID0gX19jcDsKICAgIH0KICByZXR1cm4gX19yZXR2YWw7Cn0KIyAxMjE2
ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIGNoYXIgKl9fc3RyZHVwIChf
X2NvbnN0IGNoYXIgKl9fc3RyaW5nKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDEy
MzUgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gY2hhciAqX19zdHJuZHVw
IChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18g
KChfX21hbGxvY19fKSk7CiMgMzc2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgoKIyA0
MCAiZ3NjYW5uZXIuYyIgMgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4yLjIvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAzOSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKCiMgMSAiL3Vzci9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0NCAi
L3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgi
IDIgMwojIDUzICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1
ZGUvc3RkaW8uaCIgMwoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CgoKCgoKIyA3MSAi
L3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgi
IDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX19GSUxFOwojIDgxICIvdXNyL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDE0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi
IDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUv
c3RkZGVmLmgiIDEgMwojIDM1NCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAx
NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2Nv
bmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1
ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4y
LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAyIDMKIyA3MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QK
ewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBf
X3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUv
X0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19t
YnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0
X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vz
ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwoj
IDI4ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAx
IDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMiAzCiMgMjkgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgojIDEg
Ii91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgplbnVtCnsKICBfX0dD
T05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9O
T01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9f
R0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NP
TlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IKfTsKCgoKZW51
bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9
IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29udl9zdGVwX2Rh
dGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252X3RyYW5zX2Rh
dGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICos
IHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBpbnQsIGlu
dCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3Rl
cCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3Rl
cCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVjdCBfX2djb252
X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX2djb252
X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29u
dl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5z
X3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgq
X19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7CnR5cGVkZWYg
dm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19nY29udl90
cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAgX19nY29udl90
cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNfZW5k
X2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBfX2djb252X3Ry
YW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3RydWN0IF9f
Z2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBjaGFyICpfX21v
ZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwogIGNoYXIgKl9f
dG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBfX2luaXRf
ZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9fbWluX25lZWRlZF9m
cm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVkX3RvOwogIGlu
dCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRhOwp9
OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVm
OwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdzOwoKCgogIGlu
dCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7CgogIF9fbWJz
dGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0cnVjdCBfX2dj
b252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZfaW5m
bwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3RlcHM7CiAg
X19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhIFtdOwp9ICpfX2dj
b252X3Q7CiMgNDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVkZWYgdW5pb24K
ewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19n
Y29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0g
X19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJp
YnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0df
dWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5z
aWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkp
OwojIDMzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgMTYyICIvdXNyL2luY2x1ZGUvbGli
aW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwojIDE3MiAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9J
T19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUg
Kl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5NSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsK
CgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFy
dGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9OwojIDI2MyAiL3Vz
ci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoK
ICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19y
ZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsK
ICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9f
YnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7
CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7Cgog
IHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKCgoKICBpbnQgX2ZsYWdz
MjsKCiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVt
bjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoK
ICBfSU9fbG9ja190ICpfbG9jazsKIyAzMTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19v
ZmY2NF90IF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3BhZDE7CiAgdm9pZCAqX19wYWQyOwoKICBp
bnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9m
ICh2b2lkICopXTsKCn07CgoKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX0lPX0ZJTEU7CgoKc3Ry
dWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9z
dGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVy
biBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzUwICIvdXNyL2luY2x1
ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29v
a2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6
ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVk
ZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGlu
dCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKIyA0
MDIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19G
SUxFICopIDsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX19v
dmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSA7CmV4dGVybiB3aW50X3QgX193dW5kZXJmbG93IChf
SU9fRklMRSAqKSA7CmV4dGVybiB3aW50X3QgX193dWZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJu
IHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSA7CiMgNDMyICIvdXNyL2lu
Y2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgOwpl
eHRlcm4gaW50IF9JT19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50
IF9JT19mZW9mIChfSU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19G
SUxFICpfX2ZwKSA7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2Zw
KSA7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgOwpleHRlcm4g
dm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxv
Y2tmaWxlIChfSU9fRklMRSAqKSA7CiMgNDYyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRl
cm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBf
X3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpf
X3Jlc3RyaWN0KSA7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmlj
dCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251
Y192YV9saXN0KSA7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGludCwg
X19zc2l6ZV90KSA7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICos
IHNpemVfdCkgOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19v
ZmY2NF90LCBpbnQsIGludCkgOwpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklM
RSAqLCBfX29mZjY0X3QsIGludCkgOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEg
KF9JT19GSUxFICopIDsKIyA4MiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDk1ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgoKdHlwZWRlZiBfR19mcG9zNjRf
dCBmcG9zX3Q7CgoKIyAxNDcgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4y
LjIvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgi
IDEgMwojIDE0OCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNs
dWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRpbjsKZXh0ZXJu
IHN0cnVjdCBfSU9fRklMRSAqc3Rkb3V0OwpleHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRlcnI7
CgoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSA7Cgpl
eHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25l
dykgOwoKCgoKCgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgX19hc21fXyAoIiIgInRt
cGZpbGU2NCIpOwoKCgoKCgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIDsKCiMgMTkw
ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8u
aCIgMwpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgOwojIDIwMiAiL3Vzci9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu
IGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngp
CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gaW50IGZjbG9z
ZSAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkg
OwoKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CiMgMjI1
ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8u
aCIgMwoKIyAyMzYgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5j
bHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZmlsZW5hbWUsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSBfX2FzbV9f
ICgiIiAiZm9wZW42NCIpOwoKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsIEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIF9fYXNtX18gKCIiICJmcmVvcGVuNjQiKTsKIyAyNDgg
Ii91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5o
IiAzCgojIDI1OSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNs
dWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hh
ciAqX19tb2RlcykgOwojIDI4MCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jl
c3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCmV4dGVybiBpbnQg
c2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1
ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgOwoKCgoKCmV4
dGVybiB2b2lkIHNldGJ1ZmZlciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19y
ZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zaXplKSA7CgoK
ZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gaW50
IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgcHJp
bnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGlu
dCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKCmV4dGVybiBpbnQgdmZwcmlu
dGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSA7CgpleHRlcm4g
aW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3Zh
X2xpc3QgX19hcmcpCiAgICAgOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmlj
dCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg
ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIDsKCgoKCgpleHRlcm4gaW50IHNucHJpbnRmIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICBfX2F0dHJpYnV0
ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJp
bnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlz
dCBfX2FyZykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywg
MCkpKTsKCiMgMzU4ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2lu
Y2x1ZGUvc3RkaW8uaCIgMwoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwgLi4uKSA7CgojIDM4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKCgpleHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVh
bSkgOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBnZXRj
aGFyICh2b2lkKSA7CgoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0
cmVhbSkgOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIDsKCgoKCmV4dGVybiBp
bnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgoKZXh0ZXJuIGludCBmcHV0
YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBG
SUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgOwoKCgoKCgoK
CmV4dGVybiBpbnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoK
CgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CmV4
dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgOwoKCgoKCmV4dGVybiBpbnQgZ2V0
dyAoRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9f
c3RyZWFtKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywg
aW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICA7CgoKCmV4dGVybiBjaGFy
ICpnZXRzIChjaGFyICpfX3MpIDsKCiMgNDg0ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAg
OwoKCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpIDsKCgoKZXh0ZXJuIGludCB1
bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBzaXplX3QgZnJlYWQg
KHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCmV4dGVybiBzaXpl
X3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs
CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykg
OwoKIyA1MTMgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVk
ZS9zdGRpby5oIiAzCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJp
Y3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKZXh0ZXJuIHNpemVfdCBmd3Jp
dGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwg
bG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChG
SUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgOwoK
IyA1NTMgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9z
dGRpby5oIiAzCgojIDU2MiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIu
Mi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpIF9fYXNtX18gKCIiICJmZ2V0cG9z
NjQiKTsKCmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190
ICpfX3BvcykgX19hc21fXyAoIiIgImZzZXRwb3M2NCIpOwoKCgoKCgoKCiMgNTgyICIvdXNyL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwoKCmV4
dGVybiB2b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZW9mIChG
SUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSA7CgoK
CgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJu
IGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZlcnJvcl91
bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29u
c3QgY2hhciAqX19zKSA7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3lzX2Vycmxpc3Qu
aCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL3N5c19lcnJsaXN0LmgiIDMKZXh0ZXJuIGlu
dCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoj
IDYwOSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0
ZGlvLmgiIDIgMwoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpl
eHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgoKZXh0ZXJu
IEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21v
ZGVzKSA7CgoKZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgoKZXh0ZXJu
IGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgOwojIDY2MiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgZmxvY2tm
aWxlIChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAq
X19zdHJlYW0pIDsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIDsK
IyA2ODMgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9z
dGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMSAzCiMgMzMgIi91c3Iv
aW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDMKZXh0ZXJuIF9faW5saW5lIGludAp2cHJpbnRmIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQp7CiAgcmV0
dXJuIHZmcHJpbnRmIChzdGRvdXQsIF9fZm10LCBfX2FyZyk7Cn0KCgpleHRlcm4gX19pbmxpbmUg
aW50CmdldGNoYXIgKHZvaWQpCnsKICByZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoKZXh0
ZXJuIF9faW5saW5lIGludApnZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKQp7CiAgcmV0dXJuICgo
X19mcCktPl9JT19yZWFkX3B0ciA+PSAoX19mcCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKF9f
ZnApIDogKih1bnNpZ25lZCBjaGFyICopIChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKZXh0
ZXJuIF9faW5saW5lIGludApnZXRjaGFyX3VubG9ja2VkICh2b2lkKQp7CiAgcmV0dXJuICgoc3Rk
aW4pLT5fSU9fcmVhZF9wdHIgPj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoc3Rk
aW4pIDogKih1bnNpZ25lZCBjaGFyICopIChzdGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoKCgoK
ZXh0ZXJuIF9faW5saW5lIGludApwdXRjaGFyIChpbnQgX19jKQp7CiAgcmV0dXJuIF9JT19wdXRj
IChfX2MsIHN0ZG91dCk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBpbnQKZnB1dGNfdW5sb2NrZWQg
KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dy
aXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3Ry
ZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFt
KS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmV4dGVybiBfX2lubGluZSBpbnQK
cHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19z
dHJlYW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19v
dmVyZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hh
cikgKCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKZXh0ZXJuIF9f
aW5saW5lIGludApwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKQp7CiAgcmV0dXJuICgoKHN0ZG91
dCktPl9JT193cml0ZV9wdHIgPj0gKHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxv
dyAoc3Rkb3V0LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHN0
ZG91dCktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KIyAxMTEgIi91c3IvaW5jbHVkZS9i
aXRzL3N0ZGlvLmgiIDMKZXh0ZXJuIF9faW5saW5lIGludApmZW9mX3VubG9ja2VkIChGSUxFICpf
X3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDApOwp9
CgoKZXh0ZXJuIF9faW5saW5lIGludApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKQp7
CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2ODQgIi91
c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAy
IDMKCgoKIyA0MSAiZ3NjYW5uZXIuYyIgMgoKIyAxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDEg
MwojIDI4ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKCiMgMTc1ICIvdXNyL2luY2x1ZGUvdW5p
c3RkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9vcHQuaCIgMSAzCiMgMTc2ICIv
dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwojIDE5OSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz
CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKIyAyMDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMjQwICIvdXNy
L2luY2x1ZGUvdW5pc3RkLmgiIDMKdHlwZWRlZiBfX2ludHB0cl90IGludHB0cl90OwoKCgoKCgp0
eXBlZGVmIF9fc29ja2xlbl90IHNvY2tsZW5fdDsKIyAyNjAgIi91c3IvaW5jbHVkZS91bmlzdGQu
aCIgMwpleHRlcm4gaW50IGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUp
IDsKIyAyOTMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmY2NF90IGxzZWVr
IChpbnQgX19mZCwgX19vZmY2NF90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpIF9fYXNtX18gKCIi
ICJsc2VlazY0Iik7CiMgMzA2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBj
bG9zZSAoaW50IF9fZmQpIDsKCgoKZXh0ZXJuIHNzaXplX3QgcmVhZCAoaW50IF9fZmQsIHZvaWQg
Kl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpIDsKCgpleHRlcm4gc3NpemVfdCB3cml0ZSAoaW50IF9f
ZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24pIDsKIyAzNTMgIi91c3IvaW5jbHVk
ZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHBpcGUgKGludCBfX3BpcGVkZXNbMl0pIDsKIyAzNjIg
Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gdW5zaWduZWQgaW50IGFsYXJtICh1bnNp
Z25lZCBpbnQgX19zZWNvbmRzKSA7CiMgMzcxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0
ZXJuIHVuc2lnbmVkIGludCBzbGVlcCAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgOwoKCgoKCgpl
eHRlcm4gX191c2Vjb25kc190IHVhbGFybSAoX191c2Vjb25kc190IF9fdmFsdWUsIF9fdXNlY29u
ZHNfdCBfX2ludGVydmFsKQogICAgIDsKCgoKZXh0ZXJuIGludCB1c2xlZXAgKF9fdXNlY29uZHNf
dCBfX3VzZWNvbmRzKSA7CgoKCgoKZXh0ZXJuIGludCBwYXVzZSAodm9pZCkgOwoKCgpleHRlcm4g
aW50IGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90
IF9fZ3JvdXApCiAgICAgOwoKCgpleHRlcm4gaW50IGZjaG93biAoaW50IF9fZmQsIF9fdWlkX3Qg
X19vd25lciwgX19naWRfdCBfX2dyb3VwKSA7CgoKCgpleHRlcm4gaW50IGxjaG93biAoX19jb25z
dCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAgIDsK
CgoKCmV4dGVybiBpbnQgY2hkaXIgKF9fY29uc3QgY2hhciAqX19wYXRoKSA7CgoKCmV4dGVybiBp
bnQgZmNoZGlyIChpbnQgX19mZCkgOwojIDQyMyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4
dGVybiBjaGFyICpnZXRjd2QgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19zaXplKSA7CiMgNDM2ICIv
dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGNoYXIgKmdldHdkIChjaGFyICpfX2J1Zikg
OwoKCgoKZXh0ZXJuIGludCBkdXAgKGludCBfX2ZkKSA7CgoKZXh0ZXJuIGludCBkdXAyIChpbnQg
X19mZCwgaW50IF9fZmQyKSA7CgoKZXh0ZXJuIGNoYXIgKipfX2Vudmlyb247CgoKCgoKCgpleHRl
cm4gaW50IGV4ZWN2ZSAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2
W10sCiAgICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0IF9fZW52cFtdKSA7CiMgNDY3ICIv
dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBleGVjdiAoX19jb25zdCBjaGFyICpf
X3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10pIDsKCgoKZXh0ZXJuIGludCBleGVjbGUgKF9f
Y29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pIDsKCgoKZXh0ZXJu
IGludCBleGVjbCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4u
LikgOwoKCgpleHRlcm4gaW50IGV4ZWN2cCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIGNoYXIgKl9f
Y29uc3QgX19hcmd2W10pIDsKCgoKCmV4dGVybiBpbnQgZXhlY2xwIChfX2NvbnN0IGNoYXIgKl9f
ZmlsZSwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSA7CgoKCgpleHRlcm4gaW50IG5pY2UgKGlu
dCBfX2luYykgOwoKCgoKZXh0ZXJuIHZvaWQgX2V4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5h
bWUuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2NvbmZuYW1lLmgiIDMKZW51bQogIHsK
ICAgIF9QQ19MSU5LX01BWCwKCiAgICBfUENfTUFYX0NBTk9OLAoKICAgIF9QQ19NQVhfSU5QVVQs
CgogICAgX1BDX05BTUVfTUFYLAoKICAgIF9QQ19QQVRIX01BWCwKCiAgICBfUENfUElQRV9CVUYs
CgogICAgX1BDX0NIT1dOX1JFU1RSSUNURUQsCgogICAgX1BDX05PX1RSVU5DLAoKICAgIF9QQ19W
RElTQUJMRSwKCiAgICBfUENfU1lOQ19JTywKCiAgICBfUENfQVNZTkNfSU8sCgogICAgX1BDX1BS
SU9fSU8sCgogICAgX1BDX1NPQ0tfTUFYQlVGLAoKICAgIF9QQ19GSUxFU0laRUJJVFMsCgogICAg
X1BDX1JFQ19JTkNSX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX01BWF9YRkVSX1NJWkUsCgogICAg
X1BDX1JFQ19NSU5fWEZFUl9TSVpFLAoKICAgIF9QQ19SRUNfWEZFUl9BTElHTiwKCiAgICBfUENf
QUxMT0NfU0laRV9NSU4sCgogICAgX1BDX1NZTUxJTktfTUFYCgogIH07CgoKZW51bQogIHsKICAg
IF9TQ19BUkdfTUFYLAoKICAgIF9TQ19DSElMRF9NQVgsCgogICAgX1NDX0NMS19UQ0ssCgogICAg
X1NDX05HUk9VUFNfTUFYLAoKICAgIF9TQ19PUEVOX01BWCwKCiAgICBfU0NfU1RSRUFNX01BWCwK
CiAgICBfU0NfVFpOQU1FX01BWCwKCiAgICBfU0NfSk9CX0NPTlRST0wsCgogICAgX1NDX1NBVkVE
X0lEUywKCiAgICBfU0NfUkVBTFRJTUVfU0lHTkFMUywKCiAgICBfU0NfUFJJT1JJVFlfU0NIRURV
TElORywKCiAgICBfU0NfVElNRVJTLAoKICAgIF9TQ19BU1lOQ0hST05PVVNfSU8sCgogICAgX1ND
X1BSSU9SSVRJWkVEX0lPLAoKICAgIF9TQ19TWU5DSFJPTklaRURfSU8sCgogICAgX1NDX0ZTWU5D
LAoKICAgIF9TQ19NQVBQRURfRklMRVMsCgogICAgX1NDX01FTUxPQ0ssCgogICAgX1NDX01FTUxP
Q0tfUkFOR0UsCgogICAgX1NDX01FTU9SWV9QUk9URUNUSU9OLAoKICAgIF9TQ19NRVNTQUdFX1BB
U1NJTkcsCgogICAgX1NDX1NFTUFQSE9SRVMsCgogICAgX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNU
UywKCiAgICBfU0NfQUlPX0xJU1RJT19NQVgsCgogICAgX1NDX0FJT19NQVgsCgogICAgX1NDX0FJ
T19QUklPX0RFTFRBX01BWCwKCiAgICBfU0NfREVMQVlUSU1FUl9NQVgsCgogICAgX1NDX01RX09Q
RU5fTUFYLAoKICAgIF9TQ19NUV9QUklPX01BWCwKCiAgICBfU0NfVkVSU0lPTiwKCiAgICBfU0Nf
UEFHRVNJWkUsCgoKICAgIF9TQ19SVFNJR19NQVgsCgogICAgX1NDX1NFTV9OU0VNU19NQVgsCgog
ICAgX1NDX1NFTV9WQUxVRV9NQVgsCgogICAgX1NDX1NJR1FVRVVFX01BWCwKCiAgICBfU0NfVElN
RVJfTUFYLAoKCgoKICAgIF9TQ19CQ19CQVNFX01BWCwKCiAgICBfU0NfQkNfRElNX01BWCwKCiAg
ICBfU0NfQkNfU0NBTEVfTUFYLAoKICAgIF9TQ19CQ19TVFJJTkdfTUFYLAoKICAgIF9TQ19DT0xM
X1dFSUdIVFNfTUFYLAoKICAgIF9TQ19FUVVJVl9DTEFTU19NQVgsCgogICAgX1NDX0VYUFJfTkVT
VF9NQVgsCgogICAgX1NDX0xJTkVfTUFYLAoKICAgIF9TQ19SRV9EVVBfTUFYLAoKICAgIF9TQ19D
SEFSQ0xBU1NfTkFNRV9NQVgsCgoKICAgIF9TQ18yX1ZFUlNJT04sCgogICAgX1NDXzJfQ19CSU5E
LAoKICAgIF9TQ18yX0NfREVWLAoKICAgIF9TQ18yX0ZPUlRfREVWLAoKICAgIF9TQ18yX0ZPUlRf
UlVOLAoKICAgIF9TQ18yX1NXX0RFViwKCiAgICBfU0NfMl9MT0NBTEVERUYsCgoKICAgIF9TQ19Q
SUksCgogICAgX1NDX1BJSV9YVEksCgogICAgX1NDX1BJSV9TT0NLRVQsCgogICAgX1NDX1BJSV9J
TlRFUk5FVCwKCiAgICBfU0NfUElJX09TSSwKCiAgICBfU0NfUE9MTCwKCiAgICBfU0NfU0VMRUNU
LAoKICAgIF9TQ19VSU9fTUFYSU9WLAoKICAgIF9TQ19JT1ZfTUFYID0gX1NDX1VJT19NQVhJT1Ys
CgogICAgX1NDX1BJSV9JTlRFUk5FVF9TVFJFQU0sCgogICAgX1NDX1BJSV9JTlRFUk5FVF9ER1JB
TSwKCiAgICBfU0NfUElJX09TSV9DT1RTLAoKICAgIF9TQ19QSUlfT1NJX0NMVFMsCgogICAgX1ND
X1BJSV9PU0lfTSwKCiAgICBfU0NfVF9JT1ZfTUFYLAoKCgogICAgX1NDX1RIUkVBRFMsCgogICAg
X1NDX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUywKCiAgICBfU0NfR0VUR1JfUl9TSVpFX01BWCwKCiAg
ICBfU0NfR0VUUFdfUl9TSVpFX01BWCwKCiAgICBfU0NfTE9HSU5fTkFNRV9NQVgsCgogICAgX1ND
X1RUWV9OQU1FX01BWCwKCiAgICBfU0NfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUywKCiAg
ICBfU0NfVEhSRUFEX0tFWVNfTUFYLAoKICAgIF9TQ19USFJFQURfU1RBQ0tfTUlOLAoKICAgIF9T
Q19USFJFQURfVEhSRUFEU19NQVgsCgogICAgX1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiwKCiAg
ICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFLAoKICAgIF9TQ19USFJFQURfUFJJT1JJVFlfU0NI
RURVTElORywKCiAgICBfU0NfVEhSRUFEX1BSSU9fSU5IRVJJVCwKCiAgICBfU0NfVEhSRUFEX1BS
SU9fUFJPVEVDVCwKCiAgICBfU0NfVEhSRUFEX1BST0NFU1NfU0hBUkVELAoKCiAgICBfU0NfTlBS
T0NFU1NPUlNfQ09ORiwKCiAgICBfU0NfTlBST0NFU1NPUlNfT05MTiwKCiAgICBfU0NfUEhZU19Q
QUdFUywKCiAgICBfU0NfQVZQSFlTX1BBR0VTLAoKICAgIF9TQ19BVEVYSVRfTUFYLAoKICAgIF9T
Q19QQVNTX01BWCwKCgogICAgX1NDX1hPUEVOX1ZFUlNJT04sCgogICAgX1NDX1hPUEVOX1hDVV9W
RVJTSU9OLAoKICAgIF9TQ19YT1BFTl9VTklYLAoKICAgIF9TQ19YT1BFTl9DUllQVCwKCiAgICBf
U0NfWE9QRU5fRU5IX0kxOE4sCgogICAgX1NDX1hPUEVOX1NITSwKCgogICAgX1NDXzJfQ0hBUl9U
RVJNLAoKICAgIF9TQ18yX0NfVkVSU0lPTiwKCiAgICBfU0NfMl9VUEUsCgoKICAgIF9TQ19YT1BF
Tl9YUEcyLAoKICAgIF9TQ19YT1BFTl9YUEczLAoKICAgIF9TQ19YT1BFTl9YUEc0LAoKCiAgICBf
U0NfQ0hBUl9CSVQsCgogICAgX1NDX0NIQVJfTUFYLAoKICAgIF9TQ19DSEFSX01JTiwKCiAgICBf
U0NfSU5UX01BWCwKCiAgICBfU0NfSU5UX01JTiwKCiAgICBfU0NfTE9OR19CSVQsCgogICAgX1ND
X1dPUkRfQklULAoKICAgIF9TQ19NQl9MRU5fTUFYLAoKICAgIF9TQ19OWkVSTywKCiAgICBfU0Nf
U1NJWkVfTUFYLAoKICAgIF9TQ19TQ0hBUl9NQVgsCgogICAgX1NDX1NDSEFSX01JTiwKCiAgICBf
U0NfU0hSVF9NQVgsCgogICAgX1NDX1NIUlRfTUlOLAoKICAgIF9TQ19VQ0hBUl9NQVgsCgogICAg
X1NDX1VJTlRfTUFYLAoKICAgIF9TQ19VTE9OR19NQVgsCgogICAgX1NDX1VTSFJUX01BWCwKCgog
ICAgX1NDX05MX0FSR01BWCwKCiAgICBfU0NfTkxfTEFOR01BWCwKCiAgICBfU0NfTkxfTVNHTUFY
LAoKICAgIF9TQ19OTF9OTUFYLAoKICAgIF9TQ19OTF9TRVRNQVgsCgogICAgX1NDX05MX1RFWFRN
QVgsCgoKICAgIF9TQ19YQlM1X0lMUDMyX09GRjMyLAoKICAgIF9TQ19YQlM1X0lMUDMyX09GRkJJ
RywKCiAgICBfU0NfWEJTNV9MUDY0X09GRjY0LAoKICAgIF9TQ19YQlM1X0xQQklHX09GRkJJRywK
CgogICAgX1NDX1hPUEVOX0xFR0FDWSwKCiAgICBfU0NfWE9QRU5fUkVBTFRJTUUsCgogICAgX1ND
X1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMsCgoKICAgIF9TQ19BRFZJU09SWV9JTkZPLAoKICAgIF9T
Q19CQVJSSUVSUywKCiAgICBfU0NfQkFTRSwKCiAgICBfU0NfQ19MQU5HX1NVUFBPUlQsCgogICAg
X1NDX0NfTEFOR19TVVBQT1JUX1IsCgogICAgX1NDX0NMT0NLX1NFTEVDVElPTiwKCiAgICBfU0Nf
Q1BVVElNRSwKCiAgICBfU0NfVEhSRUFEX0NQVVRJTUUsCgogICAgX1NDX0RFVklDRV9JTywKCiAg
ICBfU0NfREVWSUNFX1NQRUNJRklDLAoKICAgIF9TQ19ERVZJQ0VfU1BFQ0lGSUNfUiwKCiAgICBf
U0NfRkRfTUdNVCwKCiAgICBfU0NfRklGTywKCiAgICBfU0NfUElQRSwKCiAgICBfU0NfRklMRV9B
VFRSSUJVVEVTLAoKICAgIF9TQ19GSUxFX0xPQ0tJTkcsCgogICAgX1NDX0ZJTEVfU1lTVEVNLAoK
ICAgIF9TQ19NT05PVE9OSUNfQ0xPQ0ssCgogICAgX1NDX01VTFRJX1BST0NFU1MsCgogICAgX1ND
X1NJTkdMRV9QUk9DRVNTLAoKICAgIF9TQ19ORVRXT1JLSU5HLAoKICAgIF9TQ19SRUFERVJfV1JJ
VEVSX0xPQ0tTLAoKICAgIF9TQ19TUElOX0xPQ0tTLAoKICAgIF9TQ19SRUdFWFAsCgogICAgX1ND
X1JFR0VYX1ZFUlNJT04sCgogICAgX1NDX1NIRUxMLAoKICAgIF9TQ19TSUdOQUxTLAoKICAgIF9T
Q19TUEFXTiwKCiAgICBfU0NfU1BPUkFESUNfU0VSVkVSLAoKICAgIF9TQ19USFJFQURfU1BPUkFE
SUNfU0VSVkVSLAoKICAgIF9TQ19TWVNURU1fREFUQUJBU0UsCgogICAgX1NDX1NZU1RFTV9EQVRB
QkFTRV9SLAoKICAgIF9TQ19USU1FT1VUUywKCiAgICBfU0NfVFlQRURfTUVNT1JZX09CSkVDVFMs
CgogICAgX1NDX1VTRVJfR1JPVVBTLAoKICAgIF9TQ19VU0VSX0dST1VQU19SLAoKICAgIF9TQ18y
X1BCUywKCiAgICBfU0NfMl9QQlNfQUNDT1VOVElORywKCiAgICBfU0NfMl9QQlNfTE9DQVRFLAoK
ICAgIF9TQ18yX1BCU19NRVNTQUdFLAoKICAgIF9TQ18yX1BCU19UUkFDSywKCiAgICBfU0NfU1lN
TE9PUF9NQVgsCgogICAgX1NDX1NUUkVBTVMsCgogICAgX1NDXzJfUEJTX0NIRUNLUE9JTlQsCgoK
ICAgIF9TQ19WNl9JTFAzMl9PRkYzMiwKCiAgICBfU0NfVjZfSUxQMzJfT0ZGQklHLAoKICAgIF9T
Q19WNl9MUDY0X09GRjY0LAoKICAgIF9TQ19WNl9MUEJJR19PRkZCSUcsCgoKICAgIF9TQ19IT1NU
X05BTUVfTUFYLAoKICAgIF9TQ19UUkFDRSwKCiAgICBfU0NfVFJBQ0VfRVZFTlRfRklMVEVSLAoK
ICAgIF9TQ19UUkFDRV9JTkhFUklULAoKICAgIF9TQ19UUkFDRV9MT0cKCiAgfTsKCgoKCgplbnVt
CiAgewogICAgX0NTX1BBVEgsCgoKCgogICAgX0NTX0xGU19DRkxBR1MgPSAxMDAwLAoKICAgIF9D
U19MRlNfTERGTEFHUywKCiAgICBfQ1NfTEZTX0xJQlMsCgogICAgX0NTX0xGU19MSU5URkxBR1Ms
CgogICAgX0NTX0xGUzY0X0NGTEFHUywKCiAgICBfQ1NfTEZTNjRfTERGTEFHUywKCiAgICBfQ1Nf
TEZTNjRfTElCUywKCiAgICBfQ1NfTEZTNjRfTElOVEZMQUdTLAojIDU2MyAiL3Vzci9pbmNsdWRl
L2JpdHMvY29uZm5hbWUuaCIgMwogICAgX0NTX1Y2X1dJRFRIX1JFU1RSSUNURURfRU5WUwoKICB9
OwojIDUwMSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgpleHRlcm4gbG9uZyBpbnQgcGF0
aGNvbmYgKF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKSA7CgoKZXh0ZXJuIGxvbmcg
aW50IGZwYXRoY29uZiAoaW50IF9fZmQsIGludCBfX25hbWUpIDsKCgpleHRlcm4gbG9uZyBpbnQg
c3lzY29uZiAoaW50IF9fbmFtZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRl
cm4gc2l6ZV90IGNvbmZzdHIgKGludCBfX25hbWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4p
IDsKCgoKCmV4dGVybiBfX3BpZF90IGdldHBpZCAodm9pZCkgOwoKCmV4dGVybiBfX3BpZF90IGdl
dHBwaWQgKHZvaWQpIDsKCgoKCmV4dGVybiBfX3BpZF90IGdldHBncnAgKHZvaWQpIDsKIyA1MzYg
Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19waWRfdCBfX2dldHBnaWQgKF9fcGlk
X3QgX19waWQpIDsKIyA1NDUgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHNl
dHBnaWQgKF9fcGlkX3QgX19waWQsIF9fcGlkX3QgX19wZ2lkKSA7CiMgNTYyICIvdXNyL2luY2x1
ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBzZXRwZ3JwICh2b2lkKSA7CiMgNTgwICIvdXNyL2lu
Y2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fcGlkX3Qgc2V0c2lkICh2b2lkKSA7CgoKCgoKCgpl
eHRlcm4gX191aWRfdCBnZXR1aWQgKHZvaWQpIDsKCgpleHRlcm4gX191aWRfdCBnZXRldWlkICh2
b2lkKSA7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICh2b2lkKSA7CgoKZXh0ZXJuIF9fZ2lkX3Qg
Z2V0ZWdpZCAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBnZXRncm91cHMgKGludCBfX3NpemUsIF9f
Z2lkX3QgX19saXN0W10pIDsKIyA2MTMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4g
aW50IHNldHVpZCAoX191aWRfdCBfX3VpZCkgOwoKCgoKZXh0ZXJuIGludCBzZXRyZXVpZCAoX191
aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19ldWlkKSA7CgoKCgpleHRlcm4gaW50IHNldGV1aWQgKF9f
dWlkX3QgX191aWQpIDsKCgoKCgoKZXh0ZXJuIGludCBzZXRnaWQgKF9fZ2lkX3QgX19naWQpIDsK
CgoKCmV4dGVybiBpbnQgc2V0cmVnaWQgKF9fZ2lkX3QgX19yZ2lkLCBfX2dpZF90IF9fZWdpZCkg
OwoKCgoKZXh0ZXJuIGludCBzZXRlZ2lkIChfX2dpZF90IF9fZ2lkKSA7CgoKCgoKCmV4dGVybiBf
X3BpZF90IGZvcmsgKHZvaWQpIDsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgdmZvcmsgKHZvaWQpIDsK
CgoKCgpleHRlcm4gY2hhciAqdHR5bmFtZSAoaW50IF9fZmQpIDsKCgoKZXh0ZXJuIGludCB0dHlu
YW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSA7CgoKCmV4dGVy
biBpbnQgaXNhdHR5IChpbnQgX19mZCkgOwoKCgoKCmV4dGVybiBpbnQgdHR5c2xvdCAodm9pZCkg
OwoKCgoKZXh0ZXJuIGludCBsaW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFy
ICpfX3RvKSA7CgoKCmV4dGVybiBpbnQgc3ltbGluayAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9f
Y29uc3QgY2hhciAqX190bykgOwoKCgoKZXh0ZXJuIGludCByZWFkbGluayAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fcGF0aCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IF9fbGVuKSA7CgoKCmV4dGVybiBpbnQgdW5saW5rIChfX2NvbnN0IGNo
YXIgKl9fbmFtZSkgOwoKCmV4dGVybiBpbnQgcm1kaXIgKF9fY29uc3QgY2hhciAqX19wYXRoKSA7
CgoKCmV4dGVybiBfX3BpZF90IHRjZ2V0cGdycCAoaW50IF9fZmQpIDsKCgpleHRlcm4gaW50IHRj
c2V0cGdycCAoaW50IF9fZmQsIF9fcGlkX3QgX19wZ3JwX2lkKSA7CgoKCmV4dGVybiBjaGFyICpn
ZXRsb2dpbiAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBnZXRsb2dpbl9yIChjaGFyICpfX25hbWUs
IHNpemVfdCBfX25hbWVfbGVuKSA7CgoKCgpleHRlcm4gaW50IHNldGxvZ2luIChfX2NvbnN0IGNo
YXIgKl9fbmFtZSkgOwojIDcyNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2dldG9wdC5oIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVy
biBjaGFyICpvcHRhcmc7CiMgNjEgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRlcm4gaW50
IG9wdGluZDsKCgoKCmV4dGVybiBpbnQgb3B0ZXJyOwoKCgpleHRlcm4gaW50IG9wdG9wdDsKIyAx
NDUgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRlcm4gaW50IGdldG9wdCAoaW50IF9fX2Fy
Z2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LCBjb25zdCBjaGFyICpfX3Nob3J0b3B0cyk7CiMgNzI3
ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgoKCgoKZXh0ZXJuIGludCBnZXRob3N0bmFt
ZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIDsKCgoKCgoKZXh0ZXJuIGludCBzZXRob3N0
bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgOwoKCgpleHRlcm4gaW50
IHNldGhvc3RpZCAobG9uZyBpbnQgX19pZCkgOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFt
ZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBzZXRkb21haW5uYW1l
IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSA7CgoKCgoKZXh0ZXJuIGludCB2
aGFuZ3VwICh2b2lkKSA7CgoKZXh0ZXJuIGludCByZXZva2UgKF9fY29uc3QgY2hhciAqX19maWxl
KSA7CgoKCgoKCgpleHRlcm4gaW50IHByb2ZpbCAodW5zaWduZWQgc2hvcnQgaW50ICpfX3NhbXBs
ZV9idWZmZXIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vZmZz
ZXQsIHVuc2lnbmVkIGludCBfX3NjYWxlKSA7CgoKCgoKZXh0ZXJuIGludCBhY2N0IChfX2NvbnN0
IGNoYXIgKl9fbmFtZSkgOwoKCgpleHRlcm4gY2hhciAqZ2V0dXNlcnNoZWxsICh2b2lkKSA7CmV4
dGVybiB2b2lkIGVuZHVzZXJzaGVsbCAodm9pZCkgOwpleHRlcm4gdm9pZCBzZXR1c2Vyc2hlbGwg
KHZvaWQpIDsKCgoKCgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9jaGRpciwgaW50IF9fbm9j
bG9zZSkgOwoKCgoKCgpleHRlcm4gaW50IGNocm9vdCAoX19jb25zdCBjaGFyICpfX3BhdGgpIDsK
CgoKZXh0ZXJuIGNoYXIgKmdldHBhc3MgKF9fY29uc3QgY2hhciAqX19wcm9tcHQpIDsKCgoKCgpl
eHRlcm4gaW50IGZzeW5jIChpbnQgX19mZCkgOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgZ2V0aG9z
dGlkICh2b2lkKSA7CgoKZXh0ZXJuIHZvaWQgc3luYyAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBn
ZXRwYWdlc2l6ZSAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0
ZXJuIGludCB0cnVuY2F0ZSAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmNjRfdCBfX2xlbmd0
aCkgX19hc21fXyAoIiIgInRydW5jYXRlNjQiKTsKIyA4NDQgIi91c3IvaW5jbHVkZS91bmlzdGQu
aCIgMwpleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX2xlbmd0aCkg
X19hc21fXyAoIiIgImZ0cnVuY2F0ZTY0Iik7CiMgODU3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi
IDMKZXh0ZXJuIGludCBnZXRkdGFibGVzaXplICh2b2lkKSA7CiMgODY2ICIvdXNyL2luY2x1ZGUv
dW5pc3RkLmgiIDMKZXh0ZXJuIGludCBicmsgKHZvaWQgKl9fYWRkcikgOwoKCgoKCmV4dGVybiB2
b2lkICpzYnJrIChpbnRwdHJfdCBfX2RlbHRhKSA7CiMgODg3ICIvdXNyL2luY2x1ZGUvdW5pc3Rk
LmgiIDMKZXh0ZXJuIGxvbmcgaW50IHN5c2NhbGwgKGxvbmcgaW50IF9fc3lzbm8sIC4uLikgOwoj
IDkxMCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgbG9ja2YgKGludCBfX2Zk
LCBpbnQgX19jbWQsIF9fb2ZmNjRfdCBfX2xlbikgX19hc21fXyAoIiIgImxvY2tmNjQiKTsKIyA5
MzggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGZkYXRhc3luYyAoaW50IF9f
ZmlsZGVzKSA7CiMgOTgzICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBwdGhy
ZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgOwoKCgojIDQzICJnc2Nhbm5lci5jIiAyCgoKCgoK
IyAxICJnbGliLmgiIDEKIyAzMCAiZ2xpYi5oIgojIDEgIi4uL2dsaWIvZ2FsbG9jYS5oIiAxCiMg
MzAgIi4uL2dsaWIvZ2FsbG9jYS5oIgojIDEgIi4uL2dsaWIvZ3R5cGVzLmgiIDEKIyAzMCAiLi4v
Z2xpYi9ndHlwZXMuaCIKIyAxICIuLi9nbGliY29uZmlnLmgiIDEKIyA5ICIuLi9nbGliY29uZmln
LmgiCiMgMSAiLi4vZ2xpYi9nbWFjcm9zLmgiIDEKIyAzNiAiLi4vZ2xpYi9nbWFjcm9zLmgiCiMg
MSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKIyAxNTEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIv
aW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMgMzcgIi4uL2dsaWIv
Z21hY3Jvcy5oIiAyCiMgMTAgIi4uL2dsaWJjb25maWcuaCIgMgoKIyAxICIvdXNyL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIv
dXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgi
IDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUv
c3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4yLjIvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMyICIvdXNyL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvbGltaXRzLmgiIDEgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9i
aXRzL3Bvc2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAx
IDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvbGludXgvbGltaXRzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0u
aCIgMiAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAi
L3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3Np
eDJfbGltLmgiIDEgMwojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAxMzMgIi91
c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9saW1pdHMuaCIg
MiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRl
L3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjIuMi9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAxMiAiLi4vZ2xpYmNvbmZpZy5oIiAyCiMg
MSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL2Zsb2F0
LmgiIDEgMwojIDEzICIuLi9nbGliY29uZmlnLmgiIDIKCgoKCiMgMzYgIi4uL2dsaWJjb25maWcu
aCIKdHlwZWRlZiBzaWduZWQgY2hhciBnaW50ODsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGd1aW50
ODsKdHlwZWRlZiBzaWduZWQgc2hvcnQgZ2ludDE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGd1
aW50MTY7CgoKdHlwZWRlZiBzaWduZWQgaW50IGdpbnQzMjsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
Z3VpbnQzMjsKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGdpbnQ2
NDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBndWludDY0OwojIDU5
ICIuLi9nbGliY29uZmlnLmgiCnR5cGVkZWYgc2lnbmVkIGludCBnc3NpemU7CnR5cGVkZWYgdW5z
aWduZWQgaW50IGdzaXplOwojIDExMyAiLi4vZ2xpYmNvbmZpZy5oIgp0eXBlZGVmIHN0cnVjdCBf
R1N0YXRpY011dGV4IEdTdGF0aWNNdXRleDsKc3RydWN0IF9HU3RhdGljTXV0ZXgKewogIHN0cnVj
dCBfR011dGV4ICpydW50aW1lX211dGV4OwogIHVuaW9uIHsKICAgIGNoYXIgcGFkWzI0XTsKICAg
IGRvdWJsZSBkdW1teV9kb3VibGU7CiAgICB2b2lkICpkdW1teV9wb2ludGVyOwogICAgbG9uZyBk
dW1teV9sb25nOwogIH0gc3RhdGljX211dGV4Owp9OwoKCgoKCgp0eXBlZGVmIHVuaW9uIF9HU3lz
dGVtVGhyZWFkIEdTeXN0ZW1UaHJlYWQ7CnVuaW9uIF9HU3lzdGVtVGhyZWFkCnsKICBjaGFyIGRh
dGFbNF07CiAgZG91YmxlIGR1bW15X2RvdWJsZTsKICB2b2lkICpkdW1teV9wb2ludGVyOwogIGxv
bmcgZHVtbXlfbG9uZzsKfTsKIyAxNzAgIi4uL2dsaWJjb25maWcuaCIKCiMgMzEgIi4uL2dsaWIv
Z3R5cGVzLmgiIDIKCgojIDQxICIuLi9nbGliL2d0eXBlcy5oIgp0eXBlZGVmIGNoYXIgZ2NoYXI7
CnR5cGVkZWYgc2hvcnQgZ3Nob3J0Owp0eXBlZGVmIGxvbmcgZ2xvbmc7CnR5cGVkZWYgaW50IGdp
bnQ7CnR5cGVkZWYgZ2ludCBnYm9vbGVhbjsKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBndWNoYXI7
CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgZ3VzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGd1
bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgZ3VpbnQ7Cgp0eXBlZGVmIGZsb2F0IGdmbG9hdDsK
dHlwZWRlZiBkb3VibGUgZ2RvdWJsZTsKIyA2NiAiLi4vZ2xpYi9ndHlwZXMuaCIKdHlwZWRlZiB2
b2lkKiBncG9pbnRlcjsKdHlwZWRlZiBjb25zdCB2b2lkICpnY29uc3Rwb2ludGVyOwoKdHlwZWRl
ZiBnaW50ICgqR0NvbXBhcmVGdW5jKSAoZ2NvbnN0cG9pbnRlciBhLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBiKTsKdHlwZWRl
ZiBnaW50ICgqR0NvbXBhcmVEYXRhRnVuYykgKGdjb25zdHBvaW50ZXIgYSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgYiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVz
ZXJfZGF0YSk7CnR5cGVkZWYgZ2Jvb2xlYW4gKCpHRXF1YWxGdW5jKSAoZ2NvbnN0cG9pbnRlciBh
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0
cG9pbnRlciBiKTsKdHlwZWRlZiB2b2lkICgqR0Rlc3Ryb3lOb3RpZnkpIChncG9pbnRlciBkYXRh
KTsKdHlwZWRlZiB2b2lkICgqR0Z1bmMpIChncG9pbnRlciBkYXRhLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKdHlw
ZWRlZiBndWludCAoKkdIYXNoRnVuYykgKGdjb25zdHBvaW50ZXIga2V5KTsKdHlwZWRlZiB2b2lk
ICgqR0hGdW5jKSAoZ3BvaW50ZXIga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwp0eXBlZGVmIHZv
aWQgKCpHRnJlZUZ1bmMpIChncG9pbnRlciBkYXRhKTsKIyAzMjkgIi4uL2dsaWIvZ3R5cGVzLmgi
CnR5cGVkZWYgdW5pb24gX0dEb3VibGVJRUVFNzU0IEdEb3VibGVJRUVFNzU0Owp0eXBlZGVmIHVu
aW9uIF9HRmxvYXRJRUVFNzU0IEdGbG9hdElFRUU3NTQ7CgoKCgoKdW5pb24gX0dGbG9hdElFRUU3
NTQKewogIGdmbG9hdCB2X2Zsb2F0OwogIHN0cnVjdCB7CiAgICBndWludCBtYW50aXNzYSA6IDIz
OwogICAgZ3VpbnQgYmlhc2VkX2V4cG9uZW50IDogODsKICAgIGd1aW50IHNpZ24gOiAxOwogIH0g
bXBuOwp9Owp1bmlvbiBfR0RvdWJsZUlFRUU3NTQKewogIGdkb3VibGUgdl9kb3VibGU7CiAgc3Ry
dWN0IHsKICAgIGd1aW50IG1hbnRpc3NhX2xvdyA6IDMyOwogICAgZ3VpbnQgbWFudGlzc2FfaGln
aCA6IDIwOwogICAgZ3VpbnQgYmlhc2VkX2V4cG9uZW50IDogMTE7CiAgICBndWludCBzaWduIDog
MTsKICB9IG1wbjsKfTsKIyAzNzkgIi4uL2dsaWIvZ3R5cGVzLmgiCnR5cGVkZWYgc3RydWN0IF9H
VGltZVZhbCBHVGltZVZhbDsKCnN0cnVjdCBfR1RpbWVWYWwKewogIGdsb25nIHR2X3NlYzsKICBn
bG9uZyB0dl91c2VjOwp9OwoKCiMgMzEgIi4uL2dsaWIvZ2FsbG9jYS5oIiAyCiMgMzEgImdsaWIu
aCIgMgojIDEgIi4uL2dsaWIvZ2FycmF5LmgiIDEKIyAzMiAiLi4vZ2xpYi9nYXJyYXkuaCIKCgp0
eXBlZGVmIHN0cnVjdCBfR0FycmF5IEdBcnJheTsKdHlwZWRlZiBzdHJ1Y3QgX0dCeXRlQXJyYXkg
R0J5dGVBcnJheTsKdHlwZWRlZiBzdHJ1Y3QgX0dQdHJBcnJheSBHUHRyQXJyYXk7CgpzdHJ1Y3Qg
X0dBcnJheQp7CiAgZ2NoYXIgKmRhdGE7CiAgZ3VpbnQgbGVuOwp9OwoKc3RydWN0IF9HQnl0ZUFy
cmF5CnsKICBndWludDggKmRhdGE7CiAgZ3VpbnQgbGVuOwp9OwoKc3RydWN0IF9HUHRyQXJyYXkK
ewogIGdwb2ludGVyICpwZGF0YTsKICBndWludCBsZW47Cn07CiMgNjYgIi4uL2dsaWIvZ2FycmF5
LmgiCkdBcnJheSogZ19hcnJheV9uZXcgKGdib29sZWFuIHplcm9fdGVybWluYXRlZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBjbGVhcl8sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgZWxlbWVudF9zaXplKTsKR0FycmF5KiBnX2Fy
cmF5X3NpemVkX25ldyAoZ2Jvb2xlYW4gemVyb190ZXJtaW5hdGVkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdib29sZWFuIGNsZWFyXywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBndWludCBlbGVtZW50X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3VpbnQgcmVzZXJ2ZWRfc2l6ZSk7CmdjaGFyKiBnX2FycmF5X2ZyZWUgKEdB
cnJheSAqYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4g
ZnJlZV9zZWdtZW50KTsKR0FycmF5KiBnX2FycmF5X2FwcGVuZF92YWxzIChHQXJyYXkgKmFycmF5
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBsZW4pOwpHQXJyYXkqIGdf
YXJyYXlfcHJlcGVuZF92YWxzIChHQXJyYXkgKmFycmF5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBndWludCBsZW4pOwpHQXJyYXkqIGdfYXJyYXlfaW5zZXJ0X3ZhbHMgKEdBcnJh
eSAqYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgaW5kZXhf
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBsZW4pOwpHQXJyYXkqIGdf
YXJyYXlfc2V0X3NpemUgKEdBcnJheSAqYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3VpbnQgbGVuZ3RoKTsKR0FycmF5KiBnX2FycmF5X3JlbW92ZV9pbmRleCAoR0Fy
cmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBpbmRl
eF8pOwpHQXJyYXkqIGdfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QgKEdBcnJheSAqYXJyYXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgaW5kZXhfKTsKdm9pZCBnX2Fy
cmF5X3NvcnQgKEdBcnJheSAqYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0NvbXBhcmVGdW5jIGNvbXBhcmVfZnVuYyk7CnZvaWQgZ19hcnJheV9zb3J0X3dpdGhfZGF0
YSAoR0FycmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ29t
cGFyZURhdGFGdW5jIGNvbXBhcmVfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwoKCgoKCgoKR1B0ckFycmF5KiBnX3B0cl9hcnJheV9u
ZXcgKHZvaWQpOwpHUHRyQXJyYXkqIGdfcHRyX2FycmF5X3NpemVkX25ldyAoZ3VpbnQgcmVzZXJ2
ZWRfc2l6ZSk7Cmdwb2ludGVyKiBnX3B0cl9hcnJheV9mcmVlIChHUHRyQXJyYXkgKmFycmF5LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gZnJlZV9z
ZWcpOwp2b2lkIGdfcHRyX2FycmF5X3NldF9zaXplIChHUHRyQXJyYXkgKmFycmF5LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBsZW5ndGgpOwpncG9pbnRl
ciBnX3B0cl9hcnJheV9yZW1vdmVfaW5kZXggKEdQdHJBcnJheSAqYXJyYXksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBpbmRleF8pOwpncG9pbnRlciBn
X3B0cl9hcnJheV9yZW1vdmVfaW5kZXhfZmFzdCAoR1B0ckFycmF5ICphcnJheSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IGluZGV4Xyk7Cmdib29sZWFu
IGdfcHRyX2FycmF5X3JlbW92ZSAoR1B0ckFycmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwpnYm9vbGVhbiBnX3B0cl9h
cnJheV9yZW1vdmVfZmFzdCAoR1B0ckFycmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwp2b2lkIGdfcHRyX2FycmF5X2Fk
ZCAoR1B0ckFycmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdwb2ludGVyIGRhdGEpOwp2b2lkIGdfcHRyX2FycmF5X3NvcnQgKEdQdHJBcnJheSAq
YXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ29tcGFy
ZUZ1bmMgY29tcGFyZV9mdW5jKTsKdm9pZCBnX3B0cl9hcnJheV9zb3J0X3dpdGhfZGF0YSAoR1B0
ckFycmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDb21wYXJlRGF0YUZ1bmMgY29tcGFyZV9mdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKCgoKCgoKR0J5dGVBcnJheSog
Z19ieXRlX2FycmF5X25ldyAodm9pZCk7CkdCeXRlQXJyYXkqIGdfYnl0ZV9hcnJheV9zaXplZF9u
ZXcgKGd1aW50IHJlc2VydmVkX3NpemUpOwpndWludDgqIGdfYnl0ZV9hcnJheV9mcmVlIChHQnl0
ZUFycmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnYm9vbGVhbiBmcmVlX3NlZ21lbnQpOwpHQnl0ZUFycmF5KiBnX2J5dGVfYXJyYXlfYXBwZW5k
IChHQnl0ZUFycmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBndWludDggKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3VpbnQgbGVuKTsKR0J5dGVBcnJheSogZ19ieXRlX2FycmF5X3ByZXBl
bmQgKEdCeXRlQXJyYXkgKmFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGd1aW50OCAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBndWludCBsZW4pOwpHQnl0ZUFycmF5KiBnX2J5dGVfYXJyYXlfc2V0
X3NpemUgKEdCeXRlQXJyYXkgKmFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGd1aW50IGxlbmd0aCk7CkdCeXRlQXJyYXkqIGdfYnl0ZV9hcnJheV9yZW1v
dmVfaW5kZXggKEdCeXRlQXJyYXkgKmFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGd1aW50IGluZGV4Xyk7CkdCeXRlQXJyYXkqIGdfYnl0ZV9hcnJheV9y
ZW1vdmVfaW5kZXhfZmFzdCAoR0J5dGVBcnJheSAqYXJyYXksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgaW5kZXhfKTsKdm9pZCBnX2J5dGVfYXJyYXlf
c29ydCAoR0J5dGVBcnJheSAqYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0NvbXBhcmVGdW5jIGNvbXBhcmVfZnVuYyk7CnZvaWQgZ19ieXRlX2FycmF5
X3NvcnRfd2l0aF9kYXRhIChHQnl0ZUFycmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQ29tcGFyZURhdGFGdW5jIGNvbXBhcmVfZnVuYywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2Rh
dGEpOwoKCgojIDMyICJnbGliLmgiIDIKIyAxICIuLi9nbGliL2dhc3luY3F1ZXVlLmgiIDEKIyAz
MCAiLi4vZ2xpYi9nYXN5bmNxdWV1ZS5oIgojIDEgIi4uL2dsaWIvZ3RocmVhZC5oIiAxCiMgMzAg
Ii4uL2dsaWIvZ3RocmVhZC5oIgojIDEgIi4uL2dsaWIvZ2Vycm9yLmgiIDEKIyAyNCAiLi4vZ2xp
Yi9nZXJyb3IuaCIKIyAxICIuLi9nbGliL2dxdWFyay5oIiAxCiMgMzIgIi4uL2dsaWIvZ3F1YXJr
LmgiCgoKdHlwZWRlZiBndWludDMyIEdRdWFyazsKCgoKR1F1YXJrIGdfcXVhcmtfdHJ5X3N0cmlu
ZyAoY29uc3QgZ2NoYXIgKnN0cmluZyk7CkdRdWFyayBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmlu
ZyAoY29uc3QgZ2NoYXIgKnN0cmluZyk7CkdRdWFyayBnX3F1YXJrX2Zyb21fc3RyaW5nIChjb25z
dCBnY2hhciAqc3RyaW5nKTsKY29uc3QgZ2NoYXIqIGdfcXVhcmtfdG9fc3RyaW5nIChHUXVhcmsg
cXVhcmspIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwoKCiMgMjUgIi4uL2dsaWIvZ2Vycm9y
LmgiIDIKCgoKdHlwZWRlZiBzdHJ1Y3QgX0dFcnJvciBHRXJyb3I7CgpzdHJ1Y3QgX0dFcnJvcgp7
CiAgR1F1YXJrIGRvbWFpbjsKICBnaW50IGNvZGU7CiAgZ2NoYXIgKm1lc3NhZ2U7Cn07CgpHRXJy
b3IqIGdfZXJyb3JfbmV3IChHUXVhcmsgZG9tYWluLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdpbnQgY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
Y2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikgX19hdHRy
aWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCkdFcnJvciogZ19lcnJv
cl9uZXdfbGl0ZXJhbCAoR1F1YXJrIGRvbWFpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnaW50IGNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No
YXIgKm1lc3NhZ2UpOwoKdm9pZCBnX2Vycm9yX2ZyZWUgKEdFcnJvciAqZXJyb3IpOwpHRXJyb3Iq
IGdfZXJyb3JfY29weSAoY29uc3QgR0Vycm9yICplcnJvcik7CgpnYm9vbGVhbiBnX2Vycm9yX21h
dGNoZXMgKGNvbnN0IEdFcnJvciAqZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR1F1YXJrIGRvbWFpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGNv
ZGUpOwoKCgoKdm9pZCBnX3NldF9lcnJvciAoR0Vycm9yICoqZXJyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdRdWFyayBkb21haW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2ludCBjb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdj
aGFyICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSBfX2F0dHJp
YnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA0LCA1KSkpOwoKCgp2b2lkIGdfcHJvcGFn
YXRlX2Vycm9yIChHRXJyb3IgKipkZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdFcnJvciAqc3JjKTsKCgp2b2lkIGdfY2xlYXJfZXJyb3IgKEdFcnJvciAqKmVycik7CgoKCiMg
MzEgIi4uL2dsaWIvZ3RocmVhZC5oIiAyCgoKCgoKCgpleHRlcm4gR1F1YXJrIGdfdGhyZWFkX2Vy
cm9yX3F1YXJrICh2b2lkKTsKCgp0eXBlZGVmIGVudW0KewogIEdfVEhSRUFEX0VSUk9SX0FHQUlO
Cn0gR1RocmVhZEVycm9yOwoKdHlwZWRlZiBncG9pbnRlciAoKkdUaHJlYWRGdW5jKSAoZ3BvaW50
ZXIgZGF0YSk7Cgp0eXBlZGVmIGVudW0KewogIEdfVEhSRUFEX1BSSU9SSVRZX0xPVywKICBHX1RI
UkVBRF9QUklPUklUWV9OT1JNQUwsCiAgR19USFJFQURfUFJJT1JJVFlfSElHSCwKICBHX1RIUkVB
RF9QUklPUklUWV9VUkdFTlQKfSBHVGhyZWFkUHJpb3JpdHk7Cgp0eXBlZGVmIHN0cnVjdCBfR1Ro
cmVhZCBHVGhyZWFkOwpzdHJ1Y3QgX0dUaHJlYWQKewoKICBHVGhyZWFkRnVuYyBmdW5jOwogIGdw
b2ludGVyIGRhdGE7CiAgZ2Jvb2xlYW4gam9pbmFibGU7CiAgR1RocmVhZFByaW9yaXR5IHByaW9y
aXR5Owp9OwoKdHlwZWRlZiBzdHJ1Y3QgX0dNdXRleCBHTXV0ZXg7CnR5cGVkZWYgc3RydWN0IF9H
Q29uZCBHQ29uZDsKdHlwZWRlZiBzdHJ1Y3QgX0dQcml2YXRlIEdQcml2YXRlOwp0eXBlZGVmIHN0
cnVjdCBfR1N0YXRpY1ByaXZhdGUgR1N0YXRpY1ByaXZhdGU7Cgp0eXBlZGVmIHN0cnVjdCBfR1Ro
cmVhZEZ1bmN0aW9ucyBHVGhyZWFkRnVuY3Rpb25zOwpzdHJ1Y3QgX0dUaHJlYWRGdW5jdGlvbnMK
ewogIEdNdXRleCogKCptdXRleF9uZXcpICh2b2lkKTsKICB2b2lkICgqbXV0ZXhfbG9jaykgKEdN
dXRleCAqbXV0ZXgpOwogIGdib29sZWFuICgqbXV0ZXhfdHJ5bG9jaykgKEdNdXRleCAqbXV0ZXgp
OwogIHZvaWQgKCptdXRleF91bmxvY2spIChHTXV0ZXggKm11dGV4KTsKICB2b2lkICgqbXV0ZXhf
ZnJlZSkgKEdNdXRleCAqbXV0ZXgpOwogIEdDb25kKiAoKmNvbmRfbmV3KSAodm9pZCk7CiAgdm9p
ZCAoKmNvbmRfc2lnbmFsKSAoR0NvbmQgKmNvbmQpOwogIHZvaWQgKCpjb25kX2Jyb2FkY2FzdCkg
KEdDb25kICpjb25kKTsKICB2b2lkICgqY29uZF93YWl0KSAoR0NvbmQgKmNvbmQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR011dGV4ICptdXRleCk7CiAgZ2Jvb2xlYW4gKCpj
b25kX3RpbWVkX3dhaXQpIChHQ29uZCAqY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTXV0ZXggKm11dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdUaW1lVmFsICplbmRfdGltZSk7CiAgdm9pZCAoKmNvbmRfZnJlZSkgKEdDb25kICpjb25kKTsK
ICBHUHJpdmF0ZSogKCpwcml2YXRlX25ldykgKEdEZXN0cm95Tm90aWZ5IGRlc3RydWN0b3IpOwog
IGdwb2ludGVyICgqcHJpdmF0ZV9nZXQpIChHUHJpdmF0ZSAqcHJpdmF0ZV9rZXkpOwogIHZvaWQg
KCpwcml2YXRlX3NldCkgKEdQcml2YXRlICpwcml2YXRlX2tleSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKTsKICB2b2lkICgqdGhyZWFkX2NyZWF0ZSkg
KEdUaHJlYWRGdW5jIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bv
aW50ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWxvbmcgc3Rh
Y2tfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBqb2lu
YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBib3VuZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVGhyZWFkUHJpb3JpdHkgcHJpb3Jp
dHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdGhyZWFkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsKICB2b2lk
ICgqdGhyZWFkX3lpZWxkKSAodm9pZCk7CiAgdm9pZCAoKnRocmVhZF9qb2luKSAoZ3BvaW50ZXIg
dGhyZWFkKTsKICB2b2lkICgqdGhyZWFkX2V4aXQpICh2b2lkKTsKICB2b2lkICgqdGhyZWFkX3Nl
dF9wcmlvcml0eSkoZ3BvaW50ZXIgdGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdUaHJlYWRQcmlvcml0eSBwcmlvcml0eSk7CiAgdm9pZCAoKnRocmVhZF9zZWxmKSAo
Z3BvaW50ZXIgdGhyZWFkKTsKICBnYm9vbGVhbiAoKnRocmVhZF9lcXVhbCkgKGdwb2ludGVyIHRo
cmVhZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdGhyZWFk
Mik7Cn07CgpleHRlcm4gR1RocmVhZEZ1bmN0aW9ucyBnX3RocmVhZF9mdW5jdGlvbnNfZm9yX2ds
aWJfdXNlOwpleHRlcm4gZ2Jvb2xlYW4gZ190aHJlYWRfdXNlX2RlZmF1bHRfaW1wbDsKZXh0ZXJu
IGdib29sZWFuIGdfdGhyZWFkc19nb3RfaW5pdGlhbGl6ZWQ7CgoKCgoKdm9pZCBnX3RocmVhZF9p
bml0IChHVGhyZWFkRnVuY3Rpb25zICp2dGFibGUpOwojIDEyNyAiLi4vZ2xpYi9ndGhyZWFkLmgi
CnZvaWQgZ190aHJlYWRfaW5pdF93aXRoX2Vycm9yY2hlY2tfbXV0ZXhlcyAoR1RocmVhZEZ1bmN0
aW9ucyogdnRhYmxlKTsKIyAxMzcgIi4uL2dsaWIvZ3RocmVhZC5oIgpHTXV0ZXgqIGdfc3RhdGlj
X211dGV4X2dldF9tdXRleF9pbXBsIChHTXV0ZXggKiptdXRleCk7CiMgMjAzICIuLi9nbGliL2d0
aHJlYWQuaCIKR1RocmVhZCogZ190aHJlYWRfY3JlYXRlX2Z1bGwgKEdUaHJlYWRGdW5jIGZ1bmMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBndWxvbmcgc3RhY2tfc2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnYm9vbGVhbiBqb2luYWJsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnYm9vbGVhbiBib3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHVGhyZWFkUHJpb3JpdHkgcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0Vycm9yICoqZXJyb3IpOwpHVGhyZWFkKiBnX3RocmVhZF9zZWxmICh2b2lkKTsKdm9pZCBn
X3RocmVhZF9leGl0IChncG9pbnRlciByZXR2YWwpOwpncG9pbnRlciBnX3RocmVhZF9qb2luIChH
VGhyZWFkICp0aHJlYWQpOwoKdm9pZCBnX3RocmVhZF9zZXRfcHJpb3JpdHkgKEdUaHJlYWQgKnRo
cmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVGhyZWFkUHJpb3JpdHkgcHJp
b3JpdHkpOwojIDIyOCAiLi4vZ2xpYi9ndGhyZWFkLmgiCnZvaWQgZ19zdGF0aWNfbXV0ZXhfaW5p
dCAoR1N0YXRpY011dGV4ICptdXRleCk7CnZvaWQgZ19zdGF0aWNfbXV0ZXhfZnJlZSAoR1N0YXRp
Y011dGV4ICptdXRleCk7CgpzdHJ1Y3QgX0dTdGF0aWNQcml2YXRlCnsKCiAgZ3VpbnQgaW5kZXg7
Cn07Cgp2b2lkIGdfc3RhdGljX3ByaXZhdGVfaW5pdCAoR1N0YXRpY1ByaXZhdGUgKnByaXZhdGVf
a2V5KTsKZ3BvaW50ZXIgZ19zdGF0aWNfcHJpdmF0ZV9nZXQgKEdTdGF0aWNQcml2YXRlICpwcml2
YXRlX2tleSk7CnZvaWQgZ19zdGF0aWNfcHJpdmF0ZV9zZXQgKEdTdGF0aWNQcml2YXRlICpwcml2
YXRlX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50
ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ry
b3lOb3RpZnkgbm90aWZ5KTsKdm9pZCBnX3N0YXRpY19wcml2YXRlX2ZyZWUgKEdTdGF0aWNQcml2
YXRlICpwcml2YXRlX2tleSk7Cgp0eXBlZGVmIHN0cnVjdCBfR1N0YXRpY1JlY011dGV4IEdTdGF0
aWNSZWNNdXRleDsKc3RydWN0IF9HU3RhdGljUmVjTXV0ZXgKewoKICBHU3RhdGljTXV0ZXggbXV0
ZXg7CiAgZ3VpbnQgZGVwdGg7CiAgR1N5c3RlbVRocmVhZCBvd25lcjsKfTsKCgp2b2lkIGdfc3Rh
dGljX3JlY19tdXRleF9pbml0IChHU3RhdGljUmVjTXV0ZXggKm11dGV4KTsKdm9pZCBnX3N0YXRp
Y19yZWNfbXV0ZXhfbG9jayAoR1N0YXRpY1JlY011dGV4ICptdXRleCk7Cmdib29sZWFuIGdfc3Rh
dGljX3JlY19tdXRleF90cnlsb2NrIChHU3RhdGljUmVjTXV0ZXggKm11dGV4KTsKdm9pZCBnX3N0
YXRpY19yZWNfbXV0ZXhfdW5sb2NrIChHU3RhdGljUmVjTXV0ZXggKm11dGV4KTsKdm9pZCBnX3N0
YXRpY19yZWNfbXV0ZXhfbG9ja19mdWxsIChHU3RhdGljUmVjTXV0ZXggKm11dGV4LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IGRlcHRoKTsKZ3VpbnQgZ19z
dGF0aWNfcmVjX211dGV4X3VubG9ja19mdWxsIChHU3RhdGljUmVjTXV0ZXggKm11dGV4KTsKdm9p
ZCBnX3N0YXRpY19yZWNfbXV0ZXhfZnJlZSAoR1N0YXRpY1JlY011dGV4ICptdXRleCk7Cgp0eXBl
ZGVmIHN0cnVjdCBfR1N0YXRpY1JXTG9jayBHU3RhdGljUldMb2NrOwpzdHJ1Y3QgX0dTdGF0aWNS
V0xvY2sKewoKICBHU3RhdGljTXV0ZXggbXV0ZXg7CiAgR0NvbmQgKnJlYWRfY29uZDsKICBHQ29u
ZCAqd3JpdGVfY29uZDsKICBndWludCByZWFkX2NvdW50ZXI7CiAgZ2Jvb2xlYW4gaGF2ZV93cml0
ZXI7CiAgZ3VpbnQgd2FudF90b19yZWFkOwogIGd1aW50IHdhbnRfdG9fd3JpdGU7Cn07CgoKCnZv
aWQgZ19zdGF0aWNfcndfbG9ja19pbml0IChHU3RhdGljUldMb2NrKiBsb2NrKTsKdm9pZCBnX3N0
YXRpY19yd19sb2NrX3JlYWRlcl9sb2NrIChHU3RhdGljUldMb2NrKiBsb2NrKTsKZ2Jvb2xlYW4g
Z19zdGF0aWNfcndfbG9ja19yZWFkZXJfdHJ5bG9jayAoR1N0YXRpY1JXTG9jayogbG9jayk7CnZv
aWQgZ19zdGF0aWNfcndfbG9ja19yZWFkZXJfdW5sb2NrIChHU3RhdGljUldMb2NrKiBsb2NrKTsK
dm9pZCBnX3N0YXRpY19yd19sb2NrX3dyaXRlcl9sb2NrIChHU3RhdGljUldMb2NrKiBsb2NrKTsK
Z2Jvb2xlYW4gZ19zdGF0aWNfcndfbG9ja193cml0ZXJfdHJ5bG9jayAoR1N0YXRpY1JXTG9jayog
bG9jayk7CnZvaWQgZ19zdGF0aWNfcndfbG9ja193cml0ZXJfdW5sb2NrIChHU3RhdGljUldMb2Nr
KiBsb2NrKTsKdm9pZCBnX3N0YXRpY19yd19sb2NrX2ZyZWUgKEdTdGF0aWNSV0xvY2sqIGxvY2sp
OwojIDI5NiAiLi4vZ2xpYi9ndGhyZWFkLmgiCmV4dGVybiB2b2lkIGdsaWJfZHVtbXlfZGVjbCAo
dm9pZCk7CiMgMzM4ICIuLi9nbGliL2d0aHJlYWQuaCIKCiMgMzEgIi4uL2dsaWIvZ2FzeW5jcXVl
dWUuaCIgMgoKCgp0eXBlZGVmIHN0cnVjdCBfR0FzeW5jUXVldWUgR0FzeW5jUXVldWU7CgoKCgoK
R0FzeW5jUXVldWUqIGdfYXN5bmNfcXVldWVfbmV3ICh2b2lkKTsKCgoKCgp2b2lkIGdfYXN5bmNf
cXVldWVfbG9jayAoR0FzeW5jUXVldWUgKnF1ZXVlKTsKdm9pZCBnX2FzeW5jX3F1ZXVlX3VubG9j
ayAoR0FzeW5jUXVldWUgKnF1ZXVlKTsKIyA1NiAiLi4vZ2xpYi9nYXN5bmNxdWV1ZS5oIgp2b2lk
IGdfYXN5bmNfcXVldWVfcmVmIChHQXN5bmNRdWV1ZSAqcXVldWUpOwp2b2lkIGdfYXN5bmNfcXVl
dWVfcmVmX3VubG9ja2VkIChHQXN5bmNRdWV1ZSAqcXVldWUpOwp2b2lkIGdfYXN5bmNfcXVldWVf
dW5yZWYgKEdBc3luY1F1ZXVlICpxdWV1ZSk7CnZvaWQgZ19hc3luY19xdWV1ZV91bnJlZl9hbmRf
dW5sb2NrIChHQXN5bmNRdWV1ZSAqcXVldWUpOwoKCnZvaWQgZ19hc3luY19xdWV1ZV9wdXNoIChH
QXN5bmNRdWV1ZSAqcXVldWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwp2b2lkIGdfYXN5bmNfcXVldWVfcHVzaF91bmxvY2tl
ZCAoR0FzeW5jUXVldWUgKnF1ZXVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKTsKCgoKZ3BvaW50ZXIgZ19hc3luY19xdWV1ZV9w
b3AgKEdBc3luY1F1ZXVlICpxdWV1ZSk7Cmdwb2ludGVyIGdfYXN5bmNfcXVldWVfcG9wX3VubG9j
a2VkIChHQXN5bmNRdWV1ZSAqcXVldWUpOwoKCmdwb2ludGVyIGdfYXN5bmNfcXVldWVfdHJ5X3Bv
cCAoR0FzeW5jUXVldWUgKnF1ZXVlKTsKZ3BvaW50ZXIgZ19hc3luY19xdWV1ZV90cnlfcG9wX3Vu
bG9ja2VkIChHQXN5bmNRdWV1ZSAqcXVldWUpOwoKCgpncG9pbnRlciBnX2FzeW5jX3F1ZXVlX3Rp
bWVkX3BvcCAoR0FzeW5jUXVldWUgKnF1ZXVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHVGltZVZhbCAqZW5kX3RpbWUpOwpncG9pbnRlciBnX2FzeW5j
X3F1ZXVlX3RpbWVkX3BvcF91bmxvY2tlZCAoR0FzeW5jUXVldWUgKnF1ZXVlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVGltZVZhbCAqZW5kX3RpbWUp
OwoKCgoKCgoKZ2ludCBnX2FzeW5jX3F1ZXVlX2xlbmd0aCAoR0FzeW5jUXVldWUgKnF1ZXVlKTsK
Z2ludCBnX2FzeW5jX3F1ZXVlX2xlbmd0aF91bmxvY2tlZCAoR0FzeW5jUXVldWUgKnF1ZXVlKTsK
CgojIDMzICJnbGliLmgiIDIKIyAxICIuLi9nbGliL2diYWNrdHJhY2UuaCIgMQojIDMyICIuLi9n
bGliL2diYWNrdHJhY2UuaCIKCiMgNDMgIi4uL2dsaWIvZ2JhY2t0cmFjZS5oIgp2b2lkIGdfb25f
ZXJyb3JfcXVlcnkgKGNvbnN0IGdjaGFyICpwcmdfbmFtZSk7CnZvaWQgZ19vbl9lcnJvcl9zdGFj
a190cmFjZSAoY29uc3QgZ2NoYXIgKnByZ19uYW1lKTsKIyA1OSAiLi4vZ2xpYi9nYmFja3RyYWNl
LmgiCgojIDM0ICJnbGliLmgiIDIKIyAxICIuLi9nbGliL2djYWNoZS5oIiAxCiMgMzAgIi4uL2ds
aWIvZ2NhY2hlLmgiCiMgMSAiLi4vZ2xpYi9nbGlzdC5oIiAxCiMgMzAgIi4uL2dsaWIvZ2xpc3Qu
aCIKIyAxICIuLi9nbGliL2dtZW0uaCIgMQojIDMyICIuLi9nbGliL2dtZW0uaCIKCgp0eXBlZGVm
IHN0cnVjdCBfR0FsbG9jYXRvciBHQWxsb2NhdG9yOwp0eXBlZGVmIHN0cnVjdCBfR01lbUNodW5r
IEdNZW1DaHVuazsKdHlwZWRlZiBzdHJ1Y3QgX0dNZW1WVGFibGUgR01lbVZUYWJsZTsKIyA0OCAi
Li4vZ2xpYi9nbWVtLmgiCmdwb2ludGVyIGdfbWFsbG9jIChndWxvbmcgbl9ieXRlcyk7Cmdwb2lu
dGVyIGdfbWFsbG9jMCAoZ3Vsb25nIG5fYnl0ZXMpOwpncG9pbnRlciBnX3JlYWxsb2MgKGdwb2lu
dGVyIG1lbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vsb25nIG5fYnl0ZXMpOwp2b2lk
IGdfZnJlZSAoZ3BvaW50ZXIgbWVtKTsKZ3BvaW50ZXIgZ190cnlfbWFsbG9jIChndWxvbmcgbl9i
eXRlcyk7Cmdwb2ludGVyIGdfdHJ5X3JlYWxsb2MgKGdwb2ludGVyIG1lbSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3Vsb25nIG5fYnl0ZXMpOwojIDcyICIuLi9nbGliL2dtZW0uaCIKc3Ry
dWN0IF9HTWVtVlRhYmxlCnsKICBncG9pbnRlciAoKm1hbGxvYykgKGdzaXplIG5fYnl0ZXMpOwog
IGdwb2ludGVyICgqcmVhbGxvYykgKGdwb2ludGVyIG1lbSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3NpemUgbl9ieXRlcyk7CiAgdm9pZCAoKmZyZWUpIChncG9pbnRlciBtZW0pOwoKICBn
cG9pbnRlciAoKmNhbGxvYykgKGdzaXplIG5fYmxvY2tzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBnc2l6ZSBuX2Jsb2NrX2J5dGVzKTsKICBncG9pbnRlciAoKnRyeV9tYWxsb2MpIChnc2l6
ZSBuX2J5dGVzKTsKICBncG9pbnRlciAoKnRyeV9yZWFsbG9jKSAoZ3BvaW50ZXIgbWVtLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBuX2J5dGVzKTsKfTsKdm9pZCBnX21lbV9zZXRf
dnRhYmxlIChHTWVtVlRhYmxlICp2dGFibGUpOwpnYm9vbGVhbiBnX21lbV9pc19zeXN0ZW1fbWFs
bG9jICh2b2lkKTsKCgoKZXh0ZXJuIEdNZW1WVGFibGUgKmdsaWJfbWVtX3Byb2ZpbGVyX3RhYmxl
Owp2b2lkIGdfbWVtX3Byb2ZpbGUgKHZvaWQpOwojIDEzNSAiLi4vZ2xpYi9nbWVtLmgiCkdNZW1D
aHVuayogZ19tZW1fY2h1bmtfbmV3IChjb25zdCBnY2hhciAqbmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnaW50IGF0b21fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBndWxvbmcgYXJlYV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdpbnQgdHlwZSk7CnZvaWQgZ19tZW1fY2h1bmtfZGVzdHJveSAoR01lbUNodW5rICptZW1fY2h1
bmspOwpncG9pbnRlciBnX21lbV9jaHVua19hbGxvYyAoR01lbUNodW5rICptZW1fY2h1bmspOwpn
cG9pbnRlciBnX21lbV9jaHVua19hbGxvYzAgKEdNZW1DaHVuayAqbWVtX2NodW5rKTsKdm9pZCBn
X21lbV9jaHVua19mcmVlIChHTWVtQ2h1bmsgKm1lbV9jaHVuaywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBncG9pbnRlciBtZW0pOwp2b2lkIGdfbWVtX2NodW5rX2NsZWFuIChHTWVt
Q2h1bmsgKm1lbV9jaHVuayk7CnZvaWQgZ19tZW1fY2h1bmtfcmVzZXQgKEdNZW1DaHVuayAqbWVt
X2NodW5rKTsKdm9pZCBnX21lbV9jaHVua19wcmludCAoR01lbUNodW5rICptZW1fY2h1bmspOwp2
b2lkIGdfbWVtX2NodW5rX2luZm8gKHZvaWQpOwojIDE1NyAiLi4vZ2xpYi9nbWVtLmgiCnZvaWQg
Z19ibG93X2NodW5rcyAodm9pZCk7CgoKCgpHQWxsb2NhdG9yKiBnX2FsbG9jYXRvcl9uZXcgKGNv
bnN0IGdjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgbl9w
cmVhbGxvY3MpOwp2b2lkIGdfYWxsb2NhdG9yX2ZyZWUgKEdBbGxvY2F0b3IgKmFsbG9jYXRvcik7
CgoKCgoKCgoKIyAzMSAiLi4vZ2xpYi9nbGlzdC5oIiAyCgoKCnR5cGVkZWYgc3RydWN0IF9HTGlz
dCBHTGlzdDsKCnN0cnVjdCBfR0xpc3QKewogIGdwb2ludGVyIGRhdGE7CiAgR0xpc3QgKm5leHQ7
CiAgR0xpc3QgKnByZXY7Cn07CgoKCnZvaWQgZ19saXN0X3B1c2hfYWxsb2NhdG9yIChHQWxsb2Nh
dG9yICphbGxvY2F0b3IpOwp2b2lkIGdfbGlzdF9wb3BfYWxsb2NhdG9yICh2b2lkKTsKR0xpc3Qq
IGdfbGlzdF9hbGxvYyAodm9pZCk7CnZvaWQgZ19saXN0X2ZyZWUgKEdMaXN0ICpsaXN0KTsKdm9p
ZCBnX2xpc3RfZnJlZV8xIChHTGlzdCAqbGlzdCk7CkdMaXN0KiBnX2xpc3RfYXBwZW5kIChHTGlz
dCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKTsK
R0xpc3QqIGdfbGlzdF9wcmVwZW5kIChHTGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBncG9pbnRlciBkYXRhKTsKR0xpc3QqIGdfbGlzdF9pbnNlcnQgKEdMaXN0ICps
aXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBwb3NpdGlvbik7CkdMaXN0KiBnX2xpc3Rf
aW5zZXJ0X3NvcnRlZCAoR0xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3BvaW50ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ29tcGFy
ZUZ1bmMgZnVuYyk7CkdMaXN0KiBnX2xpc3RfaW5zZXJ0X2JlZm9yZSAoR0xpc3QgKmxpc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpc3QgKnNpYmxpbmcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSk7CkdMaXN0KiBnX2xpc3RfY29uY2F0
IChHTGlzdCAqbGlzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpc3QgKmxp
c3QyKTsKR0xpc3QqIGdfbGlzdF9yZW1vdmUgKEdMaXN0ICpsaXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSk7CkdMaXN0KiBnX2xpc3RfcmVtb3Zl
X2FsbCAoR0xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0
cG9pbnRlciBkYXRhKTsKR0xpc3QqIGdfbGlzdF9yZW1vdmVfbGluayAoR0xpc3QgKmxpc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpc3QgKmxsaW5rKTsKR0xpc3QqIGdfbGlz
dF9kZWxldGVfbGluayAoR0xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpc3QgKmxpbmtfKTsKR0xpc3QqIGdfbGlzdF9yZXZlcnNlIChHTGlzdCAqbGlzdCk7CkdM
aXN0KiBnX2xpc3RfY29weSAoR0xpc3QgKmxpc3QpOwpHTGlzdCogZ19saXN0X250aCAoR0xpc3Qg
Kmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgbik7CkdMaXN0KiBn
X2xpc3RfbnRoX3ByZXYgKEdMaXN0ICpsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGd1aW50IG4pOwpHTGlzdCogZ19saXN0X2ZpbmQgKEdMaXN0ICpsaXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSk7CkdMaXN0KiBnX2xpc3Rf
ZmluZF9jdXN0b20gKEdMaXN0ICpsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdjb25zdHBvaW50ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ29t
cGFyZUZ1bmMgZnVuYyk7CmdpbnQgZ19saXN0X3Bvc2l0aW9uIChHTGlzdCAqbGlzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlzdCAqbGxpbmspOwpnaW50IGdfbGlzdF9pbmRl
eCAoR0xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9p
bnRlciBkYXRhKTsKR0xpc3QqIGdfbGlzdF9sYXN0IChHTGlzdCAqbGlzdCk7CkdMaXN0KiBnX2xp
c3RfZmlyc3QgKEdMaXN0ICpsaXN0KTsKZ3VpbnQgZ19saXN0X2xlbmd0aCAoR0xpc3QgKmxpc3Qp
Owp2b2lkIGdfbGlzdF9mb3JlYWNoIChHTGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHRnVuYyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdw
b2ludGVyIHVzZXJfZGF0YSk7CkdMaXN0KiBnX2xpc3Rfc29ydCAoR0xpc3QgKmxpc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NvbXBhcmVGdW5jIGNvbXBhcmVfZnVuYyk7CkdM
aXN0KiBnX2xpc3Rfc29ydF93aXRoX2RhdGEgKEdMaXN0ICpsaXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDb21wYXJlRGF0YUZ1bmMgY29tcGFyZV9mdW5jLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Cmdwb2ludGVyIGdfbGlz
dF9udGhfZGF0YSAoR0xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3VpbnQgbik7CgoKCgoKIyAzMSAiLi4vZ2xpYi9nY2FjaGUuaCIgMgoKCgp0eXBlZGVmIHN0cnVj
dCBfR0NhY2hlIEdDYWNoZTsKCnR5cGVkZWYgZ3BvaW50ZXIgKCpHQ2FjaGVOZXdGdW5jKSAoZ3Bv
aW50ZXIga2V5KTsKdHlwZWRlZiBncG9pbnRlciAoKkdDYWNoZUR1cEZ1bmMpIChncG9pbnRlciB2
YWx1ZSk7CnR5cGVkZWYgdm9pZCAoKkdDYWNoZURlc3Ryb3lGdW5jKSAoZ3BvaW50ZXIgdmFsdWUp
OwoKCgpHQ2FjaGUqIGdfY2FjaGVfbmV3IChHQ2FjaGVOZXdGdW5jIHZhbHVlX25ld19mdW5jLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWNoZURlc3Ryb3lGdW5jIHZhbHVlX2Rl
c3Ryb3lfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FjaGVEdXBGdW5j
IGtleV9kdXBfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FjaGVEZXN0
cm95RnVuYyBrZXlfZGVzdHJveV9mdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdIYXNoRnVuYyBoYXNoX2tleV9mdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdIYXNoRnVuYyBoYXNoX3ZhbHVlX2Z1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0VxdWFsRnVuYyBrZXlfZXF1YWxfZnVuYyk7CnZvaWQgZ19jYWNoZV9kZXN0cm95IChHQ2Fj
aGUgKmNhY2hlKTsKZ3BvaW50ZXIgZ19jYWNoZV9pbnNlcnQgKEdDYWNoZSAqY2FjaGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIga2V5KTsKdm9pZCBnX2NhY2hlX3Jl
bW92ZSAoR0NhY2hlICpjYWNoZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY29u
c3Rwb2ludGVyIHZhbHVlKTsKdm9pZCBnX2NhY2hlX2tleV9mb3JlYWNoIChHQ2FjaGUgKmNhY2hl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIRnVuYyBmdW5jLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CnZvaWQgZ19jYWNoZV92
YWx1ZV9mb3JlYWNoIChHQ2FjaGUgKmNhY2hlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdIRnVuYyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVy
IHVzZXJfZGF0YSk7CgoKIyAzNSAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xpYi9nY29tcGxldGlvbi5o
IiAxCiMgMzIgIi4uL2dsaWIvZ2NvbXBsZXRpb24uaCIKCgp0eXBlZGVmIHN0cnVjdCBfR0NvbXBs
ZXRpb24gR0NvbXBsZXRpb247Cgp0eXBlZGVmIGdjaGFyKiAoKkdDb21wbGV0aW9uRnVuYykgKGdw
b2ludGVyKTsKCgoKCnR5cGVkZWYgZ2ludCAoKkdDb21wbGV0aW9uU3RybmNtcEZ1bmMpIChjb25z
dCBnY2hhciAqczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBnY2hhciAqczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6
ZSBuKTsKCnN0cnVjdCBfR0NvbXBsZXRpb24KewogIEdMaXN0KiBpdGVtczsKICBHQ29tcGxldGlv
bkZ1bmMgZnVuYzsKCiAgZ2NoYXIqIHByZWZpeDsKICBHTGlzdCogY2FjaGU7CiAgR0NvbXBsZXRp
b25TdHJuY21wRnVuYyBzdHJuY21wX2Z1bmM7Cn07CgpHQ29tcGxldGlvbiogZ19jb21wbGV0aW9u
X25ldyAoR0NvbXBsZXRpb25GdW5jIGZ1bmMpOwp2b2lkIGdfY29tcGxldGlvbl9hZGRfaXRlbXMg
KEdDb21wbGV0aW9uKiBjbXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGlzdCogaXRlbXMpOwp2b2lkIGdfY29tcGxldGlvbl9yZW1vdmVfaXRlbXMgKEdDb21wbGV0
aW9uKiBjbXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlzdCog
aXRlbXMpOwp2b2lkIGdfY29tcGxldGlvbl9jbGVhcl9pdGVtcyAoR0NvbXBsZXRpb24qIGNtcCk7
CkdMaXN0KiBnX2NvbXBsZXRpb25fY29tcGxldGUgKEdDb21wbGV0aW9uKiBjbXAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogcHJlZml4LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIqKiBuZXdfcHJlZml4KTsK
dm9pZCBnX2NvbXBsZXRpb25fc2V0X2NvbXBhcmUgKEdDb21wbGV0aW9uICpjbXAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDb21wbGV0aW9uU3RybmNtcEZ1bmMgc3Ry
bmNtcF9mdW5jKTsKdm9pZCBnX2NvbXBsZXRpb25fZnJlZSAoR0NvbXBsZXRpb24qIGNtcCk7CgoK
IyAzNiAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xpYi9nY29udmVydC5oIiAxCiMgMzAgIi4uL2dsaWIv
Z2NvbnZlcnQuaCIKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4y
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMxICIuLi9nbGliL2djb252ZXJ0LmgiIDIKCgoKCnR5
cGVkZWYgZW51bQp7CiAgR19DT05WRVJUX0VSUk9SX05PX0NPTlZFUlNJT04sCiAgR19DT05WRVJU
X0VSUk9SX0lMTEVHQUxfU0VRVUVOQ0UsCiAgR19DT05WRVJUX0VSUk9SX0ZBSUxFRCwKICBHX0NP
TlZFUlRfRVJST1JfUEFSVElBTF9JTlBVVCwKICBHX0NPTlZFUlRfRVJST1JfQkFEX1VSSSwKICBH
X0NPTlZFUlRfRVJST1JfTk9UX0FCU09MVVRFX1BBVEgKfSBHQ29udmVydEVycm9yOwoKCkdRdWFy
ayBnX2NvbnZlcnRfZXJyb3JfcXVhcmsgKHZvaWQpOwoKCgp0eXBlZGVmIHN0cnVjdCBfR0lDb252
ICpHSUNvbnY7CgpHSUNvbnYgZ19pY29udl9vcGVuIChjb25zdCBnY2hhciAqdG9fY29kZXNldCwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqZnJvbV9jb2Rlc2V0KTsKc2l6ZV90
IGdfaWNvbnYgKEdJQ29udiBjb252ZXJ0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIg
KippbmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAqaW5ieXRlc19sZWZ0LAogICAg
ICAgICAgICAgICAgICAgICAgIGdjaGFyICoqb3V0YnVmLAogICAgICAgICAgICAgICAgICAgICAg
IGdzaXplICpvdXRieXRlc19sZWZ0KTsKZ2ludCBnX2ljb252X2Nsb3NlIChHSUNvbnYgY29udmVy
dGVyKTsKCgpnY2hhciogZ19jb252ZXJ0IChjb25zdCBnY2hhciAqc3RyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2NoYXIgKnRvX2NvZGVzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2NoYXIgKmZyb21fY29kZXNldCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnc2l6ZSAqYnl0ZXNfcmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnc2l6ZSAqYnl0ZXNfd3JpdHRlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
RXJyb3IgKiplcnJvcik7CmdjaGFyKiBnX2NvbnZlcnRfd2l0aF9pY29udiAoY29uc3QgZ2NoYXIg
KnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NpemUgbGVuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdJQ29udiBjb252ZXJ0ZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3NpemUgKmJ5dGVzX3JlYWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3NpemUgKmJ5dGVzX3dyaXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwpnY2hhciogZ19jb252ZXJ0X3dpdGhfZmFsbGJhY2sg
KGNvbnN0IGdjaGFyICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzaXpl
IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqdG9fY29k
ZXNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqZnJvbV9j
b2Rlc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICpmYWxsYmFjaywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAqYnl0ZXNfcmVhZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAqYnl0ZXNfd3JpdHRlbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7CgoKCgpnY2hhciogZ19sb2Nh
bGVfdG9fdXRmOCAoY29uc3QgZ2NoYXIgKm9wc3lzc3RyaW5nLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBnc3NpemUgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAqYnl0
ZXNfcmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgKmJ5dGVzX3dyaXR0ZW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsKZ2NoYXIqIGdfbG9j
YWxlX2Zyb21fdXRmOCAoY29uc3QgZ2NoYXIgKnV0ZjhzdHJpbmcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdzc2l6ZSBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplICpi
eXRlc19yZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAqYnl0ZXNfd3JpdHRl
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwoKCgoKZ2NoYXIq
IGdfZmlsZW5hbWVfdG9fdXRmOCAoY29uc3QgZ2NoYXIgKm9wc3lzc3RyaW5nLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3NpemUgKmJ5dGVzX3JlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUg
KmJ5dGVzX3dyaXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJy
b3IpOwpnY2hhciogZ19maWxlbmFtZV9mcm9tX3V0ZjggKGNvbnN0IGdjaGFyICp1dGY4c3RyaW5n
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBsZW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3NpemUgKmJ5dGVzX3JlYWQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3NpemUgKmJ5dGVzX3dyaXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0Vycm9yICoqZXJyb3IpOwoKZ2NoYXIgKmdfZmlsZW5hbWVfZnJvbV91cmkgKGNvbnN0IGNoYXIg
KnVyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipob3N0bmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsKCmdjaGFyICpnX2ZpbGVuYW1l
X3RvX3VyaSAoY29uc3QgY2hhciAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICpob3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJv
ciAqKmVycm9yKTsKCgoKIyAzNyAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xpYi9nZGF0YXNldC5oIiAx
CiMgMzIgIi4uL2dsaWIvZ2RhdGFzZXQuaCIKCgp0eXBlZGVmIHN0cnVjdCBfR0RhdGEgR0RhdGE7
Cgp0eXBlZGVmIHZvaWQgKCpHRGF0YUZvcmVhY2hGdW5jKSAoR1F1YXJrIGtleV9pZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRl
ciB1c2VyX2RhdGEpOwoKCgp2b2lkIGdfZGF0YWxpc3RfaW5pdCAoR0RhdGEgKipkYXRhbGlzdCk7
CnZvaWQgZ19kYXRhbGlzdF9jbGVhciAoR0RhdGEgKipkYXRhbGlzdCk7Cmdwb2ludGVyIGdfZGF0
YWxpc3RfaWRfZ2V0X2RhdGEgKEdEYXRhICoqZGF0YWxpc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdRdWFyayBrZXlfaWQpOwp2b2lkIGdfZGF0YWxpc3RfaWRf
c2V0X2RhdGFfZnVsbCAoR0RhdGEgKipkYXRhbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR1F1YXJrIGtleV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveV9mdW5jKTsKZ3BvaW50ZXIg
Z19kYXRhbGlzdF9pZF9yZW1vdmVfbm9fbm90aWZ5IChHRGF0YSAqKmRhdGFsaXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUXVhcmsga2V5X2lkKTsKdm9pZCBn
X2RhdGFsaXN0X2ZvcmVhY2ggKEdEYXRhICoqZGF0YWxpc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdEYXRhRm9yZWFjaEZ1bmMgZnVuYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKIyA3MyAi
Li4vZ2xpYi9nZGF0YXNldC5oIgp2b2lkIGdfZGF0YXNldF9kZXN0cm95IChnY29uc3Rwb2ludGVy
IGRhdGFzZXRfbG9jYXRpb24pOwpncG9pbnRlciBnX2RhdGFzZXRfaWRfZ2V0X2RhdGEgKGdjb25z
dHBvaW50ZXIgZGF0YXNldF9sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHUXVhcmsga2V5X2lkKTsKdm9pZCBnX2RhdGFzZXRfaWRfc2V0X2RhdGFfZnVs
bCAoZ2NvbnN0cG9pbnRlciBkYXRhc2V0X2xvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdRdWFyayBrZXlfaWQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBkZXN0cm95X2Z1bmMpOwpncG9pbnRlciBn
X2RhdGFzZXRfaWRfcmVtb3ZlX25vX25vdGlmeSAoZ2NvbnN0cG9pbnRlciBkYXRhc2V0X2xvY2F0
aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdRdWFyayBrZXlf
aWQpOwp2b2lkIGdfZGF0YXNldF9mb3JlYWNoIChnY29uc3Rwb2ludGVyIGRhdGFzZXRfbG9jYXRp
b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RhdGFGb3JlYWNo
RnVuYyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2lu
dGVyIHVzZXJfZGF0YSk7CiMgMTAwICIuLi9nbGliL2dkYXRhc2V0LmgiCgojIDM4ICJnbGliLmgi
IDIKIyAxICIuLi9nbGliL2dkYXRlLmgiIDEKIyAzMiAiLi4vZ2xpYi9nZGF0ZS5oIgoKIyA0MyAi
Li4vZ2xpYi9nZGF0ZS5oIgp0eXBlZGVmIGdpbnQzMiBHVGltZTsKdHlwZWRlZiBndWludDE2IEdE
YXRlWWVhcjsKdHlwZWRlZiBndWludDggR0RhdGVEYXk7CnR5cGVkZWYgc3RydWN0IF9HRGF0ZSBH
RGF0ZTsKCnN0cnVjdCB0bTsKCgp0eXBlZGVmIGVudW0KewogIEdfREFURV9EQVkgPSAwLAogIEdf
REFURV9NT05USCA9IDEsCiAgR19EQVRFX1lFQVIgPSAyCn0gR0RhdGVETVk7CgoKdHlwZWRlZiBl
bnVtCnsKICBHX0RBVEVfQkFEX1dFRUtEQVkgPSAwLAogIEdfREFURV9NT05EQVkgPSAxLAogIEdf
REFURV9UVUVTREFZID0gMiwKICBHX0RBVEVfV0VETkVTREFZID0gMywKICBHX0RBVEVfVEhVUlNE
QVkgPSA0LAogIEdfREFURV9GUklEQVkgPSA1LAogIEdfREFURV9TQVRVUkRBWSA9IDYsCiAgR19E
QVRFX1NVTkRBWSA9IDcKfSBHRGF0ZVdlZWtkYXk7CnR5cGVkZWYgZW51bQp7CiAgR19EQVRFX0JB
RF9NT05USCA9IDAsCiAgR19EQVRFX0pBTlVBUlkgPSAxLAogIEdfREFURV9GRUJSVUFSWSA9IDIs
CiAgR19EQVRFX01BUkNIID0gMywKICBHX0RBVEVfQVBSSUwgPSA0LAogIEdfREFURV9NQVkgPSA1
LAogIEdfREFURV9KVU5FID0gNiwKICBHX0RBVEVfSlVMWSA9IDcsCiAgR19EQVRFX0FVR1VTVCA9
IDgsCiAgR19EQVRFX1NFUFRFTUJFUiA9IDksCiAgR19EQVRFX09DVE9CRVIgPSAxMCwKICBHX0RB
VEVfTk9WRU1CRVIgPSAxMSwKICBHX0RBVEVfREVDRU1CRVIgPSAxMgp9IEdEYXRlTW9udGg7CiMg
OTYgIi4uL2dsaWIvZ2RhdGUuaCIKc3RydWN0IF9HRGF0ZQp7CiAgZ3VpbnQganVsaWFuX2RheXMg
OiAzMjsKCgoKCgogIGd1aW50IGp1bGlhbiA6IDE7CiAgZ3VpbnQgZG15IDogMTsKCgogIGd1aW50
IGRheSA6IDY7CiAgZ3VpbnQgbW9udGggOiA0OwogIGd1aW50IHllYXIgOiAxNjsKfTsKCgoKCgpH
RGF0ZSogZ19kYXRlX25ldyAodm9pZCk7CkdEYXRlKiBnX2RhdGVfbmV3X2RteSAoR0RhdGVEYXkg
ZGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RhdGVNb250
aCBtb250aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRl
WWVhciB5ZWFyKTsKR0RhdGUqIGdfZGF0ZV9uZXdfanVsaWFuIChndWludDMyIGp1bGlhbl9kYXkp
Owp2b2lkIGdfZGF0ZV9mcmVlIChHRGF0ZSAqZGF0ZSk7CgoKCgoKCmdib29sZWFuIGdfZGF0ZV92
YWxpZCAoY29uc3QgR0RhdGUgKmRhdGUpOwpnYm9vbGVhbiBnX2RhdGVfdmFsaWRfZGF5IChHRGF0
ZURheSBkYXkpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpnYm9vbGVhbiBnX2RhdGVfdmFs
aWRfbW9udGggKEdEYXRlTW9udGggbW9udGgpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpn
Ym9vbGVhbiBnX2RhdGVfdmFsaWRfeWVhciAoR0RhdGVZZWFyIHllYXIpIF9fYXR0cmlidXRlX18o
KF9fY29uc3RfXykpOwpnYm9vbGVhbiBnX2RhdGVfdmFsaWRfd2Vla2RheSAoR0RhdGVXZWVrZGF5
IHdlZWtkYXkpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpnYm9vbGVhbiBnX2RhdGVfdmFs
aWRfanVsaWFuIChndWludDMyIGp1bGlhbl9kYXRlKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18p
KTsKZ2Jvb2xlYW4gZ19kYXRlX3ZhbGlkX2RteSAoR0RhdGVEYXkgZGF5LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RhdGVNb250aCBtb250aCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRlWWVhciB5ZWFyKSBfX2F0dHJp
YnV0ZV9fKChfX2NvbnN0X18pKTsKCkdEYXRlV2Vla2RheSBnX2RhdGVfZ2V0X3dlZWtkYXkgKGNv
bnN0IEdEYXRlICpkYXRlKTsKR0RhdGVNb250aCBnX2RhdGVfZ2V0X21vbnRoIChjb25zdCBHRGF0
ZSAqZGF0ZSk7CkdEYXRlWWVhciBnX2RhdGVfZ2V0X3llYXIgKGNvbnN0IEdEYXRlICpkYXRlKTsK
R0RhdGVEYXkgZ19kYXRlX2dldF9kYXkgKGNvbnN0IEdEYXRlICpkYXRlKTsKZ3VpbnQzMiBnX2Rh
dGVfZ2V0X2p1bGlhbiAoY29uc3QgR0RhdGUgKmRhdGUpOwpndWludCBnX2RhdGVfZ2V0X2RheV9v
Zl95ZWFyIChjb25zdCBHRGF0ZSAqZGF0ZSk7CgoKCgoKCmd1aW50IGdfZGF0ZV9nZXRfbW9uZGF5
X3dlZWtfb2ZfeWVhciAoY29uc3QgR0RhdGUgKmRhdGUpOwpndWludCBnX2RhdGVfZ2V0X3N1bmRh
eV93ZWVrX29mX3llYXIgKGNvbnN0IEdEYXRlICpkYXRlKTsKCgoKCgp2b2lkIGdfZGF0ZV9jbGVh
ciAoR0RhdGUgKmRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBndWludCBuX2RhdGVzKTsKCgoKCgp2b2lkIGdfZGF0ZV9zZXRfcGFyc2UgKEdEYXRlICpkYXRl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIg
KnN0cik7CnZvaWQgZ19kYXRlX3NldF90aW1lIChHRGF0ZSAqZGF0ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUaW1lIHRpbWVfKTsKdm9pZCBnX2RhdGVfc2V0
X21vbnRoIChHRGF0ZSAqZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdEYXRlTW9udGggbW9udGgpOwp2b2lkIGdfZGF0ZV9zZXRfZGF5IChHRGF0ZSAqZGF0
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRlRGF5IGRh
eSk7CnZvaWQgZ19kYXRlX3NldF95ZWFyIChHRGF0ZSAqZGF0ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRlWWVhciB5ZWFyKTsKdm9pZCBnX2RhdGVfc2V0
X2RteSAoR0RhdGUgKmRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHRGF0ZURheSBkYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHRGF0ZU1vbnRoIG1vbnRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0RhdGVZZWFyIHkpOwp2b2lkIGdfZGF0ZV9zZXRfanVsaWFuIChHRGF0ZSAqZGF0
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIganVs
aWFuX2RhdGUpOwpnYm9vbGVhbiBnX2RhdGVfaXNfZmlyc3Rfb2ZfbW9udGggKGNvbnN0IEdEYXRl
ICpkYXRlKTsKZ2Jvb2xlYW4gZ19kYXRlX2lzX2xhc3Rfb2ZfbW9udGggKGNvbnN0IEdEYXRlICpk
YXRlKTsKCgp2b2lkIGdfZGF0ZV9hZGRfZGF5cyAoR0RhdGUgKmRhdGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBuX2RheXMpOwp2b2lkIGdfZGF0ZV9z
dWJ0cmFjdF9kYXlzIChHRGF0ZSAqZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGd1aW50IG5fZGF5cyk7CgoKdm9pZCBnX2RhdGVfYWRkX21vbnRocyAoR0Rh
dGUgKmRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlu
dCBuX21vbnRocyk7CnZvaWQgZ19kYXRlX3N1YnRyYWN0X21vbnRocyAoR0RhdGUgKmRhdGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBuX21vbnRocyk7
CgoKdm9pZCBnX2RhdGVfYWRkX3llYXJzIChHRGF0ZSAqZGF0ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IG5feWVhcnMpOwp2b2lkIGdfZGF0ZV9zdWJ0
cmFjdF95ZWFycyAoR0RhdGUgKmRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBndWludCBuX3llYXJzKTsKZ2Jvb2xlYW4gZ19kYXRlX2lzX2xlYXBfeWVhciAo
R0RhdGVZZWFyIHllYXIpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpndWludDggZ19kYXRl
X2dldF9kYXlzX2luX21vbnRoIChHRGF0ZU1vbnRoIG1vbnRoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0RhdGVZZWFyIHllYXIpIF9fYXR0cmlidXRlX18oKF9f
Y29uc3RfXykpOwpndWludDggZ19kYXRlX2dldF9tb25kYXlfd2Vla3NfaW5feWVhciAoR0RhdGVZ
ZWFyIHllYXIpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpndWludDggZ19kYXRlX2dldF9z
dW5kYXlfd2Vla3NfaW5feWVhciAoR0RhdGVZZWFyIHllYXIpIF9fYXR0cmlidXRlX18oKF9fY29u
c3RfXykpOwoKCgpnaW50IGdfZGF0ZV9kYXlzX2JldHdlZW4gKGNvbnN0IEdEYXRlICpkYXRlMSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdEYXRlICpk
YXRlMik7CgoKZ2ludCBnX2RhdGVfY29tcGFyZSAoY29uc3QgR0RhdGUgKmxocywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdEYXRlICpyaHMpOwp2b2lk
IGdfZGF0ZV90b19zdHJ1Y3RfdG0gKGNvbnN0IEdEYXRlICpkYXRlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICp0bSk7Cgp2b2lkIGdfZGF0ZV9j
bGFtcCAoR0RhdGUgKmRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBHRGF0ZSAqbWluX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBHRGF0ZSAqbWF4X2RhdGUpOwoKCnZvaWQgZ19kYXRlX29yZGVy
IChHRGF0ZSAqZGF0ZTEsIEdEYXRlICpkYXRlMik7CgoKCgpnc2l6ZSBnX2RhdGVfc3RyZnRpbWUg
KGdjaGFyICpzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Np
emUgc2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdjaGFyICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHRGF0ZSAqZGF0ZSk7CiMgMjQ5ICIuLi9nbGliL2dkYXRlLmgiCgojIDM5ICJnbGli
LmgiIDIKIyAxICIuLi9nbGliL2dkaXIuaCIgMQojIDI4ICIuLi9nbGliL2dkaXIuaCIKCgp0eXBl
ZGVmIHN0cnVjdCBfR0RpciBHRGlyOwoKR0RpciAqIGdfZGlyX29wZW4gKGNvbnN0IGdjaGFyICpw
YXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IGZsYWdz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9y
KTsKY29uc3QgZ2NoYXIgKmdfZGlyX3JlYWRfbmFtZSAoR0RpciAqZGlyKTsKdm9pZCBnX2Rpcl9y
ZXdpbmQgKEdEaXIgKmRpcik7CnZvaWQgZ19kaXJfY2xvc2UgKEdEaXIgKmRpcik7CgoKIyA0MCAi
Z2xpYi5oIiAyCgojIDEgIi4uL2dsaWIvZ2ZpbGV1dGlscy5oIiAxCiMgMjYgIi4uL2dsaWIvZ2Zp
bGV1dGlscy5oIgoKCgoKdHlwZWRlZiBlbnVtCnsKICBHX0ZJTEVfRVJST1JfRVhJU1QsCiAgR19G
SUxFX0VSUk9SX0lTRElSLAogIEdfRklMRV9FUlJPUl9BQ0NFUywKICBHX0ZJTEVfRVJST1JfTkFN
RVRPT0xPTkcsCiAgR19GSUxFX0VSUk9SX05PRU5ULAogIEdfRklMRV9FUlJPUl9OT1RESVIsCiAg
R19GSUxFX0VSUk9SX05YSU8sCiAgR19GSUxFX0VSUk9SX05PREVWLAogIEdfRklMRV9FUlJPUl9S
T0ZTLAogIEdfRklMRV9FUlJPUl9UWFRCU1ksCiAgR19GSUxFX0VSUk9SX0ZBVUxULAogIEdfRklM
RV9FUlJPUl9MT09QLAogIEdfRklMRV9FUlJPUl9OT1NQQywKICBHX0ZJTEVfRVJST1JfTk9NRU0s
CiAgR19GSUxFX0VSUk9SX01GSUxFLAogIEdfRklMRV9FUlJPUl9ORklMRSwKICBHX0ZJTEVfRVJS
T1JfQkFERiwKICBHX0ZJTEVfRVJST1JfSU5WQUwsCiAgR19GSUxFX0VSUk9SX1BJUEUsCiAgR19G
SUxFX0VSUk9SX0FHQUlOLAogIEdfRklMRV9FUlJPUl9JTlRSLAogIEdfRklMRV9FUlJPUl9JTywK
ICBHX0ZJTEVfRVJST1JfUEVSTSwKICBHX0ZJTEVfRVJST1JfRkFJTEVECn0gR0ZpbGVFcnJvcjsK
CgoKCgp0eXBlZGVmIGVudW0KewogIEdfRklMRV9URVNUX0lTX1JFR1VMQVIgPSAxIDw8IDAsCiAg
R19GSUxFX1RFU1RfSVNfU1lNTElOSyA9IDEgPDwgMSwKICBHX0ZJTEVfVEVTVF9JU19ESVIgPSAx
IDw8IDIsCiAgR19GSUxFX1RFU1RfSVNfRVhFQ1VUQUJMRSA9IDEgPDwgMywKICBHX0ZJTEVfVEVT
VF9FWElTVFMgPSAxIDw8IDQKfSBHRmlsZVRlc3Q7CgpHUXVhcmsgZ19maWxlX2Vycm9yX3F1YXJr
ICh2b2lkKTsKCkdGaWxlRXJyb3IgZ19maWxlX2Vycm9yX2Zyb21fZXJybm8gKGdpbnQgZXJyX25v
KTsKCmdib29sZWFuIGdfZmlsZV90ZXN0IChjb25zdCBnY2hhciAqZmlsZW5hbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdGaWxlVGVzdCB0ZXN0KTsKZ2Jvb2xlYW4gZ19maWxlX2dl
dF9jb250ZW50cyAoY29uc3QgZ2NoYXIgKmZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnY2hhciAqKmNvbnRlbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
c2l6ZSAqbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnJv
cik7CgoKCmludCBnX21rc3RlbXAgKGNoYXIgKnRtcGwpOwoKCmludCBnX2ZpbGVfb3Blbl90bXAg
KGNvbnN0IGNoYXIgKnRtcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipu
YW1lX3VzZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsK
CmdjaGFyICpnX2J1aWxkX3BhdGggKGNvbnN0IGdjaGFyICpzZXBhcmF0b3IsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnY2hhciAqZmlyc3RfZWxlbWVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIC4uLik7CmdjaGFyICpnX2J1aWxkX2ZpbGVuYW1lIChjb25zdCBnY2hhciAqZmly
c3RfZWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CgoKIyA0MiAiZ2xpYi5o
IiAyCiMgMSAiLi4vZ2xpYi9naGFzaC5oIiAxCiMgMzIgIi4uL2dsaWIvZ2hhc2guaCIKCgp0eXBl
ZGVmIHN0cnVjdCBfR0hhc2hUYWJsZSBHSGFzaFRhYmxlOwoKdHlwZWRlZiBnYm9vbGVhbiAoKkdI
UkZ1bmMpIChncG9pbnRlciBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9p
bnRlciB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJf
ZGF0YSk7CgoKCkdIYXNoVGFibGUqIGdfaGFzaF90YWJsZV9uZXcgKEdIYXNoRnVuYyBoYXNoX2Z1
bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VxdWFsRnVu
YyBrZXlfZXF1YWxfZnVuYyk7CkdIYXNoVGFibGUqIGdfaGFzaF90YWJsZV9uZXdfZnVsbCAoR0hh
c2hGdW5jIGhhc2hfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHRXF1YWxGdW5jIGtleV9lcXVhbF9mdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5IGtleV9kZXN0cm95X2Z1bmMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgdmFs
dWVfZGVzdHJveV9mdW5jKTsKdm9pZCBnX2hhc2hfdGFibGVfZGVzdHJveSAoR0hhc2hUYWJsZSAq
aGFzaF90YWJsZSk7CnZvaWQgZ19oYXNoX3RhYmxlX2luc2VydCAoR0hhc2hUYWJsZSAqaGFzaF90
YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRl
ciBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50
ZXIgdmFsdWUpOwp2b2lkIGdfaGFzaF90YWJsZV9yZXBsYWNlIChHSGFzaFRhYmxlICpoYXNoX3Rh
YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVy
IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRl
ciB2YWx1ZSk7Cmdib29sZWFuIGdfaGFzaF90YWJsZV9yZW1vdmUgKEdIYXNoVGFibGUgKmhhc2hf
dGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0
cG9pbnRlciBrZXkpOwpnYm9vbGVhbiBnX2hhc2hfdGFibGVfc3RlYWwgKEdIYXNoVGFibGUgKmhh
c2hfdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Nv
bnN0cG9pbnRlciBrZXkpOwpncG9pbnRlciBnX2hhc2hfdGFibGVfbG9va3VwIChHSGFzaFRhYmxl
ICpoYXNoX3RhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdjb25zdHBvaW50ZXIga2V5KTsKZ2Jvb2xlYW4gZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRl
ZCAoR0hhc2hUYWJsZSAqaGFzaF90YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGxvb2t1cF9rZXksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgKm9yaWdfa2V5LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICp2YWx1ZSk7CnZvaWQg
Z19oYXNoX3RhYmxlX2ZvcmVhY2ggKEdIYXNoVGFibGUgKmhhc2hfdGFibGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0hGdW5jIGZ1bmMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKZ3Vp
bnQgZ19oYXNoX3RhYmxlX2ZvcmVhY2hfcmVtb3ZlIChHSGFzaFRhYmxlICpoYXNoX3RhYmxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIUkZ1bmMgZnVuYywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2Vy
X2RhdGEpOwpndWludCBnX2hhc2hfdGFibGVfZm9yZWFjaF9zdGVhbCAoR0hhc2hUYWJsZSAqaGFz
aF90YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSFJG
dW5jIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bv
aW50ZXIgdXNlcl9kYXRhKTsKZ3VpbnQgZ19oYXNoX3RhYmxlX3NpemUgKEdIYXNoVGFibGUgKmhh
c2hfdGFibGUpOwojIDg3ICIuLi9nbGliL2doYXNoLmgiCmdib29sZWFuIGdfc3RyX2VxdWFsIChn
Y29uc3Rwb2ludGVyIHYsCiAgICAgICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIHYyKTsK
Z3VpbnQgZ19zdHJfaGFzaCAoZ2NvbnN0cG9pbnRlciB2KTsKCmdib29sZWFuIGdfaW50X2VxdWFs
IChnY29uc3Rwb2ludGVyIHYsCiAgICAgICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIHYy
KTsKZ3VpbnQgZ19pbnRfaGFzaCAoZ2NvbnN0cG9pbnRlciB2KTsKCgoKCgoKCmd1aW50IGdfZGly
ZWN0X2hhc2ggKGdjb25zdHBvaW50ZXIgdikgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7Cmdi
b29sZWFuIGdfZGlyZWN0X2VxdWFsIChnY29uc3Rwb2ludGVyIHYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBnY29uc3Rwb2ludGVyIHYyKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKCgoj
IDQzICJnbGliLmgiIDIKIyAxICIuLi9nbGliL2dob29rLmgiIDEKIyAzMiAiLi4vZ2xpYi9naG9v
ay5oIgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0dIb29rIEdIb29rOwp0eXBlZGVmIHN0cnVjdCBfR0hv
b2tMaXN0IEdIb29rTGlzdDsKCnR5cGVkZWYgZ2ludCAoKkdIb29rQ29tcGFyZUZ1bmMpIChHSG9v
ayAqbmV3X2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHSG9vayAqc2libGluZyk7CnR5cGVkZWYgZ2Jvb2xlYW4gKCpHSG9va0ZpbmRGdW5jKSAo
R0hvb2sgKmhvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBncG9pbnRlciBkYXRhKTsKdHlwZWRlZiB2b2lkICgqR0hvb2tNYXJzaGFsbGVyKSAoR0hv
b2sgKmhvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBncG9pbnRlciBtYXJzaGFsX2RhdGEpOwp0eXBlZGVmIGdib29sZWFuICgqR0hvb2tDaGVja01h
cnNoYWxsZXIpIChHSG9vayAqaG9vaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdwb2ludGVyIG1hcnNoYWxfZGF0YSk7CnR5cGVkZWYgdm9pZCAoKkdI
b29rRnVuYykgKGdwb2ludGVyIGRhdGEpOwp0eXBlZGVmIGdib29sZWFuICgqR0hvb2tDaGVja0Z1
bmMpIChncG9pbnRlciBkYXRhKTsKdHlwZWRlZiB2b2lkICgqR0hvb2tGaW5hbGl6ZUZ1bmMpIChH
SG9va0xpc3QgKmhvb2tfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdIb29rICpob29rKTsKdHlwZWRlZiBlbnVtCnsKICBHX0hPT0tfRkxBR19B
Q1RJVkUgPSAxIDw8IDAsCiAgR19IT09LX0ZMQUdfSU5fQ0FMTCA9IDEgPDwgMSwKICBHX0hPT0tf
RkxBR19NQVNLID0gMHgwZgp9IEdIb29rRmxhZ01hc2s7CgoKCgpzdHJ1Y3QgX0dIb29rTGlzdAp7
CiAgZ3Vsb25nIHNlcV9pZDsKICBndWludCBob29rX3NpemUgOiAxNjsKICBndWludCBpc19zZXR1
cCA6IDE7CiAgR0hvb2sgKmhvb2tzOwogIEdNZW1DaHVuayAqaG9va19tZW1jaHVuazsKICBHSG9v
a0ZpbmFsaXplRnVuYyBmaW5hbGl6ZV9ob29rOwogIGdwb2ludGVyIGR1bW15WzJdOwp9OwpzdHJ1
Y3QgX0dIb29rCnsKICBncG9pbnRlciBkYXRhOwogIEdIb29rICpuZXh0OwogIEdIb29rICpwcmV2
OwogIGd1aW50IHJlZl9jb3VudDsKICBndWxvbmcgaG9va19pZDsKICBndWludCBmbGFnczsKICBn
cG9pbnRlciBmdW5jOwogIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3k7Cn07CiMgMTAyICIuLi9nbGli
L2dob29rLmgiCnZvaWQgZ19ob29rX2xpc3RfaW5pdCAoR0hvb2tMaXN0ICpob29rX2xpc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgaG9va19zaXplKTsK
dm9pZCBnX2hvb2tfbGlzdF9jbGVhciAoR0hvb2tMaXN0ICpob29rX2xpc3QpOwpHSG9vayogZ19o
b29rX2FsbG9jIChHSG9va0xpc3QgKmhvb2tfbGlzdCk7CnZvaWQgZ19ob29rX2ZyZWUgKEdIb29r
TGlzdCAqaG9va19saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdIb29rICpob29rKTsKdm9pZCBnX2hvb2tfcmVmIChHSG9va0xpc3QgKmhvb2tfbGlzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSG9vayAqaG9vayk7CnZvaWQg
Z19ob29rX3VucmVmIChHSG9va0xpc3QgKmhvb2tfbGlzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHSG9vayAqaG9vayk7Cmdib29sZWFuIGdfaG9va19kZXN0cm95
IChHSG9va0xpc3QgKmhvb2tfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBndWxvbmcgaG9va19pZCk7CnZvaWQgZ19ob29rX2Rlc3Ryb3lfbGluayAoR0hvb2tM
aXN0ICpob29rX2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0hvb2sgKmhvb2spOwp2b2lkIGdfaG9va19wcmVwZW5kIChHSG9va0xpc3QgKmhvb2tfbGlzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSG9vayAqaG9vayk7CnZv
aWQgZ19ob29rX2luc2VydF9iZWZvcmUgKEdIb29rTGlzdCAqaG9va19saXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIb29rICpzaWJsaW5nLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIb29rICpob29rKTsKdm9pZCBnX2hvb2tf
aW5zZXJ0X3NvcnRlZCAoR0hvb2tMaXN0ICpob29rX2xpc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0hvb2sgKmhvb2ssCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0hvb2tDb21wYXJlRnVuYyBmdW5jKTsKR0hvb2sqIGdfaG9va19n
ZXQgKEdIb29rTGlzdCAqaG9va19saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGd1bG9uZyBob29rX2lkKTsKR0hvb2sqIGdfaG9va19maW5kIChHSG9va0xpc3Qg
Kmhvb2tfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9v
bGVhbiBuZWVkX3ZhbGlkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHSG9va0ZpbmRGdW5jIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3BvaW50ZXIgZGF0YSk7CkdIb29rKiBnX2hvb2tfZmluZF9kYXRhIChHSG9va0xpc3Qg
Kmhvb2tfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9v
bGVhbiBuZWVkX3ZhbGlkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBncG9pbnRlciBkYXRhKTsKR0hvb2sqIGdfaG9va19maW5kX2Z1bmMgKEdIb29rTGlzdCAqaG9v
a19saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFu
IG5lZWRfdmFsaWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdw
b2ludGVyIGZ1bmMpOwpHSG9vayogZ19ob29rX2ZpbmRfZnVuY19kYXRhIChHSG9va0xpc3QgKmhv
b2tfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVh
biBuZWVkX3ZhbGlkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
cG9pbnRlciBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdw
b2ludGVyIGRhdGEpOwoKR0hvb2sqIGdfaG9va19maXJzdF92YWxpZCAoR0hvb2tMaXN0ICpob29r
X2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4g
bWF5X2JlX2luX2NhbGwpOwoKCgpHSG9vayogZ19ob29rX25leHRfdmFsaWQgKEdIb29rTGlzdCAq
aG9va19saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIb29r
ICpob29rLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFu
IG1heV9iZV9pbl9jYWxsKTsKCmdpbnQgZ19ob29rX2NvbXBhcmVfaWRzIChHSG9vayAqbmV3X2hv
b2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0hvb2sgKnNpYmxp
bmcpOwoKCgoKCnZvaWQgZ19ob29rX2xpc3RfaW52b2tlIChHSG9va0xpc3QgKmhvb2tfbGlzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBtYXlfcmVj
dXJzZSk7CgoKCnZvaWQgZ19ob29rX2xpc3RfaW52b2tlX2NoZWNrIChHSG9va0xpc3QgKmhvb2tf
bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBt
YXlfcmVjdXJzZSk7CgoKdm9pZCBnX2hvb2tfbGlzdF9tYXJzaGFsIChHSG9va0xpc3QgKmhvb2tf
bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBt
YXlfcmVjdXJzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSG9v
a01hcnNoYWxsZXIgbWFyc2hhbGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBncG9pbnRlciBtYXJzaGFsX2RhdGEpOwp2b2lkIGdfaG9va19saXN0X21hcnNoYWxf
Y2hlY2sgKEdIb29rTGlzdCAqaG9va19saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdib29sZWFuIG1heV9yZWN1cnNlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdIb29rQ2hlY2tNYXJzaGFsbGVyIG1hcnNoYWxsZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgbWFyc2hhbF9kYXRh
KTsKCgojIDQ0ICJnbGliLmgiIDIKIyAxICIuLi9nbGliL2dpb2NoYW5uZWwuaCIgMQojIDMxICIu
Li9nbGliL2dpb2NoYW5uZWwuaCIKIyAxICIuLi9nbGliL2dtYWluLmgiIDEKIyAyMyAiLi4vZ2xp
Yi9nbWFpbi5oIgojIDEgIi4uL2dsaWIvZ3NsaXN0LmgiIDEKIyAzMiAiLi4vZ2xpYi9nc2xpc3Qu
aCIKCgp0eXBlZGVmIHN0cnVjdCBfR1NMaXN0IEdTTGlzdDsKCnN0cnVjdCBfR1NMaXN0CnsKICBn
cG9pbnRlciBkYXRhOwogIEdTTGlzdCAqbmV4dDsKfTsKCgoKdm9pZCBnX3NsaXN0X3B1c2hfYWxs
b2NhdG9yIChHQWxsb2NhdG9yICphbGxvY2F0b3IpOwp2b2lkIGdfc2xpc3RfcG9wX2FsbG9jYXRv
ciAodm9pZCk7CkdTTGlzdCogZ19zbGlzdF9hbGxvYyAodm9pZCk7CnZvaWQgZ19zbGlzdF9mcmVl
IChHU0xpc3QgKmxpc3QpOwp2b2lkIGdfc2xpc3RfZnJlZV8xIChHU0xpc3QgKmxpc3QpOwpHU0xp
c3QqIGdfc2xpc3RfYXBwZW5kIChHU0xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwpHU0xpc3QqIGdfc2xpc3RfcHJlcGVuZCAoR1NMaXN0
ICpsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKTsK
R1NMaXN0KiBnX3NsaXN0X2luc2VydCAoR1NMaXN0ICpsaXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBncG9pbnRlciBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnaW50IHBvc2l0aW9uKTsKR1NMaXN0KiBnX3NsaXN0X2luc2VydF9zb3J0ZWQgKEdTTGlz
dCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NvbXBhcmVGdW5jIGZ1bmMpOwpHU0xp
c3QqIGdfc2xpc3RfaW5zZXJ0X2JlZm9yZSAoR1NMaXN0ICpzbGlzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR1NMaXN0ICpzaWJsaW5nLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBncG9pbnRlciBkYXRhKTsKR1NMaXN0KiBnX3NsaXN0X2NvbmNhdCAoR1NMaXN0
ICpsaXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NMaXN0ICpsaXN0Mik7
CkdTTGlzdCogZ19zbGlzdF9yZW1vdmUgKEdTTGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKTsKR1NMaXN0KiBnX3NsaXN0X3JlbW92
ZV9hbGwgKEdTTGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Nv
bnN0cG9pbnRlciBkYXRhKTsKR1NMaXN0KiBnX3NsaXN0X3JlbW92ZV9saW5rIChHU0xpc3QgKmxp
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTTGlzdCAqbGlua18pOwpHU0xp
c3QqIGdfc2xpc3RfZGVsZXRlX2xpbmsgKEdTTGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1NMaXN0ICpsaW5rXyk7CkdTTGlzdCogZ19zbGlzdF9yZXZlcnNlIChH
U0xpc3QgKmxpc3QpOwpHU0xpc3QqIGdfc2xpc3RfY29weSAoR1NMaXN0ICpsaXN0KTsKR1NMaXN0
KiBnX3NsaXN0X250aCAoR1NMaXN0ICpsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBndWludCBuKTsKR1NMaXN0KiBnX3NsaXN0X2ZpbmQgKEdTTGlzdCAqbGlzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKTsKR1NMaXN0KiBn
X3NsaXN0X2ZpbmRfY3VzdG9tIChHU0xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0NvbXBhcmVGdW5jIGZ1bmMpOwpnaW50IGdfc2xpc3RfcG9zaXRpb24gKEdTTGlzdCAq
bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NMaXN0ICpsbGluayk7Cmdp
bnQgZ19zbGlzdF9pbmRleCAoR1NMaXN0ICpsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnY29uc3Rwb2ludGVyIGRhdGEpOwpHU0xpc3QqIGdfc2xpc3RfbGFzdCAoR1NMaXN0
ICpsaXN0KTsKZ3VpbnQgZ19zbGlzdF9sZW5ndGggKEdTTGlzdCAqbGlzdCk7CnZvaWQgZ19zbGlz
dF9mb3JlYWNoIChHU0xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdGdW5jIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVz
ZXJfZGF0YSk7CkdTTGlzdCogZ19zbGlzdF9zb3J0IChHU0xpc3QgKmxpc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDb21wYXJlRnVuYyBjb21wYXJlX2Z1bmMpOwpHU0xpc3Qq
IGdfc2xpc3Rfc29ydF93aXRoX2RhdGEgKEdTTGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0NvbXBhcmVEYXRhRnVuYyBjb21wYXJlX2Z1bmMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Cmdwb2ludGVyIGdfc2xp
c3RfbnRoX2RhdGEgKEdTTGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3VpbnQgbik7CgoKCiMgMjQgIi4uL2dsaWIvZ21haW4uaCIgMgoKCgoKdHlwZWRlZiBzdHJ1
Y3QgX0dNYWluQ29udGV4dCBHTWFpbkNvbnRleHQ7CnR5cGVkZWYgc3RydWN0IF9HTWFpbkxvb3Ag
R01haW5Mb29wOwp0eXBlZGVmIHN0cnVjdCBfR1NvdXJjZSBHU291cmNlOwp0eXBlZGVmIHN0cnVj
dCBfR1NvdXJjZUNhbGxiYWNrRnVuY3MgR1NvdXJjZUNhbGxiYWNrRnVuY3M7CnR5cGVkZWYgc3Ry
dWN0IF9HU291cmNlRnVuY3MgR1NvdXJjZUZ1bmNzOwoKdHlwZWRlZiBnYm9vbGVhbiAoKkdTb3Vy
Y2VGdW5jKSAoZ3BvaW50ZXIgZGF0YSk7CgpzdHJ1Y3QgX0dTb3VyY2UKewoKICBncG9pbnRlciBj
YWxsYmFja19kYXRhOwogIEdTb3VyY2VDYWxsYmFja0Z1bmNzICpjYWxsYmFja19mdW5jczsKCiAg
R1NvdXJjZUZ1bmNzICpzb3VyY2VfZnVuY3M7CiAgZ3VpbnQgcmVmX2NvdW50OwoKICBHTWFpbkNv
bnRleHQgKmNvbnRleHQ7CgogIGdpbnQgcHJpb3JpdHk7CiAgZ3VpbnQgZmxhZ3M7CiAgZ3VpbnQg
c291cmNlX2lkOwoKICBHU0xpc3QgKnBvbGxfZmRzOwoKICBHU291cmNlICpwcmV2OwogIEdTb3Vy
Y2UgKm5leHQ7CgogIGdwb2ludGVyIHJlc2VydmVkMTsKICBncG9pbnRlciByZXNlcnZlZDI7Cn07
CgpzdHJ1Y3QgX0dTb3VyY2VDYWxsYmFja0Z1bmNzCnsKICB2b2lkICgqcmVmKSAoZ3BvaW50ZXIg
Y2JfZGF0YSk7CiAgdm9pZCAoKnVucmVmKSAoZ3BvaW50ZXIgY2JfZGF0YSk7CiAgdm9pZCAoKmdl
dCkgKGdwb2ludGVyIGNiX2RhdGEsCiAgICAgICAgICAgICAgICAgR1NvdXJjZSAqc291cmNlLAog
ICAgICAgICAgICAgICAgIEdTb3VyY2VGdW5jICpmdW5jLAogICAgICAgICAgICAgICAgIGdwb2lu
dGVyICpkYXRhKTsKfTsKCnR5cGVkZWYgdm9pZCAoKkdTb3VyY2VEdW1teU1hcnNoYWwpICh2b2lk
KTsKCnN0cnVjdCBfR1NvdXJjZUZ1bmNzCnsKICBnYm9vbGVhbiAoKnByZXBhcmUpIChHU291cmNl
ICpzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgKnRpbWVvdXRfKTsKICBnYm9v
bGVhbiAoKmNoZWNrKSAoR1NvdXJjZSAqc291cmNlKTsKICBnYm9vbGVhbiAoKmRpc3BhdGNoKSAo
R1NvdXJjZSAqc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICBHU291cmNlRnVuYyBjYWxs
YmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKICB2b2lk
ICgqZmluYWxpemUpIChHU291cmNlICpzb3VyY2UpOwoKCiAgR1NvdXJjZUZ1bmMgY2xvc3VyZV9j
YWxsYmFjazsKICBHU291cmNlRHVtbXlNYXJzaGFsIGNsb3N1cmVfbWFyc2hhbDsKfTsKIyAxMTUg
Ii4uL2dsaWIvZ21haW4uaCIKdHlwZWRlZiBzdHJ1Y3QgX0dQb2xsRkQgR1BvbGxGRDsKdHlwZWRl
ZiBnaW50ICgqR1BvbGxGdW5jKSAoR1BvbGxGRCAqdWZkcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3VpbnQgbmZzZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2ludCB0aW1lb3V0Xyk7CgpzdHJ1Y3QgX0dQb2xsRkQKewogIGdpbnQgZmQ7CiAgZ3VzaG9ydCBl
dmVudHM7CiAgZ3VzaG9ydCByZXZlbnRzOwp9OwojIDEzNyAiLi4vZ2xpYi9nbWFpbi5oIgpHTWFp
bkNvbnRleHQgKmdfbWFpbl9jb250ZXh0X25ldyAodm9pZCk7CnZvaWQgZ19tYWluX2NvbnRleHRf
cmVmIChHTWFpbkNvbnRleHQgKmNvbnRleHQpOwp2b2lkIGdfbWFpbl9jb250ZXh0X3VucmVmIChH
TWFpbkNvbnRleHQgKmNvbnRleHQpOwpHTWFpbkNvbnRleHQgKmdfbWFpbl9jb250ZXh0X2RlZmF1
bHQgKHZvaWQpOwoKZ2Jvb2xlYW4gZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChHTWFpbkNvbnRl
eHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9v
bGVhbiBtYXlfYmxvY2spOwpnYm9vbGVhbiBnX21haW5fY29udGV4dF9wZW5kaW5nIChHTWFpbkNv
bnRleHQgKmNvbnRleHQpOwoKCgpHU291cmNlICpnX21haW5fY29udGV4dF9maW5kX3NvdXJjZV9i
eV9pZCAoR01haW5Db250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgc291cmNlX2lkKTsKR1NvdXJj
ZSAqZ19tYWluX2NvbnRleHRfZmluZF9zb3VyY2VfYnlfdXNlcl9kYXRhIChHTWFpbkNvbnRleHQg
KmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwpHU291cmNlICpnX21haW5fY29udGV4
dF9maW5kX3NvdXJjZV9ieV9mdW5jc191c2VyX2RhdGEgKEdNYWluQ29udGV4dCAqY29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdTb3VyY2VGdW5jcyAqZnVuY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwoKCgp2b2lk
IGdfbWFpbl9jb250ZXh0X3dha2V1cCAoR01haW5Db250ZXh0ICpjb250ZXh0KTsKZ2Jvb2xlYW4g
Z19tYWluX2NvbnRleHRfYWNxdWlyZSAoR01haW5Db250ZXh0ICpjb250ZXh0KTsKdm9pZCBnX21h
aW5fY29udGV4dF9yZWxlYXNlIChHTWFpbkNvbnRleHQgKmNvbnRleHQpOwpnYm9vbGVhbiBnX21h
aW5fY29udGV4dF93YWl0IChHTWFpbkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDb25kICpjb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTXV0ZXggKm11dGV4KTsKCmdib29sZWFuIGdfbWFpbl9jb250ZXh0X3ByZXBhcmUgKEdN
YWluQ29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdp
bnQgKnByaW9yaXR5KTsKZ2ludCBnX21haW5fY29udGV4dF9xdWVyeSAoR01haW5Db250ZXh0ICpj
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBtYXhfcHJpb3Jp
dHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICp0aW1lb3V0XywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQb2xsRkQgKmZkcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbl9mZHMpOwpnaW50IGdfbWFpbl9jb250ZXh0X2No
ZWNrIChHTWFpbkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnaW50IG1heF9wcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdQb2xsRkQgKmZkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbl9m
ZHMpOwp2b2lkIGdfbWFpbl9jb250ZXh0X2Rpc3BhdGNoIChHTWFpbkNvbnRleHQgKmNvbnRleHQp
OwoKdm9pZCBnX21haW5fY29udGV4dF9zZXRfcG9sbF9mdW5jIChHTWFpbkNvbnRleHQgKmNvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUG9sbEZ1bmMgZnVu
Yyk7CkdQb2xsRnVuYyBnX21haW5fY29udGV4dF9nZXRfcG9sbF9mdW5jIChHTWFpbkNvbnRleHQg
KmNvbnRleHQpOwoKCgp2b2lkIGdfbWFpbl9jb250ZXh0X2FkZF9wb2xsIChHTWFpbkNvbnRleHQg
KmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BvbGxGRCAqZmQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBwcmlvcml0eSk7CnZvaWQg
Z19tYWluX2NvbnRleHRfcmVtb3ZlX3BvbGwgKEdNYWluQ29udGV4dCAqY29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUG9sbEZEICpmZCk7CgoKCkdNYWluTG9vcCAq
Z19tYWluX2xvb3BfbmV3IChHTWFpbkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gaXNfcnVubmluZyk7CnZvaWQgZ19tYWluX2xvb3Bf
cnVuIChHTWFpbkxvb3AgKmxvb3ApOwp2b2lkIGdfbWFpbl9sb29wX3F1aXQgKEdNYWluTG9vcCAq
bG9vcCk7CkdNYWluTG9vcCAqZ19tYWluX2xvb3BfcmVmIChHTWFpbkxvb3AgKmxvb3ApOwp2b2lk
IGdfbWFpbl9sb29wX3VucmVmIChHTWFpbkxvb3AgKmxvb3ApOwpnYm9vbGVhbiBnX21haW5fbG9v
cF9pc19ydW5uaW5nIChHTWFpbkxvb3AgKmxvb3ApOwpHTWFpbkNvbnRleHQgKmdfbWFpbl9sb29w
X2dldF9jb250ZXh0IChHTWFpbkxvb3AgKmxvb3ApOwoKCgpHU291cmNlICpnX3NvdXJjZV9uZXcg
KEdTb3VyY2VGdW5jcyAqc291cmNlX2Z1bmNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGd1aW50IHN0cnVjdF9zaXplKTsKR1NvdXJjZSAqZ19zb3VyY2VfcmVmIChHU291cmNl
ICpzb3VyY2UpOwp2b2lkIGdfc291cmNlX3VucmVmIChHU291cmNlICpzb3VyY2UpOwoKZ3VpbnQg
Z19zb3VyY2VfYXR0YWNoIChHU291cmNlICpzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR01haW5Db250ZXh0ICpjb250ZXh0KTsKdm9pZCBnX3NvdXJjZV9kZXN0cm95
IChHU291cmNlICpzb3VyY2UpOwoKdm9pZCBnX3NvdXJjZV9zZXRfcHJpb3JpdHkgKEdTb3VyY2Ug
KnNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IHByaW9yaXR5
KTsKZ2ludCBnX3NvdXJjZV9nZXRfcHJpb3JpdHkgKEdTb3VyY2UgKnNvdXJjZSk7CnZvaWQgZ19z
b3VyY2Vfc2V0X2Nhbl9yZWN1cnNlIChHU291cmNlICpzb3VyY2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gY2FuX3JlY3Vyc2UpOwpnYm9vbGVhbiBnX3NvdXJj
ZV9nZXRfY2FuX3JlY3Vyc2UgKEdTb3VyY2UgKnNvdXJjZSk7Cmd1aW50IGdfc291cmNlX2dldF9p
ZCAoR1NvdXJjZSAqc291cmNlKTsKCkdNYWluQ29udGV4dCAqZ19zb3VyY2VfZ2V0X2NvbnRleHQg
KEdTb3VyY2UgKnNvdXJjZSk7Cgp2b2lkIGdfc291cmNlX3NldF9jYWxsYmFjayAoR1NvdXJjZSAq
c291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NvdXJjZUZ1bmMg
ZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBub3Rp
ZnkpOwoKCgp2b2lkIGdfc291cmNlX3NldF9jYWxsYmFja19pbmRpcmVjdCAoR1NvdXJjZSAqc291
cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgY2FsbGJh
Y2tfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTb3VyY2VDYWxs
YmFja0Z1bmNzICpjYWxsYmFja19mdW5jcyk7Cgp2b2lkIGdfc291cmNlX2FkZF9wb2xsIChHU291
cmNlICpzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQb2xsRkQg
KmZkKTsKdm9pZCBnX3NvdXJjZV9yZW1vdmVfcG9sbCAoR1NvdXJjZSAqc291cmNlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUG9sbEZEICpmZCk7Cgp2b2lkIGdfc291cmNl
X2dldF9jdXJyZW50X3RpbWUgKEdTb3VyY2UgKnNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1RpbWVWYWwgKnRpbWV2YWwpOwoKCgoKCgoKR1NvdXJjZSAqZ19pZGxl
X3NvdXJjZV9uZXcgKHZvaWQpOwpHU291cmNlICpnX3RpbWVvdXRfc291cmNlX25ldyAoZ3VpbnQg
aW50ZXJ2YWwpOwoKCgp2b2lkIGdfZ2V0X2N1cnJlbnRfdGltZSAoR1RpbWVWYWwgKnJlc3VsdCk7
CiMgMjc3ICIuLi9nbGliL2dtYWluLmgiCmdib29sZWFuIGdfc291cmNlX3JlbW92ZSAoZ3VpbnQg
dGFnKTsKZ2Jvb2xlYW4gZ19zb3VyY2VfcmVtb3ZlX2J5X3VzZXJfZGF0YSAoZ3BvaW50ZXIgdXNl
cl9kYXRhKTsKZ2Jvb2xlYW4gZ19zb3VyY2VfcmVtb3ZlX2J5X2Z1bmNzX3VzZXJfZGF0YSAoR1Nv
dXJjZUZ1bmNzICpmdW5jcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CgoKZ3VpbnQgZ190aW1lb3V0X2FkZF9mdWxsIChn
aW50IHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1
aW50IGludGVydmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdT
b3VyY2VGdW5jIGZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdwb2ludGVyIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KTsKZ3VpbnQgZ190aW1lb3V0X2FkZCAoZ3VpbnQgaW50
ZXJ2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NvdXJjZUZ1
bmMgZnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bv
aW50ZXIgZGF0YSk7Cmd1aW50IGdfaWRsZV9hZGQgKEdTb3VyY2VGdW5jIGZ1bmN0aW9uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwpndWlu
dCBnX2lkbGVfYWRkX2Z1bGwgKGdpbnQgcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR1NvdXJjZUZ1bmMgZnVuY3Rpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBub3RpZnkpOwpnYm9vbGVhbiBn
X2lkbGVfcmVtb3ZlX2J5X2RhdGEgKGdwb2ludGVyIGRhdGEpOwoKCmV4dGVybiBHU291cmNlRnVu
Y3MgZ190aW1lb3V0X2Z1bmNzOwpleHRlcm4gR1NvdXJjZUZ1bmNzIGdfaWRsZV9mdW5jczsKIyAz
MTMgIi4uL2dsaWIvZ21haW4uaCIKCiMgMzIgIi4uL2dsaWIvZ2lvY2hhbm5lbC5oIiAyCiMgMSAi
Li4vZ2xpYi9nc3RyaW5nLmgiIDEKIyAzMSAiLi4vZ2xpYi9nc3RyaW5nLmgiCiMgMSAiLi4vZ2xp
Yi9ndW5pY29kZS5oIiAxCiMgMjggIi4uL2dsaWIvZ3VuaWNvZGUuaCIKCgp0eXBlZGVmIGd1aW50
MzIgZ3VuaWNoYXI7CnR5cGVkZWYgZ3VpbnQxNiBndW5pY2hhcjI7CgoKCgp0eXBlZGVmIGVudW0K
ewogIEdfVU5JQ09ERV9DT05UUk9MLAogIEdfVU5JQ09ERV9GT1JNQVQsCiAgR19VTklDT0RFX1VO
QVNTSUdORUQsCiAgR19VTklDT0RFX1BSSVZBVEVfVVNFLAogIEdfVU5JQ09ERV9TVVJST0dBVEUs
CiAgR19VTklDT0RFX0xPV0VSQ0FTRV9MRVRURVIsCiAgR19VTklDT0RFX01PRElGSUVSX0xFVFRF
UiwKICBHX1VOSUNPREVfT1RIRVJfTEVUVEVSLAogIEdfVU5JQ09ERV9USVRMRUNBU0VfTEVUVEVS
LAogIEdfVU5JQ09ERV9VUFBFUkNBU0VfTEVUVEVSLAogIEdfVU5JQ09ERV9DT01CSU5JTkdfTUFS
SywKICBHX1VOSUNPREVfRU5DTE9TSU5HX01BUkssCiAgR19VTklDT0RFX05PTl9TUEFDSU5HX01B
UkssCiAgR19VTklDT0RFX0RFQ0lNQUxfTlVNQkVSLAogIEdfVU5JQ09ERV9MRVRURVJfTlVNQkVS
LAogIEdfVU5JQ09ERV9PVEhFUl9OVU1CRVIsCiAgR19VTklDT0RFX0NPTk5FQ1RfUFVOQ1RVQVRJ
T04sCiAgR19VTklDT0RFX0RBU0hfUFVOQ1RVQVRJT04sCiAgR19VTklDT0RFX0NMT1NFX1BVTkNU
VUFUSU9OLAogIEdfVU5JQ09ERV9GSU5BTF9QVU5DVFVBVElPTiwKICBHX1VOSUNPREVfSU5JVElB
TF9QVU5DVFVBVElPTiwKICBHX1VOSUNPREVfT1RIRVJfUFVOQ1RVQVRJT04sCiAgR19VTklDT0RF
X09QRU5fUFVOQ1RVQVRJT04sCiAgR19VTklDT0RFX0NVUlJFTkNZX1NZTUJPTCwKICBHX1VOSUNP
REVfTU9ESUZJRVJfU1lNQk9MLAogIEdfVU5JQ09ERV9NQVRIX1NZTUJPTCwKICBHX1VOSUNPREVf
T1RIRVJfU1lNQk9MLAogIEdfVU5JQ09ERV9MSU5FX1NFUEFSQVRPUiwKICBHX1VOSUNPREVfUEFS
QUdSQVBIX1NFUEFSQVRPUiwKICBHX1VOSUNPREVfU1BBQ0VfU0VQQVJBVE9SCn0gR1VuaWNvZGVU
eXBlOwoKCgoKdHlwZWRlZiBlbnVtCnsKICBHX1VOSUNPREVfQlJFQUtfTUFOREFUT1JZLAogIEdf
VU5JQ09ERV9CUkVBS19DQVJSSUFHRV9SRVRVUk4sCiAgR19VTklDT0RFX0JSRUFLX0xJTkVfRkVF
RCwKICBHX1VOSUNPREVfQlJFQUtfQ09NQklOSU5HX01BUkssCiAgR19VTklDT0RFX0JSRUFLX1NV
UlJPR0FURSwKICBHX1VOSUNPREVfQlJFQUtfWkVST19XSURUSF9TUEFDRSwKICBHX1VOSUNPREVf
QlJFQUtfSU5TRVBBUkFCTEUsCiAgR19VTklDT0RFX0JSRUFLX05PTl9CUkVBS0lOR19HTFVFLAog
IEdfVU5JQ09ERV9CUkVBS19DT05USU5HRU5ULAogIEdfVU5JQ09ERV9CUkVBS19TUEFDRSwKICBH
X1VOSUNPREVfQlJFQUtfQUZURVIsCiAgR19VTklDT0RFX0JSRUFLX0JFRk9SRSwKICBHX1VOSUNP
REVfQlJFQUtfQkVGT1JFX0FORF9BRlRFUiwKICBHX1VOSUNPREVfQlJFQUtfSFlQSEVOLAogIEdf
VU5JQ09ERV9CUkVBS19OT05fU1RBUlRFUiwKICBHX1VOSUNPREVfQlJFQUtfT1BFTl9QVU5DVFVB
VElPTiwKICBHX1VOSUNPREVfQlJFQUtfQ0xPU0VfUFVOQ1RVQVRJT04sCiAgR19VTklDT0RFX0JS
RUFLX1FVT1RBVElPTiwKICBHX1VOSUNPREVfQlJFQUtfRVhDTEFNQVRJT04sCiAgR19VTklDT0RF
X0JSRUFLX0lERU9HUkFQSElDLAogIEdfVU5JQ09ERV9CUkVBS19OVU1FUklDLAogIEdfVU5JQ09E
RV9CUkVBS19JTkZJWF9TRVBBUkFUT1IsCiAgR19VTklDT0RFX0JSRUFLX1NZTUJPTCwKICBHX1VO
SUNPREVfQlJFQUtfQUxQSEFCRVRJQywKICBHX1VOSUNPREVfQlJFQUtfUFJFRklYLAogIEdfVU5J
Q09ERV9CUkVBS19QT1NURklYLAogIEdfVU5JQ09ERV9CUkVBS19DT01QTEVYX0NPTlRFWFQsCiAg
R19VTklDT0RFX0JSRUFLX0FNQklHVU9VUywKICBHX1VOSUNPREVfQlJFQUtfVU5LTk9XTgp9IEdV
bmljb2RlQnJlYWtUeXBlOwoKCgoKCgoKZ2Jvb2xlYW4gZ19nZXRfY2hhcnNldCAoY29uc3QgY2hh
ciAqKmNoYXJzZXQpOwoKCgpnYm9vbGVhbiBnX3VuaWNoYXJfaXNhbG51bSAoZ3VuaWNoYXIgYykg
X19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7Cmdib29sZWFuIGdfdW5pY2hhcl9pc2FscGhhIChn
dW5pY2hhciBjKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKZ2Jvb2xlYW4gZ191bmljaGFy
X2lzY250cmwgKGd1bmljaGFyIGMpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpnYm9vbGVh
biBnX3VuaWNoYXJfaXNkaWdpdCAoZ3VuaWNoYXIgYykgX19hdHRyaWJ1dGVfXygoX19jb25zdF9f
KSk7Cmdib29sZWFuIGdfdW5pY2hhcl9pc2dyYXBoIChndW5pY2hhciBjKSBfX2F0dHJpYnV0ZV9f
KChfX2NvbnN0X18pKTsKZ2Jvb2xlYW4gZ191bmljaGFyX2lzbG93ZXIgKGd1bmljaGFyIGMpIF9f
YXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpnYm9vbGVhbiBnX3VuaWNoYXJfaXNwcmludCAoZ3Vu
aWNoYXIgYykgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7Cmdib29sZWFuIGdfdW5pY2hhcl9p
c3B1bmN0IChndW5pY2hhciBjKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKZ2Jvb2xlYW4g
Z191bmljaGFyX2lzc3BhY2UgKGd1bmljaGFyIGMpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykp
OwpnYm9vbGVhbiBnX3VuaWNoYXJfaXN1cHBlciAoZ3VuaWNoYXIgYykgX19hdHRyaWJ1dGVfXygo
X19jb25zdF9fKSk7Cmdib29sZWFuIGdfdW5pY2hhcl9pc3hkaWdpdCAoZ3VuaWNoYXIgYykgX19h
dHRyaWJ1dGVfXygoX19jb25zdF9fKSk7Cmdib29sZWFuIGdfdW5pY2hhcl9pc3RpdGxlIChndW5p
Y2hhciBjKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKZ2Jvb2xlYW4gZ191bmljaGFyX2lz
ZGVmaW5lZCAoZ3VuaWNoYXIgYykgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7Cmdib29sZWFu
IGdfdW5pY2hhcl9pc3dpZGUgKGd1bmljaGFyIGMpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykp
OwoKCgpndW5pY2hhciBnX3VuaWNoYXJfdG91cHBlciAoZ3VuaWNoYXIgYykgX19hdHRyaWJ1dGVf
XygoX19jb25zdF9fKSk7Cmd1bmljaGFyIGdfdW5pY2hhcl90b2xvd2VyIChndW5pY2hhciBjKSBf
X2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKZ3VuaWNoYXIgZ191bmljaGFyX3RvdGl0bGUgKGd1
bmljaGFyIGMpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwoKCgpnaW50IGdfdW5pY2hhcl9k
aWdpdF92YWx1ZSAoZ3VuaWNoYXIgYykgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CgpnaW50
IGdfdW5pY2hhcl94ZGlnaXRfdmFsdWUgKGd1bmljaGFyIGMpIF9fYXR0cmlidXRlX18oKF9fY29u
c3RfXykpOwoKCkdVbmljb2RlVHlwZSBnX3VuaWNoYXJfdHlwZSAoZ3VuaWNoYXIgYykgX19hdHRy
aWJ1dGVfXygoX19jb25zdF9fKSk7CgoKR1VuaWNvZGVCcmVha1R5cGUgZ191bmljaGFyX2JyZWFr
X3R5cGUgKGd1bmljaGFyIGMpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwoKCgoKCnZvaWQg
Z191bmljb2RlX2Nhbm9uaWNhbF9vcmRlcmluZyAoZ3VuaWNoYXIgKnN0cmluZywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBsZW4pOwoKCgoKZ3VuaWNoYXIgKmdfdW5p
Y29kZV9jYW5vbmljYWxfZGVjb21wb3NpdGlvbiAoZ3VuaWNoYXIgY2gsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplICpyZXN1bHRfbGVuKTsKCgoKZXh0
ZXJuIGNvbnN0IGdjaGFyICogY29uc3QgZ191dGY4X3NraXA7CgoKCmd1bmljaGFyIGdfdXRmOF9n
ZXRfY2hhciAoY29uc3QgZ2NoYXIgKnApOwpndW5pY2hhciBnX3V0ZjhfZ2V0X2NoYXJfdmFsaWRh
dGVkIChjb25zdCBnY2hhciAqcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3NzaXplIG1heF9sZW4pOwoKZ2NoYXIqIGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRlciAoY29uc3Qg
Z2NoYXIgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9uZyBvZmZz
ZXQpOwpnbG9uZyBnX3V0ZjhfcG9pbnRlcl90b19vZmZzZXQgKGNvbnN0IGdjaGFyICpzdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnBvcyk7CmdjaGFy
KiBnX3V0ZjhfcHJldl9jaGFyIChjb25zdCBnY2hhciAqcCk7CmdjaGFyKiBnX3V0ZjhfZmluZF9u
ZXh0X2NoYXIgKGNvbnN0IGdjaGFyICpwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdjaGFyICplbmQpOwpnY2hhciogZ191dGY4X2ZpbmRfcHJldl9jaGFyIChjb25z
dCBnY2hhciAqc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdj
aGFyICpwKTsKCmdsb25nIGdfdXRmOF9zdHJsZW4gKGNvbnN0IGdjaGFyICpwLAogICAgICAgICAg
ICAgICAgICAgICBnc3NpemUgbWF4KTsKCgpnY2hhciogZ191dGY4X3N0cm5jcHkgKGdjaGFyICpk
ZXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpzcmMsCiAgICAgICAgICAg
ICAgICAgICAgICAgZ3NpemUgbik7CgoKCmdjaGFyKiBnX3V0Zjhfc3RyY2hyIChjb25zdCBnY2hh
ciAqcCwKICAgICAgICAgICAgICAgICAgICAgICBnc3NpemUgbGVuLAogICAgICAgICAgICAgICAg
ICAgICAgIGd1bmljaGFyIGMpOwpnY2hhciogZ191dGY4X3N0cnJjaHIgKGNvbnN0IGdjaGFyICpw
LAogICAgICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBsZW4sCiAgICAgICAgICAgICAgICAgICAg
ICAgZ3VuaWNoYXIgYyk7CmdjaGFyKiBnX3V0Zjhfc3RycmV2ZXJzZSAoY29uc3QgZ2NoYXIgKnN0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NpemUgbGVuKTsKCmd1bmljaGFyMiAqZ191
dGY4X3RvX3V0ZjE2IChjb25zdCBnY2hhciAqc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsb25nIGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9uZyAq
aXRlbXNfcmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9uZyAqaXRlbXNf
d3JpdHRlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7
Cmd1bmljaGFyICogZ191dGY4X3RvX3VjczQgKGNvbnN0IGdjaGFyICpzdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2xvbmcgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsb25nICppdGVtc19yZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsb25nICppdGVtc193cml0dGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdF
cnJvciAqKmVycm9yKTsKZ3VuaWNoYXIgKiBnX3V0ZjhfdG9fdWNzNF9mYXN0IChjb25zdCBnY2hh
ciAqc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb25nIGxlbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9uZyAqaXRlbXNfd3JpdHRlbik7Cmd1bmljaGFy
ICogZ191dGYxNl90b191Y3M0IChjb25zdCBndW5pY2hhcjIgKnN0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbG9uZyBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2xvbmcgKml0ZW1zX3JlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xv
bmcgKml0ZW1zX3dyaXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9y
ICoqZXJyb3IpOwpnY2hhciogZ191dGYxNl90b191dGY4IChjb25zdCBndW5pY2hhcjIgKnN0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9uZyBsZW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2xvbmcgKml0ZW1zX3JlYWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2xvbmcgKml0ZW1zX3dyaXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwpndW5pY2hhcjIgKmdfdWNzNF90b191dGYxNiAoY29u
c3QgZ3VuaWNoYXIgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9uZyBs
ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvbmcgKml0ZW1zX3JlYWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvbmcgKml0ZW1zX3dyaXR0ZW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwpnY2hhciogZ191Y3M0
X3RvX3V0ZjggKGNvbnN0IGd1bmljaGFyICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2xvbmcgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb25nICpp
dGVtc19yZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb25nICppdGVtc193
cml0dGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsK
CgoKCgpnaW50IGdfdW5pY2hhcl90b191dGY4IChndW5pY2hhciBjLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdjaGFyICpvdXRidWYpOwoKCgoKCmdib29sZWFuIGdfdXRmOF92YWxpZGF0
ZSAoY29uc3QgZ2NoYXIgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NpemUgbWF4
X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqKmVuZCk7CgoKZ2Jv
b2xlYW4gZ191bmljaGFyX3ZhbGlkYXRlIChndW5pY2hhciBjaCk7CgpnY2hhciAqZ191dGY4X3N0
cnVwIChjb25zdCBnY2hhciAqc3RyLAogICAgICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBsZW4p
OwpnY2hhciAqZ191dGY4X3N0cmRvd24gKGNvbnN0IGdjaGFyICpzdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgZ3NzaXplIGxlbik7CmdjaGFyICpnX3V0ZjhfY2FzZWZvbGQgKGNvbnN0IGdjaGFy
ICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBsZW4pOwoKdHlwZWRlZiBlbnVt
IHsKICBHX05PUk1BTElaRV9ERUZBVUxULAogIEdfTk9STUFMSVpFX05GRCA9IEdfTk9STUFMSVpF
X0RFRkFVTFQsCiAgR19OT1JNQUxJWkVfREVGQVVMVF9DT01QT1NFLAogIEdfTk9STUFMSVpFX05G
QyA9IEdfTk9STUFMSVpFX0RFRkFVTFRfQ09NUE9TRSwKICBHX05PUk1BTElaRV9BTEwsCiAgR19O
T1JNQUxJWkVfTkZLRCA9IEdfTk9STUFMSVpFX0FMTCwKICBHX05PUk1BTElaRV9BTExfQ09NUE9T
RSwKICBHX05PUk1BTElaRV9ORktDID0gR19OT1JNQUxJWkVfQUxMX0NPTVBPU0UKfSBHTm9ybWFs
aXplTW9kZTsKCmdjaGFyICpnX3V0Zjhfbm9ybWFsaXplIChjb25zdCBnY2hhciAqc3RyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgZ3NzaXplIGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAg
IEdOb3JtYWxpemVNb2RlIG1vZGUpOwoKZ2ludCBnX3V0ZjhfY29sbGF0ZSAoY29uc3QgZ2NoYXIg
KnN0cjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpzdHIyKTsKZ2No
YXIgKmdfdXRmOF9jb2xsYXRlX2tleSAoY29uc3QgZ2NoYXIgKnN0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3NzaXplIGxlbik7CgoKIyAzMiAiLi4vZ2xpYi9nc3RyaW5nLmgiIDIKCgoK
dHlwZWRlZiBzdHJ1Y3QgX0dTdHJpbmcgR1N0cmluZzsKdHlwZWRlZiBzdHJ1Y3QgX0dTdHJpbmdD
aHVuayBHU3RyaW5nQ2h1bms7CgpzdHJ1Y3QgX0dTdHJpbmcKewogIGdjaGFyICpzdHI7CiAgZ3Np
emUgbGVuOwogIGdzaXplIGFsbG9jYXRlZF9sZW47Cn07CgoKCkdTdHJpbmdDaHVuayogZ19zdHJp
bmdfY2h1bmtfbmV3IChnc2l6ZSBzaXplKTsKdm9pZCBnX3N0cmluZ19jaHVua19mcmVlIChHU3Ry
aW5nQ2h1bmsgKmNodW5rKTsKZ2NoYXIqIGdfc3RyaW5nX2NodW5rX2luc2VydCAoR1N0cmluZ0No
dW5rICpjaHVuaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnY2hhciAqc3RyaW5nKTsKZ2NoYXIqIGdfc3RyaW5nX2NodW5rX2luc2VydF9jb25zdCAo
R1N0cmluZ0NodW5rICpjaHVuaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnY2hhciAqc3RyaW5nKTsKCgoKCkdTdHJpbmcqIGdfc3RyaW5nX25ldyAo
Y29uc3QgZ2NoYXIgKmluaXQpOwpHU3RyaW5nKiBnX3N0cmluZ19uZXdfbGVuIChjb25zdCBnY2hh
ciAqaW5pdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NpemUg
bGVuKTsKR1N0cmluZyogZ19zdHJpbmdfc2l6ZWRfbmV3IChnc2l6ZSBkZmxfc2l6ZSk7CmdjaGFy
KiBnX3N0cmluZ19mcmVlIChHU3RyaW5nICpzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gZnJlZV9zZWdtZW50KTsKZ2Jvb2xlYW4gZ19zdHJp
bmdfZXF1YWwgKGNvbnN0IEdTdHJpbmcgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgR1N0cmluZyAqdjIpOwpndWludCBnX3N0cmluZ19oYXNoIChjb25z
dCBHU3RyaW5nICpzdHIpOwpHU3RyaW5nKiBnX3N0cmluZ19hc3NpZ24gKEdTdHJpbmcgKnN0cmlu
ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAq
cnZhbCk7CkdTdHJpbmcqIGdfc3RyaW5nX3RydW5jYXRlIChHU3RyaW5nICpzdHJpbmcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgbGVuKTsKR1N0cmluZyog
Z19zdHJpbmdfc2V0X3NpemUgKEdTdHJpbmcgKnN0cmluZywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnc2l6ZSBsZW4pOwpHU3RyaW5nKiBnX3N0cmluZ19pbnNlcnRf
bGVuIChHU3RyaW5nICpzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3NzaXplIHBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnY2hhciAqdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdzc2l6ZSBsZW4pOwpHU3RyaW5nKiBnX3N0cmluZ19hcHBlbmQgKEdTdHJpbmcgKnN0cmlu
ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAq
dmFsKTsKR1N0cmluZyogZ19zdHJpbmdfYXBwZW5kX2xlbiAoR1N0cmluZyAqc3RyaW5nLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICp2YWwsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzaXplIGxlbik7CkdTdHJp
bmcqIGdfc3RyaW5nX2FwcGVuZF9jIChHU3RyaW5nICpzdHJpbmcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgYyk7CkdTdHJpbmcqIGdfc3RyaW5nX2FwcGVu
ZF91bmljaGFyIChHU3RyaW5nICpzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3VuaWNoYXIgd2MpOwpHU3RyaW5nKiBnX3N0cmluZ19wcmVwZW5kIChHU3Ry
aW5nICpzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2NoYXIgKnZhbCk7CkdTdHJpbmcqIGdfc3RyaW5nX3ByZXBlbmRfYyAoR1N0cmluZyAqc3Ry
aW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyIGMpOwpH
U3RyaW5nKiBnX3N0cmluZ19wcmVwZW5kX3VuaWNoYXIgKEdTdHJpbmcgKnN0cmluZywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndW5pY2hhciB3Yyk7CkdTdHJpbmcq
IGdfc3RyaW5nX3ByZXBlbmRfbGVuIChHU3RyaW5nICpzdHJpbmcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnZhbCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NpemUgbGVuKTsKR1N0cmluZyogZ19zdHJpbmdf
aW5zZXJ0IChHU3RyaW5nICpzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3NzaXplIHBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnY2hhciAqdmFsKTsKR1N0cmluZyogZ19zdHJpbmdfaW5zZXJ0X2MgKEdTdHJp
bmcgKnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3Np
emUgcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyIGMp
OwpHU3RyaW5nKiBnX3N0cmluZ19pbnNlcnRfdW5pY2hhciAoR1N0cmluZyAqc3RyaW5nLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBwb3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VuaWNoYXIgd2MpOwpHU3RyaW5nKiBn
X3N0cmluZ19lcmFzZSAoR1N0cmluZyAqc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdzc2l6ZSBwb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3NzaXplIGxlbik7CkdTdHJpbmcqIGdfc3RyaW5nX2FzY2lpX2Rvd24gKEdT
dHJpbmcgKnN0cmluZyk7CkdTdHJpbmcqIGdfc3RyaW5nX2FzY2lpX3VwIChHU3RyaW5nICpzdHJp
bmcpOwp2b2lkIGdfc3RyaW5nX3ByaW50ZiAoR1N0cmluZyAqc3RyaW5nLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpmb3JtYXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSBfX2F0dHJpYnV0ZV9fKChfX2Zv
cm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwp2b2lkIGdfc3RyaW5nX2FwcGVuZF9wcmludGYg
KEdTdHJpbmcgKnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnY2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC4uLikgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykp
KTsKIyAxMzEgIi4uL2dsaWIvZ3N0cmluZy5oIgoKIyAzMyAiLi4vZ2xpYi9naW9jaGFubmVsLmgi
IDIKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0dJT0NoYW5uZWwgR0lPQ2hhbm5lbDsKdHlwZWRlZiBz
dHJ1Y3QgX0dJT0Z1bmNzIEdJT0Z1bmNzOwoKdHlwZWRlZiBlbnVtCnsKICBHX0lPX0VSUk9SX05P
TkUsCiAgR19JT19FUlJPUl9BR0FJTiwKICBHX0lPX0VSUk9SX0lOVkFMLAogIEdfSU9fRVJST1Jf
VU5LTk9XTgp9IEdJT0Vycm9yOwoKCgp0eXBlZGVmIGVudW0KewoKICBHX0lPX0NIQU5ORUxfRVJS
T1JfRkJJRywKICBHX0lPX0NIQU5ORUxfRVJST1JfSU5WQUwsCiAgR19JT19DSEFOTkVMX0VSUk9S
X0lPLAogIEdfSU9fQ0hBTk5FTF9FUlJPUl9JU0RJUiwKICBHX0lPX0NIQU5ORUxfRVJST1JfTk9T
UEMsCiAgR19JT19DSEFOTkVMX0VSUk9SX05YSU8sCiAgR19JT19DSEFOTkVMX0VSUk9SX09WRVJG
TE9XLAogIEdfSU9fQ0hBTk5FTF9FUlJPUl9QSVBFLAoKICBHX0lPX0NIQU5ORUxfRVJST1JfRkFJ
TEVECn0gR0lPQ2hhbm5lbEVycm9yOwoKdHlwZWRlZiBlbnVtCnsKICBHX0lPX1NUQVRVU19FUlJP
UiwKICBHX0lPX1NUQVRVU19OT1JNQUwsCiAgR19JT19TVEFUVVNfRU9GLAogIEdfSU9fU1RBVFVT
X0FHQUlOCn0gR0lPU3RhdHVzOwoKdHlwZWRlZiBlbnVtCnsKICBHX1NFRUtfQ1VSLAogIEdfU0VF
S19TRVQsCiAgR19TRUVLX0VORAp9IEdTZWVrVHlwZTsKCnR5cGVkZWYgZW51bQp7CiAgR19JT19J
TiA9MSwKICBHX0lPX09VVCA9NCwKICBHX0lPX1BSSSA9MiwKICBHX0lPX0VSUiA9OCwKICBHX0lP
X0hVUCA9MTYsCiAgR19JT19OVkFMID0zMgp9IEdJT0NvbmRpdGlvbjsKCnR5cGVkZWYgZW51bQp7
CiAgR19JT19GTEFHX0FQUEVORCA9IDEgPDwgMCwKICBHX0lPX0ZMQUdfTk9OQkxPQ0sgPSAxIDw8
IDEsCiAgR19JT19GTEFHX0lTX1JFQURBQkxFID0gMSA8PCAyLAogIEdfSU9fRkxBR19JU19XUklU
RUFCTEUgPSAxIDw8IDMsCiAgR19JT19GTEFHX0lTX1NFRUtBQkxFID0gMSA8PCA0LAogIEdfSU9f
RkxBR19NQVNLID0gKDEgPDwgNSkgLSAxLAogIEdfSU9fRkxBR19HRVRfTUFTSyA9IEdfSU9fRkxB
R19NQVNLLAogIEdfSU9fRkxBR19TRVRfTUFTSyA9IEdfSU9fRkxBR19BUFBFTkQgfCBHX0lPX0ZM
QUdfTk9OQkxPQ0sKfSBHSU9GbGFnczsKCnN0cnVjdCBfR0lPQ2hhbm5lbAp7CgogIGd1aW50IHJl
Zl9jb3VudDsKICBHSU9GdW5jcyAqZnVuY3M7CgogIGdjaGFyICplbmNvZGluZzsKICBHSUNvbnYg
cmVhZF9jZDsKICBHSUNvbnYgd3JpdGVfY2Q7CiAgZ2NoYXIgKmxpbmVfdGVybTsKICBndWludCBs
aW5lX3Rlcm1fbGVuOwoKICBnc2l6ZSBidWZfc2l6ZTsKICBHU3RyaW5nICpyZWFkX2J1ZjsKICBH
U3RyaW5nICplbmNvZGVkX3JlYWRfYnVmOwogIEdTdHJpbmcgKndyaXRlX2J1ZjsKICBnY2hhciBw
YXJ0aWFsX3dyaXRlX2J1Zls2XTsKCgoKICBndWludCB1c2VfYnVmZmVyIDogMTsKICBndWludCBk
b19lbmNvZGUgOiAxOwogIGd1aW50IGNsb3NlX29uX3VucmVmIDogMTsKICBndWludCBpc19yZWFk
YWJsZSA6IDE7CiAgZ3VpbnQgaXNfd3JpdGVhYmxlIDogMTsKICBndWludCBpc19zZWVrYWJsZSA6
IDE7CgogIGdwb2ludGVyIHJlc2VydmVkMTsKICBncG9pbnRlciByZXNlcnZlZDI7Cn07Cgp0eXBl
ZGVmIGdib29sZWFuICgqR0lPRnVuYykgKEdJT0NoYW5uZWwgKnNvdXJjZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHSU9Db25kaXRpb24gY29uZGl0aW9uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwpzdHJ1Y3QgX0dJT0Z1bmNzCnsKICBHSU9TdGF0
dXMgKCppb19yZWFkKSAoR0lPQ2hhbm5lbCAqY2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdjaGFyICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnc2l6ZSBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplICpi
eXRlc19yZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJy
KTsKICBHSU9TdGF0dXMgKCppb193cml0ZSkgKEdJT0NoYW5uZWwgKmNoYW5uZWwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqYnVmLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3NpemUgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnc2l6ZSAqYnl0ZXNfd3JpdHRlbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdFcnJvciAqKmVycik7CiAgR0lPU3RhdHVzICgqaW9fc2VlaykgKEdJT0NoYW5u
ZWwgKmNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgb2Zm
c2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NlZWtUeXBlIHR5cGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnIpOwogIEdJT1N0YXR1
cyAoKmlvX2Nsb3NlKSAoR0lPQ2hhbm5lbCAqY2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdFcnJvciAqKmVycik7CiAgR1NvdXJjZSogKCppb19jcmVhdGVfd2F0Y2gp
IChHSU9DaGFubmVsICpjaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0lPQ29uZGl0aW9uIGNvbmRpdGlvbik7CiAgdm9pZCAoKmlvX2ZyZWUpIChHSU9DaGFubmVsICpj
aGFubmVsKTsKICBHSU9TdGF0dXMgKCppb19zZXRfZmxhZ3MpIChHSU9DaGFubmVsICpjaGFubmVs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0lPRmxhZ3MgZmxhZ3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnIpOwogIEdJT0ZsYWdzICgq
aW9fZ2V0X2ZsYWdzKSAoR0lPQ2hhbm5lbCAqY2hhbm5lbCk7Cn07Cgp2b2lkIGdfaW9fY2hhbm5l
bF9pbml0IChHSU9DaGFubmVsICpjaGFubmVsKTsKdm9pZCBnX2lvX2NoYW5uZWxfcmVmIChHSU9D
aGFubmVsICpjaGFubmVsKTsKdm9pZCBnX2lvX2NoYW5uZWxfdW5yZWYgKEdJT0NoYW5uZWwgKmNo
YW5uZWwpOwojIDE4NCAiLi4vZ2xpYi9naW9jaGFubmVsLmgiCkdJT1N0YXR1cyBnX2lvX2NoYW5u
ZWxfc2h1dGRvd24gKEdJT0NoYW5uZWwgKmNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdib29sZWFuIGZsdXNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHRXJyb3IgKiplcnIpOwpndWludCBnX2lvX2FkZF93YXRjaF9mdWxsIChHSU9DaGFubmVsICpj
aGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IHByaW9yaXR5LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSU9Db25kaXRpb24gY29uZGl0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSU9GdW5jIGZ1bmMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KTsKR1NvdXJjZSAqIGdfaW9f
Y3JlYXRlX3dhdGNoIChHSU9DaGFubmVsICpjaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHSU9Db25kaXRpb24gY29uZGl0aW9uKTsKZ3VpbnQgZ19pb19hZGRfd2F0Y2gg
KEdJT0NoYW5uZWwgKmNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdJ
T0NvbmRpdGlvbiBjb25kaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdJ
T0Z1bmMgZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNl
cl9kYXRhKTsKCgoKCnZvaWQgZ19pb19jaGFubmVsX3NldF9idWZmZXJfc2l6ZSAoR0lPQ2hhbm5l
bCAqY2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3NpemUgc2l6ZSk7CmdzaXplIGdfaW9fY2hhbm5lbF9nZXRfYnVmZmVyX3Np
emUgKEdJT0NoYW5uZWwgKmNoYW5uZWwpOwpHSU9Db25kaXRpb24gZ19pb19jaGFubmVsX2dldF9i
dWZmZXJfY29uZGl0aW9uIChHSU9DaGFubmVsICpjaGFubmVsKTsKR0lPU3RhdHVzIGdfaW9fY2hh
bm5lbF9zZXRfZmxhZ3MgKEdJT0NoYW5uZWwgKmNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdJT0ZsYWdzIGZsYWdzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJy
b3IgKiplcnJvcik7CkdJT0ZsYWdzIGdfaW9fY2hhbm5lbF9nZXRfZmxhZ3MgKEdJT0NoYW5uZWwg
KmNoYW5uZWwpOwp2b2lkIGdfaW9fY2hhbm5lbF9zZXRfbGluZV90ZXJtIChHSU9DaGFubmVsICpj
aGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnY2hhciAqbGluZV90ZXJtLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGxlbmd0aCk7CmNvbnN0IGdjaGFy
KiBnX2lvX2NoYW5uZWxfZ2V0X2xpbmVfdGVybSAoR0lPQ2hhbm5lbCAqY2hhbm5lbCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAq
bGVuZ3RoKTsKdm9pZCBnX2lvX2NoYW5uZWxfc2V0X2J1ZmZlcmVkIChHSU9DaGFubmVsICpjaGFu
bmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnYm9vbGVhbiBidWZmZXJlZCk7Cmdib29sZWFuIGdfaW9fY2hhbm5lbF9nZXRfYnVmZmVy
ZWQgKEdJT0NoYW5uZWwgKmNoYW5uZWwpOwpHSU9TdGF0dXMgZ19pb19jaGFubmVsX3NldF9lbmNv
ZGluZyAoR0lPQ2hhbm5lbCAqY2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKmVuY29kaW5nLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3Ig
KiplcnJvcik7CmNvbnN0IGdjaGFyKiBnX2lvX2NoYW5uZWxfZ2V0X2VuY29kaW5nIChHSU9DaGFu
bmVsICpjaGFubmVsKTsKdm9pZCBnX2lvX2NoYW5uZWxfc2V0X2Nsb3NlX29uX3VucmVmIChHSU9D
aGFubmVsICpjaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnYm9vbGVhbiBkb19jbG9zZSk7Cmdib29sZWFuIGdfaW9fY2hhbm5l
bF9nZXRfY2xvc2Vfb25fdW5yZWYgKEdJT0NoYW5uZWwgKmNoYW5uZWwpOwoKCkdJT1N0YXR1cyBn
X2lvX2NoYW5uZWxfZmx1c2ggKEdJT0NoYW5uZWwgKmNoYW5uZWwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7CkdJT1N0YXR1cyBnX2lv
X2NoYW5uZWxfcmVhZF9saW5lIChHSU9DaGFubmVsICpjaGFubmVsLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKipzdHJfcmV0dXJuLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgKmxlbmd0aCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplICp0ZXJtaW5hdG9yX3BvcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9y
KTsKR0lPU3RhdHVzIGdfaW9fY2hhbm5lbF9yZWFkX2xpbmVfc3RyaW5nIChHSU9DaGFubmVsICpj
aGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1N0cmlu
ZyAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Np
emUgKnRlcm1pbmF0b3JfcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0Vycm9yICoqZXJyb3IpOwpHSU9TdGF0dXMgZ19pb19jaGFubmVsX3JlYWRfdG9fZW5k
IChHSU9DaGFubmVsICpjaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2NoYXIgKipzdHJfcmV0dXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3NpemUgKmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsKR0lPU3RhdHVzIGdfaW9fY2hhbm5lbF9y
ZWFkX2NoYXJzIChHSU9DaGFubmVsICpjaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2NoYXIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdzaXplIGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3NpemUgKmJ5dGVzX3JlYWQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7CkdJT1N0YXR1cyBnX2lvX2NoYW5u
ZWxfcmVhZF91bmljaGFyIChHSU9DaGFubmVsICpjaGFubmVsLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3VuaWNoYXIgKnRoZWNoYXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7CkdJT1N0YXR1cyBn
X2lvX2NoYW5uZWxfd3JpdGVfY2hhcnMgKEdJT0NoYW5uZWwgKmNoYW5uZWwsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqYnVmLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzaXplIGNvdW50LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgKmJ5dGVzX3dyaXR0ZW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnJv
cik7CkdJT1N0YXR1cyBnX2lvX2NoYW5uZWxfd3JpdGVfdW5pY2hhciAoR0lPQ2hhbm5lbCAqY2hh
bm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1bmljaGFy
IHRoZWNoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJy
b3IgKiplcnJvcik7CkdJT1N0YXR1cyBnX2lvX2NoYW5uZWxfc2Vla19wb3NpdGlvbiAoR0lPQ2hh
bm5lbCAqY2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdpbnQ2NCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHU2Vla1R5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdFcnJvciAqKmVycm9yKTsKR0lPQ2hhbm5lbCogZ19pb19jaGFubmVsX25ld19maWxlIChj
b25zdCBnY2hhciAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnY2hhciAqbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsKCgoKR1F1YXJrIGdfaW9fY2hhbm5lbF9lcnJv
cl9xdWFyayAodm9pZCk7CkdJT0NoYW5uZWxFcnJvciBnX2lvX2NoYW5uZWxfZXJyb3JfZnJvbV9l
cnJubyAoZ2ludCBlbik7CiMgMjkwICIuLi9nbGliL2dpb2NoYW5uZWwuaCIKR0lPQ2hhbm5lbCog
Z19pb19jaGFubmVsX3VuaXhfbmV3IChpbnQgZmQpOwpnaW50IGdfaW9fY2hhbm5lbF91bml4X2dl
dF9mZCAoR0lPQ2hhbm5lbCAqY2hhbm5lbCk7CgoKCmV4dGVybiBHU291cmNlRnVuY3MgZ19pb193
YXRjaF9mdW5jczsKIyAzNTEgIi4uL2dsaWIvZ2lvY2hhbm5lbC5oIgoKIyA0NSAiZ2xpYi5oIiAy
CgoKCiMgMSAiLi4vZ2xpYi9nbWFya3VwLmgiIDEKIyAyNiAiLi4vZ2xpYi9nbWFya3VwLmgiCgoK
dHlwZWRlZiBlbnVtCnsKICBHX01BUktVUF9FUlJPUl9CQURfVVRGOCwKICBHX01BUktVUF9FUlJP
Ul9FTVBUWSwKICBHX01BUktVUF9FUlJPUl9QQVJTRSwKCgoKICBHX01BUktVUF9FUlJPUl9VTktO
T1dOX0VMRU1FTlQsCiAgR19NQVJLVVBfRVJST1JfVU5LTk9XTl9BVFRSSUJVVEUsCiAgR19NQVJL
VVBfRVJST1JfSU5WQUxJRF9DT05URU5UCn0gR01hcmt1cEVycm9yOwoKCgpHUXVhcmsgZ19tYXJr
dXBfZXJyb3JfcXVhcmsgKHZvaWQpOwoKdHlwZWRlZiBlbnVtCnsKCiAgR19NQVJLVVBfRE9fTk9U
X1VTRV9USElTX1VOU1VQUE9SVEVEX0ZMQUcgPSAxIDw8IDAKCn0gR01hcmt1cFBhcnNlRmxhZ3M7
Cgp0eXBlZGVmIHN0cnVjdCBfR01hcmt1cFBhcnNlQ29udGV4dCBHTWFya3VwUGFyc2VDb250ZXh0
Owp0eXBlZGVmIHN0cnVjdCBfR01hcmt1cFBhcnNlciBHTWFya3VwUGFyc2VyOwoKc3RydWN0IF9H
TWFya3VwUGFyc2VyCnsKCiAgdm9pZCAoKnN0YXJ0X2VsZW1lbnQpIChHTWFya3VwUGFyc2VDb250
ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICplbGVt
ZW50X25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiphdHRyaWJ1
dGVfbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiphdHRyaWJ1
dGVfdmFsdWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7CgoKICB2b2lkICgqZW5k
X2VsZW1lbnQpIChHTWFya3VwUGFyc2VDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdjaGFyICplbGVtZW50X25hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJv
ciAqKmVycm9yKTsKCgoKICB2b2lkICgqdGV4dCkgKEdNYXJrdXBQYXJzZUNvbnRleHQgKmNvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3NpemUgdGV4dF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3BvaW50ZXIgdXNlcl9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAq
KmVycm9yKTsKCgoKCgoKICB2b2lkICgqcGFzc3Rocm91Z2gpIChHTWFya3VwUGFyc2VDb250ZXh0
ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpwYXNzdGhy
b3VnaF90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplIHRleHRfbGVuLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7CgoKCgogIHZvaWQgKCplcnJvcikgKEdNYXJrdXBQ
YXJzZUNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICpl
cnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwp9OwoK
R01hcmt1cFBhcnNlQ29udGV4dCAqZ19tYXJrdXBfcGFyc2VfY29udGV4dF9uZXcgKGNvbnN0IEdN
YXJrdXBQYXJzZXIgKnBhcnNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR01hcmt1cFBhcnNlRmxhZ3MgZmxhZ3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lO
b3RpZnkgdXNlcl9kYXRhX2Rub3RpZnkpOwp2b2lkIGdfbWFya3VwX3BhcnNlX2NvbnRleHRfZnJl
ZSAoR01hcmt1cFBhcnNlQ29udGV4dCAqY29udGV4dCk7Cmdib29sZWFuIGdfbWFya3VwX3BhcnNl
X2NvbnRleHRfcGFyc2UgKEdNYXJrdXBQYXJzZUNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICp0ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3Np
emUgdGV4dF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdFcnJvciAqKmVycm9yKTsKCmdib29sZWFuIGdfbWFya3VwX3BhcnNlX2NvbnRleHRf
ZW5kX3BhcnNlIChHTWFya3VwUGFyc2VDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwpj
b25zdCBnY2hhciAqZ19tYXJrdXBfcGFyc2VfY29udGV4dF9nZXRfZWxlbWVudCAoR01hcmt1cFBh
cnNlQ29udGV4dCAqY29udGV4dCk7CgoKdm9pZCBnX21hcmt1cF9wYXJzZV9jb250ZXh0X2dldF9w
b3NpdGlvbiAoR01hcmt1cFBhcnNlQ29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgKmxpbmVfbnVtYmVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2ludCAqY2hhcl9udW1iZXIpOwoKCmdjaGFyKiBnX21hcmt1cF9lc2NhcGVfdGV4dCAoY29u
c3QgZ2NoYXIgKnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzaXplIGxlbmd0
aCk7CgoKIyA0OSAiZ2xpYi5oIiAyCgojIDEgIi4uL2dsaWIvZ21lc3NhZ2VzLmgiIDEKIyAzOCAi
Li4vZ2xpYi9nbWVzc2FnZXMuaCIgMwoKCgoKCgpnc2l6ZSBnX3ByaW50Zl9zdHJpbmdfdXBwZXJf
Ym91bmQgKGNvbnN0IGdjaGFyKiBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YV9saXN0IGFyZ3MpOwojIDU0ICIuLi9nbGliL2dtZXNzYWdlcy5oIiAzCnR5cGVk
ZWYgZW51bQp7CgogIEdfTE9HX0ZMQUdfUkVDVVJTSU9OID0gMSA8PCAwLAogIEdfTE9HX0ZMQUdf
RkFUQUwgPSAxIDw8IDEsCgoKICBHX0xPR19MRVZFTF9FUlJPUiA9IDEgPDwgMiwKICBHX0xPR19M
RVZFTF9DUklUSUNBTCA9IDEgPDwgMywKICBHX0xPR19MRVZFTF9XQVJOSU5HID0gMSA8PCA0LAog
IEdfTE9HX0xFVkVMX01FU1NBR0UgPSAxIDw8IDUsCiAgR19MT0dfTEVWRUxfSU5GTyA9IDEgPDwg
NiwKICBHX0xPR19MRVZFTF9ERUJVRyA9IDEgPDwgNywKCiAgR19MT0dfTEVWRUxfTUFTSyA9IH4o
R19MT0dfRkxBR19SRUNVUlNJT04gfCBHX0xPR19GTEFHX0ZBVEFMKQp9IEdMb2dMZXZlbEZsYWdz
OwoKCgoKdHlwZWRlZiB2b2lkICgqR0xvZ0Z1bmMpIChjb25zdCBnY2hhciAqbG9nX2RvbWFpbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMb2dMZXZl
bEZsYWdzIGxvZ19sZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdjaGFyICptZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKCgoKZ3VpbnQgZ19s
b2dfc2V0X2hhbmRsZXIgKGNvbnN0IGdjaGFyICpsb2dfZG9tYWluLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMb2dMZXZlbEZsYWdzIGxvZ19sZXZlbHMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xvZ0Z1bmMgbG9nX2Z1bmMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRh
KTsKdm9pZCBnX2xvZ19yZW1vdmVfaGFuZGxlciAoY29uc3QgZ2NoYXIgKmxvZ19kb21haW4sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgaGFuZGxlcl9pZCk7
CnZvaWQgZ19sb2dfZGVmYXVsdF9oYW5kbGVyIChjb25zdCBnY2hhciAqbG9nX2RvbWFpbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTG9nTGV2ZWxGbGFncyBsb2df
bGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No
YXIgKm1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bv
aW50ZXIgdW51c2VkX2RhdGEpOwp2b2lkIGdfbG9nIChjb25zdCBnY2hhciAqbG9nX2RvbWFpbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTG9nTGV2ZWxGbGFncyBs
b2dfbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2NoYXIgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
Li4pIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CnZvaWQg
Z19sb2d2IChjb25zdCBnY2hhciAqbG9nX2RvbWFpbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTG9nTGV2ZWxGbGFncyBsb2dfbGV2ZWwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKmZvcm1hdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpOwpHTG9nTGV2ZWxG
bGFncyBnX2xvZ19zZXRfZmF0YWxfbWFzayAoY29uc3QgZ2NoYXIgKmxvZ19kb21haW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xvZ0xldmVsRmxhZ3MgZmF0YWxf
bWFzayk7CkdMb2dMZXZlbEZsYWdzIGdfbG9nX3NldF9hbHdheXNfZmF0YWwgKEdMb2dMZXZlbEZs
YWdzIGZhdGFsX21hc2spOwoKCnZvaWQgX2dfbG9nX2ZhbGxiYWNrX2hhbmRsZXIgKGNvbnN0IGdj
aGFyICpsb2dfZG9tYWluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTG9nTGV2
ZWxGbGFncyBsb2dfbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdjaGFyICptZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRl
ciB1bnVzZWRfZGF0YSk7CiMgMTc4ICIuLi9nbGliL2dtZXNzYWdlcy5oIiAzCnR5cGVkZWYgdm9p
ZCAoKkdQcmludEZ1bmMpIChjb25zdCBnY2hhciAqc3RyaW5nKTsKdm9pZCBnX3ByaW50IChjb25z
dCBnY2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC4uLikgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXywgMSwgMikpKTsKR1By
aW50RnVuYyBnX3NldF9wcmludF9oYW5kbGVyIChHUHJpbnRGdW5jIGZ1bmMpOwp2b2lkIGdfcHJp
bnRlcnIgKGNvbnN0IGdjaGFyICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLi4uKSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAx
LCAyKSkpOwpHUHJpbnRGdW5jIGdfc2V0X3ByaW50ZXJyX2hhbmRsZXIgKEdQcmludEZ1bmMgZnVu
Yyk7CiMgMzQ1ICIuLi9nbGliL2dtZXNzYWdlcy5oIiAzCgojIDUxICJnbGliLmgiIDIKIyAxICIu
Li9nbGliL2dub2RlLmgiIDEKIyAzMiAiLi4vZ2xpYi9nbm9kZS5oIgoKCnR5cGVkZWYgc3RydWN0
IF9HTm9kZSBHTm9kZTsKCgp0eXBlZGVmIGVudW0KewogIEdfVFJBVkVSU0VfTEVBRlMgPSAxIDw8
IDAsCiAgR19UUkFWRVJTRV9OT05fTEVBRlMgPSAxIDw8IDEsCiAgR19UUkFWRVJTRV9BTEwgPSBH
X1RSQVZFUlNFX0xFQUZTIHwgR19UUkFWRVJTRV9OT05fTEVBRlMsCiAgR19UUkFWRVJTRV9NQVNL
ID0gMHgwMwp9IEdUcmF2ZXJzZUZsYWdzOwoKCnR5cGVkZWYgZW51bQp7CiAgR19JTl9PUkRFUiwK
ICBHX1BSRV9PUkRFUiwKICBHX1BPU1RfT1JERVIsCiAgR19MRVZFTF9PUkRFUgp9IEdUcmF2ZXJz
ZVR5cGU7Cgp0eXBlZGVmIGdib29sZWFuICgqR05vZGVUcmF2ZXJzZUZ1bmMpIChHTm9kZSAqbm9k
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2lu
dGVyIGRhdGEpOwp0eXBlZGVmIHZvaWQgKCpHTm9kZUZvcmVhY2hGdW5jKSAoR05vZGUgKm5vZGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRl
ciBkYXRhKTsKCgoKc3RydWN0IF9HTm9kZQp7CiAgZ3BvaW50ZXIgZGF0YTsKICBHTm9kZSAqbmV4
dDsKICBHTm9kZSAqcHJldjsKICBHTm9kZSAqcGFyZW50OwogIEdOb2RlICpjaGlsZHJlbjsKfTsK
CgoKCgoKdm9pZCBnX25vZGVfcHVzaF9hbGxvY2F0b3IgKEdBbGxvY2F0b3IgKmFsbG9jYXRvcik7
CnZvaWQgZ19ub2RlX3BvcF9hbGxvY2F0b3IgKHZvaWQpOwpHTm9kZSogZ19ub2RlX25ldyAoZ3Bv
aW50ZXIgZGF0YSk7CnZvaWQgZ19ub2RlX2Rlc3Ryb3kgKEdOb2RlICpyb290KTsKdm9pZCBnX25v
ZGVfdW5saW5rIChHTm9kZSAqbm9kZSk7CkdOb2RlKiBnX25vZGVfY29weSAoR05vZGUgKm5vZGUp
OwpHTm9kZSogZ19ub2RlX2luc2VydCAoR05vZGUgKnBhcmVudCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2ludCBwb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR05vZGUgKm5vZGUpOwpHTm9kZSogZ19ub2RlX2luc2VydF9iZWZvcmUgKEdOb2RlICpw
YXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOb2RlICpzaWJsaW5nLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTm9kZSAqbm9kZSk7CkdOb2RlKiBnX25v
ZGVfaW5zZXJ0X2FmdGVyIChHTm9kZSAqcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTm9kZSAqc2libGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R05vZGUgKm5vZGUpOwpHTm9kZSogZ19ub2RlX3ByZXBlbmQgKEdOb2RlICpwYXJlbnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOb2RlICpub2RlKTsKZ3VpbnQgZ19ub2RlX25f
bm9kZXMgKEdOb2RlICpyb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHJh
dmVyc2VGbGFncyBmbGFncyk7CkdOb2RlKiBnX25vZGVfZ2V0X3Jvb3QgKEdOb2RlICpub2RlKTsK
Z2Jvb2xlYW4gZ19ub2RlX2lzX2FuY2VzdG9yIChHTm9kZSAqbm9kZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR05vZGUgKmRlc2NlbmRhbnQpOwpndWludCBnX25vZGVfZGVwdGgg
KEdOb2RlICpub2RlKTsKR05vZGUqIGdfbm9kZV9maW5kIChHTm9kZSAqcm9vdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1RyYXZlcnNlVHlwZSBvcmRlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR1RyYXZlcnNlRmxhZ3MgZmxhZ3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwojIDEyMCAiLi4vZ2xpYi9nbm9kZS5o
Igp2b2lkIGdfbm9kZV90cmF2ZXJzZSAoR05vZGUgKnJvb3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdUcmF2ZXJzZVR5cGUgb3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdUcmF2ZXJzZUZsYWdzIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnaW50IG1heF9kZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R05vZGVUcmF2ZXJzZUZ1bmMgZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3BvaW50ZXIgZGF0YSk7CgoKCgoKCmd1aW50IGdfbm9kZV9tYXhfaGVpZ2h0IChHTm9kZSAqcm9v
dCk7Cgp2b2lkIGdfbm9kZV9jaGlsZHJlbl9mb3JlYWNoIChHTm9kZSAqbm9kZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdUcmF2ZXJzZUZsYWdzIGZsYWdzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR05vZGVGb3JlYWNoRnVuYyBmdW5jLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSk7CnZvaWQgZ19ub2RlX3JldmVy
c2VfY2hpbGRyZW4gKEdOb2RlICpub2RlKTsKZ3VpbnQgZ19ub2RlX25fY2hpbGRyZW4gKEdOb2Rl
ICpub2RlKTsKR05vZGUqIGdfbm9kZV9udGhfY2hpbGQgKEdOb2RlICpub2RlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgbik7CkdOb2RlKiBnX25vZGVfbGFzdF9jaGls
ZCAoR05vZGUgKm5vZGUpOwpHTm9kZSogZ19ub2RlX2ZpbmRfY2hpbGQgKEdOb2RlICpub2RlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RyYXZlcnNlRmxhZ3MgZmxhZ3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKTsKZ2ludCBnX25v
ZGVfY2hpbGRfcG9zaXRpb24gKEdOb2RlICpub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR05vZGUgKmNoaWxkKTsKZ2ludCBnX25vZGVfY2hpbGRfaW5kZXggKEdOb2RlICpu
b2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSk7CgpH
Tm9kZSogZ19ub2RlX2ZpcnN0X3NpYmxpbmcgKEdOb2RlICpub2RlKTsKR05vZGUqIGdfbm9kZV9s
YXN0X3NpYmxpbmcgKEdOb2RlICpub2RlKTsKIyAxNjEgIi4uL2dsaWIvZ25vZGUuaCIKCiMgNTIg
ImdsaWIuaCIgMgojIDEgIi4uL2dsaWIvZ3BhdHRlcm4uaCIgMQojIDI0ICIuLi9nbGliL2dwYXR0
ZXJuLmgiCgoKCnR5cGVkZWYgc3RydWN0IF9HUGF0dGVyblNwZWMgR1BhdHRlcm5TcGVjOwoKR1Bh
dHRlcm5TcGVjKiBnX3BhdHRlcm5fc3BlY19uZXcgKGNvbnN0IGdjaGFyICpwYXR0ZXJuKTsKdm9p
ZCBnX3BhdHRlcm5fc3BlY19mcmVlIChHUGF0dGVyblNwZWMgKnBzcGVjKTsKZ2Jvb2xlYW4gZ19w
YXR0ZXJuX3NwZWNfZXF1YWwgKEdQYXR0ZXJuU3BlYyAqcHNwZWMxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1BhdHRlcm5TcGVjICpwc3BlYzIpOwpnYm9vbGVhbiBn
X3BhdHRlcm5fbWF0Y2ggKEdQYXR0ZXJuU3BlYyAqcHNwZWMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBndWludCBzdHJpbmdfbGVuZ3RoLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN0cmluZywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpzdHJpbmdfcmV2ZXJzZWQp
OwpnYm9vbGVhbiBnX3BhdHRlcm5fbWF0Y2hfc3RyaW5nIChHUGF0dGVyblNwZWMgKnBzcGVjLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN0cmlu
Zyk7Cmdib29sZWFuIGdfcGF0dGVybl9tYXRjaF9zaW1wbGUgKGNvbnN0IGdjaGFyICpwYXR0ZXJu
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN0
cmluZyk7CgoKIyA1MyAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xpYi9ncHJpbWVzLmgiIDEKIyAzMiAi
Li4vZ2xpYi9ncHJpbWVzLmgiCgojIDQzICIuLi9nbGliL2dwcmltZXMuaCIKZ3VpbnQgZ19zcGFj
ZWRfcHJpbWVzX2Nsb3Nlc3QgKGd1aW50IG51bSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7
CgoKIyA1NCAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xpYi9ncXNvcnQuaCIgMQojIDMzICIuLi9nbGli
L2dxc29ydC5oIgoKCnZvaWQgZ19xc29ydF93aXRoX2RhdGEgKGdjb25zdHBvaW50ZXIgcGJhc2Us
CiAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgdG90YWxfZWxlbXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBHQ29tcGFyZURh
dGFGdW5jIGNvbXBhcmVfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNl
cl9kYXRhKTsKCgojIDU1ICJnbGliLmgiIDIKCiMgMSAiLi4vZ2xpYi9ncXVldWUuaCIgMQojIDMy
ICIuLi9nbGliL2dxdWV1ZS5oIgoKCnR5cGVkZWYgc3RydWN0IF9HUXVldWUgR1F1ZXVlOwoKc3Ry
dWN0IF9HUXVldWUKewogIEdMaXN0ICpoZWFkOwogIEdMaXN0ICp0YWlsOwogIGd1aW50IGxlbmd0
aDsKfTsKCgoKR1F1ZXVlKiBnX3F1ZXVlX25ldyAodm9pZCk7CnZvaWQgZ19xdWV1ZV9mcmVlIChH
UXVldWUgKnF1ZXVlKTsKdm9pZCBnX3F1ZXVlX3B1c2hfaGVhZCAoR1F1ZXVlICpxdWV1ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSk7CnZvaWQgZ19xdWV1
ZV9wdXNoX3RhaWwgKEdRdWV1ZSAqcXVldWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdwb2ludGVyIGRhdGEpOwpncG9pbnRlciBnX3F1ZXVlX3BvcF9oZWFkIChHUXVldWUgKnF1
ZXVlKTsKZ3BvaW50ZXIgZ19xdWV1ZV9wb3BfdGFpbCAoR1F1ZXVlICpxdWV1ZSk7Cmdib29sZWFu
IGdfcXVldWVfaXNfZW1wdHkgKEdRdWV1ZSAqcXVldWUpOwpncG9pbnRlciBnX3F1ZXVlX3BlZWtf
aGVhZCAoR1F1ZXVlICpxdWV1ZSk7Cmdwb2ludGVyIGdfcXVldWVfcGVla190YWlsIChHUXVldWUg
KnF1ZXVlKTsKdm9pZCBnX3F1ZXVlX3B1c2hfaGVhZF9saW5rIChHUXVldWUgKnF1ZXVlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlzdCAqbGlua18pOwp2b2lkIGdfcXVldWVf
cHVzaF90YWlsX2xpbmsgKEdRdWV1ZSAqcXVldWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaXN0ICpsaW5rXyk7CkdMaXN0KiBnX3F1ZXVlX3BvcF9oZWFkX2xpbmsgKEdRdWV1
ZSAqcXVldWUpOwpHTGlzdCogZ19xdWV1ZV9wb3BfdGFpbF9saW5rIChHUXVldWUgKnF1ZXVlKTsK
CgojIDU3ICJnbGliLmgiIDIKIyAxICIuLi9nbGliL2dyYW5kLmgiIDEKIyAzMiAiLi4vZ2xpYi9n
cmFuZC5oIgoKCnR5cGVkZWYgc3RydWN0IF9HUmFuZCBHUmFuZDsKIyA0NSAiLi4vZ2xpYi9ncmFu
ZC5oIgpHUmFuZCogZ19yYW5kX25ld193aXRoX3NlZWQgKGd1aW50MzIgc2VlZCk7CkdSYW5kKiBn
X3JhbmRfbmV3ICh2b2lkKTsKdm9pZCBnX3JhbmRfZnJlZSAoR1JhbmQgKnJhbmRfKTsKdm9pZCBn
X3JhbmRfc2V0X3NlZWQgKEdSYW5kICpyYW5kXywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGd1aW50MzIgc2VlZCk7CgoKCmd1aW50MzIgZ19yYW5kX2ludCAoR1JhbmQgKnJhbmRfKTsK
Z2ludDMyIGdfcmFuZF9pbnRfcmFuZ2UgKEdSYW5kICpyYW5kXywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdpbnQzMiBiZWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdpbnQzMiBlbmQpOwpnZG91YmxlIGdfcmFuZF9kb3VibGUgKEdSYW5kICpyYW5kXyk7Cmdkb3Vi
bGUgZ19yYW5kX2RvdWJsZV9yYW5nZSAoR1JhbmQgKnJhbmRfLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2RvdWJsZSBiZWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdkb3VibGUgZW5kKTsKdm9pZCBnX3JhbmRvbV9zZXRfc2VlZCAoZ3VpbnQzMiBzZWVkKTsKCgoK
Z3VpbnQzMiBnX3JhbmRvbV9pbnQgKHZvaWQpOwpnaW50MzIgZ19yYW5kb21faW50X3JhbmdlIChn
aW50MzIgYmVnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50MzIgZW5kKTsK
Z2RvdWJsZSBnX3JhbmRvbV9kb3VibGUgKHZvaWQpOwpnZG91YmxlIGdfcmFuZG9tX2RvdWJsZV9y
YW5nZSAoZ2RvdWJsZSBiZWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3Vi
bGUgZW5kKTsKCgoKIyA1OCAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xpYi9ncmVsLmgiIDEKIyAzMiAi
Li4vZ2xpYi9ncmVsLmgiCgoKdHlwZWRlZiBzdHJ1Y3QgX0dSZWxhdGlvbiBHUmVsYXRpb247CnR5
cGVkZWYgc3RydWN0IF9HVHVwbGVzIEdUdXBsZXM7CgpzdHJ1Y3QgX0dUdXBsZXMKewogIGd1aW50
IGxlbjsKfTsKIyA2NSAiLi4vZ2xpYi9ncmVsLmgiCkdSZWxhdGlvbiogZ19yZWxhdGlvbl9uZXcg
KGdpbnQgZmllbGRzKTsKdm9pZCBnX3JlbGF0aW9uX2Rlc3Ryb3kgKEdSZWxhdGlvbiAqcmVsYXRp
b24pOwp2b2lkIGdfcmVsYXRpb25faW5kZXggKEdSZWxhdGlvbiAqcmVsYXRpb24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnaW50IGZpZWxkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0hhc2hGdW5jIGhhc2hfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdFcXVhbEZ1bmMga2V5X2VxdWFsX2Z1bmMpOwp2b2lkIGdfcmVsYXRpb25faW5zZXJ0IChH
UmVsYXRpb24gKnJlbGF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsK
Z2ludCBnX3JlbGF0aW9uX2RlbGV0ZSAoR1JlbGF0aW9uICpyZWxhdGlvbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIga2V5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2ludCBmaWVsZCk7CkdUdXBsZXMqIGdfcmVsYXRpb25fc2VsZWN0IChHUmVs
YXRpb24gKnJlbGF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9p
bnRlciBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGZpZWxkKTsKZ2lu
dCBnX3JlbGF0aW9uX2NvdW50IChHUmVsYXRpb24gKnJlbGF0aW9uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBrZXksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnaW50IGZpZWxkKTsKZ2Jvb2xlYW4gZ19yZWxhdGlvbl9leGlzdHMgKEdSZWxhdGlv
biAqcmVsYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwp2b2lkIGdf
cmVsYXRpb25fcHJpbnQgKEdSZWxhdGlvbiAqcmVsYXRpb24pOwoKdm9pZCBnX3R1cGxlc19kZXN0
cm95IChHVHVwbGVzICp0dXBsZXMpOwpncG9pbnRlciBnX3R1cGxlc19pbmRleCAoR1R1cGxlcyAq
dHVwbGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBpbmRleF8sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGZpZWxkKTsKCgojIDU5ICJnbGliLmgiIDIK
IyAxICIuLi9nbGliL2dzY2FubmVyLmgiIDEKIyAzMiAiLi4vZ2xpYi9nc2Nhbm5lci5oIgoKCnR5
cGVkZWYgc3RydWN0IF9HU2Nhbm5lciBHU2Nhbm5lcjsKdHlwZWRlZiBzdHJ1Y3QgX0dTY2FubmVy
Q29uZmlnIEdTY2FubmVyQ29uZmlnOwp0eXBlZGVmIHVuaW9uIF9HVG9rZW5WYWx1ZSBHVG9rZW5W
YWx1ZTsKCnR5cGVkZWYgdm9pZCAoKkdTY2FubmVyTXNnRnVuYykgKEdTY2FubmVyICpzY2FubmVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIg
Km1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnYm9vbGVhbiBlcnJvcik7CiMgNTkgIi4uL2dsaWIvZ3NjYW5uZXIuaCIKdHlwZWRlZiBlbnVt
CnsKICBHX0VSUl9VTktOT1dOLAogIEdfRVJSX1VORVhQX0VPRiwKICBHX0VSUl9VTkVYUF9FT0Zf
SU5fU1RSSU5HLAogIEdfRVJSX1VORVhQX0VPRl9JTl9DT01NRU5ULAogIEdfRVJSX05PTl9ESUdJ
VF9JTl9DT05TVCwKICBHX0VSUl9ESUdJVF9SQURJWCwKICBHX0VSUl9GTE9BVF9SQURJWCwKICBH
X0VSUl9GTE9BVF9NQUxGT1JNRUQKfSBHRXJyb3JUeXBlOwoKCnR5cGVkZWYgZW51bQp7CiAgR19U
T0tFTl9FT0YgPSAwLAoKICBHX1RPS0VOX0xFRlRfUEFSRU4gPSAnKCcsCiAgR19UT0tFTl9SSUdI
VF9QQVJFTiA9ICcpJywKICBHX1RPS0VOX0xFRlRfQ1VSTFkgPSAneycsCiAgR19UT0tFTl9SSUdI
VF9DVVJMWSA9ICd9JywKICBHX1RPS0VOX0xFRlRfQlJBQ0UgPSAnWycsCiAgR19UT0tFTl9SSUdI
VF9CUkFDRSA9ICddJywKICBHX1RPS0VOX0VRVUFMX1NJR04gPSAnPScsCiAgR19UT0tFTl9DT01N
QSA9ICcsJywKCiAgR19UT0tFTl9OT05FID0gMjU2LAoKICBHX1RPS0VOX0VSUk9SLAoKICBHX1RP
S0VOX0NIQVIsCiAgR19UT0tFTl9CSU5BUlksCiAgR19UT0tFTl9PQ1RBTCwKICBHX1RPS0VOX0lO
VCwKICBHX1RPS0VOX0hFWCwKICBHX1RPS0VOX0ZMT0FULAogIEdfVE9LRU5fU1RSSU5HLAoKICBH
X1RPS0VOX1NZTUJPTCwKICBHX1RPS0VOX0lERU5USUZJRVIsCiAgR19UT0tFTl9JREVOVElGSUVS
X05VTEwsCgogIEdfVE9LRU5fQ09NTUVOVF9TSU5HTEUsCiAgR19UT0tFTl9DT01NRU5UX01VTFRJ
LAogIEdfVE9LRU5fTEFTVAp9IEdUb2tlblR5cGU7Cgp1bmlvbiBfR1Rva2VuVmFsdWUKewogIGdw
b2ludGVyIHZfc3ltYm9sOwogIGdjaGFyICp2X2lkZW50aWZpZXI7CiAgZ3Vsb25nIHZfYmluYXJ5
OwogIGd1bG9uZyB2X29jdGFsOwogIGd1bG9uZyB2X2ludDsKICBndWludDY0IHZfaW50NjQ7CiAg
Z2RvdWJsZSB2X2Zsb2F0OwogIGd1bG9uZyB2X2hleDsKICBnY2hhciAqdl9zdHJpbmc7CiAgZ2No
YXIgKnZfY29tbWVudDsKICBndWNoYXIgdl9jaGFyOwogIGd1aW50IHZfZXJyb3I7Cn07CgpzdHJ1
Y3QgX0dTY2FubmVyQ29uZmlnCnsKCgogIGdjaGFyICpjc2V0X3NraXBfY2hhcmFjdGVyczsKICBn
Y2hhciAqY3NldF9pZGVudGlmaWVyX2ZpcnN0OwogIGdjaGFyICpjc2V0X2lkZW50aWZpZXJfbnRo
OwogIGdjaGFyICpjcGFpcl9jb21tZW50X3NpbmdsZTsKCgoKICBndWludCBjYXNlX3NlbnNpdGl2
ZSA6IDE7CgoKCgogIGd1aW50IHNraXBfY29tbWVudF9tdWx0aSA6IDE7CiAgZ3VpbnQgc2tpcF9j
b21tZW50X3NpbmdsZSA6IDE7CiAgZ3VpbnQgc2Nhbl9jb21tZW50X211bHRpIDogMTsKICBndWlu
dCBzY2FuX2lkZW50aWZpZXIgOiAxOwogIGd1aW50IHNjYW5faWRlbnRpZmllcl8xY2hhciA6IDE7
CiAgZ3VpbnQgc2Nhbl9pZGVudGlmaWVyX05VTEwgOiAxOwogIGd1aW50IHNjYW5fc3ltYm9scyA6
IDE7CiAgZ3VpbnQgc2Nhbl9iaW5hcnkgOiAxOwogIGd1aW50IHNjYW5fb2N0YWwgOiAxOwogIGd1
aW50IHNjYW5fZmxvYXQgOiAxOwogIGd1aW50IHNjYW5faGV4IDogMTsKICBndWludCBzY2FuX2hl
eF9kb2xsYXIgOiAxOwogIGd1aW50IHNjYW5fc3RyaW5nX3NxIDogMTsKICBndWludCBzY2FuX3N0
cmluZ19kcSA6IDE7CiAgZ3VpbnQgbnVtYmVyc18yX2ludCA6IDE7CiAgZ3VpbnQgaW50XzJfZmxv
YXQgOiAxOwogIGd1aW50IGlkZW50aWZpZXJfMl9zdHJpbmcgOiAxOwogIGd1aW50IGNoYXJfMl90
b2tlbiA6IDE7CiAgZ3VpbnQgc3ltYm9sXzJfdG9rZW4gOiAxOwogIGd1aW50IHNjb3BlXzBfZmFs
bGJhY2sgOiAxOwogIGd1aW50IHN0b3JlX2ludDY0IDogMTsKICBndWludCBwYWRkaW5nX2R1bW15
Owp9OwoKc3RydWN0IF9HU2Nhbm5lcgp7CgogIGdwb2ludGVyIHVzZXJfZGF0YTsKICBndWludCBt
YXhfcGFyc2VfZXJyb3JzOwoKCiAgZ3VpbnQgcGFyc2VfZXJyb3JzOwoKCiAgY29uc3QgZ2NoYXIg
KmlucHV0X25hbWU7CgoKICBHRGF0YSAqcWRhdGE7CgoKICBHU2Nhbm5lckNvbmZpZyAqY29uZmln
OwoKCiAgR1Rva2VuVHlwZSB0b2tlbjsKICBHVG9rZW5WYWx1ZSB2YWx1ZTsKICBndWludCBsaW5l
OwogIGd1aW50IHBvc2l0aW9uOwoKCiAgR1Rva2VuVHlwZSBuZXh0X3Rva2VuOwogIEdUb2tlblZh
bHVlIG5leHRfdmFsdWU7CiAgZ3VpbnQgbmV4dF9saW5lOwogIGd1aW50IG5leHRfcG9zaXRpb247
CgoKICBHSGFzaFRhYmxlICpzeW1ib2xfdGFibGU7CiAgZ2ludCBpbnB1dF9mZDsKICBjb25zdCBn
Y2hhciAqdGV4dDsKICBjb25zdCBnY2hhciAqdGV4dF9lbmQ7CiAgZ2NoYXIgKmJ1ZmZlcjsKICBn
dWludCBzY29wZV9pZDsKCgogIEdTY2FubmVyTXNnRnVuYyBtc2dfaGFuZGxlcjsKfTsKCkdTY2Fu
bmVyKiBnX3NjYW5uZXJfbmV3IChjb25zdCBHU2Nhbm5lckNvbmZpZyAqY29uZmlnX3RlbXBsKTsK
dm9pZCBnX3NjYW5uZXJfZGVzdHJveSAoR1NjYW5uZXIgKnNjYW5uZXIpOwp2b2lkIGdfc2Nhbm5l
cl9pbnB1dF9maWxlIChHU2Nhbm5lciAqc2Nhbm5lciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgaW5wdXRfZmQpOwp2b2lkIGdfc2Nhbm5lcl9z
eW5jX2ZpbGVfb2Zmc2V0IChHU2Nhbm5lciAqc2Nhbm5lcik7CnZvaWQgZ19zY2FubmVyX2lucHV0
X3RleHQgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCB0ZXh0X2xlbik7CkdUb2tlblR5cGUg
Z19zY2FubmVyX2dldF9uZXh0X3Rva2VuIChHU2Nhbm5lciAqc2Nhbm5lcik7CkdUb2tlblR5cGUg
Z19zY2FubmVyX3BlZWtfbmV4dF90b2tlbiAoR1NjYW5uZXIgKnNjYW5uZXIpOwpHVG9rZW5UeXBl
IGdfc2Nhbm5lcl9jdXJfdG9rZW4gKEdTY2FubmVyICpzY2FubmVyKTsKR1Rva2VuVmFsdWUgZ19z
Y2FubmVyX2N1cl92YWx1ZSAoR1NjYW5uZXIgKnNjYW5uZXIpOwpndWludCBnX3NjYW5uZXJfY3Vy
X2xpbmUgKEdTY2FubmVyICpzY2FubmVyKTsKZ3VpbnQgZ19zY2FubmVyX2N1cl9wb3NpdGlvbiAo
R1NjYW5uZXIgKnNjYW5uZXIpOwpnYm9vbGVhbiBnX3NjYW5uZXJfZW9mIChHU2Nhbm5lciAqc2Nh
bm5lcik7Cmd1aW50IGdfc2Nhbm5lcl9zZXRfc2NvcGUgKEdTY2FubmVyICpzY2FubmVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgc2NvcGVf
aWQpOwp2b2lkIGdfc2Nhbm5lcl9zY29wZV9hZGRfc3ltYm9sIChHU2Nhbm5lciAqc2Nhbm5lciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHNj
b3BlX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIgKnN5bWJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdwb2ludGVyIHZhbHVlKTsKdm9pZCBnX3NjYW5uZXJfc2NvcGVfcmVtb3Zl
X3N5bWJvbCAoR1NjYW5uZXIgKnNjYW5uZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBndWludCBzY29wZV9pZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpzeW1ib2wpOwpncG9pbnRl
ciBnX3NjYW5uZXJfc2NvcGVfbG9va3VwX3N5bWJvbCAoR1NjYW5uZXIgKnNjYW5uZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBzY29wZV9p
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdjaGFyICpzeW1ib2wpOwp2b2lkIGdfc2Nhbm5lcl9zY29wZV9mb3JlYWNoX3N5bWJvbCAoR1Nj
YW5uZXIgKnNjYW5uZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBndWludCBzY29wZV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdIRnVuYyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKZ3BvaW50ZXIgZ19zY2Fu
bmVyX2xvb2t1cF9zeW1ib2wgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN5bWJvbCk7CnZvaWQg
Z19zY2FubmVyX3VuZXhwX3Rva2VuIChHU2Nhbm5lciAqc2Nhbm5lciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUb2tlblR5cGUgZXhwZWN0ZWRfdG9r
ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBnY2hhciAqaWRlbnRpZmllcl9zcGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN5bWJvbF9zcGVjLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN5bWJvbF9u
YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2NoYXIgKm1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnaW50IGlzX2Vycm9yKTsKdm9pZCBnX3NjYW5uZXJfZXJyb3IgKEdTY2FubmVy
ICpzY2FubmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2NoYXIgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC4uLikgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZf
XywgMiwgMykpKTsKdm9pZCBnX3NjYW5uZXJfd2FybiAoR1NjYW5uZXIgKnNjYW5uZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAq
Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Li4uKSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwojIDI3
MSAiLi4vZ2xpYi9nc2Nhbm5lci5oIgoKIyA2MCAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xpYi9nc2hl
bGwuaCIgMQojIDI2ICIuLi9nbGliL2dzaGVsbC5oIgoKCgoKdHlwZWRlZiBlbnVtCnsKCiAgR19T
SEVMTF9FUlJPUl9CQURfUVVPVElORywKCiAgR19TSEVMTF9FUlJPUl9FTVBUWV9TVFJJTkcsCiAg
R19TSEVMTF9FUlJPUl9GQUlMRUQKfSBHU2hlbGxFcnJvcjsKCkdRdWFyayBnX3NoZWxsX2Vycm9y
X3F1YXJrICh2b2lkKTsKCmdjaGFyKiBnX3NoZWxsX3F1b3RlIChjb25zdCBnY2hhciAqdW5xdW90
ZWRfc3RyaW5nKTsKZ2NoYXIqIGdfc2hlbGxfdW5xdW90ZSAoY29uc3QgZ2NoYXIgKnF1b3RlZF9z
dHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwpnYm9v
bGVhbiBnX3NoZWxsX3BhcnNlX2FyZ3YgKGNvbnN0IGdjaGFyICpjb21tYW5kX2xpbmUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAqYXJnY3AsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2NoYXIgKioqYXJndnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vy
cm9yICoqZXJyb3IpOwoKCiMgNjEgImdsaWIuaCIgMgoKIyAxICIuLi9nbGliL2dzcGF3bi5oIiAx
CiMgMjYgIi4uL2dsaWIvZ3NwYXduLmgiCgoKCgoKdHlwZWRlZiBlbnVtCnsKICBHX1NQQVdOX0VS
Uk9SX0ZPUkssCiAgR19TUEFXTl9FUlJPUl9SRUFELAogIEdfU1BBV05fRVJST1JfQ0hESVIsCiAg
R19TUEFXTl9FUlJPUl9BQ0NFUywKICBHX1NQQVdOX0VSUk9SX1BFUk0sCiAgR19TUEFXTl9FUlJP
Ul8yQklHLAogIEdfU1BBV05fRVJST1JfTk9FWEVDLAogIEdfU1BBV05fRVJST1JfTkFNRVRPT0xP
TkcsCiAgR19TUEFXTl9FUlJPUl9OT0VOVCwKICBHX1NQQVdOX0VSUk9SX05PTUVNLAogIEdfU1BB
V05fRVJST1JfTk9URElSLAogIEdfU1BBV05fRVJST1JfTE9PUCwKICBHX1NQQVdOX0VSUk9SX1RY
VEJVU1ksCiAgR19TUEFXTl9FUlJPUl9JTywKICBHX1NQQVdOX0VSUk9SX05GSUxFLAogIEdfU1BB
V05fRVJST1JfTUZJTEUsCiAgR19TUEFXTl9FUlJPUl9JTlZBTCwKICBHX1NQQVdOX0VSUk9SX0lT
RElSLAogIEdfU1BBV05fRVJST1JfTElCQkFELAogIEdfU1BBV05fRVJST1JfRkFJTEVECgoKfSBH
U3Bhd25FcnJvcjsKCnR5cGVkZWYgdm9pZCAoKiBHU3Bhd25DaGlsZFNldHVwRnVuYykgKGdwb2lu
dGVyIHVzZXJfZGF0YSk7Cgp0eXBlZGVmIGVudW0KewogIEdfU1BBV05fTEVBVkVfREVTQ1JJUFRP
UlNfT1BFTiA9IDEgPDwgMCwKICBHX1NQQVdOX0RPX05PVF9SRUFQX0NISUxEID0gMSA8PCAxLAoK
ICBHX1NQQVdOX1NFQVJDSF9QQVRIID0gMSA8PCAyLAoKICBHX1NQQVdOX1NURE9VVF9UT19ERVZf
TlVMTCA9IDEgPDwgMywKICBHX1NQQVdOX1NUREVSUl9UT19ERVZfTlVMTCA9IDEgPDwgNCwKICBH
X1NQQVdOX0NISUxEX0lOSEVSSVRTX1NURElOID0gMSA8PCA1LAogIEdfU1BBV05fRklMRV9BTkRf
QVJHVl9aRVJPID0gMSA8PCA2Cn0gR1NwYXduRmxhZ3M7CgpHUXVhcmsgZ19zcGF3bl9lcnJvcl9x
dWFyayAodm9pZCk7CgpnYm9vbGVhbiBnX3NwYXduX2FzeW5jIChjb25zdCBnY2hhciAqd29ya2lu
Z19kaXJlY3RvcnksCiAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICoqYXJndiwKICAgICAg
ICAgICAgICAgICAgICAgICAgZ2NoYXIgKiplbnZwLAogICAgICAgICAgICAgICAgICAgICAgICBH
U3Bhd25GbGFncyBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgR1NwYXduQ2hpbGRTZXR1
cEZ1bmMgY2hpbGRfc2V0dXAsCiAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJf
ZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAqY2hpbGRfcGlkLAogICAgICAgICAg
ICAgICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7CgoKCgoKZ2Jvb2xlYW4gZ19zcGF3bl9hc3lu
Y193aXRoX3BpcGVzIChjb25zdCBnY2hhciAqd29ya2luZ19kaXJlY3RvcnksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKiphcmd2LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdjaGFyICoqZW52cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHU3Bhd25GbGFncyBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHU3Bhd25DaGlsZFNldHVwRnVuYyBjaGlsZF9zZXR1cCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2ludCAqY2hpbGRfcGlkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdpbnQgKnN0YW5kYXJkX2lucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdpbnQgKnN0YW5kYXJkX291dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnaW50ICpzdGFuZGFyZF9lcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7CgoKCgoKCmdib29sZWFuIGdfc3Bhd25fc3luYyAo
Y29uc3QgZ2NoYXIgKndvcmtpbmdfZGlyZWN0b3J5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2NoYXIgKiphcmd2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIg
KiplbnZwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NwYXduRmxhZ3MgZmxhZ3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU3Bhd25DaGlsZFNldHVwRnVuYyBjaGls
ZF9zZXR1cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0
YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICoqc3RhbmRhcmRfb3V0cHV0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKipzdGFuZGFyZF9lcnJvciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgKmV4aXRfc3RhdHVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwoKZ2Jvb2xlYW4gZ19zcGF3
bl9jb21tYW5kX2xpbmVfc3luYyAoY29uc3QgZ2NoYXIgKmNvbW1hbmRfbGluZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICoqc3RhbmRhcmRfb3V0cHV0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKipzdGFuZGFyZF9lcnJvciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgKmV4aXRfc3RhdHVzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwpnYm9v
bGVhbiBnX3NwYXduX2NvbW1hbmRfbGluZV9hc3luYyAoY29uc3QgZ2NoYXIgKmNvbW1hbmRfbGlu
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsK
CgoKIyA2MyAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xpYi9nc3RyZnVuY3MuaCIgMQojIDMzICIuLi9n
bGliL2dzdHJmdW5jcy5oIgoKCgp0eXBlZGVmIGVudW0gewogIEdfQVNDSUlfQUxOVU0gPSAxIDw8
IDAsCiAgR19BU0NJSV9BTFBIQSA9IDEgPDwgMSwKICBHX0FTQ0lJX0NOVFJMID0gMSA8PCAyLAog
IEdfQVNDSUlfRElHSVQgPSAxIDw8IDMsCiAgR19BU0NJSV9HUkFQSCA9IDEgPDwgNCwKICBHX0FT
Q0lJX0xPV0VSID0gMSA8PCA1LAogIEdfQVNDSUlfUFJJTlQgPSAxIDw8IDYsCiAgR19BU0NJSV9Q
VU5DVCA9IDEgPDwgNywKICBHX0FTQ0lJX1NQQUNFID0gMSA8PCA4LAogIEdfQVNDSUlfVVBQRVIg
PSAxIDw8IDksCiAgR19BU0NJSV9YRElHSVQgPSAxIDw8IDEwCn0gR0FzY2lpVHlwZTsKCmV4dGVy
biBjb25zdCBndWludDE2ICogY29uc3QgZ19hc2NpaV90YWJsZTsKIyA4NSAiLi4vZ2xpYi9nc3Ry
ZnVuY3MuaCIKZ2NoYXIgZ19hc2NpaV90b2xvd2VyIChnY2hhciBjKSBfX2F0dHJpYnV0ZV9fKChf
X2NvbnN0X18pKTsKZ2NoYXIgZ19hc2NpaV90b3VwcGVyIChnY2hhciBjKSBfX2F0dHJpYnV0ZV9f
KChfX2NvbnN0X18pKTsKCmdpbnQgZ19hc2NpaV9kaWdpdF92YWx1ZSAoZ2NoYXIgYykgX19hdHRy
aWJ1dGVfXygoX19jb25zdF9fKSk7CmdpbnQgZ19hc2NpaV94ZGlnaXRfdmFsdWUgKGdjaGFyIGMp
IF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwoKCgoKCmdjaGFyKiBnX3N0cmRlbGltaXQgKGdj
aGFyICpzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBnY2hhciAqZGVsaW1pdGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdjaGFyIG5ld19kZWxpbWl0ZXIpOwpnY2hhciogZ19zdHJjYW5vbiAoZ2NoYXIgKnN0cmlu
ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICp2
YWxpZF9jaGFycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFy
IHN1YnN0aXR1dG9yKTsKY29uc3QgZ2NoYXIqIGdfc3RyZXJyb3IgKGdpbnQgZXJybnVtKSBfX2F0
dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKY29uc3QgZ2NoYXIqIGdfc3Ryc2lnbmFsIChnaW50IHNp
Z251bSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CmdjaGFyKiBnX3N0cnJldmVyc2UgKGdj
aGFyICpzdHJpbmcpOwpnc2l6ZSBnX3N0cmxjcHkgKGdjaGFyICpkZXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnNyYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplIGRlc3Rfc2l6ZSk7CmdzaXplIGdfc3Ry
bGNhdCAoZ2NoYXIgKmRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnY2hhciAqc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3NpemUgZGVzdF9zaXplKTsKZ2NoYXIgKiBnX3N0cnN0cl9sZW4gKGNvbnN0IGdjaGFyICpo
YXlzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBo
YXlzdGFja19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBnY2hhciAqbmVlZGxlKTsKZ2NoYXIgKiBnX3N0cnJzdHIgKGNvbnN0IGdjaGFyICpoYXlzdGFj
aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpu
ZWVkbGUpOwpnY2hhciAqIGdfc3RycnN0cl9sZW4gKGNvbnN0IGdjaGFyICpoYXlzdGFjaywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBoYXlzdGFja19sZW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqbmVl
ZGxlKTsKCmdib29sZWFuIGdfc3RyX2hhc19zdWZmaXggKGNvbnN0IGdjaGFyICpzdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqc3VmZml4KTsK
Z2Jvb2xlYW4gZ19zdHJfaGFzX3ByZWZpeCAoY29uc3QgZ2NoYXIgKnN0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpwcmVmaXgpOwoKCgpnZG91
YmxlIGdfc3RydG9kIChjb25zdCBnY2hhciAqbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdjaGFyICoqZW5kcHRyKTsKZ2RvdWJsZSBnX2FzY2lpX3N0cnRvZCAo
Y29uc3QgZ2NoYXIgKm5wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnY2hhciAqKmVuZHB0cik7Cmd1aW50NjQgZ19hc2NpaV9zdHJ0b3VsbCAoY29uc3QgZ2NoYXIg
Km5wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2hhciAqKmVu
ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IGJhc2Up
OwoKCgoKZ2NoYXIgKiBnX2FzY2lpX2R0b3N0ciAoZ2NoYXIgKmJ1ZmZlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgYnVmX2xlbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgZCk7CmdjaGFyICogZ19hc2NpaV9mb3Jt
YXRkIChnY2hhciAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2ludCBidWZfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdkb3VibGUgZCk7CgoKZ2NoYXIqIGdfc3RyY2h1ZyAoZ2NoYXIgKnN0cmluZyk7CgpnY2hh
ciogZ19zdHJjaG9tcCAoZ2NoYXIgKnN0cmluZyk7CgoKCmdpbnQgZ19hc2NpaV9zdHJjYXNlY21w
IChjb25zdCBnY2hhciAqczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnY2hhciAqczIpOwpnaW50IGdfYXNjaWlfc3RybmNhc2VjbXAgKGNvbnN0IGdj
aGFyICpzMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdjaGFyICpzMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdz
aXplIG4pOwpnY2hhciogZ19hc2NpaV9zdHJkb3duIChjb25zdCBnY2hhciAqc3RyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzaXplIGxlbik7CmdjaGFyKiBn
X2FzY2lpX3N0cnVwIChjb25zdCBnY2hhciAqc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3NzaXplIGxlbik7CiMgMTgyICIuLi9nbGliL2dzdHJmdW5jcy5o
IgpnY2hhciogZ19zdHJkdXAgKGNvbnN0IGdjaGFyICpzdHIpOwpnY2hhciogZ19zdHJkdXBfcHJp
bnRmIChjb25zdCBnY2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLi4uKSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAxLCAy
KSkpOwpnY2hhciogZ19zdHJkdXBfdnByaW50ZiAoY29uc3QgZ2NoYXIgKmZvcm1hdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJncyk7CmdjaGFyKiBn
X3N0cm5kdXAgKGNvbnN0IGdjaGFyICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnc2l6ZSBuKTsKZ2NoYXIqIGdfc3RybmZpbGwgKGdzaXplIGxlbmd0aCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyIGZpbGxfY2hhcik7Cmdj
aGFyKiBnX3N0cmNvbmNhdCAoY29uc3QgZ2NoYXIgKnN0cmluZzEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwpnY2hhciogZ19zdHJqb2luIChjb25zdCBnY2hh
ciAqc2VwYXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4u
KTsKCgoKCmdjaGFyKiBnX3N0cmNvbXByZXNzIChjb25zdCBnY2hhciAqc291cmNlKTsKIyAyMDkg
Ii4uL2dsaWIvZ3N0cmZ1bmNzLmgiCmdjaGFyKiBnX3N0cmVzY2FwZSAoY29uc3QgZ2NoYXIgKnNv
dXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFy
ICpleGNlcHRpb25zKTsKCmdwb2ludGVyIGdfbWVtZHVwIChnY29uc3Rwb2ludGVyIG1lbSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IGJ5dGVfc2l6ZSk7CiMg
MjIzICIuLi9nbGliL2dzdHJmdW5jcy5oIgpnY2hhcioqIGdfc3Ryc3BsaXQgKGNvbnN0IGdjaGFy
ICpzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
Y2hhciAqZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2ludCBtYXhfdG9rZW5zKTsKZ2NoYXIqIGdfc3Ryam9pbnYgKGNvbnN0IGdjaGFyICpzZXBhcmF0
b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2hhciAqKnN0cl9h
cnJheSk7CnZvaWQgZ19zdHJmcmVldiAoZ2NoYXIgKipzdHJfYXJyYXkpOwpnY2hhcioqIGdfc3Ry
ZHVwdiAoZ2NoYXIgKipzdHJfYXJyYXkpOwoKZ2NoYXIqIGdfc3RwY3B5IChnY2hhciAqZGVzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNyYyk7
CgoKIyA2NCAiZ2xpYi5oIiAyCgoKIyAxICIuLi9nbGliL2d0aHJlYWRwb29sLmgiIDEKIyAzMiAi
Li4vZ2xpYi9ndGhyZWFkcG9vbC5oIgoKCnR5cGVkZWYgc3RydWN0IF9HVGhyZWFkUG9vbCBHVGhy
ZWFkUG9vbDsKCgoKCgoKc3RydWN0IF9HVGhyZWFkUG9vbAp7CiAgR0Z1bmMgZnVuYzsKICBncG9p
bnRlciB1c2VyX2RhdGE7CiAgZ2Jvb2xlYW4gZXhjbHVzaXZlOwp9OwoKCgoKCgpHVGhyZWFkUG9v
bCogZ190aHJlYWRfcG9vbF9uZXcgKEdGdW5jIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbWF4X3RocmVhZHMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gZXhjbHVz
aXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJv
ciAqKmVycm9yKTsKCgoKCgp2b2lkIGdfdGhyZWFkX3Bvb2xfcHVzaCAoR1RocmVhZFBvb2wgKnBv
b2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50
ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
RXJyb3IgKiplcnJvcik7CgoKCgp2b2lkIGdfdGhyZWFkX3Bvb2xfc2V0X21heF90aHJlYWRzIChH
VGhyZWFkUG9vbCAqcG9vbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnaW50IG1heF90aHJlYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsKZ2ludCBnX3RocmVhZF9wb29sX2dldF9t
YXhfdGhyZWFkcyAoR1RocmVhZFBvb2wgKnBvb2wpOwoKCgpndWludCBnX3RocmVhZF9wb29sX2dl
dF9udW1fdGhyZWFkcyAoR1RocmVhZFBvb2wgKnBvb2wpOwoKCmd1aW50IGdfdGhyZWFkX3Bvb2xf
dW5wcm9jZXNzZWQgKEdUaHJlYWRQb29sICpwb29sKTsKCgoKCgp2b2lkIGdfdGhyZWFkX3Bvb2xf
ZnJlZSAoR1RocmVhZFBvb2wgKnBvb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2Jvb2xlYW4gaW1tZWRpYXRlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIHdhaXQpOwoKCgp2b2lkIGdfdGhyZWFk
X3Bvb2xfc2V0X21heF91bnVzZWRfdGhyZWFkcyAoZ2ludCBtYXhfdGhyZWFkcyk7CmdpbnQgZ190
aHJlYWRfcG9vbF9nZXRfbWF4X3VudXNlZF90aHJlYWRzICh2b2lkKTsKZ3VpbnQgZ190aHJlYWRf
cG9vbF9nZXRfbnVtX3VudXNlZF90aHJlYWRzICh2b2lkKTsKCgp2b2lkIGdfdGhyZWFkX3Bvb2xf
c3RvcF91bnVzZWRfdGhyZWFkcyAodm9pZCk7CgoKIyA2NyAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xp
Yi9ndGltZXIuaCIgMQojIDMyICIuLi9nbGliL2d0aW1lci5oIgoKCgoKCgp0eXBlZGVmIHN0cnVj
dCBfR1RpbWVyIEdUaW1lcjsKCgoKR1RpbWVyKiBnX3RpbWVyX25ldyAodm9pZCk7CnZvaWQgZ190
aW1lcl9kZXN0cm95IChHVGltZXIgKnRpbWVyKTsKdm9pZCBnX3RpbWVyX3N0YXJ0IChHVGltZXIg
KnRpbWVyKTsKdm9pZCBnX3RpbWVyX3N0b3AgKEdUaW1lciAqdGltZXIpOwp2b2lkIGdfdGltZXJf
cmVzZXQgKEdUaW1lciAqdGltZXIpOwpnZG91YmxlIGdfdGltZXJfZWxhcHNlZCAoR1RpbWVyICp0
aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgIGd1bG9uZyAqbWljcm9zZWNvbmRzKTsKCnZv
aWQgZ191c2xlZXAgKGd1bG9uZyBtaWNyb3NlY29uZHMpOwoKdm9pZCBnX3RpbWVfdmFsX2FkZCAo
R1RpbWVWYWwgKnRpbWVfLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2xvbmcgbWljcm9zZWNv
bmRzKTsKCgojIDY4ICJnbGliLmgiIDIKIyAxICIuLi9nbGliL2d0cmVlLmgiIDEKIyAzMiAiLi4v
Z2xpYi9ndHJlZS5oIgoKCnR5cGVkZWYgc3RydWN0IF9HVHJlZSBHVHJlZTsKCnR5cGVkZWYgZ2Jv
b2xlYW4gKCpHVHJhdmVyc2VGdW5jKSAoZ3BvaW50ZXIga2V5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdwb2ludGVyIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwoKCgpHVHJlZSogZ190cmVlX25ldyAoR0NvbXBhcmVG
dW5jIGtleV9jb21wYXJlX2Z1bmMpOwpHVHJlZSogZ190cmVlX25ld193aXRoX2RhdGEgKEdDb21w
YXJlRGF0YUZ1bmMga2V5X2NvbXBhcmVfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3BvaW50ZXIga2V5X2NvbXBhcmVfZGF0YSk7CkdUcmVlKiBnX3RyZWVfbmV3X2Z1bGwg
KEdDb21wYXJlRGF0YUZ1bmMga2V5X2NvbXBhcmVfZnVuYywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3BvaW50ZXIga2V5X2NvbXBhcmVfZGF0YSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkga2V5X2Rlc3Ryb3lfZnVuYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgdmFsdWVfZGVzdHJveV9mdW5j
KTsKdm9pZCBnX3RyZWVfZGVzdHJveSAoR1RyZWUgKnRyZWUpOwp2b2lkIGdfdHJlZV9pbnNlcnQg
KEdUcmVlICp0cmVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBr
ZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHZhbHVlKTsKdm9p
ZCBnX3RyZWVfcmVwbGFjZSAoR1RyZWUgKnRyZWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdwb2ludGVyIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bv
aW50ZXIgdmFsdWUpOwp2b2lkIGdfdHJlZV9yZW1vdmUgKEdUcmVlICp0cmVlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGtleSk7CnZvaWQgZ190cmVlX3N0
ZWFsIChHVHJlZSAqdHJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0
cG9pbnRlciBrZXkpOwpncG9pbnRlciBnX3RyZWVfbG9va3VwIChHVHJlZSAqdHJlZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBrZXkpOwpnYm9vbGVhbiBn
X3RyZWVfbG9va3VwX2V4dGVuZGVkIChHVHJlZSAqdHJlZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBsb29rdXBfa2V5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBncG9pbnRlciAqb3JpZ19rZXksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdwb2ludGVyICp2YWx1ZSk7CnZvaWQgZ190cmVlX2ZvcmVhY2ggKEdUcmVlICp0
cmVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHJhdmVyc2VGdW5jIGZ1bmMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CiMg
NzcgIi4uL2dsaWIvZ3RyZWUuaCIKZ3BvaW50ZXIgZ190cmVlX3NlYXJjaCAoR1RyZWUgKnRyZWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDb21wYXJlRnVuYyBzZWFyY2hfZnVu
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciB1c2VyX2Rh
dGEpOwpnaW50IGdfdHJlZV9oZWlnaHQgKEdUcmVlICp0cmVlKTsKZ2ludCBnX3RyZWVfbm5vZGVz
IChHVHJlZSAqdHJlZSk7CgoKCgojIDY5ICJnbGliLmgiIDIKCgojIDEgIi4uL2dsaWIvZ3V0aWxz
LmgiIDEKIyAzMyAiLi4vZ2xpYi9ndXRpbHMuaCIKCiMgMTE2ICIuLi9nbGliL2d1dGlscy5oIgpj
b25zdCBnY2hhciogZ19nZXRfdXNlcl9uYW1lICh2b2lkKTsKY29uc3QgZ2NoYXIqIGdfZ2V0X3Jl
YWxfbmFtZSAodm9pZCk7CmNvbnN0IGdjaGFyKiBnX2dldF9ob21lX2RpciAodm9pZCk7CmNvbnN0
IGdjaGFyKiBnX2dldF90bXBfZGlyICh2b2lkKTsKZ2NoYXIqIGdfZ2V0X3ByZ25hbWUgKHZvaWQp
Owp2b2lkIGdfc2V0X3ByZ25hbWUgKGNvbnN0IGdjaGFyICpwcmduYW1lKTsKY29uc3QgZ2NoYXIq
IGdfZ2V0X2FwcGxpY2F0aW9uX25hbWUgKHZvaWQpOwp2b2lkIGdfc2V0X2FwcGxpY2F0aW9uX25h
bWUgKGNvbnN0IGdjaGFyICphcHBsaWNhdGlvbl9uYW1lKTsKCgp0eXBlZGVmIHN0cnVjdCBfR0Rl
YnVnS2V5IEdEZWJ1Z0tleTsKc3RydWN0IF9HRGVidWdLZXkKewogIGdjaGFyICprZXk7CiAgZ3Vp
bnQgdmFsdWU7Cn07CgoKCmd1aW50IGdfcGFyc2VfZGVidWdfc3RyaW5nIChjb25zdCBnY2hhciAq
c3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEdEZWJ1Z0tleSAqa2V5cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBndWludCBua2V5cyk7CgpnaW50IGdfc25wcmludGYgKGdjaGFyICpzdHJpbmcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vsb25nIG4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgY29uc3QgKmZvcm1hdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIF9fYXR0cmli
dXRlX18oKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CmdpbnQgZ192c25wcmludGYg
KGdjaGFyICpzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3Vsb25nIG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2NoYXIgY29uc3QgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YV9saXN0IGFyZ3MpOwoKCmdib29sZWFuIGdfcGF0aF9pc19hYnNvbHV0ZSAoY29u
c3QgZ2NoYXIgKmZpbGVfbmFtZSk7CgoKY29uc3QgZ2NoYXIqIGdfcGF0aF9za2lwX3Jvb3QgKGNv
bnN0IGdjaGFyICpmaWxlX25hbWUpOwojIDE2NiAiLi4vZ2xpYi9ndXRpbHMuaCIKZ2NoYXIqIGdf
Z2V0X2N1cnJlbnRfZGlyICh2b2lkKTsKZ2NoYXIqIGdfcGF0aF9nZXRfYmFzZW5hbWUgKGNvbnN0
IGdjaGFyICpmaWxlX25hbWUpOwpnY2hhciogZ19wYXRoX2dldF9kaXJuYW1lIChjb25zdCBnY2hh
ciAqZmlsZV9uYW1lKTsKCgoKdm9pZCBnX251bGxpZnlfcG9pbnRlciAoZ3BvaW50ZXIgKm51bGxp
ZnlfbG9jYXRpb24pOwoKCgoKCgpjb25zdCBnY2hhciogZ19nZXRlbnYgKGNvbnN0IGdjaGFyICp2
YXJpYWJsZSk7CgoKCgoKCnR5cGVkZWYgdm9pZCAoKkdWb2lkRnVuYykgKHZvaWQpOwojIDE5NyAi
Li4vZ2xpYi9ndXRpbHMuaCIKdm9pZCBnX2F0ZXhpdCAoR1ZvaWRGdW5jIGZ1bmMpOwoKCmdjaGFy
KiBnX2ZpbmRfcHJvZ3JhbV9pbl9wYXRoIChjb25zdCBnY2hhciAqcHJvZ3JhbSk7CgoKCmV4dGVy
biBpbmxpbmUgZ2ludCBnX2JpdF9udGhfbHNmIChndWxvbmcgbWFzaywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBudGhfYml0KTsKZXh0ZXJuIGlubGluZSBnaW50
IGdfYml0X250aF9tc2YgKGd1bG9uZyBtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnaW50IG50aF9iaXQpOwpleHRlcm4gaW5saW5lIGd1aW50IGdfYml0X3N0b3Jh
Z2UgKGd1bG9uZyBudW1iZXIpOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0dUcmFzaFN0YWNrIEdUcmFz
aFN0YWNrOwpzdHJ1Y3QgX0dUcmFzaFN0YWNrCnsKICBHVHJhc2hTdGFjayAqbmV4dDsKfTsKCmV4
dGVybiBpbmxpbmUgdm9pZCBnX3RyYXNoX3N0YWNrX3B1c2ggKEdUcmFzaFN0YWNrICoqc3RhY2tf
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2lu
dGVyIGRhdGFfcCk7CmV4dGVybiBpbmxpbmUgZ3BvaW50ZXIgZ190cmFzaF9zdGFja19wb3AgKEdU
cmFzaFN0YWNrICoqc3RhY2tfcCk7CmV4dGVybiBpbmxpbmUgZ3BvaW50ZXIgZ190cmFzaF9zdGFj
a19wZWVrIChHVHJhc2hTdGFjayAqKnN0YWNrX3ApOwpleHRlcm4gaW5saW5lIGd1aW50IGdfdHJh
c2hfc3RhY2tfaGVpZ2h0IChHVHJhc2hTdGFjayAqKnN0YWNrX3ApOwoKCgoKZXh0ZXJuIGlubGlu
ZSBnaW50CmdfYml0X250aF9sc2YgKGd1bG9uZyBtYXNrLAogICAgICAgICAgICAgICBnaW50IG50
aF9iaXQpCnsKICBkbwogICAgewogICAgICBudGhfYml0Kys7CiAgICAgIGlmIChtYXNrICYgKDEg
PDwgKGd1bG9uZykgbnRoX2JpdCkpCiAgICAgICAgcmV0dXJuIG50aF9iaXQ7CiAgICB9CiAgd2hp
bGUgKG50aF9iaXQgPCAzMSk7CiAgcmV0dXJuIC0xOwp9CmV4dGVybiBpbmxpbmUgZ2ludApnX2Jp
dF9udGhfbXNmIChndWxvbmcgbWFzaywKICAgICAgICAgICAgICAgZ2ludCBudGhfYml0KQp7CiAg
aWYgKG50aF9iaXQgPCAwKQogICAgbnRoX2JpdCA9IDQgKiA4OwogIGRvCiAgICB7CiAgICAgIG50
aF9iaXQtLTsKICAgICAgaWYgKG1hc2sgJiAoMSA8PCAoZ3Vsb25nKSBudGhfYml0KSkKICAgICAg
ICByZXR1cm4gbnRoX2JpdDsKICAgIH0KICB3aGlsZSAobnRoX2JpdCA+IDApOwogIHJldHVybiAt
MTsKfQpleHRlcm4gaW5saW5lIGd1aW50CmdfYml0X3N0b3JhZ2UgKGd1bG9uZyBudW1iZXIpCnsK
ICByZWdpc3RlciBndWludCBuX2JpdHMgPSAwOwoKICBkbwogICAgewogICAgICBuX2JpdHMrKzsK
ICAgICAgbnVtYmVyID4+PSAxOwogICAgfQogIHdoaWxlIChudW1iZXIpOwogIHJldHVybiBuX2Jp
dHM7Cn0KZXh0ZXJuIGlubGluZSB2b2lkCmdfdHJhc2hfc3RhY2tfcHVzaCAoR1RyYXNoU3RhY2sg
KipzdGFja19wLAogICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGFfcCkKewogIEdUcmFz
aFN0YWNrICpkYXRhID0gKEdUcmFzaFN0YWNrICopIGRhdGFfcDsKCiAgZGF0YS0+bmV4dCA9ICpz
dGFja19wOwogICpzdGFja19wID0gZGF0YTsKfQpleHRlcm4gaW5saW5lIGdwb2ludGVyCmdfdHJh
c2hfc3RhY2tfcG9wIChHVHJhc2hTdGFjayAqKnN0YWNrX3ApCnsKICBHVHJhc2hTdGFjayAqZGF0
YTsKCiAgZGF0YSA9ICpzdGFja19wOwogIGlmIChkYXRhKQogICAgewogICAgICAqc3RhY2tfcCA9
IGRhdGEtPm5leHQ7CgoKCiAgICAgIGRhdGEtPm5leHQgPSAoKHZvaWQgKikwKTsKICAgIH0KCiAg
cmV0dXJuIGRhdGE7Cn0KZXh0ZXJuIGlubGluZSBncG9pbnRlcgpnX3RyYXNoX3N0YWNrX3BlZWsg
KEdUcmFzaFN0YWNrICoqc3RhY2tfcCkKewogIEdUcmFzaFN0YWNrICpkYXRhOwoKICBkYXRhID0g
KnN0YWNrX3A7CgogIHJldHVybiBkYXRhOwp9CmV4dGVybiBpbmxpbmUgZ3VpbnQKZ190cmFzaF9z
dGFja19oZWlnaHQgKEdUcmFzaFN0YWNrICoqc3RhY2tfcCkKewogIEdUcmFzaFN0YWNrICpkYXRh
OwogIGd1aW50IGkgPSAwOwoKICBmb3IgKGRhdGEgPSAqc3RhY2tfcDsgZGF0YTsgZGF0YSA9IGRh
dGEtPm5leHQpCiAgICBpKys7CgogIHJldHVybiBpOwp9CgoKCgoKCmV4dGVybiBjb25zdCBndWlu
dCBnbGliX21ham9yX3ZlcnNpb247CmV4dGVybiBjb25zdCBndWludCBnbGliX21pbm9yX3ZlcnNp
b247CmV4dGVybiBjb25zdCBndWludCBnbGliX21pY3JvX3ZlcnNpb247CmV4dGVybiBjb25zdCBn
dWludCBnbGliX2ludGVyZmFjZV9hZ2U7CmV4dGVybiBjb25zdCBndWludCBnbGliX2JpbmFyeV9h
Z2U7CgoKCgoKCgoKIyA3MiAiZ2xpYi5oIiAyCiMgNDkgImdzY2FubmVyLmMiIDIKIyAxICJncHJp
bnRmaW50LmgiIDEKIyA1MCAiZ3NjYW5uZXIuYyIgMgojIDY0ICJnc2Nhbm5lci5jIgp0eXBlZGVm
IHN0cnVjdCBfR1NjYW5uZXJLZXkgR1NjYW5uZXJLZXk7CgpzdHJ1Y3QgX0dTY2FubmVyS2V5CnsK
ICBndWludCBzY29wZV9pZDsKICBnY2hhciAqc3ltYm9sOwogIGdwb2ludGVyIHZhbHVlOwp9OwoK
CgpzdGF0aWMgR1NjYW5uZXJDb25maWcgZ19zY2FubmVyX2NvbmZpZ190ZW1wbGF0ZSA9CnsKICAo
CiAgICIgXHRcclxuIgogICApICwKICAoCiAgICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIK
ICAgIl8iCiAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKICAgKSAsCiAgKAogICAiYWJj
ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCiAgICJfIgogICAiQUJDREVGR0hJSktMTU5PUFFSU1RV
VldYWVoiCiAgICIwMTIzNDU2Nzg5IgogICAiXDMzN1wzNDBcMzQxXDM0MlwzNDNcMzQ0XDM0NVwz
NDYiICJcMzQ3XDM1MFwzNTFcMzUyXDM1M1wzNTRcMzU1XDM1NlwzNTdcMzYwIiAiXDM2MVwzNjJc
MzYzXDM2NFwzNjVcMzY2IiAiXDM3MFwzNzFcMzcyXDM3M1wzNzRcMzc1XDM3NlwzNzciCiAgICJc
MzAwXDMwMVwzMDJcMzAzXDMwNFwzMDVcMzA2IiAiXDMwN1wzMTBcMzExXDMxMlwzMTNcMzE0XDMx
NVwzMTZcMzE3XDMyMCIgIlwzMjFcMzIyXDMyM1wzMjRcMzI1XDMyNiIgIlwzMzBcMzMxXDMzMlwz
MzNcMzM0XDMzNVwzMzYiCiAgICkgLAogICggIiNcbiIgKSAsCgogICgwKSAsCgogICghKDApKSAs
CiAgKCEoMCkpICwKICAoISgwKSkgLAogICghKDApKSAsCiAgKDApICwKICAoMCkgLAogICghKDAp
KSAsCiAgKDApICwKICAoISgwKSkgLAogICghKDApKSAsCiAgKCEoMCkpICwKICAoMCkgLAogICgh
KDApKSAsCiAgKCEoMCkpICwKICAoISgwKSkgLAogICgwKSAsCiAgKDApICwKICAoISgwKSkgLAog
ICgwKSAsCiAgKDApICwKICAoMCkgLAp9OwoKCgpzdGF0aWMgaW5saW5lCkdTY2FubmVyS2V5KiBn
X3NjYW5uZXJfbG9va3VwX2ludGVybmFsIChHU2Nhbm5lciAqc2Nhbm5lciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHNjb3BlX2lkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN5bWJvbCk7CnN0
YXRpYyBnYm9vbGVhbiBnX3NjYW5uZXJfa2V5X2VxdWFsIChnY29uc3Rwb2ludGVyIHYxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciB2Mik7
CnN0YXRpYyBndWludCBnX3NjYW5uZXJfa2V5X2hhc2ggKGdjb25zdHBvaW50ZXIgdik7CnN0YXRp
YyB2b2lkIGdfc2Nhbm5lcl9nZXRfdG9rZW5fbGwgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1Rva2VuVHlwZSAqdG9rZW5fcCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUb2tlblZhbHVlICp2
YWx1ZV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQg
KmxpbmVfcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50
ICpwb3NpdGlvbl9wKTsKc3RhdGljIHZvaWQgZ19zY2FubmVyX2dldF90b2tlbl9pIChHU2Nhbm5l
ciAqc2Nhbm5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdU
b2tlblR5cGUgKnRva2VuX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHVG9rZW5WYWx1ZSAqdmFsdWVfcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGd1aW50ICpsaW5lX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBndWludCAqcG9zaXRpb25fcCk7CgpzdGF0aWMgZ3VjaGFyIGdfc2Nhbm5l
cl9wZWVrX25leHRfY2hhciAoR1NjYW5uZXIgKnNjYW5uZXIpOwpzdGF0aWMgZ3VjaGFyIGdfc2Nh
bm5lcl9nZXRfY2hhciAoR1NjYW5uZXIgKnNjYW5uZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBndWludCAqbGluZV9wLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgKnBvc2l0aW9uX3ApOwpzdGF0aWMgdm9pZCBnX3Nj
YW5uZXJfbXNnX2hhbmRsZXIgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKm1lc3NhZ2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBpc19lcnJvcik7CgoKCnN0YXRpYyBp
bmxpbmUgZ2ludApnX3NjYW5uZXJfY2hhcl8yX251bSAoZ3VjaGFyIGMsCiAgICAgICAgICAgICAg
ICAgICAgICBndWNoYXIgYmFzZSkKewogIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykKICAgIGMg
LT0gJzAnOwogIGVsc2UgaWYgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKQogICAgYyAtPSAnQScgLSAx
MDsKICBlbHNlIGlmIChjID49ICdhJyAmJiBjIDw9ICd6JykKICAgIGMgLT0gJ2EnIC0gMTA7CiAg
ZWxzZQogICAgcmV0dXJuIC0xOwoKICBpZiAoYyA8IGJhc2UpCiAgICByZXR1cm4gYzsKCiAgcmV0
dXJuIC0xOwp9CgpHU2Nhbm5lcioKZ19zY2FubmVyX25ldyAoY29uc3QgR1NjYW5uZXJDb25maWcg
KmNvbmZpZ190ZW1wbCkKewogIEdTY2FubmVyICpzY2FubmVyOwoKICBpZiAoIWNvbmZpZ190ZW1w
bCkKICAgIGNvbmZpZ190ZW1wbCA9ICZnX3NjYW5uZXJfY29uZmlnX3RlbXBsYXRlOwoKICBzY2Fu
bmVyID0gKChHU2Nhbm5lciAqKSBnX21hbGxvYzAgKCgoZ3NpemUpIHNpemVvZiAoR1NjYW5uZXIp
KSAqICgoZ3NpemUpICgxKSkpKTsKCiAgc2Nhbm5lci0+dXNlcl9kYXRhID0gKCh2b2lkICopMCk7
CiAgc2Nhbm5lci0+bWF4X3BhcnNlX2Vycm9ycyA9IDE7CiAgc2Nhbm5lci0+cGFyc2VfZXJyb3Jz
ID0gMDsKICBzY2FubmVyLT5pbnB1dF9uYW1lID0gKCh2b2lkICopMCk7CiAgZ19kYXRhbGlzdF9p
bml0ICgmc2Nhbm5lci0+cWRhdGEpOwoKICBzY2FubmVyLT5jb25maWcgPSAoKEdTY2FubmVyQ29u
ZmlnICopIGdfbWFsbG9jMCAoKChnc2l6ZSkgc2l6ZW9mIChHU2Nhbm5lckNvbmZpZykpICogKChn
c2l6ZSkgKDEpKSkpOwoKICBzY2FubmVyLT5jb25maWctPmNhc2Vfc2Vuc2l0aXZlID0gY29uZmln
X3RlbXBsLT5jYXNlX3NlbnNpdGl2ZTsKICBzY2FubmVyLT5jb25maWctPmNzZXRfc2tpcF9jaGFy
YWN0ZXJzID0gY29uZmlnX3RlbXBsLT5jc2V0X3NraXBfY2hhcmFjdGVyczsKICBpZiAoIXNjYW5u
ZXItPmNvbmZpZy0+Y3NldF9za2lwX2NoYXJhY3RlcnMpCiAgICBzY2FubmVyLT5jb25maWctPmNz
ZXRfc2tpcF9jaGFyYWN0ZXJzID0gIiI7CiAgc2Nhbm5lci0+Y29uZmlnLT5jc2V0X2lkZW50aWZp
ZXJfZmlyc3QgPSBjb25maWdfdGVtcGwtPmNzZXRfaWRlbnRpZmllcl9maXJzdDsKICBzY2FubmVy
LT5jb25maWctPmNzZXRfaWRlbnRpZmllcl9udGggPSBjb25maWdfdGVtcGwtPmNzZXRfaWRlbnRp
Zmllcl9udGg7CiAgc2Nhbm5lci0+Y29uZmlnLT5jcGFpcl9jb21tZW50X3NpbmdsZSA9IGNvbmZp
Z190ZW1wbC0+Y3BhaXJfY29tbWVudF9zaW5nbGU7CiAgc2Nhbm5lci0+Y29uZmlnLT5za2lwX2Nv
bW1lbnRfbXVsdGkgPSBjb25maWdfdGVtcGwtPnNraXBfY29tbWVudF9tdWx0aTsKICBzY2FubmVy
LT5jb25maWctPnNraXBfY29tbWVudF9zaW5nbGUgPSBjb25maWdfdGVtcGwtPnNraXBfY29tbWVu
dF9zaW5nbGU7CiAgc2Nhbm5lci0+Y29uZmlnLT5zY2FuX2NvbW1lbnRfbXVsdGkgPSBjb25maWdf
dGVtcGwtPnNjYW5fY29tbWVudF9tdWx0aTsKICBzY2FubmVyLT5jb25maWctPnNjYW5faWRlbnRp
ZmllciA9IGNvbmZpZ190ZW1wbC0+c2Nhbl9pZGVudGlmaWVyOwogIHNjYW5uZXItPmNvbmZpZy0+
c2Nhbl9pZGVudGlmaWVyXzFjaGFyID0gY29uZmlnX3RlbXBsLT5zY2FuX2lkZW50aWZpZXJfMWNo
YXI7CiAgc2Nhbm5lci0+Y29uZmlnLT5zY2FuX2lkZW50aWZpZXJfTlVMTCA9IGNvbmZpZ190ZW1w
bC0+c2Nhbl9pZGVudGlmaWVyX05VTEw7CiAgc2Nhbm5lci0+Y29uZmlnLT5zY2FuX3N5bWJvbHMg
PSBjb25maWdfdGVtcGwtPnNjYW5fc3ltYm9sczsKICBzY2FubmVyLT5jb25maWctPnNjYW5fYmlu
YXJ5ID0gY29uZmlnX3RlbXBsLT5zY2FuX2JpbmFyeTsKICBzY2FubmVyLT5jb25maWctPnNjYW5f
b2N0YWwgPSBjb25maWdfdGVtcGwtPnNjYW5fb2N0YWw7CiAgc2Nhbm5lci0+Y29uZmlnLT5zY2Fu
X2Zsb2F0ID0gY29uZmlnX3RlbXBsLT5zY2FuX2Zsb2F0OwogIHNjYW5uZXItPmNvbmZpZy0+c2Nh
bl9oZXggPSBjb25maWdfdGVtcGwtPnNjYW5faGV4OwogIHNjYW5uZXItPmNvbmZpZy0+c2Nhbl9o
ZXhfZG9sbGFyID0gY29uZmlnX3RlbXBsLT5zY2FuX2hleF9kb2xsYXI7CiAgc2Nhbm5lci0+Y29u
ZmlnLT5zY2FuX3N0cmluZ19zcSA9IGNvbmZpZ190ZW1wbC0+c2Nhbl9zdHJpbmdfc3E7CiAgc2Nh
bm5lci0+Y29uZmlnLT5zY2FuX3N0cmluZ19kcSA9IGNvbmZpZ190ZW1wbC0+c2Nhbl9zdHJpbmdf
ZHE7CiAgc2Nhbm5lci0+Y29uZmlnLT5udW1iZXJzXzJfaW50ID0gY29uZmlnX3RlbXBsLT5udW1i
ZXJzXzJfaW50OwogIHNjYW5uZXItPmNvbmZpZy0+aW50XzJfZmxvYXQgPSBjb25maWdfdGVtcGwt
PmludF8yX2Zsb2F0OwogIHNjYW5uZXItPmNvbmZpZy0+aWRlbnRpZmllcl8yX3N0cmluZyA9IGNv
bmZpZ190ZW1wbC0+aWRlbnRpZmllcl8yX3N0cmluZzsKICBzY2FubmVyLT5jb25maWctPmNoYXJf
Ml90b2tlbiA9IGNvbmZpZ190ZW1wbC0+Y2hhcl8yX3Rva2VuOwogIHNjYW5uZXItPmNvbmZpZy0+
c3ltYm9sXzJfdG9rZW4gPSBjb25maWdfdGVtcGwtPnN5bWJvbF8yX3Rva2VuOwogIHNjYW5uZXIt
PmNvbmZpZy0+c2NvcGVfMF9mYWxsYmFjayA9IGNvbmZpZ190ZW1wbC0+c2NvcGVfMF9mYWxsYmFj
azsKICBzY2FubmVyLT5jb25maWctPnN0b3JlX2ludDY0ID0gY29uZmlnX3RlbXBsLT5zdG9yZV9p
bnQ2NDsKCiAgc2Nhbm5lci0+dG9rZW4gPSBHX1RPS0VOX05PTkU7CiAgc2Nhbm5lci0+dmFsdWUu
dl9pbnQ2NCA9IDA7CiAgc2Nhbm5lci0+bGluZSA9IDE7CiAgc2Nhbm5lci0+cG9zaXRpb24gPSAw
OwoKICBzY2FubmVyLT5uZXh0X3Rva2VuID0gR19UT0tFTl9OT05FOwogIHNjYW5uZXItPm5leHRf
dmFsdWUudl9pbnQ2NCA9IDA7CiAgc2Nhbm5lci0+bmV4dF9saW5lID0gMTsKICBzY2FubmVyLT5u
ZXh0X3Bvc2l0aW9uID0gMDsKCiAgc2Nhbm5lci0+c3ltYm9sX3RhYmxlID0gZ19oYXNoX3RhYmxl
X25ldyAoZ19zY2FubmVyX2tleV9oYXNoLCBnX3NjYW5uZXJfa2V5X2VxdWFsKTsKICBzY2FubmVy
LT5pbnB1dF9mZCA9IC0xOwogIHNjYW5uZXItPnRleHQgPSAoKHZvaWQgKikwKTsKICBzY2FubmVy
LT50ZXh0X2VuZCA9ICgodm9pZCAqKTApOwogIHNjYW5uZXItPmJ1ZmZlciA9ICgodm9pZCAqKTAp
OwogIHNjYW5uZXItPnNjb3BlX2lkID0gMDsKCiAgc2Nhbm5lci0+bXNnX2hhbmRsZXIgPSBnX3Nj
YW5uZXJfbXNnX2hhbmRsZXI7CgogIHJldHVybiBzY2FubmVyOwp9CgpzdGF0aWMgaW5saW5lIHZv
aWQKZ19zY2FubmVyX2ZyZWVfdmFsdWUgKEdUb2tlblR5cGUgKnRva2VuX3AsCiAgICAgICAgICAg
ICAgICAgICAgICBHVG9rZW5WYWx1ZSAqdmFsdWVfcCkKewogIHN3aXRjaCAoKnRva2VuX3ApCiAg
ICB7CiAgICBjYXNlIEdfVE9LRU5fU1RSSU5HOgogICAgY2FzZSBHX1RPS0VOX0lERU5USUZJRVI6
CiAgICBjYXNlIEdfVE9LRU5fSURFTlRJRklFUl9OVUxMOgogICAgY2FzZSBHX1RPS0VOX0NPTU1F
TlRfU0lOR0xFOgogICAgY2FzZSBHX1RPS0VOX0NPTU1FTlRfTVVMVEk6CiAgICAgIGdfZnJlZSAo
dmFsdWVfcC0+dl9zdHJpbmcpOwogICAgICBicmVhazsKCiAgICBkZWZhdWx0OgogICAgICBicmVh
azsKICAgIH0KCiAgKnRva2VuX3AgPSBHX1RPS0VOX05PTkU7Cn0KCnN0YXRpYyB2b2lkCmdfc2Nh
bm5lcl9kZXN0cm95X3N5bWJvbF90YWJsZV9lbnRyeSAoZ3BvaW50ZXIgX2tleSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBfdmFsdWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgX2RhdGEpCnsKICBHU2Nhbm5lcktl
eSAqa2V5ID0gX2tleTsKCiAgZ19mcmVlIChrZXktPnN5bWJvbCk7CiAgZ19mcmVlIChrZXkpOwp9
Cgp2b2lkCmdfc2Nhbm5lcl9kZXN0cm95IChHU2Nhbm5lciAqc2Nhbm5lcikKewogICh2b2lkKSh7
IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4dGVuc2lvbl9fICh7IGludCBfZ19ib29sZWFuX3Zh
cl87IGlmIChzY2FubmVyICE9ICgodm9pZCAqKTApKSBfZ19ib29sZWFuX3Zhcl8gPSAxOyBlbHNl
IF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5fdmFyXzsgfSksIDEpKSB7IH0gZWxzZSB7
IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMLCAiZmlsZSAlczogbGluZSAlZCAo
JXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3NjYW5uZXIuYyIsIDI3MywgX19QUkVUVFlf
RlVOQ1RJT05fXywgInNjYW5uZXIgIT0gTlVMTCIpOyByZXR1cm47IH07IH0pOwoKICBnX2RhdGFs
aXN0X2NsZWFyICgmc2Nhbm5lci0+cWRhdGEpOwogIGdfaGFzaF90YWJsZV9mb3JlYWNoIChzY2Fu
bmVyLT5zeW1ib2xfdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGdfc2Nhbm5lcl9kZXN0
cm95X3N5bWJvbF90YWJsZV9lbnRyeSwgKCh2b2lkICopMCkpOwogIGdfaGFzaF90YWJsZV9kZXN0
cm95IChzY2FubmVyLT5zeW1ib2xfdGFibGUpOwogIGdfc2Nhbm5lcl9mcmVlX3ZhbHVlICgmc2Nh
bm5lci0+dG9rZW4sICZzY2FubmVyLT52YWx1ZSk7CiAgZ19zY2FubmVyX2ZyZWVfdmFsdWUgKCZz
Y2FubmVyLT5uZXh0X3Rva2VuLCAmc2Nhbm5lci0+bmV4dF92YWx1ZSk7CiAgZ19mcmVlIChzY2Fu
bmVyLT5jb25maWcpOwogIGdfZnJlZSAoc2Nhbm5lci0+YnVmZmVyKTsKICBnX2ZyZWUgKHNjYW5u
ZXIpOwp9CgpzdGF0aWMgdm9pZApnX3NjYW5uZXJfbXNnX2hhbmRsZXIgKEdTY2FubmVyICpzY2Fu
bmVyLAogICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICptZXNzYWdlLAogICAgICAgICAgICAg
ICAgICAgICAgIGdib29sZWFuIGlzX2Vycm9yKQp7CiAgKHZvaWQpKHsgaWYgKF9fYnVpbHRpbl9l
eHBlY3QgKF9fZXh0ZW5zaW9uX18gKHsgaW50IF9nX2Jvb2xlYW5fdmFyXzsgaWYgKHNjYW5uZXIg
IT0gKCh2b2lkICopMCkpIF9nX2Jvb2xlYW5fdmFyXyA9IDE7IGVsc2UgX2dfYm9vbGVhbl92YXJf
ID0gMDsgX2dfYm9vbGVhbl92YXJfOyB9KSwgMSkpIHsgfSBlbHNlIHsgZ19sb2cgKCJHTGliIiwg
R19MT0dfTEVWRUxfQ1JJVElDQUwsICJmaWxlICVzOiBsaW5lICVkICglcyk6IGFzc2VydGlvbiBg
JXMnIGZhaWxlZCIsICJnc2Nhbm5lci5jIiwgMjkxLCBfX1BSRVRUWV9GVU5DVElPTl9fLCAic2Nh
bm5lciAhPSBOVUxMIik7IHJldHVybjsgfTsgfSk7CgogIGZwcmludGYgKHN0ZGVyciwgIiVzOiVk
OiAiLAogICAgICAgICAgICAgIHNjYW5uZXItPmlucHV0X25hbWUgPyBzY2FubmVyLT5pbnB1dF9u
YW1lIDogIjxtZW1vcnk+IiwKICAgICAgICAgICAgICBzY2FubmVyLT5saW5lKTsKICBpZiAoaXNf
ZXJyb3IpCiAgICBmcHJpbnRmIChzdGRlcnIsICJlcnJvcjogIik7CiAgZnByaW50ZiAoc3RkZXJy
LCAiJXNcbiIsIG1lc3NhZ2UpOwp9Cgp2b2lkCmdfc2Nhbm5lcl9lcnJvciAoR1NjYW5uZXIgKnNj
YW5uZXIsCiAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKmZvcm1hdCwKICAgICAgICAgICAg
ICAgICAuLi4pCnsKICAodm9pZCkoeyBpZiAoX19idWlsdGluX2V4cGVjdCAoX19leHRlbnNpb25f
XyAoeyBpbnQgX2dfYm9vbGVhbl92YXJfOyBpZiAoc2Nhbm5lciAhPSAoKHZvaWQgKikwKSkgX2df
Ym9vbGVhbl92YXJfID0gMTsgZWxzZSBfZ19ib29sZWFuX3Zhcl8gPSAwOyBfZ19ib29sZWFuX3Zh
cl87IH0pLCAxKSkgeyB9IGVsc2UgeyBnX2xvZyAoIkdMaWIiLCBHX0xPR19MRVZFTF9DUklUSUNB
TCwgImZpbGUgJXM6IGxpbmUgJWQgKCVzKTogYXNzZXJ0aW9uIGAlcycgZmFpbGVkIiwgImdzY2Fu
bmVyLmMiLCAzMDYsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJzY2FubmVyICE9IE5VTEwiKTsgcmV0
dXJuOyB9OyB9KTsKICAodm9pZCkoeyBpZiAoX19idWlsdGluX2V4cGVjdCAoX19leHRlbnNpb25f
XyAoeyBpbnQgX2dfYm9vbGVhbl92YXJfOyBpZiAoZm9ybWF0ICE9ICgodm9pZCAqKTApKSBfZ19i
b29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5fdmFy
XzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FM
LCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3NjYW5u
ZXIuYyIsIDMwNywgX19QUkVUVFlfRlVOQ1RJT05fXywgImZvcm1hdCAhPSBOVUxMIik7IHJldHVy
bjsgfTsgfSk7CgogIHNjYW5uZXItPnBhcnNlX2Vycm9ycysrOwoKICBpZiAoc2Nhbm5lci0+bXNn
X2hhbmRsZXIpCiAgICB7CiAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgZ2NoYXIgKnN0cmluZzsK
CiAgICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLGZvcm1hdCk7CiAgICAgIHN0cmlu
ZyA9IGdfc3RyZHVwX3ZwcmludGYgKGZvcm1hdCwgYXJncyk7CiAgICAgIF9fYnVpbHRpbl92YV9l
bmQgKGFyZ3MpOwoKICAgICAgc2Nhbm5lci0+bXNnX2hhbmRsZXIgKHNjYW5uZXIsIHN0cmluZywg
KCEoMCkpKTsKCiAgICAgIGdfZnJlZSAoc3RyaW5nKTsKICAgIH0KfQoKdm9pZApnX3NjYW5uZXJf
d2FybiAoR1NjYW5uZXIgKnNjYW5uZXIsCiAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqZm9y
bWF0LAogICAgICAgICAgICAgICAgLi4uKQp7CiAgKHZvaWQpKHsgaWYgKF9fYnVpbHRpbl9leHBl
Y3QgKF9fZXh0ZW5zaW9uX18gKHsgaW50IF9nX2Jvb2xlYW5fdmFyXzsgaWYgKHNjYW5uZXIgIT0g
KCh2b2lkICopMCkpIF9nX2Jvb2xlYW5fdmFyXyA9IDE7IGVsc2UgX2dfYm9vbGVhbl92YXJfID0g
MDsgX2dfYm9vbGVhbl92YXJfOyB9KSwgMSkpIHsgfSBlbHNlIHsgZ19sb2cgKCJHTGliIiwgR19M
T0dfTEVWRUxfQ1JJVElDQUwsICJmaWxlICVzOiBsaW5lICVkICglcyk6IGFzc2VydGlvbiBgJXMn
IGZhaWxlZCIsICJnc2Nhbm5lci5jIiwgMzMxLCBfX1BSRVRUWV9GVU5DVElPTl9fLCAic2Nhbm5l
ciAhPSBOVUxMIik7IHJldHVybjsgfTsgfSk7CiAgKHZvaWQpKHsgaWYgKF9fYnVpbHRpbl9leHBl
Y3QgKF9fZXh0ZW5zaW9uX18gKHsgaW50IF9nX2Jvb2xlYW5fdmFyXzsgaWYgKGZvcm1hdCAhPSAo
KHZvaWQgKikwKSkgX2dfYm9vbGVhbl92YXJfID0gMTsgZWxzZSBfZ19ib29sZWFuX3Zhcl8gPSAw
OyBfZ19ib29sZWFuX3Zhcl87IH0pLCAxKSkgeyB9IGVsc2UgeyBnX2xvZyAoIkdMaWIiLCBHX0xP
R19MRVZFTF9DUklUSUNBTCwgImZpbGUgJXM6IGxpbmUgJWQgKCVzKTogYXNzZXJ0aW9uIGAlcycg
ZmFpbGVkIiwgImdzY2FubmVyLmMiLCAzMzIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJmb3JtYXQg
IT0gTlVMTCIpOyByZXR1cm47IH07IH0pOwoKICBpZiAoc2Nhbm5lci0+bXNnX2hhbmRsZXIpCiAg
ICB7CiAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgZ2NoYXIgKnN0cmluZzsKCiAgICAgIF9fYnVp
bHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLGZvcm1hdCk7CiAgICAgIHN0cmluZyA9IGdfc3RyZHVw
X3ZwcmludGYgKGZvcm1hdCwgYXJncyk7CiAgICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwoK
ICAgICAgc2Nhbm5lci0+bXNnX2hhbmRsZXIgKHNjYW5uZXIsIHN0cmluZywgKDApKTsKCiAgICAg
IGdfZnJlZSAoc3RyaW5nKTsKICAgIH0KfQoKc3RhdGljIGdib29sZWFuCmdfc2Nhbm5lcl9rZXlf
ZXF1YWwgKGdjb25zdHBvaW50ZXIgdjEsCiAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50
ZXIgdjIpCnsKICBjb25zdCBHU2Nhbm5lcktleSAqa2V5MSA9IHYxOwogIGNvbnN0IEdTY2FubmVy
S2V5ICprZXkyID0gdjI7CgogIHJldHVybiAoa2V5MS0+c2NvcGVfaWQgPT0ga2V5Mi0+c2NvcGVf
aWQpICYmIChfX2V4dGVuc2lvbl9fICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1
aWx0aW5fY29uc3RhbnRfcCAoa2V5MS0+c3ltYm9sKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAo
a2V5Mi0+c3ltYm9sKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKGtleTEtPnN5bWJvbCksIF9fczJf
bGVuID0gc3RybGVuIChrZXkyLT5zeW1ib2wpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKChr
ZXkxLT5zeW1ib2wpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGtleTEtPnN5bWJvbCkg
PT0gMSkgfHwgX19zMV9sZW4gPj0gNCkgJiYgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoa2V5
Mi0+c3ltYm9sKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShrZXkyLT5zeW1ib2wpID09
IDEpIHx8IF9fczJfbGVuID49IDQpKSA/IG1lbWNtcCAoKF9fY29uc3QgY2hhciAqKSAoa2V5MS0+
c3ltYm9sKSwgKF9fY29uc3QgY2hhciAqKSAoa2V5Mi0+c3ltYm9sKSwgKF9fczFfbGVuIDwgX19z
Ml9sZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9w
IChrZXkxLT5zeW1ib2wpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChrZXkxLT5zeW1ib2wp
ICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGtleTEtPnN5bWJvbCkgPT0gMSkgJiYgKF9f
czFfbGVuID0gc3RybGVuIChrZXkxLT5zeW1ib2wpLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRp
bl9jb25zdGFudF9wIChrZXkyLT5zeW1ib2wpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChr
ZXkyLT5zeW1ib2wpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGtleTItPnN5bWJvbCkg
PT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2Nv
bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoa2V5MS0+c3ltYm9sKSlbMF0g
LSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKGtleTItPnN5bWJv
bCkpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0g
KCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGtleTEtPnN5bWJv
bCkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoa2V5
Mi0+c3ltYm9sKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19y
ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoa2V5
MS0+c3ltYm9sKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy
ICopIChrZXkyLT5zeW1ib2wpKVsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0g
MCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq
KSAoa2V5MS0+c3ltYm9sKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z
dCBjaGFyICopIChrZXkyLT5zeW1ib2wpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0
ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWdu
ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrZXkyLT5zeW1ib2wpOyByZWdpc3RlciBpbnQg
X19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo
a2V5MS0+c3ltYm9sKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3Vs
dCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0
IGNoYXIgKikgKGtleTEtPnN5bWJvbCkpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEg
JiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq
KSAoX19jb25zdCBjaGFyICopIChrZXkxLT5zeW1ib2wpKVsyXSAtIF9fczJbMl0pOyBpZiAoX19z
MV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l
ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGtleTEtPnN5bWJvbCkpWzNdIC0gX19zMlszXSk7
IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoa2V5Mi0+c3ltYm9s
KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoa2V5Mi0+c3ltYm9sKSArIDEpIC0gKHNpemVf
dCkoY29uc3Qgdm9pZCAqKShrZXkyLT5zeW1ib2wpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxl
biAoa2V5Mi0+c3ltYm9sKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo
a2V5MS0+c3ltYm9sKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoa2V5MS0+c3ltYm9sKSAr
IDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShrZXkxLT5zeW1ib2wpID09IDEpID8gKF9fZXh0
ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBj
aGFyICopIChfX2NvbnN0IGNoYXIgKikgKGtleTEtPnN5bWJvbCkpWzBdIC0gKChfX2NvbnN0IHVu
c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKShrZXkyLT5zeW1ib2wpKVswXSk7IGlmIChf
X3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z
aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrZXkxLT5zeW1ib2wpKVsxXSAtICgoX19j
b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGtleTItPnN5bWJvbCkpWzFd
KTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19j
b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGtleTEtPnN5bWJvbCkpWzJd
IC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoa2V5Mi0+c3lt
Ym9sKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0g
KCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGtleTEtPnN5bWJv
bCkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoa2V5
Mi0+c3ltYm9sKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9f
Y29uc3QgdW5zaWduZWQgY2hhciAqX19zMSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f
Y29uc3QgY2hhciAqKSAoa2V5MS0+c3ltYm9sKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19z
MVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGtleTIt
PnN5bWJvbCkpWzBdOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1
bHQgPSAoX19zMVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg
KikgKGtleTItPnN5bWJvbCkpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAw
KSB7IF9fcmVzdWx0ID0gKF9fczFbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j
b25zdCBjaGFyICopIChrZXkyLT5zeW1ib2wpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19y
ZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFy
ICopIChfX2NvbnN0IGNoYXIgKikgKGtleTItPnN5bWJvbCkpWzNdKTsgfSB9IF9fcmVzdWx0OyB9
KSkpIDogc3RyY21wIChrZXkxLT5zeW1ib2wsIGtleTItPnN5bWJvbCkpKSk7IH0pID09IDApOwp9
CgpzdGF0aWMgZ3VpbnQKZ19zY2FubmVyX2tleV9oYXNoIChnY29uc3Rwb2ludGVyIHYpCnsKICBj
b25zdCBHU2Nhbm5lcktleSAqa2V5ID0gdjsKICBnY2hhciAqYzsKICBndWludCBoOwoKICBoID0g
a2V5LT5zY29wZV9pZDsKICBmb3IgKGMgPSBrZXktPnN5bWJvbDsgKmM7IGMrKykKICAgIGggPSAo
aCA8PCA1KSAtIGggKyAqYzsKCiAgcmV0dXJuIGg7Cn0KCnN0YXRpYyBpbmxpbmUgR1NjYW5uZXJL
ZXkqCmdfc2Nhbm5lcl9sb29rdXBfaW50ZXJuYWwgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBndWludCBzY29wZV9pZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2NoYXIgKnN5bWJvbCkKewogIEdTY2FubmVyS2V5ICprZXlfcDsKICBHU2Nh
bm5lcktleSBrZXk7CgogIGtleS5zY29wZV9pZCA9IHNjb3BlX2lkOwoKICBpZiAoIXNjYW5uZXIt
PmNvbmZpZy0+Y2FzZV9zZW5zaXRpdmUpCiAgICB7CiAgICAgIGdjaGFyICpkOwogICAgICBjb25z
dCBnY2hhciAqYzsKCiAgICAgIGtleS5zeW1ib2wgPSAoKGdjaGFyICopIGdfbWFsbG9jICgoKGdz
aXplKSBzaXplb2YgKGdjaGFyKSkgKiAoKGdzaXplKSAoc3RybGVuIChzeW1ib2wpICsgMSkpKSk7
CiAgICAgIGZvciAoZCA9IGtleS5zeW1ib2wsIGMgPSBzeW1ib2w7ICpjOyBjKyssIGQrKykKICAg
ICAgICAqZCA9ICggKGd1Y2hhcikgKCAoICgoKGd1Y2hhcikoKmMpKT49J0EnICYmICgoZ3VjaGFy
KSgqYykpPD0nWicpICogKCdhJy0nQScpICkgfCAoICgoKGd1Y2hhcikoKmMpKT49MTkyICYmICgo
Z3VjaGFyKSgqYykpPD0yMTQpICogKDIyNC0xOTIpICkgfCAoICgoKGd1Y2hhcikoKmMpKT49MjE2
ICYmICgoZ3VjaGFyKSgqYykpPD0yMjIpICogKDI0OC0yMTYpICkgfCAoKGd1Y2hhcikoKmMpKSAp
ICk7CiAgICAgICpkID0gMDsKICAgICAga2V5X3AgPSBnX2hhc2hfdGFibGVfbG9va3VwIChzY2Fu
bmVyLT5zeW1ib2xfdGFibGUsICZrZXkpOwogICAgICBnX2ZyZWUgKGtleS5zeW1ib2wpOwogICAg
fQogIGVsc2UKICAgIHsKICAgICAga2V5LnN5bWJvbCA9IChnY2hhciopIHN5bWJvbDsKICAgICAg
a2V5X3AgPSBnX2hhc2hfdGFibGVfbG9va3VwIChzY2FubmVyLT5zeW1ib2xfdGFibGUsICZrZXkp
OwogICAgfQoKICByZXR1cm4ga2V5X3A7Cn0KCnZvaWQKZ19zY2FubmVyX3Njb3BlX2FkZF9zeW1i
b2wgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQg
c2NvcGVfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqc3ltYm9s
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdmFsdWUpCnsKICBHU2Nhbm5l
cktleSAqa2V5OwoKICAodm9pZCkoeyBpZiAoX19idWlsdGluX2V4cGVjdCAoX19leHRlbnNpb25f
XyAoeyBpbnQgX2dfYm9vbGVhbl92YXJfOyBpZiAoc2Nhbm5lciAhPSAoKHZvaWQgKikwKSkgX2df
Ym9vbGVhbl92YXJfID0gMTsgZWxzZSBfZ19ib29sZWFuX3Zhcl8gPSAwOyBfZ19ib29sZWFuX3Zh
cl87IH0pLCAxKSkgeyB9IGVsc2UgeyBnX2xvZyAoIkdMaWIiLCBHX0xPR19MRVZFTF9DUklUSUNB
TCwgImZpbGUgJXM6IGxpbmUgJWQgKCVzKTogYXNzZXJ0aW9uIGAlcycgZmFpbGVkIiwgImdzY2Fu
bmVyLmMiLCA0MTIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJzY2FubmVyICE9IE5VTEwiKTsgcmV0
dXJuOyB9OyB9KTsKICAodm9pZCkoeyBpZiAoX19idWlsdGluX2V4cGVjdCAoX19leHRlbnNpb25f
XyAoeyBpbnQgX2dfYm9vbGVhbl92YXJfOyBpZiAoc3ltYm9sICE9ICgodm9pZCAqKTApKSBfZ19i
b29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5fdmFy
XzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FM
LCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3NjYW5u
ZXIuYyIsIDQxMywgX19QUkVUVFlfRlVOQ1RJT05fXywgInN5bWJvbCAhPSBOVUxMIik7IHJldHVy
bjsgfTsgfSk7CgogIGtleSA9IGdfc2Nhbm5lcl9sb29rdXBfaW50ZXJuYWwgKHNjYW5uZXIsIHNj
b3BlX2lkLCBzeW1ib2wpOwoKICBpZiAoIWtleSkKICAgIHsKICAgICAga2V5ID0gKChHU2Nhbm5l
cktleSAqKSBnX21hbGxvYyAoKChnc2l6ZSkgc2l6ZW9mIChHU2Nhbm5lcktleSkpICogKChnc2l6
ZSkgKDEpKSkpOwogICAgICBrZXktPnNjb3BlX2lkID0gc2NvcGVfaWQ7CiAgICAgIGtleS0+c3lt
Ym9sID0gZ19zdHJkdXAgKHN5bWJvbCk7CiAgICAgIGtleS0+dmFsdWUgPSB2YWx1ZTsKICAgICAg
aWYgKCFzY2FubmVyLT5jb25maWctPmNhc2Vfc2Vuc2l0aXZlKQogICAgICAgIHsKICAgICAgICAg
IGdjaGFyICpjOwoKICAgICAgICAgIGMgPSBrZXktPnN5bWJvbDsKICAgICAgICAgIHdoaWxlICgq
YyAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKmMgPSAoIChndWNoYXIpICggKCAo
KChndWNoYXIpKCpjKSk+PSdBJyAmJiAoKGd1Y2hhcikoKmMpKTw9J1onKSAqICgnYSctJ0EnKSAp
IHwgKCAoKChndWNoYXIpKCpjKSk+PTE5MiAmJiAoKGd1Y2hhcikoKmMpKTw9MjE0KSAqICgyMjQt
MTkyKSApIHwgKCAoKChndWNoYXIpKCpjKSk+PTIxNiAmJiAoKGd1Y2hhcikoKmMpKTw9MjIyKSAq
ICgyNDgtMjE2KSApIHwgKChndWNoYXIpKCpjKSkgKSApOwogICAgICAgICAgICAgIGMrKzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgZ19oYXNoX3RhYmxlX2luc2VydCAoc2Nhbm5lci0+
c3ltYm9sX3RhYmxlLCBrZXksIGtleSk7CiAgICB9CiAgZWxzZQogICAga2V5LT52YWx1ZSA9IHZh
bHVlOwp9Cgp2b2lkCmdfc2Nhbm5lcl9zY29wZV9yZW1vdmVfc3ltYm9sIChHU2Nhbm5lciAqc2Nh
bm5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHNjb3BlX2lkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN5bWJvbCkKewogIEdTY2Fu
bmVyS2V5ICprZXk7CgogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4dGVuc2lv
bl9fICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9ICgodm9pZCAqKTApKSBf
Z19ib29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5f
dmFyXzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJ
Q0FMLCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3Nj
YW5uZXIuYyIsIDQ0NywgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5uZXIgIT0gTlVMTCIpOyBy
ZXR1cm47IH07IH0pOwogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4dGVuc2lv
bl9fICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzeW1ib2wgIT0gKCh2b2lkICopMCkpIF9n
X2Jvb2xlYW5fdmFyXyA9IDE7IGVsc2UgX2dfYm9vbGVhbl92YXJfID0gMDsgX2dfYm9vbGVhbl92
YXJfOyB9KSwgMSkpIHsgfSBlbHNlIHsgZ19sb2cgKCJHTGliIiwgR19MT0dfTEVWRUxfQ1JJVElD
QUwsICJmaWxlICVzOiBsaW5lICVkICglcyk6IGFzc2VydGlvbiBgJXMnIGZhaWxlZCIsICJnc2Nh
bm5lci5jIiwgNDQ4LCBfX1BSRVRUWV9GVU5DVElPTl9fLCAic3ltYm9sICE9IE5VTEwiKTsgcmV0
dXJuOyB9OyB9KTsKCiAga2V5ID0gZ19zY2FubmVyX2xvb2t1cF9pbnRlcm5hbCAoc2Nhbm5lciwg
c2NvcGVfaWQsIHN5bWJvbCk7CgogIGlmIChrZXkpCiAgICB7CiAgICAgIGdfaGFzaF90YWJsZV9y
ZW1vdmUgKHNjYW5uZXItPnN5bWJvbF90YWJsZSwga2V5KTsKICAgICAgZ19mcmVlIChrZXktPnN5
bWJvbCk7CiAgICAgIGdfZnJlZSAoa2V5KTsKICAgIH0KfQoKZ3BvaW50ZXIKZ19zY2FubmVyX2xv
b2t1cF9zeW1ib2wgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIgKnN5bWJvbCkKewogIEdTY2FubmVyS2V5ICprZXk7CiAgZ3VpbnQgc2NvcGVf
aWQ7CgogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4dGVuc2lvbl9fICh7IGlu
dCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9ICgodm9pZCAqKTApKSBfZ19ib29sZWFu
X3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5fdmFyXzsgfSks
IDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMLCAiZmls
ZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3NjYW5uZXIuYyIs
IDQ2NywgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5uZXIgIT0gTlVMTCIpOyByZXR1cm4gKCgo
dm9pZCAqKTApKTsgfTsgfSk7CgogIGlmICghc3ltYm9sKQogICAgcmV0dXJuICgodm9pZCAqKTAp
OwoKICBzY29wZV9pZCA9IHNjYW5uZXItPnNjb3BlX2lkOwogIGtleSA9IGdfc2Nhbm5lcl9sb29r
dXBfaW50ZXJuYWwgKHNjYW5uZXIsIHNjb3BlX2lkLCBzeW1ib2wpOwogIGlmICgha2V5ICYmIHNj
b3BlX2lkICYmIHNjYW5uZXItPmNvbmZpZy0+c2NvcGVfMF9mYWxsYmFjaykKICAgIGtleSA9IGdf
c2Nhbm5lcl9sb29rdXBfaW50ZXJuYWwgKHNjYW5uZXIsIDAsIHN5bWJvbCk7CgogIGlmIChrZXkp
CiAgICByZXR1cm4ga2V5LT52YWx1ZTsKICBlbHNlCiAgICByZXR1cm4gKCh2b2lkICopMCk7Cn0K
Cmdwb2ludGVyCmdfc2Nhbm5lcl9zY29wZV9sb29rdXBfc3ltYm9sIChHU2Nhbm5lciAqc2Nhbm5l
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHNjb3BlX2lkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN5bWJvbCkKewogIEdTY2FubmVy
S2V5ICprZXk7CgogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4dGVuc2lvbl9f
ICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9ICgodm9pZCAqKTApKSBfZ19i
b29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5fdmFy
XzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FM
LCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3NjYW5u
ZXIuYyIsIDQ5MCwgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5uZXIgIT0gTlVMTCIpOyByZXR1
cm4gKCgodm9pZCAqKTApKTsgfTsgfSk7CgogIGlmICghc3ltYm9sKQogICAgcmV0dXJuICgodm9p
ZCAqKTApOwoKICBrZXkgPSBnX3NjYW5uZXJfbG9va3VwX2ludGVybmFsIChzY2FubmVyLCBzY29w
ZV9pZCwgc3ltYm9sKTsKCiAgaWYgKGtleSkKICAgIHJldHVybiBrZXktPnZhbHVlOwogIGVsc2UK
ICAgIHJldHVybiAoKHZvaWQgKikwKTsKfQoKZ3VpbnQKZ19zY2FubmVyX3NldF9zY29wZSAoR1Nj
YW5uZXIgKnNjYW5uZXIsCiAgICAgICAgICAgICAgICAgICAgIGd1aW50IHNjb3BlX2lkKQp7CiAg
Z3VpbnQgb2xkX3Njb3BlX2lkOwoKICAodm9pZCkoeyBpZiAoX19idWlsdGluX2V4cGVjdCAoX19l
eHRlbnNpb25fXyAoeyBpbnQgX2dfYm9vbGVhbl92YXJfOyBpZiAoc2Nhbm5lciAhPSAoKHZvaWQg
KikwKSkgX2dfYm9vbGVhbl92YXJfID0gMTsgZWxzZSBfZ19ib29sZWFuX3Zhcl8gPSAwOyBfZ19i
b29sZWFuX3Zhcl87IH0pLCAxKSkgeyB9IGVsc2UgeyBnX2xvZyAoIkdMaWIiLCBHX0xPR19MRVZF
TF9DUklUSUNBTCwgImZpbGUgJXM6IGxpbmUgJWQgKCVzKTogYXNzZXJ0aW9uIGAlcycgZmFpbGVk
IiwgImdzY2FubmVyLmMiLCA1MDksIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJzY2FubmVyICE9IE5V
TEwiKTsgcmV0dXJuICgwKTsgfTsgfSk7CgogIG9sZF9zY29wZV9pZCA9IHNjYW5uZXItPnNjb3Bl
X2lkOwogIHNjYW5uZXItPnNjb3BlX2lkID0gc2NvcGVfaWQ7CgogIHJldHVybiBvbGRfc2NvcGVf
aWQ7Cn0KCnN0YXRpYyB2b2lkCmdfc2Nhbm5lcl9mb3JlYWNoX2ludGVybmFsIChncG9pbnRlciBf
a2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgX3ZhbHVlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgX3VzZXJfZGF0YSkKewogIEdTY2FubmVyS2V5
ICprZXk7CiAgZ3BvaW50ZXIgKmQ7CiAgR0hGdW5jIGZ1bmM7CiAgZ3BvaW50ZXIgdXNlcl9kYXRh
OwogIGd1aW50ICpzY29wZV9pZDsKCiAgZCA9IF91c2VyX2RhdGE7CiAgZnVuYyA9IChHSEZ1bmMp
IGRbMF07CiAgdXNlcl9kYXRhID0gZFsxXTsKICBzY29wZV9pZCA9IGRbMl07CiAga2V5ID0gX3Zh
bHVlOwoKICBpZiAoa2V5LT5zY29wZV9pZCA9PSAqc2NvcGVfaWQpCiAgICBmdW5jIChrZXktPnN5
bWJvbCwga2V5LT52YWx1ZSwgdXNlcl9kYXRhKTsKfQoKdm9pZApnX3NjYW5uZXJfc2NvcGVfZm9y
ZWFjaF9zeW1ib2wgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGd1aW50IHNjb3BlX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdI
RnVuYyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJf
ZGF0YSkKewogIGdwb2ludGVyIGRbM107CgogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0
IChfX2V4dGVuc2lvbl9fICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9ICgo
dm9pZCAqKTApKSBfZ19ib29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7
IF9nX2Jvb2xlYW5fdmFyXzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9H
X0xFVkVMX0NSSVRJQ0FMLCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBm
YWlsZWQiLCAiZ3NjYW5uZXIuYyIsIDU0NiwgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5uZXIg
IT0gTlVMTCIpOyByZXR1cm47IH07IH0pOwoKICBkWzBdID0gKGdwb2ludGVyKSBmdW5jOwogIGRb
MV0gPSB1c2VyX2RhdGE7CiAgZFsyXSA9ICZzY29wZV9pZDsKCiAgZ19oYXNoX3RhYmxlX2ZvcmVh
Y2ggKHNjYW5uZXItPnN5bWJvbF90YWJsZSwgZ19zY2FubmVyX2ZvcmVhY2hfaW50ZXJuYWwsIGQp
Owp9CgpHVG9rZW5UeXBlCmdfc2Nhbm5lcl9wZWVrX25leHRfdG9rZW4gKEdTY2FubmVyICpzY2Fu
bmVyKQp7CiAgKHZvaWQpKHsgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9fZXh0ZW5zaW9uX18gKHsg
aW50IF9nX2Jvb2xlYW5fdmFyXzsgaWYgKHNjYW5uZXIgIT0gKCh2b2lkICopMCkpIF9nX2Jvb2xl
YW5fdmFyXyA9IDE7IGVsc2UgX2dfYm9vbGVhbl92YXJfID0gMDsgX2dfYm9vbGVhbl92YXJfOyB9
KSwgMSkpIHsgfSBlbHNlIHsgZ19sb2cgKCJHTGliIiwgR19MT0dfTEVWRUxfQ1JJVElDQUwsICJm
aWxlICVzOiBsaW5lICVkICglcyk6IGFzc2VydGlvbiBgJXMnIGZhaWxlZCIsICJnc2Nhbm5lci5j
IiwgNTU4LCBfX1BSRVRUWV9GVU5DVElPTl9fLCAic2Nhbm5lciAhPSBOVUxMIik7IHJldHVybiAo
R19UT0tFTl9FT0YpOyB9OyB9KTsKCiAgaWYgKHNjYW5uZXItPm5leHRfdG9rZW4gPT0gR19UT0tF
Tl9OT05FKQogICAgewogICAgICBzY2FubmVyLT5uZXh0X2xpbmUgPSBzY2FubmVyLT5saW5lOwog
ICAgICBzY2FubmVyLT5uZXh0X3Bvc2l0aW9uID0gc2Nhbm5lci0+cG9zaXRpb247CiAgICAgIGdf
c2Nhbm5lcl9nZXRfdG9rZW5faSAoc2Nhbm5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmc2Nhbm5lci0+bmV4dF90b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Nh
bm5lci0+bmV4dF92YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Nhbm5lci0+
bmV4dF9saW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzY2FubmVyLT5uZXh0X3Bv
c2l0aW9uKTsKICAgIH0KCiAgcmV0dXJuIHNjYW5uZXItPm5leHRfdG9rZW47Cn0KCkdUb2tlblR5
cGUKZ19zY2FubmVyX2dldF9uZXh0X3Rva2VuIChHU2Nhbm5lciAqc2Nhbm5lcikKewogICh2b2lk
KSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4dGVuc2lvbl9fICh7IGludCBfZ19ib29sZWFu
X3Zhcl87IGlmIChzY2FubmVyICE9ICgodm9pZCAqKTApKSBfZ19ib29sZWFuX3Zhcl8gPSAxOyBl
bHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5fdmFyXzsgfSksIDEpKSB7IH0gZWxz
ZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMLCAiZmlsZSAlczogbGluZSAl
ZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3NjYW5uZXIuYyIsIDU3NywgX19QUkVU
VFlfRlVOQ1RJT05fXywgInNjYW5uZXIgIT0gTlVMTCIpOyByZXR1cm4gKEdfVE9LRU5fRU9GKTsg
fTsgfSk7CgogIGlmIChzY2FubmVyLT5uZXh0X3Rva2VuICE9IEdfVE9LRU5fTk9ORSkKICAgIHsK
ICAgICAgZ19zY2FubmVyX2ZyZWVfdmFsdWUgKCZzY2FubmVyLT50b2tlbiwgJnNjYW5uZXItPnZh
bHVlKTsKCiAgICAgIHNjYW5uZXItPnRva2VuID0gc2Nhbm5lci0+bmV4dF90b2tlbjsKICAgICAg
c2Nhbm5lci0+dmFsdWUgPSBzY2FubmVyLT5uZXh0X3ZhbHVlOwogICAgICBzY2FubmVyLT5saW5l
ID0gc2Nhbm5lci0+bmV4dF9saW5lOwogICAgICBzY2FubmVyLT5wb3NpdGlvbiA9IHNjYW5uZXIt
Pm5leHRfcG9zaXRpb247CiAgICAgIHNjYW5uZXItPm5leHRfdG9rZW4gPSBHX1RPS0VOX05PTkU7
CiAgICB9CiAgZWxzZQogICAgZ19zY2FubmVyX2dldF90b2tlbl9pIChzY2FubmVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAmc2Nhbm5lci0+dG9rZW4sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZzY2FubmVyLT52YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNjYW5u
ZXItPmxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZzY2FubmVyLT5wb3NpdGlvbik7
CgogIHJldHVybiBzY2FubmVyLT50b2tlbjsKfQoKR1Rva2VuVHlwZQpnX3NjYW5uZXJfY3VyX3Rv
a2VuIChHU2Nhbm5lciAqc2Nhbm5lcikKewogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0
IChfX2V4dGVuc2lvbl9fICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9ICgo
dm9pZCAqKTApKSBfZ19ib29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7
IF9nX2Jvb2xlYW5fdmFyXzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9H
X0xFVkVMX0NSSVRJQ0FMLCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBm
YWlsZWQiLCAiZ3NjYW5uZXIuYyIsIDYwMiwgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5uZXIg
IT0gTlVMTCIpOyByZXR1cm4gKEdfVE9LRU5fRU9GKTsgfTsgfSk7CgogIHJldHVybiBzY2FubmVy
LT50b2tlbjsKfQoKR1Rva2VuVmFsdWUKZ19zY2FubmVyX2N1cl92YWx1ZSAoR1NjYW5uZXIgKnNj
YW5uZXIpCnsKICBHVG9rZW5WYWx1ZSB2OwoKICB2LnZfaW50NjQgPSAwOwoKICAodm9pZCkoeyBp
ZiAoX19idWlsdGluX2V4cGVjdCAoX19leHRlbnNpb25fXyAoeyBpbnQgX2dfYm9vbGVhbl92YXJf
OyBpZiAoc2Nhbm5lciAhPSAoKHZvaWQgKikwKSkgX2dfYm9vbGVhbl92YXJfID0gMTsgZWxzZSBf
Z19ib29sZWFuX3Zhcl8gPSAwOyBfZ19ib29sZWFuX3Zhcl87IH0pLCAxKSkgeyB9IGVsc2UgeyBn
X2xvZyAoIkdMaWIiLCBHX0xPR19MRVZFTF9DUklUSUNBTCwgImZpbGUgJXM6IGxpbmUgJWQgKCVz
KTogYXNzZXJ0aW9uIGAlcycgZmFpbGVkIiwgImdzY2FubmVyLmMiLCA2MTQsIF9fUFJFVFRZX0ZV
TkNUSU9OX18sICJzY2FubmVyICE9IE5VTEwiKTsgcmV0dXJuICh2KTsgfTsgfSk7CgoKCiAgdiA9
IHNjYW5uZXItPnZhbHVlOwoKICByZXR1cm4gdjsKfQoKZ3VpbnQKZ19zY2FubmVyX2N1cl9saW5l
IChHU2Nhbm5lciAqc2Nhbm5lcikKewogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChf
X2V4dGVuc2lvbl9fICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9ICgodm9p
ZCAqKTApKSBfZ19ib29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9n
X2Jvb2xlYW5fdmFyXzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xF
VkVMX0NSSVRJQ0FMLCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWls
ZWQiLCAiZ3NjYW5uZXIuYyIsIDYyNiwgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5uZXIgIT0g
TlVMTCIpOyByZXR1cm4gKDApOyB9OyB9KTsKCiAgcmV0dXJuIHNjYW5uZXItPmxpbmU7Cn0KCmd1
aW50Cmdfc2Nhbm5lcl9jdXJfcG9zaXRpb24gKEdTY2FubmVyICpzY2FubmVyKQp7CiAgKHZvaWQp
KHsgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9fZXh0ZW5zaW9uX18gKHsgaW50IF9nX2Jvb2xlYW5f
dmFyXzsgaWYgKHNjYW5uZXIgIT0gKCh2b2lkICopMCkpIF9nX2Jvb2xlYW5fdmFyXyA9IDE7IGVs
c2UgX2dfYm9vbGVhbl92YXJfID0gMDsgX2dfYm9vbGVhbl92YXJfOyB9KSwgMSkpIHsgfSBlbHNl
IHsgZ19sb2cgKCJHTGliIiwgR19MT0dfTEVWRUxfQ1JJVElDQUwsICJmaWxlICVzOiBsaW5lICVk
ICglcyk6IGFzc2VydGlvbiBgJXMnIGZhaWxlZCIsICJnc2Nhbm5lci5jIiwgNjM0LCBfX1BSRVRU
WV9GVU5DVElPTl9fLCAic2Nhbm5lciAhPSBOVUxMIik7IHJldHVybiAoMCk7IH07IH0pOwoKICBy
ZXR1cm4gc2Nhbm5lci0+cG9zaXRpb247Cn0KCmdib29sZWFuCmdfc2Nhbm5lcl9lb2YgKEdTY2Fu
bmVyICpzY2FubmVyKQp7CiAgKHZvaWQpKHsgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9fZXh0ZW5z
aW9uX18gKHsgaW50IF9nX2Jvb2xlYW5fdmFyXzsgaWYgKHNjYW5uZXIgIT0gKCh2b2lkICopMCkp
IF9nX2Jvb2xlYW5fdmFyXyA9IDE7IGVsc2UgX2dfYm9vbGVhbl92YXJfID0gMDsgX2dfYm9vbGVh
bl92YXJfOyB9KSwgMSkpIHsgfSBlbHNlIHsgZ19sb2cgKCJHTGliIiwgR19MT0dfTEVWRUxfQ1JJ
VElDQUwsICJmaWxlICVzOiBsaW5lICVkICglcyk6IGFzc2VydGlvbiBgJXMnIGZhaWxlZCIsICJn
c2Nhbm5lci5jIiwgNjQyLCBfX1BSRVRUWV9GVU5DVElPTl9fLCAic2Nhbm5lciAhPSBOVUxMIik7
IHJldHVybiAoKCEoMCkpKTsgfTsgfSk7CgogIHJldHVybiBzY2FubmVyLT50b2tlbiA9PSBHX1RP
S0VOX0VPRiB8fCBzY2FubmVyLT50b2tlbiA9PSBHX1RPS0VOX0VSUk9SOwp9Cgp2b2lkCmdfc2Nh
bm5lcl9pbnB1dF9maWxlIChHU2Nhbm5lciAqc2Nhbm5lciwKICAgICAgICAgICAgICAgICAgICAg
IGdpbnQgaW5wdXRfZmQpCnsKICAodm9pZCkoeyBpZiAoX19idWlsdGluX2V4cGVjdCAoX19leHRl
bnNpb25fXyAoeyBpbnQgX2dfYm9vbGVhbl92YXJfOyBpZiAoc2Nhbm5lciAhPSAoKHZvaWQgKikw
KSkgX2dfYm9vbGVhbl92YXJfID0gMTsgZWxzZSBfZ19ib29sZWFuX3Zhcl8gPSAwOyBfZ19ib29s
ZWFuX3Zhcl87IH0pLCAxKSkgeyB9IGVsc2UgeyBnX2xvZyAoIkdMaWIiLCBHX0xPR19MRVZFTF9D
UklUSUNBTCwgImZpbGUgJXM6IGxpbmUgJWQgKCVzKTogYXNzZXJ0aW9uIGAlcycgZmFpbGVkIiwg
ImdzY2FubmVyLmMiLCA2NTEsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJzY2FubmVyICE9IE5VTEwi
KTsgcmV0dXJuOyB9OyB9KTsKICAodm9pZCkoeyBpZiAoX19idWlsdGluX2V4cGVjdCAoX19leHRl
bnNpb25fXyAoeyBpbnQgX2dfYm9vbGVhbl92YXJfOyBpZiAoaW5wdXRfZmQgPj0gMCkgX2dfYm9v
bGVhbl92YXJfID0gMTsgZWxzZSBfZ19ib29sZWFuX3Zhcl8gPSAwOyBfZ19ib29sZWFuX3Zhcl87
IH0pLCAxKSkgeyB9IGVsc2UgeyBnX2xvZyAoIkdMaWIiLCBHX0xPR19MRVZFTF9DUklUSUNBTCwg
ImZpbGUgJXM6IGxpbmUgJWQgKCVzKTogYXNzZXJ0aW9uIGAlcycgZmFpbGVkIiwgImdzY2FubmVy
LmMiLCA2NTIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJpbnB1dF9mZCA+PSAwIik7IHJldHVybjsg
fTsgfSk7CgogIGlmIChzY2FubmVyLT5pbnB1dF9mZCA+PSAwKQogICAgZ19zY2FubmVyX3N5bmNf
ZmlsZV9vZmZzZXQgKHNjYW5uZXIpOwoKICBzY2FubmVyLT50b2tlbiA9IEdfVE9LRU5fTk9ORTsK
ICBzY2FubmVyLT52YWx1ZS52X2ludDY0ID0gMDsKICBzY2FubmVyLT5saW5lID0gMTsKICBzY2Fu
bmVyLT5wb3NpdGlvbiA9IDA7CiAgc2Nhbm5lci0+bmV4dF90b2tlbiA9IEdfVE9LRU5fTk9ORTsK
CiAgc2Nhbm5lci0+aW5wdXRfZmQgPSBpbnB1dF9mZDsKICBzY2FubmVyLT50ZXh0ID0gKCh2b2lk
ICopMCk7CiAgc2Nhbm5lci0+dGV4dF9lbmQgPSAoKHZvaWQgKikwKTsKCiAgaWYgKCFzY2FubmVy
LT5idWZmZXIpCiAgICBzY2FubmVyLT5idWZmZXIgPSAoKGdjaGFyICopIGdfbWFsbG9jICgoKGdz
aXplKSBzaXplb2YgKGdjaGFyKSkgKiAoKGdzaXplKSAoKDQwMDApICsgMSkpKSk7Cn0KCnZvaWQK
Z19zY2FubmVyX2lucHV0X3RleHQgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2NoYXIgKnRleHQsCiAgICAgICAgICAgICAgICAgICAgICBndWludCB0ZXh0
X2xlbikKewogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4dGVuc2lvbl9fICh7
IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9ICgodm9pZCAqKTApKSBfZ19ib29s
ZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5fdmFyXzsg
fSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMLCAi
ZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3NjYW5uZXIu
YyIsIDY3NiwgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5uZXIgIT0gTlVMTCIpOyByZXR1cm47
IH07IH0pOwogIGlmICh0ZXh0X2xlbikKICAgICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0
IChfX2V4dGVuc2lvbl9fICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmICh0ZXh0ICE9ICgodm9p
ZCAqKTApKSBfZ19ib29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9n
X2Jvb2xlYW5fdmFyXzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xF
VkVMX0NSSVRJQ0FMLCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWls
ZWQiLCAiZ3NjYW5uZXIuYyIsIDY3OCwgX19QUkVUVFlfRlVOQ1RJT05fXywgInRleHQgIT0gTlVM
TCIpOyByZXR1cm47IH07IH0pOwogIGVsc2UKICAgIHRleHQgPSAoKHZvaWQgKikwKTsKCiAgaWYg
KHNjYW5uZXItPmlucHV0X2ZkID49IDApCiAgICBnX3NjYW5uZXJfc3luY19maWxlX29mZnNldCAo
c2Nhbm5lcik7CgogIHNjYW5uZXItPnRva2VuID0gR19UT0tFTl9OT05FOwogIHNjYW5uZXItPnZh
bHVlLnZfaW50NjQgPSAwOwogIHNjYW5uZXItPmxpbmUgPSAxOwogIHNjYW5uZXItPnBvc2l0aW9u
ID0gMDsKICBzY2FubmVyLT5uZXh0X3Rva2VuID0gR19UT0tFTl9OT05FOwoKICBzY2FubmVyLT5p
bnB1dF9mZCA9IC0xOwogIHNjYW5uZXItPnRleHQgPSB0ZXh0OwogIHNjYW5uZXItPnRleHRfZW5k
ID0gdGV4dCArIHRleHRfbGVuOwoKICBpZiAoc2Nhbm5lci0+YnVmZmVyKQogICAgewogICAgICBn
X2ZyZWUgKHNjYW5uZXItPmJ1ZmZlcik7CiAgICAgIHNjYW5uZXItPmJ1ZmZlciA9ICgodm9pZCAq
KTApOwogICAgfQp9CgpzdGF0aWMgZ3VjaGFyCmdfc2Nhbm5lcl9wZWVrX25leHRfY2hhciAoR1Nj
YW5uZXIgKnNjYW5uZXIpCnsKICBpZiAoc2Nhbm5lci0+dGV4dCA8IHNjYW5uZXItPnRleHRfZW5k
KQogICAgewogICAgICByZXR1cm4gKnNjYW5uZXItPnRleHQ7CiAgICB9CiAgZWxzZSBpZiAoc2Nh
bm5lci0+aW5wdXRfZmQgPj0gMCkKICAgIHsKICAgICAgZ2ludCBjb3VudDsKICAgICAgZ2NoYXIg
KmJ1ZmZlcjsKCiAgICAgIGJ1ZmZlciA9IHNjYW5uZXItPmJ1ZmZlcjsKICAgICAgZG8KICAgICAg
ICB7CiAgICAgICAgICBjb3VudCA9IHJlYWQgKHNjYW5uZXItPmlucHV0X2ZkLCBidWZmZXIsICg0
MDAwKSk7CiAgICAgICAgfQogICAgICB3aGlsZSAoY291bnQgPT0gLTEgJiYgKCgqX19lcnJub19s
b2NhdGlvbiAoKSkgPT0gNCB8fCAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDExKSk7CgogICAg
ICBpZiAoY291bnQgPCAxKQogICAgICAgIHsKICAgICAgICAgIHNjYW5uZXItPmlucHV0X2ZkID0g
LTE7CgogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewog
ICAgICAgICAgc2Nhbm5lci0+dGV4dCA9IGJ1ZmZlcjsKICAgICAgICAgIHNjYW5uZXItPnRleHRf
ZW5kID0gYnVmZmVyICsgY291bnQ7CgogICAgICAgICAgcmV0dXJuICpidWZmZXI7CiAgICAgICAg
fQogICAgfQogIGVsc2UKICAgIHJldHVybiAwOwp9Cgp2b2lkCmdfc2Nhbm5lcl9zeW5jX2ZpbGVf
b2Zmc2V0IChHU2Nhbm5lciAqc2Nhbm5lcikKewogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhw
ZWN0IChfX2V4dGVuc2lvbl9fICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9
ICgodm9pZCAqKTApKSBfZ19ib29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9
IDA7IF9nX2Jvb2xlYW5fdmFyXzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdf
TE9HX0xFVkVMX0NSSVRJQ0FMLCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVz
JyBmYWlsZWQiLCAiZ3NjYW5uZXIuYyIsIDc0MiwgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5u
ZXIgIT0gTlVMTCIpOyByZXR1cm47IH07IH0pOwoKCgoKCgoKICBpZiAoc2Nhbm5lci0+aW5wdXRf
ZmQgPj0gMCAmJiBzY2FubmVyLT50ZXh0X2VuZCA+IHNjYW5uZXItPnRleHQpCiAgICB7CiAgICAg
IGdpbnQgYnVmZmVyZWQ7CgogICAgICBidWZmZXJlZCA9IHNjYW5uZXItPnRleHRfZW5kIC0gc2Nh
bm5lci0+dGV4dDsKICAgICAgaWYgKGxzZWVrIChzY2FubmVyLT5pbnB1dF9mZCwgLSBidWZmZXJl
ZCwgMSkgPj0gMCkKICAgICAgICB7CgogICAgICAgICAgc2Nhbm5lci0+dGV4dCA9ICgodm9pZCAq
KTApOwogICAgICAgICAgc2Nhbm5lci0+dGV4dF9lbmQgPSAoKHZvaWQgKikwKTsKICAgICAgICB9
CiAgICAgIGVsc2UKICAgICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgIH0KfQoK
c3RhdGljIGd1Y2hhcgpnX3NjYW5uZXJfZ2V0X2NoYXIgKEdTY2FubmVyICpzY2FubmVyLAogICAg
ICAgICAgICAgICAgICAgIGd1aW50ICpsaW5lX3AsCiAgICAgICAgICAgICAgICAgICAgZ3VpbnQg
KnBvc2l0aW9uX3ApCnsKICBndWNoYXIgZmNoYXI7CgogIGlmIChzY2FubmVyLT50ZXh0IDwgc2Nh
bm5lci0+dGV4dF9lbmQpCiAgICBmY2hhciA9ICooc2Nhbm5lci0+dGV4dCsrKTsKICBlbHNlIGlm
IChzY2FubmVyLT5pbnB1dF9mZCA+PSAwKQogICAgewogICAgICBnaW50IGNvdW50OwogICAgICBn
Y2hhciAqYnVmZmVyOwoKICAgICAgYnVmZmVyID0gc2Nhbm5lci0+YnVmZmVyOwogICAgICBkbwog
ICAgICAgIHsKICAgICAgICAgIGNvdW50ID0gcmVhZCAoc2Nhbm5lci0+aW5wdXRfZmQsIGJ1ZmZl
ciwgKDQwMDApKTsKICAgICAgICB9CiAgICAgIHdoaWxlIChjb3VudCA9PSAtMSAmJiAoKCpfX2Vy
cm5vX2xvY2F0aW9uICgpKSA9PSA0IHx8ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMTEpKTsK
CiAgICAgIGlmIChjb3VudCA8IDEpCiAgICAgICAgewogICAgICAgICAgc2Nhbm5lci0+aW5wdXRf
ZmQgPSAtMTsKICAgICAgICAgIGZjaGFyID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg
ICB7CiAgICAgICAgICBzY2FubmVyLT50ZXh0ID0gYnVmZmVyICsgMTsKICAgICAgICAgIHNjYW5u
ZXItPnRleHRfZW5kID0gYnVmZmVyICsgY291bnQ7CiAgICAgICAgICBmY2hhciA9ICpidWZmZXI7
CiAgICAgICAgICBpZiAoIWZjaGFyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZ19zY2Fu
bmVyX3N5bmNfZmlsZV9vZmZzZXQgKHNjYW5uZXIpOwogICAgICAgICAgICAgIHNjYW5uZXItPnRl
eHRfZW5kID0gc2Nhbm5lci0+dGV4dDsKICAgICAgICAgICAgICBzY2FubmVyLT5pbnB1dF9mZCA9
IC0xOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogIGVsc2UKICAgIGZjaGFyID0gMDsK
CiAgaWYgKGZjaGFyID09ICdcbicpCiAgICB7CiAgICAgICgqcG9zaXRpb25fcCkgPSAwOwogICAg
ICAoKmxpbmVfcCkrKzsKICAgIH0KICBlbHNlIGlmIChmY2hhcikKICAgIHsKICAgICAgKCpwb3Np
dGlvbl9wKSsrOwogICAgfQoKICByZXR1cm4gZmNoYXI7Cn0KCnZvaWQKZ19zY2FubmVyX3VuZXhw
X3Rva2VuIChHU2Nhbm5lciAqc2Nhbm5lciwKICAgICAgICAgICAgICAgICAgICAgICBHVG9rZW5U
eXBlIGV4cGVjdGVkX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpp
ZGVudGlmaWVyX3NwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN5bWJv
bF9zcGVjLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpzeW1ib2xfbmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqbWVzc2FnZSwKICAgICAgICAgICAg
ICAgICAgICAgICBnaW50IGlzX2Vycm9yKQp7CiAgZ2NoYXIgKnRva2VuX3N0cmluZzsKICBndWlu
dCB0b2tlbl9zdHJpbmdfbGVuOwogIGdjaGFyICpleHBlY3RlZF9zdHJpbmc7CiAgZ3VpbnQgZXhw
ZWN0ZWRfc3RyaW5nX2xlbjsKICBnY2hhciAqbWVzc2FnZV9wcmVmaXg7CiAgZ2Jvb2xlYW4gcHJp
bnRfdW5leHA7CiAgdm9pZCAoKm1zZ19oYW5kbGVyKSAoR1NjYW5uZXIqLCBjb25zdCBnY2hhcios
IC4uLik7CgogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4dGVuc2lvbl9fICh7
IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9ICgodm9pZCAqKTApKSBfZ19ib29s
ZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5fdmFyXzsg
fSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMLCAi
ZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3NjYW5uZXIu
YyIsIDgzOCwgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5uZXIgIT0gTlVMTCIpOyByZXR1cm47
IH07IH0pOwoKICBpZiAoaXNfZXJyb3IpCiAgICBtc2dfaGFuZGxlciA9IGdfc2Nhbm5lcl9lcnJv
cjsKICBlbHNlCiAgICBtc2dfaGFuZGxlciA9IGdfc2Nhbm5lcl93YXJuOwoKICBpZiAoIWlkZW50
aWZpZXJfc3BlYykKICAgIGlkZW50aWZpZXJfc3BlYyA9ICJpZGVudGlmaWVyIjsKICBpZiAoIXN5
bWJvbF9zcGVjKQogICAgc3ltYm9sX3NwZWMgPSAic3ltYm9sIjsKCiAgdG9rZW5fc3RyaW5nX2xl
biA9IDU2OwogIHRva2VuX3N0cmluZyA9ICgoZ2NoYXIgKikgZ19tYWxsb2MgKCgoZ3NpemUpIHNp
emVvZiAoZ2NoYXIpKSAqICgoZ3NpemUpICh0b2tlbl9zdHJpbmdfbGVuICsgMSkpKSk7CiAgZXhw
ZWN0ZWRfc3RyaW5nX2xlbiA9IDY0OwogIGV4cGVjdGVkX3N0cmluZyA9ICgoZ2NoYXIgKikgZ19t
YWxsb2MgKCgoZ3NpemUpIHNpemVvZiAoZ2NoYXIpKSAqICgoZ3NpemUpIChleHBlY3RlZF9zdHJp
bmdfbGVuICsgMSkpKSk7CiAgcHJpbnRfdW5leHAgPSAoISgwKSk7CgogIHN3aXRjaCAoc2Nhbm5l
ci0+dG9rZW4pCiAgICB7CiAgICBjYXNlIEdfVE9LRU5fRU9GOgogICAgICBzbnByaW50ZiAodG9r
ZW5fc3RyaW5nLCB0b2tlbl9zdHJpbmdfbGVuLCAiZW5kIG9mIGZpbGUiKTsKICAgICAgYnJlYWs7
CgogICAgZGVmYXVsdDoKICAgICAgaWYgKHNjYW5uZXItPnRva2VuID49IDEgJiYgc2Nhbm5lci0+
dG9rZW4gPD0gMjU1KQogICAgICAgIHsKICAgICAgICAgIGlmICgoc2Nhbm5lci0+dG9rZW4gPj0g
JyAnICYmIHNjYW5uZXItPnRva2VuIDw9ICd+JykgfHwKICAgICAgICAgICAgICAoX19leHRlbnNp
b25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKHNjYW5uZXItPnRva2VuKSAmJiAoc2Nhbm5lci0+
dG9rZW4pID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAoc2Nhbm5lci0+Y29uZmlnLT5j
c2V0X2lkZW50aWZpZXJfZmlyc3QsIHNjYW5uZXItPnRva2VuKSA6IHN0cmNociAoc2Nhbm5lci0+
Y29uZmlnLT5jc2V0X2lkZW50aWZpZXJfZmlyc3QsIHNjYW5uZXItPnRva2VuKSkpIHx8CiAgICAg
ICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzY2FubmVyLT50
b2tlbikgJiYgKHNjYW5uZXItPnRva2VuKSA9PSAnXDAnID8gKGNoYXIgKikgX19yYXdtZW1jaHIg
KHNjYW5uZXItPmNvbmZpZy0+Y3NldF9pZGVudGlmaWVyX250aCwgc2Nhbm5lci0+dG9rZW4pIDog
c3RyY2hyIChzY2FubmVyLT5jb25maWctPmNzZXRfaWRlbnRpZmllcl9udGgsIHNjYW5uZXItPnRv
a2VuKSkpKQogICAgICAgICAgICBzbnByaW50ZiAodG9rZW5fc3RyaW5nLCB0b2tlbl9zdHJpbmdf
bGVuLCAiY2hhcmFjdGVyIGAlYyciLCBzY2FubmVyLT50b2tlbik7CiAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgIHNucHJpbnRmICh0b2tlbl9zdHJpbmcsIHRva2VuX3N0cmluZ19sZW4sICJjaGFy
YWN0ZXIgYFxcJW8nIiwgc2Nhbm5lci0+dG9rZW4pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAg
fQogICAgICBlbHNlIGlmICghc2Nhbm5lci0+Y29uZmlnLT5zeW1ib2xfMl90b2tlbikKICAgICAg
ICB7CiAgICAgICAgICBzbnByaW50ZiAodG9rZW5fc3RyaW5nLCB0b2tlbl9zdHJpbmdfbGVuLCAi
KHVua25vd24pIHRva2VuIDwlZD4iLCBzY2FubmVyLT50b2tlbik7CiAgICAgICAgICBicmVhazsK
ICAgICAgICB9CgogICAgY2FzZSBHX1RPS0VOX1NZTUJPTDoKICAgICAgaWYgKGV4cGVjdGVkX3Rv
a2VuID09IEdfVE9LRU5fU1lNQk9MIHx8CiAgICAgICAgICAoc2Nhbm5lci0+Y29uZmlnLT5zeW1i
b2xfMl90b2tlbiAmJgogICAgICAgICAgIGV4cGVjdGVkX3Rva2VuID4gR19UT0tFTl9MQVNUKSkK
ICAgICAgICBwcmludF91bmV4cCA9ICgwKTsKICAgICAgaWYgKHN5bWJvbF9uYW1lKQogICAgICAg
IHNucHJpbnRmICh0b2tlbl9zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgIHRva2VuX3N0cmlu
Z19sZW4sCiAgICAgICAgICAgICAgICAgICAgICIlcyVzIGAlcyciLAogICAgICAgICAgICAgICAg
ICAgICBwcmludF91bmV4cCA/ICIiIDogImludmFsaWQgIiwKICAgICAgICAgICAgICAgICAgICAg
c3ltYm9sX3NwZWMsCiAgICAgICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lKTsKICAgICAgZWxz
ZQogICAgICAgIHNucHJpbnRmICh0b2tlbl9zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgIHRv
a2VuX3N0cmluZ19sZW4sCiAgICAgICAgICAgICAgICAgICAgICIlcyVzIiwKICAgICAgICAgICAg
ICAgICAgICAgcHJpbnRfdW5leHAgPyAiIiA6ICJpbnZhbGlkICIsCiAgICAgICAgICAgICAgICAg
ICAgIHN5bWJvbF9zcGVjKTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBHX1RPS0VOX0VSUk9SOgog
ICAgICBwcmludF91bmV4cCA9ICgwKTsKICAgICAgZXhwZWN0ZWRfdG9rZW4gPSBHX1RPS0VOX05P
TkU7CiAgICAgIHN3aXRjaCAoc2Nhbm5lci0+dmFsdWUudl9lcnJvcikKICAgICAgICB7CiAgICAg
ICAgY2FzZSBHX0VSUl9VTkVYUF9FT0Y6CiAgICAgICAgICBzbnByaW50ZiAodG9rZW5fc3RyaW5n
LCB0b2tlbl9zdHJpbmdfbGVuLCAic2Nhbm5lcjogdW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwog
ICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgR19FUlJfVU5FWFBfRU9GX0lOX1NUUklORzoK
ICAgICAgICAgIHNucHJpbnRmICh0b2tlbl9zdHJpbmcsIHRva2VuX3N0cmluZ19sZW4sICJzY2Fu
bmVyOiB1bnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50Iik7CiAgICAgICAgICBicmVhazsKCiAg
ICAgICAgY2FzZSBHX0VSUl9VTkVYUF9FT0ZfSU5fQ09NTUVOVDoKICAgICAgICAgIHNucHJpbnRm
ICh0b2tlbl9zdHJpbmcsIHRva2VuX3N0cmluZ19sZW4sICJzY2FubmVyOiB1bnRlcm1pbmF0ZWQg
Y29tbWVudCIpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgR19FUlJfTk9OX0RJR0lU
X0lOX0NPTlNUOgogICAgICAgICAgc25wcmludGYgKHRva2VuX3N0cmluZywgdG9rZW5fc3RyaW5n
X2xlbiwgInNjYW5uZXI6IG5vbiBkaWdpdCBpbiBjb25zdGFudCIpOwogICAgICAgICAgYnJlYWs7
CgogICAgICAgIGNhc2UgR19FUlJfRkxPQVRfUkFESVg6CiAgICAgICAgICBzbnByaW50ZiAodG9r
ZW5fc3RyaW5nLCB0b2tlbl9zdHJpbmdfbGVuLCAic2Nhbm5lcjogaW52YWxpZCByYWRpeCBmb3Ig
ZmxvYXRpbmcgY29uc3RhbnQiKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIEdfRVJS
X0ZMT0FUX01BTEZPUk1FRDoKICAgICAgICAgIHNucHJpbnRmICh0b2tlbl9zdHJpbmcsIHRva2Vu
X3N0cmluZ19sZW4sICJzY2FubmVyOiBtYWxmb3JtZWQgZmxvYXRpbmcgY29uc3RhbnQiKTsKICAg
ICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIEdfRVJSX0RJR0lUX1JBRElYOgogICAgICAgICAg
c25wcmludGYgKHRva2VuX3N0cmluZywgdG9rZW5fc3RyaW5nX2xlbiwgInNjYW5uZXI6IGRpZ2l0
IGlzIGJleW9uZCByYWRpeCIpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgR19FUlJf
VU5LTk9XTjoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgc25wcmludGYgKHRva2VuX3N0cmlu
ZywgdG9rZW5fc3RyaW5nX2xlbiwgInNjYW5uZXI6IHVua25vd24gZXJyb3IiKTsKICAgICAgICAg
IGJyZWFrOwogICAgICAgIH0KICAgICAgYnJlYWs7CgogICAgY2FzZSBHX1RPS0VOX0NIQVI6CiAg
ICAgIHNucHJpbnRmICh0b2tlbl9zdHJpbmcsIHRva2VuX3N0cmluZ19sZW4sICJjaGFyYWN0ZXIg
YCVjJyIsIHNjYW5uZXItPnZhbHVlLnZfY2hhcik7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgR19U
T0tFTl9JREVOVElGSUVSOgogICAgY2FzZSBHX1RPS0VOX0lERU5USUZJRVJfTlVMTDoKICAgICAg
aWYgKGV4cGVjdGVkX3Rva2VuID09IEdfVE9LRU5fSURFTlRJRklFUiB8fAogICAgICAgICAgZXhw
ZWN0ZWRfdG9rZW4gPT0gR19UT0tFTl9JREVOVElGSUVSX05VTEwpCiAgICAgICAgcHJpbnRfdW5l
eHAgPSAoMCk7CiAgICAgIHNucHJpbnRmICh0b2tlbl9zdHJpbmcsCiAgICAgICAgICAgICAgICAg
IHRva2VuX3N0cmluZ19sZW4sCiAgICAgICAgICAgICAgICAgICIlcyVzIGAlcyciLAogICAgICAg
ICAgICAgICAgICBwcmludF91bmV4cCA/ICIiIDogImludmFsaWQgIiwKICAgICAgICAgICAgICAg
ICAgaWRlbnRpZmllcl9zcGVjLAogICAgICAgICAgICAgICAgICBzY2FubmVyLT50b2tlbiA9PSBH
X1RPS0VOX0lERU5USUZJRVIgPyBzY2FubmVyLT52YWx1ZS52X3N0cmluZyA6ICJudWxsIik7CiAg
ICAgIGJyZWFrOwoKICAgIGNhc2UgR19UT0tFTl9CSU5BUlk6CiAgICBjYXNlIEdfVE9LRU5fT0NU
QUw6CiAgICBjYXNlIEdfVE9LRU5fSU5UOgogICAgY2FzZSBHX1RPS0VOX0hFWDoKICAgICAgaWYg
KHNjYW5uZXItPmNvbmZpZy0+c3RvcmVfaW50NjQpCiAgICAgICAgc25wcmludGYgKHRva2VuX3N0
cmluZywgdG9rZW5fc3RyaW5nX2xlbiwgIm51bWJlciBgJSIgImxsdSIgIiciLCBzY2FubmVyLT52
YWx1ZS52X2ludDY0KTsKICAgICAgZWxzZQogICAgICAgIHNucHJpbnRmICh0b2tlbl9zdHJpbmcs
IHRva2VuX3N0cmluZ19sZW4sICJudW1iZXIgYCVsdSciLCBzY2FubmVyLT52YWx1ZS52X2ludCk7
CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgR19UT0tFTl9GTE9BVDoKICAgICAgc25wcmludGYgKHRv
a2VuX3N0cmluZywgdG9rZW5fc3RyaW5nX2xlbiwgIm51bWJlciBgJS4zZiciLCBzY2FubmVyLT52
YWx1ZS52X2Zsb2F0KTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBHX1RPS0VOX1NUUklORzoKICAg
ICAgaWYgKGV4cGVjdGVkX3Rva2VuID09IEdfVE9LRU5fU1RSSU5HKQogICAgICAgIHByaW50X3Vu
ZXhwID0gKDApOwogICAgICBzbnByaW50ZiAodG9rZW5fc3RyaW5nLAogICAgICAgICAgICAgICAg
ICAgdG9rZW5fc3RyaW5nX2xlbiwKICAgICAgICAgICAgICAgICAgICIlcyVzc3RyaW5nIGNvbnN0
YW50IFwiJXNcIiIsCiAgICAgICAgICAgICAgICAgICBwcmludF91bmV4cCA/ICIiIDogImludmFs
aWQgIiwKICAgICAgICAgICAgICAgICAgIHNjYW5uZXItPnZhbHVlLnZfc3RyaW5nWzBdID09IDAg
PyAiZW1wdHkgIiA6ICIiLAogICAgICAgICAgICAgICAgICAgc2Nhbm5lci0+dmFsdWUudl9zdHJp
bmcpOwogICAgICB0b2tlbl9zdHJpbmdbdG9rZW5fc3RyaW5nX2xlbiAtIDJdID0gJyInOwogICAg
ICB0b2tlbl9zdHJpbmdbdG9rZW5fc3RyaW5nX2xlbiAtIDFdID0gMDsKICAgICAgYnJlYWs7Cgog
ICAgY2FzZSBHX1RPS0VOX0NPTU1FTlRfU0lOR0xFOgogICAgY2FzZSBHX1RPS0VOX0NPTU1FTlRf
TVVMVEk6CiAgICAgIHNucHJpbnRmICh0b2tlbl9zdHJpbmcsIHRva2VuX3N0cmluZ19sZW4sICJj
b21tZW50Iik7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgR19UT0tFTl9OT05FOgoKCgoKCgogICAg
ICAodm9pZCkoeyBnX2xvZyAoIkdMaWIiLCBHX0xPR19MRVZFTF9FUlJPUiwgImZpbGUgJXM6IGxp
bmUgJWQgKCVzKTogc2hvdWxkIG5vdCBiZSByZWFjaGVkIiwgImdzY2FubmVyLmMiLCA5OTUsIF9f
UFJFVFRZX0ZVTkNUSU9OX18pOyB9KTsKICAgICAgYnJlYWs7CiAgICB9CgoKICBzd2l0Y2ggKGV4
cGVjdGVkX3Rva2VuKQogICAgewogICAgICBnYm9vbGVhbiBuZWVkX3ZhbGlkOwogICAgICBnY2hh
ciAqdHN0cmluZzsKICAgIGNhc2UgR19UT0tFTl9FT0Y6CiAgICAgIHNucHJpbnRmIChleHBlY3Rl
ZF9zdHJpbmcsIGV4cGVjdGVkX3N0cmluZ19sZW4sICJlbmQgb2YgZmlsZSIpOwogICAgICBicmVh
azsKICAgIGRlZmF1bHQ6CiAgICAgIGlmIChleHBlY3RlZF90b2tlbiA+PSAxICYmIGV4cGVjdGVk
X3Rva2VuIDw9IDI1NSkKICAgICAgICB7CiAgICAgICAgICBpZiAoKGV4cGVjdGVkX3Rva2VuID49
ICcgJyAmJiBleHBlY3RlZF90b2tlbiA8PSAnficpIHx8CiAgICAgICAgICAgICAgKF9fZXh0ZW5z
aW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChleHBlY3RlZF90b2tlbikgJiYgKGV4cGVjdGVk
X3Rva2VuKSA9PSAnXDAnID8gKGNoYXIgKikgX19yYXdtZW1jaHIgKHNjYW5uZXItPmNvbmZpZy0+
Y3NldF9pZGVudGlmaWVyX2ZpcnN0LCBleHBlY3RlZF90b2tlbikgOiBzdHJjaHIgKHNjYW5uZXIt
PmNvbmZpZy0+Y3NldF9pZGVudGlmaWVyX2ZpcnN0LCBleHBlY3RlZF90b2tlbikpKSB8fAogICAg
ICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoZXhwZWN0ZWRf
dG9rZW4pICYmIChleHBlY3RlZF90b2tlbikgPT0gJ1wwJyA/IChjaGFyICopIF9fcmF3bWVtY2hy
IChzY2FubmVyLT5jb25maWctPmNzZXRfaWRlbnRpZmllcl9udGgsIGV4cGVjdGVkX3Rva2VuKSA6
IHN0cmNociAoc2Nhbm5lci0+Y29uZmlnLT5jc2V0X2lkZW50aWZpZXJfbnRoLCBleHBlY3RlZF90
b2tlbikpKSkKICAgICAgICAgICAgc25wcmludGYgKGV4cGVjdGVkX3N0cmluZywgZXhwZWN0ZWRf
c3RyaW5nX2xlbiwgImNoYXJhY3RlciBgJWMnIiwgZXhwZWN0ZWRfdG9rZW4pOwogICAgICAgICAg
ZWxzZQogICAgICAgICAgICBzbnByaW50ZiAoZXhwZWN0ZWRfc3RyaW5nLCBleHBlY3RlZF9zdHJp
bmdfbGVuLCAiY2hhcmFjdGVyIGBcXCVvJyIsIGV4cGVjdGVkX3Rva2VuKTsKICAgICAgICAgIGJy
ZWFrOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIXNjYW5uZXItPmNvbmZpZy0+c3ltYm9sXzJf
dG9rZW4pCiAgICAgICAgewogICAgICAgICAgc25wcmludGYgKGV4cGVjdGVkX3N0cmluZywgZXhw
ZWN0ZWRfc3RyaW5nX2xlbiwgIih1bmtub3duKSB0b2tlbiA8JWQ+IiwgZXhwZWN0ZWRfdG9rZW4p
OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgIGNhc2UgR19UT0tFTl9TWU1CT0w6CiAg
ICAgIG5lZWRfdmFsaWQgPSAoc2Nhbm5lci0+dG9rZW4gPT0gR19UT0tFTl9TWU1CT0wgfHwKICAg
ICAgICAgICAgICAgICAgICAoc2Nhbm5lci0+Y29uZmlnLT5zeW1ib2xfMl90b2tlbiAmJgogICAg
ICAgICAgICAgICAgICAgICBzY2FubmVyLT50b2tlbiA+IEdfVE9LRU5fTEFTVCkpOwogICAgICBz
bnByaW50ZiAoZXhwZWN0ZWRfc3RyaW5nLAogICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3Ry
aW5nX2xlbiwKICAgICAgICAgICAgICAgICAgICIlcyVzIiwKICAgICAgICAgICAgICAgICAgIG5l
ZWRfdmFsaWQgPyAidmFsaWQgIiA6ICIiLAogICAgICAgICAgICAgICAgICAgc3ltYm9sX3NwZWMp
OwoKICAgICAgYnJlYWs7CiAgICBjYXNlIEdfVE9LRU5fQ0hBUjoKICAgICAgc25wcmludGYgKGV4
cGVjdGVkX3N0cmluZywgZXhwZWN0ZWRfc3RyaW5nX2xlbiwgIiVzY2hhcmFjdGVyIiwKICAgICAg
ICAgICAgICAgICAgIHNjYW5uZXItPnRva2VuID09IEdfVE9LRU5fQ0hBUiA/ICJ2YWxpZCAiIDog
IiIpOwogICAgICBicmVhazsKICAgIGNhc2UgR19UT0tFTl9CSU5BUlk6CiAgICAgIHRzdHJpbmcg
PSAiYmluYXJ5IjsKICAgICAgc25wcmludGYgKGV4cGVjdGVkX3N0cmluZywgZXhwZWN0ZWRfc3Ry
aW5nX2xlbiwgIiVzbnVtYmVyICglcykiLAogICAgICAgICAgICAgICAgICAgc2Nhbm5lci0+dG9r
ZW4gPT0gZXhwZWN0ZWRfdG9rZW4gPyAidmFsaWQgIiA6ICIiLCB0c3RyaW5nKTsKICAgICAgYnJl
YWs7CiAgICBjYXNlIEdfVE9LRU5fT0NUQUw6CiAgICAgIHRzdHJpbmcgPSAib2N0YWwiOwogICAg
ICBzbnByaW50ZiAoZXhwZWN0ZWRfc3RyaW5nLCBleHBlY3RlZF9zdHJpbmdfbGVuLCAiJXNudW1i
ZXIgKCVzKSIsCiAgICAgICAgICAgICAgICAgICBzY2FubmVyLT50b2tlbiA9PSBleHBlY3RlZF90
b2tlbiA/ICJ2YWxpZCAiIDogIiIsIHRzdHJpbmcpOwogICAgICBicmVhazsKICAgIGNhc2UgR19U
T0tFTl9JTlQ6CiAgICAgIHRzdHJpbmcgPSAiaW50ZWdlciI7CiAgICAgIHNucHJpbnRmIChleHBl
Y3RlZF9zdHJpbmcsIGV4cGVjdGVkX3N0cmluZ19sZW4sICIlc251bWJlciAoJXMpIiwKICAgICAg
ICAgICAgICAgICAgIHNjYW5uZXItPnRva2VuID09IGV4cGVjdGVkX3Rva2VuID8gInZhbGlkICIg
OiAiIiwgdHN0cmluZyk7CiAgICAgIGJyZWFrOwogICAgY2FzZSBHX1RPS0VOX0hFWDoKICAgICAg
dHN0cmluZyA9ICJoZXhhZGVjaW1hbCI7CiAgICAgIHNucHJpbnRmIChleHBlY3RlZF9zdHJpbmcs
IGV4cGVjdGVkX3N0cmluZ19sZW4sICIlc251bWJlciAoJXMpIiwKICAgICAgICAgICAgICAgICAg
IHNjYW5uZXItPnRva2VuID09IGV4cGVjdGVkX3Rva2VuID8gInZhbGlkICIgOiAiIiwgdHN0cmlu
Zyk7CiAgICAgIGJyZWFrOwogICAgY2FzZSBHX1RPS0VOX0ZMT0FUOgogICAgICB0c3RyaW5nID0g
ImZsb2F0IjsKICAgICAgc25wcmludGYgKGV4cGVjdGVkX3N0cmluZywgZXhwZWN0ZWRfc3RyaW5n
X2xlbiwgIiVzbnVtYmVyICglcykiLAogICAgICAgICAgICAgICAgICAgc2Nhbm5lci0+dG9rZW4g
PT0gZXhwZWN0ZWRfdG9rZW4gPyAidmFsaWQgIiA6ICIiLCB0c3RyaW5nKTsKICAgICAgYnJlYWs7
CiAgICBjYXNlIEdfVE9LRU5fU1RSSU5HOgogICAgICBzbnByaW50ZiAoZXhwZWN0ZWRfc3RyaW5n
LAogICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3RyaW5nX2xlbiwKICAgICAgICAgICAgICAg
ICAgICIlc3N0cmluZyBjb25zdGFudCIsCiAgICAgICAgICAgICAgICAgICBzY2FubmVyLT50b2tl
biA9PSBHX1RPS0VOX1NUUklORyA/ICJ2YWxpZCAiIDogIiIpOwogICAgICBicmVhazsKICAgIGNh
c2UgR19UT0tFTl9JREVOVElGSUVSOgogICAgY2FzZSBHX1RPS0VOX0lERU5USUZJRVJfTlVMTDoK
ICAgICAgbmVlZF92YWxpZCA9IChzY2FubmVyLT50b2tlbiA9PSBHX1RPS0VOX0lERU5USUZJRVJf
TlVMTCB8fAogICAgICAgICAgICAgICAgICAgIHNjYW5uZXItPnRva2VuID09IEdfVE9LRU5fSURF
TlRJRklFUik7CiAgICAgIHNucHJpbnRmIChleHBlY3RlZF9zdHJpbmcsCiAgICAgICAgICAgICAg
ICAgICBleHBlY3RlZF9zdHJpbmdfbGVuLAogICAgICAgICAgICAgICAgICAgIiVzJXMiLAogICAg
ICAgICAgICAgICAgICAgbmVlZF92YWxpZCA/ICJ2YWxpZCAiIDogIiIsCiAgICAgICAgICAgICAg
ICAgICBpZGVudGlmaWVyX3NwZWMpOwogICAgICBicmVhazsKICAgIGNhc2UgR19UT0tFTl9DT01N
RU5UX1NJTkdMRToKICAgICAgdHN0cmluZyA9ICJzaW5nbGUtbGluZSI7CiAgICAgIHNucHJpbnRm
IChleHBlY3RlZF9zdHJpbmcsIGV4cGVjdGVkX3N0cmluZ19sZW4sICIlc2NvbW1lbnQgKCVzKSIs
CiAgICAgICAgICAgICAgICAgICBzY2FubmVyLT50b2tlbiA9PSBleHBlY3RlZF90b2tlbiA/ICJ2
YWxpZCAiIDogIiIsIHRzdHJpbmcpOwogICAgICBicmVhazsKICAgIGNhc2UgR19UT0tFTl9DT01N
RU5UX01VTFRJOgogICAgICB0c3RyaW5nID0gIm11bHRpLWxpbmUiOwogICAgICBzbnByaW50ZiAo
ZXhwZWN0ZWRfc3RyaW5nLCBleHBlY3RlZF9zdHJpbmdfbGVuLCAiJXNjb21tZW50ICglcykiLAog
ICAgICAgICAgICAgICAgICAgc2Nhbm5lci0+dG9rZW4gPT0gZXhwZWN0ZWRfdG9rZW4gPyAidmFs
aWQgIiA6ICIiLCB0c3RyaW5nKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIEdfVE9LRU5fTk9ORToK
ICAgIGNhc2UgR19UT0tFTl9FUlJPUjoKCiAgICAgIGJyZWFrOwogICAgfQoKICBpZiAobWVzc2Fn
ZSAmJiBtZXNzYWdlWzBdICE9IDApCiAgICBtZXNzYWdlX3ByZWZpeCA9ICIgLSAiOwogIGVsc2UK
ICAgIHsKICAgICAgbWVzc2FnZV9wcmVmaXggPSAiIjsKICAgICAgbWVzc2FnZSA9ICIiOwogICAg
fQogIGlmIChleHBlY3RlZF90b2tlbiA9PSBHX1RPS0VOX0VSUk9SKQogICAgewogICAgICBtc2df
aGFuZGxlciAoc2Nhbm5lciwKICAgICAgICAgICAgICAgICAgICJmYWlsdXJlIGFyb3VuZCAlcyVz
JXMiLAogICAgICAgICAgICAgICAgICAgdG9rZW5fc3RyaW5nLAogICAgICAgICAgICAgICAgICAg
bWVzc2FnZV9wcmVmaXgsCiAgICAgICAgICAgICAgICAgICBtZXNzYWdlKTsKICAgIH0KICBlbHNl
IGlmIChleHBlY3RlZF90b2tlbiA9PSBHX1RPS0VOX05PTkUpCiAgICB7CiAgICAgIGlmIChwcmlu
dF91bmV4cCkKICAgICAgICBtc2dfaGFuZGxlciAoc2Nhbm5lciwKICAgICAgICAgICAgICAgICAg
ICAgInVuZXhwZWN0ZWQgJXMlcyVzIiwKICAgICAgICAgICAgICAgICAgICAgdG9rZW5fc3RyaW5n
LAogICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX3ByZWZpeCwKICAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZSk7CiAgICAgIGVsc2UKICAgICAgICBtc2dfaGFuZGxlciAoc2Nhbm5lciwKICAg
ICAgICAgICAgICAgICAgICAgIiVzJXMlcyIsCiAgICAgICAgICAgICAgICAgICAgIHRva2VuX3N0
cmluZywKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9wcmVmaXgsCiAgICAgICAgICAgICAg
ICAgICAgIG1lc3NhZ2UpOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgaWYgKHByaW50X3VuZXhw
KQogICAgICAgIG1zZ19oYW5kbGVyIChzY2FubmVyLAogICAgICAgICAgICAgICAgICAgICAidW5l
eHBlY3RlZCAlcywgZXhwZWN0ZWQgJXMlcyVzIiwKICAgICAgICAgICAgICAgICAgICAgdG9rZW5f
c3RyaW5nLAogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9zdHJpbmcsCiAgICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2VfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICBtZXNzYWdlKTsK
ICAgICAgZWxzZQogICAgICAgIG1zZ19oYW5kbGVyIChzY2FubmVyLAogICAgICAgICAgICAgICAg
ICAgICAiJXMsIGV4cGVjdGVkICVzJXMlcyIsCiAgICAgICAgICAgICAgICAgICAgIHRva2VuX3N0
cmluZywKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3RyaW5nLAogICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlX3ByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSk7CiAg
ICB9CgogIGdfZnJlZSAodG9rZW5fc3RyaW5nKTsKICBnX2ZyZWUgKGV4cGVjdGVkX3N0cmluZyk7
Cn0KCnN0YXRpYyB2b2lkCmdfc2Nhbm5lcl9nZXRfdG9rZW5faSAoR1NjYW5uZXIgKnNjYW5uZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgR1Rva2VuVHlwZSAqdG9rZW5fcCwKICAgICAgICAgICAg
ICAgICAgICAgICBHVG9rZW5WYWx1ZSAqdmFsdWVfcCwKICAgICAgICAgICAgICAgICAgICAgICBn
dWludCAqbGluZV9wLAogICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICpwb3NpdGlvbl9wKQp7
CiAgZG8KICAgIHsKICAgICAgZ19zY2FubmVyX2ZyZWVfdmFsdWUgKHRva2VuX3AsIHZhbHVlX3Ap
OwogICAgICBnX3NjYW5uZXJfZ2V0X3Rva2VuX2xsIChzY2FubmVyLCB0b2tlbl9wLCB2YWx1ZV9w
LCBsaW5lX3AsIHBvc2l0aW9uX3ApOwogICAgfQogIHdoaWxlICgoKCp0b2tlbl9wID4gMCAmJiAq
dG9rZW5fcCA8IDI1NikgJiYKICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29u
c3RhbnRfcCAoKnRva2VuX3ApICYmICgqdG9rZW5fcCkgPT0gJ1wwJyA/IChjaGFyICopIF9fcmF3
bWVtY2hyIChzY2FubmVyLT5jb25maWctPmNzZXRfc2tpcF9jaGFyYWN0ZXJzLCAqdG9rZW5fcCkg
OiBzdHJjaHIgKHNjYW5uZXItPmNvbmZpZy0+Y3NldF9za2lwX2NoYXJhY3RlcnMsICp0b2tlbl9w
KSkpKSB8fAogICAgICAgICAoKnRva2VuX3AgPT0gR19UT0tFTl9DSEFSICYmCiAgICAgICAgICAo
X19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKHZhbHVlX3AtPnZfY2hhcikgJiYg
KHZhbHVlX3AtPnZfY2hhcikgPT0gJ1wwJyA/IChjaGFyICopIF9fcmF3bWVtY2hyIChzY2FubmVy
LT5jb25maWctPmNzZXRfc2tpcF9jaGFyYWN0ZXJzLCB2YWx1ZV9wLT52X2NoYXIpIDogc3RyY2hy
IChzY2FubmVyLT5jb25maWctPmNzZXRfc2tpcF9jaGFyYWN0ZXJzLCB2YWx1ZV9wLT52X2NoYXIp
KSkpIHx8CiAgICAgICAgICgqdG9rZW5fcCA9PSBHX1RPS0VOX0NPTU1FTlRfTVVMVEkgJiYKICAg
ICAgICAgIHNjYW5uZXItPmNvbmZpZy0+c2tpcF9jb21tZW50X211bHRpKSB8fAogICAgICAgICAo
KnRva2VuX3AgPT0gR19UT0tFTl9DT01NRU5UX1NJTkdMRSAmJgogICAgICAgICAgc2Nhbm5lci0+
Y29uZmlnLT5za2lwX2NvbW1lbnRfc2luZ2xlKSk7CgogIHN3aXRjaCAoKnRva2VuX3ApCiAgICB7
CiAgICBjYXNlIEdfVE9LRU5fSURFTlRJRklFUjoKICAgICAgaWYgKHNjYW5uZXItPmNvbmZpZy0+
aWRlbnRpZmllcl8yX3N0cmluZykKICAgICAgICAqdG9rZW5fcCA9IEdfVE9LRU5fU1RSSU5HOwog
ICAgICBicmVhazsKCiAgICBjYXNlIEdfVE9LRU5fU1lNQk9MOgogICAgICBpZiAoc2Nhbm5lci0+
Y29uZmlnLT5zeW1ib2xfMl90b2tlbikKICAgICAgICAqdG9rZW5fcCA9IChHVG9rZW5UeXBlKSB2
YWx1ZV9wLT52X3N5bWJvbDsKICAgICAgYnJlYWs7CgogICAgY2FzZSBHX1RPS0VOX0JJTkFSWToK
ICAgIGNhc2UgR19UT0tFTl9PQ1RBTDoKICAgIGNhc2UgR19UT0tFTl9IRVg6CiAgICAgIGlmIChz
Y2FubmVyLT5jb25maWctPm51bWJlcnNfMl9pbnQpCiAgICAgICAgKnRva2VuX3AgPSBHX1RPS0VO
X0lOVDsKICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgYnJlYWs7CiAgICB9CgogIGlm
ICgqdG9rZW5fcCA9PSBHX1RPS0VOX0lOVCAmJgogICAgICBzY2FubmVyLT5jb25maWctPmludF8y
X2Zsb2F0KQogICAgewogICAgICAqdG9rZW5fcCA9IEdfVE9LRU5fRkxPQVQ7CiAgICAgIGlmIChz
Y2FubmVyLT5jb25maWctPnN0b3JlX2ludDY0KQogICAgICAgIHZhbHVlX3AtPnZfZmxvYXQgPSB2
YWx1ZV9wLT52X2ludDY0OwogICAgICBlbHNlCiAgICAgICAgdmFsdWVfcC0+dl9mbG9hdCA9IHZh
bHVlX3AtPnZfaW50OwogICAgfQoKICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKfQoKc3Rh
dGljIHZvaWQKZ19zY2FubmVyX2dldF90b2tlbl9sbCAoR1NjYW5uZXIgKnNjYW5uZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBHVG9rZW5UeXBlICp0b2tlbl9wLAogICAgICAgICAgICAgICAg
ICAgICAgICAgR1Rva2VuVmFsdWUgKnZhbHVlX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICBn
dWludCAqbGluZV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgKnBvc2l0aW9uX3Ap
CnsKICBHU2Nhbm5lckNvbmZpZyAqY29uZmlnOwogIEdUb2tlblR5cGUgdG9rZW47CiAgZ2Jvb2xl
YW4gaW5fY29tbWVudF9tdWx0aTsKICBnYm9vbGVhbiBpbl9jb21tZW50X3NpbmdsZTsKICBnYm9v
bGVhbiBpbl9zdHJpbmdfc3E7CiAgZ2Jvb2xlYW4gaW5fc3RyaW5nX2RxOwogIEdTdHJpbmcgKmdz
dHJpbmc7CiAgR1Rva2VuVmFsdWUgdmFsdWU7CiAgZ3VjaGFyIGNoOwoKICBjb25maWcgPSBzY2Fu
bmVyLT5jb25maWc7CiAgKCp2YWx1ZV9wKS52X2ludDY0ID0gMDsKCiAgaWYgKChzY2FubmVyLT50
ZXh0ID49IHNjYW5uZXItPnRleHRfZW5kICYmIHNjYW5uZXItPmlucHV0X2ZkIDwgMCkgfHwKICAg
ICAgc2Nhbm5lci0+dG9rZW4gPT0gR19UT0tFTl9FT0YpCiAgICB7CiAgICAgICp0b2tlbl9wID0g
R19UT0tFTl9FT0Y7CiAgICAgIHJldHVybjsKICAgIH0KCiAgaW5fY29tbWVudF9tdWx0aSA9ICgw
KTsKICBpbl9jb21tZW50X3NpbmdsZSA9ICgwKTsKICBpbl9zdHJpbmdfc3EgPSAoMCk7CiAgaW5f
c3RyaW5nX2RxID0gKDApOwogIGdzdHJpbmcgPSAoKHZvaWQgKikwKTsKCiAgZG8KICAgIHsKICAg
ICAgZ2Jvb2xlYW4gZG90dGVkX2Zsb2F0ID0gKDApOwoKICAgICAgY2ggPSBnX3NjYW5uZXJfZ2V0
X2NoYXIgKHNjYW5uZXIsIGxpbmVfcCwgcG9zaXRpb25fcCk7CgogICAgICB2YWx1ZS52X2ludDY0
ID0gMDsKICAgICAgdG9rZW4gPSBHX1RPS0VOX05PTkU7CgoKCgoKICAgICAgaWYgKGNvbmZpZy0+
c2Nhbl9pZGVudGlmaWVyICYmCiAgICAgICAgICBjaCAmJiAoX19leHRlbnNpb25fXyAoX19idWls
dGluX2NvbnN0YW50X3AgKGNoKSAmJiAoY2gpID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNo
ciAoY29uZmlnLT5jc2V0X2lkZW50aWZpZXJfZmlyc3QsIGNoKSA6IHN0cmNociAoY29uZmlnLT5j
c2V0X2lkZW50aWZpZXJfZmlyc3QsIGNoKSkpKQogICAgICAgIGdvdG8gaWRlbnRpZmllcl9wcmVj
ZWRlbmNlOwoKICAgICAgc3dpdGNoIChjaCkKICAgICAgICB7CiAgICAgICAgY2FzZSAwOgogICAg
ICAgICAgdG9rZW4gPSBHX1RPS0VOX0VPRjsKICAgICAgICAgICgqcG9zaXRpb25fcCkrKzsKCiAg
ICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICBpZiAoIWNvbmZpZy0+
c2Nhbl9jb21tZW50X211bHRpIHx8CiAgICAgICAgICAgICAgZ19zY2FubmVyX3BlZWtfbmV4dF9j
aGFyIChzY2FubmVyKSAhPSAnKicpCiAgICAgICAgICAgIGdvdG8gZGVmYXVsdF9jYXNlOwogICAg
ICAgICAgZ19zY2FubmVyX2dldF9jaGFyIChzY2FubmVyLCBsaW5lX3AsIHBvc2l0aW9uX3ApOwog
ICAgICAgICAgdG9rZW4gPSBHX1RPS0VOX0NPTU1FTlRfTVVMVEk7CiAgICAgICAgICBpbl9jb21t
ZW50X211bHRpID0gKCEoMCkpOwogICAgICAgICAgZ3N0cmluZyA9IGdfc3RyaW5nX25ldyAoIiIp
OwogICAgICAgICAgd2hpbGUgKChjaCA9IGdfc2Nhbm5lcl9nZXRfY2hhciAoc2Nhbm5lciwgbGlu
ZV9wLCBwb3NpdGlvbl9wKSkgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChj
aCA9PSAnKicgJiYgZ19zY2FubmVyX3BlZWtfbmV4dF9jaGFyIChzY2FubmVyKSA9PSAnLycpCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGdfc2Nhbm5lcl9nZXRfY2hhciAoc2Nh
bm5lciwgbGluZV9wLCBwb3NpdGlvbl9wKTsKICAgICAgICAgICAgICAgICAgaW5fY29tbWVudF9t
dWx0aSA9ICgwKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZ3N0cmluZyA9IGdfc3RyaW5nX2FwcGVu
ZF9jIChnc3RyaW5nLCBjaCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNoID0gMDsKICAgICAg
ICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdcJyc6CiAgICAgICAgICBpZiAoIWNvbmZpZy0+c2Nh
bl9zdHJpbmdfc3EpCiAgICAgICAgICAgIGdvdG8gZGVmYXVsdF9jYXNlOwogICAgICAgICAgdG9r
ZW4gPSBHX1RPS0VOX1NUUklORzsKICAgICAgICAgIGluX3N0cmluZ19zcSA9ICghKDApKTsKICAg
ICAgICAgIGdzdHJpbmcgPSBnX3N0cmluZ19uZXcgKCIiKTsKICAgICAgICAgIHdoaWxlICgoY2gg
PSBnX3NjYW5uZXJfZ2V0X2NoYXIgKHNjYW5uZXIsIGxpbmVfcCwgcG9zaXRpb25fcCkpICE9IDAp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoY2ggPT0gJ1wnJykKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgaW5fc3RyaW5nX3NxID0gKDApOwogICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICBnc3RyaW5nID0gZ19zdHJpbmdfYXBwZW5kX2MgKGdzdHJpbmcsIGNoKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgY2ggPSAwOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2Ug
JyInOgogICAgICAgICAgaWYgKCFjb25maWctPnNjYW5fc3RyaW5nX2RxKQogICAgICAgICAgICBn
b3RvIGRlZmF1bHRfY2FzZTsKICAgICAgICAgIHRva2VuID0gR19UT0tFTl9TVFJJTkc7CiAgICAg
ICAgICBpbl9zdHJpbmdfZHEgPSAoISgwKSk7CiAgICAgICAgICBnc3RyaW5nID0gZ19zdHJpbmdf
bmV3ICgiIik7CiAgICAgICAgICB3aGlsZSAoKGNoID0gZ19zY2FubmVyX2dldF9jaGFyIChzY2Fu
bmVyLCBsaW5lX3AsIHBvc2l0aW9uX3ApKSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgaWYgKGNoID09ICciJykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaW5f
c3RyaW5nX2RxID0gKDApOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
IGlmIChjaCA9PSAnXFwnKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgIGNoID0gZ19zY2FubmVyX2dldF9jaGFyIChzY2FubmVyLCBsaW5lX3AsIHBvc2l0aW9uX3Ap
OwogICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaCkKICAgICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IGk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3VpbnQgZmNoYXI7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICdcXCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0cmluZyA9IGdfc3RyaW5nX2Fw
cGVuZF9jIChnc3RyaW5nLCAnXFwnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgICAgICAg
ICAgIGdzdHJpbmcgPSBnX3N0cmluZ19hcHBlbmRfYyAoZ3N0cmluZywgJ1xuJyk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0
JzoKICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RyaW5nID0gZ19zdHJpbmdfYXBwZW5kX2Mg
KGdzdHJpbmcsICdcdCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAncic6CiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0
cmluZyA9IGdfc3RyaW5nX2FwcGVuZF9jIChnc3RyaW5nLCAnXHInKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2InOgogICAg
ICAgICAgICAgICAgICAgICAgICAgIGdzdHJpbmcgPSBnX3N0cmluZ19hcHBlbmRfYyAoZ3N0cmlu
ZywgJ1xiJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICdmJzoKICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RyaW5nID0g
Z19zdHJpbmdfYXBwZW5kX2MgKGdzdHJpbmcsICdcZicpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMCc6CiAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJzEnOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcyJzoK
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMyc6CiAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgJzQnOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc1JzoKICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnNic6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzcnOgog
ICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBjaCAtICcwJzsKICAgICAgICAgICAgICAgICAg
ICAgICAgICBmY2hhciA9IGdfc2Nhbm5lcl9wZWVrX25leHRfY2hhciAoc2Nhbm5lcik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGZjaGFyID49ICcwJyAmJiBmY2hhciA8PSAnNycpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoID0gZ19zY2FubmVyX2dldF9jaGFyIChzY2FubmVyLCBsaW5lX3AsIHBvc2l0aW9uX3ApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSAqIDggKyBjaCAtICcwJzsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmNoYXIgPSBnX3NjYW5uZXJfcGVla19uZXh0X2NoYXIg
KHNjYW5uZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmNoYXIgPj0gJzAn
ICYmIGZjaGFyIDw9ICc3JykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IGdfc2Nhbm5lcl9nZXRfY2hhciAoc2Nh
bm5lciwgbGluZV9wLCBwb3NpdGlvbl9wKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGkgPSBpICogOCArIGNoIC0gJzAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICBnc3RyaW5nID0gZ19zdHJpbmdfYXBwZW5kX2MgKGdzdHJpbmcsIGkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICAgICAgICAgICBnc3RyaW5nID0gZ19zdHJpbmdfYXBwZW5kX2MgKGdzdHJp
bmcsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgIGdzdHJpbmcgPSBnX3N0cmluZ19hcHBlbmRfYyAoZ3N0cmluZywg
Y2gpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjaCA9IDA7CiAg
ICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnLic6CiAgICAgICAgICBpZiAoIWNvbmZpZy0+
c2Nhbl9mbG9hdCkKICAgICAgICAgICAgZ290byBkZWZhdWx0X2Nhc2U7CiAgICAgICAgICB0b2tl
biA9IEdfVE9LRU5fRkxPQVQ7CiAgICAgICAgICBkb3R0ZWRfZmxvYXQgPSAoISgwKSk7CiAgICAg
ICAgICBjaCA9IGdfc2Nhbm5lcl9nZXRfY2hhciAoc2Nhbm5lciwgbGluZV9wLCBwb3NpdGlvbl9w
KTsKICAgICAgICAgIGdvdG8gbnVtYmVyX3BhcnNpbmc7CgogICAgICAgIGNhc2UgJyQnOgogICAg
ICAgICAgaWYgKCFjb25maWctPnNjYW5faGV4X2RvbGxhcikKICAgICAgICAgICAgZ290byBkZWZh
dWx0X2Nhc2U7CiAgICAgICAgICB0b2tlbiA9IEdfVE9LRU5fSEVYOwogICAgICAgICAgY2ggPSBn
X3NjYW5uZXJfZ2V0X2NoYXIgKHNjYW5uZXIsIGxpbmVfcCwgcG9zaXRpb25fcCk7CiAgICAgICAg
ICBnb3RvIG51bWJlcl9wYXJzaW5nOwoKICAgICAgICBjYXNlICcwJzoKICAgICAgICAgIGlmIChj
b25maWctPnNjYW5fb2N0YWwpCiAgICAgICAgICAgIHRva2VuID0gR19UT0tFTl9PQ1RBTDsKICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgdG9rZW4gPSBHX1RPS0VOX0lOVDsKICAgICAgICAgIGNo
ID0gZ19zY2FubmVyX3BlZWtfbmV4dF9jaGFyIChzY2FubmVyKTsKICAgICAgICAgIGlmIChjb25m
aWctPnNjYW5faGV4ICYmIChjaCA9PSAneCcgfHwgY2ggPT0gJ1gnKSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIHRva2VuID0gR19UT0tFTl9IRVg7CiAgICAgICAgICAgICAgZ19zY2FubmVy
X2dldF9jaGFyIChzY2FubmVyLCBsaW5lX3AsIHBvc2l0aW9uX3ApOwogICAgICAgICAgICAgIGNo
ID0gZ19zY2FubmVyX2dldF9jaGFyIChzY2FubmVyLCBsaW5lX3AsIHBvc2l0aW9uX3ApOwogICAg
ICAgICAgICAgIGlmIChjaCA9PSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICB0b2tlbiA9IEdfVE9LRU5fRVJST1I7CiAgICAgICAgICAgICAgICAgIHZhbHVlLnZfZXJyb3Ig
PSBHX0VSUl9VTkVYUF9FT0Y7CiAgICAgICAgICAgICAgICAgICgqcG9zaXRpb25fcCkrKzsKICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYg
KGdfc2Nhbm5lcl9jaGFyXzJfbnVtIChjaCwgMTYpIDwgMCkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgdG9rZW4gPSBHX1RPS0VOX0VSUk9SOwogICAgICAgICAgICAgICAgICB2
YWx1ZS52X2Vycm9yID0gR19FUlJfRElHSVRfUkFESVg7CiAgICAgICAgICAgICAgICAgIGNoID0g
MDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0KICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZy0+c2Nhbl9iaW5hcnkgJiYgKGNoID09ICdiJyB8
fCBjaCA9PSAnQicpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdG9rZW4gPSBHX1RPS0VO
X0JJTkFSWTsKICAgICAgICAgICAgICBnX3NjYW5uZXJfZ2V0X2NoYXIgKHNjYW5uZXIsIGxpbmVf
cCwgcG9zaXRpb25fcCk7CiAgICAgICAgICAgICAgY2ggPSBnX3NjYW5uZXJfZ2V0X2NoYXIgKHNj
YW5uZXIsIGxpbmVfcCwgcG9zaXRpb25fcCk7CiAgICAgICAgICAgICAgaWYgKGNoID09IDApCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHRva2VuID0gR19UT0tFTl9FUlJPUjsK
ICAgICAgICAgICAgICAgICAgdmFsdWUudl9lcnJvciA9IEdfRVJSX1VORVhQX0VPRjsKICAgICAg
ICAgICAgICAgICAgKCpwb3NpdGlvbl9wKSsrOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoZ19zY2FubmVyX2NoYXJfMl9udW0gKGNo
LCAxMCkgPCAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICB0b2tlbiA9IEdf
VE9LRU5fRVJST1I7CiAgICAgICAgICAgICAgICAgIHZhbHVlLnZfZXJyb3IgPSBHX0VSUl9OT05f
RElHSVRfSU5fQ09OU1Q7CiAgICAgICAgICAgICAgICAgIGNoID0gMDsKICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgY2ggPSAnMCc7CgogICAgICAgIGNhc2UgJzEnOgogICAgICAgIGNhc2UgJzIn
OgogICAgICAgIGNhc2UgJzMnOgogICAgICAgIGNhc2UgJzQnOgogICAgICAgIGNhc2UgJzUnOgog
ICAgICAgIGNhc2UgJzYnOgogICAgICAgIGNhc2UgJzcnOgogICAgICAgIGNhc2UgJzgnOgogICAg
ICAgIGNhc2UgJzknOgogICAgICAgIG51bWJlcl9wYXJzaW5nOgogICAgICAgIHsKICAgICAgICAg
IGdib29sZWFuIGluX251bWJlciA9ICghKDApKTsKICAgICAgICAgIGdjaGFyICplbmRwdHI7Cgog
ICAgICAgICAgaWYgKHRva2VuID09IEdfVE9LRU5fTk9ORSkKICAgICAgICAgICAgdG9rZW4gPSBH
X1RPS0VOX0lOVDsKCiAgICAgICAgICBnc3RyaW5nID0gZ19zdHJpbmdfbmV3IChkb3R0ZWRfZmxv
YXQgPyAiMC4iIDogIiIpOwogICAgICAgICAgZ3N0cmluZyA9IGdfc3RyaW5nX2FwcGVuZF9jIChn
c3RyaW5nLCBjaCk7CgogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGdi
b29sZWFuIGlzX0U7CgogICAgICAgICAgICAgIGlzX0UgPSB0b2tlbiA9PSBHX1RPS0VOX0ZMT0FU
ICYmIChjaCA9PSAnZScgfHwgY2ggPT0gJ0UnKTsKCiAgICAgICAgICAgICAgY2ggPSBnX3NjYW5u
ZXJfcGVla19uZXh0X2NoYXIgKHNjYW5uZXIpOwoKICAgICAgICAgICAgICBpZiAoZ19zY2FubmVy
X2NoYXJfMl9udW0gKGNoLCAzNikgPj0gMCB8fAogICAgICAgICAgICAgICAgICAoY29uZmlnLT5z
Y2FuX2Zsb2F0ICYmIGNoID09ICcuJykgfHwKICAgICAgICAgICAgICAgICAgKGlzX0UgJiYgKGNo
ID09ICcrJyB8fCBjaCA9PSAnLScpKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgY2ggPSBnX3NjYW5uZXJfZ2V0X2NoYXIgKHNjYW5uZXIsIGxpbmVfcCwgcG9zaXRpb25fcCk7
CgogICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKQogICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICBjYXNlICcuJzoKICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tl
biAhPSBHX1RPS0VOX0lOVCAmJiB0b2tlbiAhPSBHX1RPS0VOX09DVEFMKQogICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudl9lcnJvciA9IHRv
a2VuID09IEdfVE9LRU5fRkxPQVQgPyBHX0VSUl9GTE9BVF9NQUxGT1JNRUQgOiBHX0VSUl9GTE9B
VF9SQURJWDsKICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IEdfVE9LRU5fRVJST1I7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fbnVtYmVyID0gKDApOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IEdfVE9LRU5fRkxPQVQ7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0cmluZyA9IGdfc3RyaW5nX2FwcGVuZF9jIChn
c3RyaW5nLCBjaCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICcwJzoKICAgICAgICAgICAgICAg
ICAgICBjYXNlICcxJzoKICAgICAgICAgICAgICAgICAgICBjYXNlICcyJzoKICAgICAgICAgICAg
ICAgICAgICBjYXNlICczJzoKICAgICAgICAgICAgICAgICAgICBjYXNlICc0JzoKICAgICAgICAg
ICAgICAgICAgICBjYXNlICc1JzoKICAgICAgICAgICAgICAgICAgICBjYXNlICc2JzoKICAgICAg
ICAgICAgICAgICAgICBjYXNlICc3JzoKICAgICAgICAgICAgICAgICAgICBjYXNlICc4JzoKICAg
ICAgICAgICAgICAgICAgICBjYXNlICc5JzoKICAgICAgICAgICAgICAgICAgICAgIGdzdHJpbmcg
PSBnX3N0cmluZ19hcHBlbmRfYyAoZ3N0cmluZywgY2gpOwogICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJy0nOgogICAgICAgICAgICAgICAgICAg
IGNhc2UgJysnOgogICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9IEdfVE9LRU5fRkxP
QVQpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbiA9IEdfVE9LRU5fRVJST1I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudl9l
cnJvciA9IEdfRVJSX05PTl9ESUdJVF9JTl9DT05TVDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbl9udW1iZXIgPSAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgZ3N0cmluZyA9IGdfc3RyaW5n
X2FwcGVuZF9jIChnc3RyaW5nLCBjaCk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAg
ICAgICAgICAgICAgICAgICAgY2FzZSAnZSc6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRSc6
CiAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRva2VuICE9IEdfVE9LRU5fSEVYICYmICFjb25m
aWctPnNjYW5fZmxvYXQpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgKHRva2VuICE9IEdf
VE9LRU5fSEVYICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuICE9IEdfVE9LRU5f
T0NUQUwgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gIT0gR19UT0tFTl9GTE9B
VCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiAhPSBHX1RPS0VOX0lOVCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9
IEdfVE9LRU5fRVJST1I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudl9lcnJvciA9
IEdfRVJSX05PTl9ESUdJVF9JTl9DT05TVDsKICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9u
dW1iZXIgPSAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0b2tlbiAhPSBHX1RPS0VOX0hFWCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuID0gR19UT0tFTl9GTE9BVDsKICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RyaW5n
ID0gZ19zdHJpbmdfYXBwZW5kX2MgKGdzdHJpbmcsIGNoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT0gR19UT0tFTl9IRVgpCiAg
ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9
IEdfVE9LRU5fRVJST1I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudl9lcnJvciA9
IEdfRVJSX05PTl9ESUdJVF9JTl9DT05TVDsKICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9u
dW1iZXIgPSAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgZ3N0cmluZyA9IGdfc3RyaW5nX2FwcGVu
ZF9jIChnc3RyaW5nLCBjaCk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgaW5fbnVtYmVyID0gKDApOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAo
aW5fbnVtYmVyKTsKCiAgICAgICAgICBlbmRwdHIgPSAoKHZvaWQgKikwKTsKICAgICAgICAgIGlm
ICh0b2tlbiA9PSBHX1RPS0VOX0ZMT0FUKQogICAgICAgICAgICB2YWx1ZS52X2Zsb2F0ID0gZ19z
dHJ0b2QgKGdzdHJpbmctPnN0ciwgJmVuZHB0cik7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBndWludDY0IHVpNjQgPSAwOwogICAgICAgICAgICAgIHN3aXRjaCAo
dG9rZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjYXNlIEdfVE9LRU5fQklO
QVJZOgogICAgICAgICAgICAgICAgICB1aTY0ID0gZ19hc2NpaV9zdHJ0b3VsbCAoZ3N0cmluZy0+
c3RyLCAmZW5kcHRyLCAyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICBjYXNlIEdfVE9LRU5fT0NUQUw6CiAgICAgICAgICAgICAgICAgIHVpNjQgPSBnX2FzY2lpX3N0
cnRvdWxsIChnc3RyaW5nLT5zdHIsICZlbmRwdHIsIDgpOwogICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgIGNhc2UgR19UT0tFTl9JTlQ6CiAgICAgICAgICAgICAgICAgIHVp
NjQgPSBnX2FzY2lpX3N0cnRvdWxsIChnc3RyaW5nLT5zdHIsICZlbmRwdHIsIDEwKTsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIEdfVE9LRU5fSEVYOgogICAg
ICAgICAgICAgICAgICB1aTY0ID0gZ19hc2NpaV9zdHJ0b3VsbCAoZ3N0cmluZy0+c3RyLCAmZW5k
cHRyLCAxNik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVs
dDogOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzY2FubmVyLT5jb25maWct
PnN0b3JlX2ludDY0KQogICAgICAgICAgICAgICAgdmFsdWUudl9pbnQ2NCA9IHVpNjQ7CiAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdmFsdWUudl9pbnQgPSB1aTY0OwogICAgICAg
ICAgICB9CiAgICAgICAgICBpZiAoZW5kcHRyICYmICplbmRwdHIpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICB0b2tlbiA9IEdfVE9LRU5fRVJST1I7CiAgICAgICAgICAgICAgaWYgKCplbmRw
dHIgPT0gJ2UnIHx8ICplbmRwdHIgPT0gJ0UnKQogICAgICAgICAgICAgICAgdmFsdWUudl9lcnJv
ciA9IEdfRVJSX05PTl9ESUdJVF9JTl9DT05TVDsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICB2YWx1ZS52X2Vycm9yID0gR19FUlJfRElHSVRfUkFESVg7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGdfc3RyaW5nX2ZyZWUgKGdzdHJpbmcsICghKDApKSk7CiAgICAgICAgICBnc3Ry
aW5nID0gKCh2b2lkICopMCk7CiAgICAgICAgICBjaCA9IDA7CiAgICAgICAgfQogICAgICAgIGJy
ZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgIGRlZmF1bHRfY2FzZToKICAgICAgICB7CiAg
ICAgICAgICBpZiAoY29uZmlnLT5jcGFpcl9jb21tZW50X3NpbmdsZSAmJgogICAgICAgICAgICAg
IGNoID09IGNvbmZpZy0+Y3BhaXJfY29tbWVudF9zaW5nbGVbMF0pCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICB0b2tlbiA9IEdfVE9LRU5fQ09NTUVOVF9TSU5HTEU7CiAgICAgICAgICAgICAg
aW5fY29tbWVudF9zaW5nbGUgPSAoISgwKSk7CiAgICAgICAgICAgICAgZ3N0cmluZyA9IGdfc3Ry
aW5nX25ldyAoIiIpOwogICAgICAgICAgICAgIGNoID0gZ19zY2FubmVyX2dldF9jaGFyIChzY2Fu
bmVyLCBsaW5lX3AsIHBvc2l0aW9uX3ApOwogICAgICAgICAgICAgIHdoaWxlIChjaCAhPSAwKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gY29uZmlnLT5jcGFp
cl9jb21tZW50X3NpbmdsZVsxXSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICBpbl9jb21tZW50X3NpbmdsZSA9ICgwKTsKICAgICAgICAgICAgICAgICAgICAgIGNo
ID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgIGdzdHJpbmcgPSBnX3N0cmluZ19hcHBlbmRfYyAoZ3N0cmluZywg
Y2gpOwogICAgICAgICAgICAgICAgICBjaCA9IGdfc2Nhbm5lcl9nZXRfY2hhciAoc2Nhbm5lciwg
bGluZV9wLCBwb3NpdGlvbl9wKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgICAgZWxzZSBpZiAoY29uZmlnLT5zY2FuX2lkZW50aWZpZXIgJiYgY2ggJiYKICAgICAgICAg
ICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoY2gpICYmIChj
aCkgPT0gJ1wwJyA/IChjaGFyICopIF9fcmF3bWVtY2hyIChjb25maWctPmNzZXRfaWRlbnRpZmll
cl9maXJzdCwgY2gpIDogc3RyY2hyIChjb25maWctPmNzZXRfaWRlbnRpZmllcl9maXJzdCwgY2gp
KSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgaWRlbnRpZmllcl9wcmVjZWRlbmNlOgoKICAg
ICAgICAgICAgICBpZiAoY29uZmlnLT5jc2V0X2lkZW50aWZpZXJfbnRoICYmIGNoICYmCiAgICAg
ICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoZ19zY2Fu
bmVyX3BlZWtfbmV4dF9jaGFyIChzY2FubmVyKSkgJiYgKGdfc2Nhbm5lcl9wZWVrX25leHRfY2hh
ciAoc2Nhbm5lcikpID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAoY29uZmlnLT5jc2V0
X2lkZW50aWZpZXJfbnRoLCBnX3NjYW5uZXJfcGVla19uZXh0X2NoYXIgKHNjYW5uZXIpKSA6IHN0
cmNociAoY29uZmlnLT5jc2V0X2lkZW50aWZpZXJfbnRoLCBnX3NjYW5uZXJfcGVla19uZXh0X2No
YXIgKHNjYW5uZXIpKSkpKQoKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgdG9r
ZW4gPSBHX1RPS0VOX0lERU5USUZJRVI7CiAgICAgICAgICAgICAgICAgIGdzdHJpbmcgPSBnX3N0
cmluZ19uZXcgKCIiKTsKICAgICAgICAgICAgICAgICAgZ3N0cmluZyA9IGdfc3RyaW5nX2FwcGVu
ZF9jIChnc3RyaW5nLCBjaCk7CiAgICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgY2ggPSBnX3NjYW5uZXJfZ2V0X2NoYXIgKHNjYW5u
ZXIsIGxpbmVfcCwgcG9zaXRpb25fcCk7CiAgICAgICAgICAgICAgICAgICAgICBnc3RyaW5nID0g
Z19zdHJpbmdfYXBwZW5kX2MgKGdzdHJpbmcsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgIGNo
ID0gZ19zY2FubmVyX3BlZWtfbmV4dF9jaGFyIChzY2FubmVyKTsKICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgIHdoaWxlIChjaCAmJiAoX19leHRlbnNpb25fXyAoX19idWls
dGluX2NvbnN0YW50X3AgKGNoKSAmJiAoY2gpID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNo
ciAoY29uZmlnLT5jc2V0X2lkZW50aWZpZXJfbnRoLCBjaCkgOiBzdHJjaHIgKGNvbmZpZy0+Y3Nl
dF9pZGVudGlmaWVyX250aCwgY2gpKSkpOwogICAgICAgICAgICAgICAgICBjaCA9IDA7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnLT5zY2FuX2lkZW50aWZp
ZXJfMWNoYXIpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHRva2VuID0gR19U
T0tFTl9JREVOVElGSUVSOwogICAgICAgICAgICAgICAgICB2YWx1ZS52X2lkZW50aWZpZXIgPSAo
KGdjaGFyICopIGdfbWFsbG9jMCAoKChnc2l6ZSkgc2l6ZW9mIChnY2hhcikpICogKChnc2l6ZSkg
KDIpKSkpOwogICAgICAgICAgICAgICAgICB2YWx1ZS52X2lkZW50aWZpZXJbMF0gPSBjaDsKICAg
ICAgICAgICAgICAgICAgY2ggPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAg
ICAgICAgICBpZiAoY2gpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoY29uZmlnLT5j
aGFyXzJfdG9rZW4pCiAgICAgICAgICAgICAgICB0b2tlbiA9IGNoOwogICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgdG9rZW4gPSBHX1RPS0VOX0NI
QVI7CiAgICAgICAgICAgICAgICAgIHZhbHVlLnZfY2hhciA9IGNoOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgIGNoID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBi
cmVhazsKICAgICAgICB9CiAgICAgICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4
dGVuc2lvbl9fICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChjaCA9PSAwICYmIHRva2VuICE9
IEdfVE9LRU5fTk9ORSkgX2dfYm9vbGVhbl92YXJfID0gMTsgZWxzZSBfZ19ib29sZWFuX3Zhcl8g
PSAwOyBfZ19ib29sZWFuX3Zhcl87IH0pLCAxKSkgeyB9IGVsc2UgZ19sb2cgKCJHTGliIiwgR19M
T0dfTEVWRUxfRVJST1IsICJmaWxlICVzOiBsaW5lICVkICglcyk6IGFzc2VydGlvbiBmYWlsZWQ6
ICglcykiLCAiZ3NjYW5uZXIuYyIsIDE2NzMsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJjaCA9PSAw
ICYmIHRva2VuICE9IEdfVE9LRU5fTk9ORSIpOyB9KTsKICAgIH0KICB3aGlsZSAoY2ggIT0gMCk7
CgogIGlmIChpbl9jb21tZW50X211bHRpIHx8IGluX2NvbW1lbnRfc2luZ2xlIHx8CiAgICAgIGlu
X3N0cmluZ19zcSB8fCBpbl9zdHJpbmdfZHEpCiAgICB7CiAgICAgIHRva2VuID0gR19UT0tFTl9F
UlJPUjsKICAgICAgaWYgKGdzdHJpbmcpCiAgICAgICAgewogICAgICAgICAgZ19zdHJpbmdfZnJl
ZSAoZ3N0cmluZywgKCEoMCkpKTsKICAgICAgICAgIGdzdHJpbmcgPSAoKHZvaWQgKikwKTsKICAg
ICAgICB9CiAgICAgICgqcG9zaXRpb25fcCkrKzsKICAgICAgaWYgKGluX2NvbW1lbnRfbXVsdGkg
fHwgaW5fY29tbWVudF9zaW5nbGUpCiAgICAgICAgdmFsdWUudl9lcnJvciA9IEdfRVJSX1VORVhQ
X0VPRl9JTl9DT01NRU5UOwogICAgICBlbHNlCiAgICAgICAgdmFsdWUudl9lcnJvciA9IEdfRVJS
X1VORVhQX0VPRl9JTl9TVFJJTkc7CiAgICB9CgogIGlmIChnc3RyaW5nKQogICAgewogICAgICB2
YWx1ZS52X3N0cmluZyA9IGdzdHJpbmctPnN0cjsKICAgICAgZ19zdHJpbmdfZnJlZSAoZ3N0cmlu
ZywgKDApKTsKICAgICAgZ3N0cmluZyA9ICgodm9pZCAqKTApOwogICAgfQoKICBpZiAodG9rZW4g
PT0gR19UT0tFTl9JREVOVElGSUVSKQogICAgewogICAgICBpZiAoY29uZmlnLT5zY2FuX3N5bWJv
bHMpCiAgICAgICAgewogICAgICAgICAgR1NjYW5uZXJLZXkgKmtleTsKICAgICAgICAgIGd1aW50
IHNjb3BlX2lkOwoKICAgICAgICAgIHNjb3BlX2lkID0gc2Nhbm5lci0+c2NvcGVfaWQ7CiAgICAg
ICAgICBrZXkgPSBnX3NjYW5uZXJfbG9va3VwX2ludGVybmFsIChzY2FubmVyLCBzY29wZV9pZCwg
dmFsdWUudl9pZGVudGlmaWVyKTsKICAgICAgICAgIGlmICgha2V5ICYmIHNjb3BlX2lkICYmIHNj
YW5uZXItPmNvbmZpZy0+c2NvcGVfMF9mYWxsYmFjaykKICAgICAgICAgICAga2V5ID0gZ19zY2Fu
bmVyX2xvb2t1cF9pbnRlcm5hbCAoc2Nhbm5lciwgMCwgdmFsdWUudl9pZGVudGlmaWVyKTsKCiAg
ICAgICAgICBpZiAoa2V5KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZ19mcmVlICh2YWx1
ZS52X2lkZW50aWZpZXIpOwogICAgICAgICAgICAgIHRva2VuID0gR19UT0tFTl9TWU1CT0w7CiAg
ICAgICAgICAgICAgdmFsdWUudl9zeW1ib2wgPSBrZXktPnZhbHVlOwogICAgICAgICAgICB9CiAg
ICAgICAgfQoKICAgICAgaWYgKHRva2VuID09IEdfVE9LRU5fSURFTlRJRklFUiAmJgogICAgICAg
ICAgY29uZmlnLT5zY2FuX2lkZW50aWZpZXJfTlVMTCAmJgogICAgICAgICAgc3RybGVuICh2YWx1
ZS52X2lkZW50aWZpZXIpID09IDQpCiAgICAgICAgewogICAgICAgICAgZ2NoYXIgKm51bGxfdXBw
ZXIgPSAiTlVMTCI7CiAgICAgICAgICBnY2hhciAqbnVsbF9sb3dlciA9ICJudWxsIjsKCiAgICAg
ICAgICBpZiAoc2Nhbm5lci0+Y29uZmlnLT5jYXNlX3NlbnNpdGl2ZSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGlmICh2YWx1ZS52X2lkZW50aWZpZXJbMF0gPT0gbnVsbF91cHBlclswXSAm
JgogICAgICAgICAgICAgICAgICB2YWx1ZS52X2lkZW50aWZpZXJbMV0gPT0gbnVsbF91cHBlclsx
XSAmJgogICAgICAgICAgICAgICAgICB2YWx1ZS52X2lkZW50aWZpZXJbMl0gPT0gbnVsbF91cHBl
clsyXSAmJgogICAgICAgICAgICAgICAgICB2YWx1ZS52X2lkZW50aWZpZXJbM10gPT0gbnVsbF91
cHBlclszXSkKICAgICAgICAgICAgICAgIHRva2VuID0gR19UT0tFTl9JREVOVElGSUVSX05VTEw7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGlmICgodmFsdWUudl9pZGVudGlmaWVyWzBdID09IG51bGxfdXBwZXJbMF0gfHwKICAgICAgICAg
ICAgICAgICAgIHZhbHVlLnZfaWRlbnRpZmllclswXSA9PSBudWxsX2xvd2VyWzBdKSAmJgogICAg
ICAgICAgICAgICAgICAodmFsdWUudl9pZGVudGlmaWVyWzFdID09IG51bGxfdXBwZXJbMV0gfHwK
ICAgICAgICAgICAgICAgICAgIHZhbHVlLnZfaWRlbnRpZmllclsxXSA9PSBudWxsX2xvd2VyWzFd
KSAmJgogICAgICAgICAgICAgICAgICAodmFsdWUudl9pZGVudGlmaWVyWzJdID09IG51bGxfdXBw
ZXJbMl0gfHwKICAgICAgICAgICAgICAgICAgIHZhbHVlLnZfaWRlbnRpZmllclsyXSA9PSBudWxs
X2xvd2VyWzJdKSAmJgogICAgICAgICAgICAgICAgICAodmFsdWUudl9pZGVudGlmaWVyWzNdID09
IG51bGxfdXBwZXJbM10gfHwKICAgICAgICAgICAgICAgICAgIHZhbHVlLnZfaWRlbnRpZmllclsz
XSA9PSBudWxsX2xvd2VyWzNdKSkKICAgICAgICAgICAgICAgIHRva2VuID0gR19UT0tFTl9JREVO
VElGSUVSX05VTEw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICp0b2tlbl9wID0g
dG9rZW47CiAgKnZhbHVlX3AgPSB2YWx1ZTsKfQo=



More information about the Gcc-bugs mailing list