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


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

debug/7092: Bootstrap fails with ICE on sparc-solaris, CFLAGS="-g1" when building 64-bit libsupc++


>Number:         7092
>Category:       debug
>Synopsis:       Bootstrap fails with ICE on sparc-solaris, CFLAGS="-g1" when building 64-bit libsupc++
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Thu Jun 20 20:06:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Mark Mentovai
>Release:        3.1 and gcc-3_1-branch 3.1.1 20020620 (prerelease)
>Organization:
>Environment:
System: SunOS s2 5.8 Generic_108528-15 sun4u sparc SUNW,UltraAX-i2
Architecture: sun4
Sun Netra T1 200, 500MHz UltraSPARC IIe, 1GB, 2x18GB
Sun Solaris 7/01 MU 7
host: sparc-sun-solaris2.8
build: sparc-sun-solaris2.8
target: sparc-sun-solaris2.8
configured with: ../gcc-3.1-20020620/configure --enable-shared --with-gnu-as --with-gnu-ld --enable-threads --with-cpu=ultrasparc --enable-libgcj --with-system-zlib
>Description:
When gcc is configured with CFLAGS including "-g1", the bootstrap process fails with an internal compiler error when compiling the 64-bit (sparcv9 "-m64") version of eh_personality.cc in libstdc++/libsupc++.  The 32-bit version is compiled properly with -g1 without error.

/bin/sh ../libtool --tag CXX --tag disable-shared --mode=compile /space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/gcc/xgcc -shared-libgcc -B/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/gcc/ -nostdinc++ -L/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/sparc-sun-solaris2.8/sparcv9/libstdc++-v3/src -L/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/sparc-sun-solaris2.8/sparcv9/libstdc++-v3/src/.libs -B/usr/local/sparc-sun-solaris2.8/bin/ -B/usr/local/sparc-sun-solaris2.8/lib/ -isystem /usr/local/sparc-sun-solaris2.8/include  -m64 -I../../../../../gcc-3.1-20020620/libstdc++-v3/../gcc -I../../../../../gcc-3.1-20020620/libstdc++-v3/../include -I/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/sparc-sun-solaris2.8/sparcv9/libstdc++-v3/include/sparc-sun-solaris2.8 -I/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/sparc-sun-solaris2.8/sparcv9/libstdc++-v3/include -I../../../../../gcc-3.1-20020620/libstdc++-v3/libsupc++   -O3 -g1  -m64 -fno-implicit-templates -prefer-pic -Wall -Wno-format -W -Wwrite-strings -Winline  -fdiagnostics-show-location=once  -ffunction-sections -fdata-sections  -g    -c ../../../../../gcc-3.1-20020620/libstdc++-v3/libsupc++/eh_personality.cc
/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/gcc/xgcc -shared-libgcc -B/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/gcc/ -nostdinc++ -L/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/sparc-sun-solaris2.8/sparcv9/libstdc++-v3/src -L/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/sparc-sun-solaris2.8/sparcv9/libstdc++-v3/src/.libs -B/usr/local/sparc-sun-solaris2.8/bin/ -B/usr/local/sparc-sun-solaris2.8/lib/ -isystem /usr/local/sparc-sun-solaris2.8/include -m64 -I../../../../../gcc-3.1-20020620/libstdc++-v3/../gcc -I../../../../../gcc-3.1-20020620/libstdc++-v3/../include -I/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/sparc-sun-solaris2.8/sparcv9/libstdc++-v3/include/sparc-sun-solaris2.8 -I/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/sparc-sun-solaris2.8/sparcv9/libstdc++-v3/include -I../../../../../gcc-3.1-20020620/libstdc++-v3/libsupc++ -O3 -g1 -m64 -fno-implicit-templates -Wall -Wno-format -W -Wwrite-strings -Winline -fdiagnostics-show-location=once -ffunction-sections -fdata-sections -g -c ../../../../../gcc-3.1-20020620/libstdc++-v3/libsupc++/eh_personality.cc  -fPIC -DPIC -o eh_personality.o
../../../../../gcc-3.1-20020620/gcc/unwind-pe.h: In function `const unsigned 
   char* read_encoded_value_with_base(unsigned char, long unsigned int, const 
   unsigned char*, _Unwind_Ptr*)':
../../../../../gcc-3.1-20020620/gcc/unwind-pe.h:182: warning: `_Unwind_Ptr 
   result' might be used uninitialized in this function
../../../../../gcc-3.1-20020620/libstdc++-v3/libsupc++/eh_personality.cc: At 
   global scope:
../../../../../gcc-3.1-20020620/libstdc++-v3/libsupc++/eh_personality.cc:155: Internal
   compiler error in dwarf2out_finish, at dwarf2out.c:12183
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
make[8]: *** [eh_personality.lo] Error 1
make[8]: Leaving directory `/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/sparc-sun-solaris2.8/sparcv9/libstdc++-v3/libsupc++'
make[7]: *** [all-recursive] Error 1
make[7]: Leaving directory `/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/sparc-sun-solaris2.8/sparcv9/libstdc++-v3'
make[6]: *** [all-recursive-am] Error 2
make[6]: Leaving directory `/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/sparc-sun-solaris2.8/sparcv9/libstdc++-v3'
make[5]: *** [multi-do] Error 1
make[5]: Leaving directory `/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/sparc-sun-solaris2.8/libstdc++-v3'
make[4]: *** [all-multi] Error 2
make[4]: Leaving directory `/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/sparc-sun-solaris2.8/libstdc++-v3'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/sparc-sun-solaris2.8/libstdc++-v3'
make[2]: *** [all-recursive-am] Error 2
make[2]: Leaving directory `/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj/sparc-sun-solaris2.8/libstdc++-v3'
make[1]: *** [all-target-libstdc++-v3] Error 2
make[1]: Leaving directory `/space/home/mark/compilatorium/gcc/gcc-3.1-20020620.obj'
make: *** [bootstrap] Error 2
>How-To-Repeat:
gcc -m64 -g1 -fno-implicit-templates -fdiagnostics-show-location=once -ffunction-sections -fdata-sections -c eh_personality.ii -fPIC -DPIC -o eh_personality.o

For complete bootstrap, on sparc-sun-solaris2.8:
env CC="gcc" CFLAGS="-O3 -g1" sh ../gcc-3.1-20020620/configure --enable-shared --with-gnu-as --with-gnu-ld --enable-threads --with-cpu=ultrasparc --enable-libgcj --with-system-zlib
make bootstrap
>Fix:
No fix.

Workaround: use -g0, -g2, or -g3.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/x-macbinary; name="eh_personality.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="eh_personality.ii"

ABFlaF9wZXJzb25hbGl0eS5paQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKUAAAAALk4CLO5OAizAAAAbUJJTgAAAAAAAAAA
AAAAAAAAAACCgY4AAAAjIDEgIi4uLy4uLy4uLy4uLy4uL2djYy0zLjEtMjAwMjA2MjAvbGlic3Rk
YysrLXYzL2xpYnN1cGMrKy9laF9wZXJzb25hbGl0eS5jYyIKIyAxICI8YnVpbHQtaW4+IgojIDEg
Ijxjb21tYW5kIGxpbmU+IgojIDEgIi4uLy4uLy4uLy4uLy4uL2djYy0zLjEtMjAwMjA2MjAvbGli
c3RkYysrLXYzL2xpYnN1cGMrKy9laF9wZXJzb25hbGl0eS5jYyIKIyAzMSAiLi4vLi4vLi4vLi4v
Li4vZ2NjLTMuMS0yMDAyMDYyMC9saWJzdGRjKystdjMvbGlic3VwYysrL2VoX3BlcnNvbmFsaXR5
LmNjIgojIDEgIi9zcGFjZS9ob21lL21hcmsvY29tcGlsYXRvcml1bS9nY2MvZ2NjLTMuMS0yMDAy
MDYyMC5vYmovc3BhcmMtc3VuLXNvbGFyaXMyLjgvc3BhcmN2OS9saWJzdGRjKystdjMvaW5jbHVk
ZS9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2MrK2NvbmZpZy5oIiAxCiMgMzQgIi9zcGFjZS9o
b21lL21hcmsvY29tcGlsYXRvcml1bS9nY2MvZ2NjLTMuMS0yMDAyMDYyMC5vYmovc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvc3BhcmN2OS9saWJzdGRjKystdjMvaW5jbHVkZS9zcGFyYy1zdW4tc29sYXJp
czIuOC9iaXRzL2MrK2NvbmZpZy5oIgojIDEgIi9zcGFjZS9ob21lL21hcmsvY29tcGlsYXRvcml1
bS9nY2MvZ2NjLTMuMS0yMDAyMDYyMC5vYmovc3BhcmMtc3VuLXNvbGFyaXMyLjgvc3BhcmN2OS9s
aWJzdGRjKystdjMvaW5jbHVkZS9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL29zX2RlZmluZXMu
aCIgMQojIDM1ICIvc3BhY2UvaG9tZS9tYXJrL2NvbXBpbGF0b3JpdW0vZ2NjL2djYy0zLjEtMjAw
MjA2MjAub2JqL3NwYXJjLXN1bi1zb2xhcmlzMi44L3NwYXJjdjkvbGlic3RkYysrLXYzL2luY2x1
ZGUvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jKytjb25maWcuaCIgMgojIDMyICIuLi8uLi8u
Li8uLi8uLi9nY2MtMy4xLTIwMDIwNjIwL2xpYnN0ZGMrKy12My9saWJzdXBjKysvZWhfcGVyc29u
YWxpdHkuY2MiIDIKIyAxICIvc3BhY2UvaG9tZS9tYXJrL2NvbXBpbGF0b3JpdW0vZ2NjL2djYy0z
LjEtMjAwMjA2MjAub2JqL3NwYXJjLXN1bi1zb2xhcmlzMi44L3NwYXJjdjkvbGlic3RkYysrLXYz
L2luY2x1ZGUvY3N0ZGxpYiIgMQojIDQ4ICIvc3BhY2UvaG9tZS9tYXJrL2NvbXBpbGF0b3JpdW0v
Z2NjL2djYy0zLjEtMjAwMjA2MjAub2JqL3NwYXJjLXN1bi1zb2xhcmlzMi44L3NwYXJjdjkvbGli
c3RkYysrLXYzL2luY2x1ZGUvY3N0ZGxpYiIgMwoKCiMgMSAiL3NwYWNlL2hvbWUvbWFyay9jb21w
aWxhdG9yaXVtL2djYy9nY2MtMy4xLTIwMDIwNjIwLm9iai9zcGFyYy1zdW4tc29sYXJpczIuOC9z
cGFyY3Y5L2xpYnN0ZGMrKy12My9pbmNsdWRlL2NzdGRkZWYiIDEgMwojIDQ3ICIvc3BhY2UvaG9t
ZS9tYXJrL2NvbXBpbGF0b3JpdW0vZ2NjL2djYy0zLjEtMjAwMjA2MjAub2JqL3NwYXJjLXN1bi1z
b2xhcmlzMi44L3NwYXJjdjkvbGlic3RkYysrLXYzL2luY2x1ZGUvY3N0ZGRlZiIgMwoKIyAxICIv
c3BhY2UvaG9tZS9tYXJrL2NvbXBpbGF0b3JpdW0vZ2NjL2djYy0zLjEtMjAwMjA2MjAub2JqL2dj
Yy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDE0NyAiL3NwYWNlL2hvbWUvbWFyay9jb21waWxh
dG9yaXVtL2djYy9nY2MtMy4xLTIwMDIwNjIwLm9iai9nY2MvaW5jbHVkZS9zdGRkZWYuaCIgMyA0
CnR5cGVkZWYgbG9uZyBpbnQgcHRyZGlmZl90OwojIDIwMSAiL3NwYWNlL2hvbWUvbWFyay9jb21w
aWxhdG9yaXVtL2djYy9nY2MtMy4xLTIwMDIwNjIwLm9iai9nY2MvaW5jbHVkZS9zdGRkZWYuaCIg
MyA0CnR5cGVkZWYgbG9uZyB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDQ5ICIvc3BhY2UvaG9tZS9t
YXJrL2NvbXBpbGF0b3JpdW0vZ2NjL2djYy0zLjEtMjAwMjA2MjAub2JqL3NwYXJjLXN1bi1zb2xh
cmlzMi44L3NwYXJjdjkvbGlic3RkYysrLXYzL2luY2x1ZGUvY3N0ZGRlZiIgMiAzCgpuYW1lc3Bh
Y2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQojIDUxICIv
c3BhY2UvaG9tZS9tYXJrL2NvbXBpbGF0b3JpdW0vZ2NjL2djYy0zLjEtMjAwMjA2MjAub2JqL3Nw
YXJjLXN1bi1zb2xhcmlzMi44L3NwYXJjdjkvbGlic3RkYysrLXYzL2luY2x1ZGUvY3N0ZGxpYiIg
MiAzCgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXN0ZGxpYi5oCTEuNDcJOTkvMTEvMDMg
U01JIiAKCiMgMSAiL3NwYWNlL2hvbWUvbWFyay9jb21waWxhdG9yaXVtL2djYy9nY2MtMy4xLTIw
MDIwNjIwLm9iai9nY2MvaW5jbHVkZS9pc28vc3RkbGliX2lzby5oIiAxIDMgNAojIDM3ICIvc3Bh
Y2UvaG9tZS9tYXJrL2NvbXBpbGF0b3JpdW0vZ2NjL2djYy0zLjEtMjAwMjA2MjAub2JqL2djYy9p
bmNsdWRlL2lzby9zdGRsaWJfaXNvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc3RkbGliX2lz
by5oCTEuMgk5OS8xMi8yMSBTTUkiIAoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVz
dHMuaCIgMSAzIDQKIyAxMyAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDMgNAoj
cHJhZ21hIGlkZW50ICJAKCMpZmVhdHVyZV90ZXN0cy5oCTEuMTgJOTkvMDcvMjYgU01JIgoKIyAx
ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNsdWRlL3N5
cy9pc2FfZGVmcy5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWlzYV9kZWZzLmgJMS4yMAk5OS8w
NS8wNCBTTUkiCiMgMTU4ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNApleHRlcm4g
IkMiIHsKIyAzODAgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMyA0Cn0KIyAxNiAiL3Vz
ci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgMTgx
ICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMyA0Cn0KIyA0MCAiL3NwYWNlL2hv
bWUvbWFyay9jb21waWxhdG9yaXVtL2djYy9nY2MtMy4xLTIwMDIwNjIwLm9iai9nY2MvaW5jbHVk
ZS9pc28vc3RkbGliX2lzby5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewoKCgpleHRlcm4gdW5zaWdu
ZWQgY2hhciBfX2N0eXBlW107CiMgNTcgIi9zcGFjZS9ob21lL21hcmsvY29tcGlsYXRvcml1bS9n
Y2MvZ2NjLTMuMS0yMDAyMDYyMC5vYmovZ2NjL2luY2x1ZGUvaXNvL3N0ZGxpYl9pc28uaCIgMyA0
CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgcXVvdDsKICAgICAgICBpbnQgcmVtOwp9IGRp
dl90OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGxvbmcgcXVvdDsKICAgICAgICBsb25nIHJl
bTsKfSBsZGl2X3Q7CiMgMTAzICIvc3BhY2UvaG9tZS9tYXJrL2NvbXBpbGF0b3JpdW0vZ2NjL2dj
Yy0zLjEtMjAwMjA2MjAub2JqL2djYy9pbmNsdWRlL2lzby9zdGRsaWJfaXNvLmgiIDMgNApleHRl
cm4gdm9pZCBhYm9ydCh2b2lkKTsKZXh0ZXJuIGludCBhYnMoaW50KTsKZXh0ZXJuIGludCBhdGV4
aXQodm9pZCAoKikodm9pZCkpOwpleHRlcm4gZG91YmxlIGF0b2YoY29uc3QgY2hhciAqKTsKZXh0
ZXJuIGludCBhdG9pKGNvbnN0IGNoYXIgKik7CmV4dGVybiBsb25nIGludCBhdG9sKGNvbnN0IGNo
YXIgKik7CmV4dGVybiB2b2lkICpic2VhcmNoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBz
aXplX3QsIHNpemVfdCwKICAgICAgICBpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAq
KSk7CmV4dGVybiB2b2lkICpjYWxsb2Moc2l6ZV90LCBzaXplX3QpOwpleHRlcm4gZGl2X3QgZGl2
KGludCwgaW50KTsKZXh0ZXJuIHZvaWQgZXhpdChpbnQpOwpleHRlcm4gdm9pZCBmcmVlKHZvaWQg
Kik7CmV4dGVybiBjaGFyICpnZXRlbnYoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGxvbmcgaW50IGxh
YnMobG9uZyk7CmV4dGVybiBsZGl2X3QgbGRpdihsb25nLCBsb25nKTsKZXh0ZXJuIHZvaWQgKm1h
bGxvYyhzaXplX3QpOwpleHRlcm4gaW50IG1ibGVuKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0
ZXJuIHNpemVfdCBtYnN0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0
ZXJuIGludCBtYnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiB2
b2lkIHFzb3J0KHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsCiAgICAgICAgaW50ICgqKShjb25zdCB2
b2lkICosIGNvbnN0IHZvaWQgKikpOwpleHRlcm4gaW50IHJhbmQodm9pZCk7CmV4dGVybiB2b2lk
ICpyZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgc3JhbmQodW5zaWduZWQgaW50
KTsKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QoY29uc3QgY2hhciAqLCBjaGFyICoqKTsKZXh0ZXJuIGxv
bmcgaW50IHN0cnRvbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CmV4dGVybiB1bnNpZ25l
ZCBsb25nIGludCBzdHJ0b3VsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0ZXJuIGlu
dCBzeXN0ZW0oY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCB3Y3RvbWIoY2hhciAqLCB3Y2hhcl90
KTsKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyhjaGFyICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90
KTsKIyAxNzIgIi9zcGFjZS9ob21lL21hcmsvY29tcGlsYXRvcml1bS9nY2MvZ2NjLTMuMS0yMDAy
MDYyMC5vYmovZ2NjL2luY2x1ZGUvaXNvL3N0ZGxpYl9pc28uaCIgMyA0Cn0KIyAxOSAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAx
IDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAo
Iyl3YWl0LmgJMS4yMQk5Ny8wNC8wOCBTTUkiIAoKCgojIDEgIi9zcGFjZS9ob21lL21hcmsvY29t
cGlsYXRvcml1bS9nY2MvZ2NjLTMuMS0yMDAyMDYyMC5vYmovZ2NjL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDEgMyA0CiMgMjUgIi9zcGFjZS9ob21lL21hcmsvY29tcGlsYXRvcml1bS9nY2MvZ2NjLTMu
MS0yMDAyMDYyMC5vYmovZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAojcHJhZ21hIGlkZW50
ICJAKCMpdHlwZXMuaAkxLjY3CTAxLzA3LzA3IFNNSSIKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L3N5cy9tYWNodHlwZXMuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9tYWNodHlwZXMu
aCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyltYWNodHlwZXMuaAkxLjEzCTk5LzA1LzA0IFNNSSIK
CgoKCmV4dGVybiAiQyIgewojIDMzICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5oIiAzIDQK
dHlwZWRlZiBzdHJ1Y3QgX2xhYmVsX3QgeyBsb25nIHZhbFsyXTsgfSBsYWJlbF90OwoKCgp0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgbG9ja190OwoKCn0KIyAzNCAiL3NwYWNlL2hvbWUvbWFyay9jb21w
aWxhdG9yaXVtL2djYy9nY2MtMy4xLTIwMDIwNjIwLm9iai9nY2MvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMiAzIDQKIyA0NSAiL3NwYWNlL2hvbWUvbWFyay9jb21waWxhdG9yaXVtL2djYy9nY2MtMy4x
LTIwMDIwNjIwLm9iai9nY2MvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNs
dWRlL3N5cy9pbnRfdHlwZXMuaCIgMSAzIDQKIyA5ICIvdXNyL2luY2x1ZGUvc3lzL2ludF90eXBl
cy5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWludF90eXBlcy5oCTEuNgk5Ny8wOC8yMCBTTUki
CiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvaW50X3R5cGVzLmgiIDMgNApleHRlcm4gIkMiIHsKIyA2
MiAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0CnR5cGVkZWYgY2hhciBpbnQ4X3Q7
CgoKCgoKdHlwZWRlZiBzaG9ydCBpbnQxNl90Owp0eXBlZGVmIGludCBpbnQzMl90OwoKdHlwZWRl
ZiBsb25nIGludDY0X3Q7CgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90Owp0eXBl
ZGVmIHVuc2lnbmVkIHNob3J0IHVpbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJf
dDsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50NjRfdDsKIyA5NCAiL3Vzci9pbmNsdWRlL3N5
cy9pbnRfdHlwZXMuaCIgMyA0CnR5cGVkZWYgaW50NjRfdCBpbnRtYXhfdDsKdHlwZWRlZiB1aW50
NjRfdCB1aW50bWF4X3Q7CiMgMTA3ICIvdXNyL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQK
dHlwZWRlZiBsb25nIGludHB0cl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludHB0cl90Owoj
IDExOSAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0CnR5cGVkZWYgY2hhciBpbnRf
bGVhc3Q4X3Q7CgoKCgoKdHlwZWRlZiBzaG9ydCBpbnRfbGVhc3QxNl90Owp0eXBlZGVmIGludCBp
bnRfbGVhc3QzMl90OwoKdHlwZWRlZiBsb25nIGludF9sZWFzdDY0X3Q7CgoKCgoKCnR5cGVkZWYg
dW5zaWduZWQgY2hhciB1aW50X2xlYXN0OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnRf
bGVhc3QxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X2xlYXN0MzJfdDsKCnR5cGVkZWYg
dW5zaWduZWQgbG9uZyB1aW50X2xlYXN0NjRfdDsKCgoKCgoKCn0KIyA0NiAiL3NwYWNlL2hvbWUv
bWFyay9jb21waWxhdG9yaXVtL2djYy9nY2MtMy4xLTIwMDIwNjIwLm9iai9nY2MvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMiAzIDQKCgoKCgoKCmV4dGVybiAiQyIgewojIDYyICIvc3BhY2UvaG9tZS9t
YXJrL2NvbXBpbGF0b3JpdW0vZ2NjL2djYy0zLjEtMjAwMjA2MjAub2JqL2djYy9pbmNsdWRlL3N5
cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBsb25nIGxvbmcgbG9uZ2xvbmdfdDsKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIGxvbmcgdV9sb25nbG9uZ190OwojIDgyICIvc3BhY2UvaG9tZS9tYXJrL2NvbXBp
bGF0b3JpdW0vZ2NjL2djYy0zLjEtMjAwMjA2MjAub2JqL2djYy9pbmNsdWRlL3N5cy90eXBlcy5o
IiAzIDQKdHlwZWRlZiBpbnQzMl90IHRfc2NhbGFyX3Q7CnR5cGVkZWYgdWludDMyX3QgdF91c2Nh
bGFyX3Q7CiMgOTIgIi9zcGFjZS9ob21lL21hcmsvY29tcGlsYXRvcml1bS9nY2MvZ2NjLTMuMS0y
MDAyMDYyMC5vYmovZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgdWNoYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2hvcnRfdDsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgdWludF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWxvbmdfdDsKCnR5cGVk
ZWYgY2hhciAqY2FkZHJfdDsKdHlwZWRlZiBsb25nIGRhZGRyX3Q7CnR5cGVkZWYgc2hvcnQgY250
X3Q7CiMgMTI3ICIvc3BhY2UvaG9tZS9tYXJrL2NvbXBpbGF0b3JpdW0vZ2NjL2djYy0zLjEtMjAw
MjA2MjAub2JqL2djYy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiB1bG9uZ190IHBm
bl90Owp0eXBlZGVmIHVsb25nX3QgcGdjbnRfdDsKdHlwZWRlZiBsb25nIHNwZ2NudF90OwoKdHlw
ZWRlZiB1Y2hhcl90IHVzZV90Owp0eXBlZGVmIHNob3J0IHN5c2lkX3Q7CnR5cGVkZWYgc2hvcnQg
aW5kZXhfdDsKdHlwZWRlZiB2b2lkICp0aW1lb3V0X2lkX3Q7CnR5cGVkZWYgdm9pZCAqYnVmY2Fs
bF9pZF90OwojIDE0OSAiL3NwYWNlL2hvbWUvbWFyay9jb21waWxhdG9yaXVtL2djYy9nY2MtMy4x
LTIwMDIwNjIwLm9iai9nY2MvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgbG9uZyBv
ZmZfdDsKCgoKCgoKdHlwZWRlZiBvZmZfdCBvZmY2NF90OwojIDE2NSAiL3NwYWNlL2hvbWUvbWFy
ay9jb21waWxhdG9yaXVtL2djYy9nY2MtMy4xLTIwMDIwNjIwLm9iai9nY2MvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMyA0CnR5cGVkZWYgdWxvbmdfdCBpbm9fdDsKdHlwZWRlZiBsb25nIGJsa2NudF90
Owp0eXBlZGVmIHVsb25nX3QgZnNibGtjbnRfdDsKdHlwZWRlZiB1bG9uZ190IGZzZmlsY250X3Q7
CiMgMTc4ICIvc3BhY2UvaG9tZS9tYXJrL2NvbXBpbGF0b3JpdW0vZ2NjL2djYy0zLjEtMjAwMjA2
MjAub2JqL2djYy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBpbm9fdCBpbm82NF90
Owp0eXBlZGVmIGJsa2NudF90IGJsa2NudDY0X3Q7CnR5cGVkZWYgZnNibGtjbnRfdCBmc2Jsa2Nu
dDY0X3Q7CnR5cGVkZWYgZnNmaWxjbnRfdCBmc2ZpbGNudDY0X3Q7CiMgMTkxICIvc3BhY2UvaG9t
ZS9tYXJrL2NvbXBpbGF0b3JpdW0vZ2NjL2djYy0zLjEtMjAwMjA2MjAub2JqL2djYy9pbmNsdWRl
L3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBpbnQgYmxrc2l6ZV90OwoKCgoKCnR5cGVkZWYgZW51
bSB7IF9CX0ZBTFNFLCBfQl9UUlVFIH0gYm9vbGVhbl90OwojIDIxMCAiL3NwYWNlL2hvbWUvbWFy
ay9jb21waWxhdG9yaXVtL2djYy9nY2MtMy4xLTIwMDIwNjIwLm9iai9nY2MvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMyA0CnR5cGVkZWYgaW50NjRfdCBwYWQ2NF90Owp0eXBlZGVmIHVpbnQ2NF90IHVw
YWQ2NF90OwojIDIyMyAiL3NwYWNlL2hvbWUvbWFyay9jb21waWxhdG9yaXVtL2djYy9nY2MtMy4x
LTIwMDIwNjIwLm9iai9nY2MvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgbG9uZ2xv
bmdfdCBvZmZzZXRfdDsKdHlwZWRlZiB1X2xvbmdsb25nX3QgdV9vZmZzZXRfdDsKdHlwZWRlZiB1
X2xvbmdsb25nX3QgbGVuX3Q7CnR5cGVkZWYgbG9uZ2xvbmdfdCBkaXNrYWRkcl90OwojIDI0NCAi
L3NwYWNlL2hvbWUvbWFyay9jb21waWxhdG9yaXVtL2djYy9nY2MtMy4xLTIwMDIwNjIwLm9iai9n
Y2MvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdW5pb24gewogICAgICAgIG9mZnNl
dF90IF9mOwogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICBpbnQzMl90IF91OwogICAg
ICAgICAgICAgICAgaW50MzJfdCBfbDsKICAgICAgICB9IF9wOwp9IGxsb2ZmX3Q7CiMgMjY0ICIv
c3BhY2UvaG9tZS9tYXJrL2NvbXBpbGF0b3JpdW0vZ2NjL2djYy0zLjEtMjAwMjA2MjAub2JqL2dj
Yy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiB1bmlvbiB7CiAgICAgICAgZGlza2Fk
ZHJfdCBfZjsKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgaW50MzJfdCBfdTsKICAg
ICAgICAgICAgICAgIGludDMyX3QgX2w7CiAgICAgICAgfSBfcDsKfSBsbGRhZGRyX3Q7CgoKdHlw
ZWRlZiB1aW50X3Qga19mbHRzZXRfdDsKIyAyODUgIi9zcGFjZS9ob21lL21hcmsvY29tcGlsYXRv
cml1bS9nY2MvZ2NjLTMuMS0yMDAyMDYyMC5vYmovZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg
NAp0eXBlZGVmIGludCBpZF90OwojIDI5NCAiL3NwYWNlL2hvbWUvbWFyay9jb21waWxhdG9yaXVt
L2djYy9nY2MtMy4xLTIwMDIwNjIwLm9iai9nY2MvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5
cGVkZWYgdWludF90IHVzZWNvbmRzX3Q7CgoKCnR5cGVkZWYgbG9uZyBzdXNlY29uZHNfdDsKCgoK
CgoKdHlwZWRlZiB1aW50X3QgbWFqb3JfdDsKdHlwZWRlZiB1aW50X3QgbWlub3JfdDsKIyAzMTUg
Ii9zcGFjZS9ob21lL21hcmsvY29tcGlsYXRvcml1bS9nY2MvZ2NjLTMuMS0yMDAyMDYyMC5vYmov
Z2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHNob3J0IHByaV90OwojIDMyOCAi
L3NwYWNlL2hvbWUvbWFyay9jb21waWxhdG9yaXVtL2djYy9nY2MtMy4xLTIwMDIwNjIwLm9iai9n
Y2MvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdXNob3J0X3Qgb19tb2RlX3Q7CnR5
cGVkZWYgc2hvcnQgb19kZXZfdDsKdHlwZWRlZiB1c2hvcnRfdCBvX3VpZF90Owp0eXBlZGVmIG9f
dWlkX3Qgb19naWRfdDsKdHlwZWRlZiBzaG9ydCBvX25saW5rX3Q7CnR5cGVkZWYgc2hvcnQgb19w
aWRfdDsKdHlwZWRlZiB1c2hvcnRfdCBvX2lub190OwoKCgoKCnR5cGVkZWYgaW50IGtleV90OwoK
dHlwZWRlZiB1aW50X3QgbW9kZV90OwoKCgoKCgoKdHlwZWRlZiBpbnQgdWlkX3Q7CgoKCgoKdHlw
ZWRlZiB1aWRfdCBnaWRfdDsKCnR5cGVkZWYgaWRfdCB0YXNraWRfdDsKdHlwZWRlZiBpZF90IHBy
b2ppZF90OwoKCgoKCgp0eXBlZGVmIHVpbnRfdCBwdGhyZWFkX3Q7CnR5cGVkZWYgdWludF90IHB0
aHJlYWRfa2V5X3Q7Cgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9tdXRleCB7CiAgICAgICAgc3Ry
dWN0IHsKICAgICAgICAgICAgICAgIHVpbnQxNl90IF9fcHRocmVhZF9tdXRleF9mbGFnMTsKICAg
ICAgICAgICAgICAgIHVpbnQ4X3QgX19wdGhyZWFkX211dGV4X2ZsYWcyOwogICAgICAgICAgICAg
ICAgdWludDhfdCBfX3B0aHJlYWRfbXV0ZXhfY2VpbGluZzsKICAgICAgICAgICAgICAgIHVpbnQx
Nl90IF9fcHRocmVhZF9tdXRleF90eXBlOwogICAgICAgICAgICAgICAgdWludDE2X3QgX19wdGhy
ZWFkX211dGV4X21hZ2ljOwogICAgICAgIH0gX19wdGhyZWFkX211dGV4X2ZsYWdzOwogICAgICAg
IHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQ4X3QgX19wdGhyZWFkX211dGV4X3BhZFs4XTsKICAgICAgICAgICAgICAgIH0gX19wdGhy
ZWFkX211dGV4X2xvY2s2NDsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IF9fcHRocmVhZF9vd25lcnBpZDsKICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3QgX19wdGhyZWFkX2xvY2t3b3JkOwogICAgICAgICAgICAgICAgfSBfX3B0
aHJlYWRfbXV0ZXhfbG9jazMyOwogICAgICAgICAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX211
dGV4X293bmVyNjQ7CiAgICAgICAgfSBfX3B0aHJlYWRfbXV0ZXhfbG9jazsKICAgICAgICB1cGFk
NjRfdCBfX3B0aHJlYWRfbXV0ZXhfZGF0YTsKfSBwdGhyZWFkX211dGV4X3Q7Cgp0eXBlZGVmIHN0
cnVjdCBfcHRocmVhZF9jb25kIHsKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdWlu
dDhfdCBfX3B0aHJlYWRfY29uZF9mbGFnWzRdOwogICAgICAgICAgICAgICAgdWludDE2X3QgX19w
dGhyZWFkX2NvbmRfdHlwZTsKICAgICAgICAgICAgICAgIHVpbnQxNl90IF9fcHRocmVhZF9jb25k
X21hZ2ljOwogICAgICAgIH0gX19wdGhyZWFkX2NvbmRfZmxhZ3M7CiAgICAgICAgdXBhZDY0X3Qg
X19wdGhyZWFkX2NvbmRfZGF0YTsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKCnR5cGVkZWYgc3RydWN0
IF9wdGhyZWFkX3J3bG9jayB7CiAgICAgICAgaW50MzJfdCBfX3B0aHJlYWRfcndsb2NrX3JlYWRl
cnM7CiAgICAgICAgdWludDE2X3QgX19wdGhyZWFkX3J3bG9ja190eXBlOwogICAgICAgIHVpbnQx
Nl90IF9fcHRocmVhZF9yd2xvY2tfbWFnaWM7CiAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX3J3
bG9ja19wYWQxWzNdOwogICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9yd2xvY2tfcGFkMlsyXTsK
ICAgICAgICB1cGFkNjRfdCBfX3B0aHJlYWRfcndsb2NrX3BhZDNbMl07Cn0gcHRocmVhZF9yd2xv
Y2tfdDsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB2b2lkICpfX3B0aHJlYWRfYXR0cnA7
Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgdm9pZCAqX19w
dGhyZWFkX211dGV4YXR0cnA7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoKCnR5cGVkZWYgc3Ry
dWN0IHsKICAgICAgICB2b2lkICpfX3B0aHJlYWRfY29uZGF0dHJwOwp9IHB0aHJlYWRfY29uZGF0
dHJfdDsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB1cGFkNjRfdCBfX3B0aHJlYWRfb25j
ZV9wYWRbNF07Cn0gcHRocmVhZF9vbmNlX3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg
IHZvaWQgKl9fcHRocmVhZF9yd2xvY2thdHRycDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCnR5
cGVkZWYgdWxvbmdfdCBkZXZfdDsKCgp0eXBlZGVmIHVpbnRfdCBubGlua190Owp0eXBlZGVmIGlu
dCBwaWRfdDsKIyA0NzcgIi9zcGFjZS9ob21lL21hcmsvY29tcGlsYXRvcml1bS9nY2MvZ2NjLTMu
MS0yMDAyMDYyMC5vYmovZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcg
c3NpemVfdDsKCgoKCgoKCnR5cGVkZWYgbG9uZyB0aW1lX3Q7CgoKCgp0eXBlZGVmIGxvbmcgY2xv
Y2tfdDsKCgoKCnR5cGVkZWYgaW50IGNsb2NraWRfdDsKCgoKCnR5cGVkZWYgaW50IHRpbWVyX3Q7
CgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1bmNoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hv
cnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50Owp0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgdWxvbmc7CiMgNTYxICIvc3BhY2UvaG9tZS9tYXJrL2NvbXBpbGF0b3JpdW0vZ2NjL2djYy0z
LjEtMjAwMjA2MjAub2JqL2djYy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiB1bnNp
Z25lZCBjaGFyIHVfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1X3Nob3J0Owp0eXBlZGVm
IHVuc2lnbmVkIGludCB1X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVfbG9uZzsKdHlwZWRl
ZiBzdHJ1Y3QgX3F1YWQgeyBpbnQgdmFsWzJdOyB9IHF1YWRfdDsKdHlwZWRlZiBxdWFkX3QgcXVh
ZDsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMgNAojIDEyICIvdXNy
L2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXNlbGVjdC5oCTEu
MTYJOTgvMDQvMjcgU01JIiAKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMyA0
CiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXRp
bWUuaAkyLjY2CTAxLzAxLzE3IFNNSSIgCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAz
IDQKZXh0ZXJuICJDIiB7CiMgNDkgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKc3RydWN0
IHRpbWV2YWwgewogICAgICAgIHRpbWVfdCB0dl9zZWM7CiAgICAgICAgc3VzZWNvbmRzX3QgdHZf
dXNlYzsKfTsKIyA4MiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNApzdHJ1Y3QgdGltZXpv
bmUgewogICAgICAgIGludCB0el9taW51dGVzd2VzdDsKICAgICAgICBpbnQgdHpfZHN0dGltZTsK
fTsKCgoKCgp9CiMgMTAwICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CiMgMSAiL3NwYWNl
L2hvbWUvbWFyay9jb21waWxhdG9yaXVtL2djYy9nY2MtMy4xLTIwMDIwNjIwLm9iai9nY2MvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQKIyAxMDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAy
IDMgNAoKCgpleHRlcm4gIkMiIHsKIyAxNTUgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQK
c3RydWN0IGl0aW1lcnZhbCB7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgaXRfaW50ZXJ2YWw7CiAg
ICAgICAgc3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7Cn07CiMgMjAzICIvdXNyL2luY2x1ZGUvc3lz
L3RpbWUuaCIgMyA0CnR5cGVkZWYgbG9uZ2xvbmdfdCBocnRpbWVfdDsKIyAzMjAgIi91c3IvaW5j
bHVkZS9zeXMvdGltZS5oIiAzIDQKaW50IGFkanRpbWUoc3RydWN0IHRpbWV2YWwgKiwgc3RydWN0
IHRpbWV2YWwgKik7CiMgMzMxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CmludCBnZXRp
dGltZXIoaW50LCBzdHJ1Y3QgaXRpbWVydmFsICopOwppbnQgdXRpbWVzKGNvbnN0IGNoYXIgKiwg
Y29uc3Qgc3RydWN0IHRpbWV2YWwgKik7CgppbnQgc2V0aXRpbWVyKGludCwgY29uc3Qgc3RydWN0
IGl0aW1lcnZhbCAqLCBzdHJ1Y3QgaXRpbWVydmFsICopOwojIDM2OSAiL3Vzci9pbmNsdWRlL3N5
cy90aW1lLmgiIDMgNAppbnQgc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICosIHZvaWQgKik7
CgpocnRpbWVfdCBnZXRocnRpbWUodm9pZCk7CmhydGltZV90IGdldGhydnRpbWUodm9pZCk7CiMg
Mzg5ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CmludCBnZXR0aW1lb2ZkYXkoc3RydWN0
IHRpbWV2YWwgKiwgdm9pZCAqKTsKIyA0MTAgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQK
IyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXRpbWUuaAkxLjM5CTk5LzA4LzEwIFNNSSIgCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2lzby90aW1lX2lzby5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUv
aXNvL3RpbWVfaXNvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpdGltZV9pc28uaAkxLjEJOTkv
MDgvMDkgU01JIiAKCgoKCmV4dGVybiAiQyIgewojIDY5ICIvdXNyL2luY2x1ZGUvaXNvL3RpbWVf
aXNvLmgiIDMgNApzdHJ1Y3QgdG0gewogICAgICAgIGludCB0bV9zZWM7CiAgICAgICAgaW50IHRt
X21pbjsKICAgICAgICBpbnQgdG1faG91cjsKICAgICAgICBpbnQgdG1fbWRheTsKICAgICAgICBp
bnQgdG1fbW9uOwogICAgICAgIGludCB0bV95ZWFyOwogICAgICAgIGludCB0bV93ZGF5OwogICAg
ICAgIGludCB0bV95ZGF5OwogICAgICAgIGludCB0bV9pc2RzdDsKfTsKCgoKCmV4dGVybiBjaGFy
ICphc2N0aW1lKGNvbnN0IHN0cnVjdCB0bSAqKTsKZXh0ZXJuIGNsb2NrX3QgY2xvY2sodm9pZCk7
CmV4dGVybiBjaGFyICpjdGltZShjb25zdCB0aW1lX3QgKik7CmV4dGVybiBkb3VibGUgZGlmZnRp
bWUodGltZV90LCB0aW1lX3QpOwpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUoY29uc3QgdGltZV90
ICopOwpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUoY29uc3QgdGltZV90ICopOwpleHRlcm4g
dGltZV90IG1rdGltZShzdHJ1Y3QgdG0gKik7CmV4dGVybiB0aW1lX3QgdGltZSh0aW1lX3QgKik7
CmV4dGVybiBzaXplX3Qgc3RyZnRpbWUoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgY29u
c3Qgc3RydWN0IHRtICopOwojIDExMyAiL3Vzci9pbmNsdWRlL2lzby90aW1lX2lzby5oIiAzIDQK
fQojIDIxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMgNAojIDQzICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAzIDQKZXh0ZXJuICJDIiB7CiMgNjAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRl
cm4gc3RydWN0IHRtICpnbXRpbWVfcihjb25zdCB0aW1lX3QgKiwgc3RydWN0IHRtICopOwpleHRl
cm4gc3RydWN0IHRtICpsb2NhbHRpbWVfcihjb25zdCB0aW1lX3QgKiwgc3RydWN0IHRtICopOwoK
CgoKCmV4dGVybiBjaGFyICpzdHJwdGltZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc3Ry
dWN0IHRtICopOwojIDgzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKIyAxICIvdXNyL2luY2x1
ZGUvc3lzL3RpbWVfaW1wbC5oIiAxIDMgNAojIDE1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1w
bC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXRpbWVfaW1wbC5oCTEuNQk5OS8xMC8wNSBTTUki
CgoKCgpleHRlcm4gIkMiIHsKIyAzNiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIgMyA0
CnR5cGVkZWYgc3RydWN0IHRpbWVzcGVjIHsKICAgICAgICB0aW1lX3QgdHZfc2VjOwogICAgICAg
IGxvbmcgdHZfbnNlYzsKfSB0aW1lc3BlY190OwojIDYwICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVf
aW1wbC5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgdGltZXNwZWMgdGltZXN0cnVjX3Q7CiMgNzkgIi91
c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBpdGltZXJzcGVj
IHsKICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICAgICAgc3RydWN0IHRp
bWVzcGVjIGl0X3ZhbHVlOwp9IGl0aW1lcnNwZWNfdDsKIyAxMzYgIi91c3IvaW5jbHVkZS9zeXMv
dGltZV9pbXBsLmgiIDMgNAp9CiMgODQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMyA0CiMgOTgg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAp1bmlvbiBzaWd2YWwgewogICAgICAgIGludCBzaXZh
bF9pbnQ7CiAgICAgICAgdm9pZCAqc2l2YWxfcHRyOwp9OwoKCgoKc3RydWN0IHNpZ2V2ZW50IHsK
ICAgICAgICBpbnQgc2lnZXZfbm90aWZ5OwogICAgICAgIGludCBzaWdldl9zaWdubzsKICAgICAg
ICB1bmlvbiBzaWd2YWwgc2lnZXZfdmFsdWU7CiAgICAgICAgdm9pZCAoKnNpZ2V2X25vdGlmeV9m
dW5jdGlvbikodW5pb24gc2lndmFsKTsKICAgICAgICBwdGhyZWFkX2F0dHJfdCAqc2lnZXZfbm90
aWZ5X2F0dHJpYnV0ZXM7CiAgICAgICAgaW50IF9fc2lnZXZfcGFkMjsKfTsKCgpleHRlcm4gaW50
IGNsb2NrX2dldHJlcyhjbG9ja2lkX3QsIHN0cnVjdCB0aW1lc3BlYyAqKTsKZXh0ZXJuIGludCBj
bG9ja19nZXR0aW1lKGNsb2NraWRfdCwgc3RydWN0IHRpbWVzcGVjICopOwpleHRlcm4gaW50IGNs
b2NrX3NldHRpbWUoY2xvY2tpZF90LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBp
bnQgdGltZXJfY3JlYXRlKGNsb2NraWRfdCwgc3RydWN0IHNpZ2V2ZW50ICosIHRpbWVyX3QgKik7
CmV4dGVybiBpbnQgdGltZXJfZGVsZXRlKHRpbWVyX3QpOwpleHRlcm4gaW50IHRpbWVyX2dldG92
ZXJydW4odGltZXJfdCk7CmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSh0aW1lcl90LCBzdHJ1Y3Qg
aXRpbWVyc3BlYyAqKTsKZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGludCwgY29u
c3Qgc3RydWN0IGl0aW1lcnNwZWMgKiwKICAgICAgICAgICAgICAgIHN0cnVjdCBpdGltZXJzcGVj
ICopOwpleHRlcm4gaW50IG5hbm9zbGVlcChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0
IHRpbWVzcGVjICopOwoKCgoKZXh0ZXJuIHZvaWQgdHpzZXQodm9pZCk7CgpleHRlcm4gY2hhciAq
dHpuYW1lWzJdOwoKCmV4dGVybiBsb25nIF9zeXNjb25mKGludCk7CgoKCgoKCmV4dGVybiBsb25n
IHRpbWV6b25lOwpleHRlcm4gaW50IGRheWxpZ2h0OwojIDE1NiAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMyA0CmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUoY29uc3QgY2hhciAqKTsKCgoKCgoKZXh0
ZXJuIGludCBnZXRkYXRlX2VycjsKIyAyNTAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRl
cm4gY2hhciAqYXNjdGltZV9yKGNvbnN0IHN0cnVjdCB0bSAqLCBjaGFyICopOwpleHRlcm4gY2hh
ciAqY3RpbWVfcihjb25zdCB0aW1lX3QgKiwgY2hhciAqKTsKI3ByYWdtYSByZWRlZmluZV9leHRu
YW1lIGN0aW1lX3IgX19wb3NpeF9jdGltZV9yCiNwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSBhc2N0
aW1lX3IgX19wb3NpeF9hc2N0aW1lX3IKIyAzMTggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAp9
CiMgNDExICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzIDQKIyA0MjMgIi91c3IvaW5jbHVk
ZS9zeXMvdGltZS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMgNAoj
IDQyNCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0CgoKCgoKfQojIDE4ICIvdXNyL2lu
Y2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKIyA0NSAiL3Vzci9pbmNs
dWRlL3N5cy9zZWxlY3QuaCIgMyA0CnR5cGVkZWYgbG9uZyBmZF9tYXNrOwoKdHlwZWRlZiBsb25n
IGZkc19tYXNrOwojIDczICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzIDQKdHlwZWRlZiBz
dHJ1Y3QgZmRfc2V0IHsKCgoKICAgICAgICBsb25nIGZkc19iaXRzWygoKDY1NTM2KSsoKChzaXpl
b2YgKGZkc19tYXNrKSAqIDgpKS0xKSkvKChzaXplb2YgKGZkc19tYXNrKSAqIDgpKSldOwp9IGZk
X3NldDsKIyA5NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CmV4dGVybiBpbnQgc2Vs
ZWN0KGludCwgZmRfc2V0ICosIGZkX3NldCAqLCBmZF9zZXQgKiwgc3RydWN0IHRpbWV2YWwgKik7
CgoKCgoKCn0KIyA1NzQgIi9zcGFjZS9ob21lL21hcmsvY29tcGlsYXRvcml1bS9nY2MvZ2NjLTMu
MS0yMDAyMDYyMC5vYmovZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CiMgNTkwICIvc3Bh
Y2UvaG9tZS9tYXJrL2NvbXBpbGF0b3JpdW0vZ2NjL2djYy0zLjEtMjAwMjA2MjAub2JqL2djYy9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKfQojIDIxICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIg
MiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDEgMyA0CiMgMTYgIi91
c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylyZXNvdXJj
ZS5oCTEuMjUJOTgvMDYvMzAgU01JIiAKCgoKCgoKCmV4dGVybiAiQyIgewojIDUzICIvdXNyL2lu
Y2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcmxpbV90Owoj
IDEwMiAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQKc3RydWN0IHJsaW1pdCB7CiAg
ICAgICAgcmxpbV90IHJsaW1fY3VyOwogICAgICAgIHJsaW1fdCBybGltX21heDsKfTsKCgoKCnR5
cGVkZWYgdV9sb25nbG9uZ190IHJsaW02NF90OwoKCgoKCnN0cnVjdCBybGltaXQ2NCB7CiAgICAg
ICAgcmxpbTY0X3QgcmxpbV9jdXI7CiAgICAgICAgcmxpbTY0X3QgcmxpbV9tYXg7Cn07CiMgMTQz
ICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNApzdHJ1Y3QgcnVzYWdlIHsKICAgICAg
ICBzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsKICAgICAgICBzdHJ1Y3QgdGltZXZhbCBydV9zdGlt
ZTsKICAgICAgICBsb25nIHJ1X21heHJzczsKICAgICAgICBsb25nIHJ1X2l4cnNzOwogICAgICAg
IGxvbmcgcnVfaWRyc3M7CiAgICAgICAgbG9uZyBydV9pc3JzczsKICAgICAgICBsb25nIHJ1X21p
bmZsdDsKICAgICAgICBsb25nIHJ1X21hamZsdDsKICAgICAgICBsb25nIHJ1X25zd2FwOwogICAg
ICAgIGxvbmcgcnVfaW5ibG9jazsKICAgICAgICBsb25nIHJ1X291YmxvY2s7CiAgICAgICAgbG9u
ZyBydV9tc2dzbmQ7CiAgICAgICAgbG9uZyBydV9tc2dyY3Y7CiAgICAgICAgbG9uZyBydV9uc2ln
bmFsczsKICAgICAgICBsb25nIHJ1X252Y3N3OwogICAgICAgIGxvbmcgcnVfbml2Y3N3Owp9Owoj
IDE4MiAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQKI3ByYWdtYSByZWRlZmluZV9l
eHRuYW1lIHNldHJsaW1pdDY0IHNldHJsaW1pdAojcHJhZ21hIHJlZGVmaW5lX2V4dG5hbWUgZ2V0
cmxpbWl0NjQgZ2V0cmxpbWl0CiMgMTkzICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMg
NApleHRlcm4gaW50IHNldHJsaW1pdChpbnQsIGNvbnN0IHN0cnVjdCBybGltaXQgKik7CmV4dGVy
biBpbnQgZ2V0cmxpbWl0KGludCwgc3RydWN0IHJsaW1pdCAqKTsKCgoKCmV4dGVybiBpbnQgc2V0
cmxpbWl0NjQoaW50LCBjb25zdCBzdHJ1Y3QgcmxpbWl0NjQgKik7CmV4dGVybiBpbnQgZ2V0cmxp
bWl0NjQoaW50LCBzdHJ1Y3QgcmxpbWl0NjQgKik7CgoKZXh0ZXJuIGludCBnZXRwcmlvcml0eShp
bnQsIGlkX3QpOwpleHRlcm4gaW50IHNldHByaW9yaXR5KGludCwgaWRfdCwgaW50KTsKZXh0ZXJu
IGludCBnZXRydXNhZ2UoaW50LCBzdHJ1Y3QgcnVzYWdlICopOwojIDIyOCAiL3Vzci9pbmNsdWRl
L3N5cy9yZXNvdXJjZS5oIiAzIDQKfQojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAz
IDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNs
dWRlL3N5cy9zaWdpbmZvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc2lnaW5mby5oCTEuNTQJ
OTgvMDMvMjcgU01JIiAKCgoKCgpleHRlcm4gIkMiIHsKIyAxMjYgIi91c3IvaW5jbHVkZS9zeXMv
c2lnaW5mby5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL21hY2hzaWcuaCIgMSAzIDQKIyAx
NiAiL3Vzci9pbmNsdWRlL3N5cy9tYWNoc2lnLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpbWFj
aHNpZy5oCTEuMTUJOTkvMDgvMTUgU01JIgoKCgoKZXh0ZXJuICJDIiB7CiMgMTA3ICIvdXNyL2lu
Y2x1ZGUvc3lzL21hY2hzaWcuaCIgMyA0Cn0KIyAxMjcgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5m
by5oIiAyIDMgNAojIDIyMSAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDMgNAp0eXBlZGVm
IHN0cnVjdCBzaWdpbmZvIHsKCgoKICAgICAgICBpbnQgc2lfc2lnbm87CiAgICAgICAgaW50IHNp
X2NvZGU7CiAgICAgICAgaW50IHNpX2Vycm5vOwoKICAgICAgICBpbnQgc2lfcGFkOwoKICAgICAg
ICB1bmlvbiB7CgogICAgICAgICAgICAgICAgaW50IF9fcGFkWygoMjU2IC8gc2l6ZW9mIChpbnQp
KSAtIDQpXTsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAg
ICBwaWRfdCBfX3BpZDsKICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aWRfdCBfX3VpZDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5pb24gc2lndmFsIF9fdmFsdWU7CgoKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBfX2tpbGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrX3QgX191
dGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3N0YXR1
czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrX3QgX19zdGlt
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF9fY2xkOwogICAgICAgICAgICAg
ICAgICAgICAgICB9IF9fcGRhdGE7CiAgICAgICAgICAgICAgICB9IF9fcHJvYzsKCiAgICAgICAg
ICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2FkZHI7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX3RyYXBubzsKICAgICAgICAgICAgICAgICAgICAg
ICAgY2FkZHJfdCBfX3BjOwogICAgICAgICAgICAgICAgfSBfX2ZhdWx0OwoKICAgICAgICAgICAg
ICAgIHN0cnVjdCB7CgogICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19mZDsKICAgICAgICAg
ICAgICAgICAgICAgICAgbG9uZyBfX2JhbmQ7CiAgICAgICAgICAgICAgICB9IF9fZmlsZTsKCiAg
ICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBjYWRkcl90IF9f
ZmFkZHI7CgoKICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0cnVjX3QgX190c3RhbXA7CgoK
CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IF9fc3lzY2FsbDsKICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciBfX25zeXNhcmc7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19m
YXVsdDsKICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfX3N5c2FyZ1s4XTsKICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF9fbXN0YXRlWzEwXTsKICAgICAgICAgICAgICAgIH0gX19wcm9m
OwoKICAgICAgICB9IF9fZGF0YTsKCn0gc2lnaW5mb190OwojIDM1NCAiL3Vzci9pbmNsdWRlL3N5
cy9zaWdpbmZvLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBrX3NpZ2luZm8gewogICAgICAgIGludCBz
aV9zaWdubzsKICAgICAgICBpbnQgc2lfY29kZTsKICAgICAgICBpbnQgc2lfZXJybm87CgogICAg
ICAgIGludCBzaV9wYWQ7CgogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHBpZF90IF9fcGlkOwogICAgICAgICAgICAgICAgICAg
ICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZF90IF9fdWlkOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gc2lndmFsIF9fdmFsdWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBfX2tpbGw7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsb2NrX3QgX191dGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX3N0YXR1czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsb2NrX3QgX19zdGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF9f
Y2xkOwogICAgICAgICAgICAgICAgICAgICAgICB9IF9fcGRhdGE7CiAgICAgICAgICAgICAgICB9
IF9fcHJvYzsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICpfX2FkZHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3RyYXBubzsKICAg
ICAgICAgICAgICAgICAgICAgICAgY2FkZHJfdCBfX3BjOwogICAgICAgICAgICAgICAgfSBfX2Zh
dWx0OwoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CgogICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19mZDsKICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfX2JhbmQ7CiAgICAgICAgICAg
ICAgICB9IF9fZmlsZTsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAg
ICAgICAgICBjYWRkcl90IF9fZmFkZHI7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVz
dHJ1Y190IF9fdHN0YW1wOwoKCgogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfX3N5c2Nh
bGw7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19uc3lzYXJnOwogICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyIF9fZmF1bHQ7CgoKCiAgICAgICAgICAgICAgICB9IF9fcHJvZjsKCiAg
ICAgICAgfSBfX2RhdGE7Cgp9IGtfc2lnaW5mb190OwoKdHlwZWRlZiBzdHJ1Y3Qgc2lncXVldWUg
ewogICAgICAgIHN0cnVjdCBzaWdxdWV1ZSAqc3FfbmV4dDsKICAgICAgICBrX3NpZ2luZm9fdCBz
cV9pbmZvOwogICAgICAgIHZvaWQgKCpzcV9mdW5jKShzdHJ1Y3Qgc2lncXVldWUgKik7CiAgICAg
ICAgdm9pZCAqc3FfYmFja3B0cjsKCn0gc2lncXVldWVfdDsKIyA0NTQgIi91c3IvaW5jbHVkZS9z
eXMvc2lnaW5mby5oIiAzIDQKfQojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQK
IyAxICIvdXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRl
L3N5cy9wcm9jc2V0LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpcHJvY3NldC5oCTEuMjAJMDAv
MDIvMTQgU01JIiAKCgpleHRlcm4gIkMiIHsKIyA0MSAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0
LmgiIDMgNAp0eXBlZGVmIGVudW0KCiAgICAgICAgaWR0eXBlCgogICAgICAgICAgICAgICAgewog
ICAgICAgIFBfUElELAogICAgICAgIFBfUFBJRCwKICAgICAgICBQX1BHSUQsCgogICAgICAgIFBf
U0lELAogICAgICAgIFBfQ0lELAogICAgICAgIFBfVUlELAogICAgICAgIFBfR0lELAogICAgICAg
IFBfQUxMLAogICAgICAgIFBfTFdQSUQsCiAgICAgICAgUF9UQVNLSUQsCiAgICAgICAgUF9QUk9K
SUQKfSBpZHR5cGVfdDsKIyA2NyAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMgNAp0eXBl
ZGVmIGVudW0gaWRvcCB7CiAgICAgICAgUE9QX0RJRkYsCgoKICAgICAgICBQT1BfQU5ELAoKCiAg
ICAgICAgUE9QX09SLAoKCiAgICAgICAgUE9QX1hPUgoKCn0gaWRvcF90OwoKCgoKCgoKdHlwZWRl
ZiBzdHJ1Y3QgcHJvY3NldCB7CiAgICAgICAgaWRvcF90IHBfb3A7CgoKCgogICAgICAgIGlkdHlw
ZV90IHBfbGlkdHlwZTsKCgogICAgICAgIGlkX3QgcF9saWQ7CgogICAgICAgIGlkdHlwZV90IHBf
cmlkdHlwZTsKCgogICAgICAgIGlkX3QgcF9yaWQ7Cn0gcHJvY3NldF90OwojIDEzMiAiL3Vzci9p
bmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMgNAp9CiMgMjcgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5o
IiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKIyA4NiAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDMg
NApleHRlcm4gcGlkX3Qgd2FpdChpbnQgKik7CmV4dGVybiBwaWRfdCB3YWl0cGlkKHBpZF90LCBp
bnQgKiwgaW50KTsKCgpleHRlcm4gaW50IHdhaXRpZChpZHR5cGVfdCwgaWRfdCwgc2lnaW5mb190
ICosIGludCk7CmV4dGVybiBwaWRfdCB3YWl0MyhpbnQgKiwgaW50LCBzdHJ1Y3QgcnVzYWdlICop
OwoKCgoKZXh0ZXJuIHBpZF90IHdhaXQ0KHBpZF90LCBpbnQgKiwgaW50LCBzdHJ1Y3QgcnVzYWdl
ICopOwojIDExOCAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDMgNAp9CiMgMjMgIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMiAzIDQKIyA2NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0
ZXJuICJDIiB7CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBsb25nIGxvbmcgcXVvdDsKICAg
ICAgICBsb25nIGxvbmcgcmVtOwp9IGxsZGl2X3Q7CiMgMTAwICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDMgNAojcHJhZ21hIHJlZGVmaW5lX2V4dG5hbWUgbWtzdGVtcDY0IG1rc3RlbXAKIyAxMDkg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBpbnQgcmFuZF9yKHVuc2lnbmVkIGlu
dCAqKTsKCgpleHRlcm4gdm9pZCBfZXhpdGhhbmRsZSh2b2lkKTsKCgoKCmV4dGVybiBkb3VibGUg
ZHJhbmQ0OCh2b2lkKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpl
eHRlcm4gbG9uZyBqcmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gdm9pZCBsY29uZzQ4
KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gbG9uZyBscmFuZDQ4KHZvaWQpOwpleHRlcm4gbG9u
ZyBtcmFuZDQ4KHZvaWQpOwpleHRlcm4gbG9uZyBucmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpl
eHRlcm4gdW5zaWduZWQgc2hvcnQgKnNlZWQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJuIHZv
aWQgc3JhbmQ0OChsb25nKTsKZXh0ZXJuIGludCBwdXRlbnYoY2hhciAqKTsKZXh0ZXJuIHZvaWQg
c2V0a2V5KGNvbnN0IGNoYXIgKik7CiMgMTUwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApl
eHRlcm4gaW50IG1rc3RlbXAoY2hhciAqKTsKCgoKCmV4dGVybiBpbnQgbWtzdGVtcDY0KGNoYXIg
Kik7CgoKCgoKZXh0ZXJuIGxvbmcgYTY0bChjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqZWN2
dChkb3VibGUsIGludCwgaW50ICosIGludCAqKTsKZXh0ZXJuIGNoYXIgKmZjdnQoZG91YmxlLCBp
bnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpnY3Z0KGRvdWJsZSwgaW50LCBjaGFyICop
OwpleHRlcm4gaW50IGdldHN1Ym9wdChjaGFyICoqLCBjaGFyICpjb25zdCAqLCBjaGFyICoqKTsK
ZXh0ZXJuIGludCBncmFudHB0KGludCk7CmV4dGVybiBjaGFyICppbml0c3RhdGUodW5zaWduZWQs
IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKmw2NGEobG9uZyk7CmV4dGVybiBjaGFyICpt
a3RlbXAoY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnB0c25hbWUoaW50KTsKZXh0ZXJuIGxvbmcgcmFu
ZG9tKHZvaWQpOwpleHRlcm4gY2hhciAqcmVhbHBhdGgoY29uc3QgY2hhciAqLCBjaGFyICopOwpl
eHRlcm4gY2hhciAqc2V0c3RhdGUoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgc3JhbmRvbSh1
bnNpZ25lZCk7CmV4dGVybiBpbnQgdHR5c2xvdCh2b2lkKTsKZXh0ZXJuIGludCB1bmxvY2twdChp
bnQpOwpleHRlcm4gdm9pZCAqdmFsbG9jKHNpemVfdCk7CgoKCgpleHRlcm4gaW50IGR1cDIoaW50
LCBpbnQpOwpleHRlcm4gY2hhciAqcWVjdnQobG9uZyBkb3VibGUsIGludCwgaW50ICosIGludCAq
KTsKZXh0ZXJuIGNoYXIgKnFmY3Z0KGxvbmcgZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4
dGVybiBjaGFyICpxZ2N2dChsb25nIGRvdWJsZSwgaW50LCBjaGFyICopOwpleHRlcm4gY2hhciAq
Z2V0Y3dkKGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGNvbnN0IGNoYXIgKmdldGV4ZWNuYW1lKHZv
aWQpOwpleHRlcm4gY2hhciAqZ2V0bG9naW4odm9pZCk7CmV4dGVybiBpbnQgZ2V0b3B0KGludCwg
Y2hhciAqY29uc3QgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKZXh0ZXJu
IGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0OwpleHRlcm4gY2hhciAqZ2V0cGFzcyhjb25zdCBj
aGFyICopOwpleHRlcm4gY2hhciAqZ2V0cGFzc3BocmFzZShjb25zdCBjaGFyICopOwpleHRlcm4g
aW50IGdldHB3KHVpZF90LCBjaGFyICopOwpleHRlcm4gaW50IGlzYXR0eShpbnQpOwpleHRlcm4g
dm9pZCAqbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpOwpleHRlcm4gY2hhciAqdHR5bmFtZShpbnQp
OwoKCmV4dGVybiBsb25nIGxvbmcgYXRvbGwoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGxvbmcgbG9u
ZyBsbGFicyhsb25nIGxvbmcpOwpleHRlcm4gbGxkaXZfdCBsbGRpdihsb25nIGxvbmcsIGxvbmcg
bG9uZyk7CmV4dGVybiBjaGFyICpsbHRvc3RyKGxvbmcgbG9uZywgY2hhciAqKTsKZXh0ZXJuIGxv
bmcgbG9uZyBzdHJ0b2xsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgbG9uZyBzdHJ0b3VsbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CmV4dGVy
biBjaGFyICp1bGx0b3N0cih1bnNpZ25lZCBsb25nIGxvbmcsIGNoYXIgKik7CiMgMzA4ICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDMgNAp9CiMgNTMgIi9zcGFjZS9ob21lL21hcmsvY29tcGlsYXRv
cml1bS9nY2MvZ2NjLTMuMS0yMDAyMDYyMC5vYmovc3BhcmMtc3VuLXNvbGFyaXMyLjgvc3BhcmN2
OS9saWJzdGRjKystdjMvaW5jbHVkZS9jc3RkbGliIiAyIDMKIyA4NCAiL3NwYWNlL2hvbWUvbWFy
ay9jb21waWxhdG9yaXVtL2djYy9nY2MtMy4xLTIwMDIwNjIwLm9iai9zcGFyYy1zdW4tc29sYXJp
czIuOC9zcGFyY3Y5L2xpYnN0ZGMrKy12My9pbmNsdWRlL2NzdGRsaWIiIDMKbmFtZXNwYWNlIHN0
ZAp7CiAgdXNpbmcgOjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsKCiAgdXNpbmcgOjphYm9ydDsK
ICB1c2luZyA6OmFiczsKICB1c2luZyA6OmF0ZXhpdDsKICB1c2luZyA6OmF0b2Y7CiAgdXNpbmcg
OjphdG9pOwogIHVzaW5nIDo6YXRvbDsKICB1c2luZyA6OmJzZWFyY2g7CiAgdXNpbmcgOjpjYWxs
b2M7CiAgdXNpbmcgOjpkaXY7CiAgdXNpbmcgOjpleGl0OwogIHVzaW5nIDo6ZnJlZTsKICB1c2lu
ZyA6OmdldGVudjsKICB1c2luZyA6OmxhYnM7CiAgdXNpbmcgOjpsZGl2OwogIHVzaW5nIDo6bWFs
bG9jOwogIHVzaW5nIDo6bWJsZW47CiAgdXNpbmcgOjptYnN0b3djczsKICB1c2luZyA6Om1idG93
YzsKICB1c2luZyA6OnFzb3J0OwogIHVzaW5nIDo6cmFuZDsKICB1c2luZyA6OnJlYWxsb2M7CiAg
dXNpbmcgOjpzcmFuZDsKICB1c2luZyA6OnN0cnRvZDsKICB1c2luZyA6OnN0cnRvbDsKICB1c2lu
ZyA6OnN0cnRvdWw7CiAgdXNpbmcgOjpzeXN0ZW07CiAgdXNpbmcgOjp3Y3N0b21iczsKICB1c2lu
ZyA6OndjdG9tYjsKCiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBfX2kpIHsgcmV0dXJuIGxhYnMo
X19pKTsgfQoKICBpbmxpbmUgbGRpdl90CiAgZGl2KGxvbmcgX19pLCBsb25nIF9faikgeyByZXR1
cm4gbGRpdihfX2ksIF9faik7IH0KfQojIDMzICIuLi8uLi8uLi8uLi8uLi9nY2MtMy4xLTIwMDIw
NjIwL2xpYnN0ZGMrKy12My9saWJzdXBjKysvZWhfcGVyc29uYWxpdHkuY2MiIDIKIyAxICIuLi8u
Li8uLi8uLi8uLi9nY2MtMy4xLTIwMDIwNjIwL2xpYnN0ZGMrKy12My9saWJzdXBjKysvZXhjZXB0
aW9uX2RlZmluZXMuaCIgMQojIDM0ICIuLi8uLi8uLi8uLi8uLi9nY2MtMy4xLTIwMDIwNjIwL2xp
YnN0ZGMrKy12My9saWJzdXBjKysvZWhfcGVyc29uYWxpdHkuY2MiIDIKIyAxICIuLi8uLi8uLi8u
Li8uLi9nY2MtMy4xLTIwMDIwNjIwL2xpYnN0ZGMrKy12My9saWJzdXBjKysvdW53aW5kLWN4eC5o
IiAxCiMgMzggIi4uLy4uLy4uLy4uLy4uL2djYy0zLjEtMjAwMjA2MjAvbGlic3RkYysrLXYzL2xp
YnN1cGMrKy91bndpbmQtY3h4LmgiCiMgMSAiLi4vLi4vLi4vLi4vLi4vZ2NjLTMuMS0yMDAyMDYy
MC9saWJzdGRjKystdjMvbGlic3VwYysrL3R5cGVpbmZvIiAxCiMgMzggIi4uLy4uLy4uLy4uLy4u
L2djYy0zLjEtMjAwMjA2MjAvbGlic3RkYysrLXYzL2xpYnN1cGMrKy90eXBlaW5mbyIKIyAxICIu
Li8uLi8uLi8uLi8uLi9nY2MtMy4xLTIwMDIwNjIwL2xpYnN0ZGMrKy12My9saWJzdXBjKysvZXhj
ZXB0aW9uIiAxCiMgNDAgIi4uLy4uLy4uLy4uLy4uL2djYy0zLjEtMjAwMjA2MjAvbGlic3RkYysr
LXYzL2xpYnN1cGMrKy9leGNlcHRpb24iCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsK
CgoKCgoKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgZXhjZXB0aW9uKCkgdGhy
b3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoKICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBjbGFzcyBiYWRfZXhj
ZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9u
KCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7CiAg
fTsKCgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKCiAgdHlwZWRlZiB2
b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90
ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHRlcm1pbmF0ZSgp
IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhwZWN0ZWRfaGFuZGxlciBz
ZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHVuZXhw
ZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMgOTggIi4uLy4uLy4uLy4u
Ly4uL2djYy0zLjEtMjAwMjA2MjAvbGlic3RkYysrLXYzL2xpYnN1cGMrKy9leGNlcHRpb24iCiAg
Ym9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9CgpuYW1lc3BhY2UgX19nbnVfY3h4
CnsKIyAxMTEgIi4uLy4uLy4uLy4uLy4uL2djYy0zLjEtMjAwMjA2MjAvbGlic3RkYysrLXYzL2xp
YnN1cGMrKy9leGNlcHRpb24iCiAgdm9pZCBfX3ZlcmJvc2VfdGVybWluYXRlX2hhbmRsZXIgKCk7
Cn0KCn0KIyAzOSAiLi4vLi4vLi4vLi4vLi4vZ2NjLTMuMS0yMDAyMDYyMC9saWJzdGRjKystdjMv
bGlic3VwYysrL3R5cGVpbmZvIiAyCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIF9fY3h4YWJp
djEKewogIGNsYXNzIF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTUgIi4uLy4uLy4uLy4uLy4uL2dj
Yy0zLjEtMjAwMjA2MjAvbGlic3RkYysrLXYzL2xpYnN1cGMrKy90eXBlaW5mbyIKbmFtZXNwYWNl
IHN0ZAp7CgoKCiAgY2xhc3MgdHlwZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAgICB2aXJ0dWFs
IH50eXBlX2luZm8oKTsKCiAgcHJpdmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25z
dCB0eXBlX2luZm8mKTsKICAgIHR5cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKCiAgcHJvdGVj
dGVkOgogICAgY29uc3QgY2hhciAqX19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdCB0
eXBlX2luZm8oY29uc3QgY2hhciAqX19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1YmxpYzoKCgoK
ICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lOyB9CiMgOTgg
Ii4uLy4uLy4uLy4uLy4uL2djYy0zLjEtMjAwMjA2MjAvbGlic3RkYysrLXYzL2xpYnN1cGMrKy90
eXBlaW5mbyIKICAgIGJvb2wgYmVmb3JlKGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAg
ICB7IHJldHVybiBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0KICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lID09IF9fYXJn
Ll9fbmFtZTsgfQoKICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBj
b25zdAogICAgeyByZXR1cm4gIW9wZXJhdG9yPT0oX19hcmcpOyB9CgoKICBwdWJsaWM6CgogICAg
dmlydHVhbCBib29sIF9faXNfcG9pbnRlcl9wKCkgY29uc3Q7CgogICAgdmlydHVhbCBib29sIF9f
aXNfZnVuY3Rpb25fcCgpIGNvbnN0OwoKCgoKCgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX2NhdGNo
KGNvbnN0IHR5cGVfaW5mbyAqX190aHJfdHlwZSwgdm9pZCAqKl9fdGhyX29iaiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9fb3V0ZXIpIGNvbnN0OwoKCiAgICB2aXJ0dWFs
IGJvb2wgX19kb191cGNhc3QoY29uc3QgX19jeHhhYml2MTo6X19jbGFzc190eXBlX2luZm8gKl9f
dGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipfX29ial9wdHIpIGNv
bnN0OwogIH07CgoKCiAgY2xhc3MgYmFkX2Nhc3QgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1
YmxpYzoKICAgIGJhZF9jYXN0KCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2Nhc3Qo
KSB0aHJvdygpOwogIH07CgoKICBjbGFzcyBiYWRfdHlwZWlkIDogcHVibGljIGV4Y2VwdGlvbgog
IHsKICBwdWJsaWM6CiAgICBiYWRfdHlwZWlkICgpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwg
fmJhZF90eXBlaWQoKSB0aHJvdygpOwogIH07Cn0KCn0KIyAzOSAiLi4vLi4vLi4vLi4vLi4vZ2Nj
LTMuMS0yMDAyMDYyMC9saWJzdGRjKystdjMvbGlic3VwYysrL3Vud2luZC1jeHguaCIgMgoKCiMg
MSAiLi4vLi4vLi4vLi4vLi4vZ2NjLTMuMS0yMDAyMDYyMC9nY2MvdW53aW5kLmgiIDEKIyAyNSAi
Li4vLi4vLi4vLi4vLi4vZ2NjLTMuMS0yMDAyMDYyMC9nY2MvdW53aW5kLmgiCmV4dGVybiAiQyIg
ewoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIF9VbndpbmRfV29yZCBfX2F0dHJpYnV0ZV9fKChfX21v
ZGVfXyhfX3dvcmRfXykpKTsKdHlwZWRlZiBzaWduZWQgX1Vud2luZF9Td29yZCBfX2F0dHJpYnV0
ZV9fKChfX21vZGVfXyhfX3dvcmRfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBfVW53aW5kX1B0ciBf
X2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX3BvaW50ZXJfXykpKTsKCgoKCgp0eXBlZGVmIHVuc2ln
bmVkIF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzIF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElf
XykpKTsKCgoKdHlwZWRlZiBlbnVtCnsKICBfVVJDX05PX1JFQVNPTiA9IDAsCiAgX1VSQ19GT1JF
SUdOX0VYQ0VQVElPTl9DQVVHSFQgPSAxLAogIF9VUkNfRkFUQUxfUEhBU0UyX0VSUk9SID0gMiwK
ICBfVVJDX0ZBVEFMX1BIQVNFMV9FUlJPUiA9IDMsCiAgX1VSQ19OT1JNQUxfU1RPUCA9IDQsCiAg
X1VSQ19FTkRfT0ZfU1RBQ0sgPSA1LAogIF9VUkNfSEFORExFUl9GT1VORCA9IDYsCiAgX1VSQ19J
TlNUQUxMX0NPTlRFWFQgPSA3LAogIF9VUkNfQ09OVElOVUVfVU5XSU5EID0gOAp9IF9VbndpbmRf
UmVhc29uX0NvZGU7CiMgNjQgIi4uLy4uLy4uLy4uLy4uL2djYy0zLjEtMjAwMjA2MjAvZ2NjL3Vu
d2luZC5oIgpzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb247Cgp0eXBlZGVmIHZvaWQgKCpfVW53aW5k
X0V4Y2VwdGlvbl9DbGVhbnVwX0ZuKSAoX1Vud2luZF9SZWFzb25fQ29kZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlv
biAqKTsKCnN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbgp7CiAgX1Vud2luZF9FeGNlcHRpb25fQ2xh
c3MgZXhjZXB0aW9uX2NsYXNzOwogIF9VbndpbmRfRXhjZXB0aW9uX0NsZWFudXBfRm4gZXhjZXB0
aW9uX2NsZWFudXA7CiAgX1Vud2luZF9Xb3JkIHByaXZhdGVfMTsKICBfVW53aW5kX1dvcmQgcHJp
dmF0ZV8yOwoKCgoKfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXykpOwoKCgoKdHlwZWRlZiBp
bnQgX1Vud2luZF9BY3Rpb247CiMgOTYgIi4uLy4uLy4uLy4uLy4uL2djYy0zLjEtMjAwMjA2MjAv
Z2NjL3Vud2luZC5oIgpzdHJ1Y3QgX1Vud2luZF9Db250ZXh0OwoKCmV4dGVybiBfVW53aW5kX1Jl
YXNvbl9Db2RlIF9VbndpbmRfUmFpc2VFeGNlcHRpb24gKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlv
biAqKTsKCgoKdHlwZWRlZiBfVW53aW5kX1JlYXNvbl9Db2RlICgqX1Vud2luZF9TdG9wX0ZuKQog
ICAgIChpbnQsIF9VbndpbmRfQWN0aW9uLCBfVW53aW5kX0V4Y2VwdGlvbl9DbGFzcywKICAgICAg
c3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICosIHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwgdm9p
ZCAqKTsKCmV4dGVybiBfVW53aW5kX1JlYXNvbl9Db2RlIF9VbndpbmRfRm9yY2VkVW53aW5kIChz
dHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9VbndpbmRfU3RvcF9GbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKik7CgoKZXh0ZXJuIHZvaWQgX1Vud2lu
ZF9EZWxldGVFeGNlcHRpb24gKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKCgoKZXh0ZXJu
IHZvaWQgX1Vud2luZF9SZXN1bWUgKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKCgoKCgoK
ZXh0ZXJuIF9VbndpbmRfV29yZCBfVW53aW5kX0dldEdSIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0
ICosIGludCk7CmV4dGVybiB2b2lkIF9VbndpbmRfU2V0R1IgKHN0cnVjdCBfVW53aW5kX0NvbnRl
eHQgKiwgaW50LCBfVW53aW5kX1dvcmQpOwoKZXh0ZXJuIF9VbndpbmRfUHRyIF9VbndpbmRfR2V0
SVAgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7CmV4dGVybiB2b2lkIF9VbndpbmRfU2V0SVAg
KHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwgX1Vud2luZF9QdHIpOwoKZXh0ZXJuIHZvaWQgKl9V
bndpbmRfR2V0TGFuZ3VhZ2VTcGVjaWZpY0RhdGEgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7
CgpleHRlcm4gX1Vud2luZF9QdHIgX1Vud2luZF9HZXRSZWdpb25TdGFydCAoc3RydWN0IF9Vbndp
bmRfQ29udGV4dCAqKTsKIyAxNDggIi4uLy4uLy4uLy4uLy4uL2djYy0zLjEtMjAwMjA2MjAvZ2Nj
L3Vud2luZC5oIgp0eXBlZGVmIF9VbndpbmRfUmVhc29uX0NvZGUgKCpfVW53aW5kX1BlcnNvbmFs
aXR5X0ZuKQogICAgIChpbnQsIF9VbndpbmRfQWN0aW9uLCBfVW53aW5kX0V4Y2VwdGlvbl9DbGFz
cywKICAgICAgc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICosIHN0cnVjdCBfVW53aW5kX0NvbnRl
eHQgKik7CgoKCgpzdHJ1Y3QgU2pMal9GdW5jdGlvbl9Db250ZXh0OwpleHRlcm4gdm9pZCBfVW53
aW5kX1NqTGpfUmVnaXN0ZXIgKHN0cnVjdCBTakxqX0Z1bmN0aW9uX0NvbnRleHQgKik7CmV4dGVy
biB2b2lkIF9VbndpbmRfU2pMal9VbnJlZ2lzdGVyIChzdHJ1Y3QgU2pMal9GdW5jdGlvbl9Db250
ZXh0ICopOwoKZXh0ZXJuIF9VbndpbmRfUmVhc29uX0NvZGUgX1Vud2luZF9TakxqX1JhaXNlRXhj
ZXB0aW9uCiAgICAgKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKZXh0ZXJuIF9VbndpbmRf
UmVhc29uX0NvZGUgX1Vud2luZF9TakxqX0ZvcmNlZFVud2luZAogICAgIChzdHJ1Y3QgX1Vud2lu
ZF9FeGNlcHRpb24gKiwgX1Vud2luZF9TdG9wX0ZuLCB2b2lkICopOwpleHRlcm4gdm9pZCBfVW53
aW5kX1NqTGpfUmVzdW1lIChzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKik7CiMgMTg2ICIuLi8u
Li8uLi8uLi8uLi9nY2MtMy4xLTIwMDIwNjIwL2djYy91bndpbmQuaCIKZXh0ZXJuIF9VbndpbmRf
UHRyIF9VbndpbmRfR2V0RGF0YVJlbEJhc2UgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7CmV4
dGVybiBfVW53aW5kX1B0ciBfVW53aW5kX0dldFRleHRSZWxCYXNlIChzdHJ1Y3QgX1Vud2luZF9D
b250ZXh0ICopOwoKCgp9CiMgNDIgIi4uLy4uLy4uLy4uLy4uL2djYy0zLjEtMjAwMjA2MjAvbGli
c3RkYysrLXYzL2xpYnN1cGMrKy91bndpbmQtY3h4LmgiIDIKCm5hbWVzcGFjZSBfX2N4eGFiaXYx
CnsKCgoKCgpzdHJ1Y3QgX19jeGFfZXhjZXB0aW9uCnsKCiAgc3RkOjp0eXBlX2luZm8gKmV4Y2Vw
dGlvblR5cGU7CiAgdm9pZCAoKmV4Y2VwdGlvbkRlc3RydWN0b3IpKHZvaWQgKik7CgoKCiAgc3Rk
Ojp1bmV4cGVjdGVkX2hhbmRsZXIgdW5leHBlY3RlZEhhbmRsZXI7CiAgc3RkOjp0ZXJtaW5hdGVf
aGFuZGxlciB0ZXJtaW5hdGVIYW5kbGVyOwoKCiAgX19jeGFfZXhjZXB0aW9uICpuZXh0RXhjZXB0
aW9uOwoKCgogIGludCBoYW5kbGVyQ291bnQ7CgoKCiAgaW50IGhhbmRsZXJTd2l0Y2hWYWx1ZTsK
ICBjb25zdCB1bnNpZ25lZCBjaGFyICphY3Rpb25SZWNvcmQ7CiAgY29uc3QgdW5zaWduZWQgY2hh
ciAqbGFuZ3VhZ2VTcGVjaWZpY0RhdGE7CiAgdm9pZCAqY2F0Y2hUZW1wOwogIHZvaWQgKmFkanVz
dGVkUHRyOwoKCiAgX1Vud2luZF9FeGNlcHRpb24gdW53aW5kSGVhZGVyOwp9OwoKCnN0cnVjdCBf
X2N4YV9laF9nbG9iYWxzCnsKICBfX2N4YV9leGNlcHRpb24gKmNhdWdodEV4Y2VwdGlvbnM7CiAg
dW5zaWduZWQgaW50IHVuY2F1Z2h0RXhjZXB0aW9uczsKfTsKCgoKCgoKZXh0ZXJuICJDIiBfX2N4
YV9laF9nbG9iYWxzICpfX2N4YV9nZXRfZ2xvYmFscyAoKSB0aHJvdygpOwpleHRlcm4gIkMiIF9f
Y3hhX2VoX2dsb2JhbHMgKl9fY3hhX2dldF9nbG9iYWxzX2Zhc3QgKCkgdGhyb3coKTsKCgpleHRl
cm4gIkMiIHZvaWQgKl9fY3hhX2FsbG9jYXRlX2V4Y2VwdGlvbihzdGQ6OnNpemVfdCB0aHJvd25f
c2l6ZSkgdGhyb3coKTsKCgpleHRlcm4gIkMiIHZvaWQgX19jeGFfZnJlZV9leGNlcHRpb24odm9p
ZCAqdGhyb3duX2V4Y2VwdGlvbikgdGhyb3coKTsKCgpleHRlcm4gIkMiIHZvaWQgX19jeGFfdGhy
b3cgKHZvaWQgKnRocm93bl9leGNlcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjp0eXBlX2luZm8gKnRpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg
KCpkZXN0KSAodm9pZCAqKSkKICAgICBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwoKCmV4dGVy
biAiQyIgdm9pZCAqX19jeGFfYmVnaW5fY2F0Y2ggKHZvaWQgKikgdGhyb3coKTsKZXh0ZXJuICJD
IiB2b2lkIF9fY3hhX2VuZF9jYXRjaCAoKTsKZXh0ZXJuICJDIiB2b2lkIF9fY3hhX3JldGhyb3cg
KCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKCgpleHRlcm4gIkMiIHZvaWQgX19jeGFfYmFk
X2Nhc3QgKCk7CmV4dGVybiAiQyIgdm9pZCBfX2N4YV9iYWRfdHlwZWlkICgpOwoKCgoKCgpleHRl
cm4gIkMiIHZvaWQgX19jeGFfY2FsbF91bmV4cGVjdGVkICh2b2lkICopIF9fYXR0cmlidXRlX18o
KG5vcmV0dXJuKSk7CgoKCmV4dGVybiB2b2lkIF9fdGVybWluYXRlKHN0ZDo6dGVybWluYXRlX2hh
bmRsZXIpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CmV4dGVybiB2b2lkIF9fdW5leHBlY3Rl
ZChzdGQ6OnVuZXhwZWN0ZWRfaGFuZGxlcikgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKCgpl
eHRlcm4gc3RkOjp0ZXJtaW5hdGVfaGFuZGxlciBfX3Rlcm1pbmF0ZV9oYW5kbGVyOwpleHRlcm4g
c3RkOjp1bmV4cGVjdGVkX2hhbmRsZXIgX191bmV4cGVjdGVkX2hhbmRsZXI7CgoKCgpjb25zdCBf
VW53aW5kX0V4Y2VwdGlvbl9DbGFzcyBfX2d4eF9leGNlcHRpb25fY2xhc3MKPSAoKCgoKCgoKF9V
bndpbmRfRXhjZXB0aW9uX0NsYXNzKSAnRycKICAgICAgICAgPDwgOCB8IChfVW53aW5kX0V4Y2Vw
dGlvbl9DbGFzcykgJ04nKQogICAgICAgIDw8IDggfCAoX1Vud2luZF9FeGNlcHRpb25fQ2xhc3Mp
ICdVJykKICAgICAgIDw8IDggfCAoX1Vud2luZF9FeGNlcHRpb25fQ2xhc3MpICdDJykKICAgICAg
PDwgOCB8IChfVW53aW5kX0V4Y2VwdGlvbl9DbGFzcykgJ0MnKQogICAgIDw8IDggfCAoX1Vud2lu
ZF9FeGNlcHRpb25fQ2xhc3MpICcrJykKICAgIDw8IDggfCAoX1Vud2luZF9FeGNlcHRpb25fQ2xh
c3MpICcrJykKICAgPDwgOCB8IChfVW53aW5kX0V4Y2VwdGlvbl9DbGFzcykgJ1wwJyk7CgoKZXh0
ZXJuICJDIiBfVW53aW5kX1JlYXNvbl9Db2RlIF9fZ3h4X3BlcnNvbmFsaXR5X3YwCiAgICAgKGlu
dCwgX1Vud2luZF9BY3Rpb24sIF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzLAogICAgICBzdHJ1Y3Qg
X1Vud2luZF9FeGNlcHRpb24gKiwgc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKCgpleHRlcm4g
IkMiIF9VbndpbmRfUmVhc29uX0NvZGUgX19neHhfcGVyc29uYWxpdHlfc2owCiAgICAgKGludCwg
X1Vud2luZF9BY3Rpb24sIF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzLAogICAgICBzdHJ1Y3QgX1Vu
d2luZF9FeGNlcHRpb24gKiwgc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKCgpzdGF0aWMgaW5s
aW5lIF9fY3hhX2V4Y2VwdGlvbiAqCl9fZ2V0X2V4Y2VwdGlvbl9oZWFkZXJfZnJvbV9vYmogKHZv
aWQgKnB0cikKewogIHJldHVybiByZWludGVycHJldF9jYXN0PF9fY3hhX2V4Y2VwdGlvbiAqPihw
dHIpIC0gMTsKfQoKCnN0YXRpYyBpbmxpbmUgX19jeGFfZXhjZXB0aW9uICoKX19nZXRfZXhjZXB0
aW9uX2hlYWRlcl9mcm9tX3VlIChfVW53aW5kX0V4Y2VwdGlvbiAqZXhjKQp7CiAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8X19jeGFfZXhjZXB0aW9uICo+KGV4YyArIDEpIC0gMTsKfQoKfQojIDM1
ICIuLi8uLi8uLi8uLi8uLi9nY2MtMy4xLTIwMDIwNjIwL2xpYnN0ZGMrKy12My9saWJzdXBjKysv
ZWhfcGVyc29uYWxpdHkuY2MiIDIKCnVzaW5nIG5hbWVzcGFjZSBfX2N4eGFiaXYxOwoKIyAxICIu
Li8uLi8uLi8uLi8uLi9nY2MtMy4xLTIwMDIwNjIwL2djYy91bndpbmQtcGUuaCIgMQojIDU5ICIu
Li8uLi8uLi8uLi8uLi9nY2MtMy4xLTIwMDIwNjIwL2djYy91bndpbmQtcGUuaCIKc3RhdGljIHVu
c2lnbmVkIGludApzaXplX29mX2VuY29kZWRfdmFsdWUgKHVuc2lnbmVkIGNoYXIgZW5jb2Rpbmcp
CnsKICBpZiAoZW5jb2RpbmcgPT0gMHhmZikKICAgIHJldHVybiAwOwoKICBzd2l0Y2ggKGVuY29k
aW5nICYgMHgwNykKICAgIHsKICAgIGNhc2UgMHgwMDoKICAgICAgcmV0dXJuIHNpemVvZiAodm9p
ZCAqKTsKICAgIGNhc2UgMHgwMjoKICAgICAgcmV0dXJuIDI7CiAgICBjYXNlIDB4MDM6CiAgICAg
IHJldHVybiA0OwogICAgY2FzZSAweDA0OgogICAgICByZXR1cm4gODsKICAgIH0KICBzdGQ6OmFi
b3J0ICgpOwp9CiMgODYgIi4uLy4uLy4uLy4uLy4uL2djYy0zLjEtMjAwMjA2MjAvZ2NjL3Vud2lu
ZC1wZS5oIgpzdGF0aWMgX1Vud2luZF9QdHIKYmFzZV9vZl9lbmNvZGVkX3ZhbHVlICh1bnNpZ25l
ZCBjaGFyIGVuY29kaW5nLCBzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0KQp7CiAgaWYg
KGVuY29kaW5nID09IDB4ZmYpCiAgICByZXR1cm4gMDsKCiAgc3dpdGNoIChlbmNvZGluZyAmIDB4
NzApCiAgICB7CiAgICBjYXNlIDB4MDA6CiAgICBjYXNlIDB4MTA6CiAgICBjYXNlIDB4NTA6CiAg
ICAgIHJldHVybiAwOwoKICAgIGNhc2UgMHgyMDoKICAgICAgcmV0dXJuIF9VbndpbmRfR2V0VGV4
dFJlbEJhc2UgKGNvbnRleHQpOwogICAgY2FzZSAweDMwOgogICAgICByZXR1cm4gX1Vud2luZF9H
ZXREYXRhUmVsQmFzZSAoY29udGV4dCk7CiAgICBjYXNlIDB4NDA6CiAgICAgIHJldHVybiBfVW53
aW5kX0dldFJlZ2lvblN0YXJ0IChjb250ZXh0KTsKICAgIH0KICBzdGQ6OmFib3J0ICgpOwp9CiMg
MTE2ICIuLi8uLi8uLi8uLi8uLi9nY2MtMy4xLTIwMDIwNjIwL2djYy91bndpbmQtcGUuaCIKc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKgpyZWFkX3VsZWIxMjggKGNvbnN0IHVuc2lnbmVkIGNo
YXIgKnAsIF9VbndpbmRfV29yZCAqdmFsKQp7CiAgdW5zaWduZWQgaW50IHNoaWZ0ID0gMDsKICB1
bnNpZ25lZCBjaGFyIGJ5dGU7CiAgX1Vud2luZF9Xb3JkIHJlc3VsdDsKCiAgcmVzdWx0ID0gMDsK
ICBkbwogICAgewogICAgICBieXRlID0gKnArKzsKICAgICAgcmVzdWx0IHw9IChieXRlICYgMHg3
ZikgPDwgc2hpZnQ7CiAgICAgIHNoaWZ0ICs9IDc7CiAgICB9CiAgd2hpbGUgKGJ5dGUgJiAweDgw
KTsKCiAgKnZhbCA9IHJlc3VsdDsKICByZXR1cm4gcDsKfQoKCgpzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgY2hhciAqCnJlYWRfc2xlYjEyOCAoY29uc3QgdW5zaWduZWQgY2hhciAqcCwgX1Vud2luZF9T
d29yZCAqdmFsKQp7CiAgdW5zaWduZWQgaW50IHNoaWZ0ID0gMDsKICB1bnNpZ25lZCBjaGFyIGJ5
dGU7CiAgX1Vud2luZF9Xb3JkIHJlc3VsdDsKCiAgcmVzdWx0ID0gMDsKICBkbwogICAgewogICAg
ICBieXRlID0gKnArKzsKICAgICAgcmVzdWx0IHw9IChieXRlICYgMHg3ZikgPDwgc2hpZnQ7CiAg
ICAgIHNoaWZ0ICs9IDc7CiAgICB9CiAgd2hpbGUgKGJ5dGUgJiAweDgwKTsKCgogIGlmIChzaGlm
dCA8IDggKiBzaXplb2YocmVzdWx0KSAmJiAoYnl0ZSAmIDB4NDApICE9IDApCiAgICByZXN1bHQg
fD0gLSgxTCA8PCBzaGlmdCk7CgogICp2YWwgPSAoX1Vud2luZF9Td29yZCkgcmVzdWx0OwogIHJl
dHVybiBwOwp9CgoKCgoKc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKgpyZWFkX2VuY29kZWRf
dmFsdWVfd2l0aF9iYXNlICh1bnNpZ25lZCBjaGFyIGVuY29kaW5nLCBfVW53aW5kX1B0ciBiYXNl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwLCBf
VW53aW5kX1B0ciAqdmFsKQp7CiAgdW5pb24gdW5hbGlnbmVkCiAgICB7CiAgICAgIHZvaWQgKnB0
cjsKICAgICAgdW5zaWduZWQgdTIgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKEhJKSkpOwogICAgICB1
bnNpZ25lZCB1NCBfX2F0dHJpYnV0ZV9fICgobW9kZSAoU0kpKSk7CiAgICAgIHVuc2lnbmVkIHU4
IF9fYXR0cmlidXRlX18gKChtb2RlIChESSkpKTsKICAgICAgc2lnbmVkIHMyIF9fYXR0cmlidXRl
X18gKChtb2RlIChISSkpKTsKICAgICAgc2lnbmVkIHM0IF9fYXR0cmlidXRlX18gKChtb2RlIChT
SSkpKTsKICAgICAgc2lnbmVkIHM4IF9fYXR0cmlidXRlX18gKChtb2RlIChESSkpKTsKICAgIH0g
X19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwoKICB1bmlvbiB1bmFsaWduZWQgKnUgPSAodW5p
b24gdW5hbGlnbmVkICopIHA7CiAgX1Vud2luZF9QdHIgcmVzdWx0OwoKICBpZiAoZW5jb2Rpbmcg
PT0gMHg1MCkKICAgIHsKICAgICAgX1Vud2luZF9QdHIgYSA9IChfVW53aW5kX1B0cikgcDsKICAg
ICAgYSA9IChhICsgc2l6ZW9mICh2b2lkICopIC0gMSkgJiAtIHNpemVvZih2b2lkICopOwogICAg
ICByZXN1bHQgPSAqKF9VbndpbmRfUHRyICopIGE7CiAgICAgIHAgPSAoY29uc3QgdW5zaWduZWQg
Y2hhciAqKSAoYSArIHNpemVvZiAodm9pZCAqKSk7CiAgICB9CiAgZWxzZQogICAgewogICAgICBz
d2l0Y2ggKGVuY29kaW5nICYgMHgwZikKICAgICAgICB7CiAgICAgICAgY2FzZSAweDAwOgogICAg
ICAgICAgcmVzdWx0ID0gKF9VbndpbmRfUHRyKSB1LT5wdHI7CiAgICAgICAgICBwICs9IHNpemVv
ZiAodm9pZCAqKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDB4MDE6CiAgICAgICAg
ICB7CiAgICAgICAgICAgIF9VbndpbmRfV29yZCB0bXA7CiAgICAgICAgICAgIHAgPSByZWFkX3Vs
ZWIxMjggKHAsICZ0bXApOwogICAgICAgICAgICByZXN1bHQgPSAoX1Vud2luZF9QdHIpIHRtcDsK
ICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDB4MDk6CiAgICAgICAg
ICB7CiAgICAgICAgICAgIF9VbndpbmRfU3dvcmQgdG1wOwogICAgICAgICAgICBwID0gcmVhZF9z
bGViMTI4IChwLCAmdG1wKTsKICAgICAgICAgICAgcmVzdWx0ID0gKF9VbndpbmRfUHRyKSB0bXA7
CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAweDAyOgogICAgICAg
ICAgcmVzdWx0ID0gdS0+dTI7CiAgICAgICAgICBwICs9IDI7CiAgICAgICAgICBicmVhazsKICAg
ICAgICBjYXNlIDB4MDM6CiAgICAgICAgICByZXN1bHQgPSB1LT51NDsKICAgICAgICAgIHAgKz0g
NDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMHgwNDoKICAgICAgICAgIHJlc3VsdCA9
IHUtPnU4OwogICAgICAgICAgcCArPSA4OwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2Ug
MHgwQToKICAgICAgICAgIHJlc3VsdCA9IHUtPnMyOwogICAgICAgICAgcCArPSAyOwogICAgICAg
ICAgYnJlYWs7CiAgICAgICAgY2FzZSAweDBCOgogICAgICAgICAgcmVzdWx0ID0gdS0+czQ7CiAg
ICAgICAgICBwICs9IDQ7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4MEM6CiAgICAg
ICAgICByZXN1bHQgPSB1LT5zODsKICAgICAgICAgIHAgKz0gODsKICAgICAgICAgIGJyZWFrOwoK
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgc3RkOjphYm9ydCAoKTsKICAgICAgICB9CgogICAg
ICBpZiAocmVzdWx0ICE9IDApCiAgICAgICAgewogICAgICAgICAgcmVzdWx0ICs9ICgoZW5jb2Rp
bmcgJiAweDcwKSA9PSAweDEwCiAgICAgICAgICAgICAgICAgICAgID8gKF9VbndpbmRfUHRyKSB1
IDogYmFzZSk7CiAgICAgICAgICBpZiAoZW5jb2RpbmcgJiAweDgwKQogICAgICAgICAgICByZXN1
bHQgPSAqKF9VbndpbmRfUHRyICopIHJlc3VsdDsKICAgICAgICB9CiAgICB9CgogICp2YWwgPSBy
ZXN1bHQ7CiAgcmV0dXJuIHA7Cn0KCgoKCgoKc3RhdGljIGlubGluZSBjb25zdCB1bnNpZ25lZCBj
aGFyICoKcmVhZF9lbmNvZGVkX3ZhbHVlIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0
LCB1bnNpZ25lZCBjaGFyIGVuY29kaW5nLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIgKnAsIF9VbndpbmRfUHRyICp2YWwpCnsKICByZXR1cm4gcmVhZF9lbmNvZGVkX3Zh
bHVlX3dpdGhfYmFzZSAoZW5jb2RpbmcsCiAgICAgICAgICAgICAgICBiYXNlX29mX2VuY29kZWRf
dmFsdWUgKGVuY29kaW5nLCBjb250ZXh0KSwKICAgICAgICAgICAgICAgIHAsIHZhbCk7Cn0KIyAz
OSAiLi4vLi4vLi4vLi4vLi4vZ2NjLTMuMS0yMDAyMDYyMC9saWJzdGRjKystdjMvbGlic3VwYysr
L2VoX3BlcnNvbmFsaXR5LmNjIiAyCgoKc3RydWN0IGxzZGFfaGVhZGVyX2luZm8KewogIF9Vbndp
bmRfUHRyIFN0YXJ0OwogIF9VbndpbmRfUHRyIExQU3RhcnQ7CiAgX1Vud2luZF9QdHIgdHR5cGVf
YmFzZTsKICBjb25zdCB1bnNpZ25lZCBjaGFyICpUVHlwZTsKICBjb25zdCB1bnNpZ25lZCBjaGFy
ICphY3Rpb25fdGFibGU7CiAgdW5zaWduZWQgY2hhciB0dHlwZV9lbmNvZGluZzsKICB1bnNpZ25l
ZCBjaGFyIGNhbGxfc2l0ZV9lbmNvZGluZzsKfTsKCnN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy
ICoKcGFyc2VfbHNkYV9oZWFkZXIgKF9VbndpbmRfQ29udGV4dCAqY29udGV4dCwgY29uc3QgdW5z
aWduZWQgY2hhciAqcCwKICAgICAgICAgICAgICAgICAgIGxzZGFfaGVhZGVyX2luZm8gKmluZm8p
CnsKICBfVW53aW5kX1dvcmQgdG1wOwogIHVuc2lnbmVkIGNoYXIgbHBzdGFydF9lbmNvZGluZzsK
CiAgaW5mby0+U3RhcnQgPSAoY29udGV4dCA/IF9VbndpbmRfR2V0UmVnaW9uU3RhcnQgKGNvbnRl
eHQpIDogMCk7CgoKICBscHN0YXJ0X2VuY29kaW5nID0gKnArKzsKICBpZiAobHBzdGFydF9lbmNv
ZGluZyAhPSAweGZmKQogICAgcCA9IHJlYWRfZW5jb2RlZF92YWx1ZSAoY29udGV4dCwgbHBzdGFy
dF9lbmNvZGluZywgcCwgJmluZm8tPkxQU3RhcnQpOwogIGVsc2UKICAgIGluZm8tPkxQU3RhcnQg
PSBpbmZvLT5TdGFydDsKCgogIGluZm8tPnR0eXBlX2VuY29kaW5nID0gKnArKzsKICBpZiAoaW5m
by0+dHR5cGVfZW5jb2RpbmcgIT0gMHhmZikKICAgIHsKICAgICAgcCA9IHJlYWRfdWxlYjEyOCAo
cCwgJnRtcCk7CiAgICAgIGluZm8tPlRUeXBlID0gcCArIHRtcDsKICAgIH0KICBlbHNlCiAgICBp
bmZvLT5UVHlwZSA9IDA7CgoKCiAgaW5mby0+Y2FsbF9zaXRlX2VuY29kaW5nID0gKnArKzsKICBw
ID0gcmVhZF91bGViMTI4IChwLCAmdG1wKTsKICBpbmZvLT5hY3Rpb25fdGFibGUgPSBwICsgdG1w
OwoKICByZXR1cm4gcDsKfQoKc3RhdGljIGNvbnN0IHN0ZDo6dHlwZV9pbmZvICoKZ2V0X3R0eXBl
X2VudHJ5IChsc2RhX2hlYWRlcl9pbmZvICppbmZvLCBfVW53aW5kX1dvcmQgaSkKewogIF9Vbndp
bmRfUHRyIHB0cjsKCiAgaSAqPSBzaXplX29mX2VuY29kZWRfdmFsdWUgKGluZm8tPnR0eXBlX2Vu
Y29kaW5nKTsKICByZWFkX2VuY29kZWRfdmFsdWVfd2l0aF9iYXNlIChpbmZvLT50dHlwZV9lbmNv
ZGluZywgaW5mby0+dHR5cGVfYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmZvLT5UVHlwZSAtIGksICZwdHIpOwoKICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBz
dGQ6OnR5cGVfaW5mbyAqPihwdHIpOwp9CgoKCgoKCnN0YXRpYyBib29sCmdldF9hZGp1c3RlZF9w
dHIgKGNvbnN0IHN0ZDo6dHlwZV9pbmZvICpjYXRjaF90eXBlLAogICAgICAgICAgICAgICAgICBj
b25zdCBzdGQ6OnR5cGVfaW5mbyAqdGhyb3dfdHlwZSwKICAgICAgICAgICAgICAgICAgdm9pZCAq
KnRocm93bl9wdHJfcCkKewogIHZvaWQgKnRocm93bl9wdHIgPSAqdGhyb3duX3B0cl9wOwoKCgoK
CiAgaWYgKHRocm93X3R5cGUtPl9faXNfcG9pbnRlcl9wICgpKQogICAgdGhyb3duX3B0ciA9ICoo
dm9pZCAqKikgdGhyb3duX3B0cjsKCiAgaWYgKGNhdGNoX3R5cGUtPl9fZG9fY2F0Y2ggKHRocm93
X3R5cGUsICZ0aHJvd25fcHRyLCAxKSkKICAgIHsKICAgICAgKnRocm93bl9wdHJfcCA9IHRocm93
bl9wdHI7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICByZXR1cm4gZmFsc2U7Cn0KCnN0YXRp
YyBib29sCmNoZWNrX2V4Y2VwdGlvbl9zcGVjIChsc2RhX2hlYWRlcl9pbmZvICppbmZvLCBjb25z
dCBzdGQ6OnR5cGVfaW5mbyAqdGhyb3dfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHZvaWQg
KnRocm93bl9wdHIsIF9VbndpbmRfU3dvcmQgZmlsdGVyX3ZhbHVlKQp7CiAgY29uc3QgdW5zaWdu
ZWQgY2hhciAqZSA9IGluZm8tPlRUeXBlIC0gZmlsdGVyX3ZhbHVlIC0gMTsKCiAgd2hpbGUgKDEp
CiAgICB7CiAgICAgIGNvbnN0IHN0ZDo6dHlwZV9pbmZvICpjYXRjaF90eXBlOwogICAgICBfVW53
aW5kX1dvcmQgdG1wOwoKICAgICAgZSA9IHJlYWRfdWxlYjEyOCAoZSwgJnRtcCk7CgoKCiAgICAg
IGlmICh0bXAgPT0gMCkKICAgICAgICByZXR1cm4gZmFsc2U7CgoKICAgICAgY2F0Y2hfdHlwZSA9
IGdldF90dHlwZV9lbnRyeSAoaW5mbywgdG1wKTsKCgoKCgogICAgICBpZiAoZ2V0X2FkanVzdGVk
X3B0ciAoY2F0Y2hfdHlwZSwgdGhyb3dfdHlwZSwgJnRocm93bl9wdHIpKQogICAgICAgIHJldHVy
biB0cnVlOwogICAgfQp9CiMgMTY2ICIuLi8uLi8uLi8uLi8uLi9nY2MtMy4xLTIwMDIwNjIwL2xp
YnN0ZGMrKy12My9saWJzdXBjKysvZWhfcGVyc29uYWxpdHkuY2MiCmV4dGVybiAiQyIgX1Vud2lu
ZF9SZWFzb25fQ29kZQpfX2d4eF9wZXJzb25hbGl0eV92MCAoaW50IHZlcnNpb24sCiAgICAgICAg
ICAgICAgICAgICAgICBfVW53aW5kX0FjdGlvbiBhY3Rpb25zLAogICAgICAgICAgICAgICAgICAg
ICAgX1Vud2luZF9FeGNlcHRpb25fQ2xhc3MgZXhjZXB0aW9uX2NsYXNzLAogICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICp1ZV9oZWFkZXIsCiAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0KQp7CiAgX19jeGFfZXhj
ZXB0aW9uICp4aCA9IF9fZ2V0X2V4Y2VwdGlvbl9oZWFkZXJfZnJvbV91ZSAodWVfaGVhZGVyKTsK
CiAgZW51bSBmb3VuZF9oYW5kbGVyX3R5cGUKICB7CiAgICBmb3VuZF9ub3RoaW5nLAogICAgZm91
bmRfdGVybWluYXRlLAogICAgZm91bmRfY2xlYW51cCwKICAgIGZvdW5kX2hhbmRsZXIKICB9IGZv
dW5kX3R5cGU7CgogIGxzZGFfaGVhZGVyX2luZm8gaW5mbzsKICBjb25zdCB1bnNpZ25lZCBjaGFy
ICpsYW5ndWFnZV9zcGVjaWZpY19kYXRhOwogIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFjdGlvbl9y
ZWNvcmQ7CiAgY29uc3QgdW5zaWduZWQgY2hhciAqcDsKICBfVW53aW5kX1B0ciBsYW5kaW5nX3Bh
ZCwgaXA7CiAgaW50IGhhbmRsZXJfc3dpdGNoX3ZhbHVlOwogIHZvaWQgKnRocm93bl9wdHIgPSB4
aCArIDE7CgoKICBpZiAodmVyc2lvbiAhPSAxKQogICAgcmV0dXJuIF9VUkNfRkFUQUxfUEhBU0Ux
X0VSUk9SOwoKCiAgaWYgKGFjdGlvbnMgPT0gKDIgfCA0KQogICAgICAmJiBleGNlcHRpb25fY2xh
c3MgPT0gX19neHhfZXhjZXB0aW9uX2NsYXNzKQogICAgewogICAgICBoYW5kbGVyX3N3aXRjaF92
YWx1ZSA9IHhoLT5oYW5kbGVyU3dpdGNoVmFsdWU7CiAgICAgIGxhbmRpbmdfcGFkID0gKF9Vbndp
bmRfUHRyKSB4aC0+Y2F0Y2hUZW1wOwogICAgICBmb3VuZF90eXBlID0gKGxhbmRpbmdfcGFkID09
IDAgPyBmb3VuZF90ZXJtaW5hdGUgOiBmb3VuZF9oYW5kbGVyKTsKICAgICAgZ290byBpbnN0YWxs
X2NvbnRleHQ7CiAgICB9CgogIGxhbmd1YWdlX3NwZWNpZmljX2RhdGEgPSAoY29uc3QgdW5zaWdu
ZWQgY2hhciAqKQogICAgX1Vud2luZF9HZXRMYW5ndWFnZVNwZWNpZmljRGF0YSAoY29udGV4dCk7
CgoKICBpZiAoISBsYW5ndWFnZV9zcGVjaWZpY19kYXRhKQogICAgcmV0dXJuIF9VUkNfQ09OVElO
VUVfVU5XSU5EOwoKCiAgcCA9IHBhcnNlX2xzZGFfaGVhZGVyIChjb250ZXh0LCBsYW5ndWFnZV9z
cGVjaWZpY19kYXRhLCAmaW5mbyk7CiAgaW5mby50dHlwZV9iYXNlID0gYmFzZV9vZl9lbmNvZGVk
X3ZhbHVlIChpbmZvLnR0eXBlX2VuY29kaW5nLCBjb250ZXh0KTsKICBpcCA9IF9VbndpbmRfR2V0
SVAgKGNvbnRleHQpIC0gMTsKICBsYW5kaW5nX3BhZCA9IDA7CiAgYWN0aW9uX3JlY29yZCA9IDA7
CiAgaGFuZGxlcl9zd2l0Y2hfdmFsdWUgPSAwOwojIDI1MCAiLi4vLi4vLi4vLi4vLi4vZ2NjLTMu
MS0yMDAyMDYyMC9saWJzdGRjKystdjMvbGlic3VwYysrL2VoX3BlcnNvbmFsaXR5LmNjIgogIHdo
aWxlIChwIDwgaW5mby5hY3Rpb25fdGFibGUpCiAgICB7CiAgICAgIF9VbndpbmRfUHRyIGNzX3N0
YXJ0LCBjc19sZW4sIGNzX2xwOwogICAgICBfVW53aW5kX1dvcmQgY3NfYWN0aW9uOwoKCiAgICAg
IHAgPSByZWFkX2VuY29kZWRfdmFsdWUgKDAsIGluZm8uY2FsbF9zaXRlX2VuY29kaW5nLCBwLCAm
Y3Nfc3RhcnQpOwogICAgICBwID0gcmVhZF9lbmNvZGVkX3ZhbHVlICgwLCBpbmZvLmNhbGxfc2l0
ZV9lbmNvZGluZywgcCwgJmNzX2xlbik7CiAgICAgIHAgPSByZWFkX2VuY29kZWRfdmFsdWUgKDAs
IGluZm8uY2FsbF9zaXRlX2VuY29kaW5nLCBwLCAmY3NfbHApOwogICAgICBwID0gcmVhZF91bGVi
MTI4IChwLCAmY3NfYWN0aW9uKTsKCgogICAgICBpZiAoaXAgPCBpbmZvLlN0YXJ0ICsgY3Nfc3Rh
cnQpCiAgICAgICAgcCA9IGluZm8uYWN0aW9uX3RhYmxlOwogICAgICBlbHNlIGlmIChpcCA8IGlu
Zm8uU3RhcnQgKyBjc19zdGFydCArIGNzX2xlbikKICAgICAgICB7CiAgICAgICAgICBpZiAoY3Nf
bHApCiAgICAgICAgICAgIGxhbmRpbmdfcGFkID0gaW5mby5MUFN0YXJ0ICsgY3NfbHA7CiAgICAg
ICAgICBpZiAoY3NfYWN0aW9uKQogICAgICAgICAgICBhY3Rpb25fcmVjb3JkID0gaW5mby5hY3Rp
b25fdGFibGUgKyBjc19hY3Rpb24gLSAxOwogICAgICAgICAgZ290byBmb3VuZF9zb21ldGhpbmc7
CiAgICAgICAgfQogICAgfQoKCgoKCiAgZm91bmRfdHlwZSA9IChhY3Rpb25zICYgOCA/IGZvdW5k
X25vdGhpbmcgOiBmb3VuZF90ZXJtaW5hdGUpOwogIGdvdG8gZG9fc29tZXRoaW5nOwoKIGZvdW5k
X3NvbWV0aGluZzoKICBpZiAobGFuZGluZ19wYWQgPT0gMCkKICAgIHsKCgogICAgICBmb3VuZF90
eXBlID0gZm91bmRfbm90aGluZzsKICAgIH0KICBlbHNlIGlmIChhY3Rpb25fcmVjb3JkID09IDAp
CiAgICB7CgoKCiAgICAgIGZvdW5kX3R5cGUgPSBmb3VuZF9jbGVhbnVwOwogICAgfQogIGVsc2UK
ICAgIHsKCgogICAgICBfVW53aW5kX1N3b3JkIGFyX2ZpbHRlciwgYXJfZGlzcDsKICAgICAgY29u
c3Qgc3RkOjp0eXBlX2luZm8gKnRocm93X3R5cGUsICpjYXRjaF90eXBlOwogICAgICBib29sIHNh
d19jbGVhbnVwID0gZmFsc2U7CiAgICAgIGJvb2wgc2F3X2hhbmRsZXIgPSBmYWxzZTsKCgoKCgog
ICAgICBpZiAoKGFjdGlvbnMgJiA4KQogICAgICAgICAgfHwgZXhjZXB0aW9uX2NsYXNzICE9IF9f
Z3h4X2V4Y2VwdGlvbl9jbGFzcykKICAgICAgICB0aHJvd190eXBlID0gMDsKICAgICAgZWxzZQog
ICAgICAgIHRocm93X3R5cGUgPSB4aC0+ZXhjZXB0aW9uVHlwZTsKCiAgICAgIHdoaWxlICgxKQog
ICAgICAgIHsKICAgICAgICAgIHAgPSBhY3Rpb25fcmVjb3JkOwogICAgICAgICAgcCA9IHJlYWRf
c2xlYjEyOCAocCwgJmFyX2ZpbHRlcik7CiAgICAgICAgICByZWFkX3NsZWIxMjggKHAsICZhcl9k
aXNwKTsKCiAgICAgICAgICBpZiAoYXJfZmlsdGVyID09IDApCiAgICAgICAgICAgIHsKCiAgICAg
ICAgICAgICAgc2F3X2NsZWFudXAgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNl
IGlmIChhcl9maWx0ZXIgPiAwKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIGNhdGNoX3R5
cGUgPSBnZXRfdHR5cGVfZW50cnkgKCZpbmZvLCBhcl9maWx0ZXIpOwoKCgogICAgICAgICAgICAg
IGlmICghIGNhdGNoX3R5cGUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlm
ICghKGFjdGlvbnMgJiA4KSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICBzYXdfaGFuZGxlciA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBp
ZiAodGhyb3dfdHlwZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKGdl
dF9hZGp1c3RlZF9wdHIgKGNhdGNoX3R5cGUsIHRocm93X3R5cGUsICZ0aHJvd25fcHRyKSkKICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBzYXdfaGFuZGxlciA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ewoKCgoKICAgICAgICAgICAgICBpZiAodGhyb3dfdHlwZQogICAgICAgICAgICAgICAgICAmJiAh
IGNoZWNrX2V4Y2VwdGlvbl9zcGVjICgmaW5mbywgdGhyb3dfdHlwZSwgdGhyb3duX3B0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJfZmlsdGVyKSkKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc2F3X2hhbmRsZXIgPSB0cnVlOwogICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAg
ICAgICAgIGlmIChhcl9kaXNwID09IDApCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgYWN0
aW9uX3JlY29yZCA9IHAgKyBhcl9kaXNwOwogICAgICAgIH0KCiAgICAgIGlmIChzYXdfaGFuZGxl
cikKICAgICAgICB7CiAgICAgICAgICBoYW5kbGVyX3N3aXRjaF92YWx1ZSA9IGFyX2ZpbHRlcjsK
ICAgICAgICAgIGZvdW5kX3R5cGUgPSBmb3VuZF9oYW5kbGVyOwogICAgICAgIH0KICAgICAgZWxz
ZQogICAgICAgIGZvdW5kX3R5cGUgPSAoc2F3X2NsZWFudXAgPyBmb3VuZF9jbGVhbnVwIDogZm91
bmRfbm90aGluZyk7CiAgICB9CgogZG9fc29tZXRoaW5nOgogICBpZiAoZm91bmRfdHlwZSA9PSBm
b3VuZF9ub3RoaW5nKQogICAgIHJldHVybiBfVVJDX0NPTlRJTlVFX1VOV0lORDsKCiAgaWYgKGFj
dGlvbnMgJiAxKQogICAgewogICAgICBpZiAoZm91bmRfdHlwZSA9PSBmb3VuZF9jbGVhbnVwKQog
ICAgICAgIHJldHVybiBfVVJDX0NPTlRJTlVFX1VOV0lORDsKCgogICAgICBpZiAoZXhjZXB0aW9u
X2NsYXNzID09IF9fZ3h4X2V4Y2VwdGlvbl9jbGFzcykKICAgICAgICB7CiAgICAgICAgICB4aC0+
aGFuZGxlclN3aXRjaFZhbHVlID0gaGFuZGxlcl9zd2l0Y2hfdmFsdWU7CiAgICAgICAgICB4aC0+
YWN0aW9uUmVjb3JkID0gYWN0aW9uX3JlY29yZDsKICAgICAgICAgIHhoLT5sYW5ndWFnZVNwZWNp
ZmljRGF0YSA9IGxhbmd1YWdlX3NwZWNpZmljX2RhdGE7CiAgICAgICAgICB4aC0+YWRqdXN0ZWRQ
dHIgPSB0aHJvd25fcHRyOwoKCgogICAgICAgICAgeGgtPmNhdGNoVGVtcCA9ICh2b2lkICopIChf
VW53aW5kX1B0cikgbGFuZGluZ19wYWQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX1VSQ19IQU5E
TEVSX0ZPVU5EOwogICAgfQoKIGluc3RhbGxfY29udGV4dDoKICBpZiAoZm91bmRfdHlwZSA9PSBm
b3VuZF90ZXJtaW5hdGUpCiAgICB7CiAgICAgIF9fY3hhX2JlZ2luX2NhdGNoICgmeGgtPnVud2lu
ZEhlYWRlcik7CiAgICAgIF9fdGVybWluYXRlICh4aC0+dGVybWluYXRlSGFuZGxlcik7CiAgICB9
CgoKCiAgaWYgKGhhbmRsZXJfc3dpdGNoX3ZhbHVlIDwgMCkKICAgIHsKICAgICAgcGFyc2VfbHNk
YV9oZWFkZXIgKGNvbnRleHQsIHhoLT5sYW5ndWFnZVNwZWNpZmljRGF0YSwgJmluZm8pOwogICAg
ICB4aC0+Y2F0Y2hUZW1wID0gKHZvaWQgKikgYmFzZV9vZl9lbmNvZGVkX3ZhbHVlIChpbmZvLnR0
eXBlX2VuY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0KTsKICAgIH0KCiAgX1Vud2luZF9TZXRHUiAoY29udGV4dCwgX19i
dWlsdGluX2VoX3JldHVybl9kYXRhX3JlZ25vICgwKSwKICAgICAgICAgICAgICAgICAoX1Vud2lu
ZF9QdHIpICZ4aC0+dW53aW5kSGVhZGVyKTsKICBfVW53aW5kX1NldEdSIChjb250ZXh0LCBfX2J1
aWx0aW5fZWhfcmV0dXJuX2RhdGFfcmVnbm8gKDEpLAogICAgICAgICAgICAgICAgIGhhbmRsZXJf
c3dpdGNoX3ZhbHVlKTsKICBfVW53aW5kX1NldElQIChjb250ZXh0LCBsYW5kaW5nX3BhZCk7CiAg
cmV0dXJuIF9VUkNfSU5TVEFMTF9DT05URVhUOwp9CgpleHRlcm4gIkMiIHZvaWQKX19jeGFfY2Fs
bF91bmV4cGVjdGVkICh2b2lkICpleGNfb2JqX2luKQp7CiAgX1Vud2luZF9FeGNlcHRpb24gKmV4
Y19vYmoKICAgID0gcmVpbnRlcnByZXRfY2FzdCA8X1Vud2luZF9FeGNlcHRpb24gKj4oZXhjX29i
al9pbik7CgogIF9fY3hhX2JlZ2luX2NhdGNoIChleGNfb2JqKTsKCgoKICBzdHJ1Y3QgZW5kX2Nh
dGNoX3Byb3RlY3QKICB7CiAgICBlbmRfY2F0Y2hfcHJvdGVjdCgpIHsgfQogICAgfmVuZF9jYXRj
aF9wcm90ZWN0KCkgeyBfX2N4YV9lbmRfY2F0Y2goKTsgfQogIH0gZW5kX2NhdGNoX3Byb3RlY3Rf
b2JqOwoKICBsc2RhX2hlYWRlcl9pbmZvIGluZm87CiAgX19jeGFfZXhjZXB0aW9uICp4aCA9IF9f
Z2V0X2V4Y2VwdGlvbl9oZWFkZXJfZnJvbV91ZSAoZXhjX29iaik7CiAgY29uc3QgdW5zaWduZWQg
Y2hhciAqeGhfbHNkYTsKICBfVW53aW5kX1N3b3JkIHhoX3N3aXRjaF92YWx1ZTsKICBzdGQ6OnRl
cm1pbmF0ZV9oYW5kbGVyIHhoX3Rlcm1pbmF0ZV9oYW5kbGVyOwoKCgogIHhoX2xzZGEgPSB4aC0+
bGFuZ3VhZ2VTcGVjaWZpY0RhdGE7CiAgeGhfc3dpdGNoX3ZhbHVlID0geGgtPmhhbmRsZXJTd2l0
Y2hWYWx1ZTsKICB4aF90ZXJtaW5hdGVfaGFuZGxlciA9IHhoLT50ZXJtaW5hdGVIYW5kbGVyOwog
IGluZm8udHR5cGVfYmFzZSA9IChfVW53aW5kX1B0cikgeGgtPmNhdGNoVGVtcDsKCiAgdHJ5CiAg
ICB7IF9fdW5leHBlY3RlZCAoeGgtPnVuZXhwZWN0ZWRIYW5kbGVyKTsgfQogIGNhdGNoKC4uLikK
ICAgIHsKCgoKICAgICAgX19jeGFfZWhfZ2xvYmFscyAqZ2xvYmFscyA9IF9fY3hhX2dldF9nbG9i
YWxzX2Zhc3QgKCk7CiAgICAgIF9fY3hhX2V4Y2VwdGlvbiAqbmV3X3hoID0gZ2xvYmFscy0+Y2F1
Z2h0RXhjZXB0aW9uczsKICAgICAgdm9pZCAqbmV3X3B0ciA9IG5ld194aCArIDE7CgoKICAgICAg
cGFyc2VfbHNkYV9oZWFkZXIgKDAsIHhoX2xzZGEsICZpbmZvKTsKCgogICAgICBpZiAoY2hlY2tf
ZXhjZXB0aW9uX3NwZWMgKCZpbmZvLCBuZXdfeGgtPmV4Y2VwdGlvblR5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3X3B0ciwgeGhfc3dpdGNoX3ZhbHVlKSkKICAgICAgICB0
aHJvdzsKCgoKCgogICAgICBjb25zdCBzdGQ6OnR5cGVfaW5mbyAmYmFkX2V4YyA9IHR5cGVpZCAo
c3RkOjpiYWRfZXhjZXB0aW9uKTsKICAgICAgaWYgKGNoZWNrX2V4Y2VwdGlvbl9zcGVjICgmaW5m
bywgJmJhZF9leGMsIDAsIHhoX3N3aXRjaF92YWx1ZSkpCiAgICAgICAgdGhyb3cgc3RkOjpiYWRf
ZXhjZXB0aW9uKCk7CgoKICAgICAgX190ZXJtaW5hdGUgKHhoX3Rlcm1pbmF0ZV9oYW5kbGVyKTsK
ICAgIH0KfQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA=


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