c++/4040: ICE in genrtl_compound_stmt @ c-semantics.c

wjl@mindless.com wjl@mindless.com
Thu Aug 16 11:06:00 GMT 2001


>Number:         4040
>Category:       c++
>Synopsis:       ICE in genrtl_compound_stmt @ c-semantics.c
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Thu Aug 16 11:06:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Wes Landaker <wjl@ee.byu.edu>
>Release:        gcc version 3.1 20010815 (experimental) (current CVS HEAD)
>Organization:
>Environment:
Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/specs
Configured with: ../configure 
Thread model: single
gcc version 3.1 20010815 (experimental)
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/cc1plus -fpreprocessed kconfigbackend.ii -quiet -dumpbase kconfigbackend.ii -version -o /tmp/ccranyM7.s
GNU CPP version 3.1 20010815 (experimental) (cpplib) (i386 Linux/ELF)
GNU C++ version 3.1 20010815 (experimental) (i686-pc-linux-gnu)
        compiled by GNU C version 3.1 20010813 (experimental).
>Description:
This ICE actually happens on several files;
included is the first one I encountered.

% g++ kconfigbackend.ii
Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/specs
Configured with: ../configure 
Thread model: single
gcc version 3.1 20010815 (experimental)
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/cc1plus -fpreprocessed kconfigbackend.ii -quiet -dumpbase kconfigbackend.ii -version -o /tmp/ccranyM7.s
GNU CPP version 3.1 20010815 (experimental) (cpplib) (i386 Linux/ELF)
GNU C++ version 3.1 20010815 (experimental) (i686-pc-linux-gnu)
        compiled by GNU C version 3.1 20010813 (experimental).
kconfigbackend.cpp: In member function `void 
   KConfigINIBackEnd::parseSingleConfigFile(QFile&, KEntryMap*, bool)':
kconfigbackend.cpp:394: Internal compiler error in genrtl_compound_stmt, at 
   c-semantics.c:680
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.
>How-To-Repeat:
Run:

% g++ kconfigbackend.ii
>Fix:
None known. It's very stubborn.

I tried tons and tons of compiler flags and options, as
well as perterbing the code in the function it's complaining
about, with no positive results.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="kconfigbackend.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="kconfigbackend.ii"

IyAyMiAia2NvbmZpZ2JhY2tlbmQuY3BwIgojIDEgIi4uL2NvbmZpZy5oIiAxCiMgNjUwICIuLi9j
b25maWcuaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg
MjgzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2Rl
ZnMuaCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzExICIvdXNy
L2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAz
CiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjcgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw
ZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIg
MwoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5j
bHVkZS9zdGRkZWYuaCIgMSAzCiMgMTk5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNp
emVfdDsKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNp
Z25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25n
OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRf
dDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91
c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsK
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50
IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRl
ZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsK
Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9f
ZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0
eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsK
dHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVm
IF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3Vf
aW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90
IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5
cGVkZWYgX191X2xvbmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0
eXBlZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxb
Ml07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAq
X19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBs
b25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVm
IGludCBfX2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYg
aW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoK
CnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxr
Y250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcg
X19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRl
ZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRf
dDsKCgp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19v
ZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
cHRocmVhZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1
ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2No
ZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi
IDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAg
aW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1
Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MK
ewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3Nj
aGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2Nv
cGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAq
X19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0
eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9w
dGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0
cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5z
aWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21f
cmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAg
aW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhy
ZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRo
cmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBl
ZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2Nr
IF9fcndfbG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3Jp
dGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2Ny
IF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7
Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5k
OwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZv
bGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVj
dCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50
IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9i
YXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9i
YXJyaWVyYXR0cl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90Owoj
IDE0NCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3No
b3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xv
bmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7
CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0
eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7CgoK
Cgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0
eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoK
Cgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoK
Cgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoK
CgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoK
Cgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoK
Cgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA1NiAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDU3ICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190OwoKCgoKCgoKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MiAzCgoKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMgNzkgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA4MCAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgOTEgIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA5
MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsK
IyAxMjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgX191c2Vjb25k
c190IHVzZWNvbmRzX3Q7CgoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoK
CgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwojIDE0MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoK
dHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBp
bnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE4NCAiL3Vzci9pbmNsdWRl
L3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl
X18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl
X18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl
X18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl
X18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYg
dW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykp
KTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dv
cmRfXykpKTsKIyAyMDYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9lbmRpYW4uaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAy
IDMKIyAzNyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
ZW5kaWFuLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDIwNyAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0
LmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMK
CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUv
c3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMK
IyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9zaWdzZXQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCnR5
cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNp
Z25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGlu
dCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAy
IDMKCgoKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAxIDMKIyAxMDYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRpbWVzcGVj
CiAgewogICAgbG9uZyBpbnQgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9OwojIDQ0
ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
dGltZS5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNjQgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIg
MiAzCgoKCnN0cnVjdCB0aW1ldmFsCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNl
Y29uZHNfdCB0dl91c2VjOwogIH07CiMgNDYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIg
MwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fZmRfbWFzazsKCgoKCgoKCnR5cGVkZWYgc3RydWN0CiAg
ewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNr
KSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CiMg
ODkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVy
biBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAog
ICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAg
ICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVh
ZGZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywK
ICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0IF9fdGltZW91
dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fc2ln
bWFzaykgdGhyb3cgKCk7CgoKfQojIDIxMCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMK
CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDIxMyAiL3Vzci9pbmNs
dWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCnR5cGVkZWYgX19ibGtzaXplX3QgYmxrc2l6ZV90OwoK
CgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2Jsa2NudF90
IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7CiMgMjUxICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRf
dDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2ZpbGNu
dDY0X3QgZnNmaWxjbnQ2NF90OwoKCn0KIyA2NTEgIi4uL2NvbmZpZy5oIiAyCiMgODA1ICIuLi9j
b25maWcuaCIKZXh0ZXJuICJDIgoKaW50IG1rc3RlbXBzIChjaGFyKiBfdGVtcGxhdGUsIGludCBz
dWZmaXhfbGVuKTsKIyAyMyAia2NvbmZpZ2JhY2tlbmQuY3BwIiAyCgojIDEgIi91c3IvaW5jbHVk
ZS91bmlzdGQuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMK
CmV4dGVybiAiQyIgewojIDE3NSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvcG9zaXhfb3B0LmgiIDEgMwojIDE3NiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o
IiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9ubWVudHMuaCIgMSAzCiMgMjMg
Ii91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvd29yZHNpemUuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5o
IiAyIDMKIyAxODAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMTkwICIvdXNyL2luY2x1
ZGUvdW5pc3RkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAxOTEg
Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMTk5ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi
IDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMjQw
ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKdHlwZWRlZiBfX2ludHB0cl90IGludHB0cl90OwoK
CgoKCgp0eXBlZGVmIF9fc29ja2xlbl90IHNvY2tsZW5fdDsKIyAyNjAgIi91c3IvaW5jbHVkZS91
bmlzdGQuaCIgMwpleHRlcm4gaW50IGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBf
X3R5cGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBldWlkYWNjZXNzIChfX2NvbnN0IGNoYXIg
Kl9fbmFtZSwgaW50IF9fdHlwZSkgdGhyb3cgKCk7CiMgMjkwICIvdXNyL2luY2x1ZGUvdW5pc3Rk
LmgiIDMKZXh0ZXJuIF9fb2ZmX3QgbHNlZWsgKGludCBfX2ZkLCBfX29mZl90IF9fb2Zmc2V0LCBp
bnQgX193aGVuY2UpIHRocm93ICgpOwojIDMwMiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4
dGVybiBfX29mZjY0X3QgbHNlZWs2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX29mZnNldCwgaW50
IF9fd2hlbmNlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9zZSAoaW50IF9fZmQpIHRocm93
ICgpOwoKCgpleHRlcm4gc3NpemVfdCByZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVf
dCBfX25ieXRlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIHNzaXplX3Qgd3JpdGUgKGludCBfX2ZkLCBf
X2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNzaXpl
X3QgcHJlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLCBfX29mZl90
IF9fb2Zmc2V0KQogICAgIHRocm93ICgpOwpleHRlcm4gc3NpemVfdCBwd3JpdGUgKGludCBfX2Zk
LCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAg
IF9fb2ZmX3QgX19vZmZzZXQpIHRocm93ICgpOwojIDM0MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o
IiAzCmV4dGVybiBzc2l6ZV90IHByZWFkNjQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90
IF9fbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpIHRo
cm93ICgpOwoKCmV4dGVybiBzc2l6ZV90IHB3cml0ZTY0IChpbnQgX19mZCwgX19jb25zdCB2b2lk
ICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmNjRfdCBf
X29mZnNldCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHBpcGUgKGludCBfX3BpcGVkZXNb
Ml0pIHRocm93ICgpOwojIDM2MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiB1bnNp
Z25lZCBpbnQgYWxhcm0gKHVuc2lnbmVkIGludCBfX3NlY29uZHMpIHRocm93ICgpOwojIDM3MSAi
L3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiB1bnNpZ25lZCBpbnQgc2xlZXAgKHVuc2ln
bmVkIGludCBfX3NlY29uZHMpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gX191c2Vjb25kc190IHVh
bGFybSAoX191c2Vjb25kc190IF9fdmFsdWUsIF9fdXNlY29uZHNfdCBfX2ludGVydmFsKQogICAg
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVzbGVlcCAoX191c2Vjb25kc190IF9fdXNlY29uZHMp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcGF1c2UgKHZvaWQpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dp
ZF90IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmNob3duIChpbnQgX19m
ZCwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBsY2hvd24gKF9fY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3duZXIsIF9fZ2lk
X3QgX19ncm91cCkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgY2hkaXIgKF9fY29uc3Qg
Y2hhciAqX19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmY2hkaXIgKGludCBfX2ZkKSB0
aHJvdyAoKTsKIyA0MjMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gY2hhciAqZ2V0
Y3dkIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNo
YXIgKmdldF9jdXJyZW50X2Rpcl9uYW1lICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNo
YXIgKmdldHdkIChjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGR1cCAoaW50
IF9fZmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZHVwMiAoaW50IF9fZmQsIGludCBfX2ZkMikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKipfX2Vudmlyb247CgpleHRlcm4gY2hhciAqKmVudmly
b247CgoKCgoKZXh0ZXJuIGludCBleGVjdmUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpf
X2NvbnN0IF9fYXJndltdLAogICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCBfX2VudnBb
XSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZleGVjdmUgKGludCBfX2ZkLCBjaGFyICpfX2Nv
bnN0IF9fYXJndltdLCBjaGFyICpfX2NvbnN0IF9fZW52cFtdKQogICAgIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCBleGVjdiAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19h
cmd2W10pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWNsZSAoX19jb25zdCBjaGFyICpfX3Bh
dGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZXhl
Y2wgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IGV4ZWN2cCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIGNoYXIgKl9f
Y29uc3QgX19hcmd2W10pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBleGVjbHAgKF9fY29uc3Qg
Y2hhciAqX19maWxlLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBuaWNlIChpbnQgX19pbmMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX2V4aXQg
KGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRz
L2NvbmZuYW1lLmgiIDMKZW51bQogIHsKICAgIF9QQ19MSU5LX01BWCwKCiAgICBfUENfTUFYX0NB
Tk9OLAoKICAgIF9QQ19NQVhfSU5QVVQsCgogICAgX1BDX05BTUVfTUFYLAoKICAgIF9QQ19QQVRI
X01BWCwKCiAgICBfUENfUElQRV9CVUYsCgogICAgX1BDX0NIT1dOX1JFU1RSSUNURUQsCgogICAg
X1BDX05PX1RSVU5DLAoKICAgIF9QQ19WRElTQUJMRSwKCiAgICBfUENfU1lOQ19JTywKCiAgICBf
UENfQVNZTkNfSU8sCgogICAgX1BDX1BSSU9fSU8sCgogICAgX1BDX1NPQ0tfTUFYQlVGLAoKICAg
IF9QQ19GSUxFU0laRUJJVFMsCgogICAgX1BDX1JFQ19JTkNSX1hGRVJfU0laRSwKCiAgICBfUENf
UkVDX01BWF9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19NSU5fWEZFUl9TSVpFLAoKICAgIF9QQ19S
RUNfWEZFUl9BTElHTgoKICB9OwoKCmVudW0KICB7CiAgICBfU0NfQVJHX01BWCwKCiAgICBfU0Nf
Q0hJTERfTUFYLAoKICAgIF9TQ19DTEtfVENLLAoKICAgIF9TQ19OR1JPVVBTX01BWCwKCiAgICBf
U0NfT1BFTl9NQVgsCgogICAgX1NDX1NUUkVBTV9NQVgsCgogICAgX1NDX1RaTkFNRV9NQVgsCgog
ICAgX1NDX0pPQl9DT05UUk9MLAoKICAgIF9TQ19TQVZFRF9JRFMsCgogICAgX1NDX1JFQUxUSU1F
X1NJR05BTFMsCgogICAgX1NDX1BSSU9SSVRZX1NDSEVEVUxJTkcsCgogICAgX1NDX1RJTUVSUywK
CiAgICBfU0NfQVNZTkNIUk9OT1VTX0lPLAoKICAgIF9TQ19QUklPUklUSVpFRF9JTywKCiAgICBf
U0NfU1lOQ0hST05JWkVEX0lPLAoKICAgIF9TQ19GU1lOQywKCiAgICBfU0NfTUFQUEVEX0ZJTEVT
LAoKICAgIF9TQ19NRU1MT0NLLAoKICAgIF9TQ19NRU1MT0NLX1JBTkdFLAoKICAgIF9TQ19NRU1P
UllfUFJPVEVDVElPTiwKCiAgICBfU0NfTUVTU0FHRV9QQVNTSU5HLAoKICAgIF9TQ19TRU1BUEhP
UkVTLAoKICAgIF9TQ19TSEFSRURfTUVNT1JZX09CSkVDVFMsCgogICAgX1NDX0FJT19MSVNUSU9f
TUFYLAoKICAgIF9TQ19BSU9fTUFYLAoKICAgIF9TQ19BSU9fUFJJT19ERUxUQV9NQVgsCgogICAg
X1NDX0RFTEFZVElNRVJfTUFYLAoKICAgIF9TQ19NUV9PUEVOX01BWCwKCiAgICBfU0NfTVFfUFJJ
T19NQVgsCgogICAgX1NDX1ZFUlNJT04sCgogICAgX1NDX1BBR0VTSVpFLAoKCiAgICBfU0NfUlRT
SUdfTUFYLAoKICAgIF9TQ19TRU1fTlNFTVNfTUFYLAoKICAgIF9TQ19TRU1fVkFMVUVfTUFYLAoK
ICAgIF9TQ19TSUdRVUVVRV9NQVgsCgogICAgX1NDX1RJTUVSX01BWCwKCgoKCiAgICBfU0NfQkNf
QkFTRV9NQVgsCgogICAgX1NDX0JDX0RJTV9NQVgsCgogICAgX1NDX0JDX1NDQUxFX01BWCwKCiAg
ICBfU0NfQkNfU1RSSU5HX01BWCwKCiAgICBfU0NfQ09MTF9XRUlHSFRTX01BWCwKCiAgICBfU0Nf
RVFVSVZfQ0xBU1NfTUFYLAoKICAgIF9TQ19FWFBSX05FU1RfTUFYLAoKICAgIF9TQ19MSU5FX01B
WCwKCiAgICBfU0NfUkVfRFVQX01BWCwKCiAgICBfU0NfQ0hBUkNMQVNTX05BTUVfTUFYLAoKCiAg
ICBfU0NfMl9WRVJTSU9OLAoKICAgIF9TQ18yX0NfQklORCwKCiAgICBfU0NfMl9DX0RFViwKCiAg
ICBfU0NfMl9GT1JUX0RFViwKCiAgICBfU0NfMl9GT1JUX1JVTiwKCiAgICBfU0NfMl9TV19ERVYs
CgogICAgX1NDXzJfTE9DQUxFREVGLAoKCiAgICBfU0NfUElJLAoKICAgIF9TQ19QSUlfWFRJLAoK
ICAgIF9TQ19QSUlfU09DS0VULAoKICAgIF9TQ19QSUlfSU5URVJORVQsCgogICAgX1NDX1BJSV9P
U0ksCgogICAgX1NDX1BPTEwsCgogICAgX1NDX1NFTEVDVCwKCiAgICBfU0NfVUlPX01BWElPViwK
CiAgICBfU0NfSU9WX01BWCA9IF9TQ19VSU9fTUFYSU9WLAoKICAgIF9TQ19QSUlfSU5URVJORVRf
U1RSRUFNLAoKICAgIF9TQ19QSUlfSU5URVJORVRfREdSQU0sCgogICAgX1NDX1BJSV9PU0lfQ09U
UywKCiAgICBfU0NfUElJX09TSV9DTFRTLAoKICAgIF9TQ19QSUlfT1NJX00sCgogICAgX1NDX1Rf
SU9WX01BWCwKCgoKICAgIF9TQ19USFJFQURTLAoKICAgIF9TQ19USFJFQURfU0FGRV9GVU5DVElP
TlMsCgogICAgX1NDX0dFVEdSX1JfU0laRV9NQVgsCgogICAgX1NDX0dFVFBXX1JfU0laRV9NQVgs
CgogICAgX1NDX0xPR0lOX05BTUVfTUFYLAoKICAgIF9TQ19UVFlfTkFNRV9NQVgsCgogICAgX1ND
X1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMsCgogICAgX1NDX1RIUkVBRF9LRVlTX01BWCwK
CiAgICBfU0NfVEhSRUFEX1NUQUNLX01JTiwKCiAgICBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYLAoK
ICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS0FERFIsCgogICAgX1NDX1RIUkVBRF9BVFRSX1NUQUNL
U0laRSwKCiAgICBfU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcsCgogICAgX1NDX1RIUkVB
RF9QUklPX0lOSEVSSVQsCgogICAgX1NDX1RIUkVBRF9QUklPX1BST1RFQ1QsCgogICAgX1NDX1RI
UkVBRF9QUk9DRVNTX1NIQVJFRCwKCgogICAgX1NDX05QUk9DRVNTT1JTX0NPTkYsCgogICAgX1ND
X05QUk9DRVNTT1JTX09OTE4sCgogICAgX1NDX1BIWVNfUEFHRVMsCgogICAgX1NDX0FWUEhZU19Q
QUdFUywKCiAgICBfU0NfQVRFWElUX01BWCwKCiAgICBfU0NfUEFTU19NQVgsCgoKICAgIF9TQ19Y
T1BFTl9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9YQ1VfVkVSU0lPTiwKCiAgICBfU0NfWE9QRU5f
VU5JWCwKCiAgICBfU0NfWE9QRU5fQ1JZUFQsCgogICAgX1NDX1hPUEVOX0VOSF9JMThOLAoKICAg
IF9TQ19YT1BFTl9TSE0sCgoKICAgIF9TQ18yX0NIQVJfVEVSTSwKCiAgICBfU0NfMl9DX1ZFUlNJ
T04sCgogICAgX1NDXzJfVVBFLAoKCiAgICBfU0NfWE9QRU5fWFBHMiwKCiAgICBfU0NfWE9QRU5f
WFBHMywKCiAgICBfU0NfWE9QRU5fWFBHNCwKCgogICAgX1NDX0NIQVJfQklULAoKICAgIF9TQ19D
SEFSX01BWCwKCiAgICBfU0NfQ0hBUl9NSU4sCgogICAgX1NDX0lOVF9NQVgsCgogICAgX1NDX0lO
VF9NSU4sCgogICAgX1NDX0xPTkdfQklULAoKICAgIF9TQ19XT1JEX0JJVCwKCiAgICBfU0NfTUJf
TEVOX01BWCwKCiAgICBfU0NfTlpFUk8sCgogICAgX1NDX1NTSVpFX01BWCwKCiAgICBfU0NfU0NI
QVJfTUFYLAoKICAgIF9TQ19TQ0hBUl9NSU4sCgogICAgX1NDX1NIUlRfTUFYLAoKICAgIF9TQ19T
SFJUX01JTiwKCiAgICBfU0NfVUNIQVJfTUFYLAoKICAgIF9TQ19VSU5UX01BWCwKCiAgICBfU0Nf
VUxPTkdfTUFYLAoKICAgIF9TQ19VU0hSVF9NQVgsCgoKICAgIF9TQ19OTF9BUkdNQVgsCgogICAg
X1NDX05MX0xBTkdNQVgsCgogICAgX1NDX05MX01TR01BWCwKCiAgICBfU0NfTkxfTk1BWCwKCiAg
ICBfU0NfTkxfU0VUTUFYLAoKICAgIF9TQ19OTF9URVhUTUFYLAoKCiAgICBfU0NfWEJTNV9JTFAz
Ml9PRkYzMiwKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkZCSUcsCgogICAgX1NDX1hCUzVfTFA2NF9P
RkY2NCwKCiAgICBfU0NfWEJTNV9MUEJJR19PRkZCSUcsCgoKICAgIF9TQ19YT1BFTl9MRUdBQ1ks
CgogICAgX1NDX1hPUEVOX1JFQUxUSU1FLAoKICAgIF9TQ19YT1BFTl9SRUFMVElNRV9USFJFQURT
LAoKCiAgICBfU0NfQURWSVNPUllfSU5GTywKCiAgICBfU0NfQkFSUklFUlMsCgogICAgX1NDX0JB
U0UsCgogICAgX1NDX0NfTEFOR19TVVBQT1JULAoKICAgIF9TQ19DX0xBTkdfU1VQUE9SVF9SLAoK
ICAgIF9TQ19DTE9DS19TRUxFQ1RJT04sCgogICAgX1NDX0NQVVRJTUUsCgogICAgX1NDX1RIUkVB
RF9DUFVUSU1FLAoKICAgIF9TQ19ERVZJQ0VfSU8sCgogICAgX1NDX0RFVklDRV9TUEVDSUZJQywK
CiAgICBfU0NfREVWSUNFX1NQRUNJRklDX1IsCgogICAgX1NDX0ZEX01HTVQsCgogICAgX1NDX0ZJ
Rk8sCgogICAgX1NDX1BJUEUsCgogICAgX1NDX0ZJTEVfQVRUUklCVVRFUywKCiAgICBfU0NfRklM
RV9MT0NLSU5HLAoKICAgIF9TQ19GSUxFX1NZU1RFTSwKCiAgICBfU0NfTU9OT1RPTklDX0NMT0NL
LAoKICAgIF9TQ19NVUxUSVBMRV9QUk9DRVNTLAoKICAgIF9TQ19TSU5HTEVfUFJPQ0VTUywKCiAg
ICBfU0NfTkVUV09SS0lORywKCiAgICBfU0NfUkVBREVSX1dSSVRFUl9MT0NLUywKCiAgICBfU0Nf
U1BJTl9MT0NLUywKCiAgICBfU0NfUkVHRVhQLAoKICAgIF9TQ19SRUdFWF9WRVJTSU9OLAoKICAg
IF9TQ19TSEVMTCwKCiAgICBfU0NfU0lHTkFMUywKCiAgICBfU0NfU1BBV04sCgogICAgX1NDX1NQ
T1JBRElDX1NFUlZFUiwKCiAgICBfU0NfVEhSRUFEX1NQT1JBRElDX1NFUlZFUiwKCiAgICBfU0Nf
U1lTVEVNX0RBVEFCQVNFLAoKICAgIF9TQ19TWVNURU1fREFUQUJBU0VfUiwKCiAgICBfU0NfVElN
RU9VVFMsCgogICAgX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19VU0VSX0dST1VQ
UywKCiAgICBfU0NfVVNFUl9HUk9VUFNfUiwKCiAgICBfU0NfMl9QQlMsCgogICAgX1NDXzJfUEJT
X0FDQ09VTlRJTkcsCgogICAgX1NDXzJfUEJTX0xPQ0FURSwKCiAgICBfU0NfMl9QQlNfTUVTU0FH
RSwKCiAgICBfU0NfMl9QQlNfVFJBQ0ssCgogICAgX1NDX1NZTUxPT1AsCgogICAgX1NDX1NUUkVB
TVMsCgogICAgX1NDXzJfUEJTX0NIRUNLUE9JTlQKCiAgfTsKCgoKCgplbnVtCiAgewogICAgX0NT
X1BBVEgKCgoKCiAgICAsCiAgICBfQ1NfTEZTX0NGTEFHUyA9IDEwMDAsCgogICAgX0NTX0xGU19M
REZMQUdTLAoKICAgIF9DU19MRlNfTElCUywKCiAgICBfQ1NfTEZTX0xJTlRGTEFHUywKCiAgICBf
Q1NfTEZTNjRfQ0ZMQUdTLAoKICAgIF9DU19MRlM2NF9MREZMQUdTLAoKICAgIF9DU19MRlM2NF9M
SUJTLAoKICAgIF9DU19MRlM2NF9MSU5URkxBR1MKCgoKCiAgICAsCiAgICBfQ1NfWEJTNV9JTFAz
Ml9PRkYzMl9DRkxBR1MgPSAxMTAwLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xERkxBR1Ms
CgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYz
Ml9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1Nf
WEJTNV9JTFAzMl9PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElC
UywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0xQ
NjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTERGTEFHUywKCiAgICBf
Q1NfWEJTNV9MUDY0X09GRjY0X0xJQlMsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSU5URkxB
R1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJ
R19PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElCUywKCiAgICBf
Q1NfWEJTNV9MUEJJR19PRkZCSUdfTElOVEZMQUdTCgoKICB9OwojIDUwMSAiL3Vzci9pbmNsdWRl
L3VuaXN0ZC5oIiAyIDMKCgpleHRlcm4gbG9uZyBpbnQgcGF0aGNvbmYgKF9fY29uc3QgY2hhciAq
X19wYXRoLCBpbnQgX19uYW1lKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgZnBhdGhjb25m
IChpbnQgX19mZCwgaW50IF9fbmFtZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IHN5c2Nv
bmYgKGludCBfX25hbWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
ZXh0ZXJuIHNpemVfdCBjb25mc3RyIChpbnQgX19uYW1lLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f
bGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX3BpZF90IGdldHBpZCAodm9pZCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cHBpZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19w
aWRfdCBnZXRwZ3JwICh2b2lkKSB0aHJvdyAoKTsKIyA1MzYgIi91c3IvaW5jbHVkZS91bmlzdGQu
aCIgMwpleHRlcm4gX19waWRfdCBfX2dldHBnaWQgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoK
ZXh0ZXJuIF9fcGlkX3QgZ2V0cGdpZCAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBpbnQgc2V0cGdpZCAoX19waWRfdCBfX3BpZCwgX19waWRfdCBfX3BnaWQpIHRocm93ICgp
OwojIDU2MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgc2V0cGdycCAodm9p
ZCkgdGhyb3cgKCk7CiMgNTgwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fcGlk
X3Qgc2V0c2lkICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0c2lkIChfX3Bp
ZF90IF9fcGlkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fdWlkX3QgZ2V0dWlkICh2b2lkKSB0aHJv
dyAoKTsKCgpleHRlcm4gX191aWRfdCBnZXRldWlkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4g
X19naWRfdCBnZXRnaWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBfX2dpZF90IGdldGVnaWQg
KHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBnZXRncm91cHMgKGludCBfX3NpemUsIF9f
Z2lkX3QgX19saXN0W10pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGdyb3VwX21lbWJlciAoX19n
aWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgc2V0dWlkIChfX3VpZF90IF9f
dWlkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0cmV1aWQgKF9fdWlkX3QgX19ydWlkLCBf
X3VpZF90IF9fZXVpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldGV1aWQgKF9fdWlkX3Qg
X191aWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldGdpZCAoX19naWRfdCBfX2dpZCkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldHJlZ2lkIChfX2dpZF90IF9fcmdpZCwgX19naWRf
dCBfX2VnaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRlZ2lkIChfX2dpZF90IF9fZ2lk
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgZm9yayAodm9pZCkgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBfX3BpZF90IHZmb3JrICh2b2lkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hh
ciAqdHR5bmFtZSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHR0eW5hbWVfciAo
aW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IGlzYXR0eSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgdHR5c2xv
dCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGxpbmsgKF9fY29uc3QgY2hhciAqX19m
cm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHN5bWxpbmsg
KF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCByZWFkbGluayAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcGF0aCwgY2hh
ciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmxpbmsgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHJtZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBfX3BpZF90IHRjZ2V0cGdycCAoaW50IF9fZmQpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgdGNzZXRwZ3JwIChpbnQgX19mZCwgX19waWRfdCBfX3BncnBfaWQpIHRocm93ICgpOwoK
CgpleHRlcm4gY2hhciAqZ2V0bG9naW4gKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBn
ZXRsb2dpbl9yIChjaGFyICpfX25hbWUsIHNpemVfdCBfX25hbWVfbGVuKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgc2V0bG9naW4gKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKIyA3
MjYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIg
MSAzCiMgMzggIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRlcm4gIkMiIHsKIyA0NyAiL3Vz
ci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBjaGFyICpvcHRhcmc7CiMgNjEgIi91c3IvaW5j
bHVkZS9nZXRvcHQuaCIgMwpleHRlcm4gaW50IG9wdGluZDsKCgoKCmV4dGVybiBpbnQgb3B0ZXJy
OwoKCgpleHRlcm4gaW50IG9wdG9wdDsKIyAxNDUgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwpl
eHRlcm4gaW50IGdldG9wdCAoaW50IF9fYXJnYywgY2hhciAqY29uc3QgKl9fYXJndiwgY29uc3Qg
Y2hhciAqX19zaG9ydG9wdHMpOwojIDE3NCAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCn0KIyA3
MjcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKCgoKCgpleHRlcm4gaW50IGdldGhvc3Ru
YW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBp
bnQgc2V0aG9zdG5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHNldGhvc3RpZCAobG9uZyBpbnQgX19pZCkgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGludCBnZXRkb21haW5uYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikg
dGhyb3cgKCk7CmV4dGVybiBpbnQgc2V0ZG9tYWlubmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUs
IHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCB2aGFuZ3VwICh2b2lkKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHJldm9rZSAoX19jb25zdCBjaGFyICpfX2ZpbGUpIHRocm93
ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwcm9maWwgKHVuc2lnbmVkIHNob3J0IGludCAqX19zYW1w
bGVfYnVmZmVyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2Zm
c2V0LCB1bnNpZ25lZCBpbnQgX19zY2FsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBhY2N0
IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXR1c2Vy
c2hlbGwgKHZvaWQpIHRocm93ICgpOwpleHRlcm4gdm9pZCBlbmR1c2Vyc2hlbGwgKHZvaWQpIHRo
cm93ICgpOwpleHRlcm4gdm9pZCBzZXR1c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBpbnQgZGFlbW9uIChpbnQgX19ub2NoZGlyLCBpbnQgX19ub2Nsb3NlKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGludCBjaHJvb3QgKF9fY29uc3QgY2hhciAqX19wYXRoKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGNoYXIgKmdldHBhc3MgKF9fY29uc3QgY2hhciAqX19wcm9tcHQpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBpbnQgZnN5bmMgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGxvbmcgaW50IGdldGhvc3RpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3luYyAo
dm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGdldHBhZ2VzaXplICh2b2lkKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHRydW5jYXRlIChf
X2NvbnN0IGNoYXIgKl9fZmlsZSwgX19vZmZfdCBfX2xlbmd0aCkgdGhyb3cgKCk7CiMgODM2ICIv
dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCB0cnVuY2F0ZTY0IChfX2NvbnN0IGNo
YXIgKl9fZmlsZSwgX19vZmY2NF90IF9fbGVuZ3RoKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
ZnRydW5jYXRlIChpbnQgX19mZCwgX19vZmZfdCBfX2xlbmd0aCkgdGhyb3cgKCk7CiMgODUxICIv
dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBmdHJ1bmNhdGU2NCAoaW50IF9fZmQs
IF9fb2ZmNjRfdCBfX2xlbmd0aCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRkdGFibGVz
aXplICh2b2lkKSB0aHJvdyAoKTsKIyA4NjYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRl
cm4gaW50IGJyayAodm9pZCAqX19hZGRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqc2Jy
ayAoaW50cHRyX3QgX19kZWx0YSkgdGhyb3cgKCk7CiMgODg3ICIvdXNyL2luY2x1ZGUvdW5pc3Rk
LmgiIDMKZXh0ZXJuIGxvbmcgaW50IHN5c2NhbGwgKGxvbmcgaW50IF9fc3lzbm8sIC4uLikgdGhy
b3cgKCk7CiMgOTA3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBsb2NrZiAo
aW50IF9fZmQsIGludCBfX2NtZCwgX19vZmZfdCBfX2xlbikgdGhyb3cgKCk7CiMgOTE3ICIvdXNy
L2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBsb2NrZjY0IChpbnQgX19mZCwgaW50IF9f
Y21kLCBfX29mZjY0X3QgX19sZW4pIHRocm93ICgpOwojIDkzOCAiL3Vzci9pbmNsdWRlL3VuaXN0
ZC5oIiAzCmV4dGVybiBpbnQgZmRhdGFzeW5jIChpbnQgX19maWxkZXMpIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIGNoYXIgKmNyeXB0IChfX2NvbnN0IGNoYXIgKl9fa2V5LCBfX2NvbnN0IGNoYXIg
Kl9fc2FsdCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGVuY3J5cHQgKGNoYXIgKl9fYmxvY2ss
IGludCBfX2VkZmxhZykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkIHN3YWIgKF9fY29uc3Qg
dm9pZCAqX19yZXN0cmljdCBfX2Zyb20sIHZvaWQgKl9fcmVzdHJpY3QgX190bywKICAgICAgICAg
ICAgICAgICAgc3NpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJt
aWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgOTgzICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMK
ZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgdGhyb3cgKCk7CgoKfQoj
IDI1ICJrY29uZmlnYmFja2VuZC5jcHAiIDIKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAz
CiMgMjYgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz
LmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCmV4dGVy
biAiQyIgewojIDQwICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9l
bmRpYW4uaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCgoKCgoKZW51bQp7
CiAgX0lTdXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgwKSkg
Pj4gOCkpLAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8
PCAoMSkpID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkg
OiAoKDEgPDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAoMykp
IDw8IDgpIDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgx
IDw8ICg0KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwg
OCA/ICgoMSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50ID0g
KCg2KSA8IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwKICBfSVNn
cmFwaCA9ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+PiA4KSks
CiAgX0lTYmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8ICg4KSkg
Pj4gOCkpLAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6ICgoMSA8
PCAoOSkpID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTApKSA8PCA4
KSA6ICgoMSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAoKDEgPDwg
KDExKSkgPDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5jbHVkZS9j
dHlwZS5oIiAzCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwpl
eHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsKZXh0ZXJuIF9fY29uc3Qg
X19pbnQzMl90ICpfX2N0eXBlX3RvdXBwZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAz
CmV4dGVybiBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChp
bnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgaXNkaWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93
ICgpOwpleHRlcm4gaW50IGlzZ3JhcGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmlu
dCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRl
cm4gaW50IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IGlzYmxhbmsgKGludCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2Mp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiBpbnQgaXNhc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdG9h
c2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX3RvbG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMTY4ICIvdXNyL2lu
Y2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gX19pbmxpbmUgaW50CnRvbG93ZXIgKGludCBfX2MpIHRo
cm93ICgpCnsKICByZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwgMjU2ID8gX19jdHlwZV90b2xv
d2VyW19fY10gOiBfX2M7Cn0KCmV4dGVybiBfX2lubGluZSBpbnQKdG91cHBlciAoaW50IF9fYykg
dGhyb3cgKCkKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBfX2N0eXBlX3Rv
dXBwZXJbX19jXSA6IF9fYzsKfQojIDIxMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIg
Mwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewoKICBzdHJ1Y3QgbG9jYWxlX2RhdGEg
Kl9fbG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsK
ICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91cHBl
cjsKfSAqX19sb2NhbGVfdDsKIyAyMTIgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKIyAyMjQg
Ii91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgX19pc2FsbnVtX2wgKGludCwgX19s
b2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2FscGhhX2wgKGludCwgX19sb2NhbGVf
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2NudHJsX2wgKGludCwgX19sb2NhbGVfdCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX19pc2RpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX19pc2xvd2VyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX19pc2dyYXBoX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
X19pc3ByaW50X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3B1
bmN0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3NwYWNlX2wg
KGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3VwcGVyX2wgKGludCwg
X19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3hkaWdpdF9sIChpbnQsIF9fbG9j
YWxlX3QpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX2lzYmxhbmtfbCAoaW50LCBfX2xvY2FsZV90
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVf
dCBfX2wpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX190b3VwcGVyX2wgKGludCBfX2MsIF9fbG9j
YWxlX3QgX19sKSB0aHJvdyAoKTsKIyAyNzcgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCn0KIyAy
NiAia2NvbmZpZ2JhY2tlbmQuY3BwIiAyCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvbW1hbi5oIiAx
IDMKIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVh
dHVyZXMuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9zeXMvbW1hbi5oIiAyIDMKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgi
IDIgMwoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgiIDIgMwoj
IDQyICIvdXNyL2luY2x1ZGUvc3lzL21tYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21t
YW4uaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zeXMvbW1hbi5oIiAyIDMKCgoKCmV4dGVybiAi
QyIgewojIDU4ICIvdXNyL2luY2x1ZGUvc3lzL21tYW4uaCIgMwpleHRlcm4gdm9pZCAqbW1hcCAo
dm9pZCAqX19hZGRyLCBzaXplX3QgX19sZW4sIGludCBfX3Byb3QsCiAgICAgICAgICAgICAgICAg
ICBpbnQgX19mbGFncywgaW50IF9fZmQsIF9fb2ZmX3QgX19vZmZzZXQpIHRocm93ICgpOwojIDcx
ICIvdXNyL2luY2x1ZGUvc3lzL21tYW4uaCIgMwpleHRlcm4gdm9pZCAqbW1hcDY0ICh2b2lkICpf
X2FkZHIsIHNpemVfdCBfX2xlbiwgaW50IF9fcHJvdCwKICAgICAgICAgICAgICAgICAgICAgaW50
IF9fZmxhZ3MsIGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBtdW5tYXAgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgbXByb3RlY3QgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuLCBpbnQgX19w
cm90KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbXN5bmMgKHZvaWQgKl9fYWRkciwgc2l6ZV90
IF9fbGVuLCBpbnQgX19mbGFncykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG1hZHZpc2UgKHZv
aWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuLCBpbnQgX19hZHZpY2UpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHBvc2l4X21hZHZpc2UgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuLCBpbnQgX19h
ZHZpY2UpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBtbG9jayAoX19jb25zdCB2b2lkICpfX2Fk
ZHIsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtdW5sb2NrIChfX2NvbnN0
IHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbWxv
Y2thbGwgKGludCBfX2ZsYWdzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBtdW5sb2NrYWxsICh2
b2lkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbXJlbWFwICh2b2lkICpfX2FkZHIsIHNp
emVfdCBfX29sZF9sZW4sIHNpemVfdCBfX25ld19sZW4sCiAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX21heV9tb3ZlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBtaW5jb3JlICh2b2lkICpf
X3N0YXJ0LCBzaXplX3QgX19sZW4sIHVuc2lnbmVkIGNoYXIgKl9fdmVjKTsKCgoKCmV4dGVybiBp
bnQgc2htX29wZW4gKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX19vZmxhZywgbW9kZV90IF9f
bW9kZSk7CgoKZXh0ZXJuIGludCBzaG1fdW5saW5rIChfX2NvbnN0IGNoYXIgKl9fbmFtZSk7Cgp9
CiMgMjggImtjb25maWdiYWNrZW5kLmNwcCIgMgoKCgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2lu
Y2x1ZGUvcWRpci5oIiAxCiMgNDIgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWRpci5oIgoj
IDEgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXN0cmxpc3QuaCIgMQojIDQyICIvdXNyL2xp
Yi9xdC0yLjMuMS9pbmNsdWRlL3FzdHJsaXN0LmgiCiMgMSAiL3Vzci9saWIvcXQtMi4zLjEvaW5j
bHVkZS9xc3RyaW5nLmgiIDEKIyA0MyAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xc3RyaW5n
LmgiCiMgMSAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xY3N0cmluZy5oIiAxCiMgNDMgIi91
c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWNzdHJpbmcuaCIKIyAxICIvdXNyL2xpYi9xdC0yLjMu
MS9pbmNsdWRlL3FhcnJheS5oIiAxCiMgNDIgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWFy
cmF5LmgiCiMgMSAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xZ2FycmF5LmgiIDEKIyA0MiAi
L3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xZ2FycmF5LmgiCiMgMSAiL3Vzci9saWIvcXQtMi4z
LjEvaW5jbHVkZS9xc2hhcmVkLmgiIDEKIyA0MiAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9x
c2hhcmVkLmgiCiMgMSAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xZ2xvYmFsLmgiIDEKIyAz
NjcgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWdsb2JhbC5oIgp0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgdWNoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNob3J0Owp0eXBlZGVmIHVuc2ln
bmVkIHVpbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzsKdHlwZWRlZiBjaGFyICpwY2hh
cjsKdHlwZWRlZiB1Y2hhciAqcHVjaGFyOwp0eXBlZGVmIGNvbnN0IGNoYXIgKnBjY2hhcjsKCgoK
CgoKCmNvbnN0IGJvb2wgRkFMU0UgPSAwOwpjb25zdCBib29sIFRSVUUgPSAhMDsKIyA0MDUgIi91
c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWdsb2JhbC5oIgppbmxpbmUgaW50IHFSb3VuZCggZG91
YmxlIGQgKQp7CiAgICByZXR1cm4gZCA+IDAuMCA/IGludChkKzAuNSkgOiBpbnQoZC0wLjUpOwp9
CiMgNDI2ICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FnbG9iYWwuaCIKdHlwZWRlZiBzaWdu
ZWQgY2hhciBRX0lOVDg7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBRX1VJTlQ4Owp0eXBlZGVmIHNo
b3J0IFFfSU5UMTY7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgUV9VSU5UMTY7CnR5cGVkZWYgaW50
IFFfSU5UMzI7CnR5cGVkZWYgdW5zaWduZWQgaW50IFFfVUlOVDMyOwp0eXBlZGVmIGxvbmcgUV9J
TlQ2NDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFFfVUlOVDY0OwoKCgoKCmNsYXNzIFFEYXRhU3Ry
ZWFtOwojIDQ0OCAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xZ2xvYmFsLmgiCiMgMSAiL3Vz
ci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xZmVhdHVyZXMuaCIgMQojIDUzICIvdXNyL2xpYi9xdC0y
LjMuMS9pbmNsdWRlL3FmZWF0dXJlcy5oIgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUv
cWNvbmZpZy5oIiAxCiMgNTQgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWZlYXR1cmVzLmgi
IDIKIyA0NDkgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWdsb2JhbC5oIiAyCiMgNDg2ICIv
dXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FnbG9iYWwuaCIKICAgICAgICAgY29uc3QgY2hhciAq
cVZlcnNpb24oKTsKICAgICAgICAgYm9vbCBxU3lzSW5mbyggaW50ICp3b3JkU2l6ZSwgYm9vbCAq
YmlnRW5kaWFuICk7CiMgNTUwICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FnbG9iYWwuaCIK
ICAgICAgICAgdm9pZCBxRGVidWcoIGNvbnN0IGNoYXIgKiwgLi4uICkKCiAgICBfX2F0dHJpYnV0
ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKCjsKCiAgICAgICAgIHZvaWQgcVdhcm5pbmco
IGNvbnN0IGNoYXIgKiwgLi4uICkKCiAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYs
IDEsIDIpKSkKCjsKCiAgICAgICAgIHZvaWQgcUZhdGFsKCBjb25zdCBjaGFyICosIC4uLiApCgog
ICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7CiMgNjA5ICIvdXNy
L2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FnbG9iYWwuaCIKICAgICAgICAgYm9vbCBxdF9jaGVja19w
b2ludGVyKCBib29sIGMsIGNvbnN0IGNoYXIgKiwgaW50ICk7CgoKCgoKCgplbnVtIFF0TXNnVHlw
ZSB7IFF0RGVidWdNc2csIFF0V2FybmluZ01zZywgUXRGYXRhbE1zZyB9OwoKdHlwZWRlZiB2b2lk
ICgqbXNnX2hhbmRsZXIpKFF0TXNnVHlwZSwgY29uc3QgY2hhciAqKTsKICAgICAgICAgbXNnX2hh
bmRsZXIgcUluc3RhbGxNc2dIYW5kbGVyKCBtc2dfaGFuZGxlciApOwoKCiAgICAgICAgIHZvaWQg
cVN1cHByZXNzT2Jzb2xldGVXYXJuaW5ncyggYm9vbCA9IFRSVUUgKTsKCgoKICAgICAgICAgdm9p
ZCBxT2Jzb2xldGUoIGNvbnN0IGNoYXIgKm9iaiwgY29uc3QgY2hhciAqb2xkZnVuYywKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5ld2Z1bmMgKTsKICAgICAgICAgdm9pZCBx
T2Jzb2xldGUoIGNvbnN0IGNoYXIgKm9iaiwgY29uc3QgY2hhciAqb2xkZnVuYyApOwogICAgICAg
ICB2b2lkIHFPYnNvbGV0ZSggY29uc3QgY2hhciAqbWVzc2FnZSApOwojIDQzICIvdXNyL2xpYi9x
dC0yLjMuMS9pbmNsdWRlL3FzaGFyZWQuaCIgMgoKCgpzdHJ1Y3QgUVNoYXJlZAp7CiAgICBRU2hh
cmVkKCkgeyBjb3VudCA9IDE7IH0KICAgIHZvaWQgcmVmKCkgeyBjb3VudCsrOyB9CiAgICBib29s
IGRlcmVmKCkgeyByZXR1cm4gIS0tY291bnQ7IH0KICAgIHVpbnQgY291bnQ7Cn07CiMgNDMgIi91
c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWdhcnJheS5oIiAyCgoKCmNsYXNzIFFHQXJyYXkKewpm
cmllbmQgY2xhc3MgUUJ1ZmZlcjsKcHVibGljOgoKICAgIHN0cnVjdCBhcnJheV9kYXRhIDogcHVi
bGljIFFTaGFyZWQgewogICAgICAgIGFycmF5X2RhdGEoKSB7IGRhdGE9MDsgbGVuPTA7IH0KICAg
ICAgICBjaGFyICpkYXRhOwogICAgICAgIHVpbnQgbGVuOwogICAgfTsKICAgIFFHQXJyYXkoKTsK
cHJvdGVjdGVkOgogICAgUUdBcnJheSggaW50LCBpbnQgKTsKICAgIFFHQXJyYXkoIGludCBzaXpl
ICk7CiAgICBRR0FycmF5KCBjb25zdCBRR0FycmF5ICZhICk7CiAgICB2aXJ0dWFsIH5RR0FycmF5
KCk7CgogICAgUUdBcnJheSAmb3BlcmF0b3I9KCBjb25zdCBRR0FycmF5ICZhICkgeyByZXR1cm4g
YXNzaWduKCBhICk7IH0KCiAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCkgeyBkdXBsaWNhdGUoKnRo
aXMpOyB9CgogICAgY2hhciAqZGF0YSgpIGNvbnN0IHsgcmV0dXJuIHNoZC0+ZGF0YTsgfQogICAg
dWludCBucmVmcygpIGNvbnN0IHsgcmV0dXJuIHNoZC0+Y291bnQ7IH0KICAgIHVpbnQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIHNoZC0+bGVuOyB9CiAgICBib29sIGlzRXF1YWwoIGNvbnN0IFFHQXJy
YXkgJmEgKSBjb25zdDsKCiAgICBib29sIHJlc2l6ZSggdWludCBuZXdzaXplICk7CgogICAgYm9v
bCBmaWxsKCBjb25zdCBjaGFyICpkLCBpbnQgbGVuLCB1aW50IHN6ICk7CgogICAgUUdBcnJheSAm
YXNzaWduKCBjb25zdCBRR0FycmF5ICZhICk7CiAgICBRR0FycmF5ICZhc3NpZ24oIGNvbnN0IGNo
YXIgKmQsIHVpbnQgbGVuICk7CiAgICBRR0FycmF5ICZkdXBsaWNhdGUoIGNvbnN0IFFHQXJyYXkg
JmEgKTsKICAgIFFHQXJyYXkgJmR1cGxpY2F0ZSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsK
ICAgIHZvaWQgc3RvcmUoIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVuICk7CgogICAgYXJyYXlfZGF0
YSAqc2hhcmVkQmxvY2soKSBjb25zdCB7IHJldHVybiBzaGQ7IH0KICAgIHZvaWQgc2V0U2hhcmVk
QmxvY2soIGFycmF5X2RhdGEgKnAgKSB7IHNoZD0oYXJyYXlfZGF0YSopcDsgfQoKICAgIFFHQXJy
YXkgJnNldFJhd0RhdGEoIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVuICk7CiAgICB2b2lkIHJlc2V0
UmF3RGF0YSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKCiAgICBpbnQgZmluZCggY29uc3Qg
Y2hhciAqZCwgdWludCBpbmRleCwgdWludCBzeiApIGNvbnN0OwogICAgaW50IGNvbnRhaW5zKCBj
b25zdCBjaGFyICpkLCB1aW50IHN6ICkgY29uc3Q7CgogICAgdm9pZCBzb3J0KCB1aW50IHN6ICk7
CiAgICBpbnQgYnNlYXJjaCggY29uc3QgY2hhciAqZCwgdWludCBzeiApIGNvbnN0OwoKICAgIGNo
YXIgKmF0KCB1aW50IGluZGV4ICkgY29uc3Q7CgogICAgYm9vbCBzZXRFeHBhbmQoIHVpbnQgaW5k
ZXgsIGNvbnN0IGNoYXIgKmQsIHVpbnQgc3ogKTsKCnByb3RlY3RlZDoKICAgIHZpcnR1YWwgYXJy
YXlfZGF0YSAqbmV3RGF0YSgpOwogICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGEoIGFycmF5X2Rh
dGEgKnAgKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgdm9pZCBtc2dfaW5kZXgoIHVpbnQgKTsKICAg
IGFycmF5X2RhdGEgKnNoZDsKfTsKCgppbmxpbmUgY2hhciAqUUdBcnJheTo6YXQoIHVpbnQgaW5k
ZXggKSBjb25zdAp7CgogICAgaWYgKCBpbmRleCA+PSBzaXplKCkgKSB7CiAgICAgICAgbXNnX2lu
ZGV4KCBpbmRleCApOwogICAgICAgIGluZGV4ID0gMDsKICAgIH0KCiAgICByZXR1cm4gJnNoZC0+
ZGF0YVtpbmRleF07Cn0KIyA0MyAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xYXJyYXkuaCIg
MgoKCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPiBjbGFzcyBRQXJyYXkgOiBwdWJsaWMgUUdBcnJheQp7
CnB1YmxpYzoKICAgIHR5cGVkZWYgdHlwZSogSXRlcmF0b3I7CiAgICB0eXBlZGVmIGNvbnN0IHR5
cGUqIENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGUgVmFsdWVUeXBlOwoKcHJvdGVjdGVk
OgogICAgUUFycmF5KCBpbnQsIGludCApIDogUUdBcnJheSggMCwgMCApIHt9CgpwdWJsaWM6CiAg
ICBRQXJyYXkoKSB7fQogICAgUUFycmF5KCBpbnQgc2l6ZSApIDogUUdBcnJheShzaXplKnNpemVv
Zih0eXBlKSkge30KICAgIFFBcnJheSggY29uc3QgUUFycmF5PHR5cGU+ICZhICkgOiBRR0FycmF5
KGEpIHt9CiAgIH5RQXJyYXkoKSB7fQogICAgUUFycmF5PHR5cGU+ICZvcGVyYXRvcj0oY29uc3Qg
UUFycmF5PHR5cGU+ICZhKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJu
IChRQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmFzc2lnbihhKTsgfQogICAgdHlwZSAqZGF0YSgpIGNv
bnN0IHsgcmV0dXJuICh0eXBlICopUUdBcnJheTo6ZGF0YSgpOyB9CiAgICB1aW50IG5yZWZzKCkg
Y29uc3QgeyByZXR1cm4gUUdBcnJheTo6bnJlZnMoKTsgfQogICAgdWludCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gUUdBcnJheTo6c2l6ZSgpL3NpemVvZih0eXBlKTsgfQogICAgdWludCBjb3VudCgp
IGNvbnN0IHsgcmV0dXJuIHNpemUoKTsgfQogICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gUUdBcnJheTo6c2l6ZSgpID09IDA7IH0KICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gUUdBcnJheTo6ZGF0YSgpID09IDA7IH0KICAgIGJvb2wgcmVzaXplKCB1aW50IHNpemUgKSB7
IHJldHVybiBRR0FycmF5OjpyZXNpemUoc2l6ZSpzaXplb2YodHlwZSkpOyB9CiAgICBib29sIHRy
dW5jYXRlKCB1aW50IHBvcyApIHsgcmV0dXJuIFFHQXJyYXk6OnJlc2l6ZShwb3Mqc2l6ZW9mKHR5
cGUpKTsgfQogICAgYm9vbCBmaWxsKCBjb25zdCB0eXBlICZkLCBpbnQgc2l6ZSA9IC0xICkKICAg
ICAgICB7IHJldHVybiBRR0FycmF5OjpmaWxsKChjaGFyKikmZCxzaXplLHNpemVvZih0eXBlKSAp
OyB9CiAgICB2b2lkIGRldGFjaCgpIHsgUUdBcnJheTo6ZGV0YWNoKCk7IH0KICAgIFFBcnJheTx0
eXBlPiBjb3B5KCkgY29uc3QKICAgICAgICB7IFFBcnJheTx0eXBlPiB0bXA7IHJldHVybiB0bXAu
ZHVwbGljYXRlKCp0aGlzKTsgfQogICAgUUFycmF5PHR5cGU+JiBhc3NpZ24oIGNvbnN0IFFBcnJh
eTx0eXBlPiYgYSApCiAgICAgICAgeyByZXR1cm4gKFFBcnJheTx0eXBlPiYpUUdBcnJheTo6YXNz
aWduKGEpOyB9CiAgICBRQXJyYXk8dHlwZT4mIGFzc2lnbiggY29uc3QgdHlwZSAqYSwgdWludCBu
ICkKICAgICAgICB7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5Ojphc3NpZ24oKGNoYXIq
KWEsbipzaXplb2YodHlwZSkpOyB9CiAgICBRQXJyYXk8dHlwZT4mIGR1cGxpY2F0ZSggY29uc3Qg
UUFycmF5PHR5cGU+JiBhICkKICAgICAgICB7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5
OjpkdXBsaWNhdGUoYSk7IH0KICAgIFFBcnJheTx0eXBlPiYgZHVwbGljYXRlKCBjb25zdCB0eXBl
ICphLCB1aW50IG4gKQogICAgICAgIHsgcmV0dXJuIChRQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmR1
cGxpY2F0ZSgoY2hhciopYSxuKnNpemVvZih0eXBlKSk7IH0KICAgIFFBcnJheTx0eXBlPiYgc2V0
UmF3RGF0YSggY29uc3QgdHlwZSAqYSwgdWludCBuICkKICAgICAgICB7IHJldHVybiAoUUFycmF5
PHR5cGU+JilRR0FycmF5OjpzZXRSYXdEYXRhKChjaGFyKilhLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4qc2l6ZW9mKHR5cGUpKTsgfQogICAg
dm9pZCByZXNldFJhd0RhdGEoIGNvbnN0IHR5cGUgKmEsIHVpbnQgbiApCiAgICAgICAgeyBRR0Fy
cmF5OjpyZXNldFJhd0RhdGEoKGNoYXIqKWEsbipzaXplb2YodHlwZSkpOyB9CiAgICBpbnQgZmlu
ZCggY29uc3QgdHlwZSAmZCwgdWludCBpPTAgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIFFHQXJy
YXk6OmZpbmQoKGNoYXIqKSZkLGksc2l6ZW9mKHR5cGUpKTsgfQogICAgaW50IGNvbnRhaW5zKCBj
b25zdCB0eXBlICZkICkgY29uc3QKICAgICAgICB7IHJldHVybiBRR0FycmF5Ojpjb250YWlucygo
Y2hhciopJmQsc2l6ZW9mKHR5cGUpKTsgfQogICAgdm9pZCBzb3J0KCkgeyBRR0FycmF5Ojpzb3J0
KHNpemVvZih0eXBlKSk7IH0KICAgIGludCBic2VhcmNoKCBjb25zdCB0eXBlICZkICkgY29uc3QK
ICAgICAgICB7IHJldHVybiBRR0FycmF5Ojpic2VhcmNoKChjb25zdCBjaGFyKikmZCxzaXplb2Yo
dHlwZSkpOyB9CiAgICB0eXBlJiBvcGVyYXRvcltdKCBpbnQgaSApIGNvbnN0CiAgICAgICAgeyBy
ZXR1cm4gKHR5cGUgJikoKih0eXBlICopUUdBcnJheTo6YXQoaSpzaXplb2YodHlwZSkpKTsgfQog
ICAgdHlwZSYgYXQoIHVpbnQgaSApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKHR5cGUgJikoKih0
eXBlICopUUdBcnJheTo6YXQoaSpzaXplb2YodHlwZSkpKTsgfQogICAgICAgICBvcGVyYXRvciBj
b25zdCB0eXBlKigpIGNvbnN0IHsgcmV0dXJuIChjb25zdCB0eXBlICopUUdBcnJheTo6ZGF0YSgp
OyB9CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFBcnJheTx0eXBlPiAmYSApIGNvbnN0IHsg
cmV0dXJuIGlzRXF1YWwoYSk7IH0KICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUFycmF5PHR5
cGU+ICZhICkgY29uc3QgeyByZXR1cm4gIWlzRXF1YWwoYSk7IH0KICAgIEl0ZXJhdG9yIGJlZ2lu
KCkgeyByZXR1cm4gZGF0YSgpOyB9CiAgICBJdGVyYXRvciBlbmQoKSB7IHJldHVybiBkYXRhKCkg
KyBzaXplKCk7IH0KICAgIENvbnN0SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBkYXRh
KCk7IH0KICAgIENvbnN0SXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gZGF0YSgpICsgc2l6
ZSgpOyB9Cn07CiMgNDQgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWNzdHJpbmcuaCIgMgoK
CgoKCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9z
dHJpbmcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9p
bmNsdWRlL3N0cmluZy5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAz
NCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9p
ZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAq
X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1l
bW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAg
ICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBf
X2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAq
bWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6
ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRl
cm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikK
ICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9p
ZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9p
ZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7Cgpl
eHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hh
ciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19z
MikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQg
c3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBf
X24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGlu
dCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZy
bSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgojIDEg
Ii91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDEwOSAiL3Vzci9pbmNsdWRlL3N0cmluZy5o
IiAyIDMKCgpleHRlcm4gaW50IF9fc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u
c3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3Qs
IF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9f
Y29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK
CgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90
IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hh
ciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4
dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChf
X2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2Nv
bnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBj
aGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpf
X2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy
biBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpf
X25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0
ZXJuIGNoYXIgKnN0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBj
aGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19z
dHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0
cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
ZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0
cikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19o
YXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgdm9pZCAqX19uZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAq
X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAq
X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1w
Y3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRl
cm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIg
Kl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhy
b3cgKCk7CgoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9f
YnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAo
dm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9f
Y29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBiY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6
ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRl
cm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNo
YXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
CmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3Qp
KTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoY29uc3QpKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25n
IGludCBfX2xsKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKCgoKZXh0
ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19z
MikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50
IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6
ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpl
eHRlcm4gaW50IF9fc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh
ciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2Vj
bXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAg
KGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2
ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFs
IChpbnQgX19zaWcpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19y
ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJv
dyAoKTsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIg
Kl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgp
OwoKCmV4dGVybiB2b2lkICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkg
dGhyb3cgKCk7CiMgMzYzICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQojIDUxICIvdXNyL2xp
Yi9xdC0yLjMuMS9pbmNsdWRlL3Fjc3RyaW5nLmgiIDIKIyA3OCAiL3Vzci9saWIvcXQtMi4zLjEv
aW5jbHVkZS9xY3N0cmluZy5oIgogICAgICAgICB2b2lkICpxbWVtbW92ZSggdm9pZCAqZHN0LCBj
b25zdCB2b2lkICpzcmMsIHVpbnQgbGVuICk7CgoKCgoKICAgICAgICAgY2hhciAqcXN0cmR1cCgg
Y29uc3QgY2hhciAqICk7CgogICAgICAgICBpbmxpbmUgdWludCBjc3RybGVuKCBjb25zdCBjaGFy
ICpzdHIgKQp7IHJldHVybiBzdHJsZW4oc3RyKTsgfQoKICAgICAgICAgaW5saW5lIHVpbnQgcXN0
cmxlbiggY29uc3QgY2hhciAqc3RyICkKeyByZXR1cm4gc3RyID8gc3RybGVuKHN0cikgOiAwOyB9
CgogICAgICAgICBpbmxpbmUgY2hhciAqY3N0cmNweSggY2hhciAqZHN0LCBjb25zdCBjaGFyICpz
cmMgKQp7IHJldHVybiBzdHJjcHkoZHN0LHNyYyk7IH0KCiAgICAgICAgIGlubGluZSBjaGFyICpx
c3RyY3B5KCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYyApCnsgcmV0dXJuIHNyYyA/IHN0cmNw
eShkc3QsIHNyYykgOiAwOyB9CgogICAgICAgICBjaGFyICpxc3RybmNweSggY2hhciAqZHN0LCBj
b25zdCBjaGFyICpzcmMsIHVpbnQgbGVuICk7CgogICAgICAgICBpbmxpbmUgaW50IGNzdHJjbXAo
IGNvbnN0IGNoYXIgKnN0cjEsIGNvbnN0IGNoYXIgKnN0cjIgKQp7IHJldHVybiBzdHJjbXAoc3Ry
MSxzdHIyKTsgfQoKICAgICAgICAgaW5saW5lIGludCBxc3RyY21wKCBjb25zdCBjaGFyICpzdHIx
LCBjb25zdCBjaGFyICpzdHIyICkKeyByZXR1cm4gKHN0cjEgJiYgc3RyMikgPyBzdHJjbXAoc3Ry
MSxzdHIyKSA6IChpbnQpKChsb25nKXN0cjIgLSAobG9uZylzdHIxKTsgfQoKICAgICAgICAgaW5s
aW5lIGludCBjc3RybmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hhciAqc3RyMiwgdWlu
dCBsZW4gKQp7IHJldHVybiBzdHJuY21wKHN0cjEsc3RyMixsZW4pOyB9CgogICAgICAgICBpbmxp
bmUgaW50IHFzdHJuY21wKCBjb25zdCBjaGFyICpzdHIxLCBjb25zdCBjaGFyICpzdHIyLCB1aW50
IGxlbiApCnsgcmV0dXJuIChzdHIxICYmIHN0cjIpID8gc3RybmNtcChzdHIxLHN0cjIsbGVuKSA6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKGxvbmcpc3RyMiAtIChsb25nKXN0cjEp
OyB9CgogICAgICAgICBpbnQgcXN0cmljbXAoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7
CgogICAgICAgICBpbnQgcXN0cm5pY21wKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdWlu
dCBsZW4gKTsKIyAxNDcgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWNzdHJpbmcuaCIKICAg
ICAgICAgUV9VSU5UMTYgcUNoZWNrc3VtKCBjb25zdCBjaGFyICpzLCB1aW50IGxlbiApOwojIDE1
NiAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xY3N0cmluZy5oIgp0eXBlZGVmIFFBcnJheTxj
aGFyPiBRQnl0ZUFycmF5OwoKCgoKCgogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCgg
UURhdGFTdHJlYW0gJiwgY29uc3QgUUJ5dGVBcnJheSAmICk7CiAgICAgICAgIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRQnl0ZUFycmF5ICYgKTsKIyAxNzMgIi91c3Iv
bGliL3F0LTIuMy4xL2luY2x1ZGUvcWNzdHJpbmcuaCIKY2xhc3MgUVJlZ0V4cDsKCmNsYXNzIFFD
U3RyaW5nIDogcHVibGljIFFCeXRlQXJyYXkKewpwdWJsaWM6CiAgICBRQ1N0cmluZygpIHt9CiAg
ICBRQ1N0cmluZyggaW50IHNpemUgKTsKICAgIFFDU3RyaW5nKCBjb25zdCBRQ1N0cmluZyAmcyAp
IDogUUJ5dGVBcnJheSggcyApIHt9CiAgICBRQ1N0cmluZyggY29uc3QgY2hhciAqc3RyICk7CiAg
ICBRQ1N0cmluZyggY29uc3QgY2hhciAqc3RyLCB1aW50IG1heGxlbiApOwoKICAgIFFDU3RyaW5n
ICZvcGVyYXRvcj0oIGNvbnN0IFFDU3RyaW5nICZzICk7CiAgICBRQ1N0cmluZyAmb3BlcmF0b3I9
KCBjb25zdCBjaGFyICpzdHIgKTsKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0OwogICAgYm9vbCBp
c0VtcHR5KCkgY29uc3Q7CiAgICB1aW50IGxlbmd0aCgpIGNvbnN0OwogICAgYm9vbCByZXNpemUo
IHVpbnQgbmV3bGVuICk7CiAgICBib29sIHRydW5jYXRlKCB1aW50IHBvcyApOwogICAgYm9vbCBm
aWxsKCBjaGFyIGMsIGludCBsZW4gPSAtMSApOwoKICAgIFFDU3RyaW5nIGNvcHkoKSBjb25zdDsK
CiAgICBRQ1N0cmluZyAmc3ByaW50ZiggY29uc3QgY2hhciAqZm9ybWF0LCAuLi4gKTsKCiAgICBp
bnQgZmluZCggY2hhciBjLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBp
bnQgZmluZCggY29uc3QgY2hhciAqc3RyLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29u
c3Q7CiAgICBpbnQgZmluZCggY29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5kZXg9MCApIGNvbnN0Owog
ICAgaW50IGZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4PS0xLCBib29sIGNzPVRSVUUpIGNvbnN0
OwogICAgaW50IGZpbmRSZXYoIGNvbnN0IGNoYXIgKnN0ciwgaW50IGluZGV4PS0xLCBib29sIGNz
PVRSVUUpIGNvbnN0OwogICAgaW50IGZpbmRSZXYoIGNvbnN0IFFSZWdFeHAgJiwgaW50IGluZGV4
PS0xICkgY29uc3Q7CiAgICBpbnQgY29udGFpbnMoIGNoYXIgYywgYm9vbCBjcz1UUlVFICkgY29u
c3Q7CiAgICBpbnQgY29udGFpbnMoIGNvbnN0IGNoYXIgKnN0ciwgYm9vbCBjcz1UUlVFICkgY29u
c3Q7CiAgICBpbnQgY29udGFpbnMoIGNvbnN0IFFSZWdFeHAgJiApIGNvbnN0OwoKICAgIFFDU3Ry
aW5nIGxlZnQoIHVpbnQgbGVuICkgY29uc3Q7CiAgICBRQ1N0cmluZyByaWdodCggdWludCBsZW4g
KSBjb25zdDsKICAgIFFDU3RyaW5nIG1pZCggdWludCBpbmRleCwgdWludCBsZW49MHhmZmZmZmZm
ZikgY29uc3Q7CgogICAgUUNTdHJpbmcgbGVmdEp1c3RpZnkoIHVpbnQgd2lkdGgsIGNoYXIgZmls
bD0nICcsIGJvb2wgdHJ1bmM9RkFMU0UpY29uc3Q7CiAgICBRQ1N0cmluZyByaWdodEp1c3RpZnko
IHVpbnQgd2lkdGgsIGNoYXIgZmlsbD0nICcsYm9vbCB0cnVuYz1GQUxTRSljb25zdDsKCiAgICBR
Q1N0cmluZyBsb3dlcigpIGNvbnN0OwogICAgUUNTdHJpbmcgdXBwZXIoKSBjb25zdDsKCiAgICBR
Q1N0cmluZyBzdHJpcFdoaXRlU3BhY2UoKSBjb25zdDsKICAgIFFDU3RyaW5nIHNpbXBsaWZ5V2hp
dGVTcGFjZSgpIGNvbnN0OwoKICAgIFFDU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNvbnN0
IGNoYXIgKiApOwogICAgUUNTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgY2hhciApOwogICAg
UUNTdHJpbmcgJmFwcGVuZCggY29uc3QgY2hhciAqICk7CiAgICBRQ1N0cmluZyAmcHJlcGVuZCgg
Y29uc3QgY2hhciAqICk7CiAgICBRQ1N0cmluZyAmcmVtb3ZlKCB1aW50IGluZGV4LCB1aW50IGxl
biApOwogICAgUUNTdHJpbmcgJnJlcGxhY2UoIHVpbnQgaW5kZXgsIHVpbnQgbGVuLCBjb25zdCBj
aGFyICogKTsKICAgIFFDU3RyaW5nICZyZXBsYWNlKCBjb25zdCBRUmVnRXhwICYsIGNvbnN0IGNo
YXIgKiApOwoKICAgIHNob3J0IHRvU2hvcnQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIHVzaG9y
dCB0b1VTaG9ydCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgaW50IHRvSW50KCBib29sICpvaz0w
ICkgY29uc3Q7CiAgICB1aW50IHRvVUludCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgbG9uZyB0
b0xvbmcoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIHVsb25nIHRvVUxvbmcoIGJvb2wgKm9rPTAg
KSBjb25zdDsKICAgIGZsb2F0IHRvRmxvYXQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIGRvdWJs
ZSB0b0RvdWJsZSggYm9vbCAqb2s9MCApIGNvbnN0OwoKICAgIFFDU3RyaW5nICZzZXRTdHIoIGNv
bnN0IGNoYXIgKnMgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIHNob3J0ICk7CiAgICBRQ1N0cmlu
ZyAmc2V0TnVtKCB1c2hvcnQgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIGludCApOwogICAgUUNT
dHJpbmcgJnNldE51bSggdWludCApOwogICAgUUNTdHJpbmcgJnNldE51bSggbG9uZyApOwogICAg
UUNTdHJpbmcgJnNldE51bSggdWxvbmcgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIGZsb2F0LCBj
aGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CiAgICBRQ1N0cmluZyAmc2V0TnVtKCBkb3VibGUsIGNo
YXIgZj0nZycsIGludCBwcmVjPTYgKTsKCiAgICBib29sIHNldEV4cGFuZCggdWludCBpbmRleCwg
Y2hhciBjICk7CgogICAgICAgICAgICAgICAgb3BlcmF0b3IgY29uc3QgY2hhciAqKCkgY29uc3Q7
CiAgICBRQ1N0cmluZyAmb3BlcmF0b3IrPSggY29uc3QgY2hhciAqc3RyICk7CiAgICBRQ1N0cmlu
ZyAmb3BlcmF0b3IrPSggY2hhciBjICk7Cn07CgoKCgoKCiAgICAgICAgIFFEYXRhU3RyZWFtICZv
cGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQ1N0cmluZyAmICk7CiAgICAgICAgIFFE
YXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRQ1N0cmluZyAmICk7CgoKCgoK
CmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6Om9wZXJhdG9yPSggY29uc3QgUUNTdHJpbmcgJnMg
KQp7IHJldHVybiAoUUNTdHJpbmcmKWFzc2lnbiggcyApOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFD
U3RyaW5nOjpvcGVyYXRvcj0oIGNvbnN0IGNoYXIgKnN0ciApCnsgcmV0dXJuIChRQ1N0cmluZyYp
ZHVwbGljYXRlKCBzdHIsIHFzdHJsZW4oc3RyKSsxICk7IH0KCmlubGluZSBib29sIFFDU3RyaW5n
Ojppc051bGwoKSBjb25zdAp7IHJldHVybiBkYXRhKCkgPT0gMDsgfQoKaW5saW5lIGJvb2wgUUNT
dHJpbmc6OmlzRW1wdHkoKSBjb25zdAp7IHJldHVybiBkYXRhKCkgPT0gMCB8fCAqZGF0YSgpID09
ICdcMCc7IH0KCmlubGluZSB1aW50IFFDU3RyaW5nOjpsZW5ndGgoKSBjb25zdAp7IHJldHVybiBx
c3RybGVuKCBkYXRhKCkgKTsgfQoKaW5saW5lIGJvb2wgUUNTdHJpbmc6OnRydW5jYXRlKCB1aW50
IHBvcyApCnsgcmV0dXJuIHJlc2l6ZShwb3MrMSk7IH0KCmlubGluZSBRQ1N0cmluZyBRQ1N0cmlu
Zzo6Y29weSgpIGNvbnN0CnsgcmV0dXJuIFFDU3RyaW5nKCBkYXRhKCkgKTsgfQoKaW5saW5lIFFD
U3RyaW5nICZRQ1N0cmluZzo6cHJlcGVuZCggY29uc3QgY2hhciAqcyApCnsgcmV0dXJuIGluc2Vy
dCgwLHMpOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjphcHBlbmQoIGNvbnN0IGNoYXIg
KnMgKQp7IHJldHVybiBvcGVyYXRvcis9KHMpOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5n
OjpzZXROdW0oIHNob3J0IG4gKQp7IHJldHVybiBzZXROdW0oKGxvbmcpbik7IH0KCmlubGluZSBR
Q1N0cmluZyAmUUNTdHJpbmc6OnNldE51bSggdXNob3J0IG4gKQp7IHJldHVybiBzZXROdW0oKHVs
b25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXROdW0oIGludCBuICkKeyBy
ZXR1cm4gc2V0TnVtKChsb25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXRO
dW0oIHVpbnQgbiApCnsgcmV0dXJuIHNldE51bSgodWxvbmcpbik7IH0KCmlubGluZSBRQ1N0cmlu
ZyAmUUNTdHJpbmc6OnNldE51bSggZmxvYXQgbiwgY2hhciBmLCBpbnQgcHJlYyApCnsgcmV0dXJu
IHNldE51bSgoZG91YmxlKW4sZixwcmVjKTsgfQoKaW5saW5lIFFDU3RyaW5nOjpvcGVyYXRvciBj
b25zdCBjaGFyICooKSBjb25zdAp7IHJldHVybiAoY29uc3QgY2hhciAqKWRhdGEoKTsgfQoKCgoK
CgogICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRQ1N0cmluZyAmczEsIGNv
bnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyLmRhdGEoKSkg
PT0gMDsgfQoKICAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUNTdHJpbmcg
JnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyKSA9PSAw
OyB9CgogICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBjaGFyICpzMSwgY29u
c3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkpID09IDA7IH0K
CiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29u
c3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIuZGF0YSgpKSAh
PSAwOyB9CgogICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRQ1N0cmluZyAm
czEsIGNvbnN0IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIpICE9IDA7
IH0KCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IGNoYXIgKnMxLCBjb25z
dCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLHMyLmRhdGEoKSkgIT0gMDsgfQoK
ICAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0
IFFDU3RyaW5nJiBzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyLmRhdGEoKSkgPCAw
OyB9CgogICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoIGNvbnN0IFFDU3RyaW5nICZzMSwg
Y29uc3QgY2hhciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMikgPCAwOyB9Cgog
ICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0
cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLHMyLmRhdGEoKSkgPCAwOyB9CgogICAgICAg
ICBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIg
KnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIpIDw9IDA7IH0KCiAgICAgICAgIGlu
bGluZSBib29sIG9wZXJhdG9yPD0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAmczIg
KQp7IHJldHVybiBxc3RyY21wKHMxLHMyLmRhdGEoKSkgPD0gMDsgfQoKICAgICAgICAgaW5saW5l
IGJvb2wgb3BlcmF0b3I+KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyBy
ZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIpID4gMDsgfQoKICAgICAgICAgaW5saW5lIGJvb2wg
b3BlcmF0b3I+KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4g
cXN0cmNtcChzMSxzMi5kYXRhKCkpID4gMDsgfQoKICAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0
b3I+PSggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJj
bXAoczEuZGF0YSgpLHMyKSA+PSAwOyB9CgogICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj49
KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChz
MSxzMi5kYXRhKCkpID49IDA7IH0KCiAgICAgICAgIGlubGluZSBRQ1N0cmluZyBvcGVyYXRvciso
IGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKewogICAgUUNTdHJpbmcg
dG1wKCBzMS5kYXRhKCkgKTsKICAgIHRtcCArPSBzMjsKICAgIHJldHVybiB0bXA7Cn0KCiAgICAg
ICAgIGlubGluZSBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3Qg
Y2hhciAqczIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMxLmRhdGEoKSApOwogICAgdG1wICs9IHMy
OwogICAgcmV0dXJuIHRtcDsKfQoKICAgICAgICAgaW5saW5lIFFDU3RyaW5nIG9wZXJhdG9yKygg
Y29uc3QgY2hhciAqczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsKICAgIFFDU3RyaW5nIHRtcCgg
czEgKTsKICAgIHRtcCArPSBzMjsKICAgIHJldHVybiB0bXA7Cn0KCiAgICAgICAgIGlubGluZSBR
Q1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFDU3RyaW5nICZzMSwgY2hhciBjMiApCnsKICAgIFFD
U3RyaW5nIHRtcCggczEuZGF0YSgpICk7CiAgICB0bXAgKz0gYzI7CiAgICByZXR1cm4gdG1wOwp9
CgogICAgICAgICBpbmxpbmUgUUNTdHJpbmcgb3BlcmF0b3IrKCBjaGFyIGMxLCBjb25zdCBRQ1N0
cmluZyAmczIgKQp7CiAgICBRQ1N0cmluZyB0bXA7CiAgICB0bXAgKz0gYzE7CiAgICB0bXAgKz0g
czI7CiAgICByZXR1cm4gdG1wOwp9CiMgNDQgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXN0
cmluZy5oIiAyCgoKCgoKCgpjbGFzcyBRUmVnRXhwOwpjbGFzcyBRU3RyaW5nOwpjbGFzcyBRQ2hh
clJlZjsKCmNsYXNzIFFDaGFyIHsKcHVibGljOgogICAgUUNoYXIoKTsKICAgIFFDaGFyKCBjaGFy
IGMgKTsKICAgIFFDaGFyKCB1Y2hhciBjICk7CiAgICBRQ2hhciggdWNoYXIgYywgdWNoYXIgciAp
OwogICAgUUNoYXIoIGNvbnN0IFFDaGFyJiBjICk7CiAgICBRQ2hhciggdXNob3J0IHJjICk7CiAg
ICBRQ2hhciggc2hvcnQgcmMgKTsKICAgIFFDaGFyKCB1aW50IHJjICk7CiAgICBRQ2hhciggaW50
IHJjICk7CgogICAgc3RhdGljIGNvbnN0IFFDaGFyIG51bGw7CiAgICBzdGF0aWMgY29uc3QgUUNo
YXIgcmVwbGFjZW1lbnQ7CiAgICBzdGF0aWMgY29uc3QgUUNoYXIgYnl0ZU9yZGVyTWFyazsKICAg
IHN0YXRpYyBjb25zdCBRQ2hhciBieXRlT3JkZXJTd2FwcGVkOwogICAgc3RhdGljIGNvbnN0IFFD
aGFyIG5ic3A7CgoKCiAgICBlbnVtIENhdGVnb3J5CiAgICB7CiAgICAgICAgTm9DYXRlZ29yeSwK
CiAgICAgICAgTWFya19Ob25TcGFjaW5nLAogICAgICAgIE1hcmtfU3BhY2luZ0NvbWJpbmluZywK
ICAgICAgICBNYXJrX0VuY2xvc2luZywKCiAgICAgICAgTnVtYmVyX0RlY2ltYWxEaWdpdCwKICAg
ICAgICBOdW1iZXJfTGV0dGVyLAogICAgICAgIE51bWJlcl9PdGhlciwKCiAgICAgICAgU2VwYXJh
dG9yX1NwYWNlLAogICAgICAgIFNlcGFyYXRvcl9MaW5lLAogICAgICAgIFNlcGFyYXRvcl9QYXJh
Z3JhcGgsCgogICAgICAgIE90aGVyX0NvbnRyb2wsCiAgICAgICAgT3RoZXJfRm9ybWF0LAogICAg
ICAgIE90aGVyX1N1cnJvZ2F0ZSwKICAgICAgICBPdGhlcl9Qcml2YXRlVXNlLAogICAgICAgIE90
aGVyX05vdEFzc2lnbmVkLAoKICAgICAgICBMZXR0ZXJfVXBwZXJjYXNlLAogICAgICAgIExldHRl
cl9Mb3dlcmNhc2UsCiAgICAgICAgTGV0dGVyX1RpdGxlY2FzZSwKICAgICAgICBMZXR0ZXJfTW9k
aWZpZXIsCiAgICAgICAgTGV0dGVyX090aGVyLAoKICAgICAgICBQdW5jdHVhdGlvbl9Db25uZWN0
b3IsCiAgICAgICAgUHVuY3R1YXRpb25fRGFzaywKICAgICAgICBQdW5jdHVhdGlvbl9PcGVuLAog
ICAgICAgIFB1bmN0dWF0aW9uX0Nsb3NlLAogICAgICAgIFB1bmN0dWF0aW9uX0luaXRpYWxRdW90
ZSwKICAgICAgICBQdW5jdHVhdGlvbl9GaW5hbFF1b3RlLAogICAgICAgIFB1bmN0dWF0aW9uX090
aGVyLAoKICAgICAgICBTeW1ib2xfTWF0aCwKICAgICAgICBTeW1ib2xfQ3VycmVuY3ksCiAgICAg
ICAgU3ltYm9sX01vZGlmaWVyLAogICAgICAgIFN5bWJvbF9PdGhlcgogICAgfTsKCiAgICBlbnVt
IERpcmVjdGlvbgogICAgewogICAgICAgIERpckwsIERpclIsIERpckVOLCBEaXJFUywgRGlyRVQs
IERpckFOLCBEaXJDUywgRGlyQiwgRGlyUywgRGlyV1MsIERpck9OLAogICAgICAgIERpckxSRSwg
RGlyTFJPLCBEaXJBTCwgRGlyUkxFLCBEaXJSTE8sIERpclBERiwgRGlyTlNNLCBEaXJCTgogICAg
fTsKCiAgICBlbnVtIERlY29tcG9zaXRpb24KICAgIHsKICAgICAgICBTaW5nbGUsIENhbm9uaWNh
bCwgRm9udCwgTm9CcmVhaywgSW5pdGlhbCwgTWVkaWFsLAogICAgICAgIEZpbmFsLCBJc29sYXRl
ZCwgQ2lyY2xlLCBTdXBlciwgU3ViLCBWZXJ0aWNhbCwKICAgICAgICBXaWRlLCBOYXJyb3csIFNt
YWxsLCBTcXVhcmUsIENvbXBhdCwgRnJhY3Rpb24KICAgIH07CgogICAgZW51bSBKb2luaW5nCiAg
ICB7CiAgICAgICAgT3RoZXJKb2luaW5nLCBEdWFsLCBSaWdodCwgQ2VudGVyCiAgICB9OwoKCgog
ICAgaW50IGRpZ2l0VmFsdWUoKSBjb25zdDsKICAgIFFDaGFyIGxvd2VyKCkgY29uc3Q7CiAgICBR
Q2hhciB1cHBlcigpIGNvbnN0OwoKICAgIENhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3Q7CiAgICBE
aXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3Q7CiAgICBKb2luaW5nIGpvaW5pbmcoKSBjb25zdDsK
ICAgIGJvb2wgbWlycm9yZWQoKSBjb25zdDsKICAgIFFDaGFyIG1pcnJvcmVkQ2hhcigpIGNvbnN0
OwogICAgUVN0cmluZyBkZWNvbXBvc2l0aW9uKCkgY29uc3Q7CiAgICBEZWNvbXBvc2l0aW9uIGRl
Y29tcG9zaXRpb25UYWcoKSBjb25zdDsKCiAgICBjaGFyIGxhdGluMSgpIGNvbnN0IHsgcmV0dXJu
IHJ3ID8gMCA6IGNsOyB9CiAgICB1c2hvcnQgdW5pY29kZSgpIGNvbnN0IHsgcmV0dXJuIChydyA8
PCA4KSB8IGNsOyB9CgoKICAgIG9wZXJhdG9yIGNoYXIoKSBjb25zdCB7IHJldHVybiBsYXRpbjEo
KTsgfQoKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHVuaWNvZGUoKT09MDsgfQog
ICAgYm9vbCBpc1ByaW50KCkgY29uc3Q7CiAgICBib29sIGlzUHVuY3QoKSBjb25zdDsKICAgIGJv
b2wgaXNTcGFjZSgpIGNvbnN0OwogICAgYm9vbCBpc01hcmsoKSBjb25zdDsKICAgIGJvb2wgaXNM
ZXR0ZXIoKSBjb25zdDsKICAgIGJvb2wgaXNOdW1iZXIoKSBjb25zdDsKICAgIGJvb2wgaXNMZXR0
ZXJPck51bWJlcigpIGNvbnN0OwogICAgYm9vbCBpc0RpZ2l0KCkgY29uc3Q7CgogICAgdWNoYXIm
IGNlbGwoKSB7IHJldHVybiBjbDsgfQogICAgdWNoYXImIHJvdygpIHsgcmV0dXJuIHJ3OyB9CiAg
ICB1Y2hhciBjZWxsKCkgY29uc3QgeyByZXR1cm4gY2w7IH0KICAgIHVjaGFyIHJvdygpIGNvbnN0
IHsgcmV0dXJuIHJ3OyB9CgogICAgc3RhdGljIGJvb2wgbmV0d29ya09yZGVyZWQoKSB7IHJldHVy
biAoaW50KW5ldF9vcmRlcmVkID09IDE7IH0KCiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRv
cj09KCBjaGFyIGNoLCBRQ2hhciBjICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcj09
KCBRQ2hhciBjLCBjaGFyIGNoICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcj09KCBR
Q2hhciBjMSwgUUNoYXIgYzIgKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yIT0oIFFD
aGFyIGMxLCBRQ2hhciBjMiApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3IhPSggY2hh
ciBjaCwgUUNoYXIgYyApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3IhPSggUUNoYXIg
YywgY2hhciBjaCApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3I8PSggUUNoYXIgYywg
Y2hhciBjaCApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3I8PSggY2hhciBjaCwgUUNo
YXIgYyApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3I8PSggUUNoYXIgYzEsIFFDaGFy
IGMyICk7Cgpwcml2YXRlOgoKCgogICAgdWNoYXIgcnc7CiAgICB1Y2hhciBjbDsKCgoKICAgIGVu
dW0geyBuZXRfb3JkZXJlZCA9IDEgfTsKIyAyMDIgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUv
cXN0cmluZy5oIgp9IDsKCmlubGluZSBRQ2hhcjo6UUNoYXIoKQp7CiAgICBydyA9IDA7IGNsID0g
MDsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBjaGFyIGMgKQp7CiAgICBydyA9IDA7IGNsID0g
KHVjaGFyKWM7CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggdWNoYXIgYyApCnsKICAgIHJ3ID0g
MDsgY2wgPSBjOwoKCgp9CmlubGluZSBRQ2hhcjo6UUNoYXIoIHVjaGFyIGMsIHVjaGFyIHIgKQp7
CiAgICBydyA9IHI7IGNsID0gYzsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBjb25zdCBRQ2hh
ciYgYyApCnsKICAgIHJ3ID0gYy5ydzsgY2wgPSBjLmNsOwoKCgp9CmlubGluZSBRQ2hhcjo6UUNo
YXIoIHVzaG9ydCByYyApCnsKICAgIHJ3ID0gKHVjaGFyKSgocmM+PjgpJjB4ZmYpOyBjbCA9ICh1
Y2hhcikocmMmMHhmZik7CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggc2hvcnQgcmMgKQp7CiAg
ICBydyA9ICh1Y2hhcikoKHJjPj44KSYweGZmKTsgY2wgPSAodWNoYXIpKHJjJjB4ZmYpOwoKCgp9
CmlubGluZSBRQ2hhcjo6UUNoYXIoIHVpbnQgcmMgKQp7CiAgICBydyA9ICh1Y2hhcikoKHJjPj44
KSYweGZmKTsgY2wgPSAodWNoYXIpKHJjJjB4ZmYpOwoKCgp9CmlubGluZSBRQ2hhcjo6UUNoYXIo
IGludCByYyApCnsKICAgIHJ3ID0gKHVjaGFyKSgocmM+PjgpJjB4ZmYpOyBjbCA9ICh1Y2hhciko
cmMmMHhmZik7CgoKCn0KCgppbmxpbmUgaW50IG9wZXJhdG9yPT0oIGNoYXIgY2gsIFFDaGFyIGMg
KQp7CiAgICByZXR1cm4gY2ggPT0gYy5jbCAmJiAhYy5ydzsKfQoKaW5saW5lIGludCBvcGVyYXRv
cj09KCBRQ2hhciBjLCBjaGFyIGNoICkKewogICAgcmV0dXJuIGNoID09IGMuY2wgJiYgIWMucnc7
Cn0KCmlubGluZSBpbnQgb3BlcmF0b3I9PSggUUNoYXIgYzEsIFFDaGFyIGMyICkKewogICAgcmV0
dXJuIGMxLmNsID09IGMyLmNsCiAgICAgICAgJiYgYzEucncgPT0gYzIucnc7Cn0KCmlubGluZSBp
bnQgb3BlcmF0b3IhPSggUUNoYXIgYzEsIFFDaGFyIGMyICkKewogICAgcmV0dXJuIGMxLmNsICE9
IGMyLmNsCiAgICAgICAgfHwgYzEucncgIT0gYzIucnc7Cn0KCmlubGluZSBpbnQgb3BlcmF0b3Ih
PSggY2hhciBjaCwgUUNoYXIgYyApCnsKICAgIHJldHVybiBjaCAhPSBjLmNsIHx8IGMucnc7Cn0K
CmlubGluZSBpbnQgb3BlcmF0b3IhPSggUUNoYXIgYywgY2hhciBjaCApCnsKICAgIHJldHVybiBj
aCAhPSBjLmNsIHx8IGMucnc7Cn0KCmlubGluZSBpbnQgb3BlcmF0b3I8PSggUUNoYXIgYywgY2hh
ciBjaCApCnsKICAgIHJldHVybiAhKGNoIDwgYy5jbCB8fCBjLnJ3KTsKfQoKaW5saW5lIGludCBv
cGVyYXRvcjw9KCBjaGFyIGNoLCBRQ2hhciBjICkKewogICAgcmV0dXJuIGNoIDw9IGMuY2wgfHwg
Yy5ydzsKfQoKaW5saW5lIGludCBvcGVyYXRvcjw9KCBRQ2hhciBjMSwgUUNoYXIgYzIgKQp7CiAg
ICByZXR1cm4gYzEucncgPiBjMi5ydwogICAgICAgID8gRkFMU0UKICAgICAgICA6IGMxLnJ3IDwg
YzIucncKICAgICAgICAgICAgPyBUUlVFCiAgICAgICAgICAgIDogYzEuY2wgPD0gYzIuY2w7Cn0K
CmlubGluZSBpbnQgb3BlcmF0b3I+PSggUUNoYXIgYywgY2hhciBjaCApIHsgcmV0dXJuIGNoIDw9
IGM7IH0KaW5saW5lIGludCBvcGVyYXRvcj49KCBjaGFyIGNoLCBRQ2hhciBjICkgeyByZXR1cm4g
YyA8PSBjaDsgfQppbmxpbmUgaW50IG9wZXJhdG9yPj0oIFFDaGFyIGMxLCBRQ2hhciBjMiApIHsg
cmV0dXJuIGMyIDw9IGMxOyB9CmlubGluZSBpbnQgb3BlcmF0b3I8KCBRQ2hhciBjLCBjaGFyIGNo
ICkgeyByZXR1cm4gIShjaDw9Yyk7IH0KaW5saW5lIGludCBvcGVyYXRvcjwoIGNoYXIgY2gsIFFD
aGFyIGMgKSB7IHJldHVybiAhKGM8PWNoKTsgfQppbmxpbmUgaW50IG9wZXJhdG9yPCggUUNoYXIg
YzEsIFFDaGFyIGMyICkgeyByZXR1cm4gIShjMjw9YzEpOyB9CmlubGluZSBpbnQgb3BlcmF0b3I+
KCBRQ2hhciBjLCBjaGFyIGNoICkgeyByZXR1cm4gIShjaD49Yyk7IH0KaW5saW5lIGludCBvcGVy
YXRvcj4oIGNoYXIgY2gsIFFDaGFyIGMgKSB7IHJldHVybiAhKGM+PWNoKTsgfQppbmxpbmUgaW50
IG9wZXJhdG9yPiggUUNoYXIgYzEsIFFDaGFyIGMyICkgeyByZXR1cm4gIShjMj49YzEpOyB9CgoK
c3RydWN0IFFTdHJpbmdEYXRhIDogcHVibGljIFFTaGFyZWQgewogICAgUVN0cmluZ0RhdGEoKSA6
CiAgICAgICAgdW5pY29kZSgwKSwgYXNjaWkoMCksIGxlbigwKSwgbWF4bCgwKSwgZGlydHlhc2Np
aSgwKSB7IHJlZigpOyB9CiAgICBRU3RyaW5nRGF0YShRQ2hhciAqdSwgdWludCBsLCB1aW50IG0p
IDoKICAgICAgICB1bmljb2RlKHUpLCBhc2NpaSgwKSwgbGVuKGwpLCBtYXhsKG0pLCBkaXJ0eWFz
Y2lpKDApIHsgfQoKICAgIH5RU3RyaW5nRGF0YSgpIHsgaWYgKCB1bmljb2RlICkgZGVsZXRlW10g
KChjaGFyKil1bmljb2RlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCBhc2NpaSApIGRlbGV0
ZVtdIGFzY2lpOyB9CgogICAgdm9pZCBkZWxldGVTZWxmKCk7CiAgICBRQ2hhciAqdW5pY29kZTsK
ICAgIGNoYXIgKmFzY2lpOwogICAgdWludCBsZW47CiAgICB1aW50IG1heGw6MzA7CiAgICB1aW50
IGRpcnR5YXNjaWk6MTsKfTsKCgpjbGFzcyBRU3RyaW5nCnsKcHVibGljOgogICAgUVN0cmluZygp
OwogICAgUVN0cmluZyggUUNoYXIgKTsKICAgIFFTdHJpbmcoIGNvbnN0IFFTdHJpbmcgJiApOwog
ICAgUVN0cmluZyggY29uc3QgUUJ5dGVBcnJheSYgKTsKICAgIFFTdHJpbmcoIGNvbnN0IFFDaGFy
KiB1bmljb2RlLCB1aW50IGxlbmd0aCApOwoKICAgIFFTdHJpbmcoIGNvbnN0IGNoYXIgKnN0ciAp
OwoKICAgIH5RU3RyaW5nKCk7CgogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBRU3RyaW5n
ICYgKTsKCiAgICBRU3RyaW5nICZvcGVyYXRvcj0oIGNvbnN0IGNoYXIgKiApOwoKICAgIFFTdHJp
bmcgJm9wZXJhdG9yPSggY29uc3QgUUNTdHJpbmcmICk7CiAgICBRU3RyaW5nICZvcGVyYXRvcj0o
IFFDaGFyIGMgKTsKICAgIFFTdHJpbmcgJm9wZXJhdG9yPSggY2hhciBjICk7CgogICAgc3RhdGlj
IGNvbnN0IFFTdHJpbmcgbnVsbDsKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0OwogICAgYm9vbCBp
c0VtcHR5KCkgY29uc3Q7CiAgICB1aW50IGxlbmd0aCgpIGNvbnN0OwogICAgdm9pZCB0cnVuY2F0
ZSggdWludCBwb3MgKTsKCgoKCiAgICB2b2lkIGZpbGwoIFFDaGFyIGMsIGludCBsZW4gPSAtMSAp
OwoKICAgIFFTdHJpbmcgY29weSgpIGNvbnN0OwoKICAgIFFTdHJpbmcgYXJnKGxvbmcgYSwgaW50
IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTApIGNvbnN0OwogICAgUVN0cmluZyBhcmcodWxvbmcg
YSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTApIGNvbnN0OwogICAgUVN0cmluZyBhcmco
aW50IGEsIGludCBmaWVsZHdpZHRoPTAsIGludCBiYXNlPTEwKSBjb25zdDsKICAgIFFTdHJpbmcg
YXJnKHVpbnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTApIGNvbnN0OwogICAgUVN0
cmluZyBhcmcoc2hvcnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTApIGNvbnN0Owog
ICAgUVN0cmluZyBhcmcodXNob3J0IGEsIGludCBmaWVsZHdpZHRoPTAsIGludCBiYXNlPTEwKSBj
b25zdDsKICAgIFFTdHJpbmcgYXJnKGNoYXIgYSwgaW50IGZpZWxkd2lkdGg9MCkgY29uc3Q7CiAg
ICBRU3RyaW5nIGFyZyhRQ2hhciBhLCBpbnQgZmllbGR3aWR0aD0wKSBjb25zdDsKICAgIFFTdHJp
bmcgYXJnKGNvbnN0IFFTdHJpbmcmIGEsIGludCBmaWVsZHdpZHRoPTApIGNvbnN0OwogICAgUVN0
cmluZyBhcmcoZG91YmxlIGEsIGludCBmaWVsZHdpZHRoPTAsIGNoYXIgZm10PSdnJywgaW50IHBy
ZWM9LTEpIGNvbnN0OwoKICAgIFFTdHJpbmcgJnNwcmludGYoIGNvbnN0IGNoYXIqIGZvcm1hdCwg
Li4uICkKCiAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCgog
ICAgICAgIDsKCiAgICBpbnQgZmluZCggUUNoYXIgYywgaW50IGluZGV4PTAsIGJvb2wgY3M9VFJV
RSApIGNvbnN0OwogICAgaW50IGZpbmQoIGNoYXIgYywgaW50IGluZGV4PTAsIGJvb2wgY3M9VFJV
RSApIGNvbnN0OwogICAgaW50IGZpbmQoIGNvbnN0IFFTdHJpbmcgJnN0ciwgaW50IGluZGV4PTAs
IGJvb2wgY3M9VFJVRSApIGNvbnN0OwogICAgaW50IGZpbmQoIGNvbnN0IFFSZWdFeHAgJiwgaW50
IGluZGV4PTAgKSBjb25zdDsKCiAgICBpbnQgZmluZCggY29uc3QgY2hhciogc3RyLCBpbnQgaW5k
ZXg9MCApIGNvbnN0OwoKICAgIGludCBmaW5kUmV2KCBRQ2hhciBjLCBpbnQgaW5kZXg9LTEsIGJv
b2wgY3M9VFJVRSkgY29uc3Q7CiAgICBpbnQgZmluZFJldiggY2hhciBjLCBpbnQgaW5kZXg9LTEs
IGJvb2wgY3M9VFJVRSkgY29uc3Q7CiAgICBpbnQgZmluZFJldiggY29uc3QgUVN0cmluZyAmc3Ry
LCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkgY29uc3Q7CiAgICBpbnQgZmluZFJldiggY29u
c3QgUVJlZ0V4cCAmLCBpbnQgaW5kZXg9LTEgKSBjb25zdDsKCiAgICBpbnQgZmluZFJldiggY29u
c3QgY2hhciogc3RyLCBpbnQgaW5kZXg9LTEgKSBjb25zdDsKCiAgICBpbnQgY29udGFpbnMoIFFD
aGFyIGMsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwogICAgaW50IGNvbnRhaW5zKCBjaGFyIGMsIGJv
b2wgY3M9VFJVRSApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gY29udGFpbnMo
UUNoYXIoYyksIGNzKTsgfQoKICAgIGludCBjb250YWlucyggY29uc3QgY2hhciogc3RyLCBib29s
IGNzPVRSVUUgKSBjb25zdDsKCiAgICBpbnQgY29udGFpbnMoIGNvbnN0IFFTdHJpbmcgJnN0ciwg
Ym9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBpbnQgY29udGFpbnMoIGNvbnN0IFFSZWdFeHAgJiAp
IGNvbnN0OwoKICAgIFFTdHJpbmcgbGVmdCggdWludCBsZW4gKSBjb25zdDsKICAgIFFTdHJpbmcg
cmlnaHQoIHVpbnQgbGVuICkgY29uc3Q7CiAgICBRU3RyaW5nIG1pZCggdWludCBpbmRleCwgdWlu
dCBsZW49MHhmZmZmZmZmZikgY29uc3Q7CgogICAgUVN0cmluZyBsZWZ0SnVzdGlmeSggdWludCB3
aWR0aCwgUUNoYXIgZmlsbD0nICcsIGJvb2wgdHJ1bmM9RkFMU0UpY29uc3Q7CiAgICBRU3RyaW5n
IHJpZ2h0SnVzdGlmeSggdWludCB3aWR0aCwgUUNoYXIgZmlsbD0nICcsYm9vbCB0cnVuYz1GQUxT
RSljb25zdDsKCiAgICBRU3RyaW5nIGxvd2VyKCkgY29uc3Q7CiAgICBRU3RyaW5nIHVwcGVyKCkg
Y29uc3Q7CgogICAgUVN0cmluZyBzdHJpcFdoaXRlU3BhY2UoKSBjb25zdDsKICAgIFFTdHJpbmcg
c2ltcGxpZnlXaGl0ZVNwYWNlKCkgY29uc3Q7CgogICAgUVN0cmluZyAmaW5zZXJ0KCB1aW50IGlu
ZGV4LCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwg
Y29uc3QgUUNoYXIqLCB1aW50IGxlbiApOwogICAgUVN0cmluZyAmaW5zZXJ0KCB1aW50IGluZGV4
LCBRQ2hhciApOwogICAgUVN0cmluZyAmaW5zZXJ0KCB1aW50IGluZGV4LCBjaGFyIGMgKSB7IHJl
dHVybiBpbnNlcnQoaW5kZXgsUUNoYXIoYykpOyB9CiAgICBRU3RyaW5nICZhcHBlbmQoIGNoYXIg
KTsKICAgIFFTdHJpbmcgJmFwcGVuZCggUUNoYXIgKTsKICAgIFFTdHJpbmcgJmFwcGVuZCggY29u
c3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5nICZwcmVwZW5kKCBjaGFyICk7CiAgICBRU3RyaW5n
ICZwcmVwZW5kKCBRQ2hhciApOwogICAgUVN0cmluZyAmcHJlcGVuZCggY29uc3QgUVN0cmluZyAm
ICk7CiAgICBRU3RyaW5nICZyZW1vdmUoIHVpbnQgaW5kZXgsIHVpbnQgbGVuICk7CiAgICBRU3Ry
aW5nICZyZXBsYWNlKCB1aW50IGluZGV4LCB1aW50IGxlbiwgY29uc3QgUVN0cmluZyAmICk7CiAg
ICBRU3RyaW5nICZyZXBsYWNlKCB1aW50IGluZGV4LCB1aW50IGxlbiwgY29uc3QgUUNoYXIqLCB1
aW50IGNsZW4gKTsKICAgIFFTdHJpbmcgJnJlcGxhY2UoIGNvbnN0IFFSZWdFeHAgJiwgY29uc3Qg
UVN0cmluZyAmICk7CgogICAgc2hvcnQgdG9TaG9ydCggYm9vbCAqb2s9MCwgaW50IGJhc2U9MTAg
KSBjb25zdDsKICAgIHVzaG9ydCB0b1VTaG9ydCggYm9vbCAqb2s9MCwgaW50IGJhc2U9MTAgKSBj
b25zdDsKICAgIGludCB0b0ludCggYm9vbCAqb2s9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAg
IHVpbnQgdG9VSW50KCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAgbG9uZyB0
b0xvbmcoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICB1bG9uZyB0b1VMb25n
KCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAgZmxvYXQgdG9GbG9hdCggYm9v
bCAqb2s9MCApIGNvbnN0OwogICAgZG91YmxlIHRvRG91YmxlKCBib29sICpvaz0wICkgY29uc3Q7
CgogICAgUVN0cmluZyAmc2V0TnVtKCBzaG9ydCwgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcg
JnNldE51bSggdXNob3J0LCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0TnVtKCBpbnQs
IGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5nICZzZXROdW0oIHVpbnQsIGludCBiYXNlPTEwICk7
CiAgICBRU3RyaW5nICZzZXROdW0oIGxvbmcsIGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5nICZz
ZXROdW0oIHVsb25nLCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0TnVtKCBmbG9hdCwg
Y2hhciBmPSdnJywgaW50IHByZWM9NiApOwogICAgUVN0cmluZyAmc2V0TnVtKCBkb3VibGUsIGNo
YXIgZj0nZycsIGludCBwcmVjPTYgKTsKCiAgICBzdGF0aWMgUVN0cmluZyBudW1iZXIoIGxvbmcs
IGludCBiYXNlPTEwICk7CiAgICBzdGF0aWMgUVN0cmluZyBudW1iZXIoIHVsb25nLCBpbnQgYmFz
ZT0xMCk7CiAgICBzdGF0aWMgUVN0cmluZyBudW1iZXIoIGludCwgaW50IGJhc2U9MTAgKTsKICAg
IHN0YXRpYyBRU3RyaW5nIG51bWJlciggdWludCwgaW50IGJhc2U9MTApOwogICAgc3RhdGljIFFT
dHJpbmcgbnVtYmVyKCBkb3VibGUsIGNoYXIgZj0nZycsIGludCBwcmVjPTYgKTsKCiAgICB2b2lk
IHNldEV4cGFuZCggdWludCBpbmRleCwgUUNoYXIgYyApOwoKICAgIFFTdHJpbmcgJm9wZXJhdG9y
Kz0oIGNvbnN0IFFTdHJpbmcgJnN0ciApOwogICAgUVN0cmluZyAmb3BlcmF0b3IrPSggUUNoYXIg
YyApOwogICAgUVN0cmluZyAmb3BlcmF0b3IrPSggY2hhciBjICk7CgoKICAgIFFDaGFyIGF0KCB1
aW50IGkgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGk8ZC0+bGVuID8gZC0+dW5pY29kZVtpXSA6
IFFDaGFyOjpudWxsOyB9CiAgICBRQ2hhciBvcGVyYXRvcltdKCBpbnQgaSApIGNvbnN0IHsgcmV0
dXJuIGF0KCh1aW50KWkpOyB9CiAgICBRQ2hhclJlZiBhdCggdWludCBpICk7CiAgICBRQ2hhclJl
ZiBvcGVyYXRvcltdKCBpbnQgaSApOwoKICAgIFFDaGFyIGNvbnN0cmVmKHVpbnQgaSkgY29uc3QK
ICAgICAgICB7IHJldHVybiBhdChpKTsgfQogICAgUUNoYXImIHJlZih1aW50IGkpCiAgICAgICAg
ewogICAgICAgICAgICBpZiAoZC0+Y291bnQhPTEgfHwgaT49ZC0+bGVuKQogICAgICAgICAgICAg
ICAgc3ViYXQoaSk7CiAgICAgICAgICAgIGQtPmRpcnR5YXNjaWk9MTsKICAgICAgICAgICAgcmV0
dXJuIGQtPnVuaWNvZGVbaV07CiAgICAgICAgfQoKICAgIGNvbnN0IFFDaGFyKiB1bmljb2RlKCkg
Y29uc3QgeyByZXR1cm4gZC0+dW5pY29kZTsgfQogICAgY29uc3QgY2hhciogYXNjaWkoKSBjb25z
dDsKICAgIGNvbnN0IGNoYXIqIGxhdGluMSgpIGNvbnN0OwogICAgc3RhdGljIFFTdHJpbmcgZnJv
bUxhdGluMShjb25zdCBjaGFyKiwgaW50IGxlbj0tMSk7CgogICAgUUNTdHJpbmcgdXRmOCgpIGNv
bnN0OwogICAgc3RhdGljIFFTdHJpbmcgZnJvbVV0ZjgoY29uc3QgY2hhciosIGludCBsZW49LTEp
OwoKICAgIFFDU3RyaW5nIGxvY2FsOEJpdCgpIGNvbnN0OwogICAgc3RhdGljIFFTdHJpbmcgZnJv
bUxvY2FsOEJpdChjb25zdCBjaGFyKiwgaW50IGxlbj0tMSk7CiAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0OwoKCgoKICAgIFFTdHJpbmcgJnNldFVuaWNvZGUoIGNvbnN0IFFDaGFyKiB1bmljb2Rl
LCB1aW50IGxlbiApOwogICAgUVN0cmluZyAmc2V0VW5pY29kZUNvZGVzKCBjb25zdCB1c2hvcnQq
IHVuaWNvZGVfYXNfdXNob3J0cywgdWludCBsZW4gKTsKICAgIFFTdHJpbmcgJnNldExhdGluMSgg
Y29uc3QgY2hhciosIGludCBsZW49LTEgKTsKCiAgICBpbnQgY29tcGFyZSggY29uc3QgUVN0cmlu
ZyYgcyApIGNvbnN0OwogICAgc3RhdGljIGludCBjb21wYXJlKCBjb25zdCBRU3RyaW5nJiBzMSwg
Y29uc3QgUVN0cmluZyYgczIgKQogICAgICAgIHsgcmV0dXJuIHMxLmNvbXBhcmUoczIpOyB9CgoK
ICAgIGZyaWVuZCBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVN0cmlu
ZyAmICk7CgoKICAgIHZvaWQgY29tcG9zZSgpOwogICAgUUNoYXI6OkRpcmVjdGlvbiBiYXNpY0Rp
cmVjdGlvbigpOwogICAgUVN0cmluZyB2aXN1YWwoaW50IGluZGV4ID0gMCwgaW50IGxlbiA9IC0x
KTsKCgoKCgogICAgYm9vbCBzdGFydHNXaXRoKCBjb25zdCBRU3RyaW5nJiApIGNvbnN0OwoKcHJp
dmF0ZToKICAgIFFTdHJpbmcoIGludCBzaXplLCBib29sICk7CgogICAgdm9pZCBkZXJlZigpOwog
ICAgdm9pZCByZWFsX2RldGFjaCgpOwogICAgdm9pZCBzZXRMZW5ndGgoIHVpbnQgcG9zICk7CiAg
ICB2b2lkIHN1YmF0KCB1aW50ICk7CiAgICBib29sIGZpbmRBcmcoaW50JiBwb3MsIGludCYgbGVu
KSBjb25zdDsKCiAgICBzdGF0aWMgUUNoYXIqIGFzY2lpVG9Vbmljb2RlKCBjb25zdCBjaGFyKiwg
dWludCAqIGxlbiwgdWludCBtYXhsZW49KHVpbnQpLTEgKTsKICAgIHN0YXRpYyBRQ2hhciogYXNj
aWlUb1VuaWNvZGUoIGNvbnN0IFFCeXRlQXJyYXkmLCB1aW50ICogbGVuICk7CiAgICBzdGF0aWMg
Y2hhciogdW5pY29kZVRvQXNjaWkoIGNvbnN0IFFDaGFyKiwgdWludCBsZW4gKTsKCiAgICBRU3Ry
aW5nRGF0YSAqZDsKICAgIHN0YXRpYyBRU3RyaW5nRGF0YSogc2hhcmVkX251bGw7CiAgICBzdGF0
aWMgUVN0cmluZ0RhdGEqIG1ha2VTaGFyZWROdWxsKCk7CgogICAgZnJpZW5kIGNsYXNzIFFDb25z
dFN0cmluZzsKICAgIFFTdHJpbmcoUVN0cmluZ0RhdGEqIGRkLCBib29sICkgOiBkKGRkKSB7IH0K
fTsKCmNsYXNzIFFDaGFyUmVmIHsKICAgIGZyaWVuZCBjbGFzcyBRU3RyaW5nOwogICAgUVN0cmlu
ZyYgczsKICAgIHVpbnQgcDsKICAgIFFDaGFyUmVmKFFTdHJpbmcqIHN0ciwgdWludCBwb3MpIDog
cygqc3RyKSwgcChwb3MpIHsgfQoKcHVibGljOgoKCgoKICAgIHVzaG9ydCB1bmljb2RlKCkgY29u
c3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS51bmljb2RlKCk7IH0KICAgIGNoYXIgbGF0aW4xKCkg
Y29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5sYXRpbjEoKTsgfQoKCiAgICBRQ2hhclJlZiBv
cGVyYXRvcj0oY2hhciBjICkgeyBzLnJlZihwKT1jOyByZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFy
UmVmIG9wZXJhdG9yPSh1Y2hhciBjICkgeyBzLnJlZihwKT1jOyByZXR1cm4gKnRoaXM7IH0KICAg
IFFDaGFyUmVmIG9wZXJhdG9yPShRQ2hhciBjICkgeyBzLnJlZihwKT1jOyByZXR1cm4gKnRoaXM7
IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPShjb25zdCBRQ2hhclJlZiYgYyApIHsgcy5yZWYocCk9
Yy51bmljb2RlKCk7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KHVzaG9y
dCByYyApIHsgcy5yZWYocCk9cmM7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0
b3I9KHNob3J0IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hhclJl
ZiBvcGVyYXRvcj0odWludCByYyApIHsgcy5yZWYocCk9cmM7IHJldHVybiAqdGhpczsgfQogICAg
UUNoYXJSZWYgb3BlcmF0b3I9KGludCByYyApIHsgcy5yZWYocCk9cmM7IHJldHVybiAqdGhpczsg
fQoKICAgIG9wZXJhdG9yIFFDaGFyICgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCk7IH0K
CgogICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiB1bmljb2RlKCk9PTA7IH0KICAgIGJv
b2wgaXNQcmludCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNQcmludCgpOyB9CiAg
ICBib29sIGlzUHVuY3QoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzUHVuY3QoKTsg
fQogICAgYm9vbCBpc1NwYWNlKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc1NwYWNl
KCk7IH0KICAgIGJvb2wgaXNNYXJrKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc01h
cmsoKTsgfQogICAgYm9vbCBpc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCku
aXNMZXR0ZXIoKTsgfQogICAgYm9vbCBpc051bWJlcigpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3Ry
ZWYocCkuaXNOdW1iZXIoKTsgfQogICAgYm9vbCBpc0xldHRlck9yTnVtYmVyKCkgeyByZXR1cm4g
cy5jb25zdHJlZihwKS5pc0xldHRlck9yTnVtYmVyKCk7IH0KICAgIGJvb2wgaXNEaWdpdCgpIGNv
bnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNEaWdpdCgpOyB9CgogICAgaW50IGRpZ2l0VmFs
dWUoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmRpZ2l0VmFsdWUoKTsgfQogICAgUUNo
YXIgbG93ZXIoKSB7IHJldHVybiBzLmNvbnN0cmVmKHApLmxvd2VyKCk7IH0KICAgIFFDaGFyIHVw
cGVyKCkgeyByZXR1cm4gcy5jb25zdHJlZihwKS51cHBlcigpOyB9CgogICAgUUNoYXI6OkNhdGVn
b3J5IGNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5jYXRlZ29yeSgpOyB9
CiAgICBRQ2hhcjo6RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3Ry
ZWYocCkuZGlyZWN0aW9uKCk7IH0KICAgIFFDaGFyOjpKb2luaW5nIGpvaW5pbmcoKSBjb25zdCB7
IHJldHVybiBzLmNvbnN0cmVmKHApLmpvaW5pbmcoKTsgfQogICAgYm9vbCBtaXJyb3JlZCgpIGNv
bnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkubWlycm9yZWQoKTsgfQogICAgUUNoYXIgbWlycm9y
ZWRDaGFyKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5taXJyb3JlZENoYXIoKTsgfQog
ICAgUVN0cmluZyBkZWNvbXBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5k
ZWNvbXBvc2l0aW9uKCk7IH0KICAgIFFDaGFyOjpEZWNvbXBvc2l0aW9uIGRlY29tcG9zaXRpb25U
YWcoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmRlY29tcG9zaXRpb25UYWcoKTsgfQoK
CiAgICB1Y2hhciBjZWxsKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5jZWxsKCk7IH0K
ICAgIHVjaGFyIHJvdygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkucm93KCk7IH0KCn07
CgppbmxpbmUgUUNoYXJSZWYgUVN0cmluZzo6YXQoIHVpbnQgaSApIHsgcmV0dXJuIFFDaGFyUmVm
KHRoaXMsaSk7IH0KaW5saW5lIFFDaGFyUmVmIFFTdHJpbmc6Om9wZXJhdG9yW10oIGludCBpICkg
eyByZXR1cm4gYXQoKHVpbnQpaSk7IH0KCgpjbGFzcyBRQ29uc3RTdHJpbmcgOiBwcml2YXRlIFFT
dHJpbmcgewpwdWJsaWM6CiAgICBRQ29uc3RTdHJpbmcoIFFDaGFyKiB1bmljb2RlLCB1aW50IGxl
bmd0aCApOwogICAgflFDb25zdFN0cmluZygpOwogICAgY29uc3QgUVN0cmluZyYgc3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gKnRoaXM7IH0KfTsKCgoKCgoKICAgICAgICAgUURhdGFTdHJlYW0gJm9w
ZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFTdHJpbmcgJiApOwogICAgICAgICBRRGF0
YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVN0cmluZyAmICk7CiMgNjQxICIv
dXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FzdHJpbmcuaCIKaW5saW5lIFFTdHJpbmc6OlFTdHJp
bmcoKSA6CiAgICBkKHNoYXJlZF9udWxsID8gc2hhcmVkX251bGwgOiBtYWtlU2hhcmVkTnVsbCgp
KQp7CiAgICBkLT5yZWYoKTsKfQoKaW5saW5lIFFTdHJpbmc6On5RU3RyaW5nKCkKewogICAgaWYg
KCBkLT5kZXJlZigpICkgewogICAgICAgIGlmICggZCA9PSBzaGFyZWRfbnVsbCApCiAgICAgICAg
ICAgIHNoYXJlZF9udWxsID0gMDsKICAgICAgICBkLT5kZWxldGVTZWxmKCk7CiAgICB9Cn0KCmlu
bGluZSBRU3RyaW5nICZRU3RyaW5nOjpvcGVyYXRvcj0oIFFDaGFyIGMgKQp7IHJldHVybiAqdGhp
cyA9IFFTdHJpbmcoYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpvcGVyYXRvcj0oIGNo
YXIgYyApCnsgcmV0dXJuICp0aGlzID0gUVN0cmluZyhRQ2hhcihjKSk7IH0KCmlubGluZSBib29s
IFFTdHJpbmc6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJuIHVuaWNvZGUoKSA9PSAwOyB9Cgppbmxp
bmUgYm9vbCBRU3RyaW5nOjpvcGVyYXRvciEoKSBjb25zdAp7IHJldHVybiBpc051bGwoKTsgfQoK
aW5saW5lIHVpbnQgUVN0cmluZzo6bGVuZ3RoKCkgY29uc3QKeyByZXR1cm4gZC0+bGVuOyB9Cgpp
bmxpbmUgYm9vbCBRU3RyaW5nOjppc0VtcHR5KCkgY29uc3QKeyByZXR1cm4gbGVuZ3RoKCkgPT0g
MDsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmluZzo6Y29weSgpIGNvbnN0CnsgcmV0dXJuIFFTdHJp
bmcoICp0aGlzICk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpwcmVwZW5kKCBjb25zdCBR
U3RyaW5nICYgcyApCnsgcmV0dXJuIGluc2VydCgwLHMpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0
cmluZzo6cHJlcGVuZCggUUNoYXIgYyApCnsgcmV0dXJuIGluc2VydCgwLGMpOyB9CgppbmxpbmUg
UVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCggY2hhciBjICkKeyByZXR1cm4gaW5zZXJ0KDAsYyk7
IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNvbnN0IFFTdHJpbmcgJiBzICkK
eyByZXR1cm4gb3BlcmF0b3IrPShzKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OmFwcGVu
ZCggUUNoYXIgYyApCnsgcmV0dXJuIG9wZXJhdG9yKz0oYyk7IH0KCmlubGluZSBRU3RyaW5nICZR
U3RyaW5nOjphcHBlbmQoIGNoYXIgYyApCnsgcmV0dXJuIG9wZXJhdG9yKz0oYyk7IH0KCmlubGlu
ZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0oIHNob3J0IG4sIGludCBiYXNlICkKeyByZXR1cm4g
c2V0TnVtKChsb25nKW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVt
KCB1c2hvcnQgbiwgaW50IGJhc2UgKQp7IHJldHVybiBzZXROdW0oKHVsb25nKW4sIGJhc2UpOyB9
CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVtKCBpbnQgbiwgaW50IGJhc2UgKQp7IHJl
dHVybiBzZXROdW0oKGxvbmcpbiwgYmFzZSk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpz
ZXROdW0oIHVpbnQgbiwgaW50IGJhc2UgKQp7IHJldHVybiBzZXROdW0oKHVsb25nKW4sIGJhc2Up
OyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVtKCBmbG9hdCBuLCBjaGFyIGYsIGlu
dCBwcmVjICkKeyByZXR1cm4gc2V0TnVtKChkb3VibGUpbixmLHByZWMpOyB9CgppbmxpbmUgUVN0
cmluZyBRU3RyaW5nOjphcmcoaW50IGEsIGludCBmaWVsZHdpZHRoLCBpbnQgYmFzZSkgY29uc3QK
eyByZXR1cm4gYXJnKChsb25nKWEsIGZpZWxkd2lkdGgsIGJhc2UpOyB9CgppbmxpbmUgUVN0cmlu
ZyBRU3RyaW5nOjphcmcodWludCBhLCBpbnQgZmllbGR3aWR0aCwgaW50IGJhc2UpIGNvbnN0Cnsg
cmV0dXJuIGFyZygodWxvbmcpYSwgZmllbGR3aWR0aCwgYmFzZSk7IH0KCmlubGluZSBRU3RyaW5n
IFFTdHJpbmc6OmFyZyhzaG9ydCBhLCBpbnQgZmllbGR3aWR0aCwgaW50IGJhc2UpIGNvbnN0Cnsg
cmV0dXJuIGFyZygobG9uZylhLCBmaWVsZHdpZHRoLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJpbmcg
UVN0cmluZzo6YXJnKHVzaG9ydCBhLCBpbnQgZmllbGR3aWR0aCwgaW50IGJhc2UpIGNvbnN0Cnsg
cmV0dXJuIGFyZygodWxvbmcpYSwgZmllbGR3aWR0aCwgYmFzZSk7IH0KCmlubGluZSBpbnQgUVN0
cmluZzo6ZmluZCggY2hhciBjLCBpbnQgaW5kZXgsIGJvb2wgY3MgKSBjb25zdAp7IHJldHVybiBm
aW5kKFFDaGFyKGMpLCBpbmRleCwgY3MpOyB9CgppbmxpbmUgaW50IFFTdHJpbmc6OmZpbmRSZXYo
IGNoYXIgYywgaW50IGluZGV4LCBib29sIGNzKSBjb25zdAp7IHJldHVybiBmaW5kUmV2KCBRQ2hh
cihjKSwgaW5kZXgsIGNzICk7IH0KCgoKaW5saW5lIGludCBRU3RyaW5nOjpmaW5kKCBjb25zdCBj
aGFyKiBzdHIsIGludCBpbmRleCApIGNvbnN0CnsgcmV0dXJuIGZpbmQoUVN0cmluZzo6ZnJvbUxh
dGluMShzdHIpLCBpbmRleCk7IH0KCmlubGluZSBpbnQgUVN0cmluZzo6ZmluZFJldiggY29uc3Qg
Y2hhciogc3RyLCBpbnQgaW5kZXggKSBjb25zdAp7IHJldHVybiBmaW5kUmV2KFFTdHJpbmc6OmZy
b21MYXRpbjEoc3RyKSwgaW5kZXgpOyB9CgoKCgoKCgogICAgICAgICBib29sIG9wZXJhdG9yIT0o
IGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogICAgICAgICBib29sIG9w
ZXJhdG9yPCggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgICAgICAg
IGJvb2wgb3BlcmF0b3I8PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7
CiAgICAgICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJp
bmcgJnMyICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBRU3RyaW5nICZzMSwgY29u
c3QgUVN0cmluZyAmczIgKTsKICAgICAgICAgYm9vbCBvcGVyYXRvcj49KCBjb25zdCBRU3RyaW5n
ICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKCiAgICAgICAgIGJvb2wgb3BlcmF0b3IhPSggY29u
c3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I8
KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKICAgICAgICAgYm9vbCBvcGVy
YXRvcjw9KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKICAgICAgICAgYm9v
bCBvcGVyYXRvcj09KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKICAgICAg
ICAgYm9vbCBvcGVyYXRvcj4oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwog
ICAgICAgICBib29sIG9wZXJhdG9yPj0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpz
MiApOwogICAgICAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3Ry
aW5nICZzMiApOwogICAgICAgICBib29sIG9wZXJhdG9yPCggY29uc3QgY2hhciAqczEsIGNvbnN0
IFFTdHJpbmcgJnMyICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgY2hhciAqczEs
IGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgY2hh
ciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CgogICAgICAgICBib29sIG9wZXJhdG9yPj0oIGNv
bnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwoKCiAgICAgICAgIGlubGluZSBRU3Ry
aW5nIG9wZXJhdG9yKyggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewog
ICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgoK
ICAgICAgICAgaW5saW5lIFFTdHJpbmcgb3BlcmF0b3IrKCBjb25zdCBRU3RyaW5nICZzMSwgY29u
c3QgY2hhciAqczIgKQp7CiAgICBRU3RyaW5nIHRtcCggczEgKTsKICAgIHRtcCArPSBRU3RyaW5n
Ojpmcm9tTGF0aW4xKHMyKTsKICAgIHJldHVybiB0bXA7Cn0KCiAgICAgICAgIGlubGluZSBRU3Ry
aW5nIG9wZXJhdG9yKyggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewogICAg
UVN0cmluZyB0bXAgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCBzMSApOwogICAgdG1wICs9IHMyOwog
ICAgcmV0dXJuIHRtcDsKfQoKCiAgICAgICAgIGlubGluZSBRU3RyaW5nIG9wZXJhdG9yKyggY29u
c3QgUVN0cmluZyAmczEsIFFDaGFyIGMyICkKewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0
bXAgKz0gYzI7CiAgICByZXR1cm4gdG1wOwp9CgogICAgICAgICBpbmxpbmUgUVN0cmluZyBvcGVy
YXRvcisoIGNvbnN0IFFTdHJpbmcgJnMxLCBjaGFyIGMyICkKewogICAgUVN0cmluZyB0bXAoIHMx
ICk7CiAgICB0bXAgKz0gYzI7CiAgICByZXR1cm4gdG1wOwp9CgogICAgICAgICBpbmxpbmUgUVN0
cmluZyBvcGVyYXRvcisoIFFDaGFyIGMxLCBjb25zdCBRU3RyaW5nICZzMiApCnsKICAgIFFTdHJp
bmcgdG1wOwogICAgdG1wICs9IGMxOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoK
ICAgICAgICAgaW5saW5lIFFTdHJpbmcgb3BlcmF0b3IrKCBjaGFyIGMxLCBjb25zdCBRU3RyaW5n
ICZzMiApCnsKICAgIFFTdHJpbmcgdG1wOwogICAgdG1wICs9IGMxOwogICAgdG1wICs9IHMyOwog
ICAgcmV0dXJuIHRtcDsKfQojIDQzICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FzdHJsaXN0
LmgiIDIKIyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FsaXN0LmgiIDEKIyA0MiAiL3Vz
ci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xbGlzdC5oIgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2lu
Y2x1ZGUvcWdsaXN0LmgiIDEKIyA0MiAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xZ2xpc3Qu
aCIKIyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3Fjb2xsZWN0aW9uLmgiIDEKIyA0MiAi
L3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xY29sbGVjdGlvbi5oIgojIDEgIi91c3IvbGliL3F0
LTIuMy4xL2luY2x1ZGUvcWdsb2JhbC5oIiAxCiMgNDMgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1
ZGUvcWNvbGxlY3Rpb24uaCIgMgoKCgpjbGFzcyBRR1ZlY3RvcjsKY2xhc3MgUUdMaXN0OwpjbGFz
cyBRR0RpY3Q7CgoKY2xhc3MgUUNvbGxlY3Rpb24KewpwdWJsaWM6CiAgICBib29sIGF1dG9EZWxl
dGUoKSBjb25zdCB7IHJldHVybiBkZWxfaXRlbTsgfQogICAgdm9pZCBzZXRBdXRvRGVsZXRlKCBi
b29sIGVuYWJsZSApIHsgZGVsX2l0ZW0gPSBlbmFibGU7IH0KCiAgICB2aXJ0dWFsIHVpbnQgY291
bnQoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7CgogICAgdHlwZWRl
ZiB2b2lkICpJdGVtOwoKcHJvdGVjdGVkOgogICAgUUNvbGxlY3Rpb24oKSB7IGRlbF9pdGVtID0g
RkFMU0U7IH0KICAgIFFDb2xsZWN0aW9uKGNvbnN0IFFDb2xsZWN0aW9uICYpIHsgZGVsX2l0ZW0g
PSBGQUxTRTsgfQogICAgdmlydHVhbCB+UUNvbGxlY3Rpb24oKSB7fQoKICAgIGJvb2wgZGVsX2l0
ZW07CgogICAgdmlydHVhbCBJdGVtIG5ld0l0ZW0oIEl0ZW0gKTsKICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVJdGVtKCBJdGVtICk7Cn07CiMgNDMgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWds
aXN0LmgiIDIKCgoKCgoKCmNsYXNzIFFMTm9kZQp7CmZyaWVuZCBjbGFzcyBRR0xpc3Q7CmZyaWVu
ZCBjbGFzcyBRR0xpc3RJdGVyYXRvcjsKcHVibGljOgogICAgUUNvbGxlY3Rpb246Okl0ZW0gZ2V0
RGF0YSgpIHsgcmV0dXJuIGRhdGE7IH0KcHJpdmF0ZToKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGRh
dGE7CiAgICBRTE5vZGUgKnByZXY7CiAgICBRTE5vZGUgKm5leHQ7CiAgICBRTE5vZGUoIFFDb2xs
ZWN0aW9uOjpJdGVtIGQgKSB7IGRhdGEgPSBkOyB9Cn07CgoKCgoKCmNsYXNzIFFHTGlzdCA6IHB1
YmxpYyBRQ29sbGVjdGlvbgp7CmZyaWVuZCBjbGFzcyBRR0xpc3RJdGVyYXRvcjsKZnJpZW5kIGNs
YXNzIFFHVmVjdG9yOwpwdWJsaWM6CiAgICB1aW50IGNvdW50KCkgY29uc3Q7CgoKICAgIFFEYXRh
U3RyZWFtICZyZWFkKCBRRGF0YVN0cmVhbSAmICk7CiAgICBRRGF0YVN0cmVhbSAmd3JpdGUoIFFE
YXRhU3RyZWFtICYgKSBjb25zdDsKCnByb3RlY3RlZDoKICAgIFFHTGlzdCgpOwogICAgUUdMaXN0
KCBjb25zdCBRR0xpc3QgJiApOwogICAgdmlydHVhbCB+UUdMaXN0KCk7CgogICAgUUdMaXN0ICZv
cGVyYXRvcj0oIGNvbnN0IFFHTGlzdCAmICk7CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFH
TGlzdCYgKSBjb25zdDsKCiAgICB2b2lkIGluU29ydCggUUNvbGxlY3Rpb246Okl0ZW0gKTsKICAg
IHZvaWQgYXBwZW5kKCBRQ29sbGVjdGlvbjo6SXRlbSApOwogICAgYm9vbCBpbnNlcnRBdCggdWlu
dCBpbmRleCwgUUNvbGxlY3Rpb246Okl0ZW0gKTsKICAgIHZvaWQgcmVsaW5rTm9kZSggUUxOb2Rl
ICogKTsKICAgIGJvb2wgcmVtb3ZlTm9kZSggUUxOb2RlICogKTsKICAgIGJvb2wgcmVtb3ZlKCBR
Q29sbGVjdGlvbjo6SXRlbSA9IDAgKTsKICAgIGJvb2wgcmVtb3ZlUmVmKCBRQ29sbGVjdGlvbjo6
SXRlbSA9IDAgKTsKICAgIGJvb2wgcmVtb3ZlRmlyc3QoKTsKICAgIGJvb2wgcmVtb3ZlTGFzdCgp
OwogICAgYm9vbCByZW1vdmVBdCggdWludCBpbmRleCApOwogICAgUUNvbGxlY3Rpb246Okl0ZW0g
dGFrZU5vZGUoIFFMTm9kZSAqICk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSB0YWtlKCk7CiAgICBR
Q29sbGVjdGlvbjo6SXRlbSB0YWtlQXQoIHVpbnQgaW5kZXggKTsKICAgIFFDb2xsZWN0aW9uOjpJ
dGVtIHRha2VGaXJzdCgpOwogICAgUUNvbGxlY3Rpb246Okl0ZW0gdGFrZUxhc3QoKTsKCiAgICB2
b2lkIHNvcnQoKTsKICAgIHZvaWQgY2xlYXIoKTsKCiAgICBpbnQgZmluZFJlZiggUUNvbGxlY3Rp
b246Okl0ZW0sIGJvb2wgPSBUUlVFICk7CiAgICBpbnQgZmluZCggUUNvbGxlY3Rpb246Okl0ZW0s
IGJvb2wgPSBUUlVFICk7CgogICAgdWludCBjb250YWluc1JlZiggUUNvbGxlY3Rpb246Okl0ZW0g
KSBjb25zdDsKICAgIHVpbnQgY29udGFpbnMoIFFDb2xsZWN0aW9uOjpJdGVtICkgY29uc3Q7Cgog
ICAgUUNvbGxlY3Rpb246Okl0ZW0gYXQoIHVpbnQgaW5kZXggKTsKICAgIGludCBhdCgpIGNvbnN0
OwogICAgUUxOb2RlICpjdXJyZW50Tm9kZSgpIGNvbnN0OwoKICAgIFFDb2xsZWN0aW9uOjpJdGVt
IGdldCgpIGNvbnN0OwoKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGNmaXJzdCgpIGNvbnN0OwogICAg
UUNvbGxlY3Rpb246Okl0ZW0gY2xhc3QoKSBjb25zdDsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGZp
cnN0KCk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBsYXN0KCk7CiAgICBRQ29sbGVjdGlvbjo6SXRl
bSBuZXh0KCk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBwcmV2KCk7CgogICAgdm9pZCB0b1ZlY3Rv
ciggUUdWZWN0b3IgKiApIGNvbnN0OwoKICAgIHZpcnR1YWwgaW50IGNvbXBhcmVJdGVtcyggUUNv
bGxlY3Rpb246Okl0ZW0sIFFDb2xsZWN0aW9uOjpJdGVtICk7CgoKICAgIHZpcnR1YWwgUURhdGFT
dHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFtICYsIFFDb2xsZWN0aW9uOjpJdGVtICYgKTsKICAgIHZp
cnR1YWwgUURhdGFTdHJlYW0gJndyaXRlKCBRRGF0YVN0cmVhbSAmLCBRQ29sbGVjdGlvbjo6SXRl
bSApIGNvbnN0OwoKcHJpdmF0ZToKICAgIHZvaWQgcHJlcGVuZCggUUNvbGxlY3Rpb246Okl0ZW0g
KTsKCiAgICB2b2lkIGhlYXBTb3J0UHVzaERvd24oIFFDb2xsZWN0aW9uOjpJdGVtKiBoZWFwLCBp
bnQgZmlyc3QsIGludCBsYXN0ICk7CgogICAgUUxOb2RlICpmaXJzdE5vZGU7CiAgICBRTE5vZGUg
Kmxhc3ROb2RlOwogICAgUUxOb2RlICpjdXJOb2RlOwogICAgaW50IGN1ckluZGV4OwogICAgdWlu
dCBudW1Ob2RlczsKICAgIFFHTGlzdCAqaXRlcmF0b3JzOwoKICAgIFFMTm9kZSAqbG9jYXRlKCB1
aW50ICk7CiAgICBRTE5vZGUgKnVubGluaygpOwp9OwoKCmlubGluZSB1aW50IFFHTGlzdDo6Y291
bnQoKSBjb25zdAp7CiAgICByZXR1cm4gbnVtTm9kZXM7Cn0KCmlubGluZSBib29sIFFHTGlzdDo6
cmVtb3ZlRmlyc3QoKQp7CiAgICBmaXJzdCgpOwogICAgcmV0dXJuIHJlbW92ZSgpOwp9Cgppbmxp
bmUgYm9vbCBRR0xpc3Q6OnJlbW92ZUxhc3QoKQp7CiAgICBsYXN0KCk7CiAgICByZXR1cm4gcmVt
b3ZlKCk7Cn0KCmlubGluZSBpbnQgUUdMaXN0OjphdCgpIGNvbnN0CnsKICAgIHJldHVybiBjdXJJ
bmRleDsKfQoKaW5saW5lIFFDb2xsZWN0aW9uOjpJdGVtIFFHTGlzdDo6YXQoIHVpbnQgaW5kZXgg
KQp7CiAgICBRTE5vZGUgKm4gPSBsb2NhdGUoIGluZGV4ICk7CiAgICByZXR1cm4gbiA/IG4tPmRh
dGEgOiAwOwp9CgppbmxpbmUgUUxOb2RlICpRR0xpc3Q6OmN1cnJlbnROb2RlKCkgY29uc3QKewog
ICAgcmV0dXJuIGN1ck5vZGU7Cn0KCmlubGluZSBRQ29sbGVjdGlvbjo6SXRlbSBRR0xpc3Q6Omdl
dCgpIGNvbnN0CnsKICAgIHJldHVybiBjdXJOb2RlID8gY3VyTm9kZS0+ZGF0YSA6IDA7Cn0KCmlu
bGluZSBRQ29sbGVjdGlvbjo6SXRlbSBRR0xpc3Q6OmNmaXJzdCgpIGNvbnN0CnsKICAgIHJldHVy
biBmaXJzdE5vZGUgPyBmaXJzdE5vZGUtPmRhdGEgOiAwOwp9CgppbmxpbmUgUUNvbGxlY3Rpb246
Okl0ZW0gUUdMaXN0OjpjbGFzdCgpIGNvbnN0CnsKICAgIHJldHVybiBsYXN0Tm9kZSA/IGxhc3RO
b2RlLT5kYXRhIDogMDsKfQoKCgoKCgoKICAgICAgICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4o
IFFEYXRhU3RyZWFtICYsIFFHTGlzdCAmICk7CiAgICAgICAgIFFEYXRhU3RyZWFtICZvcGVyYXRv
cjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRR0xpc3QgJiApOwoKCgoKCgpjbGFzcyBRR0xpc3RJ
dGVyYXRvcgp7CmZyaWVuZCBjbGFzcyBRR0xpc3Q7CnByb3RlY3RlZDoKICAgIFFHTGlzdEl0ZXJh
dG9yKCBjb25zdCBRR0xpc3QgJiApOwogICAgUUdMaXN0SXRlcmF0b3IoIGNvbnN0IFFHTGlzdEl0
ZXJhdG9yICYgKTsKICAgIFFHTGlzdEl0ZXJhdG9yICZvcGVyYXRvcj0oIGNvbnN0IFFHTGlzdEl0
ZXJhdG9yICYgKTsKICAgflFHTGlzdEl0ZXJhdG9yKCk7CgogICAgYm9vbCBhdEZpcnN0KCkgY29u
c3Q7CiAgICBib29sIGF0TGFzdCgpIGNvbnN0OwogICAgUUNvbGxlY3Rpb246Okl0ZW0gdG9GaXJz
dCgpOwogICAgUUNvbGxlY3Rpb246Okl0ZW0gdG9MYXN0KCk7CgogICAgUUNvbGxlY3Rpb246Okl0
ZW0gZ2V0KCkgY29uc3Q7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcigpKCk7CiAgICBR
Q29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcisrKCk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBvcGVy
YXRvcis9KHVpbnQpOwogICAgUUNvbGxlY3Rpb246Okl0ZW0gb3BlcmF0b3ItLSgpOwogICAgUUNv
bGxlY3Rpb246Okl0ZW0gb3BlcmF0b3ItPSh1aW50KTsKCnByb3RlY3RlZDoKICAgIFFHTGlzdCAq
bGlzdDsKCnByaXZhdGU6CiAgICBRTE5vZGUgKmN1ck5vZGU7Cn07CgoKaW5saW5lIGJvb2wgUUdM
aXN0SXRlcmF0b3I6OmF0Rmlyc3QoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA9PSBsaXN0
LT5maXJzdE5vZGU7Cn0KCmlubGluZSBib29sIFFHTGlzdEl0ZXJhdG9yOjphdExhc3QoKSBjb25z
dAp7CiAgICByZXR1cm4gY3VyTm9kZSA9PSBsaXN0LT5sYXN0Tm9kZTsKfQoKaW5saW5lIFFDb2xs
ZWN0aW9uOjpJdGVtIFFHTGlzdEl0ZXJhdG9yOjpnZXQoKSBjb25zdAp7CiAgICByZXR1cm4gY3Vy
Tm9kZSA/IGN1ck5vZGUtPmRhdGEgOiAwOwp9CiMgNDMgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1
ZGUvcWxpc3QuaCIgMgoKCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPiBjbGFzcyBRTGlzdCA6IHB1Ymxp
YyBRR0xpc3QKewpwdWJsaWM6CiAgICBRTGlzdCgpIHt9CiAgICBRTGlzdCggY29uc3QgUUxpc3Q8
dHlwZT4gJmwgKSA6IFFHTGlzdChsKSB7fQogICB+UUxpc3QoKSB7IGNsZWFyKCk7IH0KICAgIFFM
aXN0PHR5cGU+ICZvcGVyYXRvcj0oY29uc3QgUUxpc3Q8dHlwZT4gJmwpCiAgICAgICAgICAgICAg
ICAgICAgICAgIHsgcmV0dXJuIChRTGlzdDx0eXBlPiYpUUdMaXN0OjpvcGVyYXRvcj0obCk7IH0K
ICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUxpc3Q8dHlwZT4gJmxpc3QgKSBjb25zdAogICAg
eyByZXR1cm4gUUdMaXN0OjpvcGVyYXRvcj09KCBsaXN0ICk7IH0KICAgIHVpbnQgY291bnQoKSBj
b25zdCB7IHJldHVybiBRR0xpc3Q6OmNvdW50KCk7IH0KICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIFFHTGlzdDo6Y291bnQoKSA9PSAwOyB9CiAgICBib29sIGluc2VydCggdWludCBp
LCBjb25zdCB0eXBlICpkKXsgcmV0dXJuIFFHTGlzdDo6aW5zZXJ0QXQoaSwoUUNvbGxlY3Rpb246
Okl0ZW0pZCk7IH0KICAgIHZvaWQgaW5Tb3J0KCBjb25zdCB0eXBlICpkICkgeyBRR0xpc3Q6Omlu
U29ydCgoUUNvbGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIHZvaWQgcHJlcGVuZCggY29uc3QgdHlw
ZSAqZCApIHsgUUdMaXN0OjppbnNlcnRBdCgwLChRQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQogICAg
dm9pZCBhcHBlbmQoIGNvbnN0IHR5cGUgKmQgKSB7IFFHTGlzdDo6YXBwZW5kKChRQ29sbGVjdGlv
bjo6SXRlbSlkKTsgfQogICAgYm9vbCByZW1vdmUoIHVpbnQgaSApIHsgcmV0dXJuIFFHTGlzdDo6
cmVtb3ZlQXQoaSk7IH0KICAgIGJvb2wgcmVtb3ZlKCkgeyByZXR1cm4gUUdMaXN0OjpyZW1vdmUo
KFFDb2xsZWN0aW9uOjpJdGVtKTApOyB9CiAgICBib29sIHJlbW92ZSggY29uc3QgdHlwZSAqZCAp
IHsgcmV0dXJuIFFHTGlzdDo6cmVtb3ZlKChRQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQogICAgYm9v
bCByZW1vdmVSZWYoIGNvbnN0IHR5cGUgKmQgKSB7IHJldHVybiBRR0xpc3Q6OnJlbW92ZVJlZigo
UUNvbGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIHZvaWQgcmVtb3ZlTm9kZSggUUxOb2RlICpuICkg
eyBRR0xpc3Q6OnJlbW92ZU5vZGUobik7IH0KICAgIGJvb2wgcmVtb3ZlRmlyc3QoKSB7IHJldHVy
biBRR0xpc3Q6OnJlbW92ZUZpcnN0KCk7IH0KICAgIGJvb2wgcmVtb3ZlTGFzdCgpIHsgcmV0dXJu
IFFHTGlzdDo6cmVtb3ZlTGFzdCgpOyB9CiAgICB0eXBlICp0YWtlKCB1aW50IGkgKSB7IHJldHVy
biAodHlwZSAqKVFHTGlzdDo6dGFrZUF0KGkpOyB9CiAgICB0eXBlICp0YWtlKCkgeyByZXR1cm4g
KHR5cGUgKilRR0xpc3Q6OnRha2UoKTsgfQogICAgdHlwZSAqdGFrZU5vZGUoIFFMTm9kZSAqbiAp
IHsgcmV0dXJuICh0eXBlICopUUdMaXN0Ojp0YWtlTm9kZShuKTsgfQogICAgdm9pZCBjbGVhcigp
IHsgUUdMaXN0OjpjbGVhcigpOyB9CiAgICB2b2lkIHNvcnQoKSB7IFFHTGlzdDo6c29ydCgpOyB9
CiAgICBpbnQgZmluZCggY29uc3QgdHlwZSAqZCApIHsgcmV0dXJuIFFHTGlzdDo6ZmluZCgoUUNv
bGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIGludCBmaW5kTmV4dCggY29uc3QgdHlwZSAqZCApIHsg
cmV0dXJuIFFHTGlzdDo6ZmluZCgoUUNvbGxlY3Rpb246Okl0ZW0pZCxGQUxTRSk7IH0KICAgIGlu
dCBmaW5kUmVmKCBjb25zdCB0eXBlICpkICkgeyByZXR1cm4gUUdMaXN0OjpmaW5kUmVmKChRQ29s
bGVjdGlvbjo6SXRlbSlkKTsgfQogICAgaW50IGZpbmROZXh0UmVmKCBjb25zdCB0eXBlICpkICl7
IHJldHVybiBRR0xpc3Q6OmZpbmRSZWYoKFFDb2xsZWN0aW9uOjpJdGVtKWQsRkFMU0UpO30KICAg
IHVpbnQgY29udGFpbnMoIGNvbnN0IHR5cGUgKmQgKSBjb25zdCB7IHJldHVybiBRR0xpc3Q6OmNv
bnRhaW5zKChRQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQogICAgdWludCBjb250YWluc1JlZiggY29u
c3QgdHlwZSAqZCApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7IHJldHVybiBRR0xpc3Q6OmNvbnRhaW5zUmVmKChRQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQog
ICAgdHlwZSAqYXQoIHVpbnQgaSApIHsgcmV0dXJuICh0eXBlICopUUdMaXN0OjphdChpKTsgfQog
ICAgaW50IGF0KCkgY29uc3QgeyByZXR1cm4gUUdMaXN0OjphdCgpOyB9CiAgICB0eXBlICpjdXJy
ZW50KCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OmdldCgpOyB9CiAgICBRTE5vZGUg
KmN1cnJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gUUdMaXN0OjpjdXJyZW50Tm9kZSgpOyB9CiAg
ICB0eXBlICpnZXRGaXJzdCgpIGNvbnN0IHsgcmV0dXJuICh0eXBlICopUUdMaXN0OjpjZmlyc3Qo
KTsgfQogICAgdHlwZSAqZ2V0TGFzdCgpIGNvbnN0IHsgcmV0dXJuICh0eXBlICopUUdMaXN0Ojpj
bGFzdCgpOyB9CiAgICB0eXBlICpmaXJzdCgpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0OjpmaXJz
dCgpOyB9CiAgICB0eXBlICpsYXN0KCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6Omxhc3QoKTsg
fQogICAgdHlwZSAqbmV4dCgpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0OjpuZXh0KCk7IH0KICAg
IHR5cGUgKnByZXYoKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6cHJldigpOyB9CiAgICB2b2lk
IHRvVmVjdG9yKCBRR1ZlY3RvciAqdmVjICljb25zdHsgUUdMaXN0Ojp0b1ZlY3Rvcih2ZWMpOyB9
CnByaXZhdGU6CiAgICB2b2lkIGRlbGV0ZUl0ZW0oIFFDb2xsZWN0aW9uOjpJdGVtIGQgKTsKfTsK
CgoKCgoKCnRlbXBsYXRlPGNsYXNzIHR5cGU+IGlubGluZSB2b2lkIFFMaXN0PHR5cGU+OjpkZWxl
dGVJdGVtKCBRQ29sbGVjdGlvbjo6SXRlbSBkICkKewogICAgaWYgKCBkZWxfaXRlbSApIGRlbGV0
ZSAodHlwZSAqKWQ7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPiBjbGFzcyBRTGlzdEl0ZXJhdG9y
IDogcHVibGljIFFHTGlzdEl0ZXJhdG9yCnsKcHVibGljOgogICAgUUxpc3RJdGVyYXRvcihjb25z
dCBRTGlzdDx0eXBlPiAmbCkgOlFHTGlzdEl0ZXJhdG9yKChRR0xpc3QgJilsKSB7fQogICB+UUxp
c3RJdGVyYXRvcigpIHt9CiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbGlzdC0+Y291
bnQoKTsgfQogICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbGlzdC0+Y291bnQoKSA9
PSAwOyB9CiAgICBib29sIGF0Rmlyc3QoKSBjb25zdCB7IHJldHVybiBRR0xpc3RJdGVyYXRvcjo6
YXRGaXJzdCgpOyB9CiAgICBib29sIGF0TGFzdCgpIGNvbnN0IHsgcmV0dXJuIFFHTGlzdEl0ZXJh
dG9yOjphdExhc3QoKTsgfQogICAgdHlwZSAqdG9GaXJzdCgpIHsgcmV0dXJuICh0eXBlICopUUdM
aXN0SXRlcmF0b3I6OnRvRmlyc3QoKTsgfQogICAgdHlwZSAqdG9MYXN0KCkgeyByZXR1cm4gKHR5
cGUgKilRR0xpc3RJdGVyYXRvcjo6dG9MYXN0KCk7IH0KICAgIG9wZXJhdG9yIHR5cGUgKigpIGNv
bnN0IHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6OmdldCgpOyB9CiAgICB0eXBlICpv
cGVyYXRvciooKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpnZXQoKTsgfQoKCgoK
CgoKICAgIHR5cGUgKmN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0ZXJh
dG9yOjpnZXQoKTsgfQogICAgdHlwZSAqb3BlcmF0b3IoKSgpIHsgcmV0dXJuICh0eXBlICopUUdM
aXN0SXRlcmF0b3I6Om9wZXJhdG9yKCkoKTt9CiAgICB0eXBlICpvcGVyYXRvcisrKCkgeyByZXR1
cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6b3BlcmF0b3IrKygpOyB9CiAgICB0eXBlICpvcGVy
YXRvcis9KHVpbnQgaikgeyByZXR1cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6b3BlcmF0b3Ir
PShqKTt9CiAgICB0eXBlICpvcGVyYXRvci0tKCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3RJdGVy
YXRvcjo6b3BlcmF0b3ItLSgpOyB9CiAgICB0eXBlICpvcGVyYXRvci09KHVpbnQgaikgeyByZXR1
cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6b3BlcmF0b3ItPShqKTt9CiAgICBRTGlzdEl0ZXJh
dG9yPHR5cGU+JiBvcGVyYXRvcj0oY29uc3QgUUxpc3RJdGVyYXRvcjx0eXBlPiZpdCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeyBRR0xpc3RJdGVyYXRvcjo6b3BlcmF0b3I9KGl0KTsg
cmV0dXJuICp0aGlzOyB9Cn07CiMgNDQgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXN0cmxp
c3QuaCIgMgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIgMQoj
IDQyICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FkYXRhc3RyZWFtLmgiCiMgMSAiL3Vzci9s
aWIvcXQtMi4zLjEvaW5jbHVkZS9xaW9kZXZpY2UuaCIgMQojIDQyICIvdXNyL2xpYi9xdC0yLjMu
MS9pbmNsdWRlL3Fpb2RldmljZS5oIgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWds
b2JhbC5oIiAxCiMgNDMgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWlvZGV2aWNlLmgiIDIK
IyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3Fjc3RyaW5nLmgiIDEKIyA0NCAiL3Vzci9s
aWIvcXQtMi4zLjEvaW5jbHVkZS9xaW9kZXZpY2UuaCIgMgojIDg4ICIvdXNyL2xpYi9xdC0yLjMu
MS9pbmNsdWRlL3Fpb2RldmljZS5oIgpjbGFzcyBRSU9EZXZpY2UKewpwdWJsaWM6CiAgICBRSU9E
ZXZpY2UoKTsKICAgIHZpcnR1YWwgflFJT0RldmljZSgpOwoKICAgIGludCBmbGFncygpIGNvbnN0
IHsgcmV0dXJuIGlvTW9kZTsgfQogICAgaW50IG1vZGUoKSBjb25zdCB7IHJldHVybiBpb01vZGUg
JiAweDAwZmY7IH0KICAgIGludCBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGlvTW9kZSAmIDB4ZjAw
MDsgfQoKICAgIGJvb2wgaXNEaXJlY3RBY2Nlc3MoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAm
IDB4MDEwMCkgPT0gMHgwMTAwKTsgfQogICAgYm9vbCBpc1NlcXVlbnRpYWxBY2Nlc3MoKSBjb25z
dCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDIwMCkgPT0gMHgwMjAwKTsgfQogICAgYm9vbCBpc0Nv
bWJpbmVkQWNjZXNzKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAzMDApID09IDB4MDMw
MCk7IH0KICAgIGJvb2wgaXNCdWZmZXJlZCgpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgw
MDQwKSAhPSAweDAwNDApOyB9CiAgICBib29sIGlzUmF3KCkgY29uc3QgeyByZXR1cm4gKChpb01v
ZGUgJiAweDAwNDApID09IDB4MDA0MCk7IH0KICAgIGJvb2wgaXNTeW5jaHJvbm91cygpIGNvbnN0
IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDgwKSAhPSAweDAwODApOyB9CiAgICBib29sIGlzQXN5
bmNocm9ub3VzKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwODApID09IDB4MDA4MCk7
IH0KICAgIGJvb2wgaXNUcmFuc2xhdGVkKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAw
MTApID09IDB4MDAxMCk7IH0KICAgIGJvb2wgaXNSZWFkYWJsZSgpIGNvbnN0IHsgcmV0dXJuICgo
aW9Nb2RlICYgMHgwMDAxKSA9PSAweDAwMDEpOyB9CiAgICBib29sIGlzV3JpdGFibGUoKSBjb25z
dCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDAwMikgPT0gMHgwMDAyKTsgfQogICAgYm9vbCBpc1Jl
YWRXcml0ZSgpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDAzKSA9PSAweDAwMDMpOyB9
CiAgICBib29sIGlzSW5hY3RpdmUoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IDA7IH0KICAg
IGJvb2wgaXNPcGVuKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKSA9PSAweDEwMDA7IH0KCiAgICBp
bnQgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gaW9TdDsgfQogICAgdm9pZCByZXNldFN0YXR1cygp
IHsgaW9TdCA9IDA7IH0KCiAgICB2aXJ0dWFsIGJvb2wgb3BlbiggaW50IG1vZGUgKSA9IDA7CiAg
ICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKSA9IDA7
CgogICAgdmlydHVhbCB1aW50IHNpemUoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIGludCBhdCgp
IGNvbnN0OwogICAgdmlydHVhbCBib29sIGF0KCBpbnQgKTsKICAgIHZpcnR1YWwgYm9vbCBhdEVu
ZCgpIGNvbnN0OwogICAgYm9vbCByZXNldCgpIHsgcmV0dXJuIGF0KDApOyB9CgogICAgdmlydHVh
bCBpbnQgcmVhZEJsb2NrKCBjaGFyICpkYXRhLCB1aW50IG1heGxlbiApID0gMDsKICAgIHZpcnR1
YWwgaW50IHdyaXRlQmxvY2soIGNvbnN0IGNoYXIgKmRhdGEsIHVpbnQgbGVuICkgPSAwOwogICAg
dmlydHVhbCBpbnQgcmVhZExpbmUoIGNoYXIgKmRhdGEsIHVpbnQgbWF4bGVuICk7CiAgICBpbnQg
d3JpdGVCbG9jayggY29uc3QgUUJ5dGVBcnJheSYgZGF0YSApOwogICAgUUJ5dGVBcnJheSByZWFk
QWxsKCk7CgogICAgdmlydHVhbCBpbnQgZ2V0Y2goKSA9IDA7CiAgICB2aXJ0dWFsIGludCBwdXRj
aCggaW50ICkgPSAwOwogICAgdmlydHVhbCBpbnQgdW5nZXRjaCggaW50ICkgPSAwOwoKcHJvdGVj
dGVkOgogICAgdm9pZCBzZXRGbGFncyggaW50IGYgKSB7IGlvTW9kZSA9IGY7IH0KICAgIHZvaWQg
c2V0VHlwZSggaW50ICk7CiAgICB2b2lkIHNldE1vZGUoIGludCApOwogICAgdm9pZCBzZXRTdGF0
ZSggaW50ICk7CiAgICB2b2lkIHNldFN0YXR1cyggaW50ICk7CiAgICBpbnQgaW9JbmRleDsKCnBy
aXZhdGU6CiAgICBpbnQgaW9Nb2RlOwogICAgaW50IGlvU3Q7Cgpwcml2YXRlOgoKICAgIFFJT0Rl
dmljZSggY29uc3QgUUlPRGV2aWNlICYgKTsKICAgIFFJT0RldmljZSAmb3BlcmF0b3I9KCBjb25z
dCBRSU9EZXZpY2UgJiApOwoKfTsKIyA0MyAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xZGF0
YXN0cmVhbS5oIiAyCiMgMSAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xc3RyaW5nLmgiIDEK
IyA0NCAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xZGF0YXN0cmVhbS5oIiAyCgoKCmNsYXNz
IFFEYXRhU3RyZWFtCnsKcHVibGljOgogICAgUURhdGFTdHJlYW0oKTsKICAgIFFEYXRhU3RyZWFt
KCBRSU9EZXZpY2UgKiApOwogICAgUURhdGFTdHJlYW0oIFFCeXRlQXJyYXksIGludCBtb2RlICk7
CiAgICB2aXJ0dWFsIH5RRGF0YVN0cmVhbSgpOwoKICAgIFFJT0RldmljZSAqZGV2aWNlKCkgY29u
c3Q7CiAgICB2b2lkIHNldERldmljZSggUUlPRGV2aWNlICogKTsKICAgIHZvaWQgdW5zZXREZXZp
Y2UoKTsKCiAgICBib29sIGF0RW5kKCkgY29uc3Q7CiAgICBib29sIGVvZigpIGNvbnN0OwoKICAg
IGVudW0gQnl0ZU9yZGVyIHsgQmlnRW5kaWFuLCBMaXR0bGVFbmRpYW4gfTsKICAgIGludCBieXRl
T3JkZXIoKSBjb25zdDsKICAgIHZvaWQgc2V0Qnl0ZU9yZGVyKCBpbnQgKTsKCiAgICBib29sIGlz
UHJpbnRhYmxlRGF0YSgpIGNvbnN0OwogICAgdm9pZCBzZXRQcmludGFibGVEYXRhKCBib29sICk7
CgogICAgaW50IHZlcnNpb24oKSBjb25zdDsKICAgIHZvaWQgc2V0VmVyc2lvbiggaW50ICk7Cgog
ICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfSU5UOCAmaSApOwogICAgUURhdGFTdHJlYW0g
Jm9wZXJhdG9yPj4oIFFfVUlOVDggJmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBR
X0lOVDE2ICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9VSU5UMTYgJmkgKTsK
ICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX0lOVDMyICZpICk7CiAgICBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I+PiggUV9VSU5UMzIgJmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+
KCBRX0lOVDY0ICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9VSU5UNjQgJmkg
KTsKCiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggZmxvYXQgJmYgKTsKICAgIFFEYXRhU3Ry
ZWFtICZvcGVyYXRvcj4+KCBkb3VibGUgJmYgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+
KCBjaGFyIComc3RyICk7CgogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfSU5UOCBpICk7
CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9VSU5UOCBpICk7CiAgICBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I8PCggUV9JTlQxNiBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCgg
UV9VSU5UMTYgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfSU5UMzIgaSApOwog
ICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfVUlOVDMyIGkgKTsKICAgIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcjw8KCBRX0lOVDY0IGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBR
X1VJTlQ2NCBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggZmxvYXQgZiApOwogICAg
UURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIGRvdWJsZSBmICk7CiAgICBRRGF0YVN0cmVhbSAmb3Bl
cmF0b3I8PCggY29uc3QgY2hhciAqc3RyICk7CgogICAgUURhdGFTdHJlYW0gJnJlYWRCeXRlcygg
Y2hhciAqJiwgdWludCAmbGVuICk7CiAgICBRRGF0YVN0cmVhbSAmcmVhZFJhd0J5dGVzKCBjaGFy
ICosIHVpbnQgbGVuICk7CgogICAgUURhdGFTdHJlYW0gJndyaXRlQnl0ZXMoIGNvbnN0IGNoYXIg
KiwgdWludCBsZW4gKTsKICAgIFFEYXRhU3RyZWFtICZ3cml0ZVJhd0J5dGVzKCBjb25zdCBjaGFy
ICosIHVpbnQgbGVuICk7Cgpwcml2YXRlOgogICAgUUlPRGV2aWNlICpkZXY7CiAgICBib29sIG93
bmRldjsKICAgIGludCBieXRlb3JkZXI7CiAgICBib29sIHByaW50YWJsZTsKICAgIGJvb2wgbm9z
d2FwOwogICAgaW50IHZlcjsKCnByaXZhdGU6CgogICAgUURhdGFTdHJlYW0oIGNvbnN0IFFEYXRh
U3RyZWFtICYgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj0oIGNvbnN0IFFEYXRhU3RyZWFt
ICYgKTsKCn07CgoKCgoKCmlubGluZSBRSU9EZXZpY2UgKlFEYXRhU3RyZWFtOjpkZXZpY2UoKSBj
b25zdAp7IHJldHVybiBkZXY7IH0KCmlubGluZSBib29sIFFEYXRhU3RyZWFtOjphdEVuZCgpIGNv
bnN0CnsgcmV0dXJuIGRldiA/IGRldi0+YXRFbmQoKSA6IFRSVUU7IH0KCmlubGluZSBib29sIFFE
YXRhU3RyZWFtOjplb2YoKSBjb25zdAp7IHJldHVybiBhdEVuZCgpOyB9CgppbmxpbmUgaW50IFFE
YXRhU3RyZWFtOjpieXRlT3JkZXIoKSBjb25zdAp7IHJldHVybiBieXRlb3JkZXI7IH0KCmlubGlu
ZSBib29sIFFEYXRhU3RyZWFtOjppc1ByaW50YWJsZURhdGEoKSBjb25zdAp7IHJldHVybiBwcmlu
dGFibGU7IH0KCmlubGluZSB2b2lkIFFEYXRhU3RyZWFtOjpzZXRQcmludGFibGVEYXRhKCBib29s
IHAgKQp7IHByaW50YWJsZSA9IHA7IH0KCmlubGluZSBpbnQgUURhdGFTdHJlYW06OnZlcnNpb24o
KSBjb25zdAp7IHJldHVybiB2ZXI7IH0KCmlubGluZSB2b2lkIFFEYXRhU3RyZWFtOjpzZXRWZXJz
aW9uKCBpbnQgdiApCnsgdmVyID0gdjsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVh
bTo6b3BlcmF0b3I+PiggUV9VSU5UOCAmaSApCnsgcmV0dXJuICp0aGlzID4+IChRX0lOVDgmKWk7
IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPj4oIFFfVUlOVDE2
ICZpICkKeyByZXR1cm4gKnRoaXMgPj4gKFFfSU5UMTYmKWk7IH0KCmlubGluZSBRRGF0YVN0cmVh
bSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPj4oIFFfVUlOVDMyICZpICkKeyByZXR1cm4gKnRoaXMg
Pj4gKFFfSU5UMzImKWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJh
dG9yPj4oIFFfVUlOVDY0ICZpICkKeyByZXR1cm4gKnRoaXMgPj4gKFFfSU5UNjQmKWk7IH0KCmlu
bGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPDwoIFFfVUlOVDggaSApCnsg
cmV0dXJuICp0aGlzIDw8IChRX0lOVDgpaTsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0
cmVhbTo6b3BlcmF0b3I8PCggUV9VSU5UMTYgaSApCnsgcmV0dXJuICp0aGlzIDw8IChRX0lOVDE2
KWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPDwoIFFfVUlO
VDMyIGkgKQp7IHJldHVybiAqdGhpcyA8PCAoUV9JTlQzMilpOyB9CgppbmxpbmUgUURhdGFTdHJl
YW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRvcjw8KCBRX1VJTlQ2NCBpICkKeyByZXR1cm4gKnRoaXMg
PDwgKFFfSU5UNjQpaTsgfQojIDQ1ICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FzdHJsaXN0
LmgiIDIKIyA1MyAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xc3RybGlzdC5oIgp0eXBlZGVm
IFFMaXN0PGNoYXI+IFFTdHJMaXN0QmFzZTsKdHlwZWRlZiBRTGlzdEl0ZXJhdG9yPGNoYXI+IFFT
dHJMaXN0SXRlcmF0b3I7CgoKY2xhc3MgUVN0ckxpc3QgOiBwdWJsaWMgUVN0ckxpc3RCYXNlCnsK
cHVibGljOgogICAgUVN0ckxpc3QoIGJvb2wgZGVlcENvcGllcz1UUlVFICkgeyBkYyA9IGRlZXBD
b3BpZXM7IGRlbF9pdGVtID0gZGVlcENvcGllczsgfQogICAgUVN0ckxpc3QoIGNvbnN0IFFTdHJM
aXN0ICYgKTsKICAgflFTdHJMaXN0KCkgeyBjbGVhcigpOyB9CiAgICBRU3RyTGlzdCYgb3BlcmF0
b3I9KCBjb25zdCBRU3RyTGlzdCAmICk7Cgpwcml2YXRlOgogICAgUUNvbGxlY3Rpb246Okl0ZW0g
bmV3SXRlbSggUUNvbGxlY3Rpb246Okl0ZW0gZCApIHsgcmV0dXJuIGRjID8gcXN0cmR1cCggKGNv
bnN0IGNoYXIqKWQgKSA6IGQ7IH0KICAgIHZvaWQgZGVsZXRlSXRlbSggUUNvbGxlY3Rpb246Okl0
ZW0gZCApIHsgaWYgKCBkZWxfaXRlbSApIGRlbGV0ZVtdIChjaGFyKilkOyB9CiAgICBpbnQgY29t
cGFyZUl0ZW1zKCBRQ29sbGVjdGlvbjo6SXRlbSBzMSwgUUNvbGxlY3Rpb246Okl0ZW0gczIgKSB7
IHJldHVybiBxc3RyY21wKChjb25zdCBjaGFyKilzMSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIqKXMyKTsgfQoKICAg
IFFEYXRhU3RyZWFtICZyZWFkKCBRRGF0YVN0cmVhbSAmcywgUUNvbGxlY3Rpb246Okl0ZW0gJmQg
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcyA+PiAoY2hhciAqJilkOyByZXR1
cm4gczsgfQogICAgUURhdGFTdHJlYW0gJndyaXRlKCBRRGF0YVN0cmVhbSAmcywgUUNvbGxlY3Rp
b246Okl0ZW0gZCApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1
cm4gcyA8PCAoY29uc3QgY2hhciAqKWQ7IH0KCiAgICBib29sIGRjOwp9OwoKCmNsYXNzIFFTdHJJ
TGlzdCA6IHB1YmxpYyBRU3RyTGlzdAp7CnB1YmxpYzoKICAgIFFTdHJJTGlzdCggYm9vbCBkZWVw
Q29waWVzPVRSVUUgKSA6IFFTdHJMaXN0KCBkZWVwQ29waWVzICkge30KICAgflFTdHJJTGlzdCgp
IHsgY2xlYXIoKTsgfQpwcml2YXRlOgogICAgaW50IGNvbXBhcmVJdGVtcyggUUNvbGxlY3Rpb246
Okl0ZW0gczEsIFFDb2xsZWN0aW9uOjpJdGVtIHMyICkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7IHJldHVybiBxc3RyaWNtcCgoY29uc3QgY2hhciopczEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciopczIpOyB9
Cn07CgoKaW5saW5lIFFTdHJMaXN0ICYgUVN0ckxpc3Q6Om9wZXJhdG9yPSggY29uc3QgUVN0ckxp
c3QgJnN0ckxpc3QgKQp7CiAgICBjbGVhcigpOwogICAgZGMgPSBzdHJMaXN0LmRjOwogICAgZGVs
X2l0ZW0gPSBkYzsKICAgIFFTdHJMaXN0QmFzZTo6b3BlcmF0b3I9KHN0ckxpc3QpOwogICAgcmV0
dXJuICp0aGlzOwp9CgppbmxpbmUgUVN0ckxpc3Q6OlFTdHJMaXN0KCBjb25zdCBRU3RyTGlzdCAm
c3RyTGlzdCApCiAgICA6IFFTdHJMaXN0QmFzZSggc3RyTGlzdCApCnsKICAgIGRjID0gRkFMU0U7
CiAgICBvcGVyYXRvcj0oc3RyTGlzdCk7Cn0KIyA0MyAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVk
ZS9xZGlyLmgiIDIKIyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FmaWxlaW5mby5oIiAx
CiMgNDIgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWZpbGVpbmZvLmgiCiMgMSAiL3Vzci9s
aWIvcXQtMi4zLjEvaW5jbHVkZS9xZmlsZS5oIiAxCiMgNDIgIi91c3IvbGliL3F0LTIuMy4xL2lu
Y2x1ZGUvcWZpbGUuaCIKIyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3Fpb2RldmljZS5o
IiAxCiMgNDMgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWZpbGUuaCIgMgojIDEgIi91c3Iv
bGliL3F0LTIuMy4xL2luY2x1ZGUvcXN0cmluZy5oIiAxCiMgNDQgIi91c3IvbGliL3F0LTIuMy4x
L2luY2x1ZGUvcWZpbGUuaCIgMgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoj
IDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xL2luY2x1ZGUv
c3RkZGVmLmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBl
cy5oIiAxIDMKIyA0NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA1MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19G
SUxFIEZJTEU7CiMgNjMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4xL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMg
NzMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xL2luY2x1ZGUv
c3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMKIyAzMCAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDkgIi91
c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi
IDEgMwojIDEwICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCgoKIyAxICIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAx
IDMKIyAzMTQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNy
L2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hh
ci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEv
aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hh
ci5oIiAyIDMKIyA2NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewog
IGludCBfX2NvdW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3dj
aGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0df
Y29uZmlnLmgiIDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0
YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3Qg
X19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9p
bmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI2
ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAx
IDMKIyAyNyAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvd2No
YXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
NDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2No
YXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9pbmNs
dWRlL2djb252LmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2djb252
LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAog
IF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAog
IF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZf
SU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09O
Vl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEs
CiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0
ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVj
dDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2Zj
dCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29u
c3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5p
dF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2Vu
ZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf
dHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVu
c2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
Kik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0
eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9f
Y29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAq
KiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAo
dm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2Zj
dCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4
dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpf
X2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3Qg
X19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hh
bmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hh
ciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsK
ICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2Zj
dDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwog
IGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0
YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7
CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7
CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGlu
dCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90
IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoK
dHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0
IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0
ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2Nv
bmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwog
IHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2dj
b252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBl
ZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0
eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkp
Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl
X18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1
dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAy
IDMKIyA1MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRhcmcu
aCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDUyICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgMTU4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1
Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwojIDE2OCAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewog
IHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgog
IGludCBfcG9zOwojIDE5MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCgplbnVtIF9fY29k
ZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFydGlhbCwKICBfX2Nv
ZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9OwojIDI1OSAiL3Vzci9pbmNsdWRlL2xp
YmlvLmgiIDMKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9f
cmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAg
Y2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9f
d3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAg
Y2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lP
X3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9f
RklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBf
b2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hh
ciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpf
bG9jazsKIyAzMDMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19vZmY2NF90IF9vZmZzZXQ7
CgoKCgoKICB2b2lkICpfX3BhZDE7CiAgdm9pZCAqX19wYWQyOwoKICBpbnQgX21vZGU7CgogIGNo
YXIgX3VudXNlZDJbMTUgKiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07
CgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMg
X0lPXzJfMV9zdGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91
dF87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzQyICIv
dXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZv
aWQgKl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVk
ZWYgX19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIg
Kl9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoK
CgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAq
X19wb3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29v
a2llKTsKCgoKCnR5cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5
cGVkZWYgX19pb193cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lv
X3NlZWtfZm4gY29va2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNv
b2tpZV9jbG9zZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4g
KnJlYWQ7CiAgX19pb193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9f
aW9fY2xvc2VfZm4gKmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYg
X0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3Qg
X0lPX2Nvb2tpZV9maWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9J
T19jb29raWVfZmlsZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBf
X2Zucyk7CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklM
RSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4g
d2ludF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3Qg
X193dWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93
IChfSU9fRklMRSAqLCB3aW50X3QpIHRocm93ICgpOwojIDQyNCAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRl
cm4gaW50IF9JT19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX0lPX2Zlb2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9f
ZmVycm9yIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19s
b2NrZWQgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxv
Y2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxl
IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9f
RklMRSAqKSB0aHJvdyAoKTsKIyA0NTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBp
bnQgX0lPX3Zmc2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVz
dHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVz
dHJpY3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVz
dHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBf
X2dudWNfdmFfbGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19G
SUxFICosIGludCwgX19zc2l6ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4g
KF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3Qg
X0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpl
eHRlcm4gX19vZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkg
dGhyb3cgKCk7CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikg
dGhyb3cgKCk7CiMgNTEwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9CiMgNzQgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMiAz
CgoKCgp0eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA4OCAiL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRpby5oIiAz
CnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0
X3Q7CiMgMTM3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9p
bmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAz
CiMgMTM4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNs
dWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRv
dXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CiMgMTUyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCByZW1vdmUg
KF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHJlbmFtZSAo
X19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7CiMgMTY4ICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu
IEZJTEUgKnRtcGZpbGU2NCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnRtcG5hbSAo
Y2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19z
KSB0aHJvdyAoKTsKIyAxODggIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBj
aGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJ
TEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7Cgpl
eHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUs
CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywK
ICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
OwojIDIzMiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5j
bHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKZXh0ZXJuIEZJTEUgKmZyZW9wZW42NCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICBG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpmZG9w
ZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBGSUxFICpmb3BlbmNvb2tpZSAodm9pZCAqX19yZXN0cmljdCBfX21hZ2ljX2Nvb2tpZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9faW9f
ZnVuY3MpIHRocm93ICgpOwoKCmV4dGVybiBGSUxFICpmbWVtb3BlbiAodm9pZCAqX19zLCBzaXpl
X3QgX19sZW4sIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklM
RSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9jLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX3NpemVsb2MpIHRocm93ICgp
OwoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hh
ciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAg
ICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g
dm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJp
Y3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19z
LAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg
Li4uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHZmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9f
cywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAg
ICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZwcmludGYgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAg
ICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBf
X2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc25wcmludGYgKGNo
YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJuIGlu
dCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251
Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9f
IChfX3ByaW50Zl9fLCAzLCAwKSkpOwoKCgoKCmV4dGVybiBpbnQgdmFzcHJpbnRmIChjaGFyICoq
X19yZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZiwKICAgICAgICAg
ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IF9fYXNw
cmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpleHRlcm4gaW50IGFzcHJp
bnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKZXh0ZXJuIGludCB2ZHByaW50
ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwKICAgICAgICAgICAg
ICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgZHByaW50ZiAo
aW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCgoK
ZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7
CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u
LikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h
dCwgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0
IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAg
ICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJuIGludCB2c2NhbmYgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMSwgMCkpKTsK
CgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNf
dmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAo
X19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRj
X3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0Y2hhcl91
bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cg
KCk7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQg
X19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24s
IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy
ICpmZ2V0c191bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyA0MzYgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkaW8uaCIg
MwpleHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24s
IGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChj
aGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVy
biBfX3NzaXplX3QgZ2V0bGluZSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCBmcHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmcHV0c191bmxv
Y2tlZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
cHV0cyAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAo
aW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFk
ICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4
dGVybiBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVf
dCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3Ry
aWN0IF9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQg
Kl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpl
eHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9f
cHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgdGhy
b3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDQ5OSAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRpby5o
IiAzCmV4dGVybiBpbnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50
IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0sIGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cg
KCk7CiMgNTMzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9p
bmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla282NCAoRklMRSAqX19zdHJlYW0sIF9f
b2ZmNjRfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBm
dGVsbG82NCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZnZXRwb3M2NCAo
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVzdHJpY3QgX19wb3MpCiAg
ICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19jb25z
dCBmcG9zNjRfdCAqX19wb3MpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgpleHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK
CgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtd
OwoKCmV4dGVybiBpbnQgX3N5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9z
eXNfZXJybGlzdFtdOwoKCgoKCmV4dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5k
LCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcGNsb3NlIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIg
Kl9fcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgdGhy
b3cgKCk7CgoKCgpzdHJ1Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChz
dHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9f
b2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0
IF9fYXJncykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwojIDY0MCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIg
MSAzCiMgMzkgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDMKaW5saW5lIGludAp2cHJpbnRm
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0
aHJvdyAoKQp7CiAgcmV0dXJuIHZmcHJpbnRmIChzdGRvdXQsIF9fZm10LCBfX2FyZyk7Cn0KCgpp
bmxpbmUgaW50CmdldGNoYXIgKHZvaWQpIHRocm93ICgpCnsKICByZXR1cm4gX0lPX2dldGMgKHN0
ZGluKTsKfQoKCgoKaW5saW5lIGludApnZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKSB0aHJvdyAo
KQp7CiAgcmV0dXJuICgoX19mcCktPl9JT19yZWFkX3B0ciA+PSAoX19mcCktPl9JT19yZWFkX2Vu
ZCA/IF9fdWZsb3cgKF9fZnApIDogKih1bnNpZ25lZCBjaGFyICopIChfX2ZwKS0+X0lPX3JlYWRf
cHRyKyspOwp9CgoKaW5saW5lIGludApnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKQp7
CiAgcmV0dXJuICgoc3RkaW4pLT5fSU9fcmVhZF9wdHIgPj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5k
ID8gX191ZmxvdyAoc3RkaW4pIDogKih1bnNpZ25lZCBjaGFyICopIChzdGRpbiktPl9JT19yZWFk
X3B0cisrKTsKfQoKCgoKaW5saW5lIGludApwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKQp7CiAg
cmV0dXJuIF9JT19wdXRjIChfX2MsIHN0ZG91dCk7Cn0KCgoKCmlubGluZSBpbnQKZnB1dGNfdW5s
b2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9f
c3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9f
b3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNo
YXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmlubGlu
ZSBpbnQKcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsK
ICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193
cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkg
OiAodW5zaWduZWQgY2hhcikgKCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkp
Owp9CgoKaW5saW5lIGludApwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKQp7CiAg
cmV0dXJuICgoKHN0ZG91dCktPl9JT193cml0ZV9wdHIgPj0gKHN0ZG91dCktPl9JT193cml0ZV9l
bmQpID8gX19vdmVyZmxvdyAoc3Rkb3V0LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2ln
bmVkIGNoYXIpICgqKHN0ZG91dCktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgpp
bmxpbmUgX19zc2l6ZV90CmdldGxpbmUgKGNoYXIgKipfX2xpbmVwdHIsIHNpemVfdCAqX19uLCBG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiBfX2dldGRlbGltIChfX2xpbmVwdHIs
IF9fbiwgJ1xuJywgX19zdHJlYW0pOwp9CgoKCgoKaW5saW5lIGludApmZW9mX3VubG9ja2VkIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAm
IDB4MTApICE9IDApOwp9CgoKaW5saW5lIGludApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgyMCkgIT0g
MCk7Cn0KIyA2NDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4x
L2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKfQojIDQ1ICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRl
L3FmaWxlLmgiIDIKCgpjbGFzcyBRRGlyOwoKCmNsYXNzIFFGaWxlIDogcHVibGljIFFJT0Rldmlj
ZQp7CnB1YmxpYzoKICAgIFFGaWxlKCk7CiAgICBRRmlsZSggY29uc3QgUVN0cmluZyAmbmFtZSAp
OwogICB+UUZpbGUoKTsKCiAgICBRU3RyaW5nIG5hbWUoKSBjb25zdDsKICAgIHZvaWQgc2V0TmFt
ZSggY29uc3QgUVN0cmluZyAmbmFtZSApOwoKICAgIHR5cGVkZWYgUUNTdHJpbmcgKCpFbmNvZGVy
Rm4pKCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSApOwogICAgdHlwZWRlZiBRU3RyaW5nICgqRGVj
b2RlckZuKSggY29uc3QgUUNTdHJpbmcgJmxvY2FsZmlsZU5hbWUgKTsKICAgIHN0YXRpYyBRQ1N0
cmluZyBlbmNvZGVOYW1lKCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSApOwogICAgc3RhdGljIFFT
dHJpbmcgZGVjb2RlTmFtZSggY29uc3QgUUNTdHJpbmcgJmxvY2FsRmlsZU5hbWUgKTsKICAgIHN0
YXRpYyB2b2lkIHNldEVuY29kaW5nRnVuY3Rpb24oIEVuY29kZXJGbiApOwogICAgc3RhdGljIHZv
aWQgc2V0RGVjb2RpbmdGdW5jdGlvbiggRGVjb2RlckZuICk7CgogICAgYm9vbCBleGlzdHMoKSBj
b25zdDsKICAgIHN0YXRpYyBib29sIGV4aXN0cyggY29uc3QgUVN0cmluZyAmZmlsZU5hbWUgKTsK
CiAgICBib29sIHJlbW92ZSgpOwogICAgc3RhdGljIGJvb2wgcmVtb3ZlKCBjb25zdCBRU3RyaW5n
ICZmaWxlTmFtZSApOwoKICAgIGJvb2wgb3BlbiggaW50ICk7CiAgICBib29sIG9wZW4oIGludCwg
RklMRSAqICk7CiAgICBib29sIG9wZW4oIGludCwgaW50ICk7CiAgICB2b2lkIGNsb3NlKCk7CiAg
ICB2b2lkIGZsdXNoKCk7CgogICAgdWludCBzaXplKCkgY29uc3Q7CiAgICBpbnQgYXQoKSBjb25z
dDsKICAgIGJvb2wgYXQoIGludCApOwogICAgYm9vbCBhdEVuZCgpIGNvbnN0OwoKICAgIGludCBy
ZWFkQmxvY2soIGNoYXIgKmRhdGEsIHVpbnQgbGVuICk7CiAgICBpbnQgd3JpdGVCbG9jayggY29u
c3QgY2hhciAqZGF0YSwgdWludCBsZW4gKTsKICAgIGludCB3cml0ZUJsb2NrKCBjb25zdCBRQnl0
ZUFycmF5JiBkYXRhICkKICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBRSU9EZXZpY2U6Ondy
aXRlQmxvY2soZGF0YSk7IH0KICAgIGludCByZWFkTGluZSggY2hhciAqZGF0YSwgdWludCBtYXhs
ZW4gKTsKICAgIGludCByZWFkTGluZSggUVN0cmluZyAmLCB1aW50IG1heGxlbiApOwoKICAgIGlu
dCBnZXRjaCgpOwogICAgaW50IHB1dGNoKCBpbnQgKTsKICAgIGludCB1bmdldGNoKCBpbnQgKTsK
CiAgICBpbnQgaGFuZGxlKCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6CiAgICBRU3RyaW5nIGZuOwogICAg
RklMRSAqZmg7CiAgICBpbnQgZmQ7CiAgICBpbnQgbGVuZ3RoOwogICAgYm9vbCBleHRfZjsKICAg
IHZvaWQgKiBkOwoKcHJpdmF0ZToKICAgIHZvaWQgaW5pdCgpOwogICAgUUNTdHJpbmcgdW5nZXRj
aEJ1ZmZlcjsKCnByaXZhdGU6CgogICAgUUZpbGUoIGNvbnN0IFFGaWxlICYgKTsKICAgIFFGaWxl
ICZvcGVyYXRvcj0oIGNvbnN0IFFGaWxlICYgKTsKCn07CgoKaW5saW5lIFFTdHJpbmcgUUZpbGU6
Om5hbWUoKSBjb25zdAp7IHJldHVybiBmbjsgfQoKaW5saW5lIGludCBRRmlsZTo6YXQoKSBjb25z
dAp7IHJldHVybiBpb0luZGV4OyB9CiMgNDMgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWZp
bGVpbmZvLmgiIDIKIyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FkYXRldGltZS5oIiAx
CiMgNDIgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWRhdGV0aW1lLmgiCiMgMSAiL3Vzci9s
aWIvcXQtMi4zLjEvaW5jbHVkZS9xc3RyaW5nLmgiIDEKIyA0MyAiL3Vzci9saWIvcXQtMi4zLjEv
aW5jbHVkZS9xZGF0ZXRpbWUuaCIgMgoKCgoKCgoKY2xhc3MgUURhdGUKewpwdWJsaWM6CiAgICBR
RGF0ZSgpIHsgamQ9MDsgfQogICAgUURhdGUoIGludCB5LCBpbnQgbSwgaW50IGQgKTsKCiAgICBi
b29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIGpkID09IDA7IH0KICAgIGJvb2wgaXNWYWxpZCgp
IGNvbnN0OwoKICAgIGludCB5ZWFyKCkgY29uc3Q7CiAgICBpbnQgbW9udGgoKSBjb25zdDsKICAg
IGludCBkYXkoKSBjb25zdDsKICAgIGludCBkYXlPZldlZWsoKSBjb25zdDsKICAgIGludCBkYXlP
ZlllYXIoKSBjb25zdDsKICAgIGludCBkYXlzSW5Nb250aCgpIGNvbnN0OwogICAgaW50IGRheXNJ
blllYXIoKSBjb25zdDsKCiAgICB2aXJ0dWFsIFFTdHJpbmcgbW9udGhOYW1lKCBpbnQgbW9udGgg
KSBjb25zdDsKICAgIHZpcnR1YWwgUVN0cmluZyBkYXlOYW1lKCBpbnQgd2Vla2RheSApIGNvbnN0
OwoKICAgIFFTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKCiAgICBib29sIHNldFlNRCggaW50IHks
IGludCBtLCBpbnQgZCApOwoKICAgIFFEYXRlIGFkZERheXMoIGludCBkYXlzICkgY29uc3Q7CiAg
ICBpbnQgZGF5c1RvKCBjb25zdCBRRGF0ZSAmICkgY29uc3Q7CgogICAgYm9vbCBvcGVyYXRvcj09
KCBjb25zdCBRRGF0ZSAmZCApIGNvbnN0IHsgcmV0dXJuIGpkID09IGQuamQ7IH0KICAgIGJvb2wg
b3BlcmF0b3IhPSggY29uc3QgUURhdGUgJmQgKSBjb25zdCB7IHJldHVybiBqZCAhPSBkLmpkOyB9
CiAgICBib29sIG9wZXJhdG9yPCggY29uc3QgUURhdGUgJmQgKSBjb25zdCB7IHJldHVybiBqZCA8
IGQuamQ7IH0KICAgIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgUURhdGUgJmQgKSBjb25zdCB7IHJl
dHVybiBqZCA8PSBkLmpkOyB9CiAgICBib29sIG9wZXJhdG9yPiggY29uc3QgUURhdGUgJmQgKSBj
b25zdCB7IHJldHVybiBqZCA+IGQuamQ7IH0KICAgIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgUURh
dGUgJmQgKSBjb25zdCB7IHJldHVybiBqZCA+PSBkLmpkOyB9CgogICAgc3RhdGljIFFEYXRlIGN1
cnJlbnREYXRlKCk7CiAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkKCBpbnQgeSwgaW50IG0sIGludCBk
ICk7CiAgICBzdGF0aWMgYm9vbCBsZWFwWWVhciggaW50IHllYXIgKTsKCnByb3RlY3RlZDoKICAg
IHN0YXRpYyB1aW50IGdyZWcyanVsKCBpbnQgeSwgaW50IG0sIGludCBkICk7CiAgICBzdGF0aWMg
dm9pZCBqdWwyZ3JlZyggdWludCBqZCwgaW50ICZ5LCBpbnQgJm0sIGludCAmZCApOwpwcml2YXRl
OgogICAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtb250aE5hbWVzW107CiAgICBzdGF0aWMg
Y29uc3QgY2hhciAqIGNvbnN0IHdlZWtkYXlOYW1lc1tdOwogICAgdWludCBqZDsKICAgIGZyaWVu
ZCBjbGFzcyBRRGF0ZVRpbWU7CgogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBR
RGF0YVN0cmVhbSAmLCBjb25zdCBRRGF0ZSAmICk7CiAgICBmcmllbmQgUURhdGFTdHJlYW0gJm9w
ZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFEYXRlICYgKTsKCn07CgoKCgoKCmNsYXNzIFFUaW1l
CnsKcHVibGljOgogICAgUVRpbWUoKSB7IGRzPTA7IH0KICAgIFFUaW1lKCBpbnQgaCwgaW50IG0s
IGludCBzPTAsIGludCBtcz0wICk7CgogICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBk
cyA9PSAwOyB9CiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKCiAgICBpbnQgaG91cigpIGNvbnN0
OwogICAgaW50IG1pbnV0ZSgpIGNvbnN0OwogICAgaW50IHNlY29uZCgpIGNvbnN0OwogICAgaW50
IG1zZWMoKSBjb25zdDsKCiAgICBRU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CgogICAgYm9vbCBz
ZXRITVMoIGludCBoLCBpbnQgbSwgaW50IHMsIGludCBtcz0wICk7CgogICAgUVRpbWUgYWRkU2Vj
cyggaW50IHNlY3MgKSBjb25zdDsKICAgIGludCBzZWNzVG8oIGNvbnN0IFFUaW1lICYgKSBjb25z
dDsKICAgIFFUaW1lIGFkZE1TZWNzKCBpbnQgbXMgKSBjb25zdDsKICAgIGludCBtc2Vjc1RvKCBj
b25zdCBRVGltZSAmICkgY29uc3Q7CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRVGltZSAm
ZCApIGNvbnN0IHsgcmV0dXJuIGRzID09IGQuZHM7IH0KICAgIGJvb2wgb3BlcmF0b3IhPSggY29u
c3QgUVRpbWUgJmQgKSBjb25zdCB7IHJldHVybiBkcyAhPSBkLmRzOyB9CiAgICBib29sIG9wZXJh
dG9yPCggY29uc3QgUVRpbWUgJmQgKSBjb25zdCB7IHJldHVybiBkcyA8IGQuZHM7IH0KICAgIGJv
b2wgb3BlcmF0b3I8PSggY29uc3QgUVRpbWUgJmQgKSBjb25zdCB7IHJldHVybiBkcyA8PSBkLmRz
OyB9CiAgICBib29sIG9wZXJhdG9yPiggY29uc3QgUVRpbWUgJmQgKSBjb25zdCB7IHJldHVybiBk
cyA+IGQuZHM7IH0KICAgIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgUVRpbWUgJmQgKSBjb25zdCB7
IHJldHVybiBkcyA+PSBkLmRzOyB9CgogICAgc3RhdGljIFFUaW1lIGN1cnJlbnRUaW1lKCk7CiAg
ICBzdGF0aWMgYm9vbCBpc1ZhbGlkKCBpbnQgaCwgaW50IG0sIGludCBzLCBpbnQgbXM9MCApOwoK
ICAgIHZvaWQgc3RhcnQoKTsKICAgIGludCByZXN0YXJ0KCk7CiAgICBpbnQgZWxhcHNlZCgpOwoK
cHJpdmF0ZToKICAgIHN0YXRpYyBib29sIGN1cnJlbnRUaW1lKCBRVGltZSAqICk7CgogICAgdWlu
dCBkczsKICAgIGZyaWVuZCBjbGFzcyBRRGF0ZVRpbWU7CgogICAgZnJpZW5kIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRVGltZSAmICk7CiAgICBmcmllbmQg
UURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFUaW1lICYgKTsKCn07CgoK
CgoKCmNsYXNzIFFEYXRlVGltZQp7CnB1YmxpYzoKICAgIFFEYXRlVGltZSgpIHt9CiAgICBRRGF0
ZVRpbWUoIGNvbnN0IFFEYXRlICYgKTsKICAgIFFEYXRlVGltZSggY29uc3QgUURhdGUgJiwgY29u
c3QgUVRpbWUgJiApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gZC5pc051bGwo
KSAmJiB0LmlzTnVsbCgpOyB9CiAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBkLmlz
VmFsaWQoKSAmJiB0LmlzVmFsaWQoKTsgfQoKICAgIFFEYXRlIGRhdGUoKSBjb25zdCB7IHJldHVy
biBkOyB9CiAgICBRVGltZSB0aW1lKCkgY29uc3QgeyByZXR1cm4gdDsgfQogICAgdm9pZCBzZXRE
YXRlKCBjb25zdCBRRGF0ZSAmZGF0ZSApIHsgZD1kYXRlOyB9CiAgICB2b2lkIHNldFRpbWUoIGNv
bnN0IFFUaW1lICZ0aW1lICkgeyB0PXRpbWU7IH0KICAgIHZvaWQgc2V0VGltZV90KCB1aW50IHNl
Y3NTaW5jZTFKYW4xOTcwVVRDICk7CgogICAgUVN0cmluZyB0b1N0cmluZygpIGNvbnN0OwoKICAg
IFFEYXRlVGltZSBhZGREYXlzKCBpbnQgZGF5cyApIGNvbnN0OwogICAgUURhdGVUaW1lIGFkZFNl
Y3MoIGludCBzZWNzICkgY29uc3Q7CiAgICBpbnQgZGF5c1RvKCBjb25zdCBRRGF0ZVRpbWUgJiAp
IGNvbnN0OwogICAgaW50IHNlY3NUbyggY29uc3QgUURhdGVUaW1lICYgKSBjb25zdDsKCiAgICBi
b29sIG9wZXJhdG9yPT0oIGNvbnN0IFFEYXRlVGltZSAmZHQgKSBjb25zdDsKICAgIGJvb2wgb3Bl
cmF0b3IhPSggY29uc3QgUURhdGVUaW1lICZkdCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvcjwo
IGNvbnN0IFFEYXRlVGltZSAmZHQgKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3I8PSggY29uc3Qg
UURhdGVUaW1lICZkdCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvcj4oIGNvbnN0IFFEYXRlVGlt
ZSAmZHQgKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgUURhdGVUaW1lICZkdCAp
IGNvbnN0OwoKICAgIHN0YXRpYyBRRGF0ZVRpbWUgY3VycmVudERhdGVUaW1lKCk7Cgpwcml2YXRl
OgogICAgUURhdGUgZDsKICAgIFFUaW1lIHQ7CgogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVy
YXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRRGF0ZVRpbWUgJik7CiAgICBmcmllbmQgUURh
dGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFEYXRlVGltZSAmICk7Cgp9OwoK
CgoKCgoKICAgICAgICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNv
bnN0IFFEYXRlICYgKTsKICAgICAgICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3Ry
ZWFtICYsIFFEYXRlICYgKTsKICAgICAgICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRh
U3RyZWFtICYsIGNvbnN0IFFUaW1lICYgKTsKICAgICAgICAgUURhdGFTdHJlYW0gJm9wZXJhdG9y
Pj4oIFFEYXRhU3RyZWFtICYsIFFUaW1lICYgKTsKICAgICAgICAgUURhdGFTdHJlYW0gJm9wZXJh
dG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFEYXRlVGltZSAmICk7CiAgICAgICAgIFFEYXRh
U3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRRGF0ZVRpbWUgJiApOwojIDQ0ICIv
dXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FmaWxlaW5mby5oIiAyCgoKCmNsYXNzIFFEaXI7CnN0
cnVjdCBRRmlsZUluZm9DYWNoZTsKCgpjbGFzcyBRRmlsZUluZm8KewpwdWJsaWM6CiAgICBlbnVt
IFBlcm1pc3Npb25TcGVjIHsKICAgICAgICBSZWFkVXNlciA9IDA0MDAsIFdyaXRlVXNlciA9IDAy
MDAsIEV4ZVVzZXIgPSAwMTAwLAogICAgICAgIFJlYWRHcm91cCA9IDAwNDAsIFdyaXRlR3JvdXAg
PSAwMDIwLCBFeGVHcm91cCA9IDAwMTAsCiAgICAgICAgUmVhZE90aGVyID0gMDAwNCwgV3JpdGVP
dGhlciA9IDAwMDIsIEV4ZU90aGVyID0gMDAwMSB9OwoKICAgIFFGaWxlSW5mbygpOwogICAgUUZp
bGVJbmZvKCBjb25zdCBRU3RyaW5nICZmaWxlICk7CiAgICBRRmlsZUluZm8oIGNvbnN0IFFGaWxl
ICYgKTsKCiAgICBRRmlsZUluZm8oIGNvbnN0IFFEaXIgJiwgY29uc3QgUVN0cmluZyAmZmlsZU5h
bWUgKTsKCiAgICBRRmlsZUluZm8oIGNvbnN0IFFGaWxlSW5mbyAmICk7CiAgIH5RRmlsZUluZm8o
KTsKCiAgICBRRmlsZUluZm8gJm9wZXJhdG9yPSggY29uc3QgUUZpbGVJbmZvICYgKTsKCiAgICB2
b2lkIHNldEZpbGUoIGNvbnN0IFFTdHJpbmcgJmZpbGUgKTsKICAgIHZvaWQgc2V0RmlsZSggY29u
c3QgUUZpbGUgJiApOwoKICAgIHZvaWQgc2V0RmlsZSggY29uc3QgUURpciAmLCBjb25zdCBRU3Ry
aW5nICZmaWxlTmFtZSApOwoKICAgIGJvb2wgZXhpc3RzKCkgY29uc3Q7CiAgICB2b2lkIHJlZnJl
c2goKSBjb25zdDsKICAgIGJvb2wgY2FjaGluZygpIGNvbnN0OwogICAgdm9pZCBzZXRDYWNoaW5n
KCBib29sICk7CgogICAgUVN0cmluZyBmaWxlUGF0aCgpIGNvbnN0OwogICAgUVN0cmluZyBmaWxl
TmFtZSgpIGNvbnN0OwoKICAgIFFTdHJpbmcgYWJzRmlsZVBhdGgoKSBjb25zdDsKCiAgICBRU3Ry
aW5nIGJhc2VOYW1lKCkgY29uc3Q7CiAgICBRU3RyaW5nIGV4dGVuc2lvbiggYm9vbCBjb21wbGV0
ZSA9IFRSVUUgKSBjb25zdDsKCgogICAgUVN0cmluZyBkaXJQYXRoKCBib29sIGFic1BhdGggPSBG
QUxTRSApIGNvbnN0OwoKCiAgICBRRGlyIGRpciggYm9vbCBhYnNQYXRoID0gRkFMU0UgKSBjb25z
dDsKCiAgICBib29sIGlzUmVhZGFibGUoKSBjb25zdDsKICAgIGJvb2wgaXNXcml0YWJsZSgpIGNv
bnN0OwogICAgYm9vbCBpc0V4ZWN1dGFibGUoKSBjb25zdDsKCgogICAgYm9vbCBpc1JlbGF0aXZl
KCkgY29uc3Q7CiAgICBib29sIGNvbnZlcnRUb0FicygpOwoKCiAgICBib29sIGlzRmlsZSgpIGNv
bnN0OwogICAgYm9vbCBpc0RpcigpIGNvbnN0OwogICAgYm9vbCBpc1N5bUxpbmsoKSBjb25zdDsK
CiAgICBRU3RyaW5nIHJlYWRMaW5rKCkgY29uc3Q7CgogICAgUVN0cmluZyBvd25lcigpIGNvbnN0
OwogICAgdWludCBvd25lcklkKCkgY29uc3Q7CiAgICBRU3RyaW5nIGdyb3VwKCkgY29uc3Q7CiAg
ICB1aW50IGdyb3VwSWQoKSBjb25zdDsKCiAgICBib29sIHBlcm1pc3Npb24oIGludCBwZXJtaXNz
aW9uU3BlYyApIGNvbnN0OwoKICAgIHVpbnQgc2l6ZSgpIGNvbnN0OwoKICAgIFFEYXRlVGltZSBs
YXN0TW9kaWZpZWQoKSBjb25zdDsKICAgIFFEYXRlVGltZSBsYXN0UmVhZCgpIGNvbnN0OwoKcHJp
dmF0ZToKICAgIHZvaWQgZG9TdGF0KCkgY29uc3Q7CiAgICBzdGF0aWMgdm9pZCBzbGFzaGlmeSgg
UVN0cmluZyAmICk7CiAgICBzdGF0aWMgdm9pZCBtYWtlQWJzKCBRU3RyaW5nICYgKTsKCiAgICBR
U3RyaW5nIGZuOwogICAgUUZpbGVJbmZvQ2FjaGUgKmZpYzsKICAgIGJvb2wgY2FjaGU7Cn07CgoK
aW5saW5lIGJvb2wgUUZpbGVJbmZvOjpjYWNoaW5nKCkgY29uc3QKewogICAgcmV0dXJuIGNhY2hl
Owp9CiMgNDQgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWRpci5oIiAyCgoKCnR5cGVkZWYg
UUxpc3Q8UUZpbGVJbmZvPiBRRmlsZUluZm9MaXN0Owp0eXBlZGVmIFFMaXN0SXRlcmF0b3I8UUZp
bGVJbmZvPiBRRmlsZUluZm9MaXN0SXRlcmF0b3I7CmNsYXNzIFFTdHJpbmdMaXN0OwoKCmNsYXNz
IFFEaXIKewpwdWJsaWM6CiAgICBlbnVtIEZpbHRlclNwZWMgeyBEaXJzID0gMHgwMDEsCiAgICAg
ICAgICAgICAgICAgICAgICBGaWxlcyA9IDB4MDAyLAogICAgICAgICAgICAgICAgICAgICAgRHJp
dmVzID0gMHgwMDQsCiAgICAgICAgICAgICAgICAgICAgICBOb1N5bUxpbmtzID0gMHgwMDgsCiAg
ICAgICAgICAgICAgICAgICAgICBBbGwgPSAweDAwNywKICAgICAgICAgICAgICAgICAgICAgICBU
eXBlTWFzayA9IDB4MDBGLAoKICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlID0gMHgwMTAs
CiAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZSA9IDB4MDIwLAogICAgICAgICAgICAgICAg
ICAgICAgRXhlY3V0YWJsZSA9IDB4MDQwLAogICAgICAgICAgICAgICAgICAgICAgIFJXRU1hc2sg
PSAweDA3MCwKCiAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllZCA9IDB4MDgwLAogICAgICAg
ICAgICAgICAgICAgICAgSGlkZGVuID0gMHgxMDAsCiAgICAgICAgICAgICAgICAgICAgICBTeXN0
ZW0gPSAweDIwMCwKICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NNYXNrID0gMHgzRjAsCgog
ICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdEZpbHRlciA9IC0xIH07CgogICAgZW51bSBTb3J0
U3BlYyB7IE5hbWUgPSAweDAwLAogICAgICAgICAgICAgICAgICAgICAgVGltZSA9IDB4MDEsCiAg
ICAgICAgICAgICAgICAgICAgICBTaXplID0gMHgwMiwKICAgICAgICAgICAgICAgICAgICAgIFVu
c29ydGVkID0gMHgwMywKICAgICAgICAgICAgICAgICAgICAgICBTb3J0QnlNYXNrID0gMHgwMywK
CiAgICAgICAgICAgICAgICAgICAgICBEaXJzRmlyc3QgPSAweDA0LAogICAgICAgICAgICAgICAg
ICAgICAgUmV2ZXJzZWQgPSAweDA4LAogICAgICAgICAgICAgICAgICAgICAgSWdub3JlQ2FzZSA9
IDB4MTAsCiAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0U29ydCA9IC0xIH07CgogICAgUURp
cigpOwogICAgUURpciggY29uc3QgUVN0cmluZyAmcGF0aCwgY29uc3QgUVN0cmluZyAmbmFtZUZp
bHRlciA9IFFTdHJpbmc6Om51bGwsCiAgICAgICAgICBpbnQgc29ydFNwZWMgPSBOYW1lIHwgSWdu
b3JlQ2FzZSwgaW50IGZpbHRlclNwZWMgPSBBbGwgKTsKICAgIFFEaXIoIGNvbnN0IFFEaXIgJiAp
OwoKICAgIHZpcnR1YWwgflFEaXIoKTsKCiAgICBRRGlyICZvcGVyYXRvcj0oIGNvbnN0IFFEaXIg
JiApOwogICAgUURpciAmb3BlcmF0b3I9KCBjb25zdCBRU3RyaW5nICZwYXRoICk7CgogICAgdmly
dHVhbCB2b2lkIHNldFBhdGgoIGNvbnN0IFFTdHJpbmcgJnBhdGggKTsKICAgIHZpcnR1YWwgUVN0
cmluZyBwYXRoKCkgY29uc3Q7CiAgICB2aXJ0dWFsIFFTdHJpbmcgYWJzUGF0aCgpIGNvbnN0Owog
ICAgdmlydHVhbCBRU3RyaW5nIGNhbm9uaWNhbFBhdGgoKSBjb25zdDsKCiAgICB2aXJ0dWFsIFFT
dHJpbmcgZGlyTmFtZSgpIGNvbnN0OwogICAgdmlydHVhbCBRU3RyaW5nIGZpbGVQYXRoKCBjb25z
dCBRU3RyaW5nICZmaWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBh
Y2NlcHRBYnNQYXRoID0gVFJVRSApIGNvbnN0OwogICAgdmlydHVhbCBRU3RyaW5nIGFic0ZpbGVQ
YXRoKCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBhY2NlcHRBYnNQYXRoID0gVFJVRSApIGNvbnN0OwoKICAgIHN0YXRpYyBRU3Ry
aW5nIGNvbnZlcnRTZXBhcmF0b3JzKCBjb25zdCBRU3RyaW5nICZwYXRoTmFtZSApOwoKICAgIHZp
cnR1YWwgYm9vbCBjZCggY29uc3QgUVN0cmluZyAmZGlyTmFtZSwgYm9vbCBhY2NlcHRBYnNQYXRo
ID0gVFJVRSApOwogICAgdmlydHVhbCBib29sIGNkVXAoKTsKCiAgICBRU3RyaW5nIG5hbWVGaWx0
ZXIoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lRmlsdGVyKCBjb25zdCBRU3RyaW5n
ICZuYW1lRmlsdGVyICk7CiAgICBGaWx0ZXJTcGVjIGZpbHRlcigpIGNvbnN0OwogICAgdmlydHVh
bCB2b2lkIHNldEZpbHRlciggaW50IGZpbHRlclNwZWMgKTsKICAgIFNvcnRTcGVjIHNvcnRpbmco
KSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRTb3J0aW5nKCBpbnQgc29ydFNwZWMgKTsKCiAg
ICBib29sIG1hdGNoQWxsRGlycygpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldE1hdGNoQWxs
RGlycyggYm9vbCApOwoKICAgIHVpbnQgY291bnQoKSBjb25zdDsKICAgIFFTdHJpbmcgb3BlcmF0
b3JbXSggaW50ICkgY29uc3Q7CgogICAgdmlydHVhbCBRU3RyTGlzdCBlbmNvZGVkRW50cnlMaXN0
KCBpbnQgZmlsdGVyU3BlYyA9IERlZmF1bHRGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBzb3J0U3BlYyA9IERlZmF1bHRTb3J0ICkgY29uc3Q7CiAgICB2
aXJ0dWFsIFFTdHJMaXN0IGVuY29kZWRFbnRyeUxpc3QoIGNvbnN0IFFTdHJpbmcgJm5hbWVGaWx0
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWx0ZXJTcGVj
ID0gRGVmYXVsdEZpbHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHNvcnRTcGVjID0gRGVmYXVsdFNvcnQgKSBjb25zdDsKICAgIHZpcnR1YWwgUVN0cmluZ0xp
c3QgZW50cnlMaXN0KCBpbnQgZmlsdGVyU3BlYyA9IERlZmF1bHRGaWx0ZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvcnRTcGVjID0gRGVmYXVsdFNvcnQgKSBjb25z
dDsKICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgZW50cnlMaXN0KCBjb25zdCBRU3RyaW5nICZuYW1l
RmlsdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWx0ZXJTcGVj
ID0gRGVmYXVsdEZpbHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
c29ydFNwZWMgPSBEZWZhdWx0U29ydCApIGNvbnN0OwoKICAgIHZpcnR1YWwgY29uc3QgUUZpbGVJ
bmZvTGlzdCAqZW50cnlJbmZvTGlzdCggaW50IGZpbHRlclNwZWMgPSBEZWZhdWx0RmlsdGVyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ydFNw
ZWMgPSBEZWZhdWx0U29ydCApIGNvbnN0OwogICAgdmlydHVhbCBjb25zdCBRRmlsZUluZm9MaXN0
ICplbnRyeUluZm9MaXN0KCBjb25zdCBRU3RyaW5nICZuYW1lRmlsdGVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmlsdGVyU3BlYyA9IERlZmF1
bHRGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBzb3J0U3BlYyA9IERlZmF1bHRTb3J0ICkgY29uc3Q7CgogICAgc3RhdGljIGNvbnN0IFFG
aWxlSW5mb0xpc3QgKmRyaXZlcygpOwoKICAgIHZpcnR1YWwgYm9vbCBta2RpciggY29uc3QgUVN0
cmluZyAmZGlyTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhY2NlcHRBYnNQYXRo
ID0gVFJVRSApIGNvbnN0OwogICAgdmlydHVhbCBib29sIHJtZGlyKCBjb25zdCBRU3RyaW5nICZk
aXJOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjY2VwdEFic1BhdGggPSBUUlVF
ICkgY29uc3Q7CgogICAgdmlydHVhbCBib29sIGlzUmVhZGFibGUoKSBjb25zdDsKICAgIHZpcnR1
YWwgYm9vbCBleGlzdHMoKSBjb25zdDsKICAgIHZpcnR1YWwgYm9vbCBpc1Jvb3QoKSBjb25zdDsK
CiAgICB2aXJ0dWFsIGJvb2wgaXNSZWxhdGl2ZSgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIGNv
bnZlcnRUb0FicygpOwoKICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRRGlyICYg
KSBjb25zdDsKICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRRGlyICYgKSBjb25z
dDsKCiAgICB2aXJ0dWFsIGJvb2wgcmVtb3ZlKCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWNjZXB0QWJzUGF0aCA9IFRSVUUgKTsKICAgIHZp
cnR1YWwgYm9vbCByZW5hbWUoIGNvbnN0IFFTdHJpbmcgJm5hbWUsIGNvbnN0IFFTdHJpbmcgJm5l
d05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjY2VwdEFic1BhdGhzID0gVFJV
RSApOwogICAgdmlydHVhbCBib29sIGV4aXN0cyggY29uc3QgUVN0cmluZyAmbmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYWNjZXB0QWJzUGF0aCA9IFRSVUUgKTsKCiAgICBzdGF0
aWMgY2hhciBzZXBhcmF0b3IoKTsKCiAgICBzdGF0aWMgYm9vbCBzZXRDdXJyZW50KCBjb25zdCBR
U3RyaW5nICZwYXRoICk7CiAgICBzdGF0aWMgUURpciBjdXJyZW50KCk7CiAgICBzdGF0aWMgUURp
ciBob21lKCk7CiAgICBzdGF0aWMgUURpciByb290KCk7CiAgICBzdGF0aWMgUVN0cmluZyBjdXJy
ZW50RGlyUGF0aCgpOwogICAgc3RhdGljIFFTdHJpbmcgaG9tZURpclBhdGgoKTsKICAgIHN0YXRp
YyBRU3RyaW5nIHJvb3REaXJQYXRoKCk7CgogICAgc3RhdGljIGJvb2wgbWF0Y2goIGNvbnN0IFFT
dHJpbmdMaXN0ICZmaWx0ZXJzLCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSApOwogICAgc3RhdGlj
IGJvb2wgbWF0Y2goIGNvbnN0IFFTdHJpbmcgJmZpbHRlciwgY29uc3QgUVN0cmluZyAmZmlsZU5h
bWUgKTsKICAgIHN0YXRpYyBRU3RyaW5nIGNsZWFuRGlyUGF0aCggY29uc3QgUVN0cmluZyAmZGly
UGF0aCApOwogICAgc3RhdGljIGJvb2wgaXNSZWxhdGl2ZVBhdGgoIGNvbnN0IFFTdHJpbmcgJnBh
dGggKTsKCnByaXZhdGU6CiAgICB2b2lkIGluaXQoKTsKICAgIHZpcnR1YWwgYm9vbCByZWFkRGly
RW50cmllcyggY29uc3QgUVN0cmluZyAmbmFtZUZpbHRlciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IEZpbHRlclNwZWMsIGludCBTb3J0U3BlYyApOwoKICAgIHN0YXRpYyB2
b2lkIHNsYXNoaWZ5ICggUVN0cmluZyAmKTsKCiAgICBRU3RyaW5nIGRQYXRoOwogICAgUVN0cmlu
Z0xpc3QgKmZMaXN0OwogICAgUUZpbGVJbmZvTGlzdCAqZmlMaXN0OwogICAgUVN0cmluZyBuYW1l
RmlsdDsKICAgIEZpbHRlclNwZWMgZmlsdFM7CiAgICBTb3J0U3BlYyBzb3J0UzsKICAgIHVpbnQg
ZGlydHkgOiAxOwogICAgdWludCBhbGxEaXJzIDogMTsKfTsKCgppbmxpbmUgUVN0cmluZyBRRGly
OjpwYXRoKCkgY29uc3QKewogICAgcmV0dXJuIGRQYXRoOwp9CgppbmxpbmUgUVN0cmluZyBRRGly
OjpuYW1lRmlsdGVyKCkgY29uc3QKewogICAgcmV0dXJuIG5hbWVGaWx0Owp9CgppbmxpbmUgUURp
cjo6RmlsdGVyU3BlYyBRRGlyOjpmaWx0ZXIoKSBjb25zdAp7CiAgICByZXR1cm4gZmlsdFM7Cn0K
CmlubGluZSBRRGlyOjpTb3J0U3BlYyBRRGlyOjpzb3J0aW5nKCkgY29uc3QKewogICAgcmV0dXJu
IHNvcnRTOwp9CgppbmxpbmUgYm9vbCBRRGlyOjptYXRjaEFsbERpcnMoKSBjb25zdAp7CiAgICBy
ZXR1cm4gYWxsRGlyczsKfQoKaW5saW5lIGJvb2wgUURpcjo6b3BlcmF0b3IhPSggY29uc3QgUURp
ciAmZCApIGNvbnN0CnsKICAgIHJldHVybiAhKCp0aGlzID09IGQpOwp9CgoKc3RydWN0IFFEaXJT
b3J0SXRlbSB7CiAgICBRU3RyaW5nIGZpbGVuYW1lX2NhY2hlOwogICAgUUZpbGVJbmZvKiBpdGVt
Owp9OwojIDMyICJrY29uZmlnYmFja2VuZC5jcHAiIDIKIyAxICIvdXNyL2xpYi9xdC0yLjMuMS9p
bmNsdWRlL3FmaWxlaW5mby5oIiAxCiMgMzMgImtjb25maWdiYWNrZW5kLmNwcCIgMgojIDEgIi91
c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXRleHRjb2RlYy5oIiAxCiMgNDIgIi91c3IvbGliL3F0
LTIuMy4xL2luY2x1ZGUvcXRleHRjb2RlYy5oIgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1
ZGUvcXN0cmluZy5oIiAxCiMgNDMgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXRleHRjb2Rl
Yy5oIiAyCgoKCgpjbGFzcyBRVGV4dENvZGVjOwpjbGFzcyBRSU9EZXZpY2U7CgpjbGFzcyBRVGV4
dEVuY29kZXIgewpwdWJsaWM6CiAgICB2aXJ0dWFsIH5RVGV4dEVuY29kZXIoKTsKICAgIHZpcnR1
YWwgUUNTdHJpbmcgZnJvbVVuaWNvZGUoY29uc3QgUVN0cmluZyYgdWMsIGludCYgbGVuSW5PdXQp
ID0gMDsKfTsKCmNsYXNzIFFUZXh0RGVjb2RlciB7CnB1YmxpYzoKICAgIHZpcnR1YWwgflFUZXh0
RGVjb2RlcigpOwogICAgdmlydHVhbCBRU3RyaW5nIHRvVW5pY29kZShjb25zdCBjaGFyKiBjaGFy
cywgaW50IGxlbikgPSAwOwp9OwoKY2xhc3MgUVRleHRDb2RlYyB7CnB1YmxpYzoKICAgIHZpcnR1
YWwgflFUZXh0Q29kZWMoKTsKCgogICAgc3RhdGljIFFUZXh0Q29kZWMqIGxvYWRDaGFybWFwKFFJ
T0RldmljZSopOwogICAgc3RhdGljIFFUZXh0Q29kZWMqIGxvYWRDaGFybWFwRmlsZShRU3RyaW5n
IGZpbGVuYW1lKTsKCiAgICBzdGF0aWMgUVRleHRDb2RlYyogY29kZWNGb3JNaWIoaW50IG1pYik7
CiAgICBzdGF0aWMgUVRleHRDb2RlYyogY29kZWNGb3JOYW1lKGNvbnN0IGNoYXIqIGhpbnQsIGlu
dCBhY2N1cmFjeT0wKTsKICAgIHN0YXRpYyBRVGV4dENvZGVjKiBjb2RlY0ZvckNvbnRlbnQoY29u
c3QgY2hhciogY2hhcnMsIGludCBsZW4pOwogICAgc3RhdGljIFFUZXh0Q29kZWMqIGNvZGVjRm9y
SW5kZXgoaW50IGkpOwogICAgc3RhdGljIFFUZXh0Q29kZWMqIGNvZGVjRm9yTG9jYWxlKCk7Cgog
ICAgc3RhdGljIHZvaWQgZGVsZXRlQWxsQ29kZWNzKCk7CgogICAgc3RhdGljIGNvbnN0IGNoYXIq
IGxvY2FsZSgpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0ID0gMDsKICAg
IHZpcnR1YWwgaW50IG1pYkVudW0oKSBjb25zdCA9IDA7CgogICAgdmlydHVhbCBRVGV4dERlY29k
ZXIqIG1ha2VEZWNvZGVyKCkgY29uc3Q7CiAgICB2aXJ0dWFsIFFUZXh0RW5jb2RlciogbWFrZUVu
Y29kZXIoKSBjb25zdDsKCiAgICB2aXJ0dWFsIFFTdHJpbmcgdG9Vbmljb2RlKGNvbnN0IGNoYXIq
IGNoYXJzLCBpbnQgbGVuKSBjb25zdDsKICAgIHZpcnR1YWwgUUNTdHJpbmcgZnJvbVVuaWNvZGUo
Y29uc3QgUVN0cmluZyYgdWMsIGludCYgbGVuSW5PdXQpIGNvbnN0OwoKICAgIFFDU3RyaW5nIGZy
b21Vbmljb2RlKGNvbnN0IFFTdHJpbmcmIHVjKSBjb25zdDsKICAgIFFTdHJpbmcgdG9Vbmljb2Rl
KGNvbnN0IFFCeXRlQXJyYXkmLCBpbnQgbGVuKSBjb25zdDsKICAgIFFTdHJpbmcgdG9Vbmljb2Rl
KGNvbnN0IFFCeXRlQXJyYXkmKSBjb25zdDsKICAgIFFTdHJpbmcgdG9Vbmljb2RlKGNvbnN0IGNo
YXIqIGNoYXJzKSBjb25zdDsKICAgIHZpcnR1YWwgYm9vbCBjYW5FbmNvZGUoIFFDaGFyICkgY29u
c3Q7CiAgICB2aXJ0dWFsIGJvb2wgY2FuRW5jb2RlKCBjb25zdCBRU3RyaW5nJiApIGNvbnN0OwoK
ICAgIHZpcnR1YWwgaW50IGhldXJpc3RpY0NvbnRlbnRNYXRjaChjb25zdCBjaGFyKiBjaGFycywg
aW50IGxlbikgY29uc3QgPSAwOwogICAgdmlydHVhbCBpbnQgaGV1cmlzdGljTmFtZU1hdGNoKGNv
bnN0IGNoYXIqIGhpbnQpIGNvbnN0OwoKcHJvdGVjdGVkOgogICAgUVRleHRDb2RlYygpOwogICAg
c3RhdGljIGludCBzaW1wbGVIZXVyaXN0aWNOYW1lTWF0Y2goY29uc3QgY2hhciogbmFtZSwgY29u
c3QgY2hhciogaGludCk7Cn07CiMgMzQgImtjb25maWdiYWNrZW5kLmNwcCIgMgojIDEgIi91c3Iv
bGliL3F0LTIuMy4xL2luY2x1ZGUvcXRleHRzdHJlYW0uaCIgMQojIDQyICIvdXNyL2xpYi9xdC0y
LjMuMS9pbmNsdWRlL3F0ZXh0c3RyZWFtLmgiCiMgMSAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVk
ZS9xaW9kZXZpY2UuaCIgMQojIDQzICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3F0ZXh0c3Ry
ZWFtLmgiIDIKIyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FzdHJpbmcuaCIgMQojIDQ0
ICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3F0ZXh0c3RyZWFtLmgiIDIKIyAxICIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDEg
MwojIDQ1ICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3F0ZXh0c3RyZWFtLmgiIDIKCgoKY2xh
c3MgUVRleHRDb2RlYzsKY2xhc3MgUVRleHREZWNvZGVyOwoKY2xhc3MgUVRleHRTdHJlYW1Qcml2
YXRlOwoKY2xhc3MgUVRleHRTdHJlYW0KewpwdWJsaWM6CiAgICBlbnVtIEVuY29kaW5nIHsgTG9j
YWxlLCBMYXRpbjEsIFVuaWNvZGUsIFVuaWNvZGVOZXR3b3JrT3JkZXIsCiAgICAgICAgICAgICAg
ICAgICAgVW5pY29kZVJldmVyc2UsIFJhd1VuaWNvZGUsIFVuaWNvZGVVVEY4IH07CgogICAgdm9p
ZCBzZXRFbmNvZGluZyggRW5jb2RpbmcgKTsKCiAgICB2b2lkIHNldENvZGVjKCBRVGV4dENvZGVj
KiApOwoKCgoKICAgIFFUZXh0U3RyZWFtKCk7CiAgICBRVGV4dFN0cmVhbSggUUlPRGV2aWNlICog
KTsKICAgIFFUZXh0U3RyZWFtKCBRU3RyaW5nKiwgaW50IG1vZGUgKTsKICAgIFFUZXh0U3RyZWFt
KCBRU3RyaW5nJiwgaW50IG1vZGUgKTsKICAgIFFUZXh0U3RyZWFtKCBRQnl0ZUFycmF5LCBpbnQg
bW9kZSApOwogICAgUVRleHRTdHJlYW0oIEZJTEUgKiwgaW50IG1vZGUgKTsKICAgIHZpcnR1YWwg
flFUZXh0U3RyZWFtKCk7CgogICAgUUlPRGV2aWNlICpkZXZpY2UoKSBjb25zdDsKICAgIHZvaWQg
c2V0RGV2aWNlKCBRSU9EZXZpY2UgKiApOwogICAgdm9pZCB1bnNldERldmljZSgpOwoKICAgIGJv
b2wgYXRFbmQoKSBjb25zdDsKICAgIGJvb2wgZW9mKCkgY29uc3Q7CgogICAgUVRleHRTdHJlYW0g
Jm9wZXJhdG9yPj4oIFFDaGFyICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCBjaGFy
ICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCBzaWduZWQgc2hvcnQgJiApOwogICAg
UVRleHRTdHJlYW0gJm9wZXJhdG9yPj4oIHVuc2lnbmVkIHNob3J0ICYgKTsKICAgIFFUZXh0U3Ry
ZWFtICZvcGVyYXRvcj4+KCBzaWduZWQgaW50ICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRv
cj4+KCB1bnNpZ25lZCBpbnQgJiApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPj4oIHNpZ25l
ZCBsb25nICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCB1bnNpZ25lZCBsb25nICYg
KTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCBmbG9hdCAmICk7CiAgICBRVGV4dFN0cmVh
bSAmb3BlcmF0b3I+PiggZG91YmxlICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCBj
aGFyICogKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCBRU3RyaW5nICYgKTsKICAgIFFU
ZXh0U3RyZWFtICZvcGVyYXRvcj4+KCBRQ1N0cmluZyAmICk7CgogICAgUVRleHRTdHJlYW0gJm9w
ZXJhdG9yPDwoIFFDaGFyICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggY2hhciApOwog
ICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIHNpZ25lZCBzaG9ydCApOwogICAgUVRleHRTdHJl
YW0gJm9wZXJhdG9yPDwoIHVuc2lnbmVkIHNob3J0ICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0
b3I8PCggc2lnbmVkIGludCApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIHVuc2lnbmVk
IGludCApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIHNpZ25lZCBsb25nICk7CiAgICBR
VGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggdW5zaWduZWQgbG9uZyApOwogICAgUVRleHRTdHJlYW0g
Jm9wZXJhdG9yPDwoIGZsb2F0ICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggZG91Ymxl
ICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggY29uc3QgY2hhciogKTsKICAgIFFUZXh0
U3RyZWFtICZvcGVyYXRvcjw8KCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFUZXh0U3RyZWFtICZv
cGVyYXRvcjw8KCBjb25zdCBRQ1N0cmluZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8
PCggdm9pZCAqICk7CgogICAgUVRleHRTdHJlYW0gJnJlYWRSYXdCeXRlcyggY2hhciAqLCB1aW50
IGxlbiApOwogICAgUVRleHRTdHJlYW0gJndyaXRlUmF3Qnl0ZXMoIGNvbnN0IGNoYXIqICwgdWlu
dCBsZW4gKTsKCiAgICBRU3RyaW5nIHJlYWRMaW5lKCk7CiAgICBRU3RyaW5nIHJlYWQoKTsKICAg
IHZvaWQgc2tpcFdoaXRlU3BhY2UoKTsKCiAgICBlbnVtIHsKICAgICAgICBza2lwd3MgPSAweDAw
MDEsCiAgICAgICAgbGVmdCA9IDB4MDAwMiwKICAgICAgICByaWdodCA9IDB4MDAwNCwKICAgICAg
ICBpbnRlcm5hbCA9IDB4MDAwOCwKICAgICAgICBiaW4gPSAweDAwMTAsCiAgICAgICAgb2N0ID0g
MHgwMDIwLAogICAgICAgIGRlYyA9IDB4MDA0MCwKICAgICAgICBoZXggPSAweDAwODAsCiAgICAg
ICAgc2hvd2Jhc2UgPSAweDAxMDAsCiAgICAgICAgc2hvd3BvaW50ID0gMHgwMjAwLAogICAgICAg
IHVwcGVyY2FzZSA9IDB4MDQwMCwKICAgICAgICBzaG93cG9zID0gMHgwODAwLAogICAgICAgIHNj
aWVudGlmaWM9IDB4MTAwMCwKICAgICAgICBmaXhlZCA9IDB4MjAwMAogICAgfTsKCiAgICBzdGF0
aWMgY29uc3QgaW50IGJhc2VmaWVsZDsKICAgIHN0YXRpYyBjb25zdCBpbnQgYWRqdXN0ZmllbGQ7
CiAgICBzdGF0aWMgY29uc3QgaW50IGZsb2F0ZmllbGQ7CgogICAgaW50IGZsYWdzKCkgY29uc3Q7
CiAgICBpbnQgZmxhZ3MoIGludCBmICk7CiAgICBpbnQgc2V0ZiggaW50IGJpdHMgKTsKICAgIGlu
dCBzZXRmKCBpbnQgYml0cywgaW50IG1hc2sgKTsKICAgIGludCB1bnNldGYoIGludCBiaXRzICk7
CgogICAgdm9pZCByZXNldCgpOwoKICAgIGludCB3aWR0aCgpIGNvbnN0OwogICAgaW50IHdpZHRo
KCBpbnQgKTsKICAgIGludCBmaWxsKCkgY29uc3Q7CiAgICBpbnQgZmlsbCggaW50ICk7CiAgICBp
bnQgcHJlY2lzaW9uKCkgY29uc3Q7CiAgICBpbnQgcHJlY2lzaW9uKCBpbnQgKTsKCnByaXZhdGU6
CiAgICBsb25nIGlucHV0X2ludCgpOwogICAgdm9pZCBpbml0KCk7CiAgICBRVGV4dFN0cmVhbSAm
b3V0cHV0X2ludCggaW50LCB1bG9uZywgYm9vbCApOwogICAgUUlPRGV2aWNlICpkZXY7CiAgICBi
b29sIGlzTmV0d29ya09yZGVyKCkgeyByZXR1cm4gaW50ZXJuYWxPcmRlciA9PSBRQ2hhcjo6bmV0
d29ya09yZGVyZWQoKTsgfQoKICAgIGludCBmZmxhZ3M7CiAgICBpbnQgZndpZHRoOwogICAgaW50
IGZpbGxjaGFyOwogICAgaW50IGZwcmVjOwogICAgYm9vbCBmc3RybTsKICAgIGJvb2wgb3duZGV2
OwogICAgUVRleHRDb2RlYyAqbWFwcGVyOwogICAgUVRleHRTdHJlYW1Qcml2YXRlICogZDsKICAg
IFFDaGFyIHVuZ2V0Y0J1ZjsKICAgIGJvb2wgbGF0aW4xOwogICAgYm9vbCBpbnRlcm5hbE9yZGVy
OwogICAgYm9vbCBkb1VuaWNvZGVIZWFkZXI7CiAgICB2b2lkICpyZXNlcnZlZF9wdHI7CgogICAg
UUNoYXIgZWF0X3dzKCk7CiAgICB2b2lkIHRzX3VuZ2V0YyggUUNoYXIgKTsKICAgIFFDaGFyIHRz
X2dldGMoKTsKICAgIHVpbnQgdHNfZ2V0YnVmKCBRQ2hhciosIHVpbnQgKTsKICAgIHZvaWQgdHNf
cHV0YyhpbnQpOwogICAgdm9pZCB0c19wdXRjKFFDaGFyKTsKICAgIGJvb2wgdHNfaXNzcGFjZShR
Q2hhcik7CiAgICBib29sIHRzX2lzZGlnaXQoUUNoYXIpOwogICAgdWxvbmcgaW5wdXRfYmluKCk7
CiAgICB1bG9uZyBpbnB1dF9vY3QoKTsKICAgIHVsb25nIGlucHV0X2RlYygpOwogICAgdWxvbmcg
aW5wdXRfaGV4KCk7CiAgICBkb3VibGUgaW5wdXRfZG91YmxlKCk7CiAgICBRVGV4dFN0cmVhbSAm
d3JpdGVCbG9jayggY29uc3QgY2hhciogcCwgdWludCBsZW4gKTsKICAgIFFUZXh0U3RyZWFtICZ3
cml0ZUJsb2NrKCBjb25zdCBRQ2hhciogcCwgdWludCBsZW4gKTsKCnByaXZhdGU6CgogICAgUVRl
eHRTdHJlYW0oIGNvbnN0IFFUZXh0U3RyZWFtICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRv
cj0oIGNvbnN0IFFUZXh0U3RyZWFtICYgKTsKCn07Cgp0eXBlZGVmIFFUZXh0U3RyZWFtIFFUUzsK
CmNsYXNzIFFUZXh0SVN0cmVhbSA6IHB1YmxpYyBRVGV4dFN0cmVhbSB7CnB1YmxpYzoKICAgIFFU
ZXh0SVN0cmVhbSggUVN0cmluZyogcyApIDoKICAgICAgICBRVGV4dFN0cmVhbShzLDB4MDAwMSkg
eyB9CiAgICBRVGV4dElTdHJlYW0oIFFCeXRlQXJyYXkgYmEgKSA6CiAgICAgICAgUVRleHRTdHJl
YW0oYmEsMHgwMDAxKSB7IH0KICAgIFFUZXh0SVN0cmVhbSggRklMRSAqZiApIDoKICAgICAgICBR
VGV4dFN0cmVhbShmLDB4MDAwMSkgeyB9Cn07CgpjbGFzcyBRVGV4dE9TdHJlYW0gOiBwdWJsaWMg
UVRleHRTdHJlYW0gewpwdWJsaWM6CiAgICBRVGV4dE9TdHJlYW0oIFFTdHJpbmcqIHMgKSA6CiAg
ICAgICAgUVRleHRTdHJlYW0ocywweDAwMDIpIHsgfQogICAgUVRleHRPU3RyZWFtKCBRQnl0ZUFy
cmF5IGJhICkgOgogICAgICAgIFFUZXh0U3RyZWFtKGJhLDB4MDAwMikgeyB9CiAgICBRVGV4dE9T
dHJlYW0oIEZJTEUgKmYgKSA6CiAgICAgICAgUVRleHRTdHJlYW0oZiwweDAwMDIpIHsgfQp9OwoK
CgoKCmlubGluZSBRSU9EZXZpY2UgKlFUZXh0U3RyZWFtOjpkZXZpY2UoKSBjb25zdAp7IHJldHVy
biBkZXY7IH0KCmlubGluZSBib29sIFFUZXh0U3RyZWFtOjphdEVuZCgpIGNvbnN0CnsgcmV0dXJu
IGRldiA/IGRldi0+YXRFbmQoKSA6IEZBTFNFOyB9CgppbmxpbmUgYm9vbCBRVGV4dFN0cmVhbTo6
ZW9mKCkgY29uc3QKeyByZXR1cm4gYXRFbmQoKTsgfQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6
ZmxhZ3MoKSBjb25zdAp7IHJldHVybiBmZmxhZ3M7IH0KCmlubGluZSBpbnQgUVRleHRTdHJlYW06
OmZsYWdzKCBpbnQgZiApCnsgaW50IG9sZGYgPSBmZmxhZ3M7IGZmbGFncyA9IGY7IHJldHVybiBv
bGRmOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjpzZXRmKCBpbnQgYml0cyApCnsgaW50IG9s
ZGYgPSBmZmxhZ3M7IGZmbGFncyB8PSBiaXRzOyByZXR1cm4gb2xkZjsgfQoKaW5saW5lIGludCBR
VGV4dFN0cmVhbTo6c2V0ZiggaW50IGJpdHMsIGludCBtYXNrICkKeyBpbnQgb2xkZiA9IGZmbGFn
czsgZmZsYWdzID0gKGZmbGFncyAmIH5tYXNrKSB8IChiaXRzICYgbWFzayk7IHJldHVybiBvbGRm
OyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjp1bnNldGYoIGludCBiaXRzICkKeyBpbnQgb2xk
ZiA9IGZmbGFnczsgZmZsYWdzICY9IH5iaXRzOyByZXR1cm4gb2xkZjsgfQoKaW5saW5lIGludCBR
VGV4dFN0cmVhbTo6d2lkdGgoKSBjb25zdAp7IHJldHVybiBmd2lkdGg7IH0KCmlubGluZSBpbnQg
UVRleHRTdHJlYW06OndpZHRoKCBpbnQgdyApCnsgaW50IG9sZHcgPSBmd2lkdGg7IGZ3aWR0aCA9
IHc7IHJldHVybiBvbGR3OyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjpmaWxsKCkgY29uc3QK
eyByZXR1cm4gZmlsbGNoYXI7IH0KCmlubGluZSBpbnQgUVRleHRTdHJlYW06OmZpbGwoIGludCBm
ICkKeyBpbnQgb2xkYyA9IGZpbGxjaGFyOyBmaWxsY2hhciA9IGY7IHJldHVybiBvbGRjOyB9Cgpp
bmxpbmUgaW50IFFUZXh0U3RyZWFtOjpwcmVjaXNpb24oKSBjb25zdAp7IHJldHVybiBmcHJlYzsg
fQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6cHJlY2lzaW9uKCBpbnQgcCApCnsgaW50IG9sZHAg
PSBmcHJlYzsgZnByZWMgPSBwOyByZXR1cm4gb2xkcDsgfQoKCgoKaW5saW5lIFFDaGFyIFFUZXh0
U3RyZWFtOjp0c19nZXRjKCkKeyBRQ2hhciByOyByZXR1cm4gKCB0c19nZXRidWYoICZyLDEgKSA9
PSAxID8gciA6IFFDaGFyKCh1c2hvcnQpMHhmZmZmKSApOyB9CgoKCgoKdHlwZWRlZiBRVGV4dFN0
cmVhbSAmICgqUVRTRlVOQykoUVRleHRTdHJlYW0gJik7CnR5cGVkZWYgaW50IChRVGV4dFN0cmVh
bTo6KlFUU01GSSkoaW50KTsKCmNsYXNzIFFUU01hbmlwIHsKcHVibGljOgogICAgUVRTTWFuaXAo
IFFUU01GSSBtLCBpbnQgYSApIHsgbWY9bTsgYXJnPWE7IH0KICAgIHZvaWQgZXhlYyggUVRleHRT
dHJlYW0gJnMgKSB7IChzLiptZikoYXJnKTsgfQpwcml2YXRlOgogICAgUVRTTUZJIG1mOwogICAg
aW50IGFyZzsKfTsKCiAgICAgICAgIGlubGluZSBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggUVRl
eHRTdHJlYW0gJnMsIFFUU0ZVTkMgZiApCnsgcmV0dXJuICgqZikoIHMgKTsgfQoKICAgICAgICAg
aW5saW5lIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBRVGV4dFN0cmVhbSAmcywgUVRTRlVOQyBm
ICkKeyByZXR1cm4gKCpmKSggcyApOyB9CgogICAgICAgICBpbmxpbmUgUVRleHRTdHJlYW0gJm9w
ZXJhdG9yPDwoIFFUZXh0U3RyZWFtICZzLCBRVFNNYW5pcCBtICkKeyBtLmV4ZWMocyk7IHJldHVy
biBzOyB9CgogICAgICAgICBRVGV4dFN0cmVhbSAmYmluKCBRVGV4dFN0cmVhbSAmcyApOwogICAg
ICAgICBRVGV4dFN0cmVhbSAmb2N0KCBRVGV4dFN0cmVhbSAmcyApOwogICAgICAgICBRVGV4dFN0
cmVhbSAmZGVjKCBRVGV4dFN0cmVhbSAmcyApOwogICAgICAgICBRVGV4dFN0cmVhbSAmaGV4KCBR
VGV4dFN0cmVhbSAmcyApOwogICAgICAgICBRVGV4dFN0cmVhbSAmZW5kbCggUVRleHRTdHJlYW0g
JnMgKTsKICAgICAgICAgUVRleHRTdHJlYW0gJmZsdXNoKCBRVGV4dFN0cmVhbSAmcyApOwogICAg
ICAgICBRVGV4dFN0cmVhbSAmd3MoIFFUZXh0U3RyZWFtICZzICk7CiAgICAgICAgIFFUZXh0U3Ry
ZWFtICZyZXNldCggUVRleHRTdHJlYW0gJnMgKTsKCiAgICAgICAgIGlubGluZSBRVFNNYW5pcCBx
U2V0VyggaW50IHcgKQp7CiAgICBRVFNNRkkgZnVuYyA9ICZRVGV4dFN0cmVhbTo6d2lkdGg7CiAg
ICByZXR1cm4gUVRTTWFuaXAoZnVuYyx3KTsKfQoKICAgICAgICAgaW5saW5lIFFUU01hbmlwIHFT
ZXRGaWxsKCBpbnQgZiApCnsKICAgIFFUU01GSSBmdW5jID0gJlFUZXh0U3RyZWFtOjpmaWxsOwog
ICAgcmV0dXJuIFFUU01hbmlwKGZ1bmMsZik7Cn0KCiAgICAgICAgIGlubGluZSBRVFNNYW5pcCBx
U2V0UHJlY2lzaW9uKCBpbnQgcCApCnsKICAgIFFUU01GSSBmdW5jID0gJlFUZXh0U3RyZWFtOjpw
cmVjaXNpb247CiAgICByZXR1cm4gUVRTTWFuaXAoZnVuYyxwKTsKfQojIDMzMSAiL3Vzci9saWIv
cXQtMi4zLjEvaW5jbHVkZS9xdGV4dHN0cmVhbS5oIgogICAgICAgICBpbmxpbmUgUVRTTWFuaXAg
c2V0dyggaW50IHcgKQp7CiAgICBRVFNNRkkgZnVuYyA9ICZRVGV4dFN0cmVhbTo6d2lkdGg7CiAg
ICByZXR1cm4gUVRTTWFuaXAoZnVuYyx3KTsKfQoKICAgICAgICAgaW5saW5lIFFUU01hbmlwIHNl
dGZpbGwoIGludCBmICkKewogICAgUVRTTUZJIGZ1bmMgPSAmUVRleHRTdHJlYW06OmZpbGw7CiAg
ICByZXR1cm4gUVRTTWFuaXAoZnVuYyxmKTsKfQoKICAgICAgICAgaW5saW5lIFFUU01hbmlwIHNl
dHByZWNpc2lvbiggaW50IHAgKQp7CiAgICBRVFNNRkkgZnVuYyA9ICZRVGV4dFN0cmVhbTo6cHJl
Y2lzaW9uOwogICAgcmV0dXJuIFFUU01hbmlwKGZ1bmMscCk7Cn0KIyAzNSAia2NvbmZpZ2JhY2tl
bmQuY3BwIiAyCgojIDEgImtjb25maWdiYWNrZW5kLmgiIDEKIyAyNSAia2NvbmZpZ2JhY2tlbmQu
aCIKIyAxICJrY29uZmlnZGF0YS5oIiAxCiMgMjUgImtjb25maWdkYXRhLmgiCiMgMSAiL3Vzci9s
aWIvcXQtMi4zLjEvaW5jbHVkZS9xbWFwLmgiIDEKIyA0MiAiL3Vzci9saWIvcXQtMi4zLjEvaW5j
bHVkZS9xbWFwLmgiCiMgMSAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xc2hhcmVkLmgiIDEK
IyA0MyAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xbWFwLmgiIDIKIyAxICIvdXNyL2xpYi9x
dC0yLjMuMS9pbmNsdWRlL3FkYXRhc3RyZWFtLmgiIDEKIyA0NCAiL3Vzci9saWIvcXQtMi4zLjEv
aW5jbHVkZS9xbWFwLmgiIDIKCgoKc3RydWN0IFFNYXBOb2RlQmFzZQp7CiAgICBlbnVtIENvbG9y
IHsgUmVkLCBCbGFjayB9OwoKICAgIFFNYXBOb2RlQmFzZSogbGVmdDsKICAgIFFNYXBOb2RlQmFz
ZSogcmlnaHQ7CiAgICBRTWFwTm9kZUJhc2UqIHBhcmVudDsKCiAgICBDb2xvciBjb2xvcjsKCiAg
ICBRTWFwTm9kZUJhc2UqIG1pbmltdW0oKSB7CiAgICAgICAgUU1hcE5vZGVCYXNlKiB4ID0gdGhp
czsKICAgICAgICB3aGlsZSAoIHgtPmxlZnQgKQogICAgICAgICAgICB4ID0geC0+bGVmdDsKICAg
ICAgICByZXR1cm4geDsKICAgIH0KCiAgICBRTWFwTm9kZUJhc2UqIG1heGltdW0oKSB7CiAgICAg
ICAgUU1hcE5vZGVCYXNlKiB4ID0gdGhpczsKICAgICAgICB3aGlsZSAoIHgtPnJpZ2h0ICkKICAg
ICAgICAgICAgeCA9IHgtPnJpZ2h0OwogICAgICAgIHJldHVybiB4OwogICAgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBLLCBjbGFzcyBUPgpzdHJ1Y3QgUU1hcE5vZGUgOiBwdWJsaWMgUU1hcE5vZGVC
YXNlCnsKICAgIFFNYXBOb2RlKCBjb25zdCBLJiBfa2V5LCBjb25zdCBUJiBfZGF0YSApIHsgZGF0
YSA9IF9kYXRhOyBrZXkgPSBfa2V5OyB9CiAgICBRTWFwTm9kZSggY29uc3QgSyYgX2tleSApIHsg
a2V5ID0gX2tleTsgfQogICAgUU1hcE5vZGUoIGNvbnN0IFFNYXBOb2RlPEssVD4mIF9uICkgeyBr
ZXkgPSBfbi5rZXk7IGRhdGEgPSBfbi5kYXRhOyB9CiAgICBRTWFwTm9kZSgpIHsgfQogICAgVCBk
YXRhOwogICAgSyBrZXk7Cn07CgoKdGVtcGxhdGU8Y2xhc3MgSywgY2xhc3MgVD4KY2xhc3MgUU1h
cEl0ZXJhdG9yCnsKIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgUU1hcE5vZGU8IEssIFQgPiogTm9k
ZVB0cjsKCgoKCiAgICBRTWFwTm9kZTxLLFQ+KiBub2RlOwoKCgoKICAgIFFNYXBJdGVyYXRvcigp
IDogbm9kZSggMCApIHt9CiAgICBRTWFwSXRlcmF0b3IoIFFNYXBOb2RlPEssVD4qIHAgKSA6IG5v
ZGUoIHAgKSB7fQogICAgUU1hcEl0ZXJhdG9yKCBjb25zdCBRTWFwSXRlcmF0b3I8SyxUPiYgaXQg
KSA6IG5vZGUoIGl0Lm5vZGUgKSB7fQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUU1hcEl0
ZXJhdG9yPEssVD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9kZSA9PSBpdC5ub2RlOyB9CiAgICBi
b29sIG9wZXJhdG9yIT0oIGNvbnN0IFFNYXBJdGVyYXRvcjxLLFQ+JiBpdCApIGNvbnN0IHsgcmV0
dXJuIG5vZGUgIT0gaXQubm9kZTsgfQogICAgVCYgb3BlcmF0b3IqKCkgeyByZXR1cm4gbm9kZS0+
ZGF0YTsgfQogICAgY29uc3QgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbm9kZS0+ZGF0
YTsgfQoKCgoKICAgIGNvbnN0IEsmIGtleSgpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmtleTsgfQog
ICAgVCYgZGF0YSgpIHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KICAgIGNvbnN0IFQmIGRhdGEoKSBj
b25zdCB7IHJldHVybiBub2RlLT5kYXRhOyB9Cgpwcml2YXRlOgogICAgaW50IGluYygpIHsKICAg
ICAgICBRTWFwTm9kZUJhc2UqIHRtcCA9IG5vZGU7CiAgICAgICAgaWYgKCB0bXAtPnJpZ2h0ICkg
ewogICAgICAgICAgICB0bXAgPSB0bXAtPnJpZ2h0OwogICAgICAgICAgICB3aGlsZSAoIHRtcC0+
bGVmdCApCiAgICAgICAgICAgICAgICB0bXAgPSB0bXAtPmxlZnQ7CiAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgUU1hcE5vZGVCYXNlKiB5ID0gdG1wLT5wYXJlbnQ7CiAgICAgICAgICAgIHdo
aWxlICh0bXAgPT0geS0+cmlnaHQpIHsKICAgICAgICAgICAgICAgIHRtcCA9IHk7CiAgICAgICAg
ICAgICAgICB5ID0geS0+cGFyZW50OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0bXAt
PnJpZ2h0ICE9IHkpCiAgICAgICAgICAgICAgICB0bXAgPSB5OwogICAgICAgIH0KICAgICAgICBu
b2RlID0gKE5vZGVQdHIpdG1wOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGludCBkZWMo
KSB7CiAgICAgICAgUU1hcE5vZGVCYXNlKiB0bXAgPSBub2RlOwogICAgICAgIGlmICh0bXAtPmNv
bG9yID09IFFNYXBOb2RlQmFzZTo6UmVkICYmCiAgICAgICAgICAgIHRtcC0+cGFyZW50LT5wYXJl
bnQgPT0gdG1wICkgewogICAgICAgICAgICB0bXAgPSB0bXAtPnJpZ2h0OwogICAgICAgIH0gZWxz
ZSBpZiAodG1wLT5sZWZ0ICE9IDApIHsKICAgICAgICAgICAgUU1hcE5vZGVCYXNlKiB5ID0gdG1w
LT5sZWZ0OwogICAgICAgICAgICB3aGlsZSAoIHktPnJpZ2h0ICkKICAgICAgICAgICAgICAgIHkg
PSB5LT5yaWdodDsKICAgICAgICAgICAgdG1wID0geTsKICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICBRTWFwTm9kZUJhc2UqIHkgPSB0bXAtPnBhcmVudDsKICAgICAgICAgICAgd2hpbGUgKHRt
cCA9PSB5LT5sZWZ0KSB7CiAgICAgICAgICAgICAgICB0bXAgPSB5OwogICAgICAgICAgICAgICAg
eSA9IHktPnBhcmVudDsKICAgICAgICAgICAgfQogICAgICAgICAgICB0bXAgPSB5OwogICAgICAg
IH0KICAgICAgICBub2RlID0gKE5vZGVQdHIpdG1wOwogICAgICAgIHJldHVybiAwOwogICAgfQoK
cHVibGljOgogICAgUU1hcEl0ZXJhdG9yPEssVD4mIG9wZXJhdG9yKysoKSB7CiAgICAgICAgaW5j
KCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFNYXBJdGVyYXRvcjxLLFQ+IG9w
ZXJhdG9yKysoaW50KSB7CiAgICAgICAgUU1hcEl0ZXJhdG9yPEssVD4gdG1wID0gKnRoaXM7CiAg
ICAgICAgaW5jKCk7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgIH0KCiAgICBRTWFwSXRlcmF0b3I8
SyxUPiYgb3BlcmF0b3ItLSgpIHsKICAgICAgICBkZWMoKTsKICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogICAgUU1hcEl0ZXJhdG9yPEssVD4gb3BlcmF0b3ItLShpbnQpIHsKICAgICAgICBR
TWFwSXRlcmF0b3I8SyxUPiB0bXAgPSAqdGhpczsKICAgICAgICBkZWMoKTsKICAgICAgICByZXR1
cm4gdG1wOwogICAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgSywgY2xhc3MgVD4KY2xhc3MgUU1hcENv
bnN0SXRlcmF0b3IKewogcHVibGljOgoKCgogICAgdHlwZWRlZiBRTWFwTm9kZTwgSywgVCA+KiBO
b2RlUHRyOwoKCgoKICAgIFFNYXBOb2RlPEssVD4qIG5vZGU7CgoKCgogICAgUU1hcENvbnN0SXRl
cmF0b3IoKSA6IG5vZGUoIDAgKSB7fQogICAgUU1hcENvbnN0SXRlcmF0b3IoIFFNYXBOb2RlPEss
VD4qIHAgKSA6IG5vZGUoIHAgKSB7fQogICAgUU1hcENvbnN0SXRlcmF0b3IoIGNvbnN0IFFNYXBD
b25zdEl0ZXJhdG9yPEssVD4mIGl0ICkgOiBub2RlKCBpdC5ub2RlICkge30KICAgIFFNYXBDb25z
dEl0ZXJhdG9yKCBjb25zdCBRTWFwSXRlcmF0b3I8SyxUPiYgaXQgKSA6IG5vZGUoIGl0Lm5vZGUg
KSB7fQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUU1hcENvbnN0SXRlcmF0b3I8SyxUPiYg
aXQgKSBjb25zdCB7IHJldHVybiBub2RlID09IGl0Lm5vZGU7IH0KICAgIGJvb2wgb3BlcmF0b3Ih
PSggY29uc3QgUU1hcENvbnN0SXRlcmF0b3I8SyxUPiYgaXQgKSBjb25zdCB7IHJldHVybiBub2Rl
ICE9IGl0Lm5vZGU7IH0KICAgIGNvbnN0IFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG5v
ZGUtPmRhdGE7IH0KCgoKCiAgICBjb25zdCBLJiBrZXkoKSBjb25zdCB7IHJldHVybiBub2RlLT5r
ZXk7IH0KICAgIGNvbnN0IFQmIGRhdGEoKSBjb25zdCB7IHJldHVybiBub2RlLT5kYXRhOyB9Cgpw
cml2YXRlOgogICAgaW50IGluYygpIHsKICAgICAgICBRTWFwTm9kZUJhc2UqIHRtcCA9IG5vZGU7
CiAgICAgICAgaWYgKCB0bXAtPnJpZ2h0ICkgewogICAgICAgICAgICB0bXAgPSB0bXAtPnJpZ2h0
OwogICAgICAgICAgICB3aGlsZSAoIHRtcC0+bGVmdCApCiAgICAgICAgICAgICAgICB0bXAgPSB0
bXAtPmxlZnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgUU1hcE5vZGVCYXNlKiB5ID0g
dG1wLT5wYXJlbnQ7CiAgICAgICAgICAgIHdoaWxlICh0bXAgPT0geS0+cmlnaHQpIHsKICAgICAg
ICAgICAgICAgIHRtcCA9IHk7CiAgICAgICAgICAgICAgICB5ID0geS0+cGFyZW50OwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGlmICh0bXAtPnJpZ2h0ICE9IHkpCiAgICAgICAgICAgICAgICB0
bXAgPSB5OwogICAgICAgIH0KICAgICAgICBub2RlID0gKE5vZGVQdHIpdG1wOwogICAgICAgIHJl
dHVybiAwOwogICAgfQoKICAgIGludCBkZWMoKSB7CiAgICAgICAgUU1hcE5vZGVCYXNlKiB0bXAg
PSBub2RlOwogICAgICAgIGlmICh0bXAtPmNvbG9yID09IFFNYXBOb2RlQmFzZTo6UmVkICYmCiAg
ICAgICAgICAgIHRtcC0+cGFyZW50LT5wYXJlbnQgPT0gdG1wICkgewogICAgICAgICAgICB0bXAg
PSB0bXAtPnJpZ2h0OwogICAgICAgIH0gZWxzZSBpZiAodG1wLT5sZWZ0ICE9IDApIHsKICAgICAg
ICAgICAgUU1hcE5vZGVCYXNlKiB5ID0gdG1wLT5sZWZ0OwogICAgICAgICAgICB3aGlsZSAoIHkt
PnJpZ2h0ICkKICAgICAgICAgICAgICAgIHkgPSB5LT5yaWdodDsKICAgICAgICAgICAgdG1wID0g
eTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBRTWFwTm9kZUJhc2UqIHkgPSB0bXAtPnBh
cmVudDsKICAgICAgICAgICAgd2hpbGUgKHRtcCA9PSB5LT5sZWZ0KSB7CiAgICAgICAgICAgICAg
ICB0bXAgPSB5OwogICAgICAgICAgICAgICAgeSA9IHktPnBhcmVudDsKICAgICAgICAgICAgfQog
ICAgICAgICAgICB0bXAgPSB5OwogICAgICAgIH0KICAgICAgICBub2RlID0gKE5vZGVQdHIpdG1w
OwogICAgICAgIHJldHVybiAwOwogICAgfQoKcHVibGljOgogICAgUU1hcENvbnN0SXRlcmF0b3I8
SyxUPiYgb3BlcmF0b3IrKygpIHsKICAgICAgICBpbmMoKTsKICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogICAgUU1hcENvbnN0SXRlcmF0b3I8SyxUPiBvcGVyYXRvcisrKGludCkgewogICAg
ICAgIFFNYXBDb25zdEl0ZXJhdG9yPEssVD4gdG1wID0gKnRoaXM7CiAgICAgICAgaW5jKCk7CiAg
ICAgICAgcmV0dXJuIHRtcDsKICAgIH0KCiAgICBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+JiBvcGVy
YXRvci0tKCkgewogICAgICAgIGRlYygpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
ICBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+IG9wZXJhdG9yLS0oaW50KSB7CiAgICAgICAgUU1hcENv
bnN0SXRlcmF0b3I8SyxUPiB0bXAgPSAqdGhpczsKICAgICAgICBkZWMoKTsKICAgICAgICByZXR1
cm4gdG1wOwogICAgfQp9OwoKCmNsYXNzIFFNYXBQcml2YXRlQmFzZSA6IHB1YmxpYyBRU2hhcmVk
CnsKcHVibGljOgogICAgUU1hcFByaXZhdGVCYXNlKCkgewogICAgICAgIG5vZGVfY291bnQgPSAw
OwogICAgfQogICAgUU1hcFByaXZhdGVCYXNlKCBjb25zdCBRTWFwUHJpdmF0ZUJhc2UqIF9tYXAp
IHsKICAgICAgICBub2RlX2NvdW50ID0gX21hcC0+bm9kZV9jb3VudDsKICAgIH0KCgoKCiAgICB2
b2lkIHJvdGF0ZUxlZnQoIFFNYXBOb2RlQmFzZSogeCwgUU1hcE5vZGVCYXNlKiYgcm9vdCk7CiAg
ICB2b2lkIHJvdGF0ZVJpZ2h0KCBRTWFwTm9kZUJhc2UqIHgsIFFNYXBOb2RlQmFzZSomIHJvb3Qg
KTsKICAgIHZvaWQgcmViYWxhbmNlKCBRTWFwTm9kZUJhc2UqIHgsIFFNYXBOb2RlQmFzZSomIHJv
b3QgKTsKICAgIFFNYXBOb2RlQmFzZSogcmVtb3ZlQW5kUmViYWxhbmNlKCBRTWFwTm9kZUJhc2Uq
IHosIFFNYXBOb2RlQmFzZSomIHJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUU1hcE5vZGVCYXNlKiYgbGVmdG1vc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUU1hcE5vZGVCYXNlKiYgcmlnaHRtb3N0ICk7CgoKCgogICAgaW50IG5vZGVf
Y291bnQ7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KY2xhc3MgUU1hcFByaXZh
dGUgOiBwdWJsaWMgUU1hcFByaXZhdGVCYXNlCnsKcHVibGljOgoKCgogICAgdHlwZWRlZiBRTWFw
SXRlcmF0b3I8IEtleSwgVCA+IEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRTWFwQ29uc3RJdGVyYXRv
cjwgS2V5LCBUID4gQ29uc3RJdGVyYXRvcjsKICAgIHR5cGVkZWYgUU1hcE5vZGU8IEtleSwgVCA+
IE5vZGU7CiAgICB0eXBlZGVmIFFNYXBOb2RlPCBLZXksIFQgPiogTm9kZVB0cjsKCgoKCiAgICBR
TWFwUHJpdmF0ZSgpIHsKICAgICAgICBoZWFkZXIgPSBuZXcgTm9kZTsKICAgICAgICBoZWFkZXIt
PmNvbG9yID0gUU1hcE5vZGVCYXNlOjpSZWQ7CiAgICAgICAgaGVhZGVyLT5wYXJlbnQgPSAwOwog
ICAgICAgIGhlYWRlci0+bGVmdCA9IGhlYWRlci0+cmlnaHQgPSBoZWFkZXI7CiAgICB9CiAgICBR
TWFwUHJpdmF0ZSggY29uc3QgUU1hcFByaXZhdGU8IEtleSwgVCA+KiBfbWFwICkgOiBRTWFwUHJp
dmF0ZUJhc2UoIF9tYXAgKSB7CiAgICAgICAgaGVhZGVyID0gbmV3IE5vZGU7CiAgICAgICAgaGVh
ZGVyLT5jb2xvciA9IFFNYXBOb2RlQmFzZTo6UmVkOwogICAgICAgIGlmICggX21hcC0+aGVhZGVy
LT5wYXJlbnQgPT0gMCApIHsKICAgICAgICAgICAgaGVhZGVyLT5wYXJlbnQgPSAwOwogICAgICAg
ICAgICBoZWFkZXItPmxlZnQgPSBoZWFkZXItPnJpZ2h0ID0gaGVhZGVyOwogICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgIGhlYWRlci0+cGFyZW50ID0gY29weSggKE5vZGVQdHIpKF9tYXAtPmhl
YWRlci0+cGFyZW50KSApOwogICAgICAgICAgICBoZWFkZXItPnBhcmVudC0+cGFyZW50ID0gaGVh
ZGVyOwogICAgICAgICAgICBoZWFkZXItPmxlZnQgPSBoZWFkZXItPnBhcmVudC0+bWluaW11bSgp
OwogICAgICAgICAgICBoZWFkZXItPnJpZ2h0ID0gaGVhZGVyLT5wYXJlbnQtPm1heGltdW0oKTsK
ICAgICAgICB9CiAgICB9CiAgICB+UU1hcFByaXZhdGUoKSB7IGNsZWFyKCk7IGRlbGV0ZSBoZWFk
ZXI7IH0KCiAgICBOb2RlUHRyIGNvcHkoIE5vZGVQdHIgcCApIHsKICAgICAgICBpZiAoICFwICkK
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgTm9kZVB0ciBuID0gbmV3IE5vZGUoICpwICk7
CiAgICAgICAgbi0+Y29sb3IgPSBwLT5jb2xvcjsKICAgICAgICBpZiAoIHAtPmxlZnQgKSB7CiAg
ICAgICAgICAgIG4tPmxlZnQgPSBjb3B5KCAoTm9kZVB0cikocC0+bGVmdCkgKTsKICAgICAgICAg
ICAgbi0+bGVmdC0+cGFyZW50ID0gbjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBuLT5s
ZWZ0ID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKCBwLT5yaWdodCApIHsKICAgICAgICAgICAg
bi0+cmlnaHQgPSBjb3B5KCAoTm9kZVB0cikocC0+cmlnaHQpICk7CiAgICAgICAgICAgIG4tPnJp
Z2h0LT5wYXJlbnQgPSBuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG4tPnJpZ2h0ID0g
MDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG47CiAgICB9CgogICAgdm9pZCBjbGVhcigpIHsK
ICAgICAgICBjbGVhciggKE5vZGVQdHIpKGhlYWRlci0+cGFyZW50KSApOwogICAgICAgIGhlYWRl
ci0+Y29sb3IgPSBRTWFwTm9kZUJhc2U6OlJlZDsKICAgICAgICBoZWFkZXItPnBhcmVudCA9IDA7
CiAgICAgICAgaGVhZGVyLT5sZWZ0ID0gaGVhZGVyLT5yaWdodCA9IGhlYWRlcjsKICAgICAgICBu
b2RlX2NvdW50ID0gMDsKICAgIH0KCiAgICB2b2lkIGNsZWFyKCBOb2RlUHRyIHAgKSB7CiAgICAg
ICAgd2hpbGUgKCBwICE9IDAgKSB7CiAgICAgICAgICAgIGNsZWFyKCAoTm9kZVB0cilwLT5yaWdo
dCApOwogICAgICAgICAgICBOb2RlUHRyIHkgPSAoTm9kZVB0cilwLT5sZWZ0OwogICAgICAgICAg
ICBkZWxldGUgcDsKICAgICAgICAgICAgcCA9IHk7CiAgICAgICAgfQogICAgfQoKICAgIEl0ZXJh
dG9yIGJlZ2luKCkgeyByZXR1cm4gSXRlcmF0b3IoIChOb2RlUHRyKShoZWFkZXItPmxlZnQgKSAp
OyB9CiAgICBJdGVyYXRvciBlbmQoKSB7IHJldHVybiBJdGVyYXRvciggaGVhZGVyICk7IH0KICAg
IENvbnN0SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9yKCAoTm9k
ZVB0cikoaGVhZGVyLT5sZWZ0ICkgKTsgfQogICAgQ29uc3RJdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBDb25zdEl0ZXJhdG9yKCBoZWFkZXIgKTsgfQoKICAgIENvbnN0SXRlcmF0b3IgZmlu
ZChjb25zdCBLZXkmIGspIGNvbnN0IHsKICAgICAgICBRTWFwTm9kZUJhc2UqIHkgPSBoZWFkZXI7
CiAgICAgICAgUU1hcE5vZGVCYXNlKiB4ID0gaGVhZGVyLT5wYXJlbnQ7CgogICAgICAgIHdoaWxl
ICggeCAhPSAwICkgewoKICAgICAgICAgICAgaWYgKCAhKCBrZXkoeCkgPCBrICkgKSB7CiAgICAg
ICAgICAgICAgICB5ID0geDsKICAgICAgICAgICAgICAgIHggPSB4LT5sZWZ0OwogICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgeCA9IHgtPnJpZ2h0OwogICAgICAgICAgICB9CiAg
ICAgICAgfQoKCgogICAgICAgIGlmICggeSA9PSBoZWFkZXIgfHwgayA8IGtleSh5KSApCiAgICAg
ICAgICAgIHJldHVybiBDb25zdEl0ZXJhdG9yKCBoZWFkZXIgKTsKICAgICAgICByZXR1cm4gQ29u
c3RJdGVyYXRvciggKE5vZGVQdHIpeSApOwogICAgfQoKICAgIHZvaWQgcmVtb3ZlKCBJdGVyYXRv
ciBpdCApIHsKICAgICAgICBOb2RlUHRyIGRlbCA9IChOb2RlUHRyKSByZW1vdmVBbmRSZWJhbGFu
Y2UoIGl0Lm5vZGUsIGhlYWRlci0+cGFyZW50LCBoZWFkZXItPmxlZnQsIGhlYWRlci0+cmlnaHQg
KTsKICAgICAgICBkZWxldGUgZGVsOwogICAgICAgIC0tbm9kZV9jb3VudDsKICAgIH0KIyA0Mjcg
Ii91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcW1hcC5oIgogICAgSXRlcmF0b3IgaW5zZXJ0TXVs
dGkoY29uc3QgS2V5JiB2KXsKICAgICAgICBRTWFwTm9kZUJhc2UqIHkgPSBoZWFkZXI7CiAgICAg
ICAgUU1hcE5vZGVCYXNlKiB4ID0gaGVhZGVyLT5wYXJlbnQ7CiAgICAgICAgd2hpbGUgKHggIT0g
MCl7CiAgICAgICAgICAgIHkgPSB4OwogICAgICAgICAgICB4ID0gKCB2IDwga2V5KHgpICkgPyB4
LT5sZWZ0IDogeC0+cmlnaHQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpbnNlcnQoeCwgeSwg
dik7CiAgICB9CgogICAgSXRlcmF0b3IgaW5zZXJ0U2luZ2xlKCBjb25zdCBLZXkmIGsgKSB7Cgog
ICAgICAgIFFNYXBOb2RlQmFzZSogeSA9IGhlYWRlcjsKICAgICAgICBRTWFwTm9kZUJhc2UqIHgg
PSBoZWFkZXItPnBhcmVudDsKICAgICAgICBib29sIHJlc3VsdCA9IFRSVUU7CiAgICAgICAgd2hp
bGUgKCB4ICE9IDAgKSB7CiAgICAgICAgICAgIHJlc3VsdCA9ICggayA8IGtleSh4KSApOwogICAg
ICAgICAgICB5ID0geDsKICAgICAgICAgICAgeCA9IHJlc3VsdCA/IHgtPmxlZnQgOiB4LT5yaWdo
dDsKICAgICAgICB9CgogICAgICAgIEl0ZXJhdG9yIGooIChOb2RlUHRyKXkgKTsKICAgICAgICBp
ZiAoIHJlc3VsdCApIHsKCiAgICAgICAgICAgIGlmICggaiA9PSBiZWdpbigpICkgewogICAgICAg
ICAgICAgICAgcmV0dXJuIGluc2VydCh4LCB5LCBrICk7CiAgICAgICAgICAgIH0gZWxzZSB7Cgog
ICAgICAgICAgICAgICAgLS1qOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAo
IChqLm5vZGUtPmtleSkgPCBrICkKICAgICAgICAgICAgcmV0dXJuIGluc2VydCh4LCB5LCBrICk7
CgogICAgICAgIHJldHVybiBqOwogICAgfQoKICAgIEl0ZXJhdG9yIGluc2VydCggUU1hcE5vZGVC
YXNlKiB4LCBRTWFwTm9kZUJhc2UqIHksIGNvbnN0IEtleSYgayApIHsKICAgICAgICBOb2RlUHRy
IHogPSBuZXcgTm9kZSggayApOwogICAgICAgIGlmICh5ID09IGhlYWRlciB8fCB4ICE9IDAgfHwg
ayA8IGtleSh5KSApIHsKICAgICAgICAgICAgeS0+bGVmdCA9IHo7CiAgICAgICAgICAgIGlmICgg
eSA9PSBoZWFkZXIgKSB7CiAgICAgICAgICAgICAgICBoZWFkZXItPnBhcmVudCA9IHo7CiAgICAg
ICAgICAgICAgICBoZWFkZXItPnJpZ2h0ID0gejsKICAgICAgICAgICAgfSBlbHNlIGlmICggeSA9
PSBoZWFkZXItPmxlZnQgKQogICAgICAgICAgICAgICAgaGVhZGVyLT5sZWZ0ID0gejsKICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICB5LT5yaWdodCA9IHo7CiAgICAgICAgICAgIGlmICggeSA9
PSBoZWFkZXItPnJpZ2h0ICkKICAgICAgICAgICAgICAgIGhlYWRlci0+cmlnaHQgPSB6OwogICAg
ICAgIH0KICAgICAgICB6LT5wYXJlbnQgPSB5OwogICAgICAgIHotPmxlZnQgPSAwOwogICAgICAg
IHotPnJpZ2h0ID0gMDsKICAgICAgICByZWJhbGFuY2UoIHosIGhlYWRlci0+cGFyZW50ICk7CiAg
ICAgICAgKytub2RlX2NvdW50OwogICAgICAgIHJldHVybiBJdGVyYXRvcih6KTsKICAgIH0KCnBy
b3RlY3RlZDoKCgoKICAgIGNvbnN0IEtleSYga2V5KCBRTWFwTm9kZUJhc2UqIGIgKSBjb25zdCB7
IHJldHVybiAoKE5vZGVQdHIpYiktPmtleTsgfQoKCgoKICAgIE5vZGVQdHIgaGVhZGVyOwp9OwoK
CnRlbXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KY2xhc3MgUU1hcAp7CnB1YmxpYzoKCgoKICAg
IHR5cGVkZWYgUU1hcEl0ZXJhdG9yPCBLZXksIFQgPiBJdGVyYXRvcjsKICAgIHR5cGVkZWYgUU1h
cENvbnN0SXRlcmF0b3I8IEtleSwgVCA+IENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVmIFQgVmFs
dWVUeXBlOwogICAgdHlwZWRlZiBRTWFwUHJpdmF0ZTwgS2V5LCBUID4gUHJpdjsKCgoKCiAgICBR
TWFwKCkgeyBzaCA9IG5ldyBRTWFwUHJpdmF0ZTwgS2V5LCBUID47IH0KICAgIFFNYXAoIGNvbnN0
IFFNYXA8S2V5LFQ+JiBtICkgeyBzaCA9IG0uc2g7IHNoLT5yZWYoKTsgfQogICAgflFNYXAoKSB7
IGlmICggc2gtPmRlcmVmKCkgKSBkZWxldGUgc2g7IH0KCiAgICBRTWFwPEtleSxUPiYgb3BlcmF0
b3I9ICggY29uc3QgUU1hcDxLZXksVD4mIG0gKQogICAgICB7IG0uc2gtPnJlZigpOyBpZiAoIHNo
LT5kZXJlZigpICkgZGVsZXRlIHNoOyBzaCA9IG0uc2g7IHJldHVybiAqdGhpczsgfQoKICAgIEl0
ZXJhdG9yIGJlZ2luKCkgeyBkZXRhY2goKTsgcmV0dXJuIHNoLT5iZWdpbigpOyB9CiAgICBJdGVy
YXRvciBlbmQoKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPmVuZCgpOyB9CiAgICBDb25zdEl0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gKChjb25zdCBQcml2KilzaCktPmJlZ2luKCk7IH0K
ICAgIENvbnN0SXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gKChjb25zdCBQcml2KilzaCkt
PmVuZCgpOyB9CgogICAgSXRlcmF0b3IgZmluZCAoIGNvbnN0IEtleSYgayApCiAgICAgICAgeyBk
ZXRhY2goKTsgcmV0dXJuIEl0ZXJhdG9yKCBzaC0+ZmluZCggayApLm5vZGUgKTsgfQogICAgQ29u
c3RJdGVyYXRvciBmaW5kICggY29uc3QgS2V5JiBrICkgY29uc3QKICAgICAgICB7IHJldHVybiBz
aC0+ZmluZCggayApOyB9CiAgICBUJiBvcGVyYXRvcltdICggY29uc3QgS2V5JiBrICkgewogICAg
ICAgIGRldGFjaCgpOyBRTWFwTm9kZTxLZXksVD4qIHAgPSBzaC0+ZmluZCggayApLm5vZGU7CiAg
ICAgICAgaWYgKCBwICE9IHNoLT5lbmQoKS5ub2RlICkgcmV0dXJuIHAtPmRhdGE7CiAgICAgICAg
cmV0dXJuIGluc2VydCggaywgVCgpICkuZGF0YSgpOyB9CiAgICBjb25zdCBUJiBvcGVyYXRvcltd
ICggY29uc3QgS2V5JiBrICkgY29uc3QKICAgICAgICB7IHJldHVybiBzaC0+ZmluZCggayApLmRh
dGEoKTsgfQogICAgYm9vbCBjb250YWlucyAoIGNvbnN0IEtleSYgayApIGNvbnN0CiAgICAgICAg
eyByZXR1cm4gZmluZCggayApICE9IGVuZCgpOyB9CgoKICAgIHVpbnQgY291bnQoKSBjb25zdCB7
IHJldHVybiBzaC0+bm9kZV9jb3VudDsgfQoKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIHNoLT5ub2RlX2NvdW50ID09IDA7IH0KCiAgICBJdGVyYXRvciBpbnNlcnQoIGNvbnN0IEtl
eSYga2V5LCBjb25zdCBUJiB2YWx1ZSApIHsKICAgICAgICBkZXRhY2goKTsKICAgICAgICBJdGVy
YXRvciBpdCA9IHNoLT5pbnNlcnRTaW5nbGUoIGtleSApOwogICAgICAgIGl0LmRhdGEoKSA9IHZh
bHVlOwogICAgICAgIHJldHVybiBpdDsKICAgIH0KCiAgICB2b2lkIHJlbW92ZSggSXRlcmF0b3Ig
aXQgKSB7IGRldGFjaCgpOyBzaC0+cmVtb3ZlKCBpdCApOyB9CiAgICB2b2lkIHJlbW92ZSggY29u
c3QgS2V5JiBrICkgewogICAgICAgIGRldGFjaCgpOwogICAgICAgIEl0ZXJhdG9yIGl0KCBzaC0+
ZmluZCggayApLm5vZGUgKTsKICAgICAgICBpZiAoIGl0ICE9IGVuZCgpICkKICAgICAgICAgICAg
c2gtPnJlbW92ZSggaXQgKTsKICAgIH0KCiAgICBJdGVyYXRvciByZXBsYWNlKCBjb25zdCBLZXkm
IGssIGNvbnN0IFQmIHYgKSB7CiAgICAgICAgcmVtb3ZlKCBrICk7CiAgICAgICAgcmV0dXJuIGlu
c2VydCggaywgdiApOwogICAgfQoKICAgIHZvaWQgY2xlYXIoKSB7IGlmICggc2gtPmNvdW50ID09
IDEgKSBzaC0+Y2xlYXIoKTsgZWxzZSB7IHNoLT5kZXJlZigpOyBzaCA9IG5ldyBRTWFwUHJpdmF0
ZTxLZXksVD47IH0gfQoKCgoKCnByb3RlY3RlZDoKCgoKICAgIHZvaWQgZGV0YWNoKCkgeyBpZiAo
IHNoLT5jb3VudCA+IDEgKSB7IHNoLT5kZXJlZigpOyBzaCA9IG5ldyBRTWFwUHJpdmF0ZTxLZXks
VD4oIHNoICk7IH0gfQoKICAgIFByaXYqIHNoOwp9OwoKCgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNs
YXNzIFQ+CmlubGluZSBRRGF0YVN0cmVhbSYgb3BlcmF0b3I+PiggUURhdGFTdHJlYW0mIHMsIFFN
YXA8S2V5LFQ+JiBtICkgewogICAgbS5jbGVhcigpOwogICAgUV9VSU5UMzIgYzsKICAgIHMgPj4g
YzsKICAgIGZvciggUV9VSU5UMzIgaSA9IDA7IGkgPCBjOyArK2kgKSB7CiAgICAgICAgS2V5IGs7
IFQgdDsKICAgICAgICBzID4+IGsgPj4gdDsKICAgICAgICBtLmluc2VydCggaywgdCApOwogICAg
fQogICAgcmV0dXJuIHM7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CmlubGluZSBR
RGF0YVN0cmVhbSYgb3BlcmF0b3I8PCggUURhdGFTdHJlYW0mIHMsIGNvbnN0IFFNYXA8S2V5LFQ+
JiBtICkgewogICAgcyA8PCAoUV9VSU5UMzIpbS5jb3VudCgpOwogICAgUU1hcENvbnN0SXRlcmF0
b3I8S2V5LFQ+IGl0ID0gbS5iZWdpbigpOwogICAgZm9yKCA7IGl0ICE9IG0uZW5kKCk7ICsraXQg
KQogICAgICAgIHMgPDwgaXQua2V5KCkgPDwgaXQuZGF0YSgpOwogICAgcmV0dXJuIHM7Cn0KIyAy
NiAia2NvbmZpZ2RhdGEuaCIgMgoKCgoKCnN0cnVjdCBLRW50cnkKewogIEtFbnRyeSgpCiAgICA6
IG1WYWx1ZSgwKSwgYkRpcnR5KGZhbHNlKSwgYk5MUyhmYWxzZSksIGJHbG9iYWwoZmFsc2UpIHt9
CiAgUUNTdHJpbmcgbVZhbHVlOwogIGJvb2wgYkRpcnR5IDoxOwogIGJvb2wgYk5MUyA6MTsKICBi
b29sIGJHbG9iYWw6MTsKfTsKCgoKCgoKc3RydWN0IEtFbnRyeUtleQp7CiAgS0VudHJ5S2V5KGNv
bnN0IFFDU3RyaW5nJiBfZ3JvdXAgPSAwLAogICAgICAgICAgICBjb25zdCBRQ1N0cmluZyYgX2tl
eSA9IDApCiAgICAgIDogbUdyb3VwKF9ncm91cCksIG1LZXkoX2tleSksIGJMb2NhbChmYWxzZSks
IGNfa2V5KF9rZXkuZGF0YSgpKSB7fQogIFFDU3RyaW5nIG1Hcm91cDsKICBRQ1N0cmluZyBtS2V5
OwogIGJvb2wgYkxvY2FsOwogIGNvbnN0IGNoYXIgKmNfa2V5Owp9OwoKCgoKCmlubGluZSBib29s
IG9wZXJhdG9yIDwoY29uc3QgS0VudHJ5S2V5ICZrMSwgY29uc3QgS0VudHJ5S2V5ICZrMikKewoK
ICAgaW50IHJlc3VsdD1xc3RyY21wKGsxLm1Hcm91cC5kYXRhKCksazIubUdyb3VwLmRhdGEoKSk7
CiAgIGlmIChyZXN1bHQhPTApCiAgICAgIHJldHVybiAocmVzdWx0PDApOwoKICBpZiAoIWsxLmNf
a2V5ICYmIGsyLmNfa2V5KQogICAgcmV0dXJuIHRydWU7CgogIHJlc3VsdCA9IDA7CiAgaWYgKGsx
LmNfa2V5ICYmIGsyLmNfa2V5KQogICAgIHJlc3VsdCA9IHFzdHJjbXAoazEuY19rZXksIGsyLmNf
a2V5KTsKICBpZiAocmVzdWx0ICE9IDApCiAgICAgcmV0dXJuIHJlc3VsdCA8IDA7CiAgcmV0dXJu
ICghazEuYkxvY2FsICYmIGsyLmJMb2NhbCk7Cn0KCgoKCgoKCnR5cGVkZWYgUU1hcDxLRW50cnlL
ZXksIEtFbnRyeT4gS0VudHJ5TWFwOwoKCgoKCnR5cGVkZWYgUU1hcDxLRW50cnlLZXksIEtFbnRy
eT46Okl0ZXJhdG9yIEtFbnRyeU1hcEl0ZXJhdG9yOwoKCgoKCgoKdHlwZWRlZiBRTWFwPEtFbnRy
eUtleSwgS0VudHJ5Pjo6Q29uc3RJdGVyYXRvciBLRW50cnlNYXBDb25zdEl0ZXJhdG9yOwojIDI2
ICJrY29uZmlnYmFja2VuZC5oIiAyCiMgMSAia2NvbmZpZ2Jhc2UuaCIgMQojIDI3ICJrY29uZmln
YmFzZS5oIgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcW9iamVjdC5oIiAxCiMgNDIg
Ii91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcW9iamVjdC5oIgojIDEgIi91c3IvbGliL3F0LTIu
My4xL2luY2x1ZGUvcW9iamVjdGRlZnMuaCIgMQojIDQyICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNs
dWRlL3FvYmplY3RkZWZzLmgiCiMgMSAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xZ2xvYmFs
LmgiIDEKIyA0MyAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xb2JqZWN0ZGVmcy5oIiAyCiMg
MTE3ICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FvYmplY3RkZWZzLmgiCmNsYXNzIFFPYmpl
Y3Q7CmNsYXNzIFFNZXRhT2JqZWN0OwpjbGFzcyBRU2lnbmFsOwpjbGFzcyBRQ29ubmVjdGlvbjsK
Y2xhc3MgUUV2ZW50OwpzdHJ1Y3QgUU1ldGFEYXRhOwpjbGFzcyBRQ29ubmVjdGlvbkxpc3Q7CmNs
YXNzIFFDb25uZWN0aW9uTGlzdEl0OwpjbGFzcyBRU2lnbmFsRGljdDsKY2xhc3MgUVNpZ25hbERp
Y3RJdDsKY2xhc3MgUU9iamVjdExpc3Q7CmNsYXNzIFFPYmplY3RMaXN0SXQ7CmNsYXNzIFFNZW1i
ZXJEaWN0OwojIDQzICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FvYmplY3QuaCIgMgojIDEg
Ii91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXdpbmRvd2RlZnMuaCIgMQojIDQzICIvdXNyL2xp
Yi9xdC0yLjMuMS9pbmNsdWRlL3F3aW5kb3dkZWZzLmgiCiMgMSAiL3Vzci9saWIvcXQtMi4zLjEv
aW5jbHVkZS9xb2JqZWN0ZGVmcy5oIiAxCiMgNDQgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUv
cXdpbmRvd2RlZnMuaCIgMgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXN0cmluZy5o
IiAxCiMgNDUgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXdpbmRvd2RlZnMuaCIgMgojIDEg
Ii91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcW5hbWVzcGFjZS5oIiAxCiMgNDIgIi91c3IvbGli
L3F0LTIuMy4xL2luY2x1ZGUvcW5hbWVzcGFjZS5oIgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2lu
Y2x1ZGUvcWdsb2JhbC5oIiAxCiMgNDMgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcW5hbWVz
cGFjZS5oIiAyCgoKCmNsYXNzIFFDb2xvcjsKY2xhc3MgUUN1cnNvcjsKCgpjbGFzcyBRdCB7CnB1
YmxpYzoKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBjb2xvcjA7CiAgICBzdGF0aWMgY29uc3Qg
UUNvbG9yICYgY29sb3IxOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGJsYWNrOwogICAgc3Rh
dGljIGNvbnN0IFFDb2xvciAmIHdoaXRlOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGRhcmtH
cmF5OwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGdyYXk7CiAgICBzdGF0aWMgY29uc3QgUUNv
bG9yICYgbGlnaHRHcmF5OwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIHJlZDsKICAgIHN0YXRp
YyBjb25zdCBRQ29sb3IgJiBncmVlbjsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBibHVlOwog
ICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGN5YW47CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYg
bWFnZW50YTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiB5ZWxsb3c7CiAgICBzdGF0aWMgY29u
c3QgUUNvbG9yICYgZGFya1JlZDsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBkYXJrR3JlZW47
CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya0JsdWU7CiAgICBzdGF0aWMgY29uc3QgUUNv
bG9yICYgZGFya0N5YW47CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya01hZ2VudGE7CiAg
ICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya1llbGxvdzsKCgogICAgZW51bSBCdXR0b25TdGF0
ZSB7CiAgICAgICAgTm9CdXR0b24gPSAweDAwMDAsCiAgICAgICAgTGVmdEJ1dHRvbiA9IDB4MDAw
MSwKICAgICAgICBSaWdodEJ1dHRvbiA9IDB4MDAwMiwKICAgICAgICBNaWRCdXR0b24gPSAweDAw
MDQsCiAgICAgICAgTW91c2VCdXR0b25NYXNrID0gMHgwMDA3LAogICAgICAgIFNoaWZ0QnV0dG9u
ID0gMHgwMDA4LAogICAgICAgIENvbnRyb2xCdXR0b24gPSAweDAwMTAsCiAgICAgICAgQWx0QnV0
dG9uID0gMHgwMDIwLAogICAgICAgIEtleUJ1dHRvbk1hc2sgPSAweDAwMzgsCiAgICAgICAgS2V5
cGFkID0gMHg0MDAwCiAgICB9OwoKCiAgICBlbnVtIE9yaWVudGF0aW9uIHsKICAgICAgICBIb3Jp
em9udGFsLAogICAgICAgIFZlcnRpY2FsCiAgICB9OwoKCgoKICAgIGVudW0gQWxpZ25tZW50Rmxh
Z3MgewogICAgICAgIEFsaWduTGVmdCA9IDB4MDAwMSwKICAgICAgICBBbGlnblJpZ2h0ID0gMHgw
MDAyLAogICAgICAgIEFsaWduSENlbnRlciA9IDB4MDAwNCwKICAgICAgICBBbGlnblRvcCA9IDB4
MDAwOCwKICAgICAgICBBbGlnbkJvdHRvbSA9IDB4MDAxMCwKICAgICAgICBBbGlnblZDZW50ZXIg
PSAweDAwMjAsCiAgICAgICAgQWxpZ25DZW50ZXIgPSBBbGlnblZDZW50ZXIgfCBBbGlnbkhDZW50
ZXIsCgogICAgICAgIFNpbmdsZUxpbmUgPSAweDAwNDAsCiAgICAgICAgRG9udENsaXAgPSAweDAw
ODAsCiAgICAgICAgRXhwYW5kVGFicyA9IDB4MDEwMCwKICAgICAgICBTaG93UHJlZml4ID0gMHgw
MjAwLAogICAgICAgIFdvcmRCcmVhayA9IDB4MDQwMCwKICAgICAgICBEb250UHJpbnQgPSAweDEw
MDAKICAgIH07CgoKICAgIGVudW0gV2lkZ2V0U3RhdGUgewogICAgICAgIFdTdGF0ZV9DcmVhdGVk
ID0gMHgwMDAwMDAwMSwKICAgICAgICBXU3RhdGVfRGlzYWJsZWQgPSAweDAwMDAwMDAyLAogICAg
ICAgIFdTdGF0ZV9WaXNpYmxlID0gMHgwMDAwMDAwNCwKICAgICAgICBXU3RhdGVfRm9yY2VIaWRl
ID0gMHgwMDAwMDAwOCwKICAgICAgICBXU3RhdGVfT3duQ3Vyc29yID0gMHgwMDAwMDAxMCwKICAg
ICAgICBXU3RhdGVfTW91c2VUcmFja2luZyA9IDB4MDAwMDAwMjAsCiAgICAgICAgV1N0YXRlX0Nv
bXByZXNzS2V5cyA9IDB4MDAwMDAwNDAsCiAgICAgICAgV1N0YXRlX0Jsb2NrVXBkYXRlcyA9IDB4
MDAwMDAwODAsCiAgICAgICAgV1N0YXRlX0luUGFpbnRFdmVudCA9IDB4MDAwMDAxMDAsCiAgICAg
ICAgV1N0YXRlX1JlcGFyZW50ZWQgPSAweDAwMDAwMjAwLAogICAgICAgIFdTdGF0ZV9Db25maWdQ
ZW5kaW5nID0gMHgwMDAwMDQwMCwKICAgICAgICBXU3RhdGVfUmVzaXplZCA9IDB4MDAwMDA4MDAs
CiAgICAgICAgV1N0YXRlX0F1dG9NYXNrID0gMHgwMDAwMTAwMCwKICAgICAgICBXU3RhdGVfUG9s
aXNoZWQgPSAweDAwMDAyMDAwLAogICAgICAgIFdTdGF0ZV9ETkQgPSAweDAwMDA0MDAwLAogICAg
ICAgIFdTdGF0ZV9Nb2RhbCA9IDB4MDAwMDgwMDAsCiAgICAgICAgV1N0YXRlX1Jlc2VydmVkMSA9
IDB4MDAwMTAwMDAsCiAgICAgICAgV1N0YXRlX1Jlc2VydmVkMiA9IDB4MDAwMjAwMDAsCiAgICAg
ICAgV1N0YXRlX1Jlc2VydmVkMyA9IDB4MDAwNDAwMDAsCiAgICAgICAgV1N0YXRlX01heGltaXpl
ZCA9IDB4MDAwODAwMDAsCiAgICAgICAgV1N0YXRlX1RyYW5zbGF0ZUJhY2tncm91bmQgPSAweDAw
MTAwMDAwLAogICAgICAgIFdTdGF0ZV9Gb3JjZURpc2FibGVkID0gMHgwMDIwMDAwMCwKICAgICAg
ICBXU3RhdGVfRXhwb3NlZCA9IDB4MDA0MDAwMDAKICAgIH07CgoKICAgIHR5cGVkZWYgdWludCBX
RmxhZ3M7CgoKICAgIGVudW0gV2lkZ2V0RmxhZ3MgewogICAgICAgIFdUeXBlX1RvcExldmVsID0g
MHgwMDAwMDAwMSwKICAgICAgICBXVHlwZV9Nb2RhbCA9IDB4MDAwMDAwMDIsCiAgICAgICAgV1R5
cGVfUG9wdXAgPSAweDAwMDAwMDA0LAogICAgICAgIFdUeXBlX0Rlc2t0b3AgPSAweDAwMDAwMDA4
LAogICAgICAgIFdUeXBlX01hc2sgPSAweDAwMDAwMDBmLAoKICAgICAgICBXU3R5bGVfQ3VzdG9t
aXplID0gMHgwMDAwMDAxMCwKICAgICAgICBXU3R5bGVfTm9ybWFsQm9yZGVyID0gMHgwMDAwMDAy
MCwKICAgICAgICBXU3R5bGVfRGlhbG9nQm9yZGVyID0gMHgwMDAwMDA0MCwKICAgICAgICBXU3R5
bGVfTm9Cb3JkZXIgPSAweDAwMDAwMDAwLAogICAgICAgIFdTdHlsZV9UaXRsZSA9IDB4MDAwMDAw
ODAsCiAgICAgICAgV1N0eWxlX1N5c01lbnUgPSAweDAwMDAwMTAwLAogICAgICAgIFdTdHlsZV9N
aW5pbWl6ZSA9IDB4MDAwMDAyMDAsCiAgICAgICAgV1N0eWxlX01heGltaXplID0gMHgwMDAwMDQw
MCwKICAgICAgICBXU3R5bGVfTWluTWF4ID0gV1N0eWxlX01pbmltaXplIHwgV1N0eWxlX01heGlt
aXplLAogICAgICAgIFdTdHlsZV9Ub29sID0gMHgwMDAwMDgwMCwKICAgICAgICBXU3R5bGVfU3Rh
eXNPblRvcCA9IDB4MDAwMDEwMDAsCiAgICAgICAgV1N0eWxlX0RpYWxvZyA9IDB4MDAwMDIwMDAs
CiAgICAgICAgV1N0eWxlX0NvbnRleHRIZWxwID0gMHgwMDAwNDAwMCwKICAgICAgICBXU3R5bGVf
Tm9Cb3JkZXJFeCA9IDB4MDAwMDgwMDAsCiAgICAgICAgV1N0eWxlX01hc2sgPSAweDAwMDBmZmYw
LAoKICAgICAgICBXRGVzdHJ1Y3RpdmVDbG9zZSA9IDB4MDAwMTAwMDAsCiAgICAgICAgV1BhaW50
RGVza3RvcCA9IDB4MDAwMjAwMDAsCiAgICAgICAgV1BhaW50VW5jbGlwcGVkID0gMHgwMDA0MDAw
MCwKICAgICAgICBXUGFpbnRDbGV2ZXIgPSAweDAwMDgwMDAwLAogICAgICAgIFdSZXNpemVOb0Vy
YXNlID0gMHgwMDEwMDAwMCwKICAgICAgICBXTW91c2VOb01hc2sgPSAweDAwMjAwMDAwLAogICAg
ICAgIFdOb3J0aFdlc3RHcmF2aXR5ID0gMHgwMDQwMDAwMCwKICAgICAgICBXUmVwYWludE5vRXJh
c2UgPSAweDAwODAwMDAwLAogICAgICAgIFdYMTFCeXBhc3NXTSA9IDB4MDEwMDAwMDAsCiAgICAg
ICAgV0dyb3VwTGVhZGVyID0gMHgwMjAwMDAwMAoKICAgIH07CgoKCgogICAgZW51bSBJbWFnZUNv
bnZlcnNpb25GbGFncyB7CiAgICAgICAgQ29sb3JNb2RlX01hc2sgPSAweDAwMDAwMDAzLAogICAg
ICAgIEF1dG9Db2xvciA9IDB4MDAwMDAwMDAsCiAgICAgICAgQ29sb3JPbmx5ID0gMHgwMDAwMDAw
MywKICAgICAgICBNb25vT25seSA9IDB4MDAwMDAwMDIsCgoKICAgICAgICBBbHBoYURpdGhlcl9N
YXNrID0gMHgwMDAwMDAwYywKICAgICAgICBUaHJlc2hvbGRBbHBoYURpdGhlciA9IDB4MDAwMDAw
MDAsCiAgICAgICAgT3JkZXJlZEFscGhhRGl0aGVyID0gMHgwMDAwMDAwNCwKICAgICAgICBEaWZm
dXNlQWxwaGFEaXRoZXIgPSAweDAwMDAwMDA4LAogICAgICAgIE5vQWxwaGEgPSAweDAwMDAwMDBj
LAoKICAgICAgICBEaXRoZXJfTWFzayA9IDB4MDAwMDAwMzAsCiAgICAgICAgRGlmZnVzZURpdGhl
ciA9IDB4MDAwMDAwMDAsCiAgICAgICAgT3JkZXJlZERpdGhlciA9IDB4MDAwMDAwMTAsCiAgICAg
ICAgVGhyZXNob2xkRGl0aGVyID0gMHgwMDAwMDAyMCwKCgogICAgICAgIERpdGhlck1vZGVfTWFz
ayA9IDB4MDAwMDAwYzAsCiAgICAgICAgQXV0b0RpdGhlciA9IDB4MDAwMDAwMDAsCiAgICAgICAg
UHJlZmVyRGl0aGVyID0gMHgwMDAwMDA0MCwKICAgICAgICBBdm9pZERpdGhlciA9IDB4MDAwMDAw
ODAKICAgIH07CgogICAgZW51bSBCR01vZGUgewogICAgICAgIFRyYW5zcGFyZW50TW9kZSwKICAg
ICAgICBPcGFxdWVNb2RlCiAgICB9OwoKICAgIGVudW0gUGFpbnRVbml0IHsKICAgICAgICBQaXhl
bFVuaXQsCiAgICAgICAgTG9NZXRyaWNVbml0LAogICAgICAgIEhpTWV0cmljVW5pdCwKICAgICAg
ICBMb0VuZ2xpc2hVbml0LAogICAgICAgIEhpRW5nbGlzaFVuaXQsCiAgICAgICAgVHdpcHNVbml0
CiAgICB9OwoKICAgIGVudW0gR1VJU3R5bGUgewogICAgICAgIE1hY1N0eWxlLAogICAgICAgIFdp
bmRvd3NTdHlsZSwKICAgICAgICBXaW4zU3R5bGUsCiAgICAgICAgUE1TdHlsZSwKICAgICAgICBN
b3RpZlN0eWxlCiAgICB9OwoKICAgIGVudW0gTW9kaWZpZXIgewogICAgICAgIFNISUZUID0gMHgw
MDIwMDAwMCwKICAgICAgICBDVFJMID0gMHgwMDQwMDAwMCwKICAgICAgICBBTFQgPSAweDAwODAw
MDAwLAogICAgICAgIE1PRElGSUVSX01BU0sgPSAweDAwZTAwMDAwLAogICAgICAgIFVOSUNPREVf
QUNDRUwgPSAweDEwMDAwMDAwLAoKICAgICAgICBBU0NJSV9BQ0NFTCA9IFVOSUNPREVfQUNDRUwK
ICAgIH07CgogICAgZW51bSBLZXkgewogICAgICAgIEtleV9Fc2NhcGUgPSAweDEwMDAsCiAgICAg
ICAgS2V5X1RhYiA9IDB4MTAwMSwKICAgICAgICBLZXlfQmFja3RhYiA9IDB4MTAwMiwgS2V5X0Jh
Y2tUYWIgPSBLZXlfQmFja3RhYiwKICAgICAgICBLZXlfQmFja3NwYWNlID0gMHgxMDAzLCBLZXlf
QmFja1NwYWNlID0gS2V5X0JhY2tzcGFjZSwKICAgICAgICBLZXlfUmV0dXJuID0gMHgxMDA0LAog
ICAgICAgIEtleV9FbnRlciA9IDB4MTAwNSwKICAgICAgICBLZXlfSW5zZXJ0ID0gMHgxMDA2LAog
ICAgICAgIEtleV9EZWxldGUgPSAweDEwMDcsCiAgICAgICAgS2V5X1BhdXNlID0gMHgxMDA4LAog
ICAgICAgIEtleV9QcmludCA9IDB4MTAwOSwKICAgICAgICBLZXlfU3lzUmVxID0gMHgxMDBhLAog
ICAgICAgIEtleV9Ib21lID0gMHgxMDEwLAogICAgICAgIEtleV9FbmQgPSAweDEwMTEsCiAgICAg
ICAgS2V5X0xlZnQgPSAweDEwMTIsCiAgICAgICAgS2V5X1VwID0gMHgxMDEzLAogICAgICAgIEtl
eV9SaWdodCA9IDB4MTAxNCwKICAgICAgICBLZXlfRG93biA9IDB4MTAxNSwKICAgICAgICBLZXlf
UHJpb3IgPSAweDEwMTYsIEtleV9QYWdlVXAgPSBLZXlfUHJpb3IsCiAgICAgICAgS2V5X05leHQg
PSAweDEwMTcsIEtleV9QYWdlRG93biA9IEtleV9OZXh0LAogICAgICAgIEtleV9TaGlmdCA9IDB4
MTAyMCwKICAgICAgICBLZXlfQ29udHJvbCA9IDB4MTAyMSwKICAgICAgICBLZXlfTWV0YSA9IDB4
MTAyMiwKICAgICAgICBLZXlfQWx0ID0gMHgxMDIzLAogICAgICAgIEtleV9DYXBzTG9jayA9IDB4
MTAyNCwKICAgICAgICBLZXlfTnVtTG9jayA9IDB4MTAyNSwKICAgICAgICBLZXlfU2Nyb2xsTG9j
ayA9IDB4MTAyNiwKICAgICAgICBLZXlfRjEgPSAweDEwMzAsCiAgICAgICAgS2V5X0YyID0gMHgx
MDMxLAogICAgICAgIEtleV9GMyA9IDB4MTAzMiwKICAgICAgICBLZXlfRjQgPSAweDEwMzMsCiAg
ICAgICAgS2V5X0Y1ID0gMHgxMDM0LAogICAgICAgIEtleV9GNiA9IDB4MTAzNSwKICAgICAgICBL
ZXlfRjcgPSAweDEwMzYsCiAgICAgICAgS2V5X0Y4ID0gMHgxMDM3LAogICAgICAgIEtleV9GOSA9
IDB4MTAzOCwKICAgICAgICBLZXlfRjEwID0gMHgxMDM5LAogICAgICAgIEtleV9GMTEgPSAweDEw
M2EsCiAgICAgICAgS2V5X0YxMiA9IDB4MTAzYiwKICAgICAgICBLZXlfRjEzID0gMHgxMDNjLAog
ICAgICAgIEtleV9GMTQgPSAweDEwM2QsCiAgICAgICAgS2V5X0YxNSA9IDB4MTAzZSwKICAgICAg
ICBLZXlfRjE2ID0gMHgxMDNmLAogICAgICAgIEtleV9GMTcgPSAweDEwNDAsCiAgICAgICAgS2V5
X0YxOCA9IDB4MTA0MSwKICAgICAgICBLZXlfRjE5ID0gMHgxMDQyLAogICAgICAgIEtleV9GMjAg
PSAweDEwNDMsCiAgICAgICAgS2V5X0YyMSA9IDB4MTA0NCwKICAgICAgICBLZXlfRjIyID0gMHgx
MDQ1LAogICAgICAgIEtleV9GMjMgPSAweDEwNDYsCiAgICAgICAgS2V5X0YyNCA9IDB4MTA0NywK
ICAgICAgICBLZXlfRjI1ID0gMHgxMDQ4LAogICAgICAgIEtleV9GMjYgPSAweDEwNDksCiAgICAg
ICAgS2V5X0YyNyA9IDB4MTA0YSwKICAgICAgICBLZXlfRjI4ID0gMHgxMDRiLAogICAgICAgIEtl
eV9GMjkgPSAweDEwNGMsCiAgICAgICAgS2V5X0YzMCA9IDB4MTA0ZCwKICAgICAgICBLZXlfRjMx
ID0gMHgxMDRlLAogICAgICAgIEtleV9GMzIgPSAweDEwNGYsCiAgICAgICAgS2V5X0YzMyA9IDB4
MTA1MCwKICAgICAgICBLZXlfRjM0ID0gMHgxMDUxLAogICAgICAgIEtleV9GMzUgPSAweDEwNTIs
CiAgICAgICAgS2V5X1N1cGVyX0wgPSAweDEwNTMsCiAgICAgICAgS2V5X1N1cGVyX1IgPSAweDEw
NTQsCiAgICAgICAgS2V5X01lbnUgPSAweDEwNTUsCiAgICAgICAgS2V5X0h5cGVyX0wgPSAweDEw
NTYsCiAgICAgICAgS2V5X0h5cGVyX1IgPSAweDEwNTcsCiAgICAgICAgS2V5X0hlbHAgPSAweDEw
NTgsCiAgICAgICAgS2V5X1NwYWNlID0gMHgyMCwKICAgICAgICBLZXlfQW55ID0gS2V5X1NwYWNl
LAogICAgICAgIEtleV9FeGNsYW0gPSAweDIxLAogICAgICAgIEtleV9RdW90ZURibCA9IDB4MjIs
CiAgICAgICAgS2V5X051bWJlclNpZ24gPSAweDIzLAogICAgICAgIEtleV9Eb2xsYXIgPSAweDI0
LAogICAgICAgIEtleV9QZXJjZW50ID0gMHgyNSwKICAgICAgICBLZXlfQW1wZXJzYW5kID0gMHgy
NiwKICAgICAgICBLZXlfQXBvc3Ryb3BoZSA9IDB4MjcsCiAgICAgICAgS2V5X1BhcmVuTGVmdCA9
IDB4MjgsCiAgICAgICAgS2V5X1BhcmVuUmlnaHQgPSAweDI5LAogICAgICAgIEtleV9Bc3Rlcmlz
ayA9IDB4MmEsCiAgICAgICAgS2V5X1BsdXMgPSAweDJiLAogICAgICAgIEtleV9Db21tYSA9IDB4
MmMsCiAgICAgICAgS2V5X01pbnVzID0gMHgyZCwKICAgICAgICBLZXlfUGVyaW9kID0gMHgyZSwK
ICAgICAgICBLZXlfU2xhc2ggPSAweDJmLAogICAgICAgIEtleV8wID0gMHgzMCwKICAgICAgICBL
ZXlfMSA9IDB4MzEsCiAgICAgICAgS2V5XzIgPSAweDMyLAogICAgICAgIEtleV8zID0gMHgzMywK
ICAgICAgICBLZXlfNCA9IDB4MzQsCiAgICAgICAgS2V5XzUgPSAweDM1LAogICAgICAgIEtleV82
ID0gMHgzNiwKICAgICAgICBLZXlfNyA9IDB4MzcsCiAgICAgICAgS2V5XzggPSAweDM4LAogICAg
ICAgIEtleV85ID0gMHgzOSwKICAgICAgICBLZXlfQ29sb24gPSAweDNhLAogICAgICAgIEtleV9T
ZW1pY29sb24gPSAweDNiLAogICAgICAgIEtleV9MZXNzID0gMHgzYywKICAgICAgICBLZXlfRXF1
YWwgPSAweDNkLAogICAgICAgIEtleV9HcmVhdGVyID0gMHgzZSwKICAgICAgICBLZXlfUXVlc3Rp
b24gPSAweDNmLAogICAgICAgIEtleV9BdCA9IDB4NDAsCiAgICAgICAgS2V5X0EgPSAweDQxLAog
ICAgICAgIEtleV9CID0gMHg0MiwKICAgICAgICBLZXlfQyA9IDB4NDMsCiAgICAgICAgS2V5X0Qg
PSAweDQ0LAogICAgICAgIEtleV9FID0gMHg0NSwKICAgICAgICBLZXlfRiA9IDB4NDYsCiAgICAg
ICAgS2V5X0cgPSAweDQ3LAogICAgICAgIEtleV9IID0gMHg0OCwKICAgICAgICBLZXlfSSA9IDB4
NDksCiAgICAgICAgS2V5X0ogPSAweDRhLAogICAgICAgIEtleV9LID0gMHg0YiwKICAgICAgICBL
ZXlfTCA9IDB4NGMsCiAgICAgICAgS2V5X00gPSAweDRkLAogICAgICAgIEtleV9OID0gMHg0ZSwK
ICAgICAgICBLZXlfTyA9IDB4NGYsCiAgICAgICAgS2V5X1AgPSAweDUwLAogICAgICAgIEtleV9R
ID0gMHg1MSwKICAgICAgICBLZXlfUiA9IDB4NTIsCiAgICAgICAgS2V5X1MgPSAweDUzLAogICAg
ICAgIEtleV9UID0gMHg1NCwKICAgICAgICBLZXlfVSA9IDB4NTUsCiAgICAgICAgS2V5X1YgPSAw
eDU2LAogICAgICAgIEtleV9XID0gMHg1NywKICAgICAgICBLZXlfWCA9IDB4NTgsCiAgICAgICAg
S2V5X1kgPSAweDU5LAogICAgICAgIEtleV9aID0gMHg1YSwKICAgICAgICBLZXlfQnJhY2tldExl
ZnQgPSAweDViLAogICAgICAgIEtleV9CYWNrc2xhc2ggPSAweDVjLAogICAgICAgIEtleV9CcmFj
a2V0UmlnaHQgPSAweDVkLAogICAgICAgIEtleV9Bc2NpaUNpcmN1bSA9IDB4NWUsCiAgICAgICAg
S2V5X1VuZGVyc2NvcmUgPSAweDVmLAogICAgICAgIEtleV9RdW90ZUxlZnQgPSAweDYwLAogICAg
ICAgIEtleV9CcmFjZUxlZnQgPSAweDdiLAogICAgICAgIEtleV9CYXIgPSAweDdjLAogICAgICAg
IEtleV9CcmFjZVJpZ2h0ID0gMHg3ZCwKICAgICAgICBLZXlfQXNjaWlUaWxkZSA9IDB4N2UsCgoK
CiAgICAgICAgS2V5X25vYnJlYWtzcGFjZSA9IDB4MGEwLAogICAgICAgIEtleV9leGNsYW1kb3du
ID0gMHgwYTEsCiAgICAgICAgS2V5X2NlbnQgPSAweDBhMiwKICAgICAgICBLZXlfc3Rlcmxpbmcg
PSAweDBhMywKICAgICAgICBLZXlfY3VycmVuY3kgPSAweDBhNCwKICAgICAgICBLZXlfeWVuID0g
MHgwYTUsCiAgICAgICAgS2V5X2Jyb2tlbmJhciA9IDB4MGE2LAogICAgICAgIEtleV9zZWN0aW9u
ID0gMHgwYTcsCiAgICAgICAgS2V5X2RpYWVyZXNpcyA9IDB4MGE4LAogICAgICAgIEtleV9jb3B5
cmlnaHQgPSAweDBhOSwKICAgICAgICBLZXlfb3JkZmVtaW5pbmUgPSAweDBhYSwKICAgICAgICBL
ZXlfZ3VpbGxlbW90bGVmdCA9IDB4MGFiLAogICAgICAgIEtleV9ub3RzaWduID0gMHgwYWMsCiAg
ICAgICAgS2V5X2h5cGhlbiA9IDB4MGFkLAogICAgICAgIEtleV9yZWdpc3RlcmVkID0gMHgwYWUs
CiAgICAgICAgS2V5X21hY3JvbiA9IDB4MGFmLAogICAgICAgIEtleV9kZWdyZWUgPSAweDBiMCwK
ICAgICAgICBLZXlfcGx1c21pbnVzID0gMHgwYjEsCiAgICAgICAgS2V5X3R3b3N1cGVyaW9yID0g
MHgwYjIsCiAgICAgICAgS2V5X3RocmVlc3VwZXJpb3IgPSAweDBiMywKICAgICAgICBLZXlfYWN1
dGUgPSAweDBiNCwKICAgICAgICBLZXlfbXUgPSAweDBiNSwKICAgICAgICBLZXlfcGFyYWdyYXBo
ID0gMHgwYjYsCiAgICAgICAgS2V5X3BlcmlvZGNlbnRlcmVkID0gMHgwYjcsCiAgICAgICAgS2V5
X2NlZGlsbGEgPSAweDBiOCwKICAgICAgICBLZXlfb25lc3VwZXJpb3IgPSAweDBiOSwKICAgICAg
ICBLZXlfbWFzY3VsaW5lID0gMHgwYmEsCiAgICAgICAgS2V5X2d1aWxsZW1vdHJpZ2h0ID0gMHgw
YmIsCiAgICAgICAgS2V5X29uZXF1YXJ0ZXIgPSAweDBiYywKICAgICAgICBLZXlfb25laGFsZiA9
IDB4MGJkLAogICAgICAgIEtleV90aHJlZXF1YXJ0ZXJzID0gMHgwYmUsCiAgICAgICAgS2V5X3F1
ZXN0aW9uZG93biA9IDB4MGJmLAogICAgICAgIEtleV9BZ3JhdmUgPSAweDBjMCwKICAgICAgICBL
ZXlfQWFjdXRlID0gMHgwYzEsCiAgICAgICAgS2V5X0FjaXJjdW1mbGV4ID0gMHgwYzIsCiAgICAg
ICAgS2V5X0F0aWxkZSA9IDB4MGMzLAogICAgICAgIEtleV9BZGlhZXJlc2lzID0gMHgwYzQsCiAg
ICAgICAgS2V5X0FyaW5nID0gMHgwYzUsCiAgICAgICAgS2V5X0FFID0gMHgwYzYsCiAgICAgICAg
S2V5X0NjZWRpbGxhID0gMHgwYzcsCiAgICAgICAgS2V5X0VncmF2ZSA9IDB4MGM4LAogICAgICAg
IEtleV9FYWN1dGUgPSAweDBjOSwKICAgICAgICBLZXlfRWNpcmN1bWZsZXggPSAweDBjYSwKICAg
ICAgICBLZXlfRWRpYWVyZXNpcyA9IDB4MGNiLAogICAgICAgIEtleV9JZ3JhdmUgPSAweDBjYywK
ICAgICAgICBLZXlfSWFjdXRlID0gMHgwY2QsCiAgICAgICAgS2V5X0ljaXJjdW1mbGV4ID0gMHgw
Y2UsCiAgICAgICAgS2V5X0lkaWFlcmVzaXMgPSAweDBjZiwKICAgICAgICBLZXlfRVRIID0gMHgw
ZDAsCiAgICAgICAgS2V5X050aWxkZSA9IDB4MGQxLAogICAgICAgIEtleV9PZ3JhdmUgPSAweDBk
MiwKICAgICAgICBLZXlfT2FjdXRlID0gMHgwZDMsCiAgICAgICAgS2V5X09jaXJjdW1mbGV4ID0g
MHgwZDQsCiAgICAgICAgS2V5X090aWxkZSA9IDB4MGQ1LAogICAgICAgIEtleV9PZGlhZXJlc2lz
ID0gMHgwZDYsCiAgICAgICAgS2V5X211bHRpcGx5ID0gMHgwZDcsCiAgICAgICAgS2V5X09vYmxp
cXVlID0gMHgwZDgsCiAgICAgICAgS2V5X1VncmF2ZSA9IDB4MGQ5LAogICAgICAgIEtleV9VYWN1
dGUgPSAweDBkYSwKICAgICAgICBLZXlfVWNpcmN1bWZsZXggPSAweDBkYiwKICAgICAgICBLZXlf
VWRpYWVyZXNpcyA9IDB4MGRjLAogICAgICAgIEtleV9ZYWN1dGUgPSAweDBkZCwKICAgICAgICBL
ZXlfVEhPUk4gPSAweDBkZSwKICAgICAgICBLZXlfc3NoYXJwID0gMHgwZGYsCiAgICAgICAgS2V5
X2FncmF2ZSA9IDB4MGUwLAogICAgICAgIEtleV9hYWN1dGUgPSAweDBlMSwKICAgICAgICBLZXlf
YWNpcmN1bWZsZXggPSAweDBlMiwKICAgICAgICBLZXlfYXRpbGRlID0gMHgwZTMsCiAgICAgICAg
S2V5X2FkaWFlcmVzaXMgPSAweDBlNCwKICAgICAgICBLZXlfYXJpbmcgPSAweDBlNSwKICAgICAg
ICBLZXlfYWUgPSAweDBlNiwKICAgICAgICBLZXlfY2NlZGlsbGEgPSAweDBlNywKICAgICAgICBL
ZXlfZWdyYXZlID0gMHgwZTgsCiAgICAgICAgS2V5X2VhY3V0ZSA9IDB4MGU5LAogICAgICAgIEtl
eV9lY2lyY3VtZmxleCA9IDB4MGVhLAogICAgICAgIEtleV9lZGlhZXJlc2lzID0gMHgwZWIsCiAg
ICAgICAgS2V5X2lncmF2ZSA9IDB4MGVjLAogICAgICAgIEtleV9pYWN1dGUgPSAweDBlZCwKICAg
ICAgICBLZXlfaWNpcmN1bWZsZXggPSAweDBlZSwKICAgICAgICBLZXlfaWRpYWVyZXNpcyA9IDB4
MGVmLAogICAgICAgIEtleV9ldGggPSAweDBmMCwKICAgICAgICBLZXlfbnRpbGRlID0gMHgwZjEs
CiAgICAgICAgS2V5X29ncmF2ZSA9IDB4MGYyLAogICAgICAgIEtleV9vYWN1dGUgPSAweDBmMywK
ICAgICAgICBLZXlfb2NpcmN1bWZsZXggPSAweDBmNCwKICAgICAgICBLZXlfb3RpbGRlID0gMHgw
ZjUsCiAgICAgICAgS2V5X29kaWFlcmVzaXMgPSAweDBmNiwKICAgICAgICBLZXlfZGl2aXNpb24g
PSAweDBmNywKICAgICAgICBLZXlfb3NsYXNoID0gMHgwZjgsCiAgICAgICAgS2V5X3VncmF2ZSA9
IDB4MGY5LAogICAgICAgIEtleV91YWN1dGUgPSAweDBmYSwKICAgICAgICBLZXlfdWNpcmN1bWZs
ZXggPSAweDBmYiwKICAgICAgICBLZXlfdWRpYWVyZXNpcyA9IDB4MGZjLAogICAgICAgIEtleV95
YWN1dGUgPSAweDBmZCwKICAgICAgICBLZXlfdGhvcm4gPSAweDBmZSwKICAgICAgICBLZXlfeWRp
YWVyZXNpcyA9IDB4MGZmLAoKICAgICAgICBLZXlfdW5rbm93biA9IDB4ZmZmZgogICAgfTsKCiAg
ICBlbnVtIEFycm93VHlwZSB7CiAgICAgICAgVXBBcnJvdywKICAgICAgICBEb3duQXJyb3csCiAg
ICAgICAgTGVmdEFycm93LAogICAgICAgIFJpZ2h0QXJyb3cKICAgIH07CgoKICAgIGVudW0gUmFz
dGVyT3AgewogICAgICAgIENvcHlST1AsCiAgICAgICAgT3JST1AsCiAgICAgICAgWG9yUk9QLAog
ICAgICAgIE5vdEFuZFJPUCwKICAgICAgICBFcmFzZVJPUD1Ob3RBbmRST1AsCiAgICAgICAgTm90
Q29weVJPUCwKICAgICAgICBOb3RPclJPUCwKICAgICAgICBOb3RYb3JST1AsCiAgICAgICAgQW5k
Uk9QLCBOb3RFcmFzZVJPUD1BbmRST1AsCiAgICAgICAgTm90Uk9QLAogICAgICAgIENsZWFyUk9Q
LAogICAgICAgIFNldFJPUCwKICAgICAgICBOb3BST1AsCiAgICAgICAgQW5kTm90Uk9QLAogICAg
ICAgIE9yTm90Uk9QLAogICAgICAgIE5hbmRST1AsCiAgICAgICAgTm9yUk9QLCBMYXN0Uk9QPU5v
clJPUAogICAgfTsKCgogICAgZW51bSBQZW5TdHlsZSB7CiAgICAgICAgTm9QZW4sCiAgICAgICAg
U29saWRMaW5lLAogICAgICAgIERhc2hMaW5lLAogICAgICAgIERvdExpbmUsCiAgICAgICAgRGFz
aERvdExpbmUsCiAgICAgICAgRGFzaERvdERvdExpbmUsCiAgICAgICAgTVBlblN0eWxlID0gMHgw
ZgogICAgfTsKCiAgICBlbnVtIFBlbkNhcFN0eWxlIHsKICAgICAgICBGbGF0Q2FwID0gMHgwMCwK
ICAgICAgICBTcXVhcmVDYXAgPSAweDEwLAogICAgICAgIFJvdW5kQ2FwID0gMHgyMCwKICAgICAg
ICBNUGVuQ2FwU3R5bGUgPSAweDMwCiAgICB9OwoKICAgIGVudW0gUGVuSm9pblN0eWxlIHsKICAg
ICAgICBNaXRlckpvaW4gPSAweDAwLAogICAgICAgIEJldmVsSm9pbiA9IDB4NDAsCiAgICAgICAg
Um91bmRKb2luID0gMHg4MCwKICAgICAgICBNUGVuSm9pblN0eWxlID0gMHhjMAogICAgfTsKCiAg
ICBlbnVtIEJydXNoU3R5bGUgewogICAgICAgIE5vQnJ1c2gsCiAgICAgICAgU29saWRQYXR0ZXJu
LAogICAgICAgIERlbnNlMVBhdHRlcm4sCiAgICAgICAgRGVuc2UyUGF0dGVybiwKICAgICAgICBE
ZW5zZTNQYXR0ZXJuLAogICAgICAgIERlbnNlNFBhdHRlcm4sCiAgICAgICAgRGVuc2U1UGF0dGVy
biwKICAgICAgICBEZW5zZTZQYXR0ZXJuLAogICAgICAgIERlbnNlN1BhdHRlcm4sCiAgICAgICAg
SG9yUGF0dGVybiwKICAgICAgICBWZXJQYXR0ZXJuLAogICAgICAgIENyb3NzUGF0dGVybiwKICAg
ICAgICBCRGlhZ1BhdHRlcm4sCiAgICAgICAgRkRpYWdQYXR0ZXJuLAogICAgICAgIERpYWdDcm9z
c1BhdHRlcm4sCiAgICAgICAgQ3VzdG9tUGF0dGVybj0yNAogICAgfTsKCiAgICBlbnVtIFdpbmRv
d3NWZXJzaW9uIHsKICAgICAgICBXVl8zMnMgPSAweDAwMDEsCiAgICAgICAgV1ZfOTUgPSAweDAw
MDIsCiAgICAgICAgV1ZfOTggPSAweDAwMDMsCiAgICAgICAgV1ZfRE9TX2Jhc2VkID0gMHgwMDBm
LAoKICAgICAgICBXVl9OVCA9IDB4MDAxMCwKICAgICAgICBXVl8yMDAwID0gMHgwMDIwLAogICAg
ICAgIFdWX05UX2Jhc2VkID0gMHgwMGYwCiAgICB9OwoKICAgIGVudW0gVUlFZmZlY3QgewogICAg
ICAgIFVJX0dlbmVyYWwsCiAgICAgICAgVUlfQW5pbWF0ZU1lbnUsCiAgICAgICAgVUlfRmFkZU1l
bnUsCiAgICAgICAgVUlfQW5pbWF0ZUNvbWJvLAogICAgICAgIFVJX0FuaW1hdGVUb29sdGlwLAog
ICAgICAgIFVJX0ZhZGVUb29sdGlwCiAgICB9OwoKCgoKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29y
ICYgYXJyb3dDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHVwQXJyb3dDdXJzb3I7
CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGNyb3NzQ3Vyc29yOwogICAgc3RhdGljIGNvbnN0
IFFDdXJzb3IgJiB3YWl0Q3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBpYmVhbUN1
cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZVZlckN1cnNvcjsKICAgIHN0YXRp
YyBjb25zdCBRQ3Vyc29yICYgc2l6ZUhvckN1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29y
ICYgc2l6ZUJEaWFnQ3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBzaXplRkRpYWdD
dXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHNpemVBbGxDdXJzb3I7CiAgICBzdGF0
aWMgY29uc3QgUUN1cnNvciAmIGJsYW5rQ3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3Ig
JiBzcGxpdFZDdXJzb3I7CgogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBzcGxpdEhDdXJzb3I7
CgogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBwb2ludGluZ0hhbmRDdXJzb3I7CiAgICBzdGF0
aWMgY29uc3QgUUN1cnNvciAmIGZvcmJpZGRlbkN1cnNvcjsKCgogICAgZW51bSBUZXh0Rm9ybWF0
IHsKICAgICAgICBQbGFpblRleHQsCiAgICAgICAgUmljaFRleHQsCiAgICAgICAgQXV0b1RleHQK
ICAgIH07Cn07CgoKY2xhc3MgUUludGVybmFsIHsKcHVibGljOgogICAgZW51bSBQYWludERldmlj
ZUZsYWdzIHsKICAgICAgICBVbmRlZmluZWREZXZpY2UgPSAweDAwLAogICAgICAgIFdpZGdldCA9
IDB4MDEsCiAgICAgICAgUGl4bWFwID0gMHgwMiwKICAgICAgICBQcmludGVyID0gMHgwMywKICAg
ICAgICBQaWN0dXJlID0gMHgwNCwKICAgICAgICBTeXN0ZW0gPSAweDA1LAogICAgICAgIERldmlj
ZVR5cGVNYXNrID0gMHgwZiwKICAgICAgICBFeHRlcm5hbERldmljZSA9IDB4MTAKICAgIH07Cn07
CiMgNDYgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXdpbmRvd2RlZnMuaCIgMgoKCiMgMSAi
L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9saW1p
dHMuaCIgMSAzCiMgMTEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4xL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N5c2xpbWl0cy5oIiAxIDMKCgoKCgoKIyAxICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL2xpbWl0cy5o
IiAxIDMKIyAxMzIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4x
L2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDI2
ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg
MSAzCiMgMjcgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTQ0ICIvdXNyL2luY2x1ZGUv
bGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwojIDEy
NiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvbG9jYWxfbGltLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVk
ZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9s
aW0uaCIgMiAzCiMgMTQ1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMgMTQ5ICIvdXNyL2luY2x1ZGUvbGltaXRz
LmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMKIyAzNCAi
L3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z
dGRpb19saW0uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMK
IyAxMzYgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMTM3ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0u
aCIgMiAzCiMgMTUzICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDEzMyAiL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9saW1pdHMuaCIgMiAz
CiMgOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEvaW5jbHVk
ZS9zeXNsaW1pdHMuaCIgMiAzCiMgMTIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4xL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDQ5ICIvdXNyL2xpYi9xdC0yLjMu
MS9pbmNsdWRlL3F3aW5kb3dkZWZzLmgiIDIKCgoKY2xhc3MgUVBhaW50RGV2aWNlOwpjbGFzcyBR
UGFpbnREZXZpY2VNZXRyaWNzOwpjbGFzcyBRV2lkZ2V0OwpjbGFzcyBRV2lkZ2V0TWFwcGVyOwpj
bGFzcyBRRGlhbG9nOwpjbGFzcyBRQ29sb3I7CmNsYXNzIFFDb2xvckdyb3VwOwpjbGFzcyBRUGFs
ZXR0ZTsKY2xhc3MgUUN1cnNvcjsKY2xhc3MgUVBvaW50OwpjbGFzcyBRU2l6ZTsKY2xhc3MgUVJl
Y3Q7CmNsYXNzIFFQb2ludEFycmF5OwpjbGFzcyBRUGFpbnRlcjsKY2xhc3MgUVJlZ2lvbjsKY2xh
c3MgUUZvbnQ7CmNsYXNzIFFGb250TWV0cmljczsKY2xhc3MgUUZvbnRJbmZvOwpjbGFzcyBRUGVu
OwpjbGFzcyBRQnJ1c2g7CmNsYXNzIFFXTWF0cml4OwpjbGFzcyBRUGl4bWFwOwpjbGFzcyBRQml0
bWFwOwpjbGFzcyBRTW92aWU7CmNsYXNzIFFJbWFnZTsKY2xhc3MgUUltYWdlSU87CmNsYXNzIFFQ
aWN0dXJlOwpjbGFzcyBRUHJpbnRlcjsKY2xhc3MgUUFjY2VsOwpjbGFzcyBRVGltZXI7CmNsYXNz
IFFUaW1lOwpjbGFzcyBRQ2xpcGJvYXJkOwoKCgoKY2xhc3MgUVdpZGdldExpc3Q7CmNsYXNzIFFX
aWRnZXRMaXN0SXQ7CiMgMTE4ICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3F3aW5kb3dkZWZz
LmgiCnR5cGVkZWYgdW5zaWduZWQgaW50IFdJZDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgSEFORExF
OwoKCnR5cGVkZWYgc3RydWN0IF9YRGlzcGxheSBEaXNwbGF5Owp0eXBlZGVmIHVuaW9uIF9YRXZl
bnQgWEV2ZW50Owp0eXBlZGVmIHN0cnVjdCBfWEdDICpHQzsKdHlwZWRlZiBzdHJ1Y3QgX1hSZWdp
b24gKlJlZ2lvbjsKCiAgICAgICAgIERpc3BsYXkgKnF0X3hkaXNwbGF5KCk7CiAgICAgICAgIGlu
dCBxdF94c2NyZWVuKCk7CiAgICAgICAgIFdJZCBxdF94cm9vdHdpbigpOwogICAgICAgICBHQyBx
dF94Z2V0X3JlYWRvbmx5X2djKCBib29sIG1vbm9jaHJvbWU9RkFMU0UgKTsKICAgICAgICAgR0Mg
cXRfeGdldF90ZW1wX2djKCBib29sIG1vbm9jaHJvbWU9RkFMU0UgKTsKIyAxNDQgIi91c3IvbGli
L3F0LTIuMy4xL2luY2x1ZGUvcXdpbmRvd2RlZnMuaCIKY2xhc3MgUUFwcGxpY2F0aW9uOwojIDE1
MyAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xd2luZG93ZGVmcy5oIgp0eXBlZGVmIFFfSU5U
MzIgUUNPT1JEOwpjb25zdCBRQ09PUkQgUUNPT1JEX01BWCA9IDIxNDc0ODM2NDc7CmNvbnN0IFFD
T09SRCBRQ09PUkRfTUlOID0gLVFDT09SRF9NQVggLSAxOwoKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
UVJnYjsKCiAgICAgICAgIGNoYXIgKnFBcHBOYW1lKCk7CgoKCgp0eXBlZGVmIHZvaWQgKCpRX0Ns
ZWFuVXBGdW5jdGlvbikoKTsKICAgICAgICAgdm9pZCBxQWRkUG9zdFJvdXRpbmUoIFFfQ2xlYW5V
cEZ1bmN0aW9uICk7CiAgICAgICAgIHZvaWQgcVJlbW92ZVBvc3RSb3V0aW5lKCBRX0NsZWFuVXBG
dW5jdGlvbiApOwoKCiAgICAgICAgIHZvaWQgKnF0X2ZpbmRfb2JqX2NoaWxkKCBRT2JqZWN0ICos
IGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CiMgNDQgIi91c3IvbGliL3F0LTIuMy4xL2lu
Y2x1ZGUvcW9iamVjdC5oIiAyCiMgMSAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xc3RyaW5n
LmgiIDEKIyA0NSAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xb2JqZWN0LmgiIDIKIyAxICIv
dXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FldmVudC5oIiAxCiMgNDIgIi91c3IvbGliL3F0LTIu
My4xL2luY2x1ZGUvcWV2ZW50LmgiCiMgMSAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xd2lu
ZG93ZGVmcy5oIiAxCiMgNDMgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWV2ZW50LmgiIDIK
IyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FyZWdpb24uaCIgMQojIDQyICIvdXNyL2xp
Yi9xdC0yLjMuMS9pbmNsdWRlL3FyZWdpb24uaCIKIyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNs
dWRlL3FzaGFyZWQuaCIgMQojIDQzICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FyZWdpb24u
aCIgMgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXJlY3QuaCIgMQojIDQyICIvdXNy
L2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FyZWN0LmgiCiMgMSAiL3Vzci9saWIvcXQtMi4zLjEvaW5j
bHVkZS9xc2l6ZS5oIiAxCiMgNDIgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXNpemUuaCIK
IyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3Fwb2ludC5oIiAxCiMgNDIgIi91c3IvbGli
L3F0LTIuMy4xL2luY2x1ZGUvcXBvaW50LmgiCiMgMSAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVk
ZS9xd2luZG93ZGVmcy5oIiAxCiMgNDMgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXBvaW50
LmgiIDIKCgoKY2xhc3MgUVBvaW50CnsKcHVibGljOgogICAgUVBvaW50KCk7CiAgICBRUG9pbnQo
IGludCB4cG9zLCBpbnQgeXBvcyApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CgogICAgaW50
IHgoKSBjb25zdDsKICAgIGludCB5KCkgY29uc3Q7CiAgICB2b2lkIHNldFgoIGludCB4ICk7CiAg
ICB2b2lkIHNldFkoIGludCB5ICk7CgogICAgaW50IG1hbmhhdHRhbkxlbmd0aCgpIGNvbnN0OwoK
ICAgIFFDT09SRCAmcngoKTsKICAgIFFDT09SRCAmcnkoKTsKCiAgICBRUG9pbnQgJm9wZXJhdG9y
Kz0oIGNvbnN0IFFQb2ludCAmcCApOwogICAgUVBvaW50ICZvcGVyYXRvci09KCBjb25zdCBRUG9p
bnQgJnAgKTsKICAgIFFQb2ludCAmb3BlcmF0b3IqPSggaW50IGMgKTsKICAgIFFQb2ludCAmb3Bl
cmF0b3IqPSggZG91YmxlIGMgKTsKICAgIFFQb2ludCAmb3BlcmF0b3IvPSggaW50IGMgKTsKICAg
IFFQb2ludCAmb3BlcmF0b3IvPSggZG91YmxlIGMgKTsKCiAgICBmcmllbmQgaW5saW5lIGJvb2wg
b3BlcmF0b3I9PSggY29uc3QgUVBvaW50ICYsIGNvbnN0IFFQb2ludCAmICk7CiAgICBmcmllbmQg
aW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVBvaW50ICYsIGNvbnN0IFFQb2ludCAmICk7
CiAgICBmcmllbmQgaW5saW5lIFFQb2ludCBvcGVyYXRvcisoIGNvbnN0IFFQb2ludCAmLCBjb25z
dCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBRUG9pbnQgb3BlcmF0b3ItKCBjb25zdCBR
UG9pbnQgJiwgY29uc3QgUVBvaW50ICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVBvaW50IG9wZXJh
dG9yKiggY29uc3QgUVBvaW50ICYsIGludCApOwogICAgZnJpZW5kIGlubGluZSBRUG9pbnQgb3Bl
cmF0b3IqKCBpbnQsIGNvbnN0IFFQb2ludCAmICk7CiAgICBmcmllbmQgaW5saW5lIFFQb2ludCBv
cGVyYXRvciooIGNvbnN0IFFQb2ludCAmLCBkb3VibGUgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVBv
aW50IG9wZXJhdG9yKiggZG91YmxlLCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGlu
ZSBRUG9pbnQgb3BlcmF0b3ItKCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBR
UG9pbnQgb3BlcmF0b3IvKCBjb25zdCBRUG9pbnQgJiwgaW50ICk7CiAgICBmcmllbmQgaW5saW5l
IFFQb2ludCBvcGVyYXRvci8oIGNvbnN0IFFQb2ludCAmLCBkb3VibGUgKTsKCnByaXZhdGU6CiAg
ICBzdGF0aWMgdm9pZCB3YXJuaW5nRGl2QnlaZXJvKCk7CgoKCgoKICAgIFFDT09SRCB4cDsKICAg
IFFDT09SRCB5cDsKCn07CgoKCgoKCiAgICAgICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBR
RGF0YVN0cmVhbSAmLCBjb25zdCBRUG9pbnQgJiApOwogICAgICAgICBRRGF0YVN0cmVhbSAmb3Bl
cmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVBvaW50ICYgKTsKCgoKCgoKaW5saW5lIFFQb2ludDo6
UVBvaW50KCkKeyB4cD0wOyB5cD0wOyB9CgppbmxpbmUgUVBvaW50OjpRUG9pbnQoIGludCB4cG9z
LCBpbnQgeXBvcyApCnsgeHA9KFFDT09SRCl4cG9zOyB5cD0oUUNPT1JEKXlwb3M7IH0KCmlubGlu
ZSBib29sIFFQb2ludDo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4geHAgPT0gMCAmJiB5cCA9PSAw
OyB9CgppbmxpbmUgaW50IFFQb2ludDo6eCgpIGNvbnN0CnsgcmV0dXJuIHhwOyB9CgppbmxpbmUg
aW50IFFQb2ludDo6eSgpIGNvbnN0CnsgcmV0dXJuIHlwOyB9CgppbmxpbmUgdm9pZCBRUG9pbnQ6
OnNldFgoIGludCB4ICkKeyB4cCA9IChRQ09PUkQpeDsgfQoKaW5saW5lIHZvaWQgUVBvaW50Ojpz
ZXRZKCBpbnQgeSApCnsgeXAgPSAoUUNPT1JEKXk7IH0KCmlubGluZSBRQ09PUkQgJlFQb2ludDo6
cngoKQp7IHJldHVybiB4cDsgfQoKaW5saW5lIFFDT09SRCAmUVBvaW50OjpyeSgpCnsgcmV0dXJu
IHlwOyB9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yKz0oIGNvbnN0IFFQb2ludCAm
cCApCnsgeHArPXAueHA7IHlwKz1wLnlwOyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBRUG9pbnQg
JlFQb2ludDo6b3BlcmF0b3ItPSggY29uc3QgUVBvaW50ICZwICkKeyB4cC09cC54cDsgeXAtPXAu
eXA7IHJldHVybiAqdGhpczsgfQoKaW5saW5lIFFQb2ludCAmUVBvaW50OjpvcGVyYXRvcio9KCBp
bnQgYyApCnsgeHAqPShRQ09PUkQpYzsgeXAqPShRQ09PUkQpYzsgcmV0dXJuICp0aGlzOyB9Cgpp
bmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yKj0oIGRvdWJsZSBjICkKeyB4cD0oUUNPT1JE
KSh4cCpjKTsgeXA9KFFDT09SRCkoeXAqYyk7IHJldHVybiAqdGhpczsgfQoKaW5saW5lIGJvb2wg
b3BlcmF0b3I9PSggY29uc3QgUVBvaW50ICZwMSwgY29uc3QgUVBvaW50ICZwMiApCnsgcmV0dXJu
IHAxLnhwID09IHAyLnhwICYmIHAxLnlwID09IHAyLnlwOyB9CgppbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAyICkKeyByZXR1cm4gcDEueHAg
IT0gcDIueHAgfHwgcDEueXAgIT0gcDIueXA7IH0KCmlubGluZSBRUG9pbnQgb3BlcmF0b3IrKCBj
b25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAyICkKeyByZXR1cm4gUVBvaW50KHAxLnhw
K3AyLnhwLCBwMS55cCtwMi55cCk7IH0KCmlubGluZSBRUG9pbnQgb3BlcmF0b3ItKCBjb25zdCBR
UG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAyICkKeyByZXR1cm4gUVBvaW50KHAxLnhwLXAyLnhw
LCBwMS55cC1wMi55cCk7IH0KCmlubGluZSBRUG9pbnQgb3BlcmF0b3IqKCBjb25zdCBRUG9pbnQg
JnAsIGludCBjICkKeyByZXR1cm4gUVBvaW50KHAueHAqYywgcC55cCpjKTsgfQoKaW5saW5lIFFQ
b2ludCBvcGVyYXRvciooIGludCBjLCBjb25zdCBRUG9pbnQgJnAgKQp7IHJldHVybiBRUG9pbnQo
cC54cCpjLCBwLnlwKmMpOyB9CgppbmxpbmUgUVBvaW50IG9wZXJhdG9yKiggY29uc3QgUVBvaW50
ICZwLCBkb3VibGUgYyApCnsgcmV0dXJuIFFQb2ludCgoUUNPT1JEKShwLnhwKmMpLCAoUUNPT1JE
KShwLnlwKmMpKTsgfQoKaW5saW5lIFFQb2ludCBvcGVyYXRvciooIGRvdWJsZSBjLCBjb25zdCBR
UG9pbnQgJnAgKQp7IHJldHVybiBRUG9pbnQoKFFDT09SRCkocC54cCpjKSwgKFFDT09SRCkocC55
cCpjKSk7IH0KCmlubGluZSBRUG9pbnQgb3BlcmF0b3ItKCBjb25zdCBRUG9pbnQgJnAgKQp7IHJl
dHVybiBRUG9pbnQoLXAueHAsIC1wLnlwKTsgfQoKaW5saW5lIFFQb2ludCAmUVBvaW50OjpvcGVy
YXRvci89KCBpbnQgYyApCnsKCiAgICBpZiAoIGMgPT0gMCApCiAgICAgICAgd2FybmluZ0RpdkJ5
WmVybygpOwoKICAgIHhwLz0oUUNPT1JEKWM7CiAgICB5cC89KFFDT09SRCljOwogICAgcmV0dXJu
ICp0aGlzOwp9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yLz0oIGRvdWJsZSBjICkK
ewoKICAgIGlmICggYyA9PSAwLjAgKQogICAgICAgIHdhcm5pbmdEaXZCeVplcm8oKTsKCiAgICB4
cD0oUUNPT1JEKSh4cC9jKTsKICAgIHlwPShRQ09PUkQpKHlwL2MpOwogICAgcmV0dXJuICp0aGlz
Owp9CgppbmxpbmUgUVBvaW50IG9wZXJhdG9yLyggY29uc3QgUVBvaW50ICZwLCBpbnQgYyApCnsK
CiAgICBpZiAoIGMgPT0gMCApCiAgICAgICAgUVBvaW50Ojp3YXJuaW5nRGl2QnlaZXJvKCk7Cgog
ICAgcmV0dXJuIFFQb2ludChwLnhwL2MsIHAueXAvYyk7Cn0KCmlubGluZSBRUG9pbnQgb3BlcmF0
b3IvKCBjb25zdCBRUG9pbnQgJnAsIGRvdWJsZSBjICkKewoKICAgIGlmICggYyA9PSAwLjAgKQog
ICAgICAgIFFQb2ludDo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHJldHVybiBRUG9pbnQoKFFD
T09SRCkocC54cC9jKSwgKFFDT09SRCkocC55cC9jKSk7Cn0KIyA0MyAiL3Vzci9saWIvcXQtMi4z
LjEvaW5jbHVkZS9xc2l6ZS5oIiAyCgoKCmNsYXNzIFFTaXplCnsKcHVibGljOgogICAgUVNpemUo
KTsKICAgIFFTaXplKCBpbnQgdywgaW50IGggKTsKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0Owog
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKCiAgICBp
bnQgd2lkdGgoKSBjb25zdDsKICAgIGludCBoZWlnaHQoKSBjb25zdDsKICAgIHZvaWQgc2V0V2lk
dGgoIGludCB3ICk7CiAgICB2b2lkIHNldEhlaWdodCggaW50IGggKTsKICAgIHZvaWQgdHJhbnNw
b3NlKCk7CgogICAgUVNpemUgZXhwYW5kZWRUbyggY29uc3QgUVNpemUgJiApIGNvbnN0OwogICAg
UVNpemUgYm91bmRlZFRvKCBjb25zdCBRU2l6ZSAmICkgY29uc3Q7CgogICAgUUNPT1JEICZyd2lk
dGgoKTsKICAgIFFDT09SRCAmcmhlaWdodCgpOwoKICAgIFFTaXplICZvcGVyYXRvcis9KCBjb25z
dCBRU2l6ZSAmICk7CiAgICBRU2l6ZSAmb3BlcmF0b3ItPSggY29uc3QgUVNpemUgJiApOwogICAg
UVNpemUgJm9wZXJhdG9yKj0oIGludCBjICk7CiAgICBRU2l6ZSAmb3BlcmF0b3IqPSggZG91Ymxl
IGMgKTsKICAgIFFTaXplICZvcGVyYXRvci89KCBpbnQgYyApOwogICAgUVNpemUgJm9wZXJhdG9y
Lz0oIGRvdWJsZSBjICk7CgogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0
IFFTaXplICYsIGNvbnN0IFFTaXplICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KCBjb25zdCBRU2l6ZSAmLCBjb25zdCBRU2l6ZSAmICk7CiAgICBmcmllbmQgaW5saW5lIFFT
aXplIG9wZXJhdG9yKyggY29uc3QgUVNpemUgJiwgY29uc3QgUVNpemUgJiApOwogICAgZnJpZW5k
IGlubGluZSBRU2l6ZSBvcGVyYXRvci0oIGNvbnN0IFFTaXplICYsIGNvbnN0IFFTaXplICYgKTsK
ICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBjb25zdCBRU2l6ZSAmLCBpbnQgKTsK
ICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBpbnQsIGNvbnN0IFFTaXplICYgKTsK
ICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBjb25zdCBRU2l6ZSAmLCBkb3VibGUg
KTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBkb3VibGUsIGNvbnN0IFFTaXpl
ICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAmLCBp
bnQgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAmLCBk
b3VibGUgKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgdm9pZCB3YXJuaW5nRGl2QnlaZXJvKCk7Cgog
ICAgUUNPT1JEIHdkOwogICAgUUNPT1JEIGh0Owp9OwoKCgoKCgogICAgICAgICBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVNpemUgJiApOwogICAgICAgICBR
RGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVNpemUgJiApOwoKCgoKCgpp
bmxpbmUgUVNpemU6OlFTaXplKCkKeyB3ZCA9IGh0ID0gLTE7IH0KCmlubGluZSBRU2l6ZTo6UVNp
emUoIGludCB3LCBpbnQgaCApCnsgd2Q9KFFDT09SRCl3OyBodD0oUUNPT1JEKWg7IH0KCmlubGlu
ZSBib29sIFFTaXplOjppc051bGwoKSBjb25zdAp7IHJldHVybiB3ZD09MCAmJiBodD09MDsgfQoK
aW5saW5lIGJvb2wgUVNpemU6OmlzRW1wdHkoKSBjb25zdAp7IHJldHVybiB3ZDwxIHx8IGh0PDE7
IH0KCmlubGluZSBib29sIFFTaXplOjppc1ZhbGlkKCkgY29uc3QKeyByZXR1cm4gd2Q+PTAgJiYg
aHQ+PTA7IH0KCmlubGluZSBpbnQgUVNpemU6OndpZHRoKCkgY29uc3QKeyByZXR1cm4gd2Q7IH0K
CmlubGluZSBpbnQgUVNpemU6OmhlaWdodCgpIGNvbnN0CnsgcmV0dXJuIGh0OyB9CgppbmxpbmUg
dm9pZCBRU2l6ZTo6c2V0V2lkdGgoIGludCB3ICkKeyB3ZD0oUUNPT1JEKXc7IH0KCmlubGluZSB2
b2lkIFFTaXplOjpzZXRIZWlnaHQoIGludCBoICkKeyBodD0oUUNPT1JEKWg7IH0KCmlubGluZSBR
Q09PUkQgJlFTaXplOjpyd2lkdGgoKQp7IHJldHVybiB3ZDsgfQoKaW5saW5lIFFDT09SRCAmUVNp
emU6OnJoZWlnaHQoKQp7IHJldHVybiBodDsgfQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0
b3IrPSggY29uc3QgUVNpemUgJnMgKQp7IHdkKz1zLndkOyBodCs9cy5odDsgcmV0dXJuICp0aGlz
OyB9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVyYXRvci09KCBjb25zdCBRU2l6ZSAmcyApCnsg
d2QtPXMud2Q7IGh0LT1zLmh0OyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6
Om9wZXJhdG9yKj0oIGludCBjICkKeyB3ZCo9KFFDT09SRCljOyBodCo9KFFDT09SRCljOyByZXR1
cm4gKnRoaXM7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6Om9wZXJhdG9yKj0oIGRvdWJsZSBjICkK
eyB3ZD0oUUNPT1JEKSh3ZCpjKTsgaHQ9KFFDT09SRCkoaHQqYyk7IHJldHVybiAqdGhpczsgfQoK
aW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVNpemUgJnMxLCBjb25zdCBRU2l6ZSAmczIg
KQp7IHJldHVybiBzMS53ZCA9PSBzMi53ZCAmJiBzMS5odCA9PSBzMi5odDsgfQoKaW5saW5lIGJv
b2wgb3BlcmF0b3IhPSggY29uc3QgUVNpemUgJnMxLCBjb25zdCBRU2l6ZSAmczIgKQp7IHJldHVy
biBzMS53ZCAhPSBzMi53ZCB8fCBzMS5odCAhPSBzMi5odDsgfQoKaW5saW5lIFFTaXplIG9wZXJh
dG9yKyggY29uc3QgUVNpemUgJiBzMSwgY29uc3QgUVNpemUgJiBzMiApCnsgcmV0dXJuIFFTaXpl
KHMxLndkK3MyLndkLCBzMS5odCtzMi5odCk7IH0KCmlubGluZSBRU2l6ZSBvcGVyYXRvci0oIGNv
bnN0IFFTaXplICZzMSwgY29uc3QgUVNpemUgJnMyICkKeyByZXR1cm4gUVNpemUoczEud2QtczIu
d2QsIHMxLmh0LXMyLmh0KTsgfQoKaW5saW5lIFFTaXplIG9wZXJhdG9yKiggY29uc3QgUVNpemUg
JnMsIGludCBjICkKeyByZXR1cm4gUVNpemUocy53ZCpjLCBzLmh0KmMpOyB9CgppbmxpbmUgUVNp
emUgb3BlcmF0b3IqKCBpbnQgYywgY29uc3QgUVNpemUgJnMgKQp7IHJldHVybiBRU2l6ZShzLndk
KmMsIHMuaHQqYyk7IH0KCmlubGluZSBRU2l6ZSBvcGVyYXRvciooIGNvbnN0IFFTaXplICZzLCBk
b3VibGUgYyApCnsgcmV0dXJuIFFTaXplKChRQ09PUkQpKHMud2QqYyksIChRQ09PUkQpKHMuaHQq
YykpOyB9CgppbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBkb3VibGUgYywgY29uc3QgUVNpemUgJnMg
KQp7IHJldHVybiBRU2l6ZSgoUUNPT1JEKShzLndkKmMpLCAoUUNPT1JEKShzLmh0KmMpKTsgfQoK
aW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3IvPSggaW50IGMgKQp7CgogICAgaWYgKCBjID09
IDAgKQogICAgICAgIHdhcm5pbmdEaXZCeVplcm8oKTsKCiAgICB3ZC89KFFDT09SRCljOyBodC89
KFFDT09SRCljOwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVy
YXRvci89KCBkb3VibGUgYyApCnsKCiAgICBpZiAoIGMgPT0gMC4wICkKICAgICAgICB3YXJuaW5n
RGl2QnlaZXJvKCk7CgogICAgd2Q9KFFDT09SRCkod2QvYyk7IGh0PShRQ09PUkQpKGh0L2MpOwog
ICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAm
cywgaW50IGMgKQp7CgogICAgaWYgKCBjID09IDAgKQogICAgICAgIFFTaXplOjp3YXJuaW5nRGl2
QnlaZXJvKCk7CgogICAgcmV0dXJuIFFTaXplKHMud2QvYywgcy5odC9jKTsKfQoKaW5saW5lIFFT
aXplIG9wZXJhdG9yLyggY29uc3QgUVNpemUgJnMsIGRvdWJsZSBjICkKewoKICAgIGlmICggYyA9
PSAwLjAgKQogICAgICAgIFFTaXplOjp3YXJuaW5nRGl2QnlaZXJvKCk7CgogICAgcmV0dXJuIFFT
aXplKChRQ09PUkQpKHMud2QvYyksIChRQ09PUkQpKHMuaHQvYykpOwp9CgppbmxpbmUgUVNpemUg
UVNpemU6OmV4cGFuZGVkVG8oIGNvbnN0IFFTaXplICYgb3RoZXJTaXplICkgY29uc3QKewogICAg
cmV0dXJuIFFTaXplKCAoKHdkKSA+IChvdGhlclNpemUud2QpID8gKHdkKSA6IChvdGhlclNpemUu
d2QpKSwgKChodCkgPiAob3RoZXJTaXplLmh0KSA/IChodCkgOiAob3RoZXJTaXplLmh0KSkgKTsK
fQoKaW5saW5lIFFTaXplIFFTaXplOjpib3VuZGVkVG8oIGNvbnN0IFFTaXplICYgb3RoZXJTaXpl
ICkgY29uc3QKewogICAgcmV0dXJuIFFTaXplKCAoKHdkKSA8IChvdGhlclNpemUud2QpID8gKHdk
KSA6IChvdGhlclNpemUud2QpKSwgKChodCkgPCAob3RoZXJTaXplLmh0KSA/IChodCkgOiAob3Ro
ZXJTaXplLmh0KSkgKTsKfQojIDQzICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FyZWN0Lmgi
IDIKCgoKCgoKCmNsYXNzIFFSZWN0CnsKcHVibGljOgogICAgUVJlY3QoKSB7IHgxID0geTEgPSAw
OyB4MiA9IHkyID0gLTE7IH0KICAgIFFSZWN0KCBjb25zdCBRUG9pbnQgJnRvcGxlZnQsIGNvbnN0
IFFQb2ludCAmYm90dG9tcmlnaHQgKTsKICAgIFFSZWN0KCBjb25zdCBRUG9pbnQgJnRvcGxlZnQs
IGNvbnN0IFFTaXplICZzaXplICk7CiAgICBRUmVjdCggaW50IGxlZnQsIGludCB0b3AsIGludCB3
aWR0aCwgaW50IGhlaWdodCApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29sIGlz
RW1wdHkoKSBjb25zdDsKICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogICAgUVJlY3Qgbm9ybWFs
aXplKCkgY29uc3Q7CgogICAgaW50IGxlZnQoKSBjb25zdDsKICAgIGludCB0b3AoKSBjb25zdDsK
ICAgIGludCByaWdodCgpIGNvbnN0OwogICAgaW50IGJvdHRvbSgpIGNvbnN0OwoKICAgIFFDT09S
RCAmckxlZnQoKTsKICAgIFFDT09SRCAmclRvcCgpOwogICAgUUNPT1JEICZyUmlnaHQoKTsKICAg
IFFDT09SRCAmckJvdHRvbSgpOwoKICAgIGludCB4KCkgY29uc3Q7CiAgICBpbnQgeSgpIGNvbnN0
OwogICAgdm9pZCBzZXRMZWZ0KCBpbnQgcG9zICk7CiAgICB2b2lkIHNldFRvcCggaW50IHBvcyAp
OwogICAgdm9pZCBzZXRSaWdodCggaW50IHBvcyApOwogICAgdm9pZCBzZXRCb3R0b20oIGludCBw
b3MgKTsKICAgIHZvaWQgc2V0WCggaW50IHggKTsKICAgIHZvaWQgc2V0WSggaW50IHkgKTsKCiAg
ICBRUG9pbnQgdG9wTGVmdCgpIGNvbnN0OwogICAgUVBvaW50IGJvdHRvbVJpZ2h0KCkgY29uc3Q7
CiAgICBRUG9pbnQgdG9wUmlnaHQoKSBjb25zdDsKICAgIFFQb2ludCBib3R0b21MZWZ0KCkgY29u
c3Q7CiAgICBRUG9pbnQgY2VudGVyKCkgY29uc3Q7CgogICAgdm9pZCByZWN0KCBpbnQgKngsIGlu
dCAqeSwgaW50ICp3LCBpbnQgKmggKSBjb25zdDsKICAgIHZvaWQgY29vcmRzKCBpbnQgKngxLCBp
bnQgKnkxLCBpbnQgKngyLCBpbnQgKnkyICkgY29uc3Q7CgogICAgdm9pZCBtb3ZlVG9wTGVmdCgg
Y29uc3QgUVBvaW50ICZwICk7CiAgICB2b2lkIG1vdmVCb3R0b21SaWdodCggY29uc3QgUVBvaW50
ICZwICk7CiAgICB2b2lkIG1vdmVUb3BSaWdodCggY29uc3QgUVBvaW50ICZwICk7CiAgICB2b2lk
IG1vdmVCb3R0b21MZWZ0KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgbW92ZUNlbnRlcigg
Y29uc3QgUVBvaW50ICZwICk7CiAgICB2b2lkIG1vdmVCeSggaW50IGR4LCBpbnQgZHkgKTsKCiAg
ICB2b2lkIHNldFJlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoICk7CiAgICB2b2lkIHNl
dENvb3JkcyggaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyICk7CgogICAgUVNpemUgc2l6
ZSgpIGNvbnN0OwogICAgaW50IHdpZHRoKCkgY29uc3Q7CiAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7
CiAgICB2b2lkIHNldFdpZHRoKCBpbnQgdyApOwogICAgdm9pZCBzZXRIZWlnaHQoIGludCBoICk7
CiAgICB2b2lkIHNldFNpemUoIGNvbnN0IFFTaXplICZzICk7CgogICAgUVJlY3Qgb3BlcmF0b3J8
KGNvbnN0IFFSZWN0ICZyKSBjb25zdDsKICAgIFFSZWN0IG9wZXJhdG9yJihjb25zdCBRUmVjdCAm
cikgY29uc3Q7CiAgICBRUmVjdCYgb3BlcmF0b3J8PShjb25zdCBRUmVjdCAmcik7CiAgICBRUmVj
dCYgb3BlcmF0b3ImPShjb25zdCBRUmVjdCAmcik7CgogICAgYm9vbCBjb250YWlucyggY29uc3Qg
UVBvaW50ICZwLCBib29sIHByb3Blcj1GQUxTRSApIGNvbnN0OwogICAgYm9vbCBjb250YWlucygg
aW50IHgsIGludCB5LCBib29sIHByb3Blcj1GQUxTRSApIGNvbnN0OwogICAgYm9vbCBjb250YWlu
cyggY29uc3QgUVJlY3QgJnIsIGJvb2wgcHJvcGVyPUZBTFNFICkgY29uc3Q7CiAgICBRUmVjdCB1
bml0ZSggY29uc3QgUVJlY3QgJnIgKSBjb25zdDsKICAgIFFSZWN0IGludGVyc2VjdCggY29uc3Qg
UVJlY3QgJnIgKSBjb25zdDsKICAgIGJvb2wgaW50ZXJzZWN0cyggY29uc3QgUVJlY3QgJnIgKSBj
b25zdDsKCiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRUmVjdCAmLCBjb25zdCBR
UmVjdCAmICk7CiAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRUmVjdCAmLCBjb25z
dCBRUmVjdCAmICk7Cgpwcml2YXRlOgoKCgoKCgogICAgUUNPT1JEIHgxOwogICAgUUNPT1JEIHkx
OwogICAgUUNPT1JEIHgyOwogICAgUUNPT1JEIHkyOwoKfTsKCiAgICAgICAgIGJvb2wgb3BlcmF0
b3I9PSggY29uc3QgUVJlY3QgJiwgY29uc3QgUVJlY3QgJiApOwogICAgICAgICBib29sIG9wZXJh
dG9yIT0oIGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKCgoKCgoKICAgICAgICAgUURh
dGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFSZWN0ICYgKTsKICAg
ICAgICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFSZWN0ICYgKTsK
CgoKCgoKaW5saW5lIFFSZWN0OjpRUmVjdCggaW50IGxlZnQsIGludCB0b3AsIGludCB3aWR0aCwg
aW50IGhlaWdodCApCnsKICAgIHgxID0gKFFDT09SRClsZWZ0OwogICAgeTEgPSAoUUNPT1JEKXRv
cDsKICAgIHgyID0gKFFDT09SRCkobGVmdCt3aWR0aC0xKTsKICAgIHkyID0gKFFDT09SRCkodG9w
K2hlaWdodC0xKTsKfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJu
IHgyID09IHgxLTEgJiYgeTIgPT0geTEtMTsgfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmlzRW1wdHko
KSBjb25zdAp7IHJldHVybiB4MSA+IHgyIHx8IHkxID4geTI7IH0KCmlubGluZSBib29sIFFSZWN0
Ojppc1ZhbGlkKCkgY29uc3QKeyByZXR1cm4geDEgPD0geDIgJiYgeTEgPD0geTI7IH0KCmlubGlu
ZSBpbnQgUVJlY3Q6OmxlZnQoKSBjb25zdAp7IHJldHVybiB4MTsgfQoKaW5saW5lIGludCBRUmVj
dDo6dG9wKCkgY29uc3QKeyByZXR1cm4geTE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OnJpZ2h0KCkg
Y29uc3QKeyByZXR1cm4geDI7IH0KCmlubGluZSBpbnQgUVJlY3Q6OmJvdHRvbSgpIGNvbnN0Cnsg
cmV0dXJuIHkyOyB9CgppbmxpbmUgUUNPT1JEICZRUmVjdDo6ckxlZnQoKQp7IHJldHVybiB4MTsg
fQoKaW5saW5lIFFDT09SRCAmIFFSZWN0OjpyVG9wKCkKeyByZXR1cm4geTE7IH0KCmlubGluZSBR
Q09PUkQgJiBRUmVjdDo6clJpZ2h0KCkKeyByZXR1cm4geDI7IH0KCmlubGluZSBRQ09PUkQgJiBR
UmVjdDo6ckJvdHRvbSgpCnsgcmV0dXJuIHkyOyB9CgppbmxpbmUgaW50IFFSZWN0Ojp4KCkgY29u
c3QKeyByZXR1cm4geDE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OnkoKSBjb25zdAp7IHJldHVybiB5
MTsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldExlZnQoIGludCBwb3MgKQp7IHgxID0gKFFDT09S
RClwb3M7IH0KCmlubGluZSB2b2lkIFFSZWN0OjpzZXRUb3AoIGludCBwb3MgKQp7IHkxID0gKFFD
T09SRClwb3M7IH0KCmlubGluZSB2b2lkIFFSZWN0OjpzZXRSaWdodCggaW50IHBvcyApCnsgeDIg
PSAoUUNPT1JEKXBvczsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldEJvdHRvbSggaW50IHBvcyAp
CnsgeTIgPSAoUUNPT1JEKXBvczsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldFgoIGludCB4ICkK
eyB4MSA9IChRQ09PUkQpeDsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldFkoIGludCB5ICkKeyB5
MSA9IChRQ09PUkQpeTsgfQoKaW5saW5lIFFQb2ludCBRUmVjdDo6dG9wTGVmdCgpIGNvbnN0Cnsg
cmV0dXJuIFFQb2ludCh4MSwgeTEpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0Ojpib3R0b21SaWdo
dCgpIGNvbnN0CnsgcmV0dXJuIFFQb2ludCh4MiwgeTIpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0
Ojp0b3BSaWdodCgpIGNvbnN0CnsgcmV0dXJuIFFQb2ludCh4MiwgeTEpOyB9CgppbmxpbmUgUVBv
aW50IFFSZWN0Ojpib3R0b21MZWZ0KCkgY29uc3QKeyByZXR1cm4gUVBvaW50KHgxLCB5Mik7IH0K
CmlubGluZSBRUG9pbnQgUVJlY3Q6OmNlbnRlcigpIGNvbnN0CnsgcmV0dXJuIFFQb2ludCgoeDEr
eDIpLzIsICh5MSt5MikvMik7IH0KCmlubGluZSBpbnQgUVJlY3Q6OndpZHRoKCkgY29uc3QKeyBy
ZXR1cm4geDIgLSB4MSArIDE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OmhlaWdodCgpIGNvbnN0Cnsg
cmV0dXJuIHkyIC0geTEgKyAxOyB9CgppbmxpbmUgUVNpemUgUVJlY3Q6OnNpemUoKSBjb25zdAp7
IHJldHVybiBRU2l6ZSh4Mi14MSsxLCB5Mi15MSsxKTsgfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmNv
bnRhaW5zKCBpbnQgeCwgaW50IHksIGJvb2wgcHJvcGVyICkgY29uc3QKewogICAgaWYgKCBwcm9w
ZXIgKQogICAgICAgIHJldHVybiB4ID4geDEgJiYgeCA8IHgyICYmCiAgICAgICAgICAgICAgIHkg
PiB5MSAmJiB5IDwgeTI7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIHggPj0geDEgJiYgeCA8PSB4
MiAmJgogICAgICAgICAgICAgICB5ID49IHkxICYmIHkgPD0geTI7Cn0KIyA0NCAiL3Vzci9saWIv
cXQtMi4zLjEvaW5jbHVkZS9xcmVnaW9uLmgiIDIKIyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNs
dWRlL3FzdHJpbmcuaCIgMQojIDQ1ICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FyZWdpb24u
aCIgMgoKCgpjbGFzcyBRUmVnaW9uCnsKcHVibGljOgogICAgZW51bSBSZWdpb25UeXBlIHsgUmVj
dGFuZ2xlLCBFbGxpcHNlIH07CgogICAgUVJlZ2lvbigpOwogICAgUVJlZ2lvbiggaW50IHgsIGlu
dCB5LCBpbnQgdywgaW50IGgsIFJlZ2lvblR5cGUgPSBSZWN0YW5nbGUgKTsKICAgIFFSZWdpb24o
IGNvbnN0IFFSZWN0ICYsIFJlZ2lvblR5cGUgPSBSZWN0YW5nbGUgKTsKICAgIFFSZWdpb24oIGNv
bnN0IFFQb2ludEFycmF5ICYsIGJvb2wgd2luZGluZz1GQUxTRSApOwogICAgUVJlZ2lvbiggY29u
c3QgUVJlZ2lvbiAmICk7CiAgICBRUmVnaW9uKCBjb25zdCBRQml0bWFwICYgKTsKICAgflFSZWdp
b24oKTsKICAgIFFSZWdpb24gJm9wZXJhdG9yPSggY29uc3QgUVJlZ2lvbiAmICk7CgogICAgYm9v
bCBpc051bGwoKSBjb25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwoKICAgIGJvb2wgY29u
dGFpbnMoIGNvbnN0IFFQb2ludCAmcCApIGNvbnN0OwogICAgYm9vbCBjb250YWlucyggY29uc3Qg
UVJlY3QgJnIgKSBjb25zdDsKCiAgICB2b2lkIHRyYW5zbGF0ZSggaW50IGR4LCBpbnQgZHkgKTsK
CiAgICBRUmVnaW9uIHVuaXRlKCBjb25zdCBRUmVnaW9uICYgKSBjb25zdDsKICAgIFFSZWdpb24g
aW50ZXJzZWN0KCBjb25zdCBRUmVnaW9uICYpIGNvbnN0OwogICAgUVJlZ2lvbiBzdWJ0cmFjdCgg
Y29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uIGVvciggY29uc3QgUVJlZ2lvbiAm
ICkgY29uc3Q7CgogICAgUVJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CiAgICBRQXJyYXk8UVJl
Y3Q+IHJlY3RzKCkgY29uc3Q7CiAgICB2b2lkIHNldFJlY3RzKCBjb25zdCBRUmVjdCAqLCBpbnQg
KTsKCiAgICBRUmVnaW9uIG9wZXJhdG9yfCggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBR
UmVnaW9uIG9wZXJhdG9yKyggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uIG9w
ZXJhdG9yJiggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uIG9wZXJhdG9yLSgg
Y29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uIG9wZXJhdG9yXiggY29uc3QgUVJl
Z2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uJiBvcGVyYXRvcnw9KCBjb25zdCBRUmVnaW9uICYg
KTsKICAgIFFSZWdpb24mIG9wZXJhdG9yKz0oIGNvbnN0IFFSZWdpb24gJiApOwogICAgUVJlZ2lv
biYgb3BlcmF0b3ImPSggY29uc3QgUVJlZ2lvbiAmICk7CiAgICBRUmVnaW9uJiBvcGVyYXRvci09
KCBjb25zdCBRUmVnaW9uICYgKTsKICAgIFFSZWdpb24mIG9wZXJhdG9yXj0oIGNvbnN0IFFSZWdp
b24gJiApOwoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAg
ICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFSZWdpb24gJnIgKSBjb25zdAogICAgICAgICAgICAg
ICAgICAgICAgICB7IHJldHVybiAhKG9wZXJhdG9yPT0ocikpOyB9CgoKCgogICAgUmVnaW9uIGhh
bmRsZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnJnbjsgfQojIDEwNiAiL3Vzci9saWIvcXQtMi4z
LjEvaW5jbHVkZS9xcmVnaW9uLmgiCiAgICBmcmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwo
IFFEYXRhU3RyZWFtICYsIGNvbnN0IFFSZWdpb24gJiApOwogICAgZnJpZW5kIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRUmVnaW9uICYgKTsKCnByaXZhdGU6CiAgICBR
UmVnaW9uKCBib29sICk7CiAgICBRUmVnaW9uIGNvcHkoKSBjb25zdDsKICAgIHZvaWQgZGV0YWNo
KCk7CgoKCiAgICB2b2lkIGV4ZWMoIGNvbnN0IFFCeXRlQXJyYXkgJiwgaW50IHZlciA9IDAgKTsK
ICAgIHN0cnVjdCBRUmVnaW9uRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKCgoKICAgICAgICBSZWdp
b24gcmduOwoKCgoKCiAgICAgICAgYm9vbCBpc19udWxsOwogICAgfSAqZGF0YTsKfTsKIyAxNDkg
Ii91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXJlZ2lvbi5oIgogICAgICAgICBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVJlZ2lvbiAmICk7CiAgICAgICAg
IFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRUmVnaW9uICYgKTsKIyA0
NCAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xZXZlbnQuaCIgMgojIDEgIi91c3IvbGliL3F0
LTIuMy4xL2luY2x1ZGUvcW5hbWVzcGFjZS5oIiAxCiMgNDUgIi91c3IvbGliL3F0LTIuMy4xL2lu
Y2x1ZGUvcWV2ZW50LmgiIDIKIyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FtaW1lLmgi
IDEKIyA0MiAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xbWltZS5oIgojIDEgIi91c3IvbGli
L3F0LTIuMy4xL2luY2x1ZGUvcXdpbmRvd2RlZnMuaCIgMQojIDQzICIvdXNyL2xpYi9xdC0yLjMu
MS9pbmNsdWRlL3FtaW1lLmgiIDIKCgoKCmNsYXNzIFFNaW1lU291cmNlIHsKcHVibGljOgogICAg
dmlydHVhbCB+UU1pbWVTb3VyY2UoKTsKICAgIHZpcnR1YWwgY29uc3QgY2hhciogZm9ybWF0KCBp
bnQgbiA9IDAgKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIGJvb2wgcHJvdmlkZXMoIGNvbnN0IGNo
YXIqICkgY29uc3Q7CiAgICB2aXJ0dWFsIFFCeXRlQXJyYXkgZW5jb2RlZERhdGEoIGNvbnN0IGNo
YXIqICkgY29uc3QgPSAwOwp9OwoKY2xhc3MgUU1pbWVTb3VyY2VGYWN0b3J5RGF0YTsKY2xhc3Mg
UVN0cmluZ0xpc3Q7CgpjbGFzcyBRTWltZVNvdXJjZUZhY3RvcnkgewpwdWJsaWM6CiAgICBRTWlt
ZVNvdXJjZUZhY3RvcnkoKTsKICAgIHZpcnR1YWwgflFNaW1lU291cmNlRmFjdG9yeSgpOwoKICAg
IHN0YXRpYyBRTWltZVNvdXJjZUZhY3RvcnkqIGRlZmF1bHRGYWN0b3J5KCk7CiAgICBzdGF0aWMg
dm9pZCBzZXREZWZhdWx0RmFjdG9yeSggUU1pbWVTb3VyY2VGYWN0b3J5KiApOwoKICAgIHZpcnR1
YWwgY29uc3QgUU1pbWVTb3VyY2UqIGRhdGEoY29uc3QgUVN0cmluZyYgYWJzX25hbWUpIGNvbnN0
OwogICAgdmlydHVhbCBRU3RyaW5nIG1ha2VBYnNvbHV0ZShjb25zdCBRU3RyaW5nJiBhYnNfb3Jf
cmVsX25hbWUsIGNvbnN0IFFTdHJpbmcmIGNvbnRleHQpIGNvbnN0OwogICAgY29uc3QgUU1pbWVT
b3VyY2UqIGRhdGEoY29uc3QgUVN0cmluZyYgYWJzX29yX3JlbF9uYW1lLCBjb25zdCBRU3RyaW5n
JiBjb250ZXh0KSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dCggY29uc3QgUVN0cmlu
ZyYgYWJzX25hbWUsIGNvbnN0IFFTdHJpbmcmIHRleHQgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bWFnZSggY29uc3QgUVN0cmluZyYgYWJzX25hbWUsIGNvbnN0IFFJbWFnZSYgaW0gKTsKICAgIHZp
cnR1YWwgdm9pZCBzZXRQaXhtYXAoIGNvbnN0IFFTdHJpbmcmIGFic19uYW1lLCBjb25zdCBRUGl4
bWFwJiBwbSApOwogICAgdmlydHVhbCB2b2lkIHNldERhdGEoIGNvbnN0IFFTdHJpbmcmIGFic19u
YW1lLCBRTWltZVNvdXJjZSogZGF0YSApOwogICAgdmlydHVhbCB2b2lkIHNldEZpbGVQYXRoKCBj
b25zdCBRU3RyaW5nTGlzdCYgKTsKICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgZmlsZVBhdGgoKSBj
b25zdDsKICAgIHZvaWQgYWRkRmlsZVBhdGgoIGNvbnN0IFFTdHJpbmcmICk7CiAgICB2aXJ0dWFs
IHZvaWQgc2V0RXh0ZW5zaW9uVHlwZSggY29uc3QgUVN0cmluZyYgZXh0LCBjb25zdCBjaGFyKiBt
aW1ldHlwZSApOwoKcHJpdmF0ZToKICAgIFFNaW1lU291cmNlRmFjdG9yeURhdGEqIGQ7Cn07CiMg
NDYgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWV2ZW50LmgiIDIKCgoKY2xhc3MgUUV2ZW50
OiBwdWJsaWMgUXQKewpwdWJsaWM6CiAgICBlbnVtIFR5cGUgewoKCgoKCgogICAgICAgIE5vbmUg
PSAwLAoKCiAgICAgICAgVGltZXIgPSAxLAogICAgICAgIE1vdXNlQnV0dG9uUHJlc3MgPSAyLAog
ICAgICAgIE1vdXNlQnV0dG9uUmVsZWFzZSA9IDMsCiAgICAgICAgTW91c2VCdXR0b25EYmxDbGlj
az0gNCwKICAgICAgICBNb3VzZU1vdmUgPSA1LAogICAgICAgIEtleVByZXNzID0gNiwKICAgICAg
ICBLZXlSZWxlYXNlID0gNywKICAgICAgICBGb2N1c0luID0gOCwKICAgICAgICBGb2N1c091dCA9
IDksCiAgICAgICAgRW50ZXIgPSAxMCwKICAgICAgICBMZWF2ZSA9IDExLAogICAgICAgIFBhaW50
ID0gMTIsCiAgICAgICAgTW92ZSA9IDEzLAogICAgICAgIFJlc2l6ZSA9IDE0LAogICAgICAgIENy
ZWF0ZSA9IDE1LAogICAgICAgIERlc3Ryb3kgPSAxNiwKICAgICAgICBTaG93ID0gMTcsCiAgICAg
ICAgSGlkZSA9IDE4LAogICAgICAgIENsb3NlID0gMTksCiAgICAgICAgUXVpdCA9IDIwLAogICAg
ICAgIFJlcGFyZW50ID0gMjEsCiAgICAgICAgU2hvd01pbmltaXplZCA9IDIyLAogICAgICAgIFNo
b3dOb3JtYWwgPSAyMywKICAgICAgICBXaW5kb3dBY3RpdmF0ZSA9IDI0LAogICAgICAgIFdpbmRv
d0RlYWN0aXZhdGUgPSAyNSwKICAgICAgICBTaG93VG9QYXJlbnQgPSAyNiwKICAgICAgICBIaWRl
VG9QYXJlbnQgPSAyNywKICAgICAgICBTaG93TWF4aW1pemVkID0gMjgsCiAgICAgICAgQWNjZWwg
PSAzMCwKICAgICAgICBXaGVlbCA9IDMxLAogICAgICAgIEFjY2VsQXZhaWxhYmxlID0gMzIsCiAg
ICAgICAgQ2FwdGlvbkNoYW5nZSA9IDMzLAogICAgICAgIEljb25DaGFuZ2UgPSAzNCwKICAgICAg
ICBQYXJlbnRGb250Q2hhbmdlID0gMzUsCiAgICAgICAgQXBwbGljYXRpb25Gb250Q2hhbmdlID0g
MzYsCiAgICAgICAgUGFyZW50UGFsZXR0ZUNoYW5nZSA9IDM3LAogICAgICAgIEFwcGxpY2F0aW9u
UGFsZXR0ZUNoYW5nZSA9IDM4LAogICAgICAgIENsaXBib2FyZCA9IDQwLAogICAgICAgIFNwZWVj
aCA9IDQyLAogICAgICAgIFNvY2tBY3QgPSA1MCwKICAgICAgICBBY2NlbE92ZXJyaWRlID0gNTEs
CiAgICAgICAgRHJhZ0VudGVyID0gNjAsCiAgICAgICAgRHJhZ01vdmUgPSA2MSwKICAgICAgICBE
cmFnTGVhdmUgPSA2MiwKICAgICAgICBEcm9wID0gNjMsCiAgICAgICAgRHJhZ1Jlc3BvbnNlID0g
NjQsCiAgICAgICAgQ2hpbGRJbnNlcnRlZCA9IDcwLAogICAgICAgIENoaWxkUmVtb3ZlZCA9IDcx
LAogICAgICAgIExheW91dEhpbnQgPSA3MiwKICAgICAgICBTaG93V2luZG93UmVxdWVzdCA9IDcz
LAogICAgICAgIEFjdGl2YXRlQ29udHJvbCA9IDgwLAogICAgICAgIERlYWN0aXZhdGVDb250cm9s
ID0gODEsCiAgICAgICAgVXNlciA9IDEwMDAKICAgIH07CgogICAgUUV2ZW50KCBUeXBlIHR5cGUg
KSA6IHQodHlwZSksIHBvc3RlZChGQUxTRSkge30KICAgIHZpcnR1YWwgflFFdmVudCgpOwogICAg
VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gdDsgfQpwcm90ZWN0ZWQ6CiAgICBUeXBlIHQ7CnBy
aXZhdGU6CiAgICBib29sIHBvc3RlZDsKCgoKCiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0aW9u
OwogICAgZnJpZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247Cn07CgoKY2xhc3MgUVRpbWVyRXZl
bnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUVRpbWVyRXZlbnQoIGludCB0aW1lcklk
ICkKICAgICAgICA6IFFFdmVudChUaW1lciksIGlkKHRpbWVySWQpIHt9CiAgICBpbnQgdGltZXJJ
ZCgpIGNvbnN0IHsgcmV0dXJuIGlkOyB9CnByb3RlY3RlZDoKICAgIGludCBpZDsKfTsKCgpjbGFz
cyBRTW91c2VFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRTW91c2VFdmVudCgg
VHlwZSB0eXBlLCBjb25zdCBRUG9pbnQgJnBvcywgaW50IGJ1dHRvbiwgaW50IHN0YXRlICk7Cgog
ICAgUU1vdXNlRXZlbnQoIFR5cGUgdHlwZSwgY29uc3QgUVBvaW50ICZwb3MsIGNvbnN0IFFQb2lu
dCZnbG9iYWxQb3MsCiAgICAgICAgICAgICAgICAgaW50IGJ1dHRvbiwgaW50IHN0YXRlICkKICAg
ICAgICA6IFFFdmVudCh0eXBlKSwgcChwb3MpLCBnKGdsb2JhbFBvcyksIGIoYnV0dG9uKSxzKCh1
c2hvcnQpc3RhdGUpIHt9OwoKICAgIGNvbnN0IFFQb2ludCAmcG9zKCkgY29uc3QgeyByZXR1cm4g
cDsgfQogICAgY29uc3QgUVBvaW50ICZnbG9iYWxQb3MoKSBjb25zdCB7IHJldHVybiBnOyB9CiAg
ICBpbnQgeCgpIGNvbnN0IHsgcmV0dXJuIHAueCgpOyB9CiAgICBpbnQgeSgpIGNvbnN0IHsgcmV0
dXJuIHAueSgpOyB9CiAgICBpbnQgZ2xvYmFsWCgpIGNvbnN0IHsgcmV0dXJuIGcueCgpOyB9CiAg
ICBpbnQgZ2xvYmFsWSgpIGNvbnN0IHsgcmV0dXJuIGcueSgpOyB9CiAgICBCdXR0b25TdGF0ZSBi
dXR0b24oKSBjb25zdCB7IHJldHVybiAoQnV0dG9uU3RhdGUpIGI7IH0KICAgIEJ1dHRvblN0YXRl
IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gKEJ1dHRvblN0YXRlKSBzOyB9CiAgICBCdXR0b25TdGF0
ZSBzdGF0ZUFmdGVyKCkgY29uc3Q7CnByb3RlY3RlZDoKICAgIFFQb2ludCBwOwogICAgUVBvaW50
IGc7CiAgICBpbnQgYjsKICAgIHVzaG9ydCBzOwp9OwoKCgpjbGFzcyBRV2hlZWxFdmVudCA6IHB1
YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRV2hlZWxFdmVudCggY29uc3QgUVBvaW50ICZwb3Ms
IGludCBkZWx0YSwgaW50IHN0YXRlICk7CiAgICBRV2hlZWxFdmVudCggY29uc3QgUVBvaW50ICZw
b3MsIGNvbnN0IFFQb2ludCYgZ2xvYmFsUG9zLCBpbnQgZGVsdGEsIGludCBzdGF0ZSApCiAgICAg
ICAgOiBRRXZlbnQoV2hlZWwpLCBwKHBvcyksIGcoZ2xvYmFsUG9zKSwgZChkZWx0YSksIHMoKHVz
aG9ydClzdGF0ZSksCiAgICAgICAgICBhY2NwdChUUlVFKSB7fQogICAgaW50IGRlbHRhKCkgY29u
c3QgeyByZXR1cm4gZDsgfQogICAgY29uc3QgUVBvaW50ICZwb3MoKSBjb25zdCB7IHJldHVybiBw
OyB9CiAgICBjb25zdCBRUG9pbnQgJmdsb2JhbFBvcygpIGNvbnN0IHsgcmV0dXJuIGc7IH0KICAg
IGludCB4KCkgY29uc3QgeyByZXR1cm4gcC54KCk7IH0KICAgIGludCB5KCkgY29uc3QgeyByZXR1
cm4gcC55KCk7IH0KICAgIGludCBnbG9iYWxYKCkgY29uc3QgeyByZXR1cm4gZy54KCk7IH0KICAg
IGludCBnbG9iYWxZKCkgY29uc3QgeyByZXR1cm4gZy55KCk7IH0KICAgIEJ1dHRvblN0YXRlIHN0
YXRlKCkgY29uc3QgeyByZXR1cm4gQnV0dG9uU3RhdGUocyk7IH0KICAgIGJvb2wgaXNBY2NlcHRl
ZCgpIGNvbnN0IHsgcmV0dXJuIGFjY3B0OyB9CiAgICB2b2lkIGFjY2VwdCgpIHsgYWNjcHQgPSBU
UlVFOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgYWNjcHQgPSBGQUxTRTsgfQpwcm90ZWN0ZWQ6CiAg
ICBRUG9pbnQgcDsKICAgIFFQb2ludCBnOwogICAgaW50IGQ7CiAgICB1c2hvcnQgczsKICAgIGJv
b2wgYWNjcHQ7Cn07CgoKY2xhc3MgUUtleUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoK
ICAgIFFLZXlFdmVudCggVHlwZSB0eXBlLCBpbnQga2V5LCBpbnQgYXNjaWksIGludCBzdGF0ZSwK
ICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIHRleHQ9UVN0cmluZzo6bnVsbCwgYm9vbCBh
dXRvcmVwPUZBTFNFLCB1c2hvcnQgY291bnQ9MSApCiAgICAgICAgOiBRRXZlbnQodHlwZSksIHR4
dCh0ZXh0KSwgaygodXNob3J0KWtleSksIHMoKHVzaG9ydClzdGF0ZSksCiAgICAgICAgICAgIGEo
KHVjaGFyKWFzY2lpKSwgYWNjcHQoVFJVRSksIGF1dG9yKGF1dG9yZXApLCBjKGNvdW50KSB7fQog
ICAgaW50IGtleSgpIGNvbnN0IHsgcmV0dXJuIGs7IH0KICAgIGludCBhc2NpaSgpIGNvbnN0IHsg
cmV0dXJuIGE7IH0KICAgIEJ1dHRvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gQnV0dG9u
U3RhdGUocyk7IH0KICAgIEJ1dHRvblN0YXRlIHN0YXRlQWZ0ZXIoKSBjb25zdDsKICAgIGJvb2wg
aXNBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGFjY3B0OyB9CiAgICBRU3RyaW5nIHRleHQoKSBj
b25zdCB7IHJldHVybiB0eHQ7IH0KICAgIGJvb2wgaXNBdXRvUmVwZWF0KCkgY29uc3QgeyByZXR1
cm4gYXV0b3I7IH0KICAgIGludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIGludChjKTsgfQogICAg
dm9pZCBhY2NlcHQoKSB7IGFjY3B0ID0gVFJVRTsgfQogICAgdm9pZCBpZ25vcmUoKSB7IGFjY3B0
ID0gRkFMU0U7IH0KCnByb3RlY3RlZDoKICAgIFFTdHJpbmcgdHh0OwogICAgdXNob3J0IGssIHM7
CiAgICB1Y2hhciBhOwogICAgdWludCBhY2NwdDoxOwogICAgdWludCBhdXRvcjoxOwogICAgdXNo
b3J0IGM7Cn07CgoKY2xhc3MgUUZvY3VzRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgoK
ICAgIFFGb2N1c0V2ZW50KCBUeXBlIHR5cGUgKQogICAgICAgIDogUUV2ZW50KHR5cGUpIHt9Cgog
ICAgYm9vbCBnb3RGb2N1cygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBGb2N1c0luOyB9CiAg
ICBib29sIGxvc3RGb2N1cygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBGb2N1c091dDsgfQoK
ICAgIGVudW0gUmVhc29uIHsgTW91c2UsIFRhYiwgQWN0aXZlV2luZG93LCBQb3B1cCwgU2hvcnRj
dXQsIE90aGVyIH07CiAgICBzdGF0aWMgUmVhc29uIHJlYXNvbigpOwogICAgc3RhdGljIHZvaWQg
c2V0UmVhc29uKCBSZWFzb24gcmVhc29uICk7CiAgICBzdGF0aWMgdm9pZCByZXNldFJlYXNvbigp
OwoKcHJpdmF0ZToKICAgIHN0YXRpYyBSZWFzb24gbV9yZWFzb247CiAgICBzdGF0aWMgUmVhc29u
IHByZXZfcmVhc29uOwp9OwoKCmNsYXNzIFFQYWludEV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1
YmxpYzoKICAgIFFQYWludEV2ZW50KCBjb25zdCBRUmVnaW9uJiBwYWludFJlZ2lvbiwgYm9vbCBl
cmFzZWQgPSBUUlVFKQogICAgICAgIDogUUV2ZW50KFBhaW50KSwKICAgICAgICAgIHJlYyhwYWlu
dFJlZ2lvbi5ib3VuZGluZ1JlY3QoKSksCiAgICAgICAgICByZWcocGFpbnRSZWdpb24pLAogICAg
ICAgICAgZXJhc2UoZXJhc2VkKXt9CiAgICBRUGFpbnRFdmVudCggY29uc3QgUVJlY3QgJnBhaW50
UmVjdCwgYm9vbCBlcmFzZWQgPSBUUlVFICkKICAgICAgICA6IFFFdmVudChQYWludCksCiAgICAg
ICAgICByZWMocGFpbnRSZWN0KSwKICAgICAgICAgIHJlZyhwYWludFJlY3QpLAogICAgICAgICAg
ZXJhc2UoZXJhc2VkKXt9CiAgICBjb25zdCBRUmVjdCAmcmVjdCgpIGNvbnN0IHsgcmV0dXJuIHJl
YzsgfQogICAgY29uc3QgUVJlZ2lvbiAmcmVnaW9uKCkgY29uc3QgeyByZXR1cm4gcmVnOyB9CiAg
ICBib29sIGVyYXNlZCgpIGNvbnN0IHsgcmV0dXJuIGVyYXNlOyB9CnByb3RlY3RlZDoKICAgIGZy
aWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xhc3MgUUJhc2VBcHBsaWNhdGlv
bjsKICAgIFFSZWN0IHJlYzsKICAgIFFSZWdpb24gcmVnOwogICAgYm9vbCBlcmFzZTsKfTsKCgpj
bGFzcyBRTW92ZUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFNb3ZlRXZlbnQo
IGNvbnN0IFFQb2ludCAmcG9zLCBjb25zdCBRUG9pbnQgJm9sZFBvcyApCiAgICAgICAgOiBRRXZl
bnQoTW92ZSksIHAocG9zKSwgb2xkcChvbGRQb3MpIHt9CiAgICBjb25zdCBRUG9pbnQgJnBvcygp
IGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgIGNvbnN0IFFQb2ludCAmb2xkUG9zKCljb25zdCB7IHJl
dHVybiBvbGRwO30KcHJvdGVjdGVkOgogICAgUVBvaW50IHAsIG9sZHA7CiAgICBmcmllbmQgY2xh
c3MgUUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247Cn07CgoK
Y2xhc3MgUVJlc2l6ZUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFSZXNpemVF
dmVudCggY29uc3QgUVNpemUgJnNpemUsIGNvbnN0IFFTaXplICZvbGRTaXplICkKICAgICAgICA6
IFFFdmVudChSZXNpemUpLCBzKHNpemUpLCBvbGRzKG9sZFNpemUpIHt9CiAgICBjb25zdCBRU2l6
ZSAmc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHM7IH0KICAgIGNvbnN0IFFTaXplICZvbGRTaXplKClj
b25zdCB7IHJldHVybiBvbGRzO30KcHJvdGVjdGVkOgogICAgUVNpemUgcywgb2xkczsKICAgIGZy
aWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xhc3MgUUJhc2VBcHBsaWNhdGlv
bjsKfTsKCgpjbGFzcyBRQ2xvc2VFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBR
Q2xvc2VFdmVudCgpCiAgICAgICAgOiBRRXZlbnQoQ2xvc2UpLCBhY2NwdChGQUxTRSkge30KICAg
IGJvb2wgaXNBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGFjY3B0OyB9CiAgICB2b2lkIGFjY2Vw
dCgpIHsgYWNjcHQgPSBUUlVFOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgYWNjcHQgPSBGQUxTRTsg
fQpwcm90ZWN0ZWQ6CiAgICBib29sIGFjY3B0Owp9OwoKCmNsYXNzIFFTaG93RXZlbnQgOiBwdWJs
aWMgUUV2ZW50CnsKcHVibGljOgogICAgUVNob3dFdmVudChib29sIHNwb250YW5lb3VzKQogICAg
ICAgIDogUUV2ZW50KFNob3cpLCBzcG9udChzcG9udGFuZW91cykge30KICAgIGJvb2wgc3BvbnRh
bmVvdXMoKSBjb25zdCB7IHJldHVybiBzcG9udDsgfQpwcm90ZWN0ZWQ6CiAgICBib29sIHNwb250
Owp9OwoKCmNsYXNzIFFIaWRlRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUUhp
ZGVFdmVudChib29sIHNwb250YW5lb3VzKQogICAgICAgIDogUUV2ZW50KEhpZGUpLCBzcG9udChz
cG9udGFuZW91cykge30KICAgIGJvb2wgc3BvbnRhbmVvdXMoKSBjb25zdCB7IHJldHVybiBzcG9u
dDsgfQpwcm90ZWN0ZWQ6CiAgICBib29sIHNwb250Owp9OwoKCgoKCgoKY2xhc3MgUURyb3BFdmVu
dCA6IHB1YmxpYyBRRXZlbnQsIHB1YmxpYyBRTWltZVNvdXJjZQp7CnB1YmxpYzoKICAgIFFEcm9w
RXZlbnQoIGNvbnN0IFFQb2ludCYgcG9zLCBUeXBlIHR5cD1Ecm9wICkKICAgICAgICA6IFFFdmVu
dCh0eXApLCBwKHBvcyksCiAgICAgICAgICBhY3QoMCksIGFjY3B0KDApLCBhY2NwdGFjdCgwKSwg
cmVzdigwKSwKICAgICAgICAgIGQoMCkKICAgICAgICB7fQogICAgY29uc3QgUVBvaW50ICZwb3Mo
KSBjb25zdCB7IHJldHVybiBwOyB9CiAgICBib29sIGlzQWNjZXB0ZWQoKSBjb25zdCB7IHJldHVy
biBhY2NwdCB8fCBhY2NwdGFjdDsgfQogICAgdm9pZCBhY2NlcHQoYm9vbCB5PVRSVUUpIHsgYWNj
cHQgPSB5OyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgYWNjcHQgPSBGQUxTRTsgfQoKICAgIGJvb2wg
aXNBY3Rpb25BY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGFjY3B0YWN0OyB9CiAgICB2b2lkIGFj
Y2VwdEFjdGlvbihib29sIHk9VFJVRSkgeyBhY2NwdGFjdCA9IHk7IH0KICAgIGVudW0gQWN0aW9u
IHsgQ29weSwgTGluaywgTW92ZSwgUHJpdmF0ZSwgVXNlckFjdGlvbj0xMDAgfTsKICAgIHZvaWQg
c2V0QWN0aW9uKCBBY3Rpb24gYSApIHsgYWN0ID0gKHVpbnQpYTsgfQogICAgQWN0aW9uIGFjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIEFjdGlvbihhY3QpOyB9CgogICAgUVdpZGdldCogc291cmNlKCkg
Y29uc3Q7CiAgICBjb25zdCBjaGFyKiBmb3JtYXQoIGludCBuID0gMCApIGNvbnN0OwogICAgUUJ5
dGVBcnJheSBlbmNvZGVkRGF0YSggY29uc3QgY2hhciogKSBjb25zdDsKICAgIGJvb2wgcHJvdmlk
ZXMoIGNvbnN0IGNoYXIqICkgY29uc3Q7CgogICAgUUJ5dGVBcnJheSBkYXRhKGNvbnN0IGNoYXIq
IGYpIGNvbnN0IHsgcmV0dXJuIGVuY29kZWREYXRhKGYpOyB9CgogICAgdm9pZCBzZXRQb2ludCgg
Y29uc3QgUVBvaW50JiBucCApIHsgcCA9IG5wOyB9Cgpwcm90ZWN0ZWQ6CiAgICBRUG9pbnQgcDsK
ICAgIHVpbnQgYWN0Ojg7CiAgICB1aW50IGFjY3B0OjE7CiAgICB1aW50IGFjY3B0YWN0OjE7CiAg
ICB1aW50IHJlc3Y6NTsKICAgIHZvaWQgKiBkOwp9OwoKCgpjbGFzcyBRRHJhZ01vdmVFdmVudCA6
IHB1YmxpYyBRRHJvcEV2ZW50CnsKcHVibGljOgogICAgUURyYWdNb3ZlRXZlbnQoIGNvbnN0IFFQ
b2ludCYgcG9zLCBUeXBlIHR5cD1EcmFnTW92ZSApCiAgICAgICAgOiBRRHJvcEV2ZW50KHBvcyx0
eXApLAogICAgICAgICAgcmVjdCggcG9zLCBRU2l6ZSggMSwgMSApICkge30KICAgIFFSZWN0IGFu
c3dlclJlY3QoKSBjb25zdCB7IHJldHVybiByZWN0OyB9CiAgICB2b2lkIGFjY2VwdCggYm9vbCB5
PVRSVUUgKSB7IFFEcm9wRXZlbnQ6OmFjY2VwdCh5KTsgfQogICAgdm9pZCBhY2NlcHQoIGNvbnN0
IFFSZWN0ICYgcikgeyBhY2NwdCA9IFRSVUU7IHJlY3QgPSByOyB9CiAgICB2b2lkIGlnbm9yZSgg
Y29uc3QgUVJlY3QgJiByKSB7IGFjY3B0ID1GQUxTRTsgcmVjdCA9IHI7IH0KICAgIHZvaWQgaWdu
b3JlKCkgeyBRRHJvcEV2ZW50OjppZ25vcmUoKTsgfQoKcHJvdGVjdGVkOgogICAgUVJlY3QgcmVj
dDsKfTsKCgpjbGFzcyBRRHJhZ0VudGVyRXZlbnQgOiBwdWJsaWMgUURyYWdNb3ZlRXZlbnQKewpw
dWJsaWM6CiAgICBRRHJhZ0VudGVyRXZlbnQoIGNvbnN0IFFQb2ludCYgcG9zICkgOgogICAgICAg
IFFEcmFnTW92ZUV2ZW50KHBvcywgRHJhZ0VudGVyKSB7IH0KfTsKCgoKY2xhc3MgUURyYWdSZXNw
b25zZUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFEcmFnUmVzcG9uc2VFdmVu
dCggYm9vbCBhY2NlcHRlZCApCiAgICAgICAgOiBRRXZlbnQoRHJhZ1Jlc3BvbnNlKSwgYShhY2Nl
cHRlZCkge30KICAgIGJvb2wgZHJhZ0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYTsgfQpwcm90
ZWN0ZWQ6CiAgICBib29sIGE7Cn07CgoKY2xhc3MgUURyYWdMZWF2ZUV2ZW50IDogcHVibGljIFFF
dmVudAp7CnB1YmxpYzoKICAgIFFEcmFnTGVhdmVFdmVudCgpCiAgICAgICAgOiBRRXZlbnQoRHJh
Z0xlYXZlKSB7fQp9OwoKCgpjbGFzcyBRQ2hpbGRFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJs
aWM6CiAgICBRQ2hpbGRFdmVudCggVHlwZSB0eXBlLCBRT2JqZWN0ICpjaGlsZCApCiAgICAgICAg
OiBRRXZlbnQodHlwZSksIGMoY2hpbGQpIHt9CiAgICBRT2JqZWN0ICpjaGlsZCgpIGNvbnN0IHsg
cmV0dXJuIGM7IH0KICAgIGJvb2wgaW5zZXJ0ZWQoKSBjb25zdCB7IHJldHVybiB0ID09IENoaWxk
SW5zZXJ0ZWQ7IH0KICAgIGJvb2wgcmVtb3ZlZCgpIGNvbnN0IHsgcmV0dXJuIHQgPT0gQ2hpbGRS
ZW1vdmVkOyB9CnByb3RlY3RlZDoKICAgIFFPYmplY3QgKmM7Cn07CgoKY2xhc3MgUUN1c3RvbUV2
ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFDdXN0b21FdmVudCggaW50IHR5cGUg
KTsKICAgIFFDdXN0b21FdmVudCggVHlwZSB0eXBlLCB2b2lkICpkYXRhICkKICAgICAgICA6IFFF
dmVudCh0eXBlKSwgZChkYXRhKSB7fTsKICAgIHZvaWQgKmRhdGEoKSBjb25zdCB7IHJldHVybiBk
OyB9CiAgICB2b2lkIHNldERhdGEoIHZvaWQqIGRhdGEgKSB7IGQgPSBkYXRhOyB9CnByaXZhdGU6
CiAgICB2b2lkICpkOwp9OwojIDQ2ICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FvYmplY3Qu
aCIgMgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcW5hbWVzcGFjZS5oIiAxCiMgNDcg
Ii91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcW9iamVjdC5oIiAyCiMgMSAiL3Vzci9saWIvcXQt
Mi4zLjEvaW5jbHVkZS9xc3RyaW5nbGlzdC5oIiAxCiMgNDIgIi91c3IvbGliL3F0LTIuMy4xL2lu
Y2x1ZGUvcXN0cmluZ2xpc3QuaCIKIyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3F2YWx1
ZWxpc3QuaCIgMQojIDQyICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3F2YWx1ZWxpc3QuaCIK
IyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FzaGFyZWQuaCIgMQojIDQzICIvdXNyL2xp
Yi9xdC0yLjMuMS9pbmNsdWRlL3F2YWx1ZWxpc3QuaCIgMgojIDEgIi91c3IvbGliL3F0LTIuMy4x
L2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIgMQojIDQ0ICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRl
L3F2YWx1ZWxpc3QuaCIgMgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgUVZhbHVlTGlz
dE5vZGUKewpwdWJsaWM6CiAgICBRVmFsdWVMaXN0Tm9kZSggY29uc3QgVCYgdCApIDogZGF0YSgg
dCApIHsgfQogICAgUVZhbHVlTGlzdE5vZGUoKSB7IH0KCgoKCgogICAgUVZhbHVlTGlzdE5vZGU8
VD4qIG5leHQ7CiAgICBRVmFsdWVMaXN0Tm9kZTxUPiogcHJldjsKICAgIFQgZGF0YTsKfTsKCnRl
bXBsYXRlPGNsYXNzIFQ+CmNsYXNzIFFWYWx1ZUxpc3RJdGVyYXRvcgp7CiBwdWJsaWM6CgoKCiAg
ICB0eXBlZGVmIFFWYWx1ZUxpc3ROb2RlPFQ+KiBOb2RlUHRyOwoKCgoKICAgIE5vZGVQdHIgbm9k
ZTsKCgoKCiAgICBRVmFsdWVMaXN0SXRlcmF0b3IoKSA6IG5vZGUoIDAgKSB7fQogICAgUVZhbHVl
TGlzdEl0ZXJhdG9yKCBOb2RlUHRyIHAgKSA6IG5vZGUoIHAgKSB7fQogICAgUVZhbHVlTGlzdEl0
ZXJhdG9yKCBjb25zdCBRVmFsdWVMaXN0SXRlcmF0b3I8VD4mIGl0ICkgOiBub2RlKCBpdC5ub2Rl
ICkge30KCiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYg
aXQgKSBjb25zdCB7IHJldHVybiBub2RlID09IGl0Lm5vZGU7IH0KICAgIGJvb2wgb3BlcmF0b3Ih
PSggY29uc3QgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBpdCApIGNvbnN0IHsgcmV0dXJuIG5vZGUg
IT0gaXQubm9kZTsgfQogICAgY29uc3QgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbm9k
ZS0+ZGF0YTsgfQogICAgVCYgb3BlcmF0b3IqKCkgeyByZXR1cm4gbm9kZS0+ZGF0YTsgfQoKCgoK
ICAgIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgb3BlcmF0b3IrKygpIHsKICAgICAgICBub2RlID0g
bm9kZS0+bmV4dDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlzdEl0
ZXJhdG9yPFQ+IG9wZXJhdG9yKysoaW50KSB7CiAgICAgICAgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+
IHRtcCA9ICp0aGlzOwogICAgICAgIG5vZGUgPSBub2RlLT5uZXh0OwogICAgICAgIHJldHVybiB0
bXA7CiAgICB9CgogICAgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBvcGVyYXRvci0tKCkgewogICAg
ICAgIG5vZGUgPSBub2RlLT5wcmV2OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBR
VmFsdWVMaXN0SXRlcmF0b3I8VD4gb3BlcmF0b3ItLShpbnQpIHsKICAgICAgICBRVmFsdWVMaXN0
SXRlcmF0b3I8VD4gdG1wID0gKnRoaXM7CiAgICAgICAgbm9kZSA9IG5vZGUtPnByZXY7CiAgICAg
ICAgcmV0dXJuIHRtcDsKICAgIH0KfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIFFWYWx1ZUxp
c3RDb25zdEl0ZXJhdG9yCnsKIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgUVZhbHVlTGlzdE5vZGU8
VD4qIE5vZGVQdHI7CgoKCgogICAgTm9kZVB0ciBub2RlOwoKCgoKICAgIFFWYWx1ZUxpc3RDb25z
dEl0ZXJhdG9yKCkgOiBub2RlKCAwICkge30KICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yKCBO
b2RlUHRyIHAgKSA6IG5vZGUoIHAgKSB7fQogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3IoIGNv
bnN0IFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+JiBpdCApIDogbm9kZSggaXQubm9kZSApIHt9
CiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvciggY29uc3QgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+
JiBpdCApIDogbm9kZSggaXQubm9kZSApIHt9CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBR
VmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiYgaXQgKSBjb25zdCB7IHJldHVybiBub2RlID09IGl0
Lm5vZGU7IH0KICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVZhbHVlTGlzdENvbnN0SXRlcmF0
b3I8VD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9kZSAhPSBpdC5ub2RlOyB9CiAgICBjb25zdCBU
JiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBub2RlLT5kYXRhOyB9CgoKCgogICAgUVZhbHVl
TGlzdENvbnN0SXRlcmF0b3I8VD4mIG9wZXJhdG9yKysoKSB7CiAgICAgICAgbm9kZSA9IG5vZGUt
Pm5leHQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFWYWx1ZUxpc3RDb25zdEl0
ZXJhdG9yPFQ+IG9wZXJhdG9yKysoaW50KSB7CiAgICAgICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0
b3I8VD4gdG1wID0gKnRoaXM7CiAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7CiAgICAgICAgcmV0
dXJuIHRtcDsKICAgIH0KCiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiYgb3BlcmF0b3It
LSgpIHsKICAgICAgICBub2RlID0gbm9kZS0+cHJldjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gb3BlcmF0b3ItLShpbnQpIHsKICAg
ICAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiB0bXAgPSAqdGhpczsKICAgICAgICBub2Rl
ID0gbm9kZS0+cHJldjsKICAgICAgICByZXR1cm4gdG1wOwogICAgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIFQ+CmNsYXNzIFFWYWx1ZUxpc3RQcml2YXRlIDogcHVibGljIFFTaGFyZWQKewpwdWJsaWM6
CgoKCiAgICB0eXBlZGVmIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiBJdGVyYXRvcjsKICAgIHR5cGVk
ZWYgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gQ29uc3RJdGVyYXRvcjsKICAgIHR5cGVkZWYg
UVZhbHVlTGlzdE5vZGU8VD4gTm9kZTsKICAgIHR5cGVkZWYgUVZhbHVlTGlzdE5vZGU8VD4qIE5v
ZGVQdHI7CgoKCgogICAgUVZhbHVlTGlzdFByaXZhdGUoKSB7IG5vZGUgPSBuZXcgTm9kZTsgbm9k
ZS0+bmV4dCA9IG5vZGUtPnByZXYgPSBub2RlOyBub2RlcyA9IDA7IH0KICAgIFFWYWx1ZUxpc3RQ
cml2YXRlKCBjb25zdCBRVmFsdWVMaXN0UHJpdmF0ZTxUPiYgX3AgKSA6IFFTaGFyZWQoKSB7CiAg
ICAgICAgbm9kZSA9IG5ldyBOb2RlOyBub2RlLT5uZXh0ID0gbm9kZS0+cHJldiA9IG5vZGU7IG5v
ZGVzID0gMDsKICAgICAgICBJdGVyYXRvciBiKCBfcC5ub2RlLT5uZXh0ICk7CiAgICAgICAgSXRl
cmF0b3IgZSggX3Aubm9kZSApOwogICAgICAgIEl0ZXJhdG9yIGkoIG5vZGUgKTsKICAgICAgICB3
aGlsZSggYiAhPSBlICkKICAgICAgICAgICAgaW5zZXJ0KCBpLCAqYisrICk7CiAgICB9CgogICAg
dm9pZCBkZXJlZkFuZERlbGV0ZSgpCiAgICB7CiAgICAgICAgaWYgKCBkZXJlZigpICkKICAgICAg
ICAgICAgZGVsZXRlIHRoaXM7CiAgICB9CgoKCgoKICAgIH5RVmFsdWVMaXN0UHJpdmF0ZSgpIHsK
ICAgICAgICBOb2RlUHRyIHAgPSBub2RlLT5uZXh0OwogICAgICAgIHdoaWxlKCBwICE9IG5vZGUg
KSB7CiAgICAgICAgICAgIE5vZGVQdHIgeCA9IHAtPm5leHQ7CiAgICAgICAgICAgIGRlbGV0ZSBw
OwogICAgICAgICAgICBwID0geDsKICAgICAgICB9CiAgICAgICAgZGVsZXRlIG5vZGU7CiAgICB9
CgogICAgSXRlcmF0b3IgaW5zZXJ0KCBJdGVyYXRvciBpdCwgY29uc3QgVCYgeCApIHsKICAgICAg
ICBOb2RlUHRyIHAgPSBuZXcgTm9kZSggeCApOwogICAgICAgIHAtPm5leHQgPSBpdC5ub2RlOwog
ICAgICAgIHAtPnByZXYgPSBpdC5ub2RlLT5wcmV2OwogICAgICAgIGl0Lm5vZGUtPnByZXYtPm5l
eHQgPSBwOwogICAgICAgIGl0Lm5vZGUtPnByZXYgPSBwOwogICAgICAgIG5vZGVzKys7CiAgICAg
ICAgcmV0dXJuIHA7CiAgICB9CgogICAgSXRlcmF0b3IgcmVtb3ZlKCBJdGVyYXRvciBpdCApIHsK
ICAgICAgICBpZiAoICEoaXQubm9kZSAhPSBub2RlKSApIHFXYXJuaW5nKCJBU1NFUlQ6IFwiJXNc
IiBpbiAlcyAoJWQpIiwiaXQubm9kZSAhPSBub2RlIiwiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVk
ZS9xdmFsdWVsaXN0LmgiLDIyNik7CiAgICAgICAgTm9kZVB0ciBuZXh0ID0gaXQubm9kZS0+bmV4
dDsKICAgICAgICBOb2RlUHRyIHByZXYgPSBpdC5ub2RlLT5wcmV2OwogICAgICAgIHByZXYtPm5l
eHQgPSBuZXh0OwogICAgICAgIG5leHQtPnByZXYgPSBwcmV2OwogICAgICAgIGRlbGV0ZSBpdC5u
b2RlOwogICAgICAgIG5vZGVzLS07CiAgICAgICAgcmV0dXJuIEl0ZXJhdG9yKCBuZXh0ICk7CiAg
ICB9CgogICAgTm9kZVB0ciBmaW5kKCBOb2RlUHRyIHN0YXJ0LCBjb25zdCBUJiB4ICkgY29uc3Qg
ewogICAgICAgIENvbnN0SXRlcmF0b3IgZmlyc3QoIHN0YXJ0ICk7CiAgICAgICAgQ29uc3RJdGVy
YXRvciBsYXN0KCBub2RlICk7CiAgICAgICAgd2hpbGUoIGZpcnN0ICE9IGxhc3QpIHsKICAgICAg
ICAgICAgaWYgKCAqZmlyc3QgPT0geCApCiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3Qubm9k
ZTsKICAgICAgICAgICAgKytmaXJzdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxhc3Qubm9k
ZTsKICAgIH0KCiAgICBpbnQgZmluZEluZGV4KCBOb2RlUHRyIHN0YXJ0LCBjb25zdCBUJiB4ICkg
Y29uc3QgewogICAgICAgIENvbnN0SXRlcmF0b3IgZmlyc3QoIHN0YXJ0ICk7CiAgICAgICAgQ29u
c3RJdGVyYXRvciBsYXN0KCBub2RlICk7CiAgICAgICAgaW50IHBvcyA9IDA7CiAgICAgICAgd2hp
bGUoIGZpcnN0ICE9IGxhc3QpIHsKICAgICAgICAgICAgaWYgKCAqZmlyc3QgPT0geCApCiAgICAg
ICAgICAgICAgICByZXR1cm4gcG9zOwogICAgICAgICAgICArK2ZpcnN0OwogICAgICAgICAgICAr
K3BvczsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgfQoKICAgIHVpbnQgY29udGFp
bnMoIGNvbnN0IFQmIHggKSBjb25zdCB7CiAgICAgICAgdWludCByZXN1bHQgPSAwOwogICAgICAg
IEl0ZXJhdG9yIGZpcnN0ID0gSXRlcmF0b3IoIG5vZGUtPm5leHQgKTsKICAgICAgICBJdGVyYXRv
ciBsYXN0ID0gSXRlcmF0b3IoIG5vZGUgKTsKICAgICAgICB3aGlsZSggZmlyc3QgIT0gbGFzdCkg
ewogICAgICAgICAgICBpZiAoICpmaXJzdCA9PSB4ICkKICAgICAgICAgICAgICAgICsrcmVzdWx0
OwogICAgICAgICAgICArK2ZpcnN0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgfQoKICAgIHZvaWQgcmVtb3ZlKCBjb25zdCBUJiB4ICkgewogICAgICAgIEl0ZXJhdG9yIGZp
cnN0ID0gSXRlcmF0b3IoIG5vZGUtPm5leHQgKTsKICAgICAgICBJdGVyYXRvciBsYXN0ID0gSXRl
cmF0b3IoIG5vZGUgKTsKICAgICAgICB3aGlsZSggZmlyc3QgIT0gbGFzdCkgewogICAgICAgICAg
ICBpZiAoICpmaXJzdCA9PSB4ICkKICAgICAgICAgICAgICAgIGZpcnN0ID0gcmVtb3ZlKCBmaXJz
dCApOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICArK2ZpcnN0OwogICAgICAgIH0K
ICAgIH0KCiAgICBOb2RlUHRyIGF0KCB1aW50IGkgKSBjb25zdCB7CiAgICAgICAgaWYgKCAhKGkg
PD0gbm9kZXMpICkgcVdhcm5pbmcoIkFTU0VSVDogXCIlc1wiIGluICVzICglZCkiLCJpIDw9IG5v
ZGVzIiwiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xdmFsdWVsaXN0LmgiLDI4NCk7CiAgICAg
ICAgTm9kZVB0ciBwID0gbm9kZS0+bmV4dDsKICAgICAgICBmb3IoIHVpbnQgeCA9IDA7IHggPCBp
OyArK3ggKQogICAgICAgICAgICBwID0gcC0+bmV4dDsKICAgICAgICByZXR1cm4gcDsKICAgIH0K
CiAgICB2b2lkIGNsZWFyKCkgewogICAgICAgIG5vZGVzID0gMDsKICAgICAgICBOb2RlUHRyIHAg
PSBub2RlLT5uZXh0OwogICAgICAgIHdoaWxlKCBwICE9IG5vZGUgKSB7CiAgICAgICAgICAgIE5v
ZGVQdHIgbmV4dCA9IHAtPm5leHQ7CiAgICAgICAgICAgIGRlbGV0ZSBwOwogICAgICAgICAgICBw
ID0gbmV4dDsKICAgICAgICB9CiAgICAgICAgbm9kZS0+bmV4dCA9IG5vZGUtPnByZXYgPSBub2Rl
OwogICAgfQoKICAgIE5vZGVQdHIgbm9kZTsKICAgIHVpbnQgbm9kZXM7Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4KY2xhc3MgUVZhbHVlTGlzdAp7CnB1YmxpYzoKCgoKICAgIHR5cGVkZWYgUVZhbHVl
TGlzdEl0ZXJhdG9yPFQ+IEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRVmFsdWVMaXN0Q29uc3RJdGVy
YXRvcjxUPiBDb25zdEl0ZXJhdG9yOwogICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKCgoKCiAgICBR
VmFsdWVMaXN0KCkgeyBzaCA9IG5ldyBRVmFsdWVMaXN0UHJpdmF0ZTxUPjsgfQogICAgUVZhbHVl
TGlzdCggY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApIHsgc2ggPSBsLnNoOyBzaC0+cmVmKCk7IH0K
ICAgIH5RVmFsdWVMaXN0KCkgeyBzaC0+ZGVyZWZBbmREZWxldGUoKTsgfQoKICAgIFFWYWx1ZUxp
c3Q8VD4mIG9wZXJhdG9yPSAoIGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKQogICAgewogICAgICAg
IGwuc2gtPnJlZigpOwogICAgICAgIHNoLT5kZXJlZkFuZERlbGV0ZSgpOwogICAgICAgIHNoID0g
bC5zaDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlzdDxUPiBvcGVy
YXRvcisgKCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBsICkgY29uc3QKICAgIHsKICAgICAgICBRVmFs
dWVMaXN0PFQ+IGwyKCAqdGhpcyApOwogICAgICAgIGZvciggQ29uc3RJdGVyYXRvciBpdCA9IGwu
YmVnaW4oKTsgaXQgIT0gbC5lbmQoKTsgKytpdCApCiAgICAgICAgICAgIGwyLmFwcGVuZCggKml0
ICk7CiAgICAgICAgcmV0dXJuIGwyOwogICAgfQoKICAgIFFWYWx1ZUxpc3Q8VD4mIG9wZXJhdG9y
Kz0gKCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBsICkKICAgIHsKICAgICAgICBmb3IoIENvbnN0SXRl
cmF0b3IgaXQgPSBsLmJlZ2luKCk7IGl0ICE9IGwuZW5kKCk7ICsraXQgKQogICAgICAgICAgICBh
cHBlbmQoICppdCApOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBib29sIG9wZXJh
dG9yPT0gKCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBsICkgY29uc3QKICAgIHsKICAgICAgICBpZiAo
IGNvdW50KCkgIT0gbC5jb3VudCgpICkKICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAg
IENvbnN0SXRlcmF0b3IgaXQyID0gYmVnaW4oKTsKICAgICAgICBDb25zdEl0ZXJhdG9yIGl0ID0g
bC5iZWdpbigpOwogICAgICAgIGZvciggOyBpdCAhPSBsLmVuZCgpOyArK2l0LCArK2l0MiApCiAg
ICAgICAgICAgIGlmICggISggKml0ID09ICppdDIgKSApCiAgICAgICAgICAgICAgICByZXR1cm4g
RkFMU0U7CiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgYm9vbCBvcGVyYXRvciE9ICgg
Y29uc3QgUVZhbHVlTGlzdDxUPiYgbCApIGNvbnN0IHsgcmV0dXJuICEoICp0aGlzID09IGwgKTsg
fQoKICAgIEl0ZXJhdG9yIGJlZ2luKCkgeyBkZXRhY2goKTsgcmV0dXJuIEl0ZXJhdG9yKCBzaC0+
bm9kZS0+bmV4dCApOyB9CiAgICBDb25zdEl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
Q29uc3RJdGVyYXRvciggc2gtPm5vZGUtPm5leHQgKTsgfQogICAgSXRlcmF0b3IgZW5kKCkgeyBk
ZXRhY2goKTsgcmV0dXJuIEl0ZXJhdG9yKCBzaC0+bm9kZSApOyB9CiAgICBDb25zdEl0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIENvbnN0SXRlcmF0b3IoIHNoLT5ub2RlICk7IH0KICAgIEl0
ZXJhdG9yIGZyb21MYXN0KCkgeyBkZXRhY2goKTsgcmV0dXJuIEl0ZXJhdG9yKCBzaC0+bm9kZS0+
cHJldiApOyB9CiAgICBDb25zdEl0ZXJhdG9yIGZyb21MYXN0KCkgY29uc3QgeyByZXR1cm4gQ29u
c3RJdGVyYXRvciggc2gtPm5vZGUtPnByZXYgKTsgfQoKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICggc2gtPm5vZGVzID09IDAgKTsgfQoKICAgIEl0ZXJhdG9yIGluc2VydCggSXRl
cmF0b3IgaXQsIGNvbnN0IFQmIHggKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPmluc2VydCggaXQs
IHggKTsgfQoKICAgIEl0ZXJhdG9yIGFwcGVuZCggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJl
dHVybiBzaC0+aW5zZXJ0KCBlbmQoKSwgeCApOyB9CiAgICBJdGVyYXRvciBwcmVwZW5kKCBjb25z
dCBUJiB4ICkgeyBkZXRhY2goKTsgcmV0dXJuIHNoLT5pbnNlcnQoIGJlZ2luKCksIHggKTsgfQoK
ICAgIEl0ZXJhdG9yIHJlbW92ZSggSXRlcmF0b3IgaXQgKSB7IGRldGFjaCgpOyByZXR1cm4gc2gt
PnJlbW92ZSggaXQgKTsgfQogICAgdm9pZCByZW1vdmUoIGNvbnN0IFQmIHggKSB7IGRldGFjaCgp
OyBzaC0+cmVtb3ZlKCB4ICk7IH0KCiAgICBUJiBmaXJzdCgpIHsgZGV0YWNoKCk7IHJldHVybiBz
aC0+bm9kZS0+bmV4dC0+ZGF0YTsgfQogICAgY29uc3QgVCYgZmlyc3QoKSBjb25zdCB7IHJldHVy
biBzaC0+bm9kZS0+bmV4dC0+ZGF0YTsgfQogICAgVCYgbGFzdCgpIHsgZGV0YWNoKCk7IHJldHVy
biBzaC0+bm9kZS0+cHJldi0+ZGF0YTsgfQogICAgY29uc3QgVCYgbGFzdCgpIGNvbnN0IHsgcmV0
dXJuIHNoLT5ub2RlLT5wcmV2LT5kYXRhOyB9CgogICAgVCYgb3BlcmF0b3JbXSAoIHVpbnQgaSAp
IHsgZGV0YWNoKCk7IHJldHVybiBzaC0+YXQoaSktPmRhdGE7IH0KICAgIGNvbnN0IFQmIG9wZXJh
dG9yW10gKCB1aW50IGkgKSBjb25zdCB7IHJldHVybiBzaC0+YXQoaSktPmRhdGE7IH0KICAgIEl0
ZXJhdG9yIGF0KCB1aW50IGkgKSB7IGRldGFjaCgpOyByZXR1cm4gSXRlcmF0b3IoIHNoLT5hdChp
KSApOyB9CiAgICBDb25zdEl0ZXJhdG9yIGF0KCB1aW50IGkgKSBjb25zdCB7IHJldHVybiBDb25z
dEl0ZXJhdG9yKCBzaC0+YXQoaSkgKTsgfQogICAgSXRlcmF0b3IgZmluZCAoIGNvbnN0IFQmIHgg
KSB7IGRldGFjaCgpOyByZXR1cm4gSXRlcmF0b3IoIHNoLT5maW5kKCBzaC0+bm9kZS0+bmV4dCwg
eCkgKTsgfQogICAgQ29uc3RJdGVyYXRvciBmaW5kICggY29uc3QgVCYgeCApIGNvbnN0IHsgcmV0
dXJuIENvbnN0SXRlcmF0b3IoIHNoLT5maW5kKCBzaC0+bm9kZS0+bmV4dCwgeCkgKTsgfQogICAg
SXRlcmF0b3IgZmluZCAoIEl0ZXJhdG9yIGl0LCBjb25zdCBUJiB4ICkgeyBkZXRhY2goKTsgcmV0
dXJuIEl0ZXJhdG9yKCBzaC0+ZmluZCggaXQubm9kZSwgeCApICk7IH0KICAgIENvbnN0SXRlcmF0
b3IgZmluZCAoIENvbnN0SXRlcmF0b3IgaXQsIGNvbnN0IFQmIHggKSBjb25zdCB7IHJldHVybiBD
b25zdEl0ZXJhdG9yKCBzaC0+ZmluZCggaXQubm9kZSwgeCApICk7IH0KICAgIGludCBmaW5kSW5k
ZXgoIGNvbnN0IFQmIHggKSBjb25zdCB7IHJldHVybiBzaC0+ZmluZEluZGV4KCBzaC0+bm9kZS0+
bmV4dCwgeCkgOyB9CiAgICB1aW50IGNvbnRhaW5zKCBjb25zdCBUJiB4ICkgY29uc3QgeyByZXR1
cm4gc2gtPmNvbnRhaW5zKCB4ICk7IH0KCiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4g
c2gtPm5vZGVzOyB9CgogICAgdm9pZCBjbGVhcigpIHsgaWYgKCBzaC0+Y291bnQgPT0gMSApIHNo
LT5jbGVhcigpOyBlbHNlIHsgc2gtPmRlcmVmKCk7IHNoID0gbmV3IFFWYWx1ZUxpc3RQcml2YXRl
PFQ+OyB9IH0KCgogICAgUVZhbHVlTGlzdDxUPiYgb3BlcmF0b3IrPSAoIGNvbnN0IFQmIHggKQog
ICAgewogICAgICAgIGFwcGVuZCggeCApOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAg
IFFWYWx1ZUxpc3Q8VD4mIG9wZXJhdG9yPDwgKCBjb25zdCBUJiB4ICkKICAgIHsKICAgICAgICBh
cHBlbmQoIHggKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKcHJvdGVjdGVkOgoKCgog
ICAgdm9pZCBkZXRhY2goKSB7IGlmICggc2gtPmNvdW50ID4gMSApIHsgc2gtPmRlcmVmKCk7IHNo
ID0gbmV3IFFWYWx1ZUxpc3RQcml2YXRlPFQ+KCAqc2ggKTsgfSB9CgoKCgogICAgUVZhbHVlTGlz
dFByaXZhdGU8VD4qIHNoOwp9OwoKCnRlbXBsYXRlPGNsYXNzIFQ+CmlubGluZSBRRGF0YVN0cmVh
bSYgb3BlcmF0b3I+PiggUURhdGFTdHJlYW0mIHMsIFFWYWx1ZUxpc3Q8VD4mIGwgKQp7CiAgICBs
LmNsZWFyKCk7CiAgICBRX1VJTlQzMiBjOwogICAgcyA+PiBjOwogICAgZm9yKCBRX1VJTlQzMiBp
ID0gMDsgaSA8IGM7ICsraSApCiAgICB7CiAgICAgICAgVCB0OwogICAgICAgIHMgPj4gdDsKICAg
ICAgICBsLmFwcGVuZCggdCApOwogICAgfQogICAgcmV0dXJuIHM7Cn0KCnRlbXBsYXRlPGNsYXNz
IFQ+CmlubGluZSBRRGF0YVN0cmVhbSYgb3BlcmF0b3I8PCggUURhdGFTdHJlYW0mIHMsIGNvbnN0
IFFWYWx1ZUxpc3Q8VD4mIGwgKQp7CiAgICBzIDw8IChRX1VJTlQzMilsLmNvdW50KCk7CiAgICBR
VmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBpdCA9IGwuYmVnaW4oKTsKICAgIGZvciggOyBpdCAh
PSBsLmVuZCgpOyArK2l0ICkKICAgICAgICBzIDw8ICppdDsKICAgIHJldHVybiBzOwp9CiMgNDMg
Ii91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXN0cmluZ2xpc3QuaCIgMgojIDEgIi91c3IvbGli
L3F0LTIuMy4xL2luY2x1ZGUvcXN0cmluZy5oIiAxCiMgNDQgIi91c3IvbGliL3F0LTIuMy4xL2lu
Y2x1ZGUvcXN0cmluZ2xpc3QuaCIgMgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXJl
Z2V4cC5oIiAxCiMgNDIgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXJlZ2V4cC5oIgojIDEg
Ii91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXN0cmluZy5oIiAxCiMgNDMgIi91c3IvbGliL3F0
LTIuMy4xL2luY2x1ZGUvcXJlZ2V4cC5oIiAyCgoKCmNsYXNzIFFSZWdFeHAKewpwdWJsaWM6CiAg
ICBRUmVnRXhwKCk7CiAgICBRUmVnRXhwKCBjb25zdCBRU3RyaW5nICYsIGJvb2wgY2FzZVNlbnNp
dGl2ZT1UUlVFLCBib29sIHdpbGRjYXJkPUZBTFNFICk7CiAgICBRUmVnRXhwKCBjb25zdCBRUmVn
RXhwICYgKTsKICAgflFSZWdFeHAoKTsKICAgIFFSZWdFeHAgJm9wZXJhdG9yPSggY29uc3QgUVJl
Z0V4cCAmICk7CiAgICBRUmVnRXhwICZvcGVyYXRvcj0oIGNvbnN0IFFTdHJpbmcgJnBhdHRlcm4g
KTsKCiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFSZWdFeHAgJiApIGNvbnN0OwogICAgYm9v
bCBvcGVyYXRvciE9KCBjb25zdCBRUmVnRXhwICZyICkgY29uc3QKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuICEodGhpcy0+b3BlcmF0b3I9PShyKSk7IH0K
CiAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiByeGRhdGEgPT0gMDsgfQogICAgYm9v
bCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gZXJyb3IgPT0gMDsgfQoKICAgIGJvb2wgY2FzZVNl
bnNpdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIGNzOyB9CiAgICB2b2lkIHNldENhc2VTZW5zaXRpdmUo
IGJvb2wgKTsKCiAgICBib29sIHdpbGRjYXJkKCkgY29uc3QgeyByZXR1cm4gd2M7IH0KICAgIHZv
aWQgc2V0V2lsZGNhcmQoIGJvb2wgKTsKCiAgICBRU3RyaW5nIHBhdHRlcm4oKSBjb25zdCB7IHJl
dHVybiByeHN0cmluZzsgfQoKICAgIHZvaWQgc2V0UGF0dGVybiggY29uc3QgUVN0cmluZyYgcGF0
dGVybiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG9wZXJhdG9y
PSggcGF0dGVybiApOyB9CgogICAgaW50IG1hdGNoKCBjb25zdCBRU3RyaW5nICZzdHIsIGludCBp
bmRleD0wLCBpbnQgKmxlbj0wLAogICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW5kZXhJc1N0
YXJ0ID0gVFJVRSApIGNvbnN0OwogICAgaW50IGZpbmQoIGNvbnN0IFFTdHJpbmcmIHN0ciwgaW50
IGluZGV4ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJu
IG1hdGNoKCBzdHIsIGluZGV4ICk7IH0KCnByb3RlY3RlZDoKICAgIHZvaWQgY29tcGlsZSgpOwog
ICAgY29uc3QgUUNoYXIgKm1hdGNoc3RyKCB1aW50ICosIGNvbnN0IFFDaGFyICosIHVpbnQsIGNv
bnN0IFFDaGFyICogKSBjb25zdDsKCnByaXZhdGU6CiAgICBRU3RyaW5nIHJ4c3RyaW5nOwogICAg
dWludCAqcnhkYXRhOwogICAgaW50IGVycm9yOwogICAgYm9vbCBjczsKICAgIGJvb2wgd2M7Cn07
CiMgNDUgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXN0cmluZ2xpc3QuaCIgMgoKCgoKY2xh
c3MgUVN0ckxpc3Q7CgpjbGFzcyBRU3RyaW5nTGlzdCA6IHB1YmxpYyBRVmFsdWVMaXN0PFFTdHJp
bmc+CnsKcHVibGljOgogICAgUVN0cmluZ0xpc3QoKSB7IH0KICAgIFFTdHJpbmdMaXN0KCBjb25z
dCBRU3RyaW5nTGlzdCYgbCApIDogUVZhbHVlTGlzdDxRU3RyaW5nPihsKSB7IH0KICAgIFFTdHJp
bmdMaXN0KCBjb25zdCBRVmFsdWVMaXN0PFFTdHJpbmc+JiBsICkgOiBRVmFsdWVMaXN0PFFTdHJp
bmc+KGwpIHsgfQogICAgUVN0cmluZ0xpc3QoIGNvbnN0IFFTdHJpbmcmIGkgKSB7IGFwcGVuZChp
KTsgfQoKICAgIFFTdHJpbmdMaXN0KCBjb25zdCBjaGFyKiBpICkgeyBhcHBlbmQoaSk7IH0KCgog
ICAgc3RhdGljIFFTdHJpbmdMaXN0IGZyb21TdHJMaXN0KGNvbnN0IFFTdHJMaXN0Jik7CgogICAg
dm9pZCBzb3J0KCk7CgogICAgc3RhdGljIFFTdHJpbmdMaXN0IHNwbGl0KCBjb25zdCBRU3RyaW5n
ICZzZXAsIGNvbnN0IFFTdHJpbmcgJnN0ciwgYm9vbCBhbGxvd0VtcHR5RW50cmllcyA9IEZBTFNF
ICk7CiAgICBzdGF0aWMgUVN0cmluZ0xpc3Qgc3BsaXQoIGNvbnN0IFFDaGFyICZzZXAsIGNvbnN0
IFFTdHJpbmcgJnN0ciwgYm9vbCBhbGxvd0VtcHR5RW50cmllcyA9IEZBTFNFICk7CiAgICBzdGF0
aWMgUVN0cmluZ0xpc3Qgc3BsaXQoIGNvbnN0IFFSZWdFeHAgJnNlcCwgY29uc3QgUVN0cmluZyAm
c3RyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gRkFMU0UgKTsKICAgIFFTdHJpbmcgam9pbigg
Y29uc3QgUVN0cmluZyAmc2VwICkgY29uc3Q7CgogICAgUVN0cmluZ0xpc3QgZ3JlcCggY29uc3Qg
UVN0cmluZyAmc3RyLCBib29sIGNzID0gVFJVRSApIGNvbnN0OwogICAgUVN0cmluZ0xpc3QgZ3Jl
cCggY29uc3QgUVJlZ0V4cCAmZXhwciApIGNvbnN0Owp9OwoKCmNsYXNzIFFEYXRhU3RyZWFtOwpl
eHRlcm4gUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFTdHJpbmdMaXN0
JiApOwpleHRlcm4gUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0
IFFTdHJpbmdMaXN0JiApOwojIDQ4ICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FvYmplY3Qu
aCIgMgoKCgoKCmNsYXNzIFFNZXRhT2JqZWN0OwpjbGFzcyBRVmFyaWFudDsKCgoKY2xhc3MgUU9i
amVjdDogcHVibGljIFF0CnsKCgpwdWJsaWM6CiAgICBRT2JqZWN0KCBRT2JqZWN0ICpwYXJlbnQ9
MCwgY29uc3QgY2hhciAqbmFtZT0wICk7CiAgICB2aXJ0dWFsIH5RT2JqZWN0KCk7CgogICAgc3Rh
dGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiApOwogICAgc3RhdGljIFFTdHJpbmcgdHIoIGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CgogICAgdmlydHVhbCBib29sIGV2ZW50KCBRRXZl
bnQgKiApOwogICAgdmlydHVhbCBib29sIGV2ZW50RmlsdGVyKCBRT2JqZWN0ICosIFFFdmVudCAq
ICk7CgogICAgdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY01ldGFPYmplY3QoKTsgfQogICAgdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUo
KSBjb25zdDsKCiAgICBib29sIGlzQSggY29uc3QgY2hhciAqICkgY29uc3Q7CiAgICBib29sIGlu
aGVyaXRzKCBjb25zdCBjaGFyICogKSBjb25zdDsKCiAgICBjb25zdCBjaGFyICpuYW1lKCkgY29u
c3Q7CiAgICBjb25zdCBjaGFyICpuYW1lKCBjb25zdCBjaGFyICogZGVmYXVsdE5hbWUgKSBjb25z
dDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZSggY29uc3QgY2hhciAqbmFtZSApOwogICAgYm9v
bCBpc1dpZGdldFR5cGUoKSBjb25zdCB7IHJldHVybiBpc1dpZGdldDsgfQogICAgYm9vbCBoaWdo
UHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiBGQUxTRTsgfQoKICAgIGJvb2wgc2lnbmFsc0Jsb2Nr
ZWQoKSBjb25zdCB7IHJldHVybiBibG9ja1NpZzsgfQogICAgdm9pZCBibG9ja1NpZ25hbHMoIGJv
b2wgYiApOwoKICAgIGludCBzdGFydFRpbWVyKCBpbnQgaW50ZXJ2YWwgKTsKICAgIHZvaWQga2ls
bFRpbWVyKCBpbnQgaWQgKTsKICAgIHZvaWQga2lsbFRpbWVycygpOwoKICAgIFFPYmplY3QgKmNo
aWxkKCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp0eXBlID0gMCApOwogICAgY29uc3Qg
UU9iamVjdExpc3QgKmNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gY2hpbGRPYmplY3RzOyB9Cgog
ICAgc3RhdGljIGNvbnN0IFFPYmplY3RMaXN0ICpvYmplY3RUcmVlcygpOwoKCiAgICBRT2JqZWN0
TGlzdCAqcXVlcnlMaXN0KCBjb25zdCBjaGFyICppbmhlcml0c0NsYXNzID0gMCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9iak5hbWUgPSAwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWdleHBNYXRjaCA9IFRSVUUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlY3Vyc2l2ZVNlYXJjaCA9IFRSVUUg
KTsKCiAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0Q2hpbGQoIFFPYmplY3QgKiApOwogICAgdmlydHVh
bCB2b2lkIHJlbW92ZUNoaWxkKCBRT2JqZWN0ICogKTsKCiAgICB2b2lkIGluc3RhbGxFdmVudEZp
bHRlciggY29uc3QgUU9iamVjdCAqICk7CiAgICB2b2lkIHJlbW92ZUV2ZW50RmlsdGVyKCBjb25z
dCBRT2JqZWN0ICogKTsKCiAgICBzdGF0aWMgYm9vbCBjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpz
ZW5kZXIsIGNvbnN0IGNoYXIgKnNpZ25hbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAqbWVtYmVyICk7CiAgICBib29sIGNvbm5l
Y3QoIGNvbnN0IFFPYmplY3QgKnNlbmRlciwgY29uc3QgY2hhciAqc2lnbmFsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1lbWJlciApIGNvbnN0OwogICAgc3RhdGljIGJv
b2wgZGlzY29ubmVjdCggY29uc3QgUU9iamVjdCAqc2VuZGVyLCBjb25zdCBjaGFyICpzaWduYWws
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNv
bnN0IGNoYXIgKm1lbWJlciApOwogICAgYm9vbCBkaXNjb25uZWN0KCBjb25zdCBjaGFyICpzaWdu
YWw9MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRT2JqZWN0ICpyZWNlaXZl
cj0wLCBjb25zdCBjaGFyICptZW1iZXI9MCApOwogICAgYm9vbCBkaXNjb25uZWN0KCBjb25zdCBR
T2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAqbWVtYmVyPTAgKTsKCiAgICB2b2lkIGR1bXBP
YmplY3RUcmVlKCk7CiAgICB2b2lkIGR1bXBPYmplY3RJbmZvKCk7CgoKICAgIGJvb2wgc2V0UHJv
cGVydHkoIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IFFWYXJpYW50JiB2YWx1ZSApOwogICAgUVZh
cmlhbnQgcHJvcGVydHkoIGNvbnN0IGNoYXIgKm5hbWUgKSBjb25zdDsKCgpwcm90ZWN0ZWQ6CiAg
ICB2b2lkIGRlc3Ryb3llZCgpOwoKcHVibGljOgogICAgUU9iamVjdCAqcGFyZW50KCkgY29uc3Qg
eyByZXR1cm4gcGFyZW50T2JqOyB9Cgpwcml2YXRlIDoKICAgIHZvaWQgY2xlYW51cEV2ZW50Rmls
dGVyKCk7Cgpwcm90ZWN0ZWQ6CiAgICBib29sIGFjdGl2YXRlX2ZpbHRlcnMoIFFFdmVudCAqICk7
CiAgICBRQ29ubmVjdGlvbkxpc3QgKnJlY2VpdmVycyggY29uc3QgY2hhciAqc2lnbmFsICkgY29u
c3Q7CiAgICB2b2lkIGFjdGl2YXRlX3NpZ25hbCggY29uc3QgY2hhciAqc2lnbmFsICk7CiAgICB2
b2lkIGFjdGl2YXRlX3NpZ25hbCggY29uc3QgY2hhciAqc2lnbmFsLCBzaG9ydCApOwogICAgdm9p
ZCBhY3RpdmF0ZV9zaWduYWwoIGNvbnN0IGNoYXIgKnNpZ25hbCwgaW50ICk7CiAgICB2b2lkIGFj
dGl2YXRlX3NpZ25hbCggY29uc3QgY2hhciAqc2lnbmFsLCBsb25nICk7CiAgICB2b2lkIGFjdGl2
YXRlX3NpZ25hbCggY29uc3QgY2hhciAqc2lnbmFsLCBjb25zdCBjaGFyICogKTsKICAgIHZvaWQg
YWN0aXZhdGVfc2lnbmFsX2Jvb2woIGNvbnN0IGNoYXIgKnNpZ25hbCwgYm9vbCApOwogICAgdm9p
ZCBhY3RpdmF0ZV9zaWduYWxfc3RyaW5nKCBjb25zdCBjaGFyICpzaWduYWwsIFFTdHJpbmcgKTsK
ICAgIHZvaWQgYWN0aXZhdGVfc2lnbmFsX3N0cnJlZiggY29uc3QgY2hhciAqc2lnbmFsLCBjb25z
dCBRU3RyaW5nICYgKTsKCiAgICBjb25zdCBRT2JqZWN0ICpzZW5kZXIoKTsKCgogICAgdmlydHVh
bCB2b2lkIGluaXRNZXRhT2JqZWN0KCk7CiAgICBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01l
dGFPYmplY3QoKTsKCiAgICB2aXJ0dWFsIHZvaWQgdGltZXJFdmVudCggUVRpbWVyRXZlbnQgKiAp
OwogICAgdmlydHVhbCB2b2lkIGNoaWxkRXZlbnQoIFFDaGlsZEV2ZW50ICogKTsKCiAgICB2aXJ0
dWFsIHZvaWQgY29ubmVjdE5vdGlmeSggY29uc3QgY2hhciAqc2lnbmFsICk7CiAgICB2aXJ0dWFs
IHZvaWQgZGlzY29ubmVjdE5vdGlmeSggY29uc3QgY2hhciAqc2lnbmFsICk7CiAgICB2aXJ0dWFs
IGJvb2wgY2hlY2tDb25uZWN0QXJncyggY29uc3QgY2hhciAqc2lnbmFsLCBjb25zdCBRT2JqZWN0
ICpyZWNlaXZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICptZW1iZXIgKTsKICAgIHN0YXRpYyBRQ1N0cmluZyBub3JtYWxpemVTaWduYWxTbG90KCBjb25z
dCBjaGFyICpzaWduYWxTbG90ICk7CgogICAgc3RhdGljIHZvaWQgYmFkU3VwZXJjbGFzc1dhcm5p
bmcoIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqc3VwZXJjbGFzc05hbWUgKTsKCnByaXZhdGU6CiAgICB1aW50
IGlzU2lnbmFsIDogMTsKICAgIHVpbnQgaXNXaWRnZXQgOiAxOwogICAgdWludCBwZW5kVGltZXIg
OiAxOwogICAgdWludCBwZW5kRXZlbnQgOiAxOwogICAgdWludCBibG9ja1NpZyA6IDE7CiAgICB1
aW50IHdhc0RlbGV0ZWQgOiAxOwogICAgdWludCBpc1RyZWUgOiAxOwoKICAgIFFNZXRhT2JqZWN0
ICpxdWVyeU1ldGFPYmplY3QoKSBjb25zdDsKICAgIHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9i
ajsKICAgIGNvbnN0IGNoYXIgKm9iam5hbWU7CiAgICBRT2JqZWN0ICpwYXJlbnRPYmo7CiAgICBR
T2JqZWN0TGlzdCAqY2hpbGRPYmplY3RzOwogICAgUVNpZ25hbERpY3QgKmNvbm5lY3Rpb25zOwog
ICAgUU9iamVjdExpc3QgKnNlbmRlck9iamVjdHM7CiAgICBRT2JqZWN0TGlzdCAqZXZlbnRGaWx0
ZXJzOwoKCiAgICBRT2JqZWN0ICpzaWdTZW5kZXI7CgogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNh
dGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRQmFzZUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNz
IFFXaWRnZXQ7CiAgICBmcmllbmQgY2xhc3MgUVNpZ25hbDsKICAgIGZyaWVuZCBjbGFzcyBRU2Vu
ZGVyT2JqZWN0OwoKcHJpdmF0ZToKCiAgICBRT2JqZWN0KCBjb25zdCBRT2JqZWN0ICYgKTsKICAg
IFFPYmplY3QgJm9wZXJhdG9yPSggY29uc3QgUU9iamVjdCAmICk7CgoKcHVibGljOgoKCiAgICBR
U3RyaW5nTGlzdCBzdXBlckNsYXNzZXMoIGJvb2wgaW5jbHVkZVRoaXMgPSBGQUxTRSApIGNvbnN0
OwoKfTsKCgoKaW5saW5lIGJvb2wgUU9iamVjdDo6Y29ubmVjdCggY29uc3QgUU9iamVjdCAqc2Vu
ZGVyLCBjb25zdCBjaGFyICpzaWduYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKm1lbWJlciApIGNvbnN0CnsKICAgIHJldHVybiBjb25uZWN0KCBzZW5kZXIsIHNp
Z25hbCwgdGhpcywgbWVtYmVyICk7Cn0KCmlubGluZSBib29sIFFPYmplY3Q6OmRpc2Nvbm5lY3Qo
IGNvbnN0IGNoYXIgKnNpZ25hbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1lbWJlciApCnsKICAgIHJldHVybiBk
aXNjb25uZWN0KCB0aGlzLCBzaWduYWwsIHJlY2VpdmVyLCBtZW1iZXIgKTsKfQoKaW5saW5lIGJv
b2wgUU9iamVjdDo6ZGlzY29ubmVjdCggY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNo
YXIgKm1lbWJlciApCnsKICAgIHJldHVybiBkaXNjb25uZWN0KCB0aGlzLCAwLCByZWNlaXZlciwg
bWVtYmVyICk7Cn0KCmlubGluZSBjb25zdCBRT2JqZWN0ICpRT2JqZWN0OjpzZW5kZXIoKQp7CiAg
ICByZXR1cm4gc2lnU2VuZGVyOwp9CgoKY2xhc3MgUVNlbmRlck9iamVjdCA6IHB1YmxpYyBRT2Jq
ZWN0CnsKcHVibGljOgogICAgdm9pZCBzZXRTZW5kZXIoIFFPYmplY3QgKnMgKSB7IHNpZ1NlbmRl
cj1zOyB9Cn07CgoKaW5saW5lIFFTdHJpbmcgUU9iamVjdDo6dHIoIGNvbnN0IGNoYXIgKnMgKSB7
CiAgICByZXR1cm4gUVN0cmluZzo6ZnJvbUxhdGluMSggcyApOwp9CmlubGluZSBRU3RyaW5nIFFP
YmplY3Q6OnRyKCBjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICogKSB7CiAgICByZXR1cm4gUVN0
cmluZzo6ZnJvbUxhdGluMSggcyApOwp9CiMgMjggImtjb25maWdiYXNlLmgiIDIKIyAxICIvdXNy
L2xpYi9xdC0yLjMuMS9pbmNsdWRlL3Fjb2xvci5oIiAxCiMgNDIgIi91c3IvbGliL3F0LTIuMy4x
L2luY2x1ZGUvcWNvbG9yLmgiCiMgMSAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xd2luZG93
ZGVmcy5oIiAxCiMgNDMgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWNvbG9yLmgiIDIKCgpj
b25zdCBRUmdiIFJHQl9ESVJUWSA9IDB4ODAwMDAwMDA7CmNvbnN0IFFSZ2IgUkdCX0lOVkFMSUQg
PSAweDQwMDAwMDAwOwpjb25zdCBRUmdiIFJHQl9ESVJFQ1QgPSAweDIwMDAwMDAwOwpjb25zdCBR
UmdiIFJHQl9NQVNLID0gMHgwMGZmZmZmZjsKCgogICAgICAgICBpbmxpbmUgaW50IHFSZWQoIFFS
Z2IgcmdiICkKeyByZXR1cm4gKGludCkoKHJnYiA+PiAxNikgJiAweGZmKTsgfQoKICAgICAgICAg
aW5saW5lIGludCBxR3JlZW4oIFFSZ2IgcmdiICkKeyByZXR1cm4gKGludCkoKHJnYiA+PiA4KSAm
IDB4ZmYpOyB9CgogICAgICAgICBpbmxpbmUgaW50IHFCbHVlKCBRUmdiIHJnYiApCnsgcmV0dXJu
IChpbnQpKHJnYiAmIDB4ZmYpOyB9CgogICAgICAgICBpbmxpbmUgaW50IHFBbHBoYSggUVJnYiBy
Z2IgKQp7IHJldHVybiAoaW50KSgocmdiID4+IDI0KSAmIDB4ZmYpOyB9CgogICAgICAgICBpbmxp
bmUgUVJnYiBxUmdiKCBpbnQgciwgaW50IGcsIGludCBiICkKeyByZXR1cm4gKDB4ZmYgPDwgMjQp
IHwgKChyICYgMHhmZikgPDwgMTYpIHwgKChnICYgMHhmZikgPDwgOCkgfCAoYiAmIDB4ZmYpOyB9
CgogICAgICAgICBpbmxpbmUgUVJnYiBxUmdiYSggaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEg
KQp7IHJldHVybiAoKGEgJiAweGZmKSA8PCAyNCkgfCAoKHIgJiAweGZmKSA8PCAxNikgfCAoKGcg
JiAweGZmKSA8PCA4KSB8IChiICYgMHhmZik7IH0KCiAgICAgICAgIGlubGluZSBpbnQgcUdyYXko
IGludCByLCBpbnQgZywgaW50IGIgKQp7IHJldHVybiAocioxMStnKjE2K2IqNSkvMzI7IH0KCiAg
ICAgICAgIGlubGluZSBpbnQgcUdyYXkoIFFSZ2IgcmdiICkKeyByZXR1cm4gcUdyYXkoIHFSZWQo
cmdiKSwgcUdyZWVuKHJnYiksIHFCbHVlKHJnYikgKTsgfQoKCmNsYXNzIFFDb2xvcgp7CnB1Ymxp
YzoKICAgIGVudW0gU3BlYyB7IFJnYiwgSHN2IH07CgogICAgUUNvbG9yKCk7CiAgICBRQ29sb3Io
IGludCByLCBpbnQgZywgaW50IGIgKTsKICAgIFFDb2xvciggaW50IHgsIGludCB5LCBpbnQgeiwg
U3BlYyApOwogICAgUUNvbG9yKCBRUmdiIHJnYiwgdWludCBwaXhlbD0weGZmZmZmZmZmKTsKICAg
IFFDb2xvciggY29uc3QgUVN0cmluZyYgbmFtZSApOwogICAgUUNvbG9yKCBjb25zdCBjaGFyICpu
YW1lICk7CiAgICBRQ29sb3IoIGNvbnN0IFFDb2xvciAmICk7CiAgICBRQ29sb3IgJm9wZXJhdG9y
PSggY29uc3QgUUNvbG9yICYgKTsKCiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKICAgIGJvb2wg
aXNEaXJ0eSgpIGNvbnN0OwoKICAgIFFTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgdm9pZCBzZXRO
YW1lZENvbG9yKCBjb25zdCBRU3RyaW5nJiBuYW1lICk7CgogICAgdm9pZCByZ2IoIGludCAqciwg
aW50ICpnLCBpbnQgKmIgKSBjb25zdDsKICAgIFFSZ2IgcmdiKCkgY29uc3Q7CiAgICB2b2lkIHNl
dFJnYiggaW50IHIsIGludCBnLCBpbnQgYiApOwogICAgdm9pZCBzZXRSZ2IoIFFSZ2IgcmdiICk7
CgogICAgaW50IHJlZCgpIGNvbnN0OwogICAgaW50IGdyZWVuKCkgY29uc3Q7CiAgICBpbnQgYmx1
ZSgpIGNvbnN0OwoKICAgIHZvaWQgaHN2KCBpbnQgKmgsIGludCAqcywgaW50ICp2ICkgY29uc3Q7
CiAgICB2b2lkIGdldEhzdiggaW50ICZoLCBpbnQgJnMsIGludCAmdiApIGNvbnN0OwogICAgdm9p
ZCBzZXRIc3YoIGludCBoLCBpbnQgcywgaW50IHYgKTsKCiAgICBRQ29sb3IgbGlnaHQoIGludCBm
ID0gMTUwICkgY29uc3Q7CiAgICBRQ29sb3IgZGFyayggaW50IGYgPSAyMDAgKSBjb25zdDsKCiAg
ICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFDb2xvciAmYyApIGNvbnN0OwogICAgYm9vbCBvcGVy
YXRvciE9KCBjb25zdCBRQ29sb3IgJmMgKSBjb25zdDsKCiAgICBzdGF0aWMgYm9vbCBsYXp5QWxs
b2MoKTsKICAgIHN0YXRpYyB2b2lkIHNldExhenlBbGxvYyggYm9vbCApOwogICAgdWludCBhbGxv
YygpOwogICAgdWludCBwaXhlbCgpIGNvbnN0OwoKICAgIHN0YXRpYyBpbnQgbWF4Q29sb3JzKCk7
CiAgICBzdGF0aWMgaW50IG51bUJpdFBsYW5lcygpOwoKICAgIHN0YXRpYyBpbnQgZW50ZXJBbGxv
Y0NvbnRleHQoKTsKICAgIHN0YXRpYyB2b2lkIGxlYXZlQWxsb2NDb250ZXh0KCk7CiAgICBzdGF0
aWMgaW50IGN1cnJlbnRBbGxvY0NvbnRleHQoKTsKICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lBbGxv
Y0NvbnRleHQoIGludCApOwoKCgoKCgogICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAg
c3RhdGljIHZvaWQgY2xlYW51cCgpOwoKcHJpdmF0ZToKICAgIHZvaWQgc2V0U3lzdGVtTmFtZWRD
b2xvciggY29uc3QgUVN0cmluZyYgbmFtZSApOwogICAgc3RhdGljIHZvaWQgaW5pdEdsb2JhbENv
bG9ycygpOwogICAgc3RhdGljIFFDb2xvciogZ2xvYmFsQ29sb3JzKCk7CiAgICBzdGF0aWMgYm9v
bCBjb2xvcl9pbml0OwogICAgc3RhdGljIGJvb2wgZ2xvYmFsc19pbml0OwogICAgc3RhdGljIGJv
b2wgbGF6eV9hbGxvYzsKCgoKICAgIHVpbnQgcGl4OwogICAgUVJnYiByZ2JWYWw7Cn07CgoKaW5s
aW5lIFFDb2xvcjo6UUNvbG9yKCkKeyByZ2JWYWwgPSBSR0JfSU5WQUxJRDsgcGl4ID0gMDsgfQoK
aW5saW5lIFFDb2xvcjo6UUNvbG9yKCBpbnQgciwgaW50IGcsIGludCBiICkKeyBzZXRSZ2IoIHIs
IGcsIGIgKTsgfQoKaW5saW5lIGJvb2wgUUNvbG9yOjppc1ZhbGlkKCkgY29uc3QKeyByZXR1cm4g
KHJnYlZhbCAmIFJHQl9JTlZBTElEKSA9PSAwOyB9CgppbmxpbmUgYm9vbCBRQ29sb3I6OmlzRGly
dHkoKSBjb25zdAp7IHJldHVybiAocmdiVmFsICYgUkdCX0RJUlRZKSAhPSAwOyB9CgppbmxpbmUg
UVJnYiBRQ29sb3I6OnJnYigpIGNvbnN0CnsgcmV0dXJuIHJnYlZhbCB8IH5SR0JfTUFTSzsgfQoK
aW5saW5lIGludCBRQ29sb3I6OnJlZCgpIGNvbnN0CnsgcmV0dXJuIHFSZWQocmdiVmFsKTsgfQoK
aW5saW5lIGludCBRQ29sb3I6OmdyZWVuKCkgY29uc3QKeyByZXR1cm4gcUdyZWVuKHJnYlZhbCk7
IH0KCmlubGluZSBpbnQgUUNvbG9yOjpibHVlKCkgY29uc3QKeyByZXR1cm4gcUJsdWUocmdiVmFs
KTsgfQoKaW5saW5lIHVpbnQgUUNvbG9yOjpwaXhlbCgpIGNvbnN0CnsgcmV0dXJuIChyZ2JWYWwg
JiBSR0JfRElSVFkpID09IDAgPyBwaXggOiAoKFFDb2xvciopdGhpcyktPmFsbG9jKCk7IH0KCmlu
bGluZSBib29sIFFDb2xvcjo6bGF6eUFsbG9jKCkKeyByZXR1cm4gbGF6eV9hbGxvYzsgfQoKCmlu
bGluZSBib29sIFFDb2xvcjo6b3BlcmF0b3I9PSggY29uc3QgUUNvbG9yICZjICkgY29uc3QKewog
ICAgcmV0dXJuIGlzVmFsaWQoKT09Yy5pc1ZhbGlkKCkgJiYKICAgICAgICAoKCgocmdiVmFsIHwg
Yy5yZ2JWYWwpICYgUkdCX0RJUkVDVCkgPT0gMCAmJgogICAgICAgICAgICAocmdiVmFsICYgUkdC
X01BU0spID09IChjLnJnYlZhbCAmIFJHQl9NQVNLKSkgfHwKICAgICAgICAgICAoKHJnYlZhbCAm
IGMucmdiVmFsICYgUkdCX0RJUkVDVCkgIT0gMCAmJgogICAgICAgICAgICAocmdiVmFsICYgUkdC
X01BU0spID09IChjLnJnYlZhbCAmIFJHQl9NQVNLKSAmJiBwaXggPT0gYy5waXgpKTsKfQoKaW5s
aW5lIGJvb2wgUUNvbG9yOjpvcGVyYXRvciE9KCBjb25zdCBRQ29sb3IgJmMgKSBjb25zdAp7CiAg
ICByZXR1cm4gIW9wZXJhdG9yPT0oYyk7Cn0KCgoKCgoKCiAgICAgICAgIFFEYXRhU3RyZWFtICZv
cGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQ29sb3IgJiApOwogICAgICAgICBRRGF0
YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUNvbG9yICYgKTsKIyAyOSAia2Nv
bmZpZ2Jhc2UuaCIgMgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWZvbnQuaCIgMQoj
IDQyICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3Fmb250LmgiCiMgMSAiL3Vzci9saWIvcXQt
Mi4zLjEvaW5jbHVkZS9xd2luZG93ZGVmcy5oIiAxCiMgNDMgIi91c3IvbGliL3F0LTIuMy4xL2lu
Y2x1ZGUvcWZvbnQuaCIgMgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXN0cmluZy5o
IiAxCiMgNDQgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWZvbnQuaCIgMgoKCgpjbGFzcyBR
U3RyaW5nTGlzdDsKc3RydWN0IFFGb250RGVmOwpzdHJ1Y3QgUUZvbnREYXRhOwpjbGFzcyBRRm9u
dEludGVybmFsOwpjbGFzcyBRUmVuZGVyZWRGb250OwoKY2xhc3MgUUZvbnQKewpwdWJsaWM6CiAg
ICBlbnVtIENoYXJTZXQgeyBJU09fODg1OV8xLCBMYXRpbjEgPSBJU09fODg1OV8xLCBBbnlDaGFy
U2V0LAogICAgICAgICAgICAgICAgICAgICBJU09fODg1OV8yLCBMYXRpbjIgPSBJU09fODg1OV8y
LAogICAgICAgICAgICAgICAgICAgICBJU09fODg1OV8zLCBMYXRpbjMgPSBJU09fODg1OV8zLAog
ICAgICAgICAgICAgICAgICAgICBJU09fODg1OV80LCBMYXRpbjQgPSBJU09fODg1OV80LAogICAg
ICAgICAgICAgICAgICAgICBJU09fODg1OV81LAogICAgICAgICAgICAgICAgICAgICBJU09fODg1
OV82LAogICAgICAgICAgICAgICAgICAgICBJU09fODg1OV83LAogICAgICAgICAgICAgICAgICAg
ICBJU09fODg1OV84LAogICAgICAgICAgICAgICAgICAgICBJU09fODg1OV85LCBMYXRpbjUgPSBJ
U09fODg1OV85LAogICAgICAgICAgICAgICAgICAgICBJU09fODg1OV8xMCwgTGF0aW42ID0gSVNP
Xzg4NTlfMTAsCiAgICAgICAgICAgICAgICAgICAgIElTT184ODU5XzExLCBUSVM2MjAgPSBJU09f
ODg1OV8xMSwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfMTIsCiAgICAgICAgICAgICAg
ICAgICAgIElTT184ODU5XzEzLCBMYXRpbjcgPSBJU09fODg1OV8xMywKICAgICAgICAgICAgICAg
ICAgICAgSVNPXzg4NTlfMTQsIExhdGluOCA9IElTT184ODU5XzE0LAogICAgICAgICAgICAgICAg
ICAgICBJU09fODg1OV8xNSwgTGF0aW45ID0gSVNPXzg4NTlfMTUsCiAgICAgICAgICAgICAgICAg
ICAgIEtPSThSLAogICAgICAgICAgICAgICAgICAgICBTZXRfSmEsIFNldF8xID0gU2V0X0phLAog
ICAgICAgICAgICAgICAgICAgICBTZXRfS28sCiAgICAgICAgICAgICAgICAgICAgIFNldF9UaF9U
SCwKICAgICAgICAgICAgICAgICAgICAgU2V0X1poLAogICAgICAgICAgICAgICAgICAgICBTZXRf
WmhfVFcsCiAgICAgICAgICAgICAgICAgICAgIFNldF9OID0gU2V0X1poX1RXLAogICAgICAgICAg
ICAgICAgICAgICBVbmljb2RlLAoKCgoKCgogICAgICAgICAgICAgICAgICAgICBTZXRfR0JLLAog
ICAgICAgICAgICAgICAgICAgICBTZXRfQmlnNSwKCiAgICAgICAgICAgICAgICAgICAgIFRTQ0lJ
LAogICAgICAgICAgICAgICAgICAgICBLT0k4VSwKICAgICAgICAgICAgICAgICAgICAgQ1AxMjUx
LAogICAgICAgICAgICAgICAgICAgICBQVDE1NCwKCgoKCiAgICAgICAgICAgICAgICAgICAgIEpJ
U19YXzAyMDEgPSAweGEwLAoKICAgICAgICAgICAgICAgICAgICAgSklTX1hfMDIwOCA9IDB4YzAs
IEVuYzE2ID0gSklTX1hfMDIwOCwKICAgICAgICAgICAgICAgICAgICAgS1NDXzU2MDEsCiAgICAg
ICAgICAgICAgICAgICAgIEdCXzIzMTIsCiAgICAgICAgICAgICAgICAgICAgIEJpZzUKICAgIH07
CiAgICBlbnVtIFN0eWxlSGludCB7IEhlbHZldGljYSwgVGltZXMsIENvdXJpZXIsIE9sZEVuZ2xp
c2gsIFN5c3RlbSwgQW55U3R5bGUsCiAgICAgICAgICAgICAgICAgICAgIFNhbnNTZXJpZiA9IEhl
bHZldGljYSwKICAgICAgICAgICAgICAgICAgICAgU2VyaWYgPSBUaW1lcywKICAgICAgICAgICAg
ICAgICAgICAgVHlwZVdyaXRlciA9IENvdXJpZXIsCiAgICAgICAgICAgICAgICAgICAgIERlY29y
YXRpdmUgPSBPbGRFbmdsaXNofTsKICAgIGVudW0gU3R5bGVTdHJhdGVneSB7IFByZWZlckRlZmF1
bHQgPSAweDAwMDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlZmVyQml0bWFwID0gMHgw
MDAyLAogICAgICAgICAgICAgICAgICAgICAgICAgIFByZWZlckRldmljZSA9IDB4MDAwNCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJPdXRsaW5lID0gMHgwMDA4LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIEZvcmNlT3V0bGluZSA9IDB4MDAxMCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBQcmVmZXJNYXRjaCA9IDB4MDAyMCwKICAgICAgICAgICAgICAgICAgICAgICAgICBQ
cmVmZXJRdWFsaXR5ID0gMHgwMDQwIH07CiAgICBlbnVtIFdlaWdodCB7IExpZ2h0ID0gMjUsIE5v
cm1hbCA9IDUwLCBEZW1pQm9sZCA9IDYzLAogICAgICAgICAgICAgICAgICAgICBCb2xkID0gNzUs
IEJsYWNrID0gODcgfTsKICAgIFFGb250KCk7CiAgICBRRm9udCggY29uc3QgUVN0cmluZyAmZmFt
aWx5LCBpbnQgcG9pbnRTaXplID0gMTIsCiAgICAgICAgICAgaW50IHdlaWdodCA9IE5vcm1hbCwg
Ym9vbCBpdGFsaWMgPSBGQUxTRSApOwogICAgUUZvbnQoIGNvbnN0IFFTdHJpbmcgJmZhbWlseSwg
aW50IHBvaW50U2l6ZSwKICAgICAgICAgICBpbnQgd2VpZ2h0LCBib29sIGl0YWxpYywgQ2hhclNl
dCBjaGFyU2V0ICk7CiAgICBRRm9udCggY29uc3QgUUZvbnQgJiApOwogICAgflFGb250KCk7CiAg
ICBRRm9udCAmb3BlcmF0b3I9KCBjb25zdCBRRm9udCAmICk7CgogICAgUVN0cmluZyBmYW1pbHko
KSBjb25zdDsKICAgIHZvaWQgc2V0RmFtaWx5KCBjb25zdCBRU3RyaW5nICYpOwogICAgaW50IHBv
aW50U2l6ZSgpIGNvbnN0OwogICAgZmxvYXQgcG9pbnRTaXplRmxvYXQoKSBjb25zdDsKICAgIHZv
aWQgc2V0UG9pbnRTaXplKCBpbnQgKTsKICAgIHZvaWQgc2V0UG9pbnRTaXplRmxvYXQoIGZsb2F0
ICk7CiAgICBpbnQgcGl4ZWxTaXplKCkgY29uc3Q7CiAgICB2b2lkIHNldFBpeGVsU2l6ZSggaW50
ICk7CiAgICB2b2lkIHNldFBpeGVsU2l6ZUZsb2F0KCBmbG9hdCApOwogICAgaW50IHdlaWdodCgp
IGNvbnN0OwogICAgdm9pZCBzZXRXZWlnaHQoIGludCApOwogICAgYm9vbCBib2xkKCkgY29uc3Q7
CiAgICB2b2lkIHNldEJvbGQoIGJvb2wgKTsKICAgIGJvb2wgaXRhbGljKCkgY29uc3Q7CiAgICB2
b2lkIHNldEl0YWxpYyggYm9vbCApOwogICAgYm9vbCB1bmRlcmxpbmUoKSBjb25zdDsKICAgIHZv
aWQgc2V0VW5kZXJsaW5lKCBib29sICk7CiAgICBib29sIHN0cmlrZU91dCgpIGNvbnN0OwogICAg
dm9pZCBzZXRTdHJpa2VPdXQoIGJvb2wgKTsKICAgIGJvb2wgZml4ZWRQaXRjaCgpIGNvbnN0Owog
ICAgdm9pZCBzZXRGaXhlZFBpdGNoKCBib29sICk7CiAgICBTdHlsZUhpbnQgc3R5bGVIaW50KCkg
Y29uc3Q7CiAgICB2b2lkIHNldFN0eWxlSGludCggU3R5bGVIaW50ICk7CiAgICBTdHlsZVN0cmF0
ZWd5IHN0eWxlU3RyYXRlZ3koKSBjb25zdDsKICAgIHZvaWQgc2V0U3R5bGVIaW50KCBTdHlsZUhp
bnQsIFN0eWxlU3RyYXRlZ3kgKTsKICAgIENoYXJTZXQgY2hhclNldCgpIGNvbnN0OwogICAgdm9p
ZCBzZXRDaGFyU2V0KCBDaGFyU2V0ICk7CgogICAgc3RhdGljIENoYXJTZXQgY2hhclNldEZvckxv
Y2FsZSgpOwoKICAgIGJvb2wgcmF3TW9kZSgpIGNvbnN0OwogICAgdm9pZCBzZXRSYXdNb2RlKCBi
b29sICk7CgogICAgYm9vbCBleGFjdE1hdGNoKCkgY29uc3Q7CgogICAgYm9vbCBvcGVyYXRvcj09
KCBjb25zdCBRRm9udCAmICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFGb250
ICYgKSBjb25zdDsKICAgIGJvb2wgaXNDb3B5T2YoIGNvbnN0IFFGb250ICYgKSBjb25zdDsKCgoK
CgoKICAgIEhBTkRMRSBoYW5kbGUoKSBjb25zdDsKCgoKCiAgICB2b2lkIHNldFJhd05hbWUoIGNv
bnN0IFFTdHJpbmcgJiApOwogICAgUVN0cmluZyByYXdOYW1lKCkgY29uc3Q7CgogICAgUVN0cmlu
ZyBrZXkoKSBjb25zdDsKCiAgICBzdGF0aWMgUVN0cmluZyBlbmNvZGluZ05hbWUoIENoYXJTZXQg
KTsKCiAgICBzdGF0aWMgUUZvbnQgZGVmYXVsdEZvbnQoKTsKICAgIHN0YXRpYyB2b2lkIHNldERl
ZmF1bHRGb250KCBjb25zdCBRRm9udCAmICk7CgogICAgc3RhdGljIFFTdHJpbmcgc3Vic3RpdHV0
ZSggY29uc3QgUVN0cmluZyAmZmFtaWx5TmFtZSApOwogICAgc3RhdGljIHZvaWQgaW5zZXJ0U3Vi
c3RpdHV0aW9uKCBjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZyAmKTsKICAgIHN0YXRpYyB2
b2lkIHJlbW92ZVN1YnN0aXR1dGlvbiggY29uc3QgUVN0cmluZyAmKTsKICAgIHN0YXRpYyBRU3Ry
aW5nTGlzdCBzdWJzdGl0dXRpb25zKCk7CgogICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwog
ICAgc3RhdGljIHZvaWQgbG9jYWxlX2luaXQoKTsKICAgIHN0YXRpYyB2b2lkIGNsZWFudXAoKTsK
ICAgIHN0YXRpYyB2b2lkIGNhY2hlU3RhdGlzdGljcygpOwoKCgoKCnByb3RlY3RlZDoKICAgIGJv
b2wgZGlydHkoKSBjb25zdDsKCiAgICBRU3RyaW5nIGRlZmF1bHRGYW1pbHkoKSBjb25zdDsKICAg
IFFTdHJpbmcgbGFzdFJlc29ydEZhbWlseSgpIGNvbnN0OwogICAgUVN0cmluZyBsYXN0UmVzb3J0
Rm9udCgpIGNvbnN0OwogICAgaW50IGRlY2lQb2ludFNpemUoKSBjb25zdDsKCnByaXZhdGU6CiAg
ICBRRm9udCggUUZvbnREYXRhICogKTsKICAgIHZvaWQgaW5pdCgpOwogICAgdm9pZCBkZXRhY2go
KTsKICAgIHZvaWQgaW5pdEZvbnRJbmZvKCkgY29uc3Q7CiAgICB2b2lkIGxvYWQoKSBjb25zdDsK
IyAyMjEgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWZvbnQuaCIKICAgIGZyaWVuZCBjbGFz
cyBRRm9udF9Qcml2YXRlOwogICAgZnJpZW5kIGNsYXNzIFFGb250SW50ZXJuYWw7CiAgICBmcmll
bmQgY2xhc3MgUUZvbnRNZXRyaWNzOwogICAgZnJpZW5kIGNsYXNzIFFGb250SW5mbzsKICAgIGZy
aWVuZCBjbGFzcyBRUGFpbnRlcjsKCgoKCgogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRv
cjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRRm9udCAmICk7CiAgICBmcmllbmQgUURhdGFTdHJl
YW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFGb250ICYgKTsKCiAgICBRRm9udERhdGEg
KmQ7CiAgICBzdGF0aWMgQ2hhclNldCBkZWZhdWx0Q2hhclNldDsKfTsKCmlubGluZSBib29sIFFG
b250Ojpib2xkKCkgY29uc3QKeyByZXR1cm4gd2VpZ2h0KCkgPiBOb3JtYWw7IH0KCmlubGluZSB2
b2lkIFFGb250OjpzZXRCb2xkKCBib29sIGVuYWJsZSApCnsgc2V0V2VpZ2h0KCBlbmFibGUgPyBC
b2xkIDogTm9ybWFsICk7IH0KCgoKCgoKCiAgICAgICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8
KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRRm9udCAmICk7CiAgICAgICAgIFFEYXRhU3RyZWFtICZv
cGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRRm9udCAmICk7CiMgMzAgImtjb25maWdiYXNlLmgi
IDIKIyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FkYXRldGltZS5oIiAxCiMgMzEgImtj
b25maWdiYXNlLmgiIDIKIyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FzdHJsaXN0Lmgi
IDEKIyAzMiAia2NvbmZpZ2Jhc2UuaCIgMgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUv
cXN0cmluZ2xpc3QuaCIgMQojIDMzICJrY29uZmlnYmFzZS5oIiAyCiMgMSAiL3Vzci9saWIvcXQt
Mi4zLjEvaW5jbHVkZS9xdmFyaWFudC5oIiAxCiMgNDIgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1
ZGUvcXZhcmlhbnQuaCIKIyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3FzdHJpbmcuaCIg
MQojIDQzICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRlL3F2YXJpYW50LmgiIDIKCgoKCmNsYXNz
IFFTdHJpbmc7CmNsYXNzIFFDU3RyaW5nOwpjbGFzcyBRRm9udDsKY2xhc3MgUVBpeG1hcDsKY2xh
c3MgUUJydXNoOwpjbGFzcyBRUmVjdDsKY2xhc3MgUVBvaW50OwpjbGFzcyBRSW1hZ2U7CmNsYXNz
IFFTaXplOwpjbGFzcyBRQ29sb3I7CmNsYXNzIFFQYWxldHRlOwpjbGFzcyBRQ29sb3JHcm91cDsK
Y2xhc3MgUUljb25TZXQ7CmNsYXNzIFFEYXRhU3RyZWFtOwpjbGFzcyBRUG9pbnRBcnJheTsKY2xh
c3MgUVJlZ2lvbjsKY2xhc3MgUUJpdG1hcDsKY2xhc3MgUUN1cnNvcjsKY2xhc3MgUVN0cmluZ0xp
c3Q7CmNsYXNzIFFTaXplUG9saWN5OwoKCmNsYXNzIFFWYXJpYW50OwpjbGFzcyBRVmFyaWFudFBy
aXZhdGU7CnRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBRVmFsdWVMaXN0Owp0ZW1wbGF0ZSA8Y2xh
c3MgVD4gY2xhc3MgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I7CnRlbXBsYXRlIDxjbGFzcyBUPiBj
bGFzcyBRVmFsdWVMaXN0Tm9kZTsKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4gY2xhc3Mg
UU1hcDsKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4gY2xhc3MgUU1hcENvbnN0SXRlcmF0
b3I7CgoKY2xhc3MgUVZhcmlhbnQKewpwdWJsaWM6CiAgICBlbnVtIFR5cGUgewogICAgICAgIElu
dmFsaWQsCiAgICAgICAgTWFwLAogICAgICAgIExpc3QsCiAgICAgICAgU3RyaW5nLAogICAgICAg
IFN0cmluZ0xpc3QsCiAgICAgICAgRm9udCwKICAgICAgICBQaXhtYXAsCiAgICAgICAgQnJ1c2gs
CiAgICAgICAgUmVjdCwKICAgICAgICBTaXplLAogICAgICAgIENvbG9yLAogICAgICAgIFBhbGV0
dGUsCiAgICAgICAgQ29sb3JHcm91cCwKICAgICAgICBJY29uU2V0LAogICAgICAgIFBvaW50LAog
ICAgICAgIEltYWdlLAogICAgICAgIEludCwKICAgICAgICBVSW50LAogICAgICAgIEJvb2wsCiAg
ICAgICAgRG91YmxlLAogICAgICAgIENTdHJpbmcsCiAgICAgICAgUG9pbnRBcnJheSwKICAgICAg
ICBSZWdpb24sCiAgICAgICAgQml0bWFwLAogICAgICAgIEN1cnNvciwKICAgICAgICBTaXplUG9s
aWN5CiAgICB9OwoKICAgIFFWYXJpYW50KCk7CiAgICB+UVZhcmlhbnQoKTsKICAgIFFWYXJpYW50
KCBjb25zdCBRVmFyaWFudCYgKTsKICAgIFFWYXJpYW50KCBRRGF0YVN0cmVhbSYgcyApOwoKICAg
IFFWYXJpYW50KCBjb25zdCBRU3RyaW5nJiApOwogICAgUVZhcmlhbnQoIGNvbnN0IFFDU3RyaW5n
JiApOwogICAgUVZhcmlhbnQoIGNvbnN0IGNoYXIqICk7CiAgICBRVmFyaWFudCggY29uc3QgUVN0
cmluZ0xpc3QmICk7CiAgICBRVmFyaWFudCggY29uc3QgUUZvbnQmICk7CiAgICBRVmFyaWFudCgg
Y29uc3QgUVBpeG1hcCYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRSW1hZ2UmICk7CiAgICBRVmFy
aWFudCggY29uc3QgUUJydXNoJiApOwogICAgUVZhcmlhbnQoIGNvbnN0IFFQb2ludCYgKTsKICAg
IFFWYXJpYW50KCBjb25zdCBRUmVjdCYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRU2l6ZSYgKTsK
ICAgIFFWYXJpYW50KCBjb25zdCBRQ29sb3ImICk7CiAgICBRVmFyaWFudCggY29uc3QgUVBhbGV0
dGUmICk7CiAgICBRVmFyaWFudCggY29uc3QgUUNvbG9yR3JvdXAmICk7CiAgICBRVmFyaWFudCgg
Y29uc3QgUUljb25TZXQmICk7CiAgICBRVmFyaWFudCggY29uc3QgUVBvaW50QXJyYXkmICk7CiAg
ICBRVmFyaWFudCggY29uc3QgUVJlZ2lvbiYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRQml0bWFw
JiApOwogICAgUVZhcmlhbnQoIGNvbnN0IFFDdXJzb3ImICk7CiAgICBRVmFyaWFudCggY29uc3Qg
UVZhbHVlTGlzdDxRVmFyaWFudD4mICk7CiAgICBRVmFyaWFudCggY29uc3QgUU1hcDxRU3RyaW5n
LFFWYXJpYW50PiYgKTsKICAgIFFWYXJpYW50KCBpbnQgKTsKICAgIFFWYXJpYW50KCB1aW50ICk7
CgogICAgUVZhcmlhbnQoIGJvb2wsIGludCApOwogICAgUVZhcmlhbnQoIGRvdWJsZSApOwogICAg
UVZhcmlhbnQoIFFTaXplUG9saWN5ICk7CgogICAgUVZhcmlhbnQmIG9wZXJhdG9yPSAoIGNvbnN0
IFFWYXJpYW50JiApOwogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRVmFyaWFudCYgKSBjb25z
dDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVZhcmlhbnQmICkgY29uc3Q7CgogICAgVHlw
ZSB0eXBlKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyKiB0eXBlTmFtZSgpIGNvbnN0OwoKICAgIGJv
b2wgY2FuQ2FzdCggVHlwZSApIGNvbnN0OwoKICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwoKICAg
IHZvaWQgY2xlYXIoKTsKCiAgICBjb25zdCBRU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAgICBj
b25zdCBRQ1N0cmluZyB0b0NTdHJpbmcoKSBjb25zdDsKICAgIGNvbnN0IFFTdHJpbmdMaXN0IHRv
U3RyaW5nTGlzdCgpIGNvbnN0OwogICAgY29uc3QgUUZvbnQgdG9Gb250KCkgY29uc3Q7CiAgICBj
b25zdCBRUGl4bWFwIHRvUGl4bWFwKCkgY29uc3Q7CiAgICBjb25zdCBRSW1hZ2UgdG9JbWFnZSgp
IGNvbnN0OwogICAgY29uc3QgUUJydXNoIHRvQnJ1c2goKSBjb25zdDsKICAgIGNvbnN0IFFQb2lu
dCB0b1BvaW50KCkgY29uc3Q7CiAgICBjb25zdCBRUmVjdCB0b1JlY3QoKSBjb25zdDsKICAgIGNv
bnN0IFFTaXplIHRvU2l6ZSgpIGNvbnN0OwogICAgY29uc3QgUUNvbG9yIHRvQ29sb3IoKSBjb25z
dDsKICAgIGNvbnN0IFFQYWxldHRlIHRvUGFsZXR0ZSgpIGNvbnN0OwogICAgY29uc3QgUUNvbG9y
R3JvdXAgdG9Db2xvckdyb3VwKCkgY29uc3Q7CiAgICBjb25zdCBRSWNvblNldCB0b0ljb25TZXQo
KSBjb25zdDsKICAgIGNvbnN0IFFQb2ludEFycmF5IHRvUG9pbnRBcnJheSgpIGNvbnN0OwogICAg
Y29uc3QgUUJpdG1hcCB0b0JpdG1hcCgpIGNvbnN0OwogICAgY29uc3QgUVJlZ2lvbiB0b1JlZ2lv
bigpIGNvbnN0OwogICAgY29uc3QgUUN1cnNvciB0b0N1cnNvcigpIGNvbnN0OwogICAgaW50IHRv
SW50KCkgY29uc3Q7CiAgICB1aW50IHRvVUludCgpIGNvbnN0OwogICAgYm9vbCB0b0Jvb2woKSBj
b25zdDsKICAgIGRvdWJsZSB0b0RvdWJsZSgpIGNvbnN0OwogICAgY29uc3QgUVZhbHVlTGlzdDxR
VmFyaWFudD4gdG9MaXN0KCkgY29uc3Q7CiAgICBjb25zdCBRTWFwPFFTdHJpbmcsUVZhcmlhbnQ+
IHRvTWFwKCkgY29uc3Q7CiAgICBRU2l6ZVBvbGljeSB0b1NpemVQb2xpY3koKSBjb25zdDsKCiAg
ICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxRVmFyaWFudD4gbGlzdEJlZ2luKCkgY29uc3Q7CiAg
ICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxRVmFyaWFudD4gbGlzdEVuZCgpIGNvbnN0OwogICAg
UVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8UVN0cmluZz4gc3RyaW5nTGlzdEJlZ2luKCkgY29uc3Q7
CiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxRU3RyaW5nPiBzdHJpbmdMaXN0RW5kKCkgY29u
c3Q7CiAgICBRTWFwQ29uc3RJdGVyYXRvcjxRU3RyaW5nLFFWYXJpYW50PiBtYXBCZWdpbigpIGNv
bnN0OwogICAgUU1hcENvbnN0SXRlcmF0b3I8UVN0cmluZyxRVmFyaWFudD4gbWFwRW5kKCkgY29u
c3Q7CiAgICBRTWFwQ29uc3RJdGVyYXRvcjxRU3RyaW5nLFFWYXJpYW50PiBtYXBGaW5kKCBjb25z
dCBRU3RyaW5nJiApIGNvbnN0OwoKICAgIFFTdHJpbmcmIGFzU3RyaW5nKCk7CiAgICBRQ1N0cmlu
ZyYgYXNDU3RyaW5nKCk7CiAgICBRU3RyaW5nTGlzdCYgYXNTdHJpbmdMaXN0KCk7CiAgICBRRm9u
dCYgYXNGb250KCk7CiAgICBRUGl4bWFwJiBhc1BpeG1hcCgpOwogICAgUUltYWdlJiBhc0ltYWdl
KCk7CiAgICBRQnJ1c2gmIGFzQnJ1c2goKTsKICAgIFFQb2ludCYgYXNQb2ludCgpOwogICAgUVJl
Y3QmIGFzUmVjdCgpOwogICAgUVNpemUmIGFzU2l6ZSgpOwogICAgUUNvbG9yJiBhc0NvbG9yKCk7
CiAgICBRUGFsZXR0ZSYgYXNQYWxldHRlKCk7CiAgICBRQ29sb3JHcm91cCYgYXNDb2xvckdyb3Vw
KCk7CiAgICBRSWNvblNldCYgYXNJY29uU2V0KCk7CiAgICBRUG9pbnRBcnJheSYgYXNQb2ludEFy
cmF5KCk7CiAgICBRQml0bWFwJiBhc0JpdG1hcCgpOwogICAgUVJlZ2lvbiYgYXNSZWdpb24oKTsK
ICAgIFFDdXJzb3ImIGFzQ3Vyc29yKCk7CiAgICBpbnQmIGFzSW50KCk7CiAgICB1aW50JiBhc1VJ
bnQoKTsKICAgIGJvb2wmIGFzQm9vbCgpOwogICAgZG91YmxlJiBhc0RvdWJsZSgpOwogICAgUVZh
bHVlTGlzdDxRVmFyaWFudD4mIGFzTGlzdCgpOwogICAgUU1hcDxRU3RyaW5nLFFWYXJpYW50PiYg
YXNNYXAoKTsKICAgIFFTaXplUG9saWN5JiBhc1NpemVQb2xpY3koKTsKCiAgICB2b2lkIGxvYWQo
IFFEYXRhU3RyZWFtJiApOwogICAgdm9pZCBzYXZlKCBRRGF0YVN0cmVhbSYgKSBjb25zdDsKCiAg
ICBzdGF0aWMgY29uc3QgY2hhciogdHlwZVRvTmFtZSggVHlwZSB0eXAgKTsKICAgIHN0YXRpYyBU
eXBlIG5hbWVUb1R5cGUoIGNvbnN0IGNoYXIqIG5hbWUgKTsKCnByaXZhdGU6CiAgICB2b2lkIGRl
dGFjaCgpOwoKICAgIFFWYXJpYW50UHJpdmF0ZSogZDsKfTsKCmNsYXNzIFFWYXJpYW50UHJpdmF0
ZSA6IHB1YmxpYyBRU2hhcmVkCnsKcHVibGljOgogICAgUVZhcmlhbnRQcml2YXRlKCk7CiAgICBR
VmFyaWFudFByaXZhdGUoIFFWYXJpYW50UHJpdmF0ZSogKTsKICAgIH5RVmFyaWFudFByaXZhdGUo
KTsKCiAgICB2b2lkIGNsZWFyKCk7CgogICAgUVZhcmlhbnQ6OlR5cGUgdHlwOwogICAgdW5pb24K
ICAgIHsKICAgICAgICB1aW50IHU7CiAgICAgICAgaW50IGk7CiAgICAgICAgYm9vbCBiOwogICAg
ICAgIGRvdWJsZSBkOwogICAgICAgIHZvaWQgKnB0cjsKICAgIH0gdmFsdWU7Cn07CgoKCiMgMSAi
L3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xdmFsdWVsaXN0LmgiIDEKIyAyNTEgIi91c3IvbGli
L3F0LTIuMy4xL2luY2x1ZGUvcXZhcmlhbnQuaCIgMgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2lu
Y2x1ZGUvcXN0cmluZ2xpc3QuaCIgMQojIDI1MiAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9x
dmFyaWFudC5oIiAyCiMgMSAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xbWFwLmgiIDEKIyAy
NTMgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXZhcmlhbnQuaCIgMgoKCmlubGluZSBRVmFy
aWFudDo6VHlwZSBRVmFyaWFudDo6dHlwZSgpIGNvbnN0CnsKICAgIHJldHVybiBkLT50eXA7Cn0K
CmlubGluZSBib29sIFFWYXJpYW50Ojppc1ZhbGlkKCkgY29uc3QKewogICAgcmV0dXJuIChkLT50
eXAgIT0gSW52YWxpZCk7Cn0KCmlubGluZSBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxRU3RyaW5n
PiBRVmFyaWFudDo6c3RyaW5nTGlzdEJlZ2luKCkgY29uc3QKewogICAgaWYgKCBkLT50eXAgIT0g
U3RyaW5nTGlzdCApCiAgICAgICAgcmV0dXJuIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFFTdHJp
bmc+KCk7CiAgICByZXR1cm4gKChjb25zdCBRU3RyaW5nTGlzdCopZC0+dmFsdWUucHRyKS0+YmVn
aW4oKTsKfQoKaW5saW5lIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFFTdHJpbmc+IFFWYXJpYW50
OjpzdHJpbmdMaXN0RW5kKCkgY29uc3QKewogICAgaWYgKCBkLT50eXAgIT0gU3RyaW5nTGlzdCAp
CiAgICAgICAgcmV0dXJuIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFFTdHJpbmc+KCk7CiAgICBy
ZXR1cm4gKChjb25zdCBRU3RyaW5nTGlzdCopZC0+dmFsdWUucHRyKS0+ZW5kKCk7Cn0KCmlubGlu
ZSBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxRVmFyaWFudD4gUVZhcmlhbnQ6Omxpc3RCZWdpbigp
IGNvbnN0CnsKICAgIGlmICggZC0+dHlwICE9IExpc3QgKQogICAgICAgIHJldHVybiBRVmFsdWVM
aXN0Q29uc3RJdGVyYXRvcjxRVmFyaWFudD4oKTsKICAgIHJldHVybiAoKGNvbnN0IFFWYWx1ZUxp
c3Q8UVZhcmlhbnQ+KilkLT52YWx1ZS5wdHIpLT5iZWdpbigpOwp9CgppbmxpbmUgUVZhbHVlTGlz
dENvbnN0SXRlcmF0b3I8UVZhcmlhbnQ+IFFWYXJpYW50OjpsaXN0RW5kKCkgY29uc3QKewogICAg
aWYgKCBkLT50eXAgIT0gTGlzdCApCiAgICAgICAgcmV0dXJuIFFWYWx1ZUxpc3RDb25zdEl0ZXJh
dG9yPFFWYXJpYW50PigpOwogICAgcmV0dXJuICgoY29uc3QgUVZhbHVlTGlzdDxRVmFyaWFudD4q
KWQtPnZhbHVlLnB0ciktPmVuZCgpOwp9CgppbmxpbmUgUU1hcENvbnN0SXRlcmF0b3I8UVN0cmlu
ZyxRVmFyaWFudD4gUVZhcmlhbnQ6Om1hcEJlZ2luKCkgY29uc3QKewogICAgaWYgKCBkLT50eXAg
IT0gTWFwICkKICAgICAgICByZXR1cm4gUU1hcENvbnN0SXRlcmF0b3I8UVN0cmluZyxRVmFyaWFu
dD4oKTsKICAgIHJldHVybiAoKGNvbnN0IFFNYXA8UVN0cmluZyxRVmFyaWFudD4qKWQtPnZhbHVl
LnB0ciktPmJlZ2luKCk7Cn0KCmlubGluZSBRTWFwQ29uc3RJdGVyYXRvcjxRU3RyaW5nLFFWYXJp
YW50PiBRVmFyaWFudDo6bWFwRW5kKCkgY29uc3QKewogICAgaWYgKCBkLT50eXAgIT0gTWFwICkK
ICAgICAgICByZXR1cm4gUU1hcENvbnN0SXRlcmF0b3I8UVN0cmluZyxRVmFyaWFudD4oKTsKICAg
IHJldHVybiAoKGNvbnN0IFFNYXA8UVN0cmluZyxRVmFyaWFudD4qKWQtPnZhbHVlLnB0ciktPmVu
ZCgpOwp9CgppbmxpbmUgUU1hcENvbnN0SXRlcmF0b3I8UVN0cmluZyxRVmFyaWFudD4gUVZhcmlh
bnQ6Om1hcEZpbmQoIGNvbnN0IFFTdHJpbmcmIGtleSApIGNvbnN0CnsKICAgIGlmICggZC0+dHlw
ICE9IE1hcCApCiAgICAgICAgcmV0dXJuIFFNYXBDb25zdEl0ZXJhdG9yPFFTdHJpbmcsUVZhcmlh
bnQ+KCk7CiAgICByZXR1cm4gKChjb25zdCBRTWFwPFFTdHJpbmcsUVZhcmlhbnQ+KilkLT52YWx1
ZS5wdHIpLT5maW5kKCBrZXkgKTsKfQoKICAgICAgICAgUURhdGFTdHJlYW0mIG9wZXJhdG9yPj4g
KCBRRGF0YVN0cmVhbSYgcywgUVZhcmlhbnQmIHAgKTsKICAgICAgICAgUURhdGFTdHJlYW0mIG9w
ZXJhdG9yPDwgKCBRRGF0YVN0cmVhbSYgcywgY29uc3QgUVZhcmlhbnQmIHAgKTsKICAgICAgICAg
UURhdGFTdHJlYW0mIG9wZXJhdG9yPj4gKCBRRGF0YVN0cmVhbSYgcywgUVZhcmlhbnQ6OlR5cGUm
IHAgKTsKICAgICAgICAgUURhdGFTdHJlYW0mIG9wZXJhdG9yPDwgKCBRRGF0YVN0cmVhbSYgcywg
Y29uc3QgUVZhcmlhbnQ6OlR5cGUgcCApOwojIDM0ICJrY29uZmlnYmFzZS5oIiAyCiMgMSAiL3Vz
ci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xbWFwLmgiIDEKIyAzNSAia2NvbmZpZ2Jhc2UuaCIgMgoK
IyAxICJrY29uZmlnZGF0YS5oIiAxCiMgMzcgImtjb25maWdiYXNlLmgiIDIKCmNsYXNzIEtDb25m
aWdCYWNrRW5kOwpjbGFzcyBLQ29uZmlnQmFzZVByaXZhdGU7CiMgNjUgImtjb25maWdiYXNlLmgi
CmNsYXNzIEtDb25maWdCYXNlIDogcHVibGljIFFPYmplY3QKewogIHB1YmxpYzogUU1ldGFPYmpl
Y3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gY29u
c3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0
YU9iamVjdCgpOyBwcm90ZWN0ZWQ6IHZvaWQgaW5pdE1ldGFPYmplY3QoKTsgcHJpdmF0ZTogc3Rh
dGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwoKICBmcmllbmQgY2xhc3MgS0NvbmZpZ0JhY2tFbmQ7
CiAgZnJpZW5kIGNsYXNzIEtDb25maWdJTklCYWNrRW5kOwoKcHVibGljOgoKCgogIEtDb25maWdC
YXNlKCk7CgoKCgogIHZpcnR1YWwgfktDb25maWdCYXNlKCk7CiMgOTMgImtjb25maWdiYXNlLmgi
CiAgdm9pZCBzZXRHcm91cCggY29uc3QgUVN0cmluZyYgcEdyb3VwICk7CgoKCgoKICB2b2lkIHNl
dERlc2t0b3BHcm91cCgpOwoKCgoKCgoKICBRU3RyaW5nIGdyb3VwKCkgY29uc3Q7CgoKCgoKCgog
IHZpcnR1YWwgYm9vbCBoYXNHcm91cChjb25zdCBRU3RyaW5nICZfcEdyb3VwKSBjb25zdCA9IDA7
CgoKCgoKCiAgdmlydHVhbCBRU3RyaW5nTGlzdCBncm91cExpc3QoKSBjb25zdCA9IDA7CgoKCgoK
CiAgUVN0cmluZyBsb2NhbGUoKSBjb25zdDsKIyAxMzkgImtjb25maWdiYXNlLmgiCiAgIFFTdHJp
bmcgcmVhZEVudHJ5KCBjb25zdCBRU3RyaW5nJiBwS2V5LAogICAgICAgICAgICAgICAgICAgICBj
b25zdCBRU3RyaW5nJiBhRGVmYXVsdCA9IFFTdHJpbmc6Om51bGwgKSBjb25zdDsKICAgUVN0cmlu
ZyByZWFkRW50cnkoIGNvbnN0IGNoYXIgKnBLZXksCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFFTdHJpbmcmIGFEZWZhdWx0ID0gUVN0cmluZzo6bnVsbCApIGNvbnN0OwoKCgoKCgoKICBRVmFy
aWFudCByZWFkUHJvcGVydHlFbnRyeSggY29uc3QgUVN0cmluZyYgcEtleSwgUVZhcmlhbnQ6OlR5
cGUgKSBjb25zdDsKICBRVmFyaWFudCByZWFkUHJvcGVydHlFbnRyeSggY29uc3QgY2hhciAqcEtl
eSwgUVZhcmlhbnQ6OlR5cGUgKSBjb25zdDsKIyAxNjMgImtjb25maWdiYXNlLmgiCiAgaW50IHJl
YWRMaXN0RW50cnkoIGNvbnN0IFFTdHJpbmcmIHBLZXksIFFTdHJMaXN0ICZsaXN0LCBjaGFyIHNl
cCA9ICcsJyApIGNvbnN0OwogIGludCByZWFkTGlzdEVudHJ5KCBjb25zdCBjaGFyICpwS2V5LCBR
U3RyTGlzdCAmbGlzdCwgY2hhciBzZXAgPSAnLCcgKSBjb25zdDsKIyAxNzMgImtjb25maWdiYXNl
LmgiCiAgUVN0cmluZ0xpc3QgcmVhZExpc3RFbnRyeSggY29uc3QgUVN0cmluZyYgcEtleSwgY2hh
ciBzZXAgPSAnLCcgKSBjb25zdDsKICBRU3RyaW5nTGlzdCByZWFkTGlzdEVudHJ5KCBjb25zdCBj
aGFyICpwS2V5LCBjaGFyIHNlcCA9ICcsJyApIGNvbnN0OwoKCgoKCgoKICBRVmFsdWVMaXN0PGlu
dD4gcmVhZEludExpc3RFbnRyeSggY29uc3QgUVN0cmluZyYgcEtleSApIGNvbnN0OwogIFFWYWx1
ZUxpc3Q8aW50PiByZWFkSW50TGlzdEVudHJ5KCBjb25zdCBjaGFyICpwS2V5ICkgY29uc3Q7CiMg
MTk2ICJrY29uZmlnYmFzZS5oIgogIFFTdHJpbmcgcmVhZFBhdGhFbnRyeSggY29uc3QgUVN0cmlu
ZyYgcEtleSwgY29uc3QgUVN0cmluZyAmIGFEZWZhdWx0ID0gUVN0cmluZzo6bnVsbCApIGNvbnN0
OwogIFFTdHJpbmcgcmVhZFBhdGhFbnRyeSggY29uc3QgY2hhciAqcEtleSwgY29uc3QgUVN0cmlu
ZyAmIGFEZWZhdWx0ID0gUVN0cmluZzo6bnVsbCApIGNvbnN0OwojIDIwOSAia2NvbmZpZ2Jhc2Uu
aCIKICBpbnQgcmVhZE51bUVudHJ5KCBjb25zdCBRU3RyaW5nJiBwS2V5LCBpbnQgbkRlZmF1bHQg
PSAwICkgY29uc3Q7CiAgaW50IHJlYWROdW1FbnRyeSggY29uc3QgY2hhciAqcEtleSwgaW50IG5E
ZWZhdWx0ID0gMCApIGNvbnN0OwojIDIyMiAia2NvbmZpZ2Jhc2UuaCIKICB1bnNpZ25lZCBpbnQg
cmVhZFVuc2lnbmVkTnVtRW50cnkoIGNvbnN0IFFTdHJpbmcmIHBLZXksIHVuc2lnbmVkIGludCBu
RGVmYXVsdCA9IDAgKSBjb25zdDsKICB1bnNpZ25lZCBpbnQgcmVhZFVuc2lnbmVkTnVtRW50cnko
IGNvbnN0IGNoYXIgKnBLZXksIHVuc2lnbmVkIGludCBuRGVmYXVsdCA9IDAgKSBjb25zdDsKIyAy
MzYgImtjb25maWdiYXNlLmgiCiAgbG9uZyByZWFkTG9uZ051bUVudHJ5KCBjb25zdCBRU3RyaW5n
JiBwS2V5LCBsb25nIG5EZWZhdWx0ID0gMCApIGNvbnN0OwogIGxvbmcgcmVhZExvbmdOdW1FbnRy
eSggY29uc3QgY2hhciAqcEtleSwgbG9uZyBuRGVmYXVsdCA9IDAgKSBjb25zdDsKIyAyNDkgImtj
b25maWdiYXNlLmgiCiAgdW5zaWduZWQgbG9uZyByZWFkVW5zaWduZWRMb25nTnVtRW50cnkoIGNv
bnN0IFFTdHJpbmcmIHBLZXksIHVuc2lnbmVkIGxvbmcgbkRlZmF1bHQgPSAwICkgY29uc3Q7CiAg
dW5zaWduZWQgbG9uZyByZWFkVW5zaWduZWRMb25nTnVtRW50cnkoIGNvbnN0IGNoYXIgKnBLZXks
IHVuc2lnbmVkIGxvbmcgbkRlZmF1bHQgPSAwICkgY29uc3Q7CiMgMjYyICJrY29uZmlnYmFzZS5o
IgogIGRvdWJsZSByZWFkRG91YmxlTnVtRW50cnkoIGNvbnN0IFFTdHJpbmcmIHBLZXksIGRvdWJs
ZSBuRGVmYXVsdCA9IDAuMCApIGNvbnN0OwogIGRvdWJsZSByZWFkRG91YmxlTnVtRW50cnkoIGNv
bnN0IGNoYXIgKnBLZXksIGRvdWJsZSBuRGVmYXVsdCA9IDAuMCApIGNvbnN0OwojIDI3NSAia2Nv
bmZpZ2Jhc2UuaCIKICBRRm9udCByZWFkRm9udEVudHJ5KCBjb25zdCBRU3RyaW5nJiBwS2V5LCBj
b25zdCBRRm9udCogcERlZmF1bHQgPSAwTCApIGNvbnN0OwogIFFGb250IHJlYWRGb250RW50cnko
IGNvbnN0IGNoYXIgKnBLZXksIGNvbnN0IFFGb250KiBwRGVmYXVsdCA9IDBMICkgY29uc3Q7CiMg
MjkxICJrY29uZmlnYmFzZS5oIgogIGJvb2wgcmVhZEJvb2xFbnRyeSggY29uc3QgUVN0cmluZyYg
cEtleSwgY29uc3QgYm9vbCBiRGVmYXVsdCA9IGZhbHNlICkgY29uc3Q7CiAgYm9vbCByZWFkQm9v
bEVudHJ5KCBjb25zdCBjaGFyICpwS2V5LCBjb25zdCBib29sIGJEZWZhdWx0ID0gZmFsc2UgKSBj
b25zdDsKIyAzMDYgImtjb25maWdiYXNlLmgiCiAgUVJlY3QgcmVhZFJlY3RFbnRyeSggY29uc3Qg
UVN0cmluZyYgcEtleSwgY29uc3QgUVJlY3QqIHBEZWZhdWx0ID0gMEwgKSBjb25zdDsKICBRUmVj
dCByZWFkUmVjdEVudHJ5KCBjb25zdCBjaGFyICpwS2V5LCBjb25zdCBRUmVjdCogcERlZmF1bHQg
PSAwTCApIGNvbnN0OwojIDMyMSAia2NvbmZpZ2Jhc2UuaCIKICBRUG9pbnQgcmVhZFBvaW50RW50
cnkoIGNvbnN0IFFTdHJpbmcmIHBLZXksIGNvbnN0IFFQb2ludCogcERlZmF1bHQgPSAwTCApIGNv
bnN0OwogIFFQb2ludCByZWFkUG9pbnRFbnRyeSggY29uc3QgY2hhciAqcEtleSwgY29uc3QgUVBv
aW50KiBwRGVmYXVsdCA9IDBMICkgY29uc3Q7CiMgMzM2ICJrY29uZmlnYmFzZS5oIgogIFFTaXpl
IHJlYWRTaXplRW50cnkoIGNvbnN0IFFTdHJpbmcmIHBLZXksIGNvbnN0IFFTaXplKiBwRGVmYXVs
dCA9IDBMICkgY29uc3Q7CiAgUVNpemUgcmVhZFNpemVFbnRyeSggY29uc3QgY2hhciAqcEtleSwg
Y29uc3QgUVNpemUqIHBEZWZhdWx0ID0gMEwgKSBjb25zdDsKIyAzNTEgImtjb25maWdiYXNlLmgi
CiAgUUNvbG9yIHJlYWRDb2xvckVudHJ5KCBjb25zdCBRU3RyaW5nJiBwS2V5LCBjb25zdCBRQ29s
b3IqIHBEZWZhdWx0ID0gMEwgKSBjb25zdDsKICBRQ29sb3IgcmVhZENvbG9yRW50cnkoIGNvbnN0
IGNoYXIgKnBLZXksIGNvbnN0IFFDb2xvciogcERlZmF1bHQgPSAwTCApIGNvbnN0OwojIDM2NSAi
a2NvbmZpZ2Jhc2UuaCIKICBRRGF0ZVRpbWUgcmVhZERhdGVUaW1lRW50cnkoIGNvbnN0IFFTdHJp
bmcmIHBLZXksIGNvbnN0IFFEYXRlVGltZSogcERlZmF1bHQgPSAwTCApIGNvbnN0OwogIFFEYXRl
VGltZSByZWFkRGF0ZVRpbWVFbnRyeSggY29uc3QgY2hhciAqcEtleSwgY29uc3QgUURhdGVUaW1l
KiBwRGVmYXVsdCA9IDBMICkgY29uc3Q7CiMgMzg3ICJrY29uZmlnYmFzZS5oIgogIFFTdHJpbmcg
d3JpdGVFbnRyeSggY29uc3QgUVN0cmluZyYgcEtleSwgY29uc3QgUVN0cmluZyYgcFZhbHVlLAog
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBiUGVyc2lzdGVudCA9IHRydWUsIGJvb2wgYkdsb2Jh
bCA9IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgYm9vbCBiTkxTID0gZmFsc2UgKTsKICBR
U3RyaW5nIHdyaXRlRW50cnkoIGNvbnN0IGNoYXIgKnBLZXksIGNvbnN0IFFTdHJpbmcmIHBWYWx1
ZSwKICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYlBlcnNpc3RlbnQgPSB0cnVlLCBib29sIGJH
bG9iYWwgPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYk5MUyA9IGZhbHNlICk7
CiMgNDEzICJrY29uZmlnYmFzZS5oIgogIHZvaWQgd3JpdGVFbnRyeSggY29uc3QgUVN0cmluZyYg
cEtleSwgY29uc3QgUVZhcmlhbnQmIHJWYWx1ZSwKICAgICAgICAgICAgICAgICAgICBib29sIGJQ
ZXJzaXN0ZW50ID0gdHJ1ZSwgYm9vbCBiR2xvYmFsID0gZmFsc2UsCiAgICAgICAgICAgICAgICAg
ICAgYm9vbCBiTkxTID0gZmFsc2UgKTsKICB2b2lkIHdyaXRlRW50cnkoIGNvbnN0IGNoYXIgKnBL
ZXksIGNvbnN0IFFWYXJpYW50JiByVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgYm9vbCBiUGVy
c2lzdGVudCA9IHRydWUsIGJvb2wgYkdsb2JhbCA9IGZhbHNlLAogICAgICAgICAgICAgICAgICAg
IGJvb2wgYk5MUyA9IGZhbHNlICk7CiMgNDM5ICJrY29uZmlnYmFzZS5oIgogIHZvaWQgd3JpdGVF
bnRyeSggY29uc3QgUVN0cmluZyYgcEtleSwgY29uc3QgUVN0ckxpc3QgJnJWYWx1ZSwKICAgICAg
ICAgICAgICAgICAgIGNoYXIgc2VwID0gJywnLCBib29sIGJQZXJzaXN0ZW50ID0gdHJ1ZSwgYm9v
bCBiR2xvYmFsID0gZmFsc2UsIGJvb2wgYk5MUyA9IGZhbHNlICk7CiAgdm9pZCB3cml0ZUVudHJ5
KCBjb25zdCBjaGFyICpwS2V5LCBjb25zdCBRU3RyTGlzdCAmclZhbHVlLAogICAgICAgICAgICAg
ICAgICAgY2hhciBzZXAgPSAnLCcsIGJvb2wgYlBlcnNpc3RlbnQgPSB0cnVlLCBib29sIGJHbG9i
YWwgPSBmYWxzZSwgYm9vbCBiTkxTID0gZmFsc2UgKTsKIyA0NjMgImtjb25maWdiYXNlLmgiCiAg
dm9pZCB3cml0ZUVudHJ5KCBjb25zdCBRU3RyaW5nJiBwS2V5LCBjb25zdCBRU3RyaW5nTGlzdCAm
clZhbHVlLAogICAgICAgICAgICAgICAgICAgY2hhciBzZXAgPSAnLCcsIGJvb2wgYlBlcnNpc3Rl
bnQgPSB0cnVlLCBib29sIGJHbG9iYWwgPSBmYWxzZSwgYm9vbCBiTkxTID0gZmFsc2UgKTsKICB2
b2lkIHdyaXRlRW50cnkoIGNvbnN0IGNoYXIgKnBLZXksIGNvbnN0IFFTdHJpbmdMaXN0ICZyVmFs
dWUsCiAgICAgICAgICAgICAgICAgICBjaGFyIHNlcCA9ICcsJywgYm9vbCBiUGVyc2lzdGVudCA9
IHRydWUsIGJvb2wgYkdsb2JhbCA9IGZhbHNlLCBib29sIGJOTFMgPSBmYWxzZSApOwojIDQ4OCAi
a2NvbmZpZ2Jhc2UuaCIKICB2b2lkIHdyaXRlRW50cnkoIGNvbnN0IFFTdHJpbmcmIHBLZXksIGNv
bnN0IFFWYWx1ZUxpc3Q8aW50PiYgclZhbHVlLAogICAgICAgICAgICAgICAgICAgYm9vbCBiUGVy
c2lzdGVudCA9IHRydWUsIGJvb2wgYkdsb2JhbCA9IGZhbHNlLCBib29sIGJOTFMgPSBmYWxzZSAp
OwogIHZvaWQgd3JpdGVFbnRyeSggY29uc3QgY2hhciAqcEtleSwgY29uc3QgUVZhbHVlTGlzdDxp
bnQ+JiByVmFsdWUsCiAgICAgICAgICAgICAgICAgICBib29sIGJQZXJzaXN0ZW50ID0gdHJ1ZSwg
Ym9vbCBiR2xvYmFsID0gZmFsc2UsIGJvb2wgYk5MUyA9IGZhbHNlICk7CiMgNTEyICJrY29uZmln
YmFzZS5oIgogIFFTdHJpbmcgd3JpdGVFbnRyeSggY29uc3QgUVN0cmluZyYgcEtleSwgY29uc3Qg
Y2hhciAqcFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgYm9vbCBiUGVyc2lzdGVudCA9IHRy
dWUsIGJvb2wgYkdsb2JhbCA9IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgYm9vbCBiTkxT
ID0gZmFsc2UgKQogICAgeyByZXR1cm4gd3JpdGVFbnRyeShwS2V5LCBRU3RyaW5nOjpmcm9tTGF0
aW4xKHBWYWx1ZSksIGJQZXJzaXN0ZW50LCBiR2xvYmFsLCBiTkxTKTsgfQogIFFTdHJpbmcgd3Jp
dGVFbnRyeSggY29uc3QgY2hhciAqcEtleSwgY29uc3QgY2hhciAqcFZhbHVlLAogICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBiUGVyc2lzdGVudCA9IHRydWUsIGJvb2wgYkdsb2JhbCA9IGZhbHNl
LAogICAgICAgICAgICAgICAgICAgICAgYm9vbCBiTkxTID0gZmFsc2UgKQogICAgeyByZXR1cm4g
d3JpdGVFbnRyeShwS2V5LCBRU3RyaW5nOjpmcm9tTGF0aW4xKHBWYWx1ZSksIGJQZXJzaXN0ZW50
LCBiR2xvYmFsLCBiTkxTKTsgfQojIDUzOCAia2NvbmZpZ2Jhc2UuaCIKICBRU3RyaW5nIHdyaXRl
RW50cnkoIGNvbnN0IFFTdHJpbmcmIHBLZXksIGludCBuVmFsdWUsCiAgICAgICAgICAgICAgICAg
ICAgICBib29sIGJQZXJzaXN0ZW50ID0gdHJ1ZSwgYm9vbCBiR2xvYmFsID0gZmFsc2UsCiAgICAg
ICAgICAgICAgICAgICAgICBib29sIGJOTFMgPSBmYWxzZSApOwogIFFTdHJpbmcgd3JpdGVFbnRy
eSggY29uc3QgY2hhciAqcEtleSwgaW50IG5WYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYlBlcnNpc3RlbnQgPSB0cnVlLCBib29sIGJHbG9iYWwgPSBmYWxzZSwKICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgYk5MUyA9IGZhbHNlICk7CiMgNTYyICJrY29uZmlnYmFzZS5oIgogIFFT
dHJpbmcgd3JpdGVFbnRyeSggY29uc3QgUVN0cmluZyYgcEtleSwgdW5zaWduZWQgaW50IG5WYWx1
ZSwKICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYlBlcnNpc3RlbnQgPSB0cnVlLCBib29sIGJH
bG9iYWwgPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYk5MUyA9IGZhbHNlICk7
CiAgUVN0cmluZyB3cml0ZUVudHJ5KCBjb25zdCBjaGFyICpwS2V5LCB1bnNpZ25lZCBpbnQgblZh
bHVlLAogICAgICAgICAgICAgICAgICAgICAgYm9vbCBiUGVyc2lzdGVudCA9IHRydWUsIGJvb2wg
Ykdsb2JhbCA9IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgYm9vbCBiTkxTID0gZmFsc2Ug
KTsKIyA1ODUgImtjb25maWdiYXNlLmgiCiAgUVN0cmluZyB3cml0ZUVudHJ5KCBjb25zdCBRU3Ry
aW5nJiBwS2V5LCBsb25nIG5WYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYlBlcnNp
c3RlbnQgPSB0cnVlLCBib29sIGJHbG9iYWwgPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgYk5MUyA9IGZhbHNlICk7CiAgUVN0cmluZyB3cml0ZUVudHJ5KCBjb25zdCBjaGFyICpw
S2V5LCBsb25nIG5WYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYlBlcnNpc3RlbnQg
PSB0cnVlLCBib29sIGJHbG9iYWwgPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Yk5MUyA9IGZhbHNlICk7CiMgNjA4ICJrY29uZmlnYmFzZS5oIgogIFFTdHJpbmcgd3JpdGVFbnRy
eSggY29uc3QgUVN0cmluZyYgcEtleSwgdW5zaWduZWQgbG9uZyBuVmFsdWUsCiAgICAgICAgICAg
ICAgICAgICAgICBib29sIGJQZXJzaXN0ZW50ID0gdHJ1ZSwgYm9vbCBiR2xvYmFsID0gZmFsc2Us
CiAgICAgICAgICAgICAgICAgICAgICBib29sIGJOTFMgPSBmYWxzZSApOwogIFFTdHJpbmcgd3Jp
dGVFbnRyeSggY29uc3QgY2hhciAqcEtleSwgdW5zaWduZWQgbG9uZyBuVmFsdWUsCiAgICAgICAg
ICAgICAgICAgICAgICBib29sIGJQZXJzaXN0ZW50ID0gdHJ1ZSwgYm9vbCBiR2xvYmFsID0gZmFs
c2UsCiAgICAgICAgICAgICAgICAgICAgICBib29sIGJOTFMgPSBmYWxzZSApOwojIDYzNCAia2Nv
bmZpZ2Jhc2UuaCIKICBRU3RyaW5nIHdyaXRlRW50cnkoIGNvbnN0IFFTdHJpbmcmIHBLZXksIGRv
dWJsZSBuVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICBib29sIGJQZXJzaXN0ZW50ID0gdHJ1
ZSwgYm9vbCBiR2xvYmFsID0gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyIGZvcm1h
dCA9ICdnJywgaW50IHByZWNpc2lvbiA9IDYsCiAgICAgICAgICAgICAgICAgICAgICBib29sIGJO
TFMgPSBmYWxzZSApOwogIFFTdHJpbmcgd3JpdGVFbnRyeSggY29uc3QgY2hhciAqcEtleSwgZG91
YmxlIG5WYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYlBlcnNpc3RlbnQgPSB0cnVl
LCBib29sIGJHbG9iYWwgPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZm9ybWF0
ID0gJ2cnLCBpbnQgcHJlY2lzaW9uID0gNiwKICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYk5M
UyA9IGZhbHNlICk7CiMgNjU5ICJrY29uZmlnYmFzZS5oIgogIFFTdHJpbmcgd3JpdGVFbnRyeSgg
Y29uc3QgUVN0cmluZyYgcEtleSwgYm9vbCBiVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICBi
b29sIGJQZXJzaXN0ZW50ID0gdHJ1ZSwgYm9vbCBiR2xvYmFsID0gZmFsc2UsCiAgICAgICAgICAg
ICAgICAgICAgICBib29sIGJOTFMgPSBmYWxzZSApOwogIFFTdHJpbmcgd3JpdGVFbnRyeSggY29u
c3QgY2hhciAqcEtleSwgYm9vbCBiVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICBib29sIGJQ
ZXJzaXN0ZW50ID0gdHJ1ZSwgYm9vbCBiR2xvYmFsID0gZmFsc2UsCiAgICAgICAgICAgICAgICAg
ICAgICBib29sIGJOTFMgPSBmYWxzZSApOwojIDY4MiAia2NvbmZpZ2Jhc2UuaCIKICBRU3RyaW5n
IHdyaXRlRW50cnkoIGNvbnN0IFFTdHJpbmcmIHBLZXksIGNvbnN0IFFGb250JiByRm9udCwKICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYlBlcnNpc3RlbnQgPSB0cnVlLCBib29sIGJHbG9iYWwg
PSBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYk5MUyA9IGZhbHNlICk7CiAgUVN0
cmluZyB3cml0ZUVudHJ5KCBjb25zdCBjaGFyICpwS2V5LCBjb25zdCBRRm9udCYgckZvbnQsCiAg
ICAgICAgICAgICAgICAgICAgICBib29sIGJQZXJzaXN0ZW50ID0gdHJ1ZSwgYm9vbCBiR2xvYmFs
ID0gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICBib29sIGJOTFMgPSBmYWxzZSApOwojIDcw
NiAia2NvbmZpZ2Jhc2UuaCIKICB2b2lkIHdyaXRlRW50cnkoIGNvbnN0IFFTdHJpbmcmIHBLZXks
IGNvbnN0IFFDb2xvciYgckNvbG9yLAogICAgICAgICAgICAgICAgICAgYm9vbCBiUGVyc2lzdGVu
dCA9IHRydWUsIGJvb2wgYkdsb2JhbCA9IGZhbHNlLAogICAgICAgICAgICAgICAgICAgYm9vbCBi
TkxTID0gZmFsc2UgKTsKICB2b2lkIHdyaXRlRW50cnkoIGNvbnN0IGNoYXIgKnBLZXksIGNvbnN0
IFFDb2xvciYgckNvbG9yLAogICAgICAgICAgICAgICAgICAgYm9vbCBiUGVyc2lzdGVudCA9IHRy
dWUsIGJvb2wgYkdsb2JhbCA9IGZhbHNlLAogICAgICAgICAgICAgICAgICAgYm9vbCBiTkxTID0g
ZmFsc2UgKTsKIyA3MzAgImtjb25maWdiYXNlLmgiCiAgdm9pZCB3cml0ZUVudHJ5KCBjb25zdCBR
U3RyaW5nJiBwS2V5LCBjb25zdCBRRGF0ZVRpbWUmIHJEYXRlVGltZSwKICAgICAgICAgICAgICAg
ICAgIGJvb2wgYlBlcnNpc3RlbnQgPSB0cnVlLCBib29sIGJHbG9iYWwgPSBmYWxzZSwKICAgICAg
ICAgICAgICAgICAgIGJvb2wgYk5MUyA9IGZhbHNlICk7CiAgdm9pZCB3cml0ZUVudHJ5KCBjb25z
dCBjaGFyICpwS2V5LCBjb25zdCBRRGF0ZVRpbWUmIHJEYXRlVGltZSwKICAgICAgICAgICAgICAg
ICAgIGJvb2wgYlBlcnNpc3RlbnQgPSB0cnVlLCBib29sIGJHbG9iYWwgPSBmYWxzZSwKICAgICAg
ICAgICAgICAgICAgIGJvb2wgYk5MUyA9IGZhbHNlICk7CiMgNzU1ICJrY29uZmlnYmFzZS5oIgog
IHZvaWQgd3JpdGVFbnRyeSggY29uc3QgUVN0cmluZyYgcEtleSwgY29uc3QgUVJlY3QmIHJWYWx1
ZSwKICAgICAgICAgICAgICAgICAgIGJvb2wgYlBlcnNpc3RlbnQgPSB0cnVlLCBib29sIGJHbG9i
YWwgPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgIGJvb2wgYk5MUyA9IGZhbHNlICk7CiAgdm9p
ZCB3cml0ZUVudHJ5KCBjb25zdCBjaGFyICpwS2V5LCBjb25zdCBRUmVjdCYgclZhbHVlLAogICAg
ICAgICAgICAgICAgICAgYm9vbCBiUGVyc2lzdGVudCA9IHRydWUsIGJvb2wgYkdsb2JhbCA9IGZh
bHNlLAogICAgICAgICAgICAgICAgICAgYm9vbCBiTkxTID0gZmFsc2UgKTsKIyA3NzkgImtjb25m
aWdiYXNlLmgiCiAgdm9pZCB3cml0ZUVudHJ5KCBjb25zdCBRU3RyaW5nJiBwS2V5LCBjb25zdCBR
UG9pbnQmIHJWYWx1ZSwKICAgICAgICAgICAgICAgICAgIGJvb2wgYlBlcnNpc3RlbnQgPSB0cnVl
LCBib29sIGJHbG9iYWwgPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgIGJvb2wgYk5MUyA9IGZh
bHNlICk7CiAgdm9pZCB3cml0ZUVudHJ5KCBjb25zdCBjaGFyICpwS2V5LCBjb25zdCBRUG9pbnQm
IHJWYWx1ZSwKICAgICAgICAgICAgICAgICAgIGJvb2wgYlBlcnNpc3RlbnQgPSB0cnVlLCBib29s
IGJHbG9iYWwgPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgIGJvb2wgYk5MUyA9IGZhbHNlICk7
CiMgODAzICJrY29uZmlnYmFzZS5oIgogIHZvaWQgd3JpdGVFbnRyeSggY29uc3QgUVN0cmluZyYg
cEtleSwgY29uc3QgUVNpemUmIHJWYWx1ZSwKICAgICAgICAgICAgICAgICAgIGJvb2wgYlBlcnNp
c3RlbnQgPSB0cnVlLCBib29sIGJHbG9iYWwgPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgIGJv
b2wgYk5MUyA9IGZhbHNlICk7CiAgdm9pZCB3cml0ZUVudHJ5KCBjb25zdCBjaGFyICpwS2V5LCBj
b25zdCBRU2l6ZSYgclZhbHVlLAogICAgICAgICAgICAgICAgICAgYm9vbCBiUGVyc2lzdGVudCA9
IHRydWUsIGJvb2wgYkdsb2JhbCA9IGZhbHNlLAogICAgICAgICAgICAgICAgICAgYm9vbCBiTkxT
ID0gZmFsc2UgKTsKIyA4MTcgImtjb25maWdiYXNlLmgiCiAgdm9pZCBzZXREb2xsYXJFeHBhbnNp
b24oIGJvb2wgX2JFeHBhbmQgPSB0cnVlICkgeyBiRXhwYW5kID0gX2JFeHBhbmQ7IH0KCgoKCgoK
ICBib29sIGlzRG9sbGFyRXhwYW5zaW9uKCkgY29uc3QgeyByZXR1cm4gYkV4cGFuZDsgfQojIDg0
MCAia2NvbmZpZ2Jhc2UuaCIKICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soIGJvb2wgYkRlZXAgPSB0
cnVlICk7CiMgODU1ICJrY29uZmlnYmFzZS5oIgogIHZpcnR1YWwgdm9pZCBzeW5jKCk7CgoKCgog
IGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIGJEaXJ0eTsgfQojIDg2OSAia2NvbmZpZ2Jh
c2UuaCIKICB2aXJ0dWFsIHZvaWQgc2V0UmVhZE9ubHkoYm9vbCBfcm8pIHsgYlJlYWRPbmx5ID0g
X3JvOyB9CgoKCgoKCiAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gYlJlYWRPbmx5
OyB9CiMgODg3ICJrY29uZmlnYmFzZS5oIgogIHZpcnR1YWwgYm9vbCBoYXNLZXkoIGNvbnN0IFFT
dHJpbmcmIHBLZXkgKSBjb25zdCA9IDA7CiMgODk5ICJrY29uZmlnYmFzZS5oIgogIHZpcnR1YWwg
UU1hcDxRU3RyaW5nLCBRU3RyaW5nPiBlbnRyeU1hcChjb25zdCBRU3RyaW5nICZwR3JvdXApIGNv
bnN0ID0gMDsKIyA5MTMgImtjb25maWdiYXNlLmgiCiAgdmlydHVhbCB2b2lkIHJlcGFyc2VDb25m
aWd1cmF0aW9uKCkgPSAwOwoKCgoKCgogIGVudW0gQ29uZmlnU3RhdGUgeyBOb0FjY2VzcywgUmVh
ZE9ubHksIFJlYWRXcml0ZSB9OwojIDkzNCAia2NvbmZpZ2Jhc2UuaCIKICBDb25maWdTdGF0ZSBn
ZXRDb25maWdTdGF0ZSgpIGNvbnN0OwoKcHJvdGVjdGVkOgoKCgoKCiAgdm9pZCBzZXRMb2NhbGUo
KTsKCgoKCgoKICB2aXJ0dWFsIHZvaWQgc2V0RGlydHkoYm9vbCBfYkRpcnR5ID0gdHJ1ZSkgeyBi
RGlydHkgPSBfYkRpcnR5OyB9CgoKCgoKCiAgdmlydHVhbCB2b2lkIHBhcnNlQ29uZmlnRmlsZXMo
KTsKIyA5NzMgImtjb25maWdiYXNlLmgiCiAgdmlydHVhbCBLRW50cnlNYXAgaW50ZXJuYWxFbnRy
eU1hcCggY29uc3QgUVN0cmluZyYgcEdyb3VwICkgY29uc3QgPSAwOwojIDk4NiAia2NvbmZpZ2Jh
c2UuaCIKICB2aXJ0dWFsIEtFbnRyeU1hcCBpbnRlcm5hbEVudHJ5TWFwKCkgY29uc3QgPSAwOwoj
IDEwMDIgImtjb25maWdiYXNlLmgiCiAgdmlydHVhbCB2b2lkIHB1dERhdGEoY29uc3QgS0VudHJ5
S2V5ICZfa2V5LCBjb25zdCBLRW50cnkgJl9kYXRhKSA9IDA7CiMgMTAxOCAia2NvbmZpZ2Jhc2Uu
aCIKICB2aXJ0dWFsIEtFbnRyeSBsb29rdXBEYXRhKGNvbnN0IEtFbnRyeUtleSAmX2tleSkgY29u
c3QgPSAwOwoKCgoKICBLQ29uZmlnQmFja0VuZCAqYmFja0VuZDsKcHVibGljOgoKCgogIHZvaWQg
c2V0R3JvdXAoIGNvbnN0IFFDU3RyaW5nICZwR3JvdXAgKTsKICB2b2lkIHNldEdyb3VwKCBjb25z
dCBjaGFyICpwR3JvdXAgKTsKICB2aXJ0dWFsIGJvb2wgaGFzR3JvdXAoY29uc3QgUUNTdHJpbmcg
Jl9wR3JvdXApIGNvbnN0ID0gMDsKICB2aXJ0dWFsIGJvb2wgaGFzR3JvdXAoY29uc3QgY2hhciAq
X3BHcm91cCkgY29uc3QgPSAwOwogIHZpcnR1YWwgYm9vbCBoYXNLZXkoIGNvbnN0IGNoYXIgKnBL
ZXkgKSBjb25zdCA9IDA7Cgpwcm90ZWN0ZWQ6CiAgUUNTdHJpbmcgcmVhZEVudHJ5VXRmOCggY29u
c3QgY2hhciAqcEtleSkgY29uc3Q7CgoKCiAgUUNTdHJpbmcgbUdyb3VwOwoKCgogIFFDU3RyaW5n
IGFMb2NhbGVTdHJpbmc7CgoKCgogIGJvb2wgYkRpcnR5OwoKICBib29sIGJMb2NhbGVJbml0aWFs
aXplZDsKICBib29sIGJSZWFkT25seTsKICBib29sIGJFeHBhbmQ7CgogIEtDb25maWdCYXNlUHJp
dmF0ZSAqZDsKfTsKCgoKaW5saW5lIHZvaWQgS0NvbmZpZ0Jhc2U6OnJvbGxiYWNrKCBib29sICkK
ewogIGJEaXJ0eSA9IGZhbHNlOwp9CgpjbGFzcyBLQ29uZmlnR3JvdXBTYXZlclByaXZhdGU7CiMg
MTA5OSAia2NvbmZpZ2Jhc2UuaCIKY2xhc3MgS0NvbmZpZ0dyb3VwU2F2ZXIKewpwdWJsaWM6CiMg
MTExMCAia2NvbmZpZ2Jhc2UuaCIKICBLQ29uZmlnR3JvdXBTYXZlciggS0NvbmZpZ0Jhc2UqIGNv
bmZpZywgUVN0cmluZyBncm91cCApCiAgICAgIDogX2NvbmZpZyhjb25maWcpLCBfb2xkZ3JvdXAo
Y29uZmlnLT5ncm91cCgpKQogICAgICAgIHsgX2NvbmZpZy0+c2V0R3JvdXAoIGdyb3VwICk7IH0K
CiAgS0NvbmZpZ0dyb3VwU2F2ZXIoIEtDb25maWdCYXNlKiBjb25maWcsIGNvbnN0IGNoYXIgKmdy
b3VwICkKICAgICAgOiBfY29uZmlnKGNvbmZpZyksIF9vbGRncm91cChjb25maWctPmdyb3VwKCkp
CiAgICAgICAgeyBfY29uZmlnLT5zZXRHcm91cCggZ3JvdXAgKTsgfQoKICBLQ29uZmlnR3JvdXBT
YXZlciggS0NvbmZpZ0Jhc2UqIGNvbmZpZywgY29uc3QgUUNTdHJpbmcgJmdyb3VwICkKICAgICAg
OiBfY29uZmlnKGNvbmZpZyksIF9vbGRncm91cChjb25maWctPmdyb3VwKCkpCiAgICAgICAgeyBf
Y29uZmlnLT5zZXRHcm91cCggZ3JvdXAgKTsgfQoKICB+S0NvbmZpZ0dyb3VwU2F2ZXIoKSB7IF9j
b25maWctPnNldEdyb3VwKCBfb2xkZ3JvdXAgKTsgfQoKICAgIEtDb25maWdCYXNlKiBjb25maWco
KSB7IHJldHVybiBfY29uZmlnOyB9OwoKcHJpdmF0ZToKICBLQ29uZmlnQmFzZSogX2NvbmZpZzsK
ICBRU3RyaW5nIF9vbGRncm91cDsKCiAgS0NvbmZpZ0dyb3VwU2F2ZXIoY29uc3QgS0NvbmZpZ0dy
b3VwU2F2ZXImKTsKICBLQ29uZmlnR3JvdXBTYXZlciYgb3BlcmF0b3I9KGNvbnN0IEtDb25maWdH
cm91cFNhdmVyJik7CgogIEtDb25maWdHcm91cFNhdmVyUHJpdmF0ZSAqZDsKfTsKIyAyNyAia2Nv
bmZpZ2JhY2tlbmQuaCIgMgoKY2xhc3MgUUZpbGU7CmNsYXNzIEtDb25maWdCYWNrRW5kUHJpdmF0
ZTsKIyA0NiAia2NvbmZpZ2JhY2tlbmQuaCIKY2xhc3MgS0NvbmZpZ0JhY2tFbmQKewpwdWJsaWM6
CiMgNjQgImtjb25maWdiYWNrZW5kLmgiCiAgS0NvbmZpZ0JhY2tFbmQoS0NvbmZpZ0Jhc2UgKl9j
b25maWcsIGNvbnN0IFFTdHJpbmcgJl9maWxlTmFtZSwKICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICogX3Jlc1R5cGUsIGJvb2wgX3VzZUtERUdsb2JhbHMpOwoKCgoKICB2aXJ0dWFsIH5LQ29u
ZmlnQmFja0VuZCgpIHt9OwoKCgoKCgoKICB2aXJ0dWFsIGJvb2wgcGFyc2VDb25maWdGaWxlcygp
ID0gMDsKIyA4OSAia2NvbmZpZ2JhY2tlbmQuaCIKICB2aXJ0dWFsIHZvaWQgc3luYyhib29sIGJN
ZXJnZSA9IHRydWUpID0gMDsKIyAxMDEgImtjb25maWdiYWNrZW5kLmgiCiAgdm9pZCBjaGFuZ2VG
aWxlTmFtZShjb25zdCBRU3RyaW5nICZfZmlsZU5hbWUsIGNvbnN0IGNoYXIgKiBfcmVzVHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgX3VzZUtERUdsb2JhbHMpCiAgICAgIHsKICAgICAg
ICBmaWxlTmFtZSA9IF9maWxlTmFtZTsgcmVzVHlwZSA9IF9yZXNUeXBlOwogICAgICAgIHVzZUtE
RUdsb2JhbHMgPSBfdXNlS0RFR2xvYmFsczsKICAgICAgfQoKCgoKCgogIHZpcnR1YWwgS0NvbmZp
Z0Jhc2U6OkNvbmZpZ1N0YXRlIGdldENvbmZpZ1N0YXRlKCkgY29uc3QKICAgIHsgcmV0dXJuIEtD
b25maWdCYXNlOjpOb0FjY2VzczsgfQoKCgoKICBRU3RyaW5nIGZpbGVuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gZmlsZU5hbWU7IH0KCgoKCiAgY29uc3QgY2hhciAqIHJlc291cmNlKCkgY29uc3QgeyBy
ZXR1cm4gcmVzVHlwZTsgfQoKICB2b2lkIHNldExvY2FsZVN0cmluZyhjb25zdCBRQ1N0cmluZyAm
X2xvY2FsZVN0cmluZykgeyBsb2NhbGVTdHJpbmcgPSBfbG9jYWxlU3RyaW5nOyB9Cgpwcm90ZWN0
ZWQ6CiAgS0NvbmZpZ0Jhc2UgKnBDb25maWc7CgogIFFTdHJpbmcgZmlsZU5hbWU7CiAgUUNTdHJp
bmcgcmVzVHlwZTsKICBib29sIHVzZUtERUdsb2JhbHM7CiAgUUNTdHJpbmcgbG9jYWxlU3RyaW5n
OwoKICBLQ29uZmlnQmFja0VuZFByaXZhdGUgKmQ7Cn07CgpjbGFzcyBLQ29uZmlnSU5JQmFja0Vu
ZFByaXZhdGU7CiMgMTQ4ICJrY29uZmlnYmFja2VuZC5oIgpjbGFzcyBLQ29uZmlnSU5JQmFja0Vu
ZCA6IHB1YmxpYyBLQ29uZmlnQmFja0VuZAp7CgpwdWJsaWM6CiMgMTY3ICJrY29uZmlnYmFja2Vu
ZC5oIgogIEtDb25maWdJTklCYWNrRW5kKEtDb25maWdCYXNlICpfY29uZmlnLCBjb25zdCBRU3Ry
aW5nICZfZmlsZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIF9yZXNUeXBl
LCBib29sIF91c2VLREVHbG9iYWxzID0gdHJ1ZSkKICAgIDogS0NvbmZpZ0JhY2tFbmQoX2NvbmZp
ZywgX2ZpbGVOYW1lLCBfcmVzVHlwZSwgX3VzZUtERUdsb2JhbHMpIHt9CgoKCgogIHZpcnR1YWwg
fktDb25maWdJTklCYWNrRW5kKCkge307CgoKCgoKCiAgYm9vbCBwYXJzZUNvbmZpZ0ZpbGVzKCk7
CgoKCgogIHZpcnR1YWwgdm9pZCBzeW5jKGJvb2wgYk1lcmdlID0gdHJ1ZSk7Cgpwcm90ZWN0ZWQ6
CiMgMjAyICJrY29uZmlnYmFja2VuZC5oIgogIHZvaWQgcGFyc2VTaW5nbGVDb25maWdGaWxlKFFG
aWxlJiByRmlsZSwgS0VudHJ5TWFwICpwV3JpdGVCYWNrTWFwID0gMEwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBiR2xvYmFsID0gZmFsc2UpOwojIDIxOSAia2NvbmZpZ2JhY2tl
bmQuaCIKICBib29sIHdyaXRlQ29uZmlnRmlsZShRU3RyaW5nIGZpbGVuYW1lLCBib29sIGJHbG9i
YWwgPSBmYWxzZSwgYm9vbCBiTWVyZ2UgPSB0cnVlKTsKCgoKCgoKICB2aXJ0dWFsIEtDb25maWdC
YXNlOjpDb25maWdTdGF0ZSBnZXRDb25maWdTdGF0ZSgpIGNvbnN0OwoKcHJpdmF0ZToKICBLQ29u
ZmlnSU5JQmFja0VuZFByaXZhdGUgKmQ7Cn07CiMgMzcgImtjb25maWdiYWNrZW5kLmNwcCIgMgoj
IDEgImtjb25maWdiYXNlLmgiIDEKIyAzOCAia2NvbmZpZ2JhY2tlbmQuY3BwIiAyCiMgMSAia2ds
b2JhbC5oIiAxCiMgMjEgImtnbG9iYWwuaCIKIyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNsdWRl
L3FzdHJpbmcuaCIgMQojIDIyICJrZ2xvYmFsLmgiIDIKCmNsYXNzIEtTdGFuZGFyZERpcnM7CmNs
YXNzIEtDb25maWc7CmNsYXNzIEtMb2NhbGU7CmNsYXNzIEtJY29uTG9hZGVyOwpjbGFzcyBLQ2hh
cnNldHM7CmNsYXNzIFFGb250OwpjbGFzcyBLSW5zdGFuY2U7CmNsYXNzIEtTdHJpbmdEaWN0Owpj
bGFzcyBLU3RhdGljRGVsZXRlckJhc2U7CmNsYXNzIEtTdGF0aWNEZWxldGVyTGlzdDsKIyA0MSAi
a2dsb2JhbC5oIgpjbGFzcyBLR2xvYmFsCnsKcHVibGljOgoKCgoKCgogICAgc3RhdGljIEtJbnN0
YW5jZSAqaW5zdGFuY2UoKTsKCgoKCiAgICBzdGF0aWMgS1N0YW5kYXJkRGlycyAqZGlycygpOwoK
CgoKICAgIHN0YXRpYyBLQ29uZmlnICpjb25maWcoKTsKCgoKCiAgICBzdGF0aWMgS0ljb25Mb2Fk
ZXIgKmljb25Mb2FkZXIoKTsKCiAgICBzdGF0aWMgS0xvY2FsZSAqbG9jYWxlKCk7CiAgICBzdGF0
aWMgS0NoYXJzZXRzICpjaGFyc2V0cygpOwojIDgxICJrZ2xvYmFsLmgiCiAgICBzdGF0aWMgY29u
c3QgUVN0cmluZyAmc3RhdGljUVN0cmluZyhjb25zdCBjaGFyICopOwojIDk0ICJrZ2xvYmFsLmgi
CiAgICBzdGF0aWMgY29uc3QgUVN0cmluZyAmc3RhdGljUVN0cmluZyhjb25zdCBRU3RyaW5nICYp
OwoKICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyU3RhdGljRGVsZXRlcihLU3RhdGljRGVsZXRlckJh
c2UgKik7CiAgICBzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyU3RhdGljRGVsZXRlcihLU3RhdGljRGVs
ZXRlckJhc2UgKik7CgogICAgc3RhdGljIHZvaWQgZGVsZXRlU3RhdGljRGVsZXRlcnMoKTsKCgog
ICAgc3RhdGljIEtTdHJpbmdEaWN0ICpfc3RyaW5nRGljdDsKICAgIHN0YXRpYyBLSW5zdGFuY2Ug
Kl9pbnN0YW5jZTsKICAgIHN0YXRpYyBLTG9jYWxlICpfbG9jYWxlOwogICAgc3RhdGljIEtDaGFy
c2V0cyAqX2NoYXJzZXRzOwogICAgc3RhdGljIEtTdGF0aWNEZWxldGVyTGlzdCAqX3N0YXRpY0Rl
bGV0ZXJzOwoKCgoKCgogICAgc3RhdGljIEtJbnN0YW5jZSAqX2FjdGl2ZUluc3RhbmNlOwp9Owoj
IDEyNiAia2dsb2JhbC5oIgp0ZW1wbGF0ZTxjbGFzcyBUPgppbmxpbmUgY29uc3QgVCYga01pbiAo
Y29uc3QgVCYgYSwgY29uc3QgVCYgYikgeyByZXR1cm4gYSA8IGIgPyBhIDogYjsgfQoKdGVtcGxh
dGU8Y2xhc3MgVD4KaW5saW5lIGNvbnN0IFQmIGtNYXggKGNvbnN0IFQmIGEsIGNvbnN0IFQmIGIp
IHsgcmV0dXJuIGEgPiBiID8gYSA6IGI7IH0KIyAzOSAia2NvbmZpZ2JhY2tlbmQuY3BwIiAyCiMg
MSAia3N0ZGRpcnMuaCIgMQojIDI2ICJrc3RkZGlycy5oIgojIDEgIi91c3IvbGliL3F0LTIuMy4x
L2luY2x1ZGUvcXN0cmluZy5oIiAxCiMgMjcgImtzdGRkaXJzLmgiIDIKIyAxICIvdXNyL2xpYi9x
dC0yLjMuMS9pbmNsdWRlL3FkaWN0LmgiIDEKIyA0MiAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVk
ZS9xZGljdC5oIgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWdkaWN0LmgiIDEKIyA0
MiAiL3Vzci9saWIvcXQtMi4zLjEvaW5jbHVkZS9xZ2RpY3QuaCIKIyAxICIvdXNyL2xpYi9xdC0y
LjMuMS9pbmNsdWRlL3Fjb2xsZWN0aW9uLmgiIDEKIyA0MyAiL3Vzci9saWIvcXQtMi4zLjEvaW5j
bHVkZS9xZ2RpY3QuaCIgMgojIDEgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcXN0cmluZy5o
IiAxCiMgNDQgIi91c3IvbGliL3F0LTIuMy4xL2luY2x1ZGUvcWdkaWN0LmgiIDIKCgpjbGFzcyBR
R0RpY3RJdGVyYXRvcjsKY2xhc3MgUUdESXRMaXN0OwoKCmNsYXNzIFFCYXNlQnVja2V0CnsKcHVi
bGljOgogICAgUUNvbGxlY3Rpb246Okl0ZW0gZ2V0RGF0YSgpIHsgcmV0dXJuIGRhdGE7IH0KICAg
IFFDb2xsZWN0aW9uOjpJdGVtIHNldERhdGEoIFFDb2xsZWN0aW9uOjpJdGVtIGQgKSB7IHJldHVy
biBkYXRhID0gZDsgfQogICAgUUJhc2VCdWNrZXQgKmdldE5leHQoKSB7IHJldHVybiBuZXh0OyB9
CiAgICB2b2lkIHNldE5leHQoIFFCYXNlQnVja2V0ICpuKSB7IG5leHQgPSBuOyB9CnByb3RlY3Rl
ZDoKICAgIFFCYXNlQnVja2V0KCBRQ29sbGVjdGlvbjo6SXRlbSBkLCBRQmFzZUJ1Y2tldCAqbiAp
IDogZGF0YShkKSwgbmV4dChuKSB7fQogICAgUUNvbGxlY3Rpb246Okl0ZW0gZGF0YTsKICAgIFFC
YXNlQnVja2V0ICpuZXh0Owp9OwoKY2xhc3MgUVN0cmluZ0J1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1
Y2tldAp7CnB1YmxpYzoKICAgIFFTdHJpbmdCdWNrZXQoIGNvbnN0IFFTdHJpbmcgJmssIFFDb2xs
ZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQs
biksIGtleShrKSB7fQogICAgY29uc3QgUVN0cmluZyAmZ2V0S2V5KCkgY29uc3QgeyByZXR1cm4g
a2V5OyB9CnByaXZhdGU6CiAgICBRU3RyaW5nIGtleTsKfTsKCmNsYXNzIFFBc2NpaUJ1Y2tldCA6
IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFBc2NpaUJ1Y2tldCggY29uc3QgY2hh
ciAqaywgUUNvbGxlY3Rpb246Okl0ZW0gZCwgUUJhc2VCdWNrZXQgKm4gKQogICAgICAgIDogUUJh
c2VCdWNrZXQoZCxuKSwga2V5KGspIHt9CiAgICBjb25zdCBjaGFyICpnZXRLZXkoKSBjb25zdCB7
IHJldHVybiBrZXk7IH0KcHJpdmF0ZToKICAgIGNvbnN0IGNoYXIgKmtleTsKfTsKCmNsYXNzIFFJ
bnRCdWNrZXQgOiBwdWJsaWMgUUJhc2VCdWNrZXQKewpwdWJsaWM6CiAgICBRSW50QnVja2V0KCBs
b25nIGssIFFDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFC
YXNlQnVja2V0KGQsbiksIGtleShrKSB7fQogICAgbG9uZyBnZXRLZXkoKSBjb25zdCB7IHJldHVy
biBrZXk7IH0KcHJpdmF0ZToKICAgIGxvbmcga2V5Owp9OwoKY2xhc3MgUVB0ckJ1Y2tldCA6IHB1
YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFQdHJCdWNrZXQoIHZvaWQgKmssIFFDb2xs
ZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQs
biksIGtleShrKSB7fQogICAgdm9pZCAqZ2V0S2V5KCkgY29uc3QgeyByZXR1cm4ga2V5OyB9CnBy
aXZhdGU6CiAgICB2b2lkICprZXk7Cn07CgoKY2xhc3MgUUdEaWN0IDogcHVibGljIFFDb2xsZWN0
aW9uCnsKcHVibGljOgogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG51bUl0ZW1zOyB9
CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiB2bGVuOyB9CiAgICBRQ29sbGVjdGlvbjo6
SXRlbSBsb29rX3N0cmluZyggY29uc3QgUVN0cmluZyYga2V5LCBRQ29sbGVjdGlvbjo6SXRlbSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKTsKICAgIFFDb2xsZWN0aW9u
OjpJdGVtIGxvb2tfYXNjaWkoIGNvbnN0IGNoYXIgKmtleSwgUUNvbGxlY3Rpb246Okl0ZW0sIGlu
dCApOwogICAgUUNvbGxlY3Rpb246Okl0ZW0gbG9va19pbnQoIGxvbmcga2V5LCBRQ29sbGVjdGlv
bjo6SXRlbSwgaW50ICk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBsb29rX3B0ciggdm9pZCAqa2V5
LCBRQ29sbGVjdGlvbjo6SXRlbSwgaW50ICk7CgogICAgUURhdGFTdHJlYW0gJnJlYWQoIFFEYXRh
U3RyZWFtICYgKTsKICAgIFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiApIGNvbnN0
OwoKcHJvdGVjdGVkOgogICAgZW51bSBLZXlUeXBlIHsgU3RyaW5nS2V5LCBBc2NpaUtleSwgSW50
S2V5LCBQdHJLZXkgfTsKCiAgICBRR0RpY3QoIHVpbnQgbGVuLCBLZXlUeXBlIGt0LCBib29sIGNz
LCBib29sIGNrICk7CiAgICBRR0RpY3QoIGNvbnN0IFFHRGljdCAmICk7CiAgIH5RR0RpY3QoKTsK
CiAgICBRR0RpY3QgJm9wZXJhdG9yPSggY29uc3QgUUdEaWN0ICYgKTsKCiAgICBib29sIHJlbW92
ZV9zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJmtleSwgUUNvbGxlY3Rpb246Okl0ZW0gaXRlbT0wICk7
CiAgICBib29sIHJlbW92ZV9hc2NpaSggY29uc3QgY2hhciAqa2V5LCBRQ29sbGVjdGlvbjo6SXRl
bSBpdGVtPTAgKTsKICAgIGJvb2wgcmVtb3ZlX2ludCggbG9uZyBrZXksIFFDb2xsZWN0aW9uOjpJ
dGVtIGl0ZW09MCApOwogICAgYm9vbCByZW1vdmVfcHRyKCB2b2lkICprZXksIFFDb2xsZWN0aW9u
OjpJdGVtIGl0ZW09MCApOwogICAgUUNvbGxlY3Rpb246Okl0ZW0gdGFrZV9zdHJpbmcoIGNvbnN0
IFFTdHJpbmcgJmtleSApOwogICAgUUNvbGxlY3Rpb246Okl0ZW0gdGFrZV9hc2NpaSggY29uc3Qg
Y2hhciAqa2V5ICk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSB0YWtlX2ludCggbG9uZyBrZXkgKTsK
ICAgIFFDb2xsZWN0aW9uOjpJdGVtIHRha2VfcHRyKCB2b2lkICprZXkgKTsKCiAgICB2b2lkIGNs
ZWFyKCk7CiAgICB2b2lkIHJlc2l6ZSggdWludCApOwoKICAgIGludCBoYXNoS2V5U3RyaW5nKCBj
b25zdCBRU3RyaW5nICYgKTsKICAgIGludCBoYXNoS2V5QXNjaWkoIGNvbnN0IGNoYXIgKiApOwoK
ICAgIHZvaWQgc3RhdGlzdGljcygpIGNvbnN0OwoKCiAgICB2aXJ0dWFsIFFEYXRhU3RyZWFtICZy
ZWFkKCBRRGF0YVN0cmVhbSAmLCBRQ29sbGVjdGlvbjo6SXRlbSAmICk7CiAgICB2aXJ0dWFsIFFE
YXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiwgUUNvbGxlY3Rpb246Okl0ZW0gKSBjb25z
dDsKCnByaXZhdGU6CiAgICBRQmFzZUJ1Y2tldCAqKnZlYzsKICAgIHVpbnQgdmxlbjsKICAgIHVp
bnQgbnVtSXRlbXM7CiAgICB1aW50IGtleXR5cGUgOiAyOwogICAgdWludCBjYXNlcyA6IDE7CiAg
ICB1aW50IGNvcHlrIDogMTsKICAgIFFHREl0TGlzdCAqaXRlcmF0b3JzOwogICAgdm9pZCB1bmxp
bmtfY29tbW9uKCBpbnQsIFFCYXNlQnVja2V0ICosIFFCYXNlQnVja2V0ICogKTsKICAgIFFTdHJp
bmdCdWNrZXQgKnVubGlua19zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFFDb2xsZWN0aW9uOjpJdGVtIGl0ZW0gPSAwICk7CiAgICBRQXNj
aWlCdWNrZXQgKnVubGlua19hc2NpaSggY29uc3QgY2hhciAqLCBRQ29sbGVjdGlvbjo6SXRlbSBp
dGVtID0gMCApOwogICAgUUludEJ1Y2tldCAqdW5saW5rX2ludCggbG9uZywgUUNvbGxlY3Rpb246
Okl0ZW0gaXRlbSA9IDAgKTsKICAgIFFQdHJCdWNrZXQgKnVubGlua19wdHIoIHZvaWQgKiwgUUNv
bGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAgIHZvaWQgaW5pdCggdWludCwgS2V5VHlwZSwg
Ym9vbCwgYm9vbCApOwogICAgZnJpZW5kIGNsYXNzIFFHRGljdEl0ZXJhdG9yOwp9OwoKCmNsYXNz
IFFHRGljdEl0ZXJhdG9yCnsKZnJpZW5kIGNsYXNzIFFHRGljdDsKcHVibGljOgogICAgUUdEaWN0
SXRlcmF0b3IoIGNvbnN0IFFHRGljdCAmICk7CiAgICBRR0RpY3RJdGVyYXRvciggY29uc3QgUUdE
aWN0SXRlcmF0b3IgJiApOwogICAgUUdEaWN0SXRlcmF0b3IgJm9wZXJhdG9yPSggY29uc3QgUUdE
aWN0SXRlcmF0b3IgJiApOwogICB+UUdEaWN0SXRlcmF0b3IoKTsKCiAgICBRQ29sbGVjdGlvbjo6
SXRlbSB0b0ZpcnN0KCk7CgogICAgUUNvbGxlY3Rpb246Okl0ZW0gZ2V0KCkgY29uc3Q7CiAgICBR
U3RyaW5nIGdldEtleVN0cmluZygpIGNvbnN0OwogICAgY29uc3QgY2hhciAqZ2V0S2V5QXNjaWko
KSBjb25zdDsKICAgIGxvbmcgZ2V0S2V5SW50KCkgY29uc3Q7CiAgICB2b2lkICpnZXRLZXlQdHIo
KSBjb25zdDsKCiAgICBRQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcigpKCk7CiAgICBRQ29sbGVj
dGlvbjo6SXRlbSBvcGVyYXRvcisrKCk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcis9
KHVpbnQpOwoKcHJvdGVjdGVkOgogICAgUUdEaWN0ICpkaWN0OwoKcHJpdmF0ZToKICAgIFFCYXNl
QnVja2V0ICpjdXJOb2RlOwogICAgdWludCBjdXJJbmRleDsKfTsKCmlubGluZSBRQ29sbGVjdGlv
bjo6SXRlbSBRR0RpY3RJdGVyYXRvcjo6Z2V0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUg
PyBjdXJOb2RlLT5nZXREYXRhKCkgOiAwOwp9CgppbmxpbmUgUVN0cmluZyBRR0RpY3RJdGVyYXRv
cjo6Z2V0S2V5U3RyaW5nKCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFTdHJpbmdC
dWNrZXQqKWN1ck5vZGUpLT5nZXRLZXkoKSA6IFFTdHJpbmc6Om51bGw7Cn0KCmlubGluZSBjb25z
dCBjaGFyICpRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5QXNjaWkoKSBjb25zdAp7CiAgICByZXR1cm4g
Y3VyTm9kZSA/ICgoUUFzY2lpQnVja2V0KiljdXJOb2RlKS0+Z2V0S2V5KCkgOiAwOwp9Cgppbmxp
bmUgbG9uZyBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5SW50KCkgY29uc3QKewogICAgcmV0dXJuIGN1
ck5vZGUgPyAoKFFJbnRCdWNrZXQqKWN1ck5vZGUpLT5nZXRLZXkoKSA6IDA7Cn0KCmlubGluZSB2
b2lkICpRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5UHRyKCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5v
ZGUgPyAoKFFQdHJCdWNrZXQqKWN1ck5vZGUpLT5nZXRLZXkoKSA6IDA7Cn0KIyA0MyAiL3Vzci9s
aWIvcXQtMi4zLjEvaW5jbHVkZS9xZGljdC5oIiAyCgoKCnRlbXBsYXRlPGNsYXNzIHR5cGU+IGNs
YXNzIFFEaWN0IDogcHVibGljIFFHRGljdAp7CnB1YmxpYzoKICAgIFFEaWN0KGludCBzaXplPTE3
LCBib29sIGNhc2VTZW5zaXRpdmU9VFJVRSkKICAgICAgICA6IFFHRGljdChzaXplLFN0cmluZ0tl
eSxjYXNlU2Vuc2l0aXZlLEZBTFNFKSB7fQogICAgUURpY3QoIGNvbnN0IFFEaWN0PHR5cGU+ICZk
ICkgOiBRR0RpY3QoZCkge30KICAgflFEaWN0KCkgeyBjbGVhcigpOyB9CiAgICBRRGljdDx0eXBl
PiAmb3BlcmF0b3I9KGNvbnN0IFFEaWN0PHR5cGU+ICZkKQogICAgICAgICAgICAgICAgICAgICAg
ICB7IHJldHVybiAoUURpY3Q8dHlwZT4mKVFHRGljdDo6b3BlcmF0b3I9KGQpOyB9CiAgICB1aW50
IGNvdW50KCkgY29uc3QgeyByZXR1cm4gUUdEaWN0Ojpjb3VudCgpOyB9CiAgICB1aW50IHNpemUo
KSBjb25zdCB7IHJldHVybiBRR0RpY3Q6OnNpemUoKTsgfQogICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gUUdEaWN0Ojpjb3VudCgpID09IDA7IH0KCiAgICB2b2lkIGluc2VydCggY29u
c3QgUVN0cmluZyAmaywgY29uc3QgdHlwZSAqZCApCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7IFFHRGljdDo6bG9va19zdHJpbmcoaywoSXRlbSlkLDEpOyB9CiAgICB2
b2lkIHJlcGxhY2UoIGNvbnN0IFFTdHJpbmcgJmssIGNvbnN0IHR5cGUgKmQgKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBRR0RpY3Q6Omxvb2tfc3RyaW5nKGssKEl0
ZW0pZCwyKTsgfQogICAgYm9vbCByZW1vdmUoIGNvbnN0IFFTdHJpbmcgJmsgKSB7IHJldHVybiBR
R0RpY3Q6OnJlbW92ZV9zdHJpbmcoayk7IH0KICAgIHR5cGUgKnRha2UoIGNvbnN0IFFTdHJpbmcg
JmsgKSB7IHJldHVybiAodHlwZSAqKVFHRGljdDo6dGFrZV9zdHJpbmcoayk7IH0KICAgIHR5cGUg
KmZpbmQoIGNvbnN0IFFTdHJpbmcgJmsgKSBjb25zdAogICAgICAgICAgICAgICAgeyByZXR1cm4g
KHR5cGUgKikoKFFHRGljdCopdGhpcyktPlFHRGljdDo6bG9va19zdHJpbmcoaywwLDApOyB9CiAg
ICB0eXBlICpvcGVyYXRvcltdKCBjb25zdCBRU3RyaW5nICZrICkgY29uc3QKICAgICAgICAgICAg
ICAgIHsgcmV0dXJuICh0eXBlICopKChRR0RpY3QqKXRoaXMpLT5RR0RpY3Q6Omxvb2tfc3RyaW5n
KGssMCwwKTsgfQoKICAgIHZvaWQgY2xlYXIoKSB7IFFHRGljdDo6Y2xlYXIoKTsgfQogICAgdm9p
ZCByZXNpemUoIHVpbnQgbiApIHsgUUdEaWN0OjpyZXNpemUobik7IH0KICAgIHZvaWQgc3RhdGlz
dGljcygpIGNvbnN0IHsgUUdEaWN0OjpzdGF0aXN0aWNzKCk7IH0KcHJpdmF0ZToKICAgIHZvaWQg
ZGVsZXRlSXRlbSggSXRlbSBkICk7Cn07CgoKCgoKCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPiBpbmxp
bmUgdm9pZCBRRGljdDx0eXBlPjo6ZGVsZXRlSXRlbSggUUNvbGxlY3Rpb246Okl0ZW0gZCApCnsK
ICAgIGlmICggZGVsX2l0ZW0gKSBkZWxldGUgKHR5cGUgKilkOwp9CgoKdGVtcGxhdGU8Y2xhc3Mg
dHlwZT4gY2xhc3MgUURpY3RJdGVyYXRvciA6IHB1YmxpYyBRR0RpY3RJdGVyYXRvcgp7CnB1Ymxp
YzoKICAgIFFEaWN0SXRlcmF0b3IoY29uc3QgUURpY3Q8dHlwZT4gJmQpIDpRR0RpY3RJdGVyYXRv
cigoUUdEaWN0ICYpZCkge30KICAgflFEaWN0SXRlcmF0b3IoKSB7fQogICAgdWludCBjb3VudCgp
IGNvbnN0IHsgcmV0dXJuIGRpY3QtPmNvdW50KCk7IH0KICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIGRpY3QtPmNvdW50KCkgPT0gMDsgfQogICAgdHlwZSAqdG9GaXJzdCgpIHsgcmV0
dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6OnRvRmlyc3QoKTsgfQogICAgb3BlcmF0b3IgdHlw
ZSAqKCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAg
IHR5cGUgKmN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpn
ZXQoKTsgfQogICAgUVN0cmluZyBjdXJyZW50S2V5KCkgY29uc3R7IHJldHVybiBRR0RpY3RJdGVy
YXRvcjo6Z2V0S2V5U3RyaW5nKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKCkoKSB7IHJldHVybiAo
dHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpvcGVyYXRvcigpKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9y
KysoKSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpvcGVyYXRvcisrKCk7IH0KICAg
IHR5cGUgKm9wZXJhdG9yKz0odWludCBqKSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9y
OjpvcGVyYXRvcis9KGopO30KfTsKIyAyOCAia3N0ZGRpcnMuaCIgMgojIDEgIi91c3IvbGliL3F0
LTIuMy4xL2luY2x1ZGUvcXN0cmluZ2xpc3QuaCIgMQojIDI5ICJrc3RkZGlycy5oIiAyCiMgMSAi
a2dsb2JhbC5oIiAxCiMgMzAgImtzdGRkaXJzLmgiIDIKCmNsYXNzIEtDb25maWc7CmNsYXNzIEtT
dGFuZGFyZERpcnNQcml2YXRlOwojIDExNSAia3N0ZGRpcnMuaCIKY2xhc3MgS1N0YW5kYXJkRGly
cwp7CnB1YmxpYzoKCgoKICAgICAgICBLU3RhbmRhcmREaXJzKCApOwoKCgoKICAgICAgICB2aXJ0
dWFsIH5LU3RhbmRhcmREaXJzKCk7CiMgMTM3ICJrc3RkZGlycy5oIgogICAgICAgIHZvaWQgYWRk
UHJlZml4KCBjb25zdCBRU3RyaW5nJiBkaXIgKTsKIyAxNTcgImtzdGRkaXJzLmgiCiAgICAgICAg
Ym9vbCBhZGRSZXNvdXJjZVR5cGUoIGNvbnN0IGNoYXIgKnR5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIHJlbGF0aXZlbmFtZSApOwojIDE3NiAia3N0ZGRp
cnMuaCIKICAgICAgICBib29sIGFkZFJlc291cmNlRGlyKCBjb25zdCBjaGFyICp0eXBlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIGFic2Rpcik7CiMgMTk3ICJr
c3RkZGlycy5oIgogICAgICAgIFFTdHJpbmcgZmluZFJlc291cmNlKCBjb25zdCBjaGFyICp0eXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBmaWxlbmFtZSAp
IGNvbnN0OwojIDIxNiAia3N0ZGRpcnMuaCIKICAgICAgICBRU3RyaW5nTGlzdCBmaW5kRGlycygg
Y29uc3QgY2hhciAqdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0
cmluZyYgcmVsZGlyICkgY29uc3Q7CiMgMjM3ICJrc3RkZGlycy5oIgogICAgICAgIFFTdHJpbmcg
ZmluZFJlc291cmNlRGlyKCBjb25zdCBjaGFyICp0eXBlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBmaWxlbmFtZSkgY29uc3Q7CiMgMjU5ICJrc3RkZGly
cy5oIgogICAgICAgIFFTdHJpbmdMaXN0IGZpbmRBbGxSZXNvdXJjZXMoIGNvbnN0IGNoYXIgKnR5
cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcm
IGZpbHRlciA9IFFTdHJpbmc6Om51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgcmVjdXJzaXZlID0gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgdW5pcSA9IGZhbHNlKSBjb25zdDsKIyAyODYgImtzdGRkaXJzLmgi
CiAgICAgICAgUVN0cmluZ0xpc3QgZmluZEFsbFJlc291cmNlcyggY29uc3QgY2hhciAqdHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgZmls
dGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlY3Vyc2l2
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1bmlxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nTGlzdCAmcmVsUGF0aHMp
IGNvbnN0OwojIDMwOSAia3N0ZGRpcnMuaCIKICAgICAgICBzdGF0aWMgUVN0cmluZyBmaW5kRXhl
KCBjb25zdCBRU3RyaW5nJiBhcHBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFFTdHJpbmcmIHBhdGhzdHI9UVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGlnbm9yZUV4ZWNCaXQ9ZmFsc2UgKTsKIyAzMzEgImtzdGRkaXJz
LmgiCiAgICAgICAgc3RhdGljIGludCBmaW5kQWxsRXhlKCBRU3RyaW5nTGlzdCYgbGlzdCwgY29u
c3QgUVN0cmluZyYgYXBwbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFFTdHJpbmcmIHBhdGhzdHI9UVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaWdub3JlRXhlY0JpdD1mYWxzZSApOwojIDM0NCAia3N0ZGRpcnMuaCIKICAg
ICAgICB2b2lkIGFkZEtERURlZmF1bHRzKCk7CiMgMzU1ICJrc3RkZGlycy5oIgogICAgICAgIGJv
b2wgYWRkQ3VzdG9taXplZChLQ29uZmlnICpjb25maWcpOwojIDM2NyAia3N0ZGRpcnMuaCIKICAg
ICAgICBRU3RyaW5nTGlzdCByZXNvdXJjZURpcnMoY29uc3QgY2hhciAqdHlwZSkgY29uc3Q7CgoK
CgoKCgogICAgICAgIFFTdHJpbmdMaXN0IGFsbFR5cGVzKCkgY29uc3Q7CiMgMzkzICJrc3RkZGly
cy5oIgogICAgICAgICBRU3RyaW5nIHNhdmVMb2NhdGlvbihjb25zdCBjaGFyICp0eXBlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBzdWZmaXggPSBRU3RyaW5n
OjpudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNyZWF0ZSA9IHRydWUp
IGNvbnN0OwojIDQwNiAia3N0ZGRpcnMuaCIKICAgICAgICBzdGF0aWMgYm9vbCBtYWtlRGlyKGNv
bnN0IFFTdHJpbmcmIGRpciwgaW50IG1vZGUgPSAwNzU1KTsKIyA0MzUgImtzdGRkaXJzLmgiCiAg
ICAgICAgc3RhdGljIFFTdHJpbmcga2RlX2RlZmF1bHQoY29uc3QgY2hhciAqdHlwZSk7CgoKCgog
ICAgICAgIFFTdHJpbmcga2Zzc3RuZF9wcmVmaXhlcygpOwoKCgoKCgoKICAgICAgICBRU3RyaW5n
IGxvY2Fsa2RlZGlyKCkgY29uc3Q7CgoKCgoKICAgICAgICBzdGF0aWMgYm9vbCBleGlzdHMoY29u
c3QgUVN0cmluZyAmZnVsbFBhdGgpOwoKIHByaXZhdGU6CgogICAgICAgIFFTdHJpbmdMaXN0IHBy
ZWZpeGVzOwoKCiAgICAgICAgUURpY3Q8UVN0cmluZ0xpc3Q+IGFic29sdXRlczsKICAgICAgICBR
RGljdDxRU3RyaW5nTGlzdD4gcmVsYXRpdmVzOwoKICAgICAgICBtdXRhYmxlIFFEaWN0PFFTdHJp
bmdMaXN0PiBkaXJjYWNoZTsKCgogICAgICAgIEtTdGFuZGFyZERpcnMoIGNvbnN0IEtTdGFuZGFy
ZERpcnMmICk7CiAgICAgICAgS1N0YW5kYXJkRGlycyYgb3BlcmF0b3I9ICggY29uc3QgS1N0YW5k
YXJkRGlycyYgKTsKCiAgICAgICAgYm9vbCBhZGRlZEN1c3RvbXM7CgogICAgICAgIEtTdGFuZGFy
ZERpcnNQcml2YXRlICpkOwoKICAgICAgICB2b2lkIGNoZWNrQ29uZmlnKCkgY29uc3Q7Cn07CiMg
NTI0ICJrc3RkZGlycy5oIgpRU3RyaW5nIGxvY2F0ZSggY29uc3QgY2hhciAqdHlwZSwgY29uc3Qg
UVN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IEtJbnN0YW5jZSogaW5zdGFuY2UgPSBLR2xvYmFsOjpp
bnN0YW5jZSgpICk7CiMgNTM0ICJrc3RkZGlycy5oIgpRU3RyaW5nIGxvY2F0ZUxvY2FsKCBjb25z
dCBjaGFyICp0eXBlLCBjb25zdCBRU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgS0luc3RhbmNlKiBp
bnN0YW5jZSA9IEtHbG9iYWw6Omluc3RhbmNlKCkgKTsKIyA0MCAia2NvbmZpZ2JhY2tlbmQuY3Bw
IiAyCiMgMSAia3NhdmVmaWxlLmgiIDEKIyAyMyAia3NhdmVmaWxlLmgiCiMgMSAiL3Vzci9saWIv
cXQtMi4zLjEvaW5jbHVkZS9xc3RyaW5nLmgiIDEKIyAyNCAia3NhdmVmaWxlLmgiIDIKIyAxICIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGlv
LmgiIDEgMwojIDI1ICJrc2F2ZWZpbGUuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAx
IDMKIyAyOSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVy
ZXMuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAyIDMKCgpleHRlcm4gIkMiIHsK
CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRl
L2JpdHMvZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAxIDMKCgoK
IyAxICIvdXNyL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEgMwojIDUgIi91c3IvaW5jbHVkZS9saW51
eC9lcnJuby5oIiAyIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMiAzCiMgMzYg
Ii91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKZXh0ZXJuIGludCBlcnJubzsKCgpleHRlcm4g
aW50ICpfX2Vycm5vX2xvY2F0aW9uICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CiMgMzcgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAyIDMKIyA1NSAiL3Vzci9pbmNs
dWRlL2Vycm5vLmgiIDMKZXh0ZXJuIGNoYXIgKnByb2dyYW1faW52b2NhdGlvbl9uYW1lLCAqcHJv
Z3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWU7CgoKCn0KIyA2OSAiL3Vzci9pbmNsdWRlL2Vycm5v
LmgiIDMKdHlwZWRlZiBpbnQgZXJyb3JfdDsKIyAyNiAia3NhdmVmaWxlLmgiIDIKIyAxICJrdGVt
cGZpbGUuaCIgMQojIDIzICJrdGVtcGZpbGUuaCIKIyAxICIvdXNyL2xpYi9xdC0yLjMuMS9pbmNs
dWRlL3FmaWxlLmgiIDEKIyAyNCAia3RlbXBmaWxlLmgiIDIKIyAxICIvdXNyL2xpYi9xdC0yLjMu
MS9pbmNsdWRlL3FzdHJpbmcuaCIgMQojIDI1ICJrdGVtcGZpbGUuaCIgMgojIDEgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMSAz
CiMgMjYgImt0ZW1wZmlsZS5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEgMwojIDI3
ICJrdGVtcGZpbGUuaCIgMgoKY2xhc3MgUVRleHRTdHJlYW07CmNsYXNzIFFEYXRhU3RyZWFtOwpj
bGFzcyBLU2F2ZUZpbGU7CmNsYXNzIEtUZW1wRmlsZVByaXZhdGU7CiMgNTQgImt0ZW1wZmlsZS5o
IgpjbGFzcyBLVGVtcEZpbGUKewogICBmcmllbmQgY2xhc3MgS1NhdmVGaWxlOwpwdWJsaWM6CgoK
CgoKCgogICBLVGVtcEZpbGUoUVN0cmluZyBmaWxlUHJlZml4PVFTdHJpbmc6Om51bGwsCiAgICAg
ICAgICAgICBRU3RyaW5nIGZpbGVFeHRlbnNpb249UVN0cmluZzo6bnVsbCwKICAgICAgICAgICAg
IGludCBtb2RlID0gMDYwMCApOwoKCgoKCgogICB+S1RlbXBGaWxlKCk7CgoKCgoKICAgdm9pZCBz
ZXRBdXRvRGVsZXRlKGJvb2wgYXV0b0RlbGV0ZSkgeyBiQXV0b0RlbGV0ZSA9IGF1dG9EZWxldGU7
IH0KIyA5MiAia3RlbXBmaWxlLmgiCiAgIGludCBzdGF0dXMoKSBjb25zdDsKCgoKCiAgIFFTdHJp
bmcgbmFtZSgpIGNvbnN0OwoKCgoKICAgaW50IGhhbmRsZSgpIGNvbnN0OwoKCgoKICAgRklMRSAq
ZnN0cmVhbSgpOwoKCgoKICAgUVRleHRTdHJlYW0gKnRleHRTdHJlYW0oKTsKCgoKCiAgIFFEYXRh
U3RyZWFtICpkYXRhU3RyZWFtKCk7CgoKCgogICBRRmlsZSAqZmlsZSgpOwoKCgoKCiAgIHZvaWQg
dW5saW5rKCk7CgoKCgoKCiAgIGJvb2wgY2xvc2UoKTsKCnByb3RlY3RlZDoKCgoKICAgS1RlbXBG
aWxlKGJvb2wpOwoKCgoKCiAgIGJvb2wgY3JlYXRlKGNvbnN0IFFTdHJpbmcgJmZpbGVQcmVmaXgs
CiAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJmZpbGVFeHRlbnNpb24sIGludCBtb2RlKTsK
CiAgIHZvaWQgc2V0RXJyb3IoaW50IGVycm9yKSB7IG1FcnJvciA9IGVycm9yOyB9CnByaXZhdGU6
CiAgIGludCBtRXJyb3I7CiAgIFFTdHJpbmcgbVRtcE5hbWU7CiAgIGludCBtRmQ7CiAgIEZJTEUg
Km1TdHJlYW07CiAgIFFGaWxlICptRmlsZTsKICAgUVRleHRTdHJlYW0gKm1UZXh0U3RyZWFtOwog
ICBRRGF0YVN0cmVhbSAqbURhdGFTdHJlYW07CiAgIGJvb2wgYk9wZW47CiAgIGJvb2wgYkF1dG9E
ZWxldGU7CgogICBLVGVtcEZpbGVQcml2YXRlICpkOwp9OwojIDI3ICJrc2F2ZWZpbGUuaCIgMgoK
Y2xhc3MgS1NhdmVGaWxlUHJpdmF0ZTsKIyA0MSAia3NhdmVmaWxlLmgiCmNsYXNzIEtTYXZlRmls
ZQp7CnB1YmxpYzoKICAgS1NhdmVGaWxlKGNvbnN0IFFTdHJpbmcgJmZpbGVuYW1lLCBpbnQgbW9k
ZSA9IDA2NjYgKTsKCgoKCiAgIH5LU2F2ZUZpbGUoKTsKIyA2MSAia3NhdmVmaWxlLmgiCiAgIGlu
dCBzdGF0dXMoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIG1UZW1wRmlsZS5zdGF0dXMoKTsgfQoK
CgoKICAgUVN0cmluZyBuYW1lKCkgY29uc3Q7CgoKCgogICBpbnQgaGFuZGxlKCkgY29uc3QKICAg
ICAgICB7IHJldHVybiBtVGVtcEZpbGUuaGFuZGxlKCk7IH0KCgoKCiAgIEZJTEUgKmZzdHJlYW0o
KQogICAgICAgIHsgcmV0dXJuIG1UZW1wRmlsZS5mc3RyZWFtKCk7IH0KCgoKCiAgIFFGaWxlICpm
aWxlKCkKICAgICAgICB7IHJldHVybiBtVGVtcEZpbGUuZmlsZSgpOyB9CgoKCgogICBRVGV4dFN0
cmVhbSAqdGV4dFN0cmVhbSgpCiAgICAgICAgeyByZXR1cm4gbVRlbXBGaWxlLnRleHRTdHJlYW0o
KTsgfQoKCgoKICAgUURhdGFTdHJlYW0gKmRhdGFTdHJlYW0oKQogICAgICAgIHsgcmV0dXJuIG1U
ZW1wRmlsZS5kYXRhU3RyZWFtKCk7IH0KCgoKCgogICB2b2lkIGFib3J0KCk7CgoKCgoKCiAgIGJv
b2wgY2xvc2UoKTsKcHJpdmF0ZToKICAgUVN0cmluZyBtRmlsZU5hbWU7CiAgIEtUZW1wRmlsZSBt
VGVtcEZpbGU7CgogICBLU2F2ZUZpbGVQcml2YXRlICpkOwp9OwojIDQxICJrY29uZmlnYmFja2Vu
ZC5jcHAiIDIKIyAxICJrdXJsLmgiIDEKIyAyMyAia3VybC5oIgojIDEgIi91c3IvbGliL3F0LTIu
My4xL2luY2x1ZGUvcXN0cmluZy5oIiAxCiMgMjQgImt1cmwuaCIgMgojIDEgIi91c3IvbGliL3F0
LTIuMy4xL2luY2x1ZGUvcXZhbHVlbGlzdC5oIiAxCiMgMjUgImt1cmwuaCIgMgoKY2xhc3MgUVVy
bDsKY2xhc3MgUVN0cmluZ0xpc3Q7CgpzdHJ1Y3QgS1VSTFByaXZhdGU7CiMgNTIgImt1cmwuaCIK
Y2xhc3MgS1VSTAp7CnB1YmxpYzoKICBjbGFzcyBMaXN0IDogcHVibGljIFFWYWx1ZUxpc3Q8S1VS
TD4KICB7CiAgcHVibGljOgogICAgICBMaXN0KCkgeyB9CiAgICAgIExpc3QoY29uc3QgUVN0cmlu
Z0xpc3QgJik7CiAgICAgIFFTdHJpbmdMaXN0IHRvU3RyaW5nTGlzdCgpIGNvbnN0OwogIH07CgoK
CiAgS1VSTCgpOwoKCgoKICB+S1VSTCgpOwojIDg3ICJrdXJsLmgiCiAgS1VSTCggY29uc3QgUVN0
cmluZyYgdXJsLCBpbnQgZW5jb2RpbmdfaGludCA9IDAgKTsKCgoKCgogIEtVUkwoIGNvbnN0IGNo
YXIgKiB1cmwsIGludCBlbmNvZGluZ19oaW50ID0gMCApOwoKCgogIEtVUkwoIGNvbnN0IEtVUkwm
IHUgKTsKCgoKICBLVVJMKCBjb25zdCBRVXJsICZ1ICk7CiMgMTEzICJrdXJsLmgiCiAgS1VSTCgg
Y29uc3QgS1VSTCYgX2Jhc2V1cmwsIGNvbnN0IFFTdHJpbmcmIF9yZWxfdXJsLCBpbnQgZW5jb2Rp
bmdfaGludD0wICk7CgoKCgogIFFTdHJpbmcgcHJvdG9jb2woKSBjb25zdCB7IHJldHVybiBtX2JJ
c01hbGZvcm1lZCA/IFFTdHJpbmc6Om51bGwgOiBtX3N0clByb3RvY29sOyB9CgoKCiAgdm9pZCBz
ZXRQcm90b2NvbCggY29uc3QgUVN0cmluZyYgX3R4dCApOwoKCgoKICBRU3RyaW5nIHVzZXIoKSBj
b25zdCB7IHJldHVybiBtX3N0clVzZXI7IH0KCgoKCgogIHZvaWQgc2V0VXNlciggY29uc3QgUVN0
cmluZyYgX3R4dCApOwoKCgogIGJvb2wgaGFzVXNlcigpIGNvbnN0IHsgcmV0dXJuICFtX3N0clVz
ZXIuaXNFbXB0eSgpOyB9CgoKCgogIFFTdHJpbmcgcGFzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
UGFzczsgfQoKCgoKCiAgdm9pZCBzZXRQYXNzKCBjb25zdCBRU3RyaW5nJiBfdHh0ICk7CgoKCiAg
Ym9vbCBoYXNQYXNzKCkgY29uc3QgeyByZXR1cm4gIW1fc3RyUGFzcy5pc0VtcHR5KCk7IH0KCgoK
CiAgUVN0cmluZyBob3N0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJIb3N0OyB9CgoKCgoKICB2b2lk
IHNldEhvc3QoIGNvbnN0IFFTdHJpbmcmIF90eHQgKTsKCgoKICBib29sIGhhc0hvc3QoKSBjb25z
dCB7IHJldHVybiAhbV9zdHJIb3N0LmlzRW1wdHkoKTsgfQoKCgoKCiAgdW5zaWduZWQgc2hvcnQg
aW50IHBvcnQoKSBjb25zdCB7IHJldHVybiBtX2lQb3J0OyB9CgoKCiAgdm9pZCBzZXRQb3J0KCB1
bnNpZ25lZCBzaG9ydCBpbnQgX3AgKTsKCgoKCgogIFFTdHJpbmcgcGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyUGF0aDsgfQojIDE5NyAia3VybC5oIgogIFFTdHJpbmcgcGF0aCggaW50IF90cmFp
bGluZyApIGNvbnN0OwoKCgoKCgogIHZvaWQgc2V0UGF0aCggY29uc3QgUVN0cmluZyYgcGF0aCAp
OwoKCgogIGJvb2wgaGFzUGF0aCgpIGNvbnN0IHsgcmV0dXJuICFtX3N0clBhdGguaXNFbXB0eSgp
OyB9CgoKCgoKICB2b2lkIGNsZWFuUGF0aCgpOwojIDIyMyAia3VybC5oIgogIHZvaWQgY2xlYW5Q
YXRoKGJvb2wgY2xlYW5EaXJTZXBhcmF0b3IpOwoKCgoKCgogIHZvaWQgc2V0RW5jb2RlZFBhdGhB
bmRRdWVyeSggY29uc3QgUVN0cmluZyYgX3R4dCwgaW50IGVuY29kaW5nX2hpbnQgPSAwICk7CgoK
CgoKCgogIFFTdHJpbmcgZW5jb2RlZFBhdGhBbmRRdWVyeSggaW50IF90cmFpbGluZyA9IDAsIGJv
b2wgX25vX2VtcHR5X3BhdGggPSBmYWxzZSwgaW50IGVuY29kaW5nX2hpbnQgPSAwKSBjb25zdDsK
IyAyNDcgImt1cmwuaCIKICB2b2lkIHNldFF1ZXJ5KCBjb25zdCBRU3RyaW5nJiBfdHh0LCBpbnQg
ZW5jb2RpbmdfaGludCA9IDApOwojIDI1NiAia3VybC5oIgogIFFTdHJpbmcgcXVlcnkoKSBjb25z
dCB7IHJldHVybiBtX3N0clF1ZXJ5X2VuY29kZWQ7IH0KCgoKCiAgUVN0cmluZyByZWYoKSBjb25z
dCB7IHJldHVybiBtX3N0clJlZl9lbmNvZGVkOyB9CgoKCgoKICB2b2lkIHNldFJlZiggY29uc3Qg
UVN0cmluZyYgX3R4dCApIHsgbV9zdHJSZWZfZW5jb2RlZCA9IF90eHQ7IH0KCgoKCgogIGJvb2wg
aGFzUmVmKCkgY29uc3QgeyByZXR1cm4gIW1fc3RyUmVmX2VuY29kZWQuaXNFbXB0eSgpOyB9CgoK
CgogIFFTdHJpbmcgaHRtbFJlZigpIGNvbnN0OwoKCgoKICBRU3RyaW5nIGVuY29kZWRIdG1sUmVm
KCkgY29uc3Q7CiMgMjkyICJrdXJsLmgiCiAgdm9pZCBzZXRIVE1MUmVmKCBjb25zdCBRU3RyaW5n
JiBfcmVmICk7CgoKCgoKCiAgYm9vbCBoYXNIVE1MUmVmKCkgY29uc3Q7CgoKCgoKICBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiAhbV9iSXNNYWxmb3JtZWQ7IH0KCgoKICBib29sIGlzTWFs
Zm9ybWVkKCkgY29uc3QgeyByZXR1cm4gIWlzVmFsaWQoKTsgfQoKCgoKCiAgYm9vbCBpc0xvY2Fs
RmlsZSgpIGNvbnN0OwoKCgoKCiAgYm9vbCBoYXNTdWJVUkwoKSBjb25zdDsKIyAzMzMgImt1cmwu
aCIKICB2b2lkIGFkZFBhdGgoIGNvbnN0IFFTdHJpbmcmIF90eHQgKTsKIyAzNDYgImt1cmwuaCIK
ICB2b2lkIHNldEZpbGVOYW1lKCBjb25zdCBRU3RyaW5nJl90eHQgKTsKIyAzNTcgImt1cmwuaCIK
ICBRU3RyaW5nIGZpbGVOYW1lKCBib29sIF9pZ25vcmVfdHJhaWxpbmdfc2xhc2hfaW5fcGF0aCA9
IHRydWUgKSBjb25zdDsKICBRU3RyaW5nIGZpbGVuYW1lKCBib29sIF9pZ25vcmVfdHJhaWxpbmdf
c2xhc2hfaW5fcGF0aCA9IHRydWUgKSBjb25zdAogIHsKICAgIHJldHVybiBmaWxlTmFtZShfaWdu
b3JlX3RyYWlsaW5nX3NsYXNoX2luX3BhdGgpOwogIH0KIyAzNzQgImt1cmwuaCIKICBRU3RyaW5n
IGRpcmVjdG9yeSggYm9vbCBfc3RyaXBfdHJhaWxpbmdfc2xhc2hfZnJvbV9yZXN1bHQgPSB0cnVl
LAogICAgICAgICAgICAgICAgICAgICBib29sIF9pZ25vcmVfdHJhaWxpbmdfc2xhc2hfaW5fcGF0
aCA9IHRydWUgKSBjb25zdDsKIyAzODkgImt1cmwuaCIKICBib29sIGNkKCBjb25zdCBRU3RyaW5n
JiBfZGlyICk7CiMgMzk5ICJrdXJsLmgiCiAgUVN0cmluZyB1cmwoIGludCBfdHJhaWxpbmcgPSAw
ICkgY29uc3Q7CiMgNDEyICJrdXJsLmgiCiAgUVN0cmluZyB1cmwoIGludCBfdHJhaWxpbmcsIGlu
dCBlbmNvZGluZ19oaW50ICkgY29uc3Q7CgoKCgoKCiAgUVN0cmluZyBwcmV0dHlVUkwoIGludCBf
dHJhaWxpbmcgPSAwKSBjb25zdDsKCgoKCiAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiMgNDMzICJr
dXJsLmgiCiAgS1VSTCB1cFVSTCggKSBjb25zdDsKCiAgS1VSTCYgb3BlcmF0b3I9KCBjb25zdCBL
VVJMJiBfdSApOwogIEtVUkwmIG9wZXJhdG9yPSggY29uc3QgUVN0cmluZyYgX3VybCApOwogIEtV
UkwmIG9wZXJhdG9yPSggY29uc3QgY2hhciAqIF91cmwgKTsKICBLVVJMJiBvcGVyYXRvcj0oIGNv
bnN0IFFVcmwgJiB1ICk7CgogIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgS1VSTCYgX3UgKSBjb25z
dDsKICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFTdHJpbmcmIF91ICkgY29uc3Q7CiAgYm9vbCBv
cGVyYXRvciE9KCBjb25zdCBLVVJMJiBfdSApIGNvbnN0IHsgcmV0dXJuICEoICp0aGlzID09IF91
ICk7IH0KICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTdHJpbmcmIF91ICkgY29uc3QgeyByZXR1
cm4gISggKnRoaXMgPT0gX3UgKTsgfQojIDQ1MiAia3VybC5oIgogIGJvb2wgY21wKCBjb25zdCBL
VVJMICZ1LCBib29sIGlnbm9yZV90cmFpbGluZyA9IGZhbHNlICkgY29uc3Q7CgoKCgoKICBib29s
IGlzUGFyZW50T2YoIGNvbnN0IEtVUkwmIHUgKSBjb25zdDsKIyA0NzQgImt1cmwuaCIKICBzdGF0
aWMgTGlzdCBzcGxpdCggY29uc3QgUVN0cmluZyYgX3VybCApOwoKCgoKICBzdGF0aWMgTGlzdCBz
cGxpdCggY29uc3QgS1VSTCYgX3VybCApOwoKCgoKCgogIHN0YXRpYyBLVVJMIGpvaW4oIGNvbnN0
IExpc3QmIF9saXN0ICk7CiMgNDk2ICJrdXJsLmgiCiAgc3RhdGljIFFTdHJpbmcgZW5jb2RlX3N0
cmluZyhjb25zdCBRU3RyaW5nICZzdHIsIGludCBlbmNvZGluZ19oaW50ID0gMCk7CiMgNTA3ICJr
dXJsLmgiCiAgc3RhdGljIFFTdHJpbmcgZW5jb2RlX3N0cmluZ19ub19zbGFzaChjb25zdCBRU3Ry
aW5nICZzdHIsIGludCBlbmNvZGluZ19oaW50ID0gMCk7CiMgNTE4ICJrdXJsLmgiCiAgc3RhdGlj
IFFTdHJpbmcgZGVjb2RlX3N0cmluZyhjb25zdCBRU3RyaW5nICZzdHIsIGludCBlbmNvZGluZ19o
aW50ID0gMCk7CiMgNTI4ICJrdXJsLmgiCiAgc3RhdGljIGJvb2wgaXNSZWxhdGl2ZVVSTChjb25z
dCBRU3RyaW5nICZfdXJsKTsKCnByb3RlY3RlZDoKICB2b2lkIHJlc2V0KCk7CiAgdm9pZCBwYXJz
ZSggY29uc3QgUVN0cmluZyYgX3VybCwgaW50IGVuY29kaW5nX2hpbnQgPSAwKTsKCnByaXZhdGU6
CiAgUVN0cmluZyBtX3N0clByb3RvY29sOwogIFFTdHJpbmcgbV9zdHJVc2VyOwogIFFTdHJpbmcg
bV9zdHJQYXNzOwogIFFTdHJpbmcgbV9zdHJIb3N0OwogIFFTdHJpbmcgbV9zdHJQYXRoOwogIFFT
dHJpbmcgbV9zdHJSZWZfZW5jb2RlZDsKICBRU3RyaW5nIG1fc3RyUXVlcnlfZW5jb2RlZDsKICBL
VVJMUHJpdmF0ZSogZDsKICBib29sIG1fYklzTWFsZm9ybWVkIDogMTsKICBpbnQgZnJlZUZvclVz
ZSA6IDc7CiAgdW5zaWduZWQgc2hvcnQgaW50IG1faVBvcnQ7CiAgUVN0cmluZyBtX3N0clBhdGhf
ZW5jb2RlZDsKCiAgZnJpZW5kIFFEYXRhU3RyZWFtICYgb3BlcmF0b3I8PCAoUURhdGFTdHJlYW0g
JiBzLCBjb25zdCBLVVJMICYgYSk7CiAgZnJpZW5kIFFEYXRhU3RyZWFtICYgb3BlcmF0b3I+PiAo
UURhdGFTdHJlYW0gJiBzLCBLVVJMICYgYSk7Cn07CgoKCgoKCgpib29sIHVybGNtcCggY29uc3Qg
UVN0cmluZyYgX3VybDEsIGNvbnN0IFFTdHJpbmcmIF91cmwyICk7CiMgNTY5ICJrdXJsLmgiCmJv
b2wgdXJsY21wKCBjb25zdCBRU3RyaW5nJiBfdXJsMSwgY29uc3QgUVN0cmluZyYgX3VybDIsIGJv
b2wgX2lnbm9yZV90cmFpbGluZywgYm9vbCBfaWdub3JlX3JlZiApOwoKUURhdGFTdHJlYW0gJiBv
cGVyYXRvcjw8IChRRGF0YVN0cmVhbSAmIHMsIGNvbnN0IEtVUkwgJiBhKTsKUURhdGFTdHJlYW0g
JiBvcGVyYXRvcj4+IChRRGF0YVN0cmVhbSAmIHMsIEtVUkwgJiBhKTsKIyA0MiAia2NvbmZpZ2Jh
Y2tlbmQuY3BwIiAyCgpleHRlcm4gYm9vbCBjaGVja0FjY2Vzcyhjb25zdCBRU3RyaW5nJiBwYXRo
bmFtZSwgaW50IG1vZGUpOwoKc3RhdGljIFFDU3RyaW5nIHByaW50YWJsZVRvU3RyaW5nKGNvbnN0
IGNoYXIgKnN0ciwgaW50IGwpCnsKCiAgd2hpbGUoKGw+MCkgJiYKICAgICAgICAoKCpzdHIgPT0g
JyAnKSB8fCAoKnN0ciA9PSAnXHQnKSB8fCAoKnN0ciA9PSAnXHInKSkpCiAgewogICAgIHN0cisr
OyBsLS07CiAgfQoKCiAgd2hpbGUoKGw+MCkgJiYKICAgICAgICAoKHN0cltsLTFdID09ICcgJykg
fHwgKHN0cltsLTFdID09ICdcdCcpIHx8IChzdHJbbC0xXSA9PSAnXHInKSkpCiAgewogICAgIGwt
LTsKICB9CgogIFFDU3RyaW5nIHJlc3VsdChsICsgMSk7CiAgY2hhciAqciA9IHJlc3VsdC5kYXRh
KCk7CgogIGZvcihpbnQgaSA9IDA7IGkgPCBsO2krKywgc3RyKyspCiAgewogICAgIGlmICgqc3Ry
ID09ICdcXCcpCiAgICAgewogICAgICAgIGkrKywgc3RyKys7CiAgICAgICAgaWYgKGkgPj0gbCkK
ICAgICAgICB7CiAgICAgICAgICAgKnIrKyA9ICdcXCc7CiAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgfQogICAgICAgIHN3aXRjaCgqc3RyKQogICAgICAgIHsKICAgICAgICAgICBjYXNlICdzJzoK
ICAgICAgICAgICAgICAqcisrID0gJyAnOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGNhc2UgJ3QnOgogICAgICAgICAgICAgICpyKysgPSAnXHQnOwogICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICpyKysgPSAnXG4nOwogICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgJ3InOgogICAgICAgICAgICAgICpyKysgPSAn
XHInOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgJ1xcJzoKICAgICAgICAg
ICAgICAqcisrID0gJ1xcJzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICpyKysgPSAnXFwnOwogICAgICAgICAgICAgICpyKysgPSAqc3RyOwog
ICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgICAqcisrID0gKnN0cjsKICAg
ICB9CiAgfQogIHJlc3VsdC50cnVuY2F0ZShyLXJlc3VsdC5kYXRhKCkpOwogIHJldHVybiByZXN1
bHQ7Cn0KCnN0YXRpYyBRQ1N0cmluZyBzdHJpbmdUb1ByaW50YWJsZShjb25zdCBRQ1N0cmluZyYg
c3RyKXsKICBRQ1N0cmluZyByZXN1bHQoc3RyLmxlbmd0aCgpKjIpOwogIHJlZ2lzdGVyIGNoYXIg
KnIgPSByZXN1bHQuZGF0YSgpOwogIHJlZ2lzdGVyIGNoYXIgKnMgPSBzdHIuZGF0YSgpOwoKCiAg
aWYgKCpzID09ICcgJykKICB7CiAgICAgKnIrKyA9ICdcXCc7ICpyKysgPSAncyc7CiAgICAgcysr
OwogIH0KCiAgaWYgKCpzKQogIHsKICAgd2hpbGUoKnMpCiAgIHsKICAgIGlmICgqcyA9PSAnXG4n
KQogICAgewogICAgICAqcisrID0gJ1xcJzsgKnIrKyA9ICduJzsKICAgIH0KICAgIGVsc2UgaWYg
KCpzID09ICdcdCcpCiAgICB7CiAgICAgICpyKysgPSAnXFwnOyAqcisrID0gJ3QnOwogICAgfQog
ICAgZWxzZSBpZiAoKnMgPT0gJ1xyJykKICAgIHsKICAgICAgKnIrKyA9ICdcXCc7ICpyKysgPSAn
cic7CiAgICB9CiAgICBlbHNlIGlmICgqcyA9PSAnXFwnKQogICAgewogICAgICAqcisrID0gJ1xc
JzsgKnIrKyA9ICdcXCc7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICpyKysgPSAqczsKICAg
IH0KICAgIHMrKzsKICAgfQoKICAgaWYgKCooci0xKSA9PSAnICcpCiAgIHsKICAgICAgKihyLTEp
ID0gJ1xcJzsgKnIrKyA9ICdzJzsKICAgfQogIH0KCiAgcmVzdWx0LnRydW5jYXRlKHIgLSByZXN1
bHQuZGF0YSgpKTsKICByZXR1cm4gcmVzdWx0Owp9CgpLQ29uZmlnQmFja0VuZDo6S0NvbmZpZ0Jh
Y2tFbmQoS0NvbmZpZ0Jhc2UgKl9jb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRU3RyaW5nICZfZmlsZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICogX3Jlc1R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIF91c2VLREVHbG9iYWxzKQogIDogcENvbmZpZyhfY29uZmlnKSwgZmlsZU5hbWUoX2ZpbGVO
YW1lKSwKICAgIHJlc1R5cGUoX3Jlc1R5cGUpLCB1c2VLREVHbG9iYWxzKF91c2VLREVHbG9iYWxz
KQp7Cn0KCmJvb2wgS0NvbmZpZ0lOSUJhY2tFbmQ6OnBhcnNlQ29uZmlnRmlsZXMoKQp7CgoKCiAg
aWYgKHVzZUtERUdsb2JhbHMpIHsKCiAgICBRU3RyaW5nTGlzdCBrZGVyY3MgPSBLR2xvYmFsOjpk
aXJzKCktPgogICAgICBmaW5kQWxsUmVzb3VyY2VzKCJjb25maWciLCBRU3RyaW5nOjpmcm9tTGF0
aW4xKCJrZGVnbG9iYWxzIikpOwoKICAgIGlmIChjaGVja0FjY2VzcyhRU3RyaW5nOjpmcm9tTGF0
aW4xKCIvZXRjL2tkZXJjIiksIDQpKQogICAgICBrZGVyY3MgKz0gUVN0cmluZzo6ZnJvbUxhdGlu
MSgiL2V0Yy9rZGVyYyIpOwoKICAgIGtkZXJjcyArPSBLR2xvYmFsOjpkaXJzKCktPgogICAgICBm
aW5kQWxsUmVzb3VyY2VzKCJjb25maWciLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzeXN0ZW0ua2Rl
Z2xvYmFscyIpKTsKCiAgICBRU3RyaW5nTGlzdDo6Q29uc3RJdGVyYXRvciBpdDsKCiAgICBmb3Ig
KGl0ID0ga2RlcmNzLmZyb21MYXN0KCk7IGl0ICE9IGtkZXJjcy5lbmQoKTsgaXQtLSkgewoKICAg
ICAgUUZpbGUgYUNvbmZpZ0ZpbGUoICppdCApOwogICAgICBpZiAoIWFDb25maWdGaWxlLm9wZW4o
IDB4MDAwMSApKQogICAgICAgICAgIGNvbnRpbnVlOwogICAgICBwYXJzZVNpbmdsZUNvbmZpZ0Zp
bGUoIGFDb25maWdGaWxlLCAwTCwgdHJ1ZSApOwogICAgICBhQ29uZmlnRmlsZS5jbG9zZSgpOwog
ICAgfQogIH0KCiAgaWYgKCFmaWxlTmFtZS5pc0VtcHR5KCkpIHsKICAgIFFTdHJpbmdMaXN0IGxp
c3QgPSBLR2xvYmFsOjpkaXJzKCktPgogICAgICBmaW5kQWxsUmVzb3VyY2VzKHJlc1R5cGUsIGZp
bGVOYW1lKTsKCiAgICBRU3RyaW5nTGlzdDo6Q29uc3RJdGVyYXRvciBpdDsKCiAgICBmb3IgKGl0
ID0gbGlzdC5mcm9tTGFzdCgpOyBpdCAhPSBsaXN0LmVuZCgpOyBpdC0tKSB7CgogICAgICBRRmls
ZSBhQ29uZmlnRmlsZSggKml0ICk7CgogICAgICBhQ29uZmlnRmlsZS5vcGVuKCAweDAwMDEgKTsK
ICAgICAgcGFyc2VTaW5nbGVDb25maWdGaWxlKCBhQ29uZmlnRmlsZSwgMEwsIGZhbHNlICk7CiAg
ICAgIGFDb25maWdGaWxlLmNsb3NlKCk7CiAgICB9CiAgfQoKICByZXR1cm4gdHJ1ZTsKfQoKS0Nv
bmZpZ0Jhc2U6OkNvbmZpZ1N0YXRlIEtDb25maWdJTklCYWNrRW5kOjpnZXRDb25maWdTdGF0ZSgp
IGNvbnN0CnsKICAgIGlmIChmaWxlTmFtZS5pc0VtcHR5KCkpCiAgICAgICAgcmV0dXJuIEtDb25m
aWdCYXNlOjpOb0FjY2VzczsKCiAgICBRU3RyaW5nIGFMb2NhbEZpbGVOYW1lID0gS0dsb2JhbDo6
ZGlycygpLT5zYXZlTG9jYXRpb24oImNvbmZpZyIpICsKICAgICAgZmlsZU5hbWU7CgoKCgogICAg
aWYgKGNoZWNrQWNjZXNzKGFMb2NhbEZpbGVOYW1lLCAyfDQpKQogICAgICAgIHJldHVybiBLQ29u
ZmlnQmFzZTo6UmVhZFdyaXRlOwogICAgZWxzZQogICAgICAgIGlmIChjaGVja0FjY2VzcyhhTG9j
YWxGaWxlTmFtZSwgNCkpCiAgICAgICAgICAgIHJldHVybiBLQ29uZmlnQmFzZTo6UmVhZE9ubHk7
CgogICAgcmV0dXJuIEtDb25maWdCYXNlOjpOb0FjY2VzczsKfQoKdm9pZCBLQ29uZmlnSU5JQmFj
a0VuZDo6cGFyc2VTaW5nbGVDb25maWdGaWxlKFFGaWxlICZyRmlsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFbnRyeU1hcCAqcFdyaXRlQmFja01hcCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYkdsb2Jh
bCkKewogICBpZiAoIXJGaWxlLmlzT3BlbigpKQogICAgICByZXR1cm47CgoKCgoKICAgUUNTdHJp
bmcgYUN1cnJlbnRHcm91cCgiPGRlZmF1bHQ+Iik7CgogICBjb25zdCBjaGFyICpzLCAqZW9mOwog
ICBRQnl0ZUFycmF5IGRhdGE7CgogICBjb25zdCBjaGFyICptYXAgPSAoIGNvbnN0IGNoYXIqICkg
bW1hcCgwLCByRmlsZS5zaXplKCksIDB4MSwgMHgwMiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgckZpbGUuaGFuZGxlKCksIDApOwogICBpZiAobWFwKQogICB7CiAg
ICAgIHMgPSBtYXA7CiAgICAgIGVvZiA9IHMgKyByRmlsZS5zaXplKCk7CiAgIH0KICAgZWxzZQoK
ICAgewogICAgICByRmlsZS5hdCgwKTsKICAgICAgZGF0YSA9IHJGaWxlLnJlYWRBbGwoKTsKICAg
ICAgcyA9IGRhdGEuZGF0YSgpOwogICAgICBlb2YgPSBzICsgZGF0YS5zaXplKCk7CiAgIH0KCiAg
IGludCBsaW5lID0gMDsKICAgZm9yKDsgcyA8IGVvZjsgKytzKQogICB7CiAgICAgIGxpbmUrKzsK
CiAgICAgIHdoaWxlKChzIDwgZW9mKSAmJiAoX19jdHlwZV9iWyhpbnQpICgoKnMpKV0gJiAodW5z
aWduZWQgc2hvcnQgaW50KSBfSVNzcGFjZSkgJiYgKCpzICE9ICdcbicpKQogICAgICAgICBzKys7
CgoKICAgICAgaWYgKChzIDwgZW9mKSAmJiAoKCpzID09ICdcbicpIHx8ICgqcyA9PSAnIycpKSkK
ICAgICAgewogICAgc2t0b2VvbDoKICAgICAgICAgd2hpbGUgKChzIDwgZW9mKSAmJiAoKnMgIT0g
J1xuJykpCiAgICAgICAgICAgIHMrKzsKICAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAg
Y29uc3QgY2hhciAqc3RhcnRMaW5lID0gczsKCiAgICAgIGlmICgqcyA9PSAnWycpCiAgICAgIHsK
ICAgICAgICAgd2hpbGUgKChzIDwgZW9mKSAmJiAoKnMgIT0gJ1xuJykpIHMrKzsKICAgICAgICAg
Y29uc3QgY2hhciAqZSA9IHMgLSAxOwogICAgICAgICB3aGlsZSAoKGUgPiBzdGFydExpbmUpICYm
IChfX2N0eXBlX2JbKGludCkgKCgqZSkpXSAmICh1bnNpZ25lZCBzaG9ydCBpbnQpIF9JU3NwYWNl
KSkgZS0tOwogICAgICAgICBpZiAoKmUgIT0gJ10nKQogICAgICAgICB7CiAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiSW52YWxpZCBncm91cCBoZWFkZXIgYXQgJXM6JWRcbiIsIHJGaWxlLm5h
bWUoKS5sYXRpbjEoKSwgbGluZSk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CgoK
ICAgICAgICAgYUN1cnJlbnRHcm91cCA9IFFDU3RyaW5nKHN0YXJ0TGluZSArIDEsIGUgLSBzdGFy
dExpbmUpOwoKCgogICAgICAgICBpZiAoYUN1cnJlbnRHcm91cCA9PSAiS0RFIERlc2t0b3AgRW50
cnkiKQogICAgICAgICAgICBhQ3VycmVudEdyb3VwID0gIkRlc2t0b3AgRW50cnkiOwoKICAgICAg
ICAgaWYgKHBXcml0ZUJhY2tNYXApCiAgICAgICAgIHsKCiAgICAgICAgICAgIEtFbnRyeUtleSBn
cm91cEtleShhQ3VycmVudEdyb3VwLCAwKTsKICAgICAgICAgICAgcFdyaXRlQmFja01hcC0+aW5z
ZXJ0KGdyb3VwS2V5LCBLRW50cnkoKSk7CiAgICAgICAgIH0KCiAgICAgICAgIGNvbnRpbnVlOwog
ICAgICB9CgogICAgICBjb25zdCBjaGFyICplbmRPZktleSA9IDAsICpsb2NhbGUgPSAwLCAqZWxv
Y2FsZSA9IDA7CiAgICAgIGZvciAoOyAocyA8IGVvZikgJiYgKCpzICE9ICdcbicpOyBzKyspCiAg
ICAgIHsKICAgICAgICAgaWYgKCpzID09ICc9JykKICAgICAgICAgewogICAgICAgICAgICBpZiAo
IWVuZE9mS2V5KQogICAgICAgICAgICAgICAgZW5kT2ZLZXkgPSBzOwogICAgICAgICAgICBnb3Rv
IGhhdmVlcTsKICAgICAgICAgfQogICAgICAgICBpZiAoKnMgPT0gJ1snKQogICAgICAgICB7CiAg
ICAgICAgICAgIGlmIChsb2NhbGUpIHsKICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
SW52YWxpZCBlbnRyeSAoc2Vjb25kIGxvY2FsZSE/KSBhdCAlczolZFxuIiwgckZpbGUubmFtZSgp
LmxhdGluMSgpLCBsaW5lKTsKICAgICAgICAgICAgICAgIGdvdG8gc2t0b2VvbDsKICAgICAgICAg
ICAgfQogICAgICAgICAgICBlbmRPZktleSA9IHM7CiAgICAgICAgICAgIGxvY2FsZSA9ICsrczsK
ICAgICAgICAgICAgZm9yICg7OyBzKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlm
ICgocyA+PSBlb2YpIHx8ICgqcyA9PSAnXG4nKSB8fCAoKnMgPT0gJz0nKSkgewogICAgICAgICAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBlbnRyeSAobWlzc2luZyAnXScpIGF0
ICVzOiVkXG4iLCByRmlsZS5uYW1lKCkubGF0aW4xKCksIGxpbmUpOwogICAgICAgICAgICAgICAg
ICAgIGdvdG8gc2t0b2VvbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgq
cyA9PSAnXScpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgZWxvY2FsZSA9IHM7CiAgICAgICAgIH0KICAgICAgfQogICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkludmFsaWQgZW50cnkgKG1pc3NpbmcgJz0nKSBhdCAlczolZFxuIiwgckZpbGUubmFtZSgp
LmxhdGluMSgpLCBsaW5lKTsKICAgICAgY29udGludWU7CgogICBoYXZlZXE6CiAgICAgIGZvciAo
ZW5kT2ZLZXktLTsgOyBlbmRPZktleS0tKQogICAgICB7CiAgICAgICAgIGlmIChlbmRPZktleSA8
IHN0YXJ0TGluZSkKICAgICAgICAgewogICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxp
ZCBlbnRyeSAoZW1wdHkga2V5KSBhdCAlczolZFxuIiwgckZpbGUubmFtZSgpLmxhdGluMSgpLCBs
aW5lKTsKICAgICAgICAgICBnb3RvIHNrdG9lb2w7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCEo
X19jdHlwZV9iWyhpbnQpICgoKmVuZE9mS2V5KSldICYgKHVuc2lnbmVkIHNob3J0IGludCkgX0lT
c3BhY2UpKQogICAgICAgICAgICBicmVhazsKICAgICAgfQoKICAgICAgY29uc3QgY2hhciAqc3Qg
PSArK3M7CiAgICAgIHdoaWxlICgocyA8IGVvZikgJiYgKCpzICE9ICdcbicpKSBzKys7CgogICAg
ICBpZiAobG9jYWxlKSB7CiAgICAgICAgICB1bnNpZ25lZCBpbnQgbGwgPSBsb2NhbGVTdHJpbmcu
bGVuZ3RoKCk7CiAgICAgICAgICBpZiAoKGxsICE9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4o
ZWxvY2FsZSAtIGxvY2FsZSkpIHx8CiAgICAgICAgICAgICAgbWVtY21wKGxvY2FsZSwgbG9jYWxl
U3RyaW5nLmRhdGEoKSwgbGwpKQogICAgICAgICAgewoKCiAgICAgICAgICAgIGlmICghcFdyaXRl
QmFja01hcCkKICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICBlbmRPZktleSA9
IGVsb2NhbGU7CiAgICAgICAgICAgIGxvY2FsZSA9IDA7CiAgICAgICAgICB9CiAgICAgIH0KCgog
ICAgICBRQ1N0cmluZyBrZXkoc3RhcnRMaW5lLCBlbmRPZktleSAtIHN0YXJ0TGluZSArIDIpOwog
ICAgICBRQ1N0cmluZyB2YWwgPSBwcmludGFibGVUb1N0cmluZyhzdCwgcyAtIHN0KTsKCgogICAg
ICBLRW50cnlLZXkgYUVudHJ5S2V5KGFDdXJyZW50R3JvdXAsIGtleSk7CiAgICAgIGFFbnRyeUtl
eS5iTG9jYWwgPSAobG9jYWxlICE9IDApOwoKICAgICAgS0VudHJ5IGFFbnRyeTsKICAgICAgYUVu
dHJ5Lm1WYWx1ZSA9IHZhbDsKICAgICAgYUVudHJ5LmJHbG9iYWwgPSBiR2xvYmFsOwogICAgICBh
RW50cnkuYk5MUyA9IChsb2NhbGUgIT0gMCk7CgogICAgICBpZiAoIXBXcml0ZUJhY2tNYXApIHsK
CgoKICAgICAgICBwQ29uZmlnLT5wdXREYXRhKGFFbnRyeUtleSwgYUVudHJ5KTsKICAgICAgfSBl
bHNlIGlmIChwV3JpdGVCYWNrTWFwKSB7CgoKICAgICAgICAgcFdyaXRlQmFja01hcC0+aW5zZXJ0
KGFFbnRyeUtleSwgYUVudHJ5KTsKICAgICAgfQogICB9CgogICBpZiAobWFwKQogICAgICBtdW5t
YXAoKCBjaGFyKiApbWFwLCByRmlsZS5zaXplKCkpOwoKfQoKCnZvaWQgS0NvbmZpZ0lOSUJhY2tF
bmQ6OnN5bmMoYm9vbCBiTWVyZ2UpCnsKCiAgaWYgKCFwQ29uZmlnLT5pc0RpcnR5KCkpCiAgICBy
ZXR1cm47CgogIGJvb2wgYkVudHJpZXNMZWZ0ID0gdHJ1ZTsKCgoKCiAgaWYgKCFmaWxlTmFtZS5p
c0VtcHR5KCkpIHsKICAgIFFTdHJpbmcgYUxvY2FsRmlsZU5hbWU7CiAgICBpZiAoZmlsZU5hbWVb
MF0gPT0gJy8nKSB7CiAgICAgICBhTG9jYWxGaWxlTmFtZSA9IGZpbGVOYW1lOwogICAgfSBlbHNl
IHsKICAgICAgIGFMb2NhbEZpbGVOYW1lID0gS0dsb2JhbDo6ZGlycygpLT5zYXZlTG9jYXRpb24o
cmVzVHlwZSkgKyBmaWxlTmFtZTsKICAgIH0KCgogICAgaWYgKChyZXNUeXBlIT0iY29uZmlnIikg
JiYgYUxvY2FsRmlsZU5hbWVbMF09PScvJykKICAgIHsKICAgICAgIEtVUkwgcGF0aDsKICAgICAg
IHBhdGguc2V0UGF0aChhTG9jYWxGaWxlTmFtZSk7CiAgICAgICBRU3RyaW5nIGRpcj1wYXRoLmRp
cmVjdG9yeSgpOwogICAgICAgS1N0YW5kYXJkRGlyczo6bWFrZURpcihkaXIpOwogICAgfQoKCgoK
CiAgICBpZiAoY2hlY2tBY2Nlc3MoYUxvY2FsRmlsZU5hbWUsIDIpKSB7CgogICAgICBiRW50cmll
c0xlZnQgPSB3cml0ZUNvbmZpZ0ZpbGUoIGFMb2NhbEZpbGVOYW1lLCBmYWxzZSwgYk1lcmdlICk7
CiAgICB9CiAgfQoKCgoKICBpZiAoYkVudHJpZXNMZWZ0ICYmIHVzZUtERUdsb2JhbHMpIHsKCiAg
ICBRU3RyaW5nIGFGaWxlTmFtZSA9IEtHbG9iYWw6OmRpcnMoKS0+c2F2ZUxvY2F0aW9uKCJjb25m
aWciKSArCiAgICAgIFFTdHJpbmc6OmZyb21MYXRpbjEoImtkZWdsb2JhbHMiKTsKCgogICAgaWYg
KGNoZWNrQWNjZXNzICggYUZpbGVOYW1lLCAyICkpIHsKICAgICAgd3JpdGVDb25maWdGaWxlKCBh
RmlsZU5hbWUsIHRydWUsIGJNZXJnZSApOwogICAgfQogIH0KCn0KCgpib29sIEtDb25maWdJTklC
YWNrRW5kOjp3cml0ZUNvbmZpZ0ZpbGUoUVN0cmluZyBmaWxlbmFtZSwgYm9vbCBiR2xvYmFsLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBiTWVyZ2UpCnsKICBL
RW50cnlNYXAgYVRlbXBNYXA7CiAgYm9vbCBiRW50cmllc0xlZnQgPSBmYWxzZTsKCgogIGlmIChw
Q29uZmlnLT5pc1JlYWRPbmx5KCkpCiAgICByZXR1cm4gdHJ1ZTsKCiAgaWYgKGJNZXJnZSkKICB7
CgogICAgUUZpbGUgckNvbmZpZ0ZpbGUoIGZpbGVuYW1lICk7CiAgICBpZiAockNvbmZpZ0ZpbGUu
b3BlbigweDAwMDEpKQogICAgewoKICAgICAgIHBhcnNlU2luZ2xlQ29uZmlnRmlsZSggckNvbmZp
Z0ZpbGUsICZhVGVtcE1hcCwgYkdsb2JhbCApOwogICAgICAgckNvbmZpZ0ZpbGUuY2xvc2UoKTsK
ICAgIH0KCiAgICBLRW50cnlNYXAgYU1hcCA9IHBDb25maWctPmludGVybmFsRW50cnlNYXAoKTsK
CgogICAgZm9yIChLRW50cnlNYXBJdGVyYXRvciBhSW5uZXJJdCA9IGFNYXAuYmVnaW4oKTsKICAg
ICAgICAgIGFJbm5lckl0ICE9IGFNYXAuZW5kKCk7ICsrYUlubmVySXQpCiAgICB7CiAgICAgIEtF
bnRyeSBjdXJyZW50RW50cnkgPSAqYUlubmVySXQ7CgogICAgICBpZiAoIWN1cnJlbnRFbnRyeS5i
RGlydHkpCiAgICAgICAgIGNvbnRpbnVlOwoKCgogICAgICBpZiAoY3VycmVudEVudHJ5LmJHbG9i
YWwgPT0gYkdsb2JhbCkKICAgICAgewogICAgICAgIEtFbnRyeUtleSBlbnRyeUtleSA9IGFJbm5l
ckl0LmtleSgpOwoKCgogICAgICAgIGlmIChhVGVtcE1hcC5jb250YWlucyhlbnRyeUtleSkpCiAg
ICAgICAgewogICAgICAgICAgYVRlbXBNYXAucmVwbGFjZShlbnRyeUtleSwgY3VycmVudEVudHJ5
KTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBLRW50cnlLZXkg
Z3JvdXBLZXkoZW50cnlLZXkubUdyb3VwLCAwKTsKICAgICAgICAgIGlmICghYVRlbXBNYXAuY29u
dGFpbnMoZ3JvdXBLZXkpKQogICAgICAgICAgICBhVGVtcE1hcC5pbnNlcnQoZ3JvdXBLZXksIEtF
bnRyeSgpKTsKCiAgICAgICAgICBhVGVtcE1hcC5pbnNlcnQoZW50cnlLZXksIGN1cnJlbnRFbnRy
eSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UKICAgICAgewoKICAgICAgICBiRW50cmll
c0xlZnQgPSB0cnVlOwogICAgICB9CiAgICB9CiAgfQogIGVsc2UKICB7CgogICAgYVRlbXBNYXAg
PSBwQ29uZmlnLT5pbnRlcm5hbEVudHJ5TWFwKCk7CiAgICBiRW50cmllc0xlZnQgPSB0cnVlOwog
IH0KCgoKCiAgS1NhdmVGaWxlIHJDb25maWdGaWxlKCBmaWxlbmFtZSwgMDYwMCApOwoKICBpZiAo
ckNvbmZpZ0ZpbGUuc3RhdHVzKCkgIT0gMCkKICAgICByZXR1cm4gYkVudHJpZXNMZWZ0OwoKICBG
SUxFICpwU3RyZWFtID0gckNvbmZpZ0ZpbGUuZnN0cmVhbSgpOwoKCiAgS0VudHJ5TWFwQ29uc3RJ
dGVyYXRvciBhV3JpdGVJdDsKICBmb3IgKGFXcml0ZUl0ID0gYVRlbXBNYXAuYmVnaW4oKTsgYVdy
aXRlSXQgIT0gYVRlbXBNYXAuZW5kKCk7ICsrYVdyaXRlSXQpIHsKCiAgICAgIGlmICggYVdyaXRl
SXQua2V5KCkubUdyb3VwID09ICI8ZGVmYXVsdD4iICYmICFhV3JpdGVJdC5rZXkoKS5tS2V5Lmlz
RW1wdHkoKSApIHsKICAgICAgICAgIGlmICggKCphV3JpdGVJdCkuYk5MUyApCiAgICAgICAgICB7
CiAgICAgICAgICAgICAgZnByaW50ZihwU3RyZWFtLCAiJXNbJXNdPSVzXG4iLAogICAgICAgICAg
ICAgICAgICAgIGFXcml0ZUl0LmtleSgpLm1LZXkuZGF0YSgpLCBsb2NhbGVTdHJpbmcuZGF0YSgp
LAogICAgICAgICAgICAgICAgICAgIHN0cmluZ1RvUHJpbnRhYmxlKCgqYVdyaXRlSXQpLm1WYWx1
ZSkuZGF0YSgpKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgIHsKCiAgICAg
ICAgICAgICAgZnByaW50ZihwU3RyZWFtLCAiJXM9JXNcbiIsCiAgICAgICAgICAgICAgICAgICAg
YVdyaXRlSXQua2V5KCkubUtleS5kYXRhKCksCiAgICAgICAgICAgICAgICAgICAgc3RyaW5nVG9Q
cmludGFibGUoKCphV3JpdGVJdCkubVZhbHVlKS5kYXRhKCkpOwogICAgICAgICAgfQogICAgICB9
CiAgfQoKCiAgUUNTdHJpbmcgY3VycmVudEdyb3VwOwogIGZvciAoYVdyaXRlSXQgPSBhVGVtcE1h
cC5iZWdpbigpOyBhV3JpdGVJdCAhPSBhVGVtcE1hcC5lbmQoKTsgKythV3JpdGVJdCkgewoKICAg
IGlmIChhV3JpdGVJdC5rZXkoKS5tR3JvdXAgPT0gIjxkZWZhdWx0PiIpCiAgICAgIGNvbnRpbnVl
OwoKICAgIGlmICggY3VycmVudEdyb3VwICE9IGFXcml0ZUl0LmtleSgpLm1Hcm91cCApIHsKICAg
ICAgICBpZiAoIWN1cnJlbnRHcm91cC5pc0VtcHR5KCkpCiAgICAgICAgICAgIGZwcmludGYocFN0
cmVhbSwgIlxuIik7CiAgICAgICAgY3VycmVudEdyb3VwID0gYVdyaXRlSXQua2V5KCkubUdyb3Vw
OwogICAgICAgIGZwcmludGYocFN0cmVhbSwgIlslc11cbiIsIGFXcml0ZUl0LmtleSgpLm1Hcm91
cC5kYXRhKCkpOwogICAgfQoKICAgIGlmIChhV3JpdGVJdC5rZXkoKS5tS2V5LmlzRW1wdHkoKSkg
ewoKICAgIH0gZWxzZSB7CgogICAgICBpZiAoICgqYVdyaXRlSXQpLmJOTFMgKQogICAgICB7CiAg
ICAgICAgICBmcHJpbnRmKHBTdHJlYW0sICIlc1slc109JXNcbiIsCiAgICAgICAgICAgICAgICAg
ICBhV3JpdGVJdC5rZXkoKS5tS2V5LmRhdGEoKSwgbG9jYWxlU3RyaW5nLmRhdGEoKSwKICAgICAg
ICAgICAgICAgICAgIHN0cmluZ1RvUHJpbnRhYmxlKCgqYVdyaXRlSXQpLm1WYWx1ZSkuZGF0YSgp
KTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKCiAgICAgICAgICBmcHJpbnRmKHBTdHJlYW0s
ICIlcz0lc1xuIiwKICAgICAgICAgICAgICAgICAgICBhV3JpdGVJdC5rZXkoKS5tS2V5LmRhdGEo
KSwKICAgICAgICAgICAgICAgICAgICBzdHJpbmdUb1ByaW50YWJsZSgoKmFXcml0ZUl0KS5tVmFs
dWUpLmRhdGEoKSk7CiAgICAgIH0KICAgIH0KICB9CgogIHJDb25maWdGaWxlLmNsb3NlKCk7Cgog
IHJldHVybiBiRW50cmllc0xlZnQ7Cn0K



More information about the Gcc-prs mailing list