c++/9574: parser crash

fche@redhat.com fche@redhat.com
Tue Feb 4 21:16:00 GMT 2003


>Number:         9574
>Category:       c++
>Synopsis:       parser crash
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Feb 04 21:16:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     fche@redhat.com
>Release:        3.5-tree-ssa
>Organization:
>Environment:

>Description:
Plain "g++ -c foo2.i" crashes.
I believe tree-ssa is irrelevant - the mainline should also show this problem.  gdb backtrace shows:

Program received signal SIGSEGV, Segmentation fault.
0x08109707 in finish_non_static_data_member (decl=0x404b2e70, 
    qualifying_scope=0x0)
    at /home/fche/DEVEL-gcc-mudflap/gcc/gcc/cp/semantics.c:1222
1222		    access_type = DECL_CONTEXT (access_type);
(gdb) frame 1
#1  0x080fd349 in hack_identifier (value=0x404b2e70, name=0x405feb00)
    at /home/fche/DEVEL-gcc-mudflap/gcc/gcc/cp/method.c:117
117	    value = finish_non_static_data_member (value, 
(gdb) bt
#0  0x08109707 in finish_non_static_data_member (decl=0x404b2e70, 
    qualifying_scope=0x0)
    at /home/fche/DEVEL-gcc-mudflap/gcc/gcc/cp/semantics.c:1222
#1  0x080fd349 in hack_identifier (value=0x404b2e70, name=0x405feb00)
    at /home/fche/DEVEL-gcc-mudflap/gcc/gcc/cp/method.c:117
#2  0x080d2f7e in cp_parser_primary_expression (parser=0x401d1c40, 
    idk=0xbfffed48, qualifying_class=0xbfffed4c)
    at /home/fche/DEVEL-gcc-mudflap/gcc/gcc/cp/parser.c:2812
#3  0x080d3cf9 in cp_parser_postfix_expression (parser=0x401d1c40, 
    address_p=false) at /home/fche/DEVEL-gcc-mudflap/gcc/gcc/cp/parser.c:3787
#4  0x080d4924 in cp_parser_unary_expression (parser=0x401d1c40, 
    address_p=false) at /home/fche/DEVEL-gcc-mudflap/gcc/gcc/cp/parser.c:4487

>How-To-Repeat:

>Fix:

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

IyAxICIvaG9tZS9mY2hlL3RtcC9mb28yLmNjIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1h
bmQgbGluZT4iCiMgMSAiL2hvbWUvZmNoZS90bXAvZm9vMi5jYyIKIyAxICIvbm90bmZzL2ZjaGUv
QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvbWFwIiAxIDMK
IyA2NSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41
LXRyZWUtc3NhL21hcCIgMwoKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T
VC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfdHJlZS5oIiAxIDMKIyA4NiAiL25v
dG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3Nh
L2JpdHMvc3RsX3RyZWUuaCIgMwojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9J
TlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyA2
NCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRy
ZWUtc3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2Nj
LW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvaTY4Ni1wYy1saW51eC1nbnUv
Yml0cy9jKytjb25maWcuaCIgMSAzCiMgMzQgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh
cC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2Mr
K2NvbmZpZy5oIiAzCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5j
bHVkZS9jKysvMy41LXRyZWUtc3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5o
IiAxIDMKIyAzOSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9j
KysvMy41LXRyZWUtc3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMyA0CiMgMjgzICIvdXNyL2luY2x1ZGUvZmVh
dHVyZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMgNAojIDI4NCAi
L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMyA0CiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVy
ZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMgNAojIDMxMyAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMyA0CiMgNDAgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2Mt
bXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9pNjg2LXBjLWxpbnV4LWdudS9i
aXRzL29zX2RlZmluZXMuaCIgMiAzCiMgMzUgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh
cC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2Mr
K2NvbmZpZy5oIiAyIDMKIyA2NSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv
aW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9u
b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz
YS9jc3RyaW5nIiAxIDMKIyA0OCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv
aW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2NzdHJpbmciIDMKCiMgMSAiL25vdG5mcy9mY2hlL0JV
SUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2NzdGRkZWYiIDEg
MwojIDQ3ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8z
LjUtdHJlZS1zc2EvY3N0ZGRlZiIgMwoKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZs
YXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzIDQKIyAxNTEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9J
TlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3N0
ZGRlZi5oIiAzIDQKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDIxMyAiL25vdG5mcy9mY2hlL0JV
SUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRy
ZWUtc3NhL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7
CiMgNDkgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMu
NS10cmVlLXNzYS9jc3RkZGVmIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6cHRyZGlm
Zl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgNTAgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVk
ZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9jc3RyaW5nIiAyIDMKCiMgMSAiL3Vz
ci9pbmNsdWRlL3N0cmluZy5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMg
NApleHRlcm4gIkMiIHsKCgoKCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO
U1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3Rk
ZGVmLmgiIDEgMyA0CiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzIDQKCgoKZXh0ZXJu
IHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Ny
Yywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAo
dm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywK
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7
CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24p
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29u
c3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50
IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9f
YykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1l
bXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkg
KGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMp
CiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBf
X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
cmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9f
cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhy
b3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEs
IF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo
YXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3Qg
Y2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4
dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMyA0CiMgMjggIi91
c3IvaW5jbHVkZS94bG9jYWxlLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QK
ewoKICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBj
b25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAxMDkgIi91c3IvaW5j
bHVkZS9zdHJpbmcuaCIgMiAzIDQKCgpleHRlcm4gaW50IF9fc3RyY29sbF9sIChfX2NvbnN0IGNo
YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9s
IChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBj
aGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpf
X3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxs
b2NfXykpOwojIDE1NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzIDQKZXh0ZXJuIGNoYXIgKnN0
cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBp
bnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBj
aGFyICpzdHJjaHJudWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25z
dCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hh
ciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19z
LCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNr
LCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hh
eXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0
IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoK
CmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7
CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAo
X19jb25zdCB2b2lkICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAq
X19tZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
ZXh0ZXJuIHZvaWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5s
ZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAo
aW50IF9fZXJybnVtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBf
X2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRl
cm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRl
cm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25z
dCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBf
X2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpy
aW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19s
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4
dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3Qg
Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAq
X19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKF9f
Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f
Y29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24s
IF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdw
LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwg
X19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0
ZXJuIGNoYXIgKl9fc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwY3B5IChj
aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQog
ICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0
IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIg
Kl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3Ry
ZnJ5IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZv
aWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFt
ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKIyAzNjQgIi91c3IvaW5jbHVk
ZS9zdHJpbmcuaCIgMyA0Cn0KIyA1MiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO
U1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2NzdHJpbmciIDIgMwojIDc3ICIvbm90bmZzL2Zj
aGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvY3N0cmlu
ZyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1lbW1vdmU7
CiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0Owog
IHVzaW5nIDo6c3RybmNhdDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNtcDsKICB1
c2luZyA6OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZybTsKICB1
c2luZyA6OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7CiAgdXNp
bmcgOjptZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsKCiAgdXNp
bmcgOjptZW1jaHI7CgogIGlubGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGludCBfX2Ms
IHNpemVfdCBfX24pCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9f
cCksIF9fYywgX19uKTsgfQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3Ry
Y2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25z
dF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBicms7Cgog
IGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7
IHJldHVybiBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwg
X19zMik7IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJyY2hyKGNo
YXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3RfY2Fz
dDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7CgogIGlubGlu
ZSBjaGFyKgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJu
IF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9
Cn0KIyA2NiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysv
My41LXRyZWUtc3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ub3RuZnMvZmNoZS9C
VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9jbGltaXRzIiAx
IDMKIyA0OCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysv
My41LXRyZWUtc3NhL2NsaW1pdHMiIDMKCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRm
bGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1
ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9J
TlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL2xp
bWl0cy5oIiAzIDQKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9zeXNsaW1pdHMu
aCIgMSAzIDQKCgoKCgoKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9saW1pdHMu
aCIgMSAzIDQKIyAxMjIgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL2xpbWl0cy5oIiAz
IDQKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTQ0ICIvdXNyL2luY2x1ZGUv
bGltaXRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzIDQK
IyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMyA0CiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvbG9jYWxfbGltLmgiIDEgMyA0CiMgMzYgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2Fs
X2xpbS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMyA0CiMgMzcg
Ii91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMgNAojIDEyNyAiL3Vzci9pbmNsdWRl
L2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMgNAojIDE0NSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAy
IDMgNAoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzIDQKIyAxNDkg
Ii91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy94
b3Blbl9saW0uaCIgMSAzIDQKIyAzNCAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMg
NAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMgNAojIDM1ICIvdXNyL2lu
Y2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzIDQKIyAxNTMgIi91c3IvaW5jbHVkZS9saW1pdHMu
aCIgMiAzIDQKIyAxMjMgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL2xpbWl0cy5oIiAy
IDMgNAojIDggIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMg
NAojIDEyICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKIyA1
MCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRy
ZWUtc3NhL2NsaW1pdHMiIDIgMwojIDY3ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAv
SU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMg
MSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRy
ZWUtc3NhL2NzdGRsaWIiIDEgMwojIDQ4ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAv
SU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvY3N0ZGxpYiIgMwoKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDEgMyA0CiMgMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CiMg
MSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCmV4dGVybiAiQyIgewoKCgoKCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3dhaXRmbGFncy5oIiAxIDMgNAojIDQzICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAxIDMgNAojIDYz
ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9l
bmRpYW4uaCIgMSAzIDQKIyAzNyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzIDQKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzIDQKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5o
IiAyIDMgNAojIDY0ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDIgMyA0Cgp1bmlv
biB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAg
dW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19jb3Jl
ZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0Y29kZTo4OwogICAgICAgIHVuc2ln
bmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rlcm1pbmF0ZWQ7CiAgICBzdHJ1Y3QK
ICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3B2YWw6ODsKICAgICAgICB1bnNp
Z25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCiAg
ICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKIyA0NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAy
IDMgNAojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAp0eXBlZGVmIHN0cnVjdAogIHsK
ICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAog
IHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CgoKCgoK
X19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsK
ICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMyA0CmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2Nv
bnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl
eHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcg
aW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQg
c3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7
CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lv
bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNp
Z25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKCgpfX2V4dGVuc2lv
bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKIyAyMTUgIi91c3Iv
aW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9sIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25n
IGludCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xv
Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp
bnQgX19zdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19s
b2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu
dCBfX3N0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
YmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgX19z
dHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykK
ICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91
YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9h
dCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRf
aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7
CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBp
bnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpl
eHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVu
c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwg
KF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg
aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CiMgMzg0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDMgNApleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4g
bG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMgNAojIDI4
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNApleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu
aCIgMyA0CiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0
CiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMyA0CgoKdHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoK
X19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsK
X19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3Iv
aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0
eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQg
X19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVm
IHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoK
X19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19l
eHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5
cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0
eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYg
X191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9p
bnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3Qg
X19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlw
ZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5
cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsy
XTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpf
X2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50
IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxv
bmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYg
aW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBp
bnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoK
dHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtj
bnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBf
X2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVm
IF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90
OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29m
ZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQg
bG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVk
ZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9w
dGhyZWFkdHlwZXMuaCIgMSAzIDQKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz
LmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMyA0CiMgNjggIi91c3Iv
aW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMgNApzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGlu
dCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0
eXBlcy5oIiAyIDMgNAoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19z
dGF0dXM7CiAgaW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9k
ZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVh
ZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0
cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAg
aW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7
CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0
cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19s
b2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0
eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5
cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewog
IGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21f
b3duZXI7CiAgaW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9j
azsKfSBwdGhyZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtp
bmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7
CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFk
X2Zhc3Rsb2NrIF9fcndfbG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2Ny
IF9fcndfd3JpdGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhy
ZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3
X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBf
X2xvY2traW5kOwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0
eXBlZGVmIHZvbGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3Qg
ewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWly
ZWQ7CiAgaW50IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0g
cHRocmVhZF9iYXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0g
cHRocmVhZF9iYXJyaWVyYXR0cl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRo
cmVhZF90OwojIDE0NCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzIDQKIyAzMSAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsK
dHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVm
IF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1
YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBlZGVmIF9fbG9m
Zl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0eXBlZGVmIF9faW5v
NjRfdCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dp
ZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxp
bmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19v
ZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKCgoKCnR5cGVkZWYg
X19waWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3Np
emVfdCBzc2l6ZV90OwoKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19j
YWRkcl90IGNhZGRyX3Q7CgoKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEzMiAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAoj
IDU5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsK
IyA3MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CnR5cGVkZWYgX190aW1lX3QgdGltZV90Owoj
IDgyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lk
X3Q7CiMgOTQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAp0eXBlZGVmIF9fdGltZXJfdCB0aW1l
cl90OwojIDEzMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgp0eXBlZGVmIF9f
dXNlY29uZHNfdCB1c2Vjb25kc190OwoKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRz
X3Q7CgoKCgoKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
IDQKIyAxNDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgoKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Owp0
eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE5MCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o
IiAzIDQKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9f
KSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9f
KSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9f
KSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9f
KSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1
dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJf
dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRl
ZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwoj
IDIxNSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAxIDMgNAojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzIDQKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzIDQKIyAzMiAiL3Vzci9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMg
NAojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMyA0CnR5cGVkZWYgaW50IF9fc2ln
X2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBf
X3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAgfSBfX3Np
Z3NldF90OwojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMgNAoKCgp0eXBlZGVm
IF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMg
NAojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CnN0cnVjdCB0aW1lc3BlYwogIHsKICAg
IF9fdGltZV90IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKIyA0NSAiL3Vzci9p
bmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5o
IiAxIDMgNAojIDY3ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMgNApzdHJ1Y3QgdGltZXZh
bAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsKICB9
OwojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMgNAojIDU1ICIvdXNyL2luY2x1
ZGUvc3lzL3NlbGVjdC5oIiAzIDQKdHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7CgoKCgoKCgp0
eXBlZGVmIHN0cnVjdAogIHsKCgoKICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDggKiBz
aXplb2YgKF9fZmRfbWFzaykpXTsKCgoKCgogIH0gZmRfc2V0OwoKCgoKCgp0eXBlZGVmIF9fZmRf
bWFzayBmZF9tYXNrOwojIDk1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzIDQKZXh0ZXJu
ICJDIiB7CgoKCgoKCmV4dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVz
dHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9f
d3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRm
ZHMsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVv
dXQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0
ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVz
dHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3Qg
X19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf
X3Jlc3RyaWN0IF9fdGltZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3NpZ3NldF90
ICpfX3Jlc3RyaWN0IF9fc2lnbWFzaykgdGhyb3cgKCk7CgoKfQojIDIxNiAiL3Vzci9pbmNsdWRl
L3N5cy90eXBlcy5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIg
MSAzIDQKIyAyMTkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgoKCnR5cGVkZWYg
X19ibGtzaXplX3QgYmxrc2l6ZV90OwoKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7
CgoKCnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNu
dF90IGZzZmlsY250X3Q7CiMgMjU3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBl
ZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxr
Y250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDM5MSAi
L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9t
ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19z
ZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQg
X19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19z
dGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQz
Ml90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50
IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGludDMy
X3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0
YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqX19yZXN0
cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQg
aW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4g
aW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9f
c3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYp
IHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3Rh
dGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3Ry
aWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIHRocm93ICgp
OwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIHRocm93ICgpOwoKCgoKCgoK
ZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmFu
ZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv
bmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAo
dW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGlu
dCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2ln
bmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4
IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50
ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIHRocm93ICgpOwpleHRl
cm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgdGhyb3cgKCk7
CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3hb
M107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsKICAgIHVuc2lnbmVkIHNob3J0
IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19pbml0OwogICAgdW5zaWduZWQgbG9u
ZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5k
NDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1
bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbHJh
bmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAg
ICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpl
eHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVy
LAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jl
c3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJp
Y3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hv
cnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQg
Kl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChs
b25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAgIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2
dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIp
IHRocm93ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3Bh
cmFtWzddLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZm
ZXIpIHRocm93ICgpOwojIDUyNyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIHZv
aWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs
bG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19z
aXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0
ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19w
dHIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgp
OwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzIDQKIyAyNSAiL3Vzci9pbmNsdWRl
L2FsbG9jYS5oIiAzIDQKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzIDQKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMgNAoKZXh0ZXJuICJDIiB7
CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoK
fQojIDU0NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgoKZXh0ZXJuIHZvaWQgKnZh
bGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18p
KTsKCgoKCmV4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90
IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgq
X19mdW5jKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgq
X19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRo
cm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBf
X3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0
ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRl
cm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192
YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52
IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJl
bnYgKHZvaWQpIHRocm93ICgpOwojIDYyMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0
ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRl
cm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY0MCAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxh
dGUpIHRocm93ICgpOwojIDY1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGNo
YXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBz
eXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNo
YXIgKmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAo
KTsKIyA2NzIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBjaGFyICpyZWFscGF0
aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0eXBlZGVmIGlu
dCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5
cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKmJz
ZWFyY2ggKF9fY29uc3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2Zu
X3QgX19jb21wYXIpOwoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3Qg
X19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3Qg
X19jb21wYXIpOwoKCgpleHRlcm4gaW50IGFicyAoaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVy
biBsb25nIGxvbmcgaW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGludCBf
X251bWVyLCBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19k
ZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVu
c2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9fbnVtZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBpbnQgX19kZW5vbSkKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNzI4ICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBf
X25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQg
Kl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3Vi
bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAg
ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50
IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBp
bnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25n
IGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpf
X3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRl
cm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAq
X19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBp
bnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAg
aW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3Vi
bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAg
ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19i
dWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAg
ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24s
CiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVu
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQg
X19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGlu
dCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmlj
dCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAo
X19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0
b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCB3Y3RvbWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3Ms
IHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9f
Y29uc3QgY2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CiMgODA4ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMgNApleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRp
b25wLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rv
a2VucywKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRo
cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJv
dyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq
cHRzbmFtZSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAo
aW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgZ2V0cHQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcg
KGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyA1MyAi
L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUt
c3NhL2NzdGRsaWIiIDIgMwojIDg0ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T
VC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvY3N0ZGxpYiIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1
c2luZyA6OmRpdl90OwogIHVzaW5nIDo6bGRpdl90OwoKICB1c2luZyA6OmFib3J0OwogIHVzaW5n
IDo6YWJzOwogIHVzaW5nIDo6YXRleGl0OwogIHVzaW5nIDo6YXRvZjsKICB1c2luZyA6OmF0b2k7
CiAgdXNpbmcgOjphdG9sOwogIHVzaW5nIDo6YnNlYXJjaDsKICB1c2luZyA6OmNhbGxvYzsKICB1
c2luZyA6OmRpdjsKICB1c2luZyA6OmV4aXQ7CiAgdXNpbmcgOjpmcmVlOwogIHVzaW5nIDo6Z2V0
ZW52OwogIHVzaW5nIDo6bGFiczsKICB1c2luZyA6OmxkaXY7CiAgdXNpbmcgOjptYWxsb2M7CiAg
dXNpbmcgOjptYmxlbjsKICB1c2luZyA6Om1ic3Rvd2NzOwogIHVzaW5nIDo6bWJ0b3djOwogIHVz
aW5nIDo6cXNvcnQ7CiAgdXNpbmcgOjpyYW5kOwogIHVzaW5nIDo6cmVhbGxvYzsKICB1c2luZyA6
OnNyYW5kOwogIHVzaW5nIDo6c3RydG9kOwogIHVzaW5nIDo6c3RydG9sOwogIHVzaW5nIDo6c3Ry
dG91bDsKICB1c2luZyA6OnN5c3RlbTsKICB1c2luZyA6Ondjc3RvbWJzOwogIHVzaW5nIDo6d2N0
b21iOwoKICBpbmxpbmUgbG9uZwogIGFicyhsb25nIF9faSkgeyByZXR1cm4gbGFicyhfX2kpOyB9
CgogIGlubGluZSBsZGl2X3QKICBkaXYobG9uZyBfX2ksIGxvbmcgX19qKSB7IHJldHVybiBsZGl2
KF9faSwgX19qKTsgfQp9CiMgMTM2ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T
VC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvY3N0ZGxpYiIgMwpuYW1lc3BhY2UgX19nbnVfY3h4
CnsKICB1c2luZyA6OmxsZGl2X3Q7CiAgdXNpbmcgOjpfRXhpdDsKCiAgaW5saW5lIGxvbmcgbG9u
ZwogIGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0K
CiAgaW5saW5lIGxvbmcgbG9uZwogIGxsYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+
PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGRpdihsb25nIGxvbmcgX19u
LCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBf
X3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CgogIGlubGluZSBsbGRpdl90CiAgbGxk
aXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVv
dCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0dXJuIF9fcTsgfQoKICB1c2lu
ZyA6OmF0b2xsOwogIHVzaW5nIDo6c3RydG9mOwogIHVzaW5nIDo6c3RydG9sbDsKICB1c2luZyA6
OnN0cnRvdWxsOwogIHVzaW5nIDo6c3RydG9sZDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg
X19nbnVfY3h4OjpsbGRpdl90OwogIHVzaW5nIF9fZ251X2N4eDo6X0V4aXQ7CiAgdXNpbmcgX19n
bnVfY3h4OjphYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGFiczsKICB1c2luZyBfX2dudV9jeHg6
OmRpdjsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6YXRvbGw7
CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2Y7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2xsOwog
IHVzaW5nIF9fZ251X2N4eDo6c3RydG91bGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2xkOwp9
CiMgNjggIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMu
NS10cmVlLXNzYS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL25vdG5mcy9mY2hlL0JV
SUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL25ldyIgMSAzCiMg
NDIgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10
cmVlLXNzYS9uZXciIDMKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9p
bmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvZXhjZXB0aW9uIiAxIDMKIyA0MCAiL25vdG5mcy9mY2hl
L0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2V4Y2VwdGlv
biIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CiMgNTIgIi9ub3RuZnMvZmNoZS9C
VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9leGNlcHRpb24i
IDMKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgZXhjZXB0aW9uKCkgdGhyb3co
KSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoKICAgIHZpcnR1YWwgY29u
c3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBjbGFzcyBiYWRfZXhjZXB0
aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkg
dGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7CiAgfTsK
CgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKCiAgdHlwZWRlZiB2b2lk
ICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJt
aW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHRlcm1pbmF0ZSgpIF9f
YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRf
dW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHVuZXhwZWN0
ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMgMTAwICIvbm90bmZzL2ZjaGUv
QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvZXhjZXB0aW9u
IiAzCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9CgpuYW1lc3BhY2UgX19n
bnVfY3h4CnsKIyAxMTUgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1
ZGUvYysrLzMuNS10cmVlLXNzYS9leGNlcHRpb24iIDMKICB2b2lkIF9fdmVyYm9zZV90ZXJtaW5h
dGVfaGFuZGxlciAoKTsKfQoKfQojIDQzICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAv
SU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvbmV3IiAyIDMKCmV4dGVybiAiQysrIiB7Cgpu
YW1lc3BhY2Ugc3RkCnsKCgoKCgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRpb24K
ICB7CiAgcHVibGljOgogICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+
YmFkX2FsbG9jKCkgdGhyb3coKTsKICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHsgfTsKICBleHRl
cm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CgoKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxl
cikoKTsKCiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyKG5ld19oYW5kbGVyKSB0aHJvdygp
Owp9CiMgODIgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysr
LzMuNS10cmVlLXNzYS9uZXciIDMKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJv
dyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhy
b3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCopIHRocm93KCk7
CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCopIHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5l
dyhzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkKiBvcGVy
YXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2
b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygp
Owp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRo
cm93KCk7CgoKaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCogX19w
KSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3W10oc3Rk
OjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KCgppbmxpbmUgdm9p
ZCBvcGVyYXRvciBkZWxldGUgKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH0KaW5saW5lIHZvaWQg
b3BlcmF0b3IgZGVsZXRlW10odm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfQoKfQojIDcwICIvbm90
bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2Ev
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRm
bGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2lvc2Z3ZCIgMSAzCiMgNDQgIi9ub3Ru
ZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9p
b3Nmd2QiIDMKCgojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1
ZGUvYysrLzMuNS10cmVlLXNzYS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAx
IDMKIyA0MCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysv
My41LXRyZWUtc3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDMKCiMgMSAi
L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUt
c3NhL2Nsb2NhbGUiIDEgMwojIDQ4ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T
VC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvY2xvY2FsZSIgMwoKIyAxICIvdXNyL2luY2x1ZGUv
bG9jYWxlLmgiIDEgMyA0CiMgMjkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMyA0CiMgMSAiL25v
dG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzAgIi91c3IvaW5j
bHVkZS9sb2NhbGUuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAz
IDQKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDMgNAplbnVtCnsKICBfX0xDX0NU
WVBFID0gMCwKICBfX0xDX05VTUVSSUMgPSAxLAogIF9fTENfVElNRSA9IDIsCiAgX19MQ19DT0xM
QVRFID0gMywKICBfX0xDX01PTkVUQVJZID0gNCwKICBfX0xDX01FU1NBR0VTID0gNSwKICBfX0xD
X0FMTCA9IDYsCiAgX19MQ19QQVBFUiA9IDcsCiAgX19MQ19OQU1FID0gOCwKICBfX0xDX0FERFJF
U1MgPSA5LAogIF9fTENfVEVMRVBIT05FID0gMTAsCiAgX19MQ19NRUFTVVJFTUVOVCA9IDExLAog
IF9fTENfSURFTlRJRklDQVRJT04gPSAxMgp9OwojIDMxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgi
IDIgMyA0CgpleHRlcm4gIkMiIHsKIyA1MiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKc3Ry
dWN0IGxjb252CnsKCgogIGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgY2hhciAqdGhvdXNhbmRzX3Nl
cDsKCgoKCgogIGNoYXIgKmdyb3VwaW5nOwoKCgoKCiAgY2hhciAqaW50X2N1cnJfc3ltYm9sOwog
IGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsKICBjaGFyICptb25fZGVjaW1hbF9wb2ludDsKICBjaGFy
ICptb25fdGhvdXNhbmRzX3NlcDsKICBjaGFyICptb25fZ3JvdXBpbmc7CiAgY2hhciAqcG9zaXRp
dmVfc2lnbjsKICBjaGFyICpuZWdhdGl2ZV9zaWduOwogIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwog
IGNoYXIgZnJhY19kaWdpdHM7CgogIGNoYXIgcF9jc19wcmVjZWRlczsKCiAgY2hhciBwX3NlcF9i
eV9zcGFjZTsKCiAgY2hhciBuX2NzX3ByZWNlZGVzOwoKICBjaGFyIG5fc2VwX2J5X3NwYWNlOwoK
CgoKCgogIGNoYXIgcF9zaWduX3Bvc247CiAgY2hhciBuX3NpZ25fcG9zbjsKCgogIGNoYXIgaW50
X3BfY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50X3Bfc2VwX2J5X3NwYWNlOwoKICBjaGFyIGludF9u
X2NzX3ByZWNlZGVzOwoKICBjaGFyIGludF9uX3NlcF9ieV9zcGFjZTsKCgoKCgoKICBjaGFyIGlu
dF9wX3NpZ25fcG9zbjsKICBjaGFyIGludF9uX3NpZ25fcG9zbjsKIyAxMTkgIi91c3IvaW5jbHVk
ZS9sb2NhbGUuaCIgMyA0Cn07CgoKCmV4dGVybiBjaGFyICpzZXRsb2NhbGUgKGludCBfX2NhdGVn
b3J5LCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gc3RydWN0IGxj
b252ICpsb2NhbGVjb252ICh2b2lkKSB0aHJvdyAoKTsKIyAxNDkgIi91c3IvaW5jbHVkZS9sb2Nh
bGUuaCIgMyA0CmV4dGVybiBfX2xvY2FsZV90IF9fbmV3bG9jYWxlIChpbnQgX19jYXRlZ29yeV9t
YXNrLCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19sb2NhbGVfdCBfX2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gX19sb2NhbGVfdCBfX2R1
cGxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBf
X2ZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgp9CiMgNTAgIi9u
b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz
YS9jbG9jYWxlIiAyIDMKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Omxjb252OwogIHVz
aW5nIDo6c2V0bG9jYWxlOwogIHVzaW5nIDo6bG9jYWxlY29udjsKfQojIDQyICIvbm90bmZzL2Zj
aGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvaTY4Ni1w
Yy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xhbmdp
bmZvLmgiIDEgMyA0CiMgMjQgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzIDQKIyAxICIvdXNy
L2luY2x1ZGUvbmxfdHlwZXMuaCIgMSAzIDQKIyAzMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgi
IDMgNApleHRlcm4gIkMiIHsKCgp0eXBlZGVmIHZvaWQgKm5sX2NhdGQ7CgoKdHlwZWRlZiBpbnQg
bmxfaXRlbTsKCgpleHRlcm4gbmxfY2F0ZCBjYXRvcGVuIChfX2NvbnN0IGNoYXIgKl9fY2F0X25h
bWUsIGludCBfX2ZsYWcpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqY2F0Z2V0cyAobmxfY2F0
ZCBfX2NhdGFsb2csIGludCBfX3NldCwgaW50IF9fbnVtYmVyLAogICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjYXRjbG9z
ZSAobmxfY2F0ZCBfX2NhdGFsb2cpIHRocm93ICgpOwoKfQojIDI1ICIvdXNyL2luY2x1ZGUvbGFu
Z2luZm8uaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDEgMyA0CiMg
MjcgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDQzICIv
dXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMyA0CmVudW0KewoKCgogIEFCREFZXzEgPSAoKChfX0xD
X1RJTUUpIDw8IDE2KSB8ICgwKSksCgogIEFCREFZXzIsCgogIEFCREFZXzMsCgogIEFCREFZXzQs
CgogIEFCREFZXzUsCgogIEFCREFZXzYsCgogIEFCREFZXzcsCgoKCiAgREFZXzEsCgogIERBWV8y
LAoKICBEQVlfMywKCiAgREFZXzQsCgogIERBWV81LAoKICBEQVlfNiwKCiAgREFZXzcsCgoKCiAg
QUJNT05fMSwKCiAgQUJNT05fMiwKCiAgQUJNT05fMywKCiAgQUJNT05fNCwKCiAgQUJNT05fNSwK
CiAgQUJNT05fNiwKCiAgQUJNT05fNywKCiAgQUJNT05fOCwKCiAgQUJNT05fOSwKCiAgQUJNT05f
MTAsCgogIEFCTU9OXzExLAoKICBBQk1PTl8xMiwKCgoKICBNT05fMSwKCiAgTU9OXzIsCgogIE1P
Tl8zLAoKICBNT05fNCwKCiAgTU9OXzUsCgogIE1PTl82LAoKICBNT05fNywKCiAgTU9OXzgsCgog
IE1PTl85LAoKICBNT05fMTAsCgogIE1PTl8xMSwKCiAgTU9OXzEyLAoKCiAgQU1fU1RSLAoKICBQ
TV9TVFIsCgoKICBEX1RfRk1ULAoKICBEX0ZNVCwKCiAgVF9GTVQsCgogIFRfRk1UX0FNUE0sCgoK
ICBFUkEsCgogIF9fRVJBX1lFQVIsCgoKCiAgRVJBX0RfRk1ULAoKICBBTFRfRElHSVRTLAoKICBF
UkFfRF9UX0ZNVCwKCiAgRVJBX1RfRk1ULAoKCiAgX05MX1RJTUVfRVJBX05VTV9FTlRSSUVTLAog
IF9OTF9USU1FX0VSQV9FTlRSSUVTLAoKICBfTkxfV0FCREFZXzEsCiAgX05MX1dBQkRBWV8yLAog
IF9OTF9XQUJEQVlfMywKICBfTkxfV0FCREFZXzQsCiAgX05MX1dBQkRBWV81LAogIF9OTF9XQUJE
QVlfNiwKICBfTkxfV0FCREFZXzcsCgoKICBfTkxfV0RBWV8xLAogIF9OTF9XREFZXzIsCiAgX05M
X1dEQVlfMywKICBfTkxfV0RBWV80LAogIF9OTF9XREFZXzUsCiAgX05MX1dEQVlfNiwKICBfTkxf
V0RBWV83LAoKCiAgX05MX1dBQk1PTl8xLAogIF9OTF9XQUJNT05fMiwKICBfTkxfV0FCTU9OXzMs
CiAgX05MX1dBQk1PTl80LAogIF9OTF9XQUJNT05fNSwKICBfTkxfV0FCTU9OXzYsCiAgX05MX1dB
Qk1PTl83LAogIF9OTF9XQUJNT05fOCwKICBfTkxfV0FCTU9OXzksCiAgX05MX1dBQk1PTl8xMCwK
ICBfTkxfV0FCTU9OXzExLAogIF9OTF9XQUJNT05fMTIsCgoKICBfTkxfV01PTl8xLAogIF9OTF9X
TU9OXzIsCiAgX05MX1dNT05fMywKICBfTkxfV01PTl80LAogIF9OTF9XTU9OXzUsCiAgX05MX1dN
T05fNiwKICBfTkxfV01PTl83LAogIF9OTF9XTU9OXzgsCiAgX05MX1dNT05fOSwKICBfTkxfV01P
Tl8xMCwKICBfTkxfV01PTl8xMSwKICBfTkxfV01PTl8xMiwKCiAgX05MX1dBTV9TVFIsCiAgX05M
X1dQTV9TVFIsCgogIF9OTF9XRF9UX0ZNVCwKICBfTkxfV0RfRk1ULAogIF9OTF9XVF9GTVQsCiAg
X05MX1dUX0ZNVF9BTVBNLAoKICBfTkxfV0VSQV9ZRUFSLAogIF9OTF9XRVJBX0RfRk1ULAogIF9O
TF9XQUxUX0RJR0lUUywKICBfTkxfV0VSQV9EX1RfRk1ULAogIF9OTF9XRVJBX1RfRk1ULAoKICBf
TkxfVElNRV9XRUVLX05EQVlTLAogIF9OTF9USU1FX1dFRUtfMVNUREFZLAogIF9OTF9USU1FX1dF
RUtfMVNUV0VFSywKICBfTkxfVElNRV9GSVJTVF9XRUVLREFZLAogIF9OTF9USU1FX0ZJUlNUX1dP
UktEQVksCiAgX05MX1RJTUVfQ0FMX0RJUkVDVElPTiwKICBfTkxfVElNRV9USU1FWk9ORSwKCiAg
X0RBVEVfRk1ULAoKICBfTkxfV19EQVRFX0ZNVCwKCiAgX05MX1RJTUVfQ09ERVNFVCwKCiAgX05M
X05VTV9MQ19USU1FLAoKCgoKICBfTkxfQ09MTEFURV9OUlVMRVMgPSAoKChfX0xDX0NPTExBVEUp
IDw8IDE2KSB8ICgwKSksCiAgX05MX0NPTExBVEVfUlVMRVNFVFMsCiAgX05MX0NPTExBVEVfVEFC
TEVNQiwKICBfTkxfQ09MTEFURV9XRUlHSFRNQiwKICBfTkxfQ09MTEFURV9FWFRSQU1CLAogIF9O
TF9DT0xMQVRFX0lORElSRUNUTUIsCiAgX05MX0NPTExBVEVfR0FQMSwKICBfTkxfQ09MTEFURV9H
QVAyLAogIF9OTF9DT0xMQVRFX0dBUDMsCiAgX05MX0NPTExBVEVfVEFCTEVXQywKICBfTkxfQ09M
TEFURV9XRUlHSFRXQywKICBfTkxfQ09MTEFURV9FWFRSQVdDLAogIF9OTF9DT0xMQVRFX0lORElS
RUNUV0MsCiAgX05MX0NPTExBVEVfU1lNQl9IQVNIX1NJWkVNQiwKICBfTkxfQ09MTEFURV9TWU1C
X1RBQkxFTUIsCiAgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CLAogIF9OTF9DT0xMQVRFX0NPTExT
RVFNQiwKICBfTkxfQ09MTEFURV9DT0xMU0VRV0MsCiAgX05MX0NPTExBVEVfQ09ERVNFVCwKICBf
TkxfTlVNX0xDX0NPTExBVEUsCgoKCgogIF9OTF9DVFlQRV9DTEFTUyA9ICgoKF9fTENfQ1RZUEUp
IDw8IDE2KSB8ICgwKSksCiAgX05MX0NUWVBFX1RPVVBQRVIsCiAgX05MX0NUWVBFX0dBUDEsCiAg
X05MX0NUWVBFX1RPTE9XRVIsCiAgX05MX0NUWVBFX0dBUDIsCiAgX05MX0NUWVBFX0NMQVNTMzIs
CiAgX05MX0NUWVBFX0dBUDMsCiAgX05MX0NUWVBFX0dBUDQsCiAgX05MX0NUWVBFX0dBUDUsCiAg
X05MX0NUWVBFX0dBUDYsCiAgX05MX0NUWVBFX0NMQVNTX05BTUVTLAogIF9OTF9DVFlQRV9NQVBf
TkFNRVMsCiAgX05MX0NUWVBFX1dJRFRILAogIF9OTF9DVFlQRV9NQl9DVVJfTUFYLAogIF9OTF9D
VFlQRV9DT0RFU0VUX05BTUUsCiAgQ09ERVNFVCA9IF9OTF9DVFlQRV9DT0RFU0VUX05BTUUsCgog
IF9OTF9DVFlQRV9UT1VQUEVSMzIsCiAgX05MX0NUWVBFX1RPTE9XRVIzMiwKICBfTkxfQ1RZUEVf
Q0xBU1NfT0ZGU0VULAogIF9OTF9DVFlQRV9NQVBfT0ZGU0VULAogIF9OTF9DVFlQRV9JTkRJR0lU
U19NQl9MRU4sCiAgX05MX0NUWVBFX0lORElHSVRTMF9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMx
X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzJfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTM19NQiwK
ICBfTkxfQ1RZUEVfSU5ESUdJVFM0X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfTUIsCiAgX05M
X0NUWVBFX0lORElHSVRTNl9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM3X01CLAogIF9OTF9DVFlQ
RV9JTkRJR0lUUzhfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTOV9NQiwKICBfTkxfQ1RZUEVfSU5E
SUdJVFNfV0NfTEVOLAogIF9OTF9DVFlQRV9JTkRJR0lUUzBfV0MsCiAgX05MX0NUWVBFX0lORElH
SVRTMV9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMyX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzNf
V0MsCiAgX05MX0NUWVBFX0lORElHSVRTNF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM1X1dDLAog
IF9OTF9DVFlQRV9JTkRJR0lUUzZfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTN19XQywKICBfTkxf
Q1RZUEVfSU5ESUdJVFM4X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzlfV0MsCiAgX05MX0NUWVBF
X09VVERJR0lUMF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQxX01CLAogIF9OTF9DVFlQRV9PVVRE
SUdJVDJfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUM19NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ0
X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDVfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNl9NQiwK
ICBfTkxfQ1RZUEVfT1VURElHSVQ3X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDhfTUIsCiAgX05M
X0NUWVBFX09VVERJR0lUOV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQwX1dDLAogIF9OTF9DVFlQ
RV9PVVRESUdJVDFfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMl9XQywKICBfTkxfQ1RZUEVfT1VU
RElHSVQzX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfV0MsCiAgX05MX0NUWVBFX09VVERJR0lU
NV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ2X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDdfV0Ms
CiAgX05MX0NUWVBFX09VVERJR0lUOF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ5X1dDLAogIF9O
TF9DVFlQRV9UUkFOU0xJVF9UQUJfU0laRSwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9JRFgs
CiAgX05MX0NUWVBFX1RSQU5TTElUX0ZST01fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19J
RFgsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX1RCTCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfREVG
QVVMVF9NSVNTSU5HX0xFTiwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNTSU5HLAog
IF9OTF9DVFlQRV9UUkFOU0xJVF9JR05PUkVfTEVOLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9JR05P
UkUsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMiwKICBf
TkxfQ1RZUEVfRVhUUkFfTUFQXzMsCiAgX05MX0NUWVBFX0VYVFJBX01BUF80LAogIF9OTF9DVFlQ
RV9FWFRSQV9NQVBfNSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzYsCiAgX05MX0NUWVBFX0VYVFJB
X01BUF83LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzks
CiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzExLAogIF9O
TF9DVFlQRV9FWFRSQV9NQVBfMTIsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMywKICBfTkxfQ1RZ
UEVfRVhUUkFfTUFQXzE0LAogIF9OTF9OVU1fTENfQ1RZUEUsCgoKCgogIF9fSU5UX0NVUlJfU1lN
Qk9MID0gKCgoX19MQ19NT05FVEFSWSkgPDwgMTYpIHwgKDApKSwKCgoKICBfX0NVUlJFTkNZX1NZ
TUJPTCwKCgoKICBfX01PTl9ERUNJTUFMX1BPSU5ULAoKCgogIF9fTU9OX1RIT1VTQU5EU19TRVAs
CgoKCiAgX19NT05fR1JPVVBJTkcsCgoKCiAgX19QT1NJVElWRV9TSUdOLAoKCgogIF9fTkVHQVRJ
VkVfU0lHTiwKCgoKICBfX0lOVF9GUkFDX0RJR0lUUywKCgoKICBfX0ZSQUNfRElHSVRTLAoKCgog
IF9fUF9DU19QUkVDRURFUywKCgoKICBfX1BfU0VQX0JZX1NQQUNFLAoKCgogIF9fTl9DU19QUkVD
RURFUywKCgoKICBfX05fU0VQX0JZX1NQQUNFLAoKCgogIF9fUF9TSUdOX1BPU04sCgoKCiAgX19O
X1NJR05fUE9TTiwKCgoKICBfTkxfTU9ORVRBUllfQ1JOQ1lTVFIsCgogIF9fSU5UX1BfQ1NfUFJF
Q0VERVMsCgoKCiAgX19JTlRfUF9TRVBfQllfU1BBQ0UsCgoKCiAgX19JTlRfTl9DU19QUkVDRURF
UywKCgoKICBfX0lOVF9OX1NFUF9CWV9TUEFDRSwKCgoKICBfX0lOVF9QX1NJR05fUE9TTiwKCgoK
ICBfX0lOVF9OX1NJR05fUE9TTiwKCgoKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9DVVJSX1NZTUJP
TCwKICBfTkxfTU9ORVRBUllfRFVPX0NVUlJFTkNZX1NZTUJPTCwKICBfTkxfTU9ORVRBUllfRFVP
X0lOVF9GUkFDX0RJR0lUUywKICBfTkxfTU9ORVRBUllfRFVPX0ZSQUNfRElHSVRTLAogIF9OTF9N
T05FVEFSWV9EVU9fUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX1BfU0VQX0JZX1NQ
QUNFLAogIF9OTF9NT05FVEFSWV9EVU9fTl9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVP
X05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfQ1NfUFJFQ0VERVMsCiAg
X05MX01PTkVUQVJZX0RVT19JTlRfUF9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19J
TlRfTl9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NFUF9CWV9TUEFDRSwK
ICBfTkxfTU9ORVRBUllfRFVPX1BfU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TSUdO
X1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZ
X0RVT19JTlRfTl9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX1VOT19WQUxJRF9GUk9NLAogIF9O
TF9NT05FVEFSWV9VTk9fVkFMSURfVE8sCiAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9GUk9NLAog
IF9OTF9NT05FVEFSWV9EVU9fVkFMSURfVE8sCiAgX05MX01PTkVUQVJZX0NPTlZFUlNJT05fUkFU
RSwKICBfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywKICBfTkxfTU9ORVRBUllfVEhPVVNB
TkRTX1NFUF9XQywKICBfTkxfTU9ORVRBUllfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01PTkVUQVJZ
LAoKCgogIF9fREVDSU1BTF9QT0lOVCA9ICgoKF9fTENfTlVNRVJJQykgPDwgMTYpIHwgKDApKSwK
CgoKICBSQURJWENIQVIgPSBfX0RFQ0lNQUxfUE9JTlQsCgogIF9fVEhPVVNBTkRTX1NFUCwKCgoK
ICBUSE9VU0VQID0gX19USE9VU0FORFNfU0VQLAoKICBfX0dST1VQSU5HLAoKCgogIF9OTF9OVU1F
UklDX0RFQ0lNQUxfUE9JTlRfV0MsCiAgX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywKICBf
TkxfTlVNRVJJQ19DT0RFU0VULAogIF9OTF9OVU1fTENfTlVNRVJJQywKCiAgX19ZRVNFWFBSID0g
KCgoX19MQ19NRVNTQUdFUykgPDwgMTYpIHwgKDApKSwKCiAgX19OT0VYUFIsCgogIF9fWUVTU1RS
LAoKCgogIF9fTk9TVFIsCgoKCiAgX05MX01FU1NBR0VTX0NPREVTRVQsCiAgX05MX05VTV9MQ19N
RVNTQUdFUywKCiAgX05MX1BBUEVSX0hFSUdIVCA9ICgoKF9fTENfUEFQRVIpIDw8IDE2KSB8ICgw
KSksCiAgX05MX1BBUEVSX1dJRFRILAogIF9OTF9QQVBFUl9DT0RFU0VULAogIF9OTF9OVU1fTENf
UEFQRVIsCgogIF9OTF9OQU1FX05BTUVfRk1UID0gKCgoX19MQ19OQU1FKSA8PCAxNikgfCAoMCkp
LAogIF9OTF9OQU1FX05BTUVfR0VOLAogIF9OTF9OQU1FX05BTUVfTVIsCiAgX05MX05BTUVfTkFN
RV9NUlMsCiAgX05MX05BTUVfTkFNRV9NSVNTLAogIF9OTF9OQU1FX05BTUVfTVMsCiAgX05MX05B
TUVfQ09ERVNFVCwKICBfTkxfTlVNX0xDX05BTUUsCgogIF9OTF9BRERSRVNTX1BPU1RBTF9GTVQg
PSAoKChfX0xDX0FERFJFU1MpIDw8IDE2KSB8ICgwKSksCiAgX05MX0FERFJFU1NfQ09VTlRSWV9O
QU1FLAogIF9OTF9BRERSRVNTX0NPVU5UUllfUE9TVCwKICBfTkxfQUREUkVTU19DT1VOVFJZX0FC
MiwKICBfTkxfQUREUkVTU19DT1VOVFJZX0FCMywKICBfTkxfQUREUkVTU19DT1VOVFJZX0NBUiwK
ICBfTkxfQUREUkVTU19DT1VOVFJZX05VTSwKICBfTkxfQUREUkVTU19DT1VOVFJZX0lTQk4sCiAg
X05MX0FERFJFU1NfTEFOR19OQU1FLAogIF9OTF9BRERSRVNTX0xBTkdfQUIsCiAgX05MX0FERFJF
U1NfTEFOR19URVJNLAogIF9OTF9BRERSRVNTX0xBTkdfTElCLAogIF9OTF9BRERSRVNTX0NPREVT
RVQsCiAgX05MX05VTV9MQ19BRERSRVNTLAoKICBfTkxfVEVMRVBIT05FX1RFTF9JTlRfRk1UID0g
KCgoX19MQ19URUxFUEhPTkUpIDw8IDE2KSB8ICgwKSksCiAgX05MX1RFTEVQSE9ORV9URUxfRE9N
X0ZNVCwKICBfTkxfVEVMRVBIT05FX0lOVF9TRUxFQ1QsCiAgX05MX1RFTEVQSE9ORV9JTlRfUFJF
RklYLAogIF9OTF9URUxFUEhPTkVfQ09ERVNFVCwKICBfTkxfTlVNX0xDX1RFTEVQSE9ORSwKCiAg
X05MX01FQVNVUkVNRU5UX01FQVNVUkVNRU5UID0gKCgoX19MQ19NRUFTVVJFTUVOVCkgPDwgMTYp
IHwgKDApKSwKICBfTkxfTUVBU1VSRU1FTlRfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01FQVNVUkVN
RU5ULAoKICBfTkxfSURFTlRJRklDQVRJT05fVElUTEUgPSAoKChfX0xDX0lERU5USUZJQ0FUSU9O
KSA8PCAxNikgfCAoMCkpLAogIF9OTF9JREVOVElGSUNBVElPTl9TT1VSQ0UsCiAgX05MX0lERU5U
SUZJQ0FUSU9OX0FERFJFU1MsCiAgX05MX0lERU5USUZJQ0FUSU9OX0NPTlRBQ1QsCiAgX05MX0lE
RU5USUZJQ0FUSU9OX0VNQUlMLAogIF9OTF9JREVOVElGSUNBVElPTl9URUwsCiAgX05MX0lERU5U
SUZJQ0FUSU9OX0ZBWCwKICBfTkxfSURFTlRJRklDQVRJT05fTEFOR1VBR0UsCiAgX05MX0lERU5U
SUZJQ0FUSU9OX1RFUlJJVE9SWSwKICBfTkxfSURFTlRJRklDQVRJT05fQVVESUVOQ0UsCiAgX05M
X0lERU5USUZJQ0FUSU9OX0FQUExJQ0FUSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9BQkJSRVZJ
QVRJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX1JFVklTSU9OLAogIF9OTF9JREVOVElGSUNBVElP
Tl9EQVRFLAogIF9OTF9JREVOVElGSUNBVElPTl9DQVRFR09SWSwKICBfTkxfSURFTlRJRklDQVRJ
T05fQ09ERVNFVCwKICBfTkxfTlVNX0xDX0lERU5USUZJQ0FUSU9OLAoKCiAgX05MX05VTQp9Owoj
IDU3NSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMgNApleHRlcm4gY2hhciAqbmxfbGFuZ2lu
Zm8gKG5sX2l0ZW0gX19pdGVtKSB0aHJvdyAoKTsKIyA1ODYgIi91c3IvaW5jbHVkZS9sYW5naW5m
by5oIiAzIDQKZXh0ZXJuIGNoYXIgKl9fbmxfbGFuZ2luZm9fbCAobmxfaXRlbSBfX2l0ZW0sIF9f
bG9jYWxlX3QgbCk7CgoKfQojIDQzICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T
VC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2Nh
bGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDEgMyA0CiMgMjQgIi91c3IvaW5j
bHVkZS9pY29udi5oIiAzIDQKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T
VC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9zdGRk
ZWYuaCIgMSAzIDQKIyAyNSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDIgMyA0CgoKZXh0ZXJuICJD
IiB7CgoKdHlwZWRlZiB2b2lkICppY29udl90OwoKCgoKZXh0ZXJuIGljb252X3QgaWNvbnZfb3Bl
biAoX19jb25zdCBjaGFyICpfX3RvY29kZSwgX19jb25zdCBjaGFyICpfX2Zyb21jb2RlKQogICAg
IHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBfX2NkLCBjaGFyICoq
X19yZXN0cmljdCBfX2luYnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJp
Y3QgX19pbmJ5dGVzbGVmdCwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg
X19vdXRidWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX291dGJ5
dGVzbGVmdCk7CgoKZXh0ZXJuIGludCBpY29udl9jbG9zZSAoaWNvbnZfdCBfX2NkKSB0aHJvdyAo
KTsKCn0KIyA0NCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9j
KysvMy41LXRyZWUtc3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDIgMwoj
IDEgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDEgMyA0CiMgMzAgIi91c3IvaW5jbHVkZS9saWJp
bnRsLmgiIDMgNApleHRlcm4gIkMiIHsKCgoKCmV4dGVybiBjaGFyICpnZXR0ZXh0IChfX2NvbnN0
IGNoYXIgKl9fbXNnaWQpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZGdldHRleHQgKF9fY29u
c3QgY2hhciAqX19kb21haW5uYW1lLCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQpCiAgICAgdGhyb3cg
KCk7CmV4dGVybiBjaGFyICpfX2RnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwg
X19jb25zdCBjaGFyICpfX21zZ2lkKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zv
cm1hdF9hcmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCAoX19jb25zdCBjaGFy
ICpfX2RvbWFpbm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19t
c2dpZCwgaW50IF9fY2F0ZWdvcnkpIHRocm93ICgpOwpleHRlcm4gY2hhciAqX19kY2dldHRleHQg
KF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19tc2dpZCwgaW50IF9fY2F0ZWdvcnkpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgyKSkpOwoKCgoKZXh0ZXJuIGNoYXIgKm5nZXR0ZXh0
IChfX2NvbnN0IGNoYXIgKl9fbXNnaWQxLCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQyLAogICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDEpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0
X2FyZ19fICgyKSkpOwoKCgpleHRlcm4gY2hhciAqZG5nZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9f
ZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkMSwKICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKSBfX2F0dHJpYnV0ZV9f
ICgoX19mb3JtYXRfYXJnX18gKDMpKSk7CgoKCmV4dGVybiBjaGFyICpkY25nZXR0ZXh0IChfX2Nv
bnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkMSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2NhdGVnb3J5KQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKSBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfYXJnX18gKDMpKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnRleHRkb21haW4gKF9fY29u
c3QgY2hhciAqX19kb21haW5uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0
ZG9tYWluIChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZGlybmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy
ICpiaW5kX3RleHRkb21haW5fY29kZXNldCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2NvZGVz
ZXQpIHRocm93ICgpOwojIDExNSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMyA0Cn0KIyA0NSAi
L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUt
c3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDIgMwojIDU3ICIvbm90bmZz
L2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvaTY4
Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0eXBl
ZGVmIF9fbG9jYWxlX3QgX19jX2xvY2FsZTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4K
ICAgIGludAogICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwgY29uc3QgaW50IF9fc2l6
ZSwgY29uc3QgY2hhciogX19mbXQsCgoKCgoKICAgICAgICAgICAgICAgICAgICAgX1R2IF9fdiwg
Y29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMgPSAtMSkKICAgIHsKICAgICAgY2hhciogX19v
bGQgPSBzZXRsb2NhbGUoX19MQ19BTEwsIF9fbnVsbCk7CiAgICAgIGNoYXIqIF9fc2F2ID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KG1hbGxvYyhzdHJsZW4oX19vbGQpICsgMSkpOwogICAgICBpZiAoX19z
YXYpCiAgICAgICAgc3RyY3B5KF9fc2F2LCBfX29sZCk7CiAgICAgIHNldGxvY2FsZShfX0xDX0FM
TCwgIkMiKTsKCgogICAgICBpbnQgX19yZXQ7CgogICAgICBpZiAoX19wcmVjID49IDApCiAgICAg
ICAgX19yZXQgPSBzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOwog
ICAgICBlbHNlCiAgICAgICAgX19yZXQgPSBzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwg
X192KTsKIyA5OCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9j
KysvMy41LXRyZWUtc3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDMKICAg
ICAgc2V0bG9jYWxlKF9fTENfQUxMLCBfX3Nhdik7CiAgICAgIGZyZWUoX19zYXYpOwoKICAgICAg
cmV0dXJuIF9fcmV0OwogICAgfQp9CiMgNDcgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh
cC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9pb3Nmd2QiIDIgMwojIDEgIi9ub3RuZnMv
ZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9jY3R5
cGUiIDEgMwojIDQ3ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRl
L2MrKy8zLjUtdHJlZS1zc2EvY2N0eXBlIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIg
MSAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNApleHRlcm4gIkMiIHsKIyA0NyAi
L3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNAplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8g
KCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEp
IDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhh
ID0gKCgyKSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBf
SVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4
KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAo
NCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAo
KDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8
IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwg
KDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8g
KCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkp
IDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0
ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwK
ICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEp
KSA+PiA4KSkKfTsKIyA3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNApleHRlcm4gX19jb25z
dCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90
ICpfX2N0eXBlX3RvbG93ZXI7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b3Vw
cGVyOwojIDkxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4dGVybiBpbnQgaXNhbG51bSAo
aW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4g
aW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3Jh
cGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBp
c3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzYmxhbmsgKGludCkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAo
aW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX3Rv
bG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMjIzICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4
dGVybiBpbnQgX19pc2FsbnVtX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX19pc2FscGhhX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19p
c2NudHJsX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2RpZ2l0
X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2xvd2VyX2wgKGlu
dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2dyYXBoX2wgKGludCwgX19s
b2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3ByaW50X2wgKGludCwgX19sb2NhbGVf
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3B1bmN0X2wgKGludCwgX19sb2NhbGVfdCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX19pc3NwYWNlX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX19pc3VwcGVyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX19pc3hkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBfX2lzYmxhbmtfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBf
X3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgX190b3VwcGVyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKIyAyNzYg
Ii91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKfQojIDUwICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2Nj
LW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvY2N0eXBlIiAyIDMKIyA2NiAi
L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUt
c3NhL2NjdHlwZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmlzYWxudW07CiAgdXNpbmcg
Ojppc2FscGhhOwogIHVzaW5nIDo6aXNjbnRybDsKICB1c2luZyA6OmlzZGlnaXQ7CiAgdXNpbmcg
Ojppc2dyYXBoOwogIHVzaW5nIDo6aXNsb3dlcjsKICB1c2luZyA6OmlzcHJpbnQ7CiAgdXNpbmcg
Ojppc3B1bmN0OwogIHVzaW5nIDo6aXNzcGFjZTsKICB1c2luZyA6OmlzdXBwZXI7CiAgdXNpbmcg
Ojppc3hkaWdpdDsKICB1c2luZyA6OnRvbG93ZXI7CiAgdXNpbmcgOjp0b3VwcGVyOwp9CiMgNDgg
Ii9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVl
LXNzYS9pb3Nmd2QiIDIgMwojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNU
L2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0cmluZ2Z3ZC5oIiAxIDMKIyA0MyAiL25v
dG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3Nh
L2JpdHMvc3RyaW5nZndkLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+
CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUg
X0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nOwoKICB0
ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPjsKCiAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8Y2hhcj4gc3RyaW5nOwoKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJf
dD47CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+IHdzdHJpbmc7Cgp9CiMgNDkgIi9u
b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz
YS9pb3Nmd2QiIDIgMwojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2lu
Y2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL2Zwb3MuaCIgMSAzCiMgNDMgIi9ub3RuZnMvZmNo
ZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL2Zw
b3MuaCIgMwoKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRl
L2MrKy8zLjUtdHJlZS1zc2EvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAxIDMKIyAz
NSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRy
ZWUtc3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMwojIDEgIi9ub3RuZnMvZmNo
ZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9jc3RkaW8i
IDEgMwojIDQ4ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2Mr
Ky8zLjUtdHJlZS1zc2EvY3N0ZGlvIiAzCgoKCgojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2Mt
bXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9p
bmNsdWRlL3N0ZGlvLmgiIDEgMyA0CiMgMzkgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh
cC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRl
L3N0ZGlvLmgiIDMgNApleHRlcm4gIkMiIHsKCgoKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2Nj
LW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2Ev
aW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyA0NCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRm
bGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1
ZGUvc3RkaW8uaCIgMiAzIDQKIyA1NCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO
U1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3Rk
aW8uaCIgMyA0CnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNjQgIi9ub3RuZnMvZmNo
ZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
NS10cmVlLXNzYS9pbmNsdWRlL3N0ZGlvLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBf
X0ZJTEU7CiMgNzQgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoj
IDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMgNAojIDMyICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMgNAojIDE0ICIvdXNyL2lu
Y2x1ZGUvX0dfY29uZmlnLmgiIDMgNAojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh
cC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMgNAojIDM1NCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO
U1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CiMgMTUgIi91c3IvaW5jbHVk
ZS9fR19jb25maWcuaCIgMiAzIDQKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzIDQK
IyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzIDQKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFy
LmgiIDMgNAojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMg
NAojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvd2NoYXIuaCIgMSAzIDQKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CiMgNjcg
Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50
OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBf
X3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIg
MyA0Cgp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0
YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBf
X21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0df
Y29uZmlnLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMgNAojIDI4ICIvdXNy
L2luY2x1ZGUvZ2NvbnYuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMyA0CiMg
NDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2Nj
LW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2Ev
aW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMyA0
CiMgMjkgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMgNAoKCiMgMSAiL25vdG5mcy9mY2hlL0JV
SUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRy
ZWUtc3NhL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzIgIi91c3IvaW5jbHVkZS9nY29udi5o
IiAyIDMgNAoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAog
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
bmZpZy5oIiAyIDMgNAp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7
CiAgc3RydWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9f
Z2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5
cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7
CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p
KSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJp
YnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKIyAzMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDIgMyA0CiMgNTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKIyAxICIvbm90bmZzL2ZjaGUv
QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUt
dHJlZS1zc2EvaW5jbHVkZS9zdGRhcmcuaCIgMSAzIDQKIyA0MyAiL25vdG5mcy9mY2hlL0JVSUxE
LWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUt
c3NhL2luY2x1ZGUvc3RkYXJnLmgiIDMgNAp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251
Y192YV9saXN0OwojIDU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzIDQKIyAxNjAgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzIDQKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsK
IyAxNzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7
CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBz
dHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5MyAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDMgNAp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29r
LAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9j
b252Cn07CgoKCgpzdHJ1Y3QgX0lPX2NvZGVjdnQKewogIHZvaWQgKCpfX2NvZGVjdnRfZGVzdHIp
IChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2Rl
Y3Z0X2RvX291dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqKiwgY2hh
ciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICos
IGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb191bnNoaWZ0
KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLCBjaGFyICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiopOwogIGVudW0g
X19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19pbikgKHN0cnVjdCBfSU9fY29kZWN2dCAq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90
ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqKiwgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7CiAgaW50ICgqX19jb2Rl
Y3Z0X2RvX2VuY29kaW5nKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9fY29kZWN2
dF9kb19hbHdheXNfbm9jb252KSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9fY29k
ZWN2dF9kb19sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwgX19tYnN0YXRlX3QgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNp
emVfdCk7CiAgaW50ICgqX19jb2RlY3Z0X2RvX21heF9sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVj
dnQgKik7CgogIF9HX2ljb252X3QgX19jZF9pbjsKICBfR19pY29udl90IF9fY2Rfb3V0Owp9OwoK
CnN0cnVjdCBfSU9fd2lkZV9kYXRhCnsKICB3Y2hhcl90ICpfSU9fcmVhZF9wdHI7CiAgd2NoYXJf
dCAqX0lPX3JlYWRfZW5kOwogIHdjaGFyX3QgKl9JT19yZWFkX2Jhc2U7CiAgd2NoYXJfdCAqX0lP
X3dyaXRlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX3B0cjsKICB3Y2hhcl90ICpfSU9fd3Jp
dGVfZW5kOwogIHdjaGFyX3QgKl9JT19idWZfYmFzZTsKICB3Y2hhcl90ICpfSU9fYnVmX2VuZDsK
CiAgd2NoYXJfdCAqX0lPX3NhdmVfYmFzZTsKICB3Y2hhcl90ICpfSU9fYmFja3VwX2Jhc2U7Cgog
IHdjaGFyX3QgKl9JT19zYXZlX2VuZDsKCiAgX19tYnN0YXRlX3QgX0lPX3N0YXRlOwogIF9fbWJz
dGF0ZV90IF9JT19sYXN0X3N0YXRlOwogIHN0cnVjdCBfSU9fY29kZWN2dCBfY29kZWN2dDsKCiAg
d2NoYXJfdCBfc2hvcnRidWZbMV07CgogIHN0cnVjdCBfSU9fanVtcF90ICpfd2lkZV92dGFibGU7
Cn07CgoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVh
ZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hh
ciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3Jp
dGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hh
ciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3Nh
dmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklM
RSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBfb2xk
X29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBf
dnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9j
azsKIyAzMDUgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKICBfX29mZjY0X3QgX29mZnNldDsK
CgogIHN0cnVjdCBfSU9fY29kZWN2dCAqX2NvZGVjdnQ7CiAgc3RydWN0IF9JT193aWRlX2RhdGEg
Kl93aWRlX2RhdGE7CgoKCgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVv
ZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVf
cGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJu
IHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9f
RklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKIyAzNDQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAz
IDQKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAq
X19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dy
aXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lv
X3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0
eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9f
aW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4g
Y29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVr
X2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25f
dDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVf
Zm4gKndyaXRlOwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsK
fSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rp
b25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpl
eHRlcm4gdm9pZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2Zp
bGUsIGludCBfX3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq
X19jb29raWUsIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJD
IiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxv
dyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cg
KF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAq
KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90
KSB0aHJvdyAoKTsKIyA0MjYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKZXh0ZXJuIGludCBf
SU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChp
bnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAq
X19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpf
X2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAq
KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsK
IyA0NTYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAo
X0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hh
ciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0
aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3Nz
aXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9p
ZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lP
X0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3Qg
X0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVy
biB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgpleHRl
cm4gd2ludF90IF9JT19nZXR3YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gd2lu
dF90IF9JT19wdXR3YyAod2NoYXJfdCBfX3djLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgX0lPX2Z3aWRlIChfSU9fRklMRSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7
CiMgNTA1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0CmV4dGVybiBpbnQgX0lPX3Zmd3NjYW5m
IChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX0lPX3Zmd3ByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVj
X3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT193cGFkbiAoX0lPX0ZJTEUg
Kiwgd2ludF90LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnJlZV93YmFj
a3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwoKCgp9CiMgNzUgIi9ub3RuZnMvZmNoZS9C
VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10
cmVlLXNzYS9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CgoKCgp0eXBlZGVmIF9fZ251Y192YV9saXN0
IF9fbm90X3ZhX2xpc3RfXzsKIyA4OSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO
U1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3Rk
aW8uaCIgMyA0CnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0
X3QgZnBvczY0X3Q7CiMgMTM4ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9zdGRpby5o
IiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzIDQKIyAxMzkgIi9u
b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CgoKCmV4dGVybiBGSUxF
ICpzdGRpbjsKZXh0ZXJuIEZJTEUgKnN0ZG91dDsKZXh0ZXJuIEZJTEUgKnN0ZGVycjsKIyAxNTMg
Ii9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gaW50IHJl
bW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVu
YW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSB0aHJvdyAoKTsKIyAxNjkgIi9ub3RuZnMv
ZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuNS10cmVlLXNzYS9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gRklMRSAqdG1wZmlsZTY0
ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE4
OSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBjaGFy
ICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IGZj
bG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lkKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgMjMzICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZs
YXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVk
ZS9zdGRpby5oIiAzIDQKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3Bl
biAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IEZJTEUgKmZvcGVuY29va2llICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19m
dW5jcykgdGhyb3cgKCk7CgoKZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVf
dCBfX2xlbiwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxF
ICpvcGVuX21lbXN0cmVhbSAoY2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFy
ICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAg
ICAgICAgICAgIGludCBfX21vZGVzLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2
b2lkIHNldGJ1ZmZlciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmlj
dCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsK
CgpleHRlcm4gdm9pZCBzZXRsaW5lYnVmIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgp
OwoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg
Li4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3Ms
CiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu
Li4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19z
LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg
IF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAg
ICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9f
Z251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hh
ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50
IHZzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVj
X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fcHJpbnRmX18sIDMsIDApKSk7CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipf
X3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAg
ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3By
aW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmlu
dGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRm
IChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAg
ICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChp
bnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgpl
eHRlcm4gaW50IGZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4u
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LCAuLi4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3Qg
X19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Zm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoK
CmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192
YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf
X3NjYW5mX18sIDIsIDApKSk7CgoKCgpleHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgZ2V0Y2hhciAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdldGNf
dW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjaGFyX3Vu
bG9ja2VkICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAo
KTsKCgoKCgoKCmV4dGVybiBpbnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgKGludCBf
X2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwg
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIg
KmZnZXRzX3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBjaGFyICpnZXRzIChjaGFyICpfX3MpIHRocm93ICgpOwojIDQzNyAiL25vdG5m
cy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBfX3NzaXplX3QgX19n
ZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhy
b3cgKCk7CmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGlu
ZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19u
LCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChj
aGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgKl9fcmVzdHJpY3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAg
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9f
cykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19w
dHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUg
Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9f
Y29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6
ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3Vu
bG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFt
LCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGlu
dCBmdGVsbCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNTAwICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11
ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5j
bHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3RyZWFtLCBfX29m
Zl90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxv
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93
ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3Qg
Kl9fcG9zKSB0aHJvdyAoKTsKIyA1MzQgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9J
TlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3N0
ZGlvLmgiIDMgNApleHRlcm4gaW50IGZzZWVrbzY0IChGSUxFICpfX3N0cmVhbSwgX19vZmY2NF90
IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90IGZ0ZWxsbzY0
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmdldHBvczY0IChGSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJv
dyAoKTsKZXh0ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3M2
NF90ICpfX3BvcykgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVy
biB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50
IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZv
aWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5
c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CgoKZXh0
ZXJuIGludCBfc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3QgX3N5c19lcnJs
aXN0W107CgoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQsIF9fY29u
c3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKSB0aHJvdyAoKTsK
CgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVybiBpbnQgb2JzdGFja19wcmludGYgKHN0cnVjdCBv
YnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwpleHRlcm4g
aW50IG9ic3RhY2tfdnByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNr
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmdz
KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CiMgNjQ0ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9zdGRpby5oIiAzIDQKfQoj
IDUzICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUt
dHJlZS1zc2EvY3N0ZGlvIiAyIDMKIyA5NyAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFw
L0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2NzdGRpbyIgMwpuYW1lc3BhY2Ugc3RkCnsK
ICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAg
dXNpbmcgOjpmY2xvc2U7CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5n
IDo6ZmZsdXNoOwogIHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6
ZmdldHM7CiAgdXNpbmcgOjpmb3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0
YzsKICB1c2luZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwog
IHVzaW5nIDo6ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVz
aW5nIDo6ZnRlbGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6
Z2V0Y2hhcjsKICB1c2luZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmlu
dGY7CiAgdXNpbmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAg
dXNpbmcgOjpyZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNp
bmcgOjpzY2FuZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcg
OjpzcHJpbnRmOwogIHVzaW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6
OnRtcG5hbTsKICB1c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6
dnByaW50ZjsKICB1c2luZyA6OnZzcHJpbnRmOwp9CiMgMTUzICIvbm90bmZzL2ZjaGUvQlVJTEQt
Z2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvY3N0ZGlvIiAzCm5hbWVz
cGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6c25wcmludGY7CiAgdXNpbmcgOjp2ZnNjYW5mOwog
IHVzaW5nIDo6dnNjYW5mOwogIHVzaW5nIDo6dnNucHJpbnRmOwogIHVzaW5nIDo6dnNzY2FuZjsK
fQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpzbnByaW50ZjsKICB1c2luZyBf
X2dudV9jeHg6OnZmc2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c2NhbmY7CiAgdXNpbmcgX19n
bnVfY3h4Ojp2c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c3NjYW5mOwp9CiMgMzYgIi9u
b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz
YS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwoKIyAxICIvbm90bmZzL2ZjaGUv
QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvaTY4Ni1wYy1s
aW51eC1nbnUvYml0cy9ndGhyLmgiIDEgMwojIDk2ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11
ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvaTY4Ni1wYy1saW51eC1nbnUvYml0
cy9ndGhyLmgiIDMKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNs
dWRlL2MrKy8zLjUtdHJlZS1zc2EvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQu
aCIgMSAzCiMgMzcgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUv
YysrLzMuNS10cmVlLXNzYS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAz
CiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvcHRocmVhZC5oIiAxIDMgNAojIDI5
ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNAojIDEgIi91c3Iv
aW5jbHVkZS9zY2hlZC5oIiAxIDMgNAojIDI5ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMyA0CiMg
MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQKIyAzMCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgi
IDIgMyA0CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMgNAojIDQ3ICIvdXNy
L2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzIDQKc3RydWN0IHNjaGVkX3BhcmFtCiAgewogICAgaW50
IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW50IGNsb25l
IChpbnQgKCpfX2ZuKSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAg
ICAgICAgICAgICBpbnQgX19mbGFncywgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCn0KIyAzMyAi
L3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMyA0CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50
IHNjaGVkX3NldHBhcmFtIChfX3BpZF90IF9fcGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJh
bSAqX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChf
X3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJh
bSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRzY2hlZHVsZXIgKF9f
cGlkX3QgX19waWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfeWllbGQgKHZvaWQpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3Jp
dGhtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBf
X2FsZ29yaXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwg
KF9fcGlkX3QgX19waWQsIHN0cnVjdCB0aW1lc3BlYyAqX190KSB0aHJvdyAoKTsKCn0KIyAzMCAi
L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAojIDEgIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDEgMyA0CiMgMzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRl
cm4gIkMiIHsKCgoKCgoKCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3RkZGVm
LmgiIDEgMyA0CiMgMzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvdGltZS5oIiAxIDMgNAojIDQzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMg
NAojIDExOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CnN0cnVjdCB0bQp7CiAgaW50IHRtX3Nl
YzsKICBpbnQgdG1fbWluOwogIGludCB0bV9ob3VyOwogIGludCB0bV9tZGF5OwogIGludCB0bV9t
b247CiAgaW50IHRtX3llYXI7CiAgaW50IHRtX3dkYXk7CiAgaW50IHRtX3lkYXk7CiAgaW50IHRt
X2lzZHN0OwoKCiAgbG9uZyBpbnQgdG1fZ210b2ZmOwogIF9fY29uc3QgY2hhciAqdG1fem9uZTsK
CgoKCn07CgoKCgpzdHJ1Y3QgaXRpbWVyc3BlYwogIHsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9p
bnRlcnZhbDsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKICB9OwoKCnN0cnVjdCBzaWdl
dmVudDsKIyAxNjMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRlcm4gY2xvY2tfdCBjbG9j
ayAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lICh0aW1lX3QgKl9fdGltZXIp
IHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1l
X3QgX190aW1lMCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
ZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIHNpemVfdCBzdHJmdGltZSAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNp
emUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJp
Y3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RycHRpbWUgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm10LCBzdHJ1Y3QgdG0gKl9fdHApCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7
CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IgKF9fY29uc3QgdGltZV90
ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
dG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2Fs
dGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgKF9fY29uc3Qgc3RydWN0IHRtICpfX3RwKSB0aHJvdyAo
KTsKCgpleHRlcm4gY2hhciAqY3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVz
dHJpY3QgX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1
ZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jl
c3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9f
YnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3R6bmFtZVsyXTsKZXh0ZXJuIGludCBf
X2RheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgX190aW1lem9uZTsKCgoKCmV4dGVybiBjaGFyICp0
em5hbWVbMl07CgoKCmV4dGVybiB2b2lkIHR6c2V0ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBkYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IHRpbWV6b25lOwoKCgoKCmV4dGVybiBpbnQg
c3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3doZW4pIHRocm93ICgpOwojIDI3MSAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMyA0CmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRo
cm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3Ry
dWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tf
Z2V0cmVzIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3JlcykgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwg
c3RydWN0IHRpbWVzcGVjICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX3NldHRp
bWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkK
ICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAgKGNsb2NraWRfdCBf
X2Nsb2NrX2lkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCB0aW1lc3BlYyAqX19yZW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0Y3B1
Y2xvY2tpZCAocGlkX3QgX19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3QgX19ldnAsCiAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0IF9fdGltZXJpZCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBpbnQgX19m
bGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJzcGVj
ICpfX3Jlc3RyaWN0IF9fdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0
aW1lcnNwZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGlt
ZXJfZ2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIHN0cnVjdCBpdGltZXJzcGVjICpfX3ZhbHVl
KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBf
X3RpbWVyaWQpIHRocm93ICgpOwojIDM0MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CmV4dGVy
biBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ2V0ZGF0ZSAoX19jb25z
dCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CiMgMzU3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz
IDQKZXh0ZXJuIGludCBnZXRkYXRlX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3N0cmlu
ZywKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3Jlc2J1ZnAp
IHRocm93ICgpOwoKCgp9CiMgMzEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNU
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3B0aHJl
YWQuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzIDQKIyAzMSAiL3Vz
ci9pbmNsdWRlL3NpZ25hbC5oIiAzIDQKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3NpZ3NldC5oIiAxIDMgNAojIDM0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMyA0CiMg
MzcxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMgNAp9CiMgMzQgIi9ub3RuZnMvZmNoZS9CVUlM
RC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVl
LXNzYS9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhy
ZWFkdHlwZXMuaCIgMSAzIDQKIyAzNSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO
U1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvcHRo
cmVhZC5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2luaXRzcGluLmgiIDEgMyA0CiMg
MzYgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzIDQKCgpleHRl
cm4gIkMiIHsKIyA2OCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvcHRocmVhZC5oIiAz
IDQKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUsCgogIFBUSFJFQURfQ1JFQVRFX0RF
VEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhFUklUX1NDSEVELAoKICBQVEhSRUFEX0VY
UExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9TQ09QRV9TWVNURU0sCgogIFBUSFJF
QURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0KewogIFBUSFJFQURfTVVURVhfVElNRURfTlAsCiAg
UFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05Q
LAogIFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAKCiAgLAogIFBUSFJFQURfTVVURVhfTk9STUFM
ID0gUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSA9IFBU
SFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVDSyA9IFBU
SFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0RFRkFVTFQgPSBQVEhS
RUFEX01VVEVYX05PUk1BTAoKCgogICwgUFRIUkVBRF9NVVRFWF9GQVNUX05QID0gUFRIUkVBRF9N
VVRFWF9BREFQVElWRV9OUAoKfTsKCmVudW0KewogIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFLAoK
ICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoKCmVudW0KewogIFBUSFJFQURfUldMT0NLX1BS
RUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUCwKICBQVEhS
RUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX1JXTE9D
S19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUAp9OwojIDE0MCAi
L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKc3RydWN0IF9wdGhy
ZWFkX2NsZWFudXBfYnVmZmVyCnsKICB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKTsKICB2b2lk
ICpfX2FyZzsKICBpbnQgX19jYW5jZWx0eXBlOwogIHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1
ZmZlciAqX19wcmV2Owp9OwoKCgplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9FTkFCTEUsCgogIFBU
SFJFQURfQ0FOQ0VMX0RJU0FCTEUKCn07CmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0RFRkVSUkVE
LAoKICBQVEhSRUFEX0NBTkNFTF9BU1lOQ0hST05PVVMKCn07CiMgMTcyICIvbm90bmZzL2ZjaGUv
QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUt
dHJlZS1zc2EvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNApleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRl
IChwdGhyZWFkX3QgKl9fcmVzdHJpY3QgX190aHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkICooKl9fc3RhcnRfcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fcmVzdHJpY3QgX19hcmcpIHRocm93ICgpOwoKCmV4
dGVybiBwdGhyZWFkX3QgcHRocmVhZF9zZWxmICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfZXF1YWwgKHB0aHJlYWRfdCBfX3RocmVhZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIp
IHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHB0aHJlYWRfZXhpdCAodm9pZCAqX19yZXR2YWwpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2pvaW4gKHB0aHJlYWRfdCBfX3RoLCB2b2lkICoqX190aHJlYWRfcmV0dXJuKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoIChwdGhyZWFkX3QgX190aCkg
dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9pbml0IChwdGhyZWFkX2F0
dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95
IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf
YXR0cl9zZXRkZXRhY2hzdGF0ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2RldGFjaHN0YXRlKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0ZSAoX19jb25zdCBwdGhyZWFk
X2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50ICpfX2RldGFjaHN0YXRlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9z
ZXRzY2hlZHBhcmFtIChwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFt
ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcGFy
YW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0gKF9f
Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19wYXJhbSkKICAgICB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAocHRocmVhZF9hdHRy
X3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX2dldHNjaGVkcG9saWN5IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3Ry
aWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAq
X19yZXN0cmljdCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf
YXR0cl9zZXRpbmhlcml0c2NoZWQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9faW5oZXJpdCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkIChfX2NvbnN0IHB0aHJlYWRf
YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19pbmhlcml0KQogICAgIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBp
bnQgX19zY29wZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRz
Y29wZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zY29wZSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6ZSAocHRocmVhZF9hdHRy
X3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19ndWFyZHNpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGd1YXJk
c2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fZ3VhcmRz
aXplKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFj
a2FkZHIgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqX19zdGFja2FkZHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX2dldHN0YWNrYWRkciAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmlj
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgdm9pZCAqKl9f
cmVzdHJpY3QgX19zdGFja2FkZHIpCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2F0dHJfc2V0c3RhY2sgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHZvaWQgKl9fc3RhY2th
ZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhY2tzaXpl
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFjayAoX19jb25zdCBw
dGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6ZSkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplIChwdGhyZWFkX2F0
dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBfX3N0YWNrc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3Rh
Y2tzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFj
a3NpemUpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRhdHRyX25wIChw
dGhyZWFkX3QgX190aCwgcHRocmVhZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFk
LCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BvbGljeSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0
cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0Y29u
Y3VycmVuY3kgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjb25jdXJy
ZW5jeSAoaW50IF9fbGV2ZWwpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3lp
ZWxkICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2luaXQg
KHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX211dGV4X2F0dHIpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90cnlsb2NrIChwdGhyZWFkX211dGV4
X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9sb2NrIChw
dGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRf
bXV0ZXhfdGltZWRsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMg
Kl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1l
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3VubG9jayAocHRocmVhZF9t
dXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4
YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19h
dHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHBzaGFyZWQg
KF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX211dGV4YXR0
cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9z
ZXR0eXBlIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsIGludCBfX2tpbmQpCiAgICAgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXR0eXBlIChfX2NvbnN0IHB0
aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX2tpbmQpIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5pdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJp
Y3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRf
Y29uZGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bmRfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfZGVzdHJveSAocHRo
cmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRf
c2lnbmFsIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfY29uZF9icm9hZGNhc3QgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmlj
dCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAq
X19yZXN0cmljdCBfX211dGV4KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29u
ZF90aW1lZHdhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19t
dXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0
aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YWJzdGltZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdCAo
cHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9jb25kYXR0cl9kZXN0cm95IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVh
ZF9jb25kYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
cmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X2NvbmRhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7
CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2luaXQgKHB0aHJlYWRfcndsb2NrX3Qg
Kl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j
a19kZXN0cm95IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX3J3bG9ja19yZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXJkbG9jayAocHRocmVhZF9y
d2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2Nr
X3RpbWVkcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3Bl
YyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fi
c3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3dybG9jayAocHRo
cmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9y
d2xvY2tfdHJ5d3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWR3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3Qg
Kl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
cHRocmVhZF9yd2xvY2tfdW5sb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfaW5pdCAocHRocmVhZF9yd2xv
Y2thdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0
dHJfZGVzdHJveSAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX3J3
bG9ja2F0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
cmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl
YWRfcndsb2NrYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRraW5kX25wIChfX2Nv
bnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCAqX19wcmVmKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfcndsb2NrYXR0cl9zZXRraW5kX25wIChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wcmVmKSB0
aHJvdyAoKTsKIyA1MTggIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3B0aHJlYWQuaCIg
MyA0CmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2luaXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19s
b2NrLCBpbnQgX19wc2hhcmVkKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9z
cGluX2Rlc3Ryb3kgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfc3Bpbl9sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fdHJ5bG9jayAocHRocmVhZF9zcGlubG9j
a190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX3VubG9jayAo
cHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2JhcnJpZXJfaW5pdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fcmVzdHJpY3QgX19iYXJyaWVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYmFycmll
cmF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0
dHIsIHVuc2lnbmVkIGludCBfX2NvdW50KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9i
YXJyaWVyX2Rlc3Ryb3kgKHB0aHJlYWRfYmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwoK
ZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2luaXQgKHB0aHJlYWRfYmFycmllcmF0dHJf
dCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0
cm95IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50
IHB0aHJlYWRfYmFycmllcmF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJh
dHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0
cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9i
YXJyaWVyYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVy
X3QgKl9fYmFycmllcikgdGhyb3cgKCk7CiMgNTY1ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11
ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5j
bHVkZS9wdGhyZWFkLmgiIDMgNApleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZSAocHRocmVh
ZF9rZXlfdCAqX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19k
ZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9r
ZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgpOwoKCmV4dGVy
biB2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAo
KTsKIyA1ODUgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4
dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsCiAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAoaW50IF9fc3Rh
dGUsIGludCAqX19vbGRzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRj
YW5jZWx0eXBlIChpbnQgX190eXBlLCBpbnQgKl9fb2xkdHlwZSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90IF9fdGhyKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCkgdGhyb3cgKCk7CiMgNjE5ICIvbm90bmZz
L2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNApleHRlcm4gdm9pZCBfcHRocmVh
ZF9jbGVhbnVwX3B1c2ggKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZv
aWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRo
cm93ICgpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBf
cHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19leGVjdXRlKSB0aHJvdyAoKTsKIyA2NDAgIi9ub3RuZnMvZmNoZS9C
VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10
cmVlLXNzYS9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFu
dXBfcHVzaF9kZWZlciAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5l
KSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICpfX2FyZykgdGhyb3cgKCk7CiMgNjUxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAv
SU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9w
dGhyZWFkLmgiIDMgNApleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcF9yZXN0b3JlIChz
dHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19leGVjdXRlKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfZ2V0Y3B1Y2xvY2tpZCAocHRocmVhZF90IF9fdGhyZWFkX2lkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tpZF90ICpfX2Nsb2NrX2lkKSB0
aHJvdyAoKTsKCgoKCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvYml0cy9zaWd0
aHJlYWQuaCIgMSAzIDQKIyA0MCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvYml0cy9z
aWd0aHJlYWQuaCIgMyA0CmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrIChpbnQgX19ob3csCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3Qg
X19uZXdtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zaWdzZXRfdCAqX19yZXN0
cmljdCBfX29sZG1hc2spdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2tpbGwgKHB0aHJl
YWRfdCBfX3RociwgaW50IF9fc2lnbm8pIHRocm93ICgpOwojIDY2NSAiL25vdG5mcy9mY2hlL0JV
SUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRy
ZWUtc3NhL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAojIDY4MCAiL25vdG5mcy9mY2hlL0JVSUxE
LWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUt
c3NhL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9p
ZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgq
X19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hp
bGQpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJf
dGhyZWFkc19ucCAodm9pZCkgdGhyb3cgKCk7Cgp9CiMgMzggIi9ub3RuZnMvZmNoZS9CVUlMRC1n
Y2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2d0aHItZGVmYXVsdC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDEg
MyA0CiMgMjggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiAiQyIgewojIDE3NSAi
L3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9v
cHQuaCIgMSAzIDQKIyAxNzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzIDQKCgoKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9lbnZpcm9ubWVudHMuaCIgMSAzIDQKIyAyMyAiL3Vzci9pbmNsdWRl
L2JpdHMvZW52aXJvbm1lbnRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXpl
LmgiIDEgMyA0CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAyIDMgNAoj
IDE4MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMgNAojIDE5OSAiL3Vzci9pbmNsdWRlL3Vu
aXN0ZC5oIiAzIDQKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9zdGRkZWYuaCIg
MSAzIDQKIyAyMDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzIDQKIyAyNDAgIi91c3IvaW5j
bHVkZS91bmlzdGQuaCIgMyA0CnR5cGVkZWYgX19pbnRwdHJfdCBpbnRwdHJfdDsKCgoKCgoKdHlw
ZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CiMgMjYwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi
IDMgNApleHRlcm4gaW50IGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBldWlkYWNjZXNzIChfX2NvbnN0IGNoYXIgKl9fbmFt
ZSwgaW50IF9fdHlwZSkgdGhyb3cgKCk7CiMgMjkwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMg
NApleHRlcm4gX19vZmZfdCBsc2VlayAoaW50IF9fZmQsIF9fb2ZmX3QgX19vZmZzZXQsIGludCBf
X3doZW5jZSkgdGhyb3cgKCk7CiMgMzAyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRl
cm4gX19vZmY2NF90IGxzZWVrNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGludCBf
X3doZW5jZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvc2UgKGludCBfX2ZkKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIHNzaXplX3QgcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3Qg
X19uYnl0ZXMpIHRocm93ICgpOwoKCmV4dGVybiBzc2l6ZV90IHdyaXRlIChpbnQgX19mZCwgX19j
b25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBzc2l6ZV90
IHByZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywgX19vZmZfdCBf
X29mZnNldCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIHNzaXplX3QgcHdyaXRlIChpbnQgX19mZCwg
X19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICBf
X29mZl90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKIyAzNDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg
MyA0CmV4dGVybiBzc2l6ZV90IHByZWFkNjQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90
IF9fbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpIHRo
cm93ICgpOwoKCmV4dGVybiBzc2l6ZV90IHB3cml0ZTY0IChpbnQgX19mZCwgX19jb25zdCB2b2lk
ICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmNjRfdCBf
X29mZnNldCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHBpcGUgKGludCBfX3BpcGVkZXNb
Ml0pIHRocm93ICgpOwojIDM2MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIHVu
c2lnbmVkIGludCBhbGFybSAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgdGhyb3cgKCk7CiMgMzcx
ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gdW5zaWduZWQgaW50IHNsZWVwICh1
bnNpZ25lZCBpbnQgX19zZWNvbmRzKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fdXNlY29uZHNf
dCB1YWxhcm0gKF9fdXNlY29uZHNfdCBfX3ZhbHVlLCBfX3VzZWNvbmRzX3QgX19pbnRlcnZhbCkK
ICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1c2xlZXAgKF9fdXNlY29uZHNfdCBfX3VzZWNv
bmRzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHBhdXNlICh2b2lkKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBjaG93biAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwg
X19naWRfdCBfX2dyb3VwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZjaG93biAoaW50
IF9fZmQsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgbGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBf
X2dpZF90IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGNoZGlyIChfX2Nv
bnN0IGNoYXIgKl9fcGF0aCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmNoZGlyIChpbnQgX19m
ZCkgdGhyb3cgKCk7CiMgNDIzICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gY2hh
ciAqZ2V0Y3dkIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGNoYXIgKmdldF9jdXJyZW50X2Rpcl9uYW1lICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGNoYXIgKmdldHdkIChjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGR1
cCAoaW50IF9fZmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZHVwMiAoaW50IF9fZmQsIGludCBf
X2ZkMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKipfX2Vudmlyb247CgpleHRlcm4gY2hhciAq
KmVudmlyb247CgoKCgoKZXh0ZXJuIGludCBleGVjdmUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBj
aGFyICpfX2NvbnN0IF9fYXJndltdLAogICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCBf
X2VudnBbXSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZleGVjdmUgKGludCBfX2ZkLCBjaGFy
ICpfX2NvbnN0IF9fYXJndltdLCBjaGFyICpfX2NvbnN0IF9fZW52cFtdKQogICAgIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBleGVjdiAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fY29u
c3QgX19hcmd2W10pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWNsZSAoX19jb25zdCBjaGFy
ICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgZXhlY2wgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4p
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWN2cCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIGNo
YXIgKl9fY29uc3QgX19hcmd2W10pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBleGVjbHAgKF9f
Y29uc3QgY2hhciAqX19maWxlLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGludCBuaWNlIChpbnQgX19pbmMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQg
X2V4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMSAzIDQKIyAyNSAiL3Vzci9pbmNs
dWRlL2JpdHMvY29uZm5hbWUuaCIgMyA0CmVudW0KICB7CiAgICBfUENfTElOS19NQVgsCgogICAg
X1BDX01BWF9DQU5PTiwKCiAgICBfUENfTUFYX0lOUFVULAoKICAgIF9QQ19OQU1FX01BWCwKCiAg
ICBfUENfUEFUSF9NQVgsCgogICAgX1BDX1BJUEVfQlVGLAoKICAgIF9QQ19DSE9XTl9SRVNUUklD
VEVELAoKICAgIF9QQ19OT19UUlVOQywKCiAgICBfUENfVkRJU0FCTEUsCgogICAgX1BDX1NZTkNf
SU8sCgogICAgX1BDX0FTWU5DX0lPLAoKICAgIF9QQ19QUklPX0lPLAoKICAgIF9QQ19TT0NLX01B
WEJVRiwKCiAgICBfUENfRklMRVNJWkVCSVRTLAoKICAgIF9QQ19SRUNfSU5DUl9YRkVSX1NJWkUs
CgogICAgX1BDX1JFQ19NQVhfWEZFUl9TSVpFLAoKICAgIF9QQ19SRUNfTUlOX1hGRVJfU0laRSwK
CiAgICBfUENfUkVDX1hGRVJfQUxJR04sCgogICAgX1BDX0FMTE9DX1NJWkVfTUlOLAoKICAgIF9Q
Q19TWU1MSU5LX01BWAoKICB9OwoKCmVudW0KICB7CiAgICBfU0NfQVJHX01BWCwKCiAgICBfU0Nf
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
LAoKICAgIF9TQ19NVUxUSV9QUk9DRVNTLAoKICAgIF9TQ19TSU5HTEVfUFJPQ0VTUywKCiAgICBf
U0NfTkVUV09SS0lORywKCiAgICBfU0NfUkVBREVSX1dSSVRFUl9MT0NLUywKCiAgICBfU0NfU1BJ
Tl9MT0NLUywKCiAgICBfU0NfUkVHRVhQLAoKICAgIF9TQ19SRUdFWF9WRVJTSU9OLAoKICAgIF9T
Q19TSEVMTCwKCiAgICBfU0NfU0lHTkFMUywKCiAgICBfU0NfU1BBV04sCgogICAgX1NDX1NQT1JB
RElDX1NFUlZFUiwKCiAgICBfU0NfVEhSRUFEX1NQT1JBRElDX1NFUlZFUiwKCiAgICBfU0NfU1lT
VEVNX0RBVEFCQVNFLAoKICAgIF9TQ19TWVNURU1fREFUQUJBU0VfUiwKCiAgICBfU0NfVElNRU9V
VFMsCgogICAgX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19VU0VSX0dST1VQUywK
CiAgICBfU0NfVVNFUl9HUk9VUFNfUiwKCiAgICBfU0NfMl9QQlMsCgogICAgX1NDXzJfUEJTX0FD
Q09VTlRJTkcsCgogICAgX1NDXzJfUEJTX0xPQ0FURSwKCiAgICBfU0NfMl9QQlNfTUVTU0FHRSwK
CiAgICBfU0NfMl9QQlNfVFJBQ0ssCgogICAgX1NDX1NZTUxPT1BfTUFYLAoKICAgIF9TQ19TVFJF
QU1TLAoKICAgIF9TQ18yX1BCU19DSEVDS1BPSU5ULAoKCiAgICBfU0NfVjZfSUxQMzJfT0ZGMzIs
CgogICAgX1NDX1Y2X0lMUDMyX09GRkJJRywKCiAgICBfU0NfVjZfTFA2NF9PRkY2NCwKCiAgICBf
U0NfVjZfTFBCSUdfT0ZGQklHLAoKCiAgICBfU0NfSE9TVF9OQU1FX01BWCwKCiAgICBfU0NfVFJB
Q0UsCgogICAgX1NDX1RSQUNFX0VWRU5UX0ZJTFRFUiwKCiAgICBfU0NfVFJBQ0VfSU5IRVJJVCwK
CiAgICBfU0NfVFJBQ0VfTE9HCgogIH07CgoKCgoKZW51bQogIHsKICAgIF9DU19QQVRILAoKCgoK
ICAgIF9DU19MRlNfQ0ZMQUdTID0gMTAwMCwKCiAgICBfQ1NfTEZTX0xERkxBR1MsCgogICAgX0NT
X0xGU19MSUJTLAoKICAgIF9DU19MRlNfTElOVEZMQUdTLAoKICAgIF9DU19MRlM2NF9DRkxBR1Ms
CgogICAgX0NTX0xGUzY0X0xERkxBR1MsCgogICAgX0NTX0xGUzY0X0xJQlMsCgogICAgX0NTX0xG
UzY0X0xJTlRGTEFHUywKCgoKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9DRkxBR1MgPSAxMTAw
LAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJf
T0ZGMzJfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MSU5URkxBR1MsCgogICAgX0NT
X1hCUzVfSUxQMzJfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTERG
TEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAz
Ml9PRkZCSUdfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoKICAg
IF9DU19YQlM1X0xQNjRfT0ZGNjRfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xJ
QlMsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfTFBC
SUdfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTERGTEFHUywKCiAg
ICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdf
TElOVEZMQUdTLAoKCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0NGTEFHUywKCiAgICBf
Q1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTERGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJf
T0ZGMzJfTElCUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTElOVEZMQUdTLAoKICAg
IF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfQ0ZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAz
Ml9PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xJQlMsCgog
ICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MSU5URkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2
X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0X0xERkxBR1Ms
CgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElCUywKCiAgICBfQ1NfUE9TSVhfVjZfTFA2
NF9PRkY2NF9MSU5URkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19DRkxBR1Ms
CgogICAgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MREZMQUdTLAoKICAgIF9DU19QT1NJWF9W
Nl9MUEJJR19PRkZCSUdfTElCUywKCiAgICBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJTlRG
TEFHUywKCgoKICAgIF9DU19WNl9XSURUSF9SRVNUUklDVEVEX0VOVlMKCiAgfTsKIyA1MDEgIi91
c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzIDQKCgpleHRlcm4gbG9uZyBpbnQgcGF0aGNvbmYgKF9f
Y29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBp
bnQgZnBhdGhjb25mIChpbnQgX19mZCwgaW50IF9fbmFtZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv
bmcgaW50IHN5c2NvbmYgKGludCBfX25hbWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgoKZXh0ZXJuIHNpemVfdCBjb25mc3RyIChpbnQgX19uYW1lLCBjaGFyICpfX2J1
Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX3BpZF90IGdldHBpZCAodm9p
ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cHBpZCAodm9pZCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gX19waWRfdCBnZXRwZ3JwICh2b2lkKSB0aHJvdyAoKTsKIyA1MzYgIi91c3IvaW5j
bHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBfX3BpZF90IF9fZ2V0cGdpZCAoX19waWRfdCBfX3Bp
ZCkgdGhyb3cgKCk7CgpleHRlcm4gX19waWRfdCBnZXRwZ2lkIChfX3BpZF90IF9fcGlkKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGludCBzZXRwZ2lkIChfX3BpZF90IF9fcGlkLCBfX3BpZF90IF9f
cGdpZCkgdGhyb3cgKCk7CiMgNTYyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4g
aW50IHNldHBncnAgKHZvaWQpIHRocm93ICgpOwojIDU4MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o
IiAzIDQKZXh0ZXJuIF9fcGlkX3Qgc2V0c2lkICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9f
cGlkX3QgZ2V0c2lkIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fdWlkX3Qg
Z2V0dWlkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gX191aWRfdCBnZXRldWlkICh2b2lkKSB0
aHJvdyAoKTsKCgpleHRlcm4gX19naWRfdCBnZXRnaWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVy
biBfX2dpZF90IGdldGVnaWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBnZXRncm91
cHMgKGludCBfX3NpemUsIF9fZ2lkX3QgX19saXN0W10pIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IGdyb3VwX21lbWJlciAoX19naWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQg
c2V0dWlkIChfX3VpZF90IF9fdWlkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0cmV1aWQg
KF9fdWlkX3QgX19ydWlkLCBfX3VpZF90IF9fZXVpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IHNldGV1aWQgKF9fdWlkX3QgX191aWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldGdp
ZCAoX19naWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldHJlZ2lkIChfX2dp
ZF90IF9fcmdpZCwgX19naWRfdCBfX2VnaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRl
Z2lkIChfX2dpZF90IF9fZ2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgZm9yayAo
dm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBfX3BpZF90IHZmb3JrICh2b2lkKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gY2hhciAqdHR5bmFtZSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHR0eW5hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4p
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzYXR0eSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgdHR5c2xvdCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGxpbmsg
KF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHN5bWxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9f
dG8pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCByZWFkbGluayAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fcGF0aCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmxpbmsgKF9fY29uc3Qg
Y2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHJtZGlyIChfX2NvbnN0IGNoYXIg
Kl9fcGF0aCkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX3BpZF90IHRjZ2V0cGdycCAoaW50IF9fZmQp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGNzZXRwZ3JwIChpbnQgX19mZCwgX19waWRfdCBfX3Bn
cnBfaWQpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZ2V0bG9naW4gKHZvaWQpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBnZXRsb2dpbl9yIChjaGFyICpfX25hbWUsIHNpemVfdCBfX25hbWVf
bGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0bG9naW4gKF9fY29uc3QgY2hhciAqX19u
YW1lKSB0aHJvdyAoKTsKIyA3MjYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CiMgMSAiL3Vz
ci9pbmNsdWRlL2dldG9wdC5oIiAxIDMgNAojIDM4ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMg
NApleHRlcm4gIkMiIHsKIyA0NyAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzIDQKZXh0ZXJuIGNo
YXIgKm9wdGFyZzsKIyA2MSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzIDQKZXh0ZXJuIGludCBv
cHRpbmQ7CgoKCgpleHRlcm4gaW50IG9wdGVycjsKCgoKZXh0ZXJuIGludCBvcHRvcHQ7CiMgMTQ1
ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMgNApleHRlcm4gaW50IGdldG9wdCAoaW50IF9fX2Fy
Z2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LCBjb25zdCBjaGFyICpfX3Nob3J0b3B0cyk7CiMgMTc1
ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMgNAp9CiMgNzI3ICIvdXNyL2luY2x1ZGUvdW5pc3Rk
LmgiIDIgMyA0CgoKCgoKCgpleHRlcm4gaW50IGdldGhvc3RuYW1lIChjaGFyICpfX25hbWUsIHNp
emVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgc2V0aG9zdG5hbWUgKF9fY29u
c3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNl
dGhvc3RpZCAobG9uZyBpbnQgX19pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRkb21h
aW5uYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQg
c2V0ZG9tYWlubmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCB2aGFuZ3VwICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHJldm9rZSAoX19jb25zdCBjaGFyICpfX2ZpbGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGlu
dCBwcm9maWwgKHVuc2lnbmVkIHNob3J0IGludCAqX19zYW1wbGVfYnVmZmVyLCBzaXplX3QgX19z
aXplLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2Zmc2V0LCB1bnNpZ25lZCBpbnQgX19z
Y2FsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBhY2N0IChfX2NvbnN0IGNoYXIgKl9fbmFt
ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXR1c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgp
OwpleHRlcm4gdm9pZCBlbmR1c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgpOwpleHRlcm4gdm9pZCBz
ZXR1c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZGFlbW9uIChpbnQg
X19ub2NoZGlyLCBpbnQgX19ub2Nsb3NlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjaHJv
b3QgKF9fY29uc3QgY2hhciAqX19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldHBh
c3MgKF9fY29uc3QgY2hhciAqX19wcm9tcHQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZnN5
bmMgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGdldGhvc3RpZCAo
dm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3luYyAodm9pZCkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IGdldHBhZ2VzaXplICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHRydW5jYXRlIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwg
X19vZmZfdCBfX2xlbmd0aCkgdGhyb3cgKCk7CiMgODM2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi
IDMgNApleHRlcm4gaW50IHRydW5jYXRlNjQgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX29mZjY0
X3QgX19sZW5ndGgpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmdHJ1bmNhdGUgKGludCBfX2Zk
LCBfX29mZl90IF9fbGVuZ3RoKSB0aHJvdyAoKTsKIyA4NTEgIi91c3IvaW5jbHVkZS91bmlzdGQu
aCIgMyA0CmV4dGVybiBpbnQgZnRydW5jYXRlNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19sZW5n
dGgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAodm9pZCkgdGhyb3cg
KCk7CiMgODY2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gaW50IGJyayAodm9p
ZCAqX19hZGRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqc2JyayAoaW50cHRyX3QgX19k
ZWx0YSkgdGhyb3cgKCk7CiMgODg3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4g
bG9uZyBpbnQgc3lzY2FsbCAobG9uZyBpbnQgX19zeXNubywgLi4uKSB0aHJvdyAoKTsKIyA5MDcg
Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBpbnQgbG9ja2YgKGludCBfX2ZkLCBp
bnQgX19jbWQsIF9fb2ZmX3QgX19sZW4pIHRocm93ICgpOwojIDkxNyAiL3Vzci9pbmNsdWRlL3Vu
aXN0ZC5oIiAzIDQKZXh0ZXJuIGludCBsb2NrZjY0IChpbnQgX19mZCwgaW50IF9fY21kLCBfX29m
ZjY0X3QgX19sZW4pIHRocm93ICgpOwojIDkzOCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQK
ZXh0ZXJuIGludCBmZGF0YXN5bmMgKGludCBfX2ZpbGRlcykgdGhyb3cgKCk7CgoKCgoKCgpleHRl
cm4gY2hhciAqY3J5cHQgKF9fY29uc3QgY2hhciAqX19rZXksIF9fY29uc3QgY2hhciAqX19zYWx0
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgZW5jcnlwdCAoY2hhciAqX19ibG9jaywgaW50IF9f
ZWRmbGFnKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc3dhYiAoX19jb25zdCB2b2lkICpf
X3Jlc3RyaWN0IF9fZnJvbSwgdm9pZCAqX19yZXN0cmljdCBfX3RvLAogICAgICAgICAgICAgICAg
ICBzc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hh
ciAqX19zKSB0aHJvdyAoKTsKIyA5ODMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVy
biBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgpOwoKCn0KIyAzOSAi
L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUt
c3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDIgMwoKdHlwZWRlZiBw
dGhyZWFkX2tleV90IF9fZ3RocmVhZF9rZXlfdDsKdHlwZWRlZiBwdGhyZWFkX29uY2VfdCBfX2d0
aHJlYWRfb25jZV90Owp0eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCBfX2d0aHJlYWRfbXV0ZXhfdDsK
CgoKCgoKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfb25jZQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlf
Y3JlYXRlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9kZWxldGUKI3ByYWdtYSB3ZWFrIHB0aHJl
YWRfZ2V0c3BlY2lmaWMKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfc2V0c3BlY2lmaWMKI3ByYWdtYSB3
ZWFrIHB0aHJlYWRfY3JlYXRlCgojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF9sb2NrCiNwcmFn
bWEgd2VhayBwdGhyZWFkX211dGV4X3RyeWxvY2sKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhf
dW5sb2NrCiMgODcgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUv
YysrLzMuNS10cmVlLXNzYS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAz
CnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHN0YXRpYyB2
b2lkICpjb25zdCBfX2d0aHJlYWRfYWN0aXZlX3B0ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0
ZTsKICByZXR1cm4gX19ndGhyZWFkX2FjdGl2ZV9wdHIgIT0gMDsKfQojIDQ0OSAiL25vdG5mcy9m
Y2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2k2ODYt
cGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19n
dGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZvaWQgKCpmdW5jKSAodm9pZCkp
CnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfb25jZSAo
b25jZSwgZnVuYyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9CgpzdGF0aWMgaW5saW5lIGludApf
X2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpkdG9yKSAo
dm9pZCAqKSkKewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVhdGUgKGtleSwgZHRvcik7Cn0KCnN0
YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZGVsZXRlIChfX2d0aHJlYWRfa2V5X3Qga2V5
KQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2RlbGV0ZSAoa2V5KTsKfQoKc3RhdGljIGlubGluZSB2
b2lkICoKX19ndGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5KQp7CiAgcmV0
dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMgKGtleSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3Ro
cmVhZF9zZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IGtleSwgY29uc3Qgdm9pZCAqcHRyKQp7
CiAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgcHRyKTsKfQoKc3RhdGljIGlubGlu
ZSBpbnQKX19ndGhyZWFkX211dGV4X2xvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewog
IGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF9sb2Nr
IChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3Ro
cmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19n
dGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAobXV0
ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRf
bXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFk
X2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChtdXRleCk7CiAg
ZWxzZQogICAgcmV0dXJuIDA7Cn0KIyA5NyAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFw
L0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Ro
ci5oIiAyIDMKIyAzOCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVk
ZS9jKysvMy41LXRyZWUtc3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMiAzCgpu
YW1lc3BhY2Ugc3RkCnsKCiAgdHlwZWRlZiBsb25nIHN0cmVhbW9mZjsKICB0eXBlZGVmIHB0cmRp
ZmZfdCBzdHJlYW1zaXplOwoKICB0eXBlZGVmIHB0cmRpZmZfdCB3c3RyZWFtc2l6ZTsKCiAgdHlw
ZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsKCiAgdHlwZWRlZiBfX2d0aHJlYWRfbXV0ZXhfdCBf
X2NfbG9jazsKCgogIHR5cGVkZWYgRklMRSBfX2NfZmlsZTsKCgogIHN0cnVjdCBfX2lvc19mbGFn
cwogIHsKICAgIHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsKCiAgICBzdGF0aWMgY29uc3QgX19p
bnRfdHlwZSBfU19ib29sYWxwaGEgPSAweDAwMDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19kZWMgPSAweDAwMDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhlZCA9
IDB4MDAwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2hleCA9IDB4MDAwODsKICAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ludGVybmFsID0gMHgwMDEwOwogICAgc3RhdGlj
IGNvbnN0IF9faW50X3R5cGUgX1NfbGVmdCA9IDB4MDAyMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX29jdCA9IDB4MDA0MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Jp
Z2h0ID0gMHgwMDgwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2NpZW50aWZpYyA9
IDB4MDEwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3diYXNlID0gMHgwMjAw
OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOwogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvcyA9IDB4MDgwMDsKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX3NraXB3cyA9IDB4MTAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX3VuaXRidWYgPSAweDIwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf
U191cHBlcmNhc2UgPSAweDQwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hZGp1
c3RmaWVsZCA9IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4MDAwMiB8IDB4MDA0MCB8IDB4MDAwODsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7CgoKICAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19lb2ZiaXQgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfZmFpbGJpdCA9IDB4MDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Fw
cCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hdGUgPSAweDAyOwogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmluID0gMHgwNDsKICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX2luID0gMHgwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291
dCA9IDB4MTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU190cnVuYyA9IDB4MjA7CiAg
fTsKfQojIDQ1ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2Mr
Ky8zLjUtdHJlZS1zc2EvYml0cy9mcG9zLmgiIDIgMwojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1n
Y2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9jd2NoYXIiIDEgMwojIDQ4
ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJl
ZS1zc2EvY3djaGFyIiAzCgoKCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO
U1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2N0aW1lIiAxIDMKIyA0OCAiL25vdG5mcy9mY2hl
L0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2N0aW1lIiAz
CiMgNjQgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMu
NS10cmVlLXNzYS9jdGltZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmNsb2NrX3Q7CiAg
dXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAgdXNpbmcgOjpjbG9jazsKICB1c2luZyA6
OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0aW1lOwogIHVzaW5nIDo6dGltZTsKICB1c2luZyA6OmFz
Y3RpbWU7CiAgdXNpbmcgOjpjdGltZTsKICB1c2luZyA6OmdtdGltZTsKICB1c2luZyA6OmxvY2Fs
dGltZTsKICB1c2luZyA6OnN0cmZ0aW1lOwp9CiMgNTIgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2Mt
bXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9jd2NoYXIiIDIgMwoKCiMgMSAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMyA0CiMgNDAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz
IDQKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9zdGRhcmcuaCIgMSAzIDQKIyA0
MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CgoKCgoKCgojIDEgIi9ub3RuZnMvZmNoZS9C
VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10
cmVlLXNzYS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIu
aCIgMiAzIDQKIyA4NSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAp0eXBlZGVmIF9fbWJzdGF0
ZV90IG1ic3RhdGVfdDsKIyAxMDUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKc3RydWN0IHRt
OwoKCmV4dGVybiAiQyIgewoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4
dGVybiB3Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93
ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
c3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChfX2Nv
bnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3
Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgd2NzY2FzZWNt
cCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25z
dCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gaW50IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9f
czEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9fd2NzbmNhc2VjbXBfbCAoX19j
b25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgd2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFy
X3QgKl9fczIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9f
d2NzY29sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwK
ICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCmV4
dGVybiBzaXplX3QgX193Y3N4ZnJtX2wgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAq
X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBf
X2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hhcl90
ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB3
Y2hhcl90ICp3Y3NjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3
Y3NyY2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hy
bnVsIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2Nv
bnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChf
X2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3Bi
cmsgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAq
d2Nzc3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19u
ZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVy
biB3Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3
Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGlt
LAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3B0cikgdGhy
b3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NubGVu
IChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKF9f
Y29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHdtZW1jbXAgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5ICh3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hh
cl90ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90
ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hh
cl90ICp3bWVtcGNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQog
ICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBtYnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0
cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19w
KSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjcnRvbWIgKGNoYXIgKl9fcmVzdHJpY3QgX19z
LCB3Y2hhcl90IF9fd2MsCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3Ry
aWN0IF9fcHMpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIG1i
c3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBtYnJsZW4g
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAg
ICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CiMgMjk3ICIvdXNy
L2luY2x1ZGUvd2NoYXIuaCIgMyA0CmV4dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoq
X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg
bWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdj
c3J0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gc2l6ZV90IG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3Ny
Yywgc2l6ZV90IF9fbm1jLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwg
bWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdj
c25ydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19ud2MsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBp
bnQgd2N3aWR0aCAod2NoYXJfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjc3dpZHRo
IChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7
CgoKCmV4dGVybiBmbG9hdCB3Y3N0b2YgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0
aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y
ZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoK
CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKX19l
eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0
ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2NzdG9sbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQxMCAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDMgNApleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfbCAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQg
bG9uZyBpbnQgX193Y3N0b3VsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
YmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBs
b25nIGxvbmcgaW50IF9fd2NzdG9sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl
LCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cg
KCk7CgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQg
X193Y3N0b2ZfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90
IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9sIChf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBk
b3VibGUgX193Y3N0b2RfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fd2Nz
dG9mX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9p
bnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJv
dyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5z
aWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19ucHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoK
Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2ludGVybmFsIChf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3Vw
KSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu
dCBfX3djc3RvdWxsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq
KgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jl
c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CiMgNTI4ICIvdXNyL2luY2x1
ZGUvd2NoYXIuaCIgMyA0CmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3QgKl9fZGVzdCwg
X19jb25zdCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3Bu
Y3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNpemVfdCBfX24p
CiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGZ3aWRlIChfX0ZJTEUgKl9fZnAsIGlu
dCBfX21vZGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3ByaW50
ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cg
KCkgOwoKZXh0ZXJuIGludCBzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVf
dCBfX24sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZmd3ByaW50ZiAoX19G
SUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9s
aXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdndwcmludGYgKF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVj
X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCmV4dGVybiBpbnQgdnN3cHJpbnRmICh3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAg
ICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoKZXh0ZXJuIGludCBm
d3NjYW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkg
OwoKZXh0ZXJuIGludCB3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1h
dCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dzY2FuZiAoX19jb25zdCB3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKCgpleHRlcm4gaW50
IHZmd3NjYW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg
IF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdndzY2Fu
ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAg
ICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdnN3
c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg
ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIHdp
bnRfdCBmZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IGdl
dHdjIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGdldHdjaGFy
ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2MgKHdjaGFyX3QgX193Yywg
X19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgcHV0d2MgKHdjaGFyX3Qg
X193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hh
ciAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90ICpmZ2V0d3MgKHdj
aGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg
X19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGZwdXR3
cyAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAgICBf
X0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHVu
Z2V0d2MgKHdpbnRfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gd2ludF90IGdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0
ZXJuIHdpbnRfdCBnZXR3Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdp
bnRfdCBmZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVy
biB3aW50X3QgZnB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2Ms
IF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IHB1dHdjaGFyX3VubG9j
a2VkICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdzX3Vu
bG9ja2VkICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBmcHV0d3NfdW5sb2NrZWQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX3dzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NmdGltZSAod2NoYXJfdCAq
X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CiMgNjgw
ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0Cn0KIyA1NSAiL25vdG5mcy9mY2hlL0JVSUxELWdj
Yy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2N3Y2hhciIgMiAzCiMgNjkg
Ii9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVl
LXNzYS9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptYnN0YXRlX3Q7Cn0KIyAx
MzMgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10
cmVlLXNzYS9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVz
aW5nIDo6YnRvd2M7CiAgdXNpbmcgOjpmZ2V0d2M7CiAgdXNpbmcgOjpmZ2V0d3M7CiAgdXNpbmcg
OjpmcHV0d2M7CiAgdXNpbmcgOjpmcHV0d3M7CiAgdXNpbmcgOjpmd2lkZTsKICB1c2luZyA6OmZ3
cHJpbnRmOwogIHVzaW5nIDo6ZndzY2FuZjsKICB1c2luZyA6OmdldHdjOwogIHVzaW5nIDo6Z2V0
d2NoYXI7CiAgdXNpbmcgOjptYnJsZW47CiAgdXNpbmcgOjptYnJ0b3djOwogIHVzaW5nIDo6bWJz
aW5pdDsKICB1c2luZyA6Om1ic3J0b3djczsKICB1c2luZyA6OnB1dHdjOwogIHVzaW5nIDo6cHV0
d2NoYXI7CiAgdXNpbmcgOjpzd3ByaW50ZjsKICB1c2luZyA6OnN3c2NhbmY7CiAgdXNpbmcgOjp1
bmdldHdjOwogIHVzaW5nIDo6dmZ3cHJpbnRmOwogIHVzaW5nIDo6dmZ3c2NhbmY7CiAgdXNpbmcg
Ojp2c3dwcmludGY7CiAgdXNpbmcgOjp2c3dzY2FuZjsKICB1c2luZyA6OnZ3cHJpbnRmOwogIHVz
aW5nIDo6dndzY2FuZjsKICB1c2luZyA6OndjcnRvbWI7CiAgdXNpbmcgOjp3Y3NjYXQ7CiAgdXNp
bmcgOjp3Y3NjbXA7CiAgdXNpbmcgOjp3Y3Njb2xsOwogIHVzaW5nIDo6d2NzY3B5OwogIHVzaW5n
IDo6d2NzY3NwbjsKICB1c2luZyA6Ondjc2Z0aW1lOwogIHVzaW5nIDo6d2NzbGVuOwogIHVzaW5n
IDo6d2NzbmNhdDsKICB1c2luZyA6Ondjc25jbXA7CiAgdXNpbmcgOjp3Y3NuY3B5OwogIHVzaW5n
IDo6d2NzcnRvbWJzOwogIHVzaW5nIDo6d2Nzc3BuOwogIHVzaW5nIDo6d2NzdG9kOwogIHVzaW5n
IDo6d2NzdG9mOwogIHVzaW5nIDo6d2NzdG9rOwogIHVzaW5nIDo6d2NzdG9sOwogIHVzaW5nIDo6
d2NzdG91bDsKICB1c2luZyA6Ondjc3hmcm07CiAgdXNpbmcgOjp3Y3RvYjsKICB1c2luZyA6Ondt
ZW1jbXA7CiAgdXNpbmcgOjp3bWVtY3B5OwogIHVzaW5nIDo6d21lbW1vdmU7CiAgdXNpbmcgOjp3
bWVtc2V0OwogIHVzaW5nIDo6d3ByaW50ZjsKICB1c2luZyA6OndzY2FuZjsKCiAgdXNpbmcgOjp3
Y3NjaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc2Nocih3Y2hhcl90KiBfX3AsIHdjaGFyX3Qg
X19jKQogIHsgcmV0dXJuIHdjc2Nocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBf
X2MpOyB9CgogIHVzaW5nIDo6d2NzcGJyazsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcGJyayh3
Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsgcmV0dXJuIHdjc3BicmsoY29uc3RfY2Fz
dDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6d2NzcmNocjsKCiAg
aW5saW5lIHdjaGFyX3QqCiAgd2NzcmNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsg
cmV0dXJuIHdjc3JjaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoK
ICB1c2luZyA6Ondjc3N0cjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2Nzc3RyKHdjaGFyX3QqIF9f
czEsIHdjaGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2Nzc3RyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2No
YXJfdCo+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OndtZW1jaHI7CgogIGlubGluZSB3Y2hh
cl90KgogIHdtZW1jaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICB7
IHJldHVybiB3bWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYywgX19u
KTsgfQp9CgoKCgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6Ondjc3RvbGQ7CiAg
dXNpbmcgOjp3Y3N0b2xsOwogIHVzaW5nIDo6d2NzdG91bGw7Cn0KCm5hbWVzcGFjZSBzdGQKewog
IHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sZDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvbGw7CiAg
dXNpbmcgX19nbnVfY3h4Ojp3Y3N0b3VsbDsKfQojIDQ2ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2Nj
LW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9mcG9zLmgiIDIgMwoK
bmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNs
YXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX1N0YXRlVCBfX3N0YXRl
X3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFtb2ZmIF9NX29mZjsKICAgICAgX19zdGF0
ZV90eXBlIF9NX3N0OwoKICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90eXBlCiAgICAgIHN0YXRl
KCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAgICAgc3RhdGUoX19zdGF0
ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZwb3MoKTogX01fb2ZmKHN0
cmVhbW9mZigpKSwgX01fc3QoX19zdGF0ZV90eXBlKCkpIHsgfQoKICAgICAgZnBvcyhzdHJlYW1v
ZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpCiAgICAgIDogX01f
b2ZmKF9fb2ZmKSwgX01fc3QoX19zdCkgeyB9CgogICAgICBvcGVyYXRvciBzdHJlYW1vZmYoKSBj
b25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yKz0oc3Ry
ZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBm
cG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0gX19vZmY7
IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvcisoc3RyZWFtb2ZmIF9f
b2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCArPSBfX29m
ZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9y
LShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAg
ICAgX190IC09IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGJvb2wK
ICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4g
X01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciE9KGNv
bnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19wb3MuX01f
b2ZmOyB9CgogICAgICBzdHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBfTV9vZmY7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2ZmIF9fb2Zm
KSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAgICB9OwoKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4g
c3RyZWFtcG9zOwoKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gd3N0cmVhbXBvczsKCn0KIyA1
MCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRy
ZWUtc3NhL2lvc2Z3ZCIgMiAzCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO
U1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQg
Ii9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVl
LXNzYS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11
ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvZXhjZXB0aW9uX2RlZmluZXMuaCIg
MSAzCiMgMzUgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysr
LzMuNS10cmVlLXNzYS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgog
IHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i
YWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9p
ZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVy
Zmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3df
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNv
bnN0IGNoYXIqIF9fcyk7Cn0KIyA1MSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO
U1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2lvc2Z3ZCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBi
YXNpY19zdHJlYW1idWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8
X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNz
IGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2Mg
PSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdidWY7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
VD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAg
Y2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFt
ZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3Ry
ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxf
Q2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBj
bGFzcyBiYXNpY19maWxlYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFt
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry
YWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAg
IGNsYXNzIGJhc2ljX2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9p
dGVyYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g
Y2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKCgog
IGNsYXNzIGlvc19iYXNlOwojIDEzNiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO
U1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2lvc2Z3ZCIgMwogIHR5cGVkZWYgYmFzaWNfaW9z
PGNoYXI+IGlvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiBzdHJlYW1idWY7CiAg
dHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3Ry
ZWFtPGNoYXI+IG9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyPiBpb3N0cmVh
bTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7CiAgdHlwZWRlZiBi
YXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19v
c3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdz
dHJlYW08Y2hhcj4gc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyPiBm
aWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07CiAgdHlwZWRl
ZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08
Y2hhcj4gZnN0cmVhbTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+IHdpb3M7CiAgdHlw
ZWRlZiBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2lj
X2lzdHJlYW08d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPHdjaGFy
X3Q+IHdvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08d2NoYXJfdD4gd2lvc3RyZWFt
OwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdidWY7CiAgdHlwZWRl
ZiBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYg
YmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJh
c2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNf
ZmlsZWJ1Zjx3Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPHdjaGFy
X3Q+IHdpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+IHdvZnN0cmVh
bTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07CgoKfQojIDcxICIv
bm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1z
c2EvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1t
dWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX3BhaXIuaCIgMSAz
CiMgNjQgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMu
NS10cmVlLXNzYS9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKdGVtcGxhdGUg
PGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7CiAgdHlwZWRlZiBfVDEgZmlyc3Rf
dHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAgX1QxIGZpcnN0OwogIF9UMiBzZWNv
bmQ7CgoKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9CgoKCgogIHBhaXIoY29uc3Qg
X1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29uZChfX2IpIHt9CgoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihjb25zdCBwYWlyPF9VMSwg
X1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vjb25kKSB7fQp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAg
cmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25k
Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRv
cjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkK
ewogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwKICAgICAgICAgKCEoX195LmZpcnN0
IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgcGFpcjxf
VDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9f
eCA9PSBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9v
bCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9U
Mj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj
bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9f
eCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0K
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPj0o
Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewog
IHJldHVybiAhKF9feCA8IF9feSk7Cn0KIyAxNDAgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVk
ZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9wYWlyLmgiIDMKdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoKCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtl
X3BhaXIoX1QxIF9feCwgX1QyIF9feSkKCgoKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gs
IF9feSk7Cn0KCn0KIyA3MiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5j
bHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ub3Ru
ZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9i
aXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDUzICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZs
YXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy90eXBlX3RyYWl0cy5oIiAzCiMg
OTAgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10
cmVlLXNzYS9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKc3RydWN0IF9fdHJ1ZV90eXBlIHt9OwpzdHJ1
Y3QgX19mYWxzZV90eXBlIHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90
cmFpdHMgewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVf
Zmlyc3Q7CiMgMTEzICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRl
L2MrKy8zLjUtdHJlZS1zc2EvYml0cy90eXBlX3RyYWl0cy5oIiAzCiAgIHR5cGVkZWYgX19mYWxz
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxz
ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90
eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGlzX1BP
RF90eXBlOwp9OwoKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29sPiB7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Y2hh
cj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVm
YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP
RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2ln
bmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVm
YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxs
b25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190
eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91
YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBfX3R5cGVfdHJhaXRzPF9UcCo+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7CiAgdHlwZWRlZiBfX2ZhbHNlX3R5
cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz
X2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln
bmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J
bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
ZWdlcjx1bnNpZ25lZCBzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9
OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7CiAgdHlwZWRlZiBfX3RydWVf
dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25l
ZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9Jc19pbnRlZ2VyPGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmc+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19p
bnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0
cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX05vcm1h
bDsKfTsKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0
b3IsIHR5cGVuYW1lIF9Db250YWluZXI+IGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yOwp9Cgp0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CnN0cnVjdCBfSXNf
bm9ybWFsX2l0ZXJhdG9yPCBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwg
X0NvbnRhaW5lcj4gPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsKfTsKIyA3MyAi
L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUt
c3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2Mt
bXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9pdGVyYXRvcl9i
YXNlX3R5cGVzLmgiIDEgMwojIDY4ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T
VC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5o
IiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA4MCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFw
L0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlw
ZXMuaCIgMwogIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCBvdXRwdXRf
aXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMg
aW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsK
IyAxMDIgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMu
NS10cmVlLXNzYS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2F0ZWdvcnksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Rpc3RhbmNlID0gcHRy
ZGlmZl90LAogICAgICAgICAgIHR5cGVuYW1lIF9Qb2ludGVyID0gX1RwKiwgdHlwZW5hbWUgX1Jl
ZmVyZW5jZSA9IF9UcCY+CiAgICBzdHJ1Y3QgaXRlcmF0b3IKICAgIHsKCiAgICAgIHR5cGVkZWYg
X0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlw
ZTsKCiAgICAgIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVk
ZWYgX1BvaW50ZXIgcG9pbnRlcjsKCiAgICAgIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7
CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBzdHJ1Y3Qg
aXRlcmF0b3JfdHJhaXRzIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJh
dG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J
dGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J
dGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICAgICAgdHlwZWRl
ZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlw
ZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90
eXBlOwogICAgICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVy
ZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRv
cl90cmFpdHM8Y29uc3QgX1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwog
ICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgY29u
c3QgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOwogICAg
fTsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICBpbmxpbmUgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9faXRlcmF0b3Jf
Y2F0ZWdvcnkoY29uc3QgX0l0ZXImKQogICAgeyByZXR1cm4gdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKTsgfQoKfQojIDc0ICIvbm90bmZzL2ZjaGUv
QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxf
YWxnb2Jhc2UuaCIgMiAzCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv
aW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIg
MSAzCiMgNjggIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysr
LzMuNS10cmVlLXNzYS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKIyAxICIvbm90
bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2Ev
Yml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM5ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11
ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9jb25jZXB0X2NoZWNrLmgi
IDMKIyA2OSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysv
My41LXRyZWUtc3NhL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMiAzCgpuYW1lc3Bh
Y2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgIGlubGluZSB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUK
ICAgIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKICAg
ICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90
eXBlIF9fbiA9IDA7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICsr
X19maXJzdDsgKytfX247CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAg
IF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn
KQogICAgewoKICAgICAKICAgICAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7CiAgICB9CiMgMTA5
ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJl
ZS1zc2EvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlcmF0b3I+CiAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
bnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBkaXN0YW5jZShfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICB7CgogICAgICByZXR1cm4gX19k
aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+
CiAgICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNl
IF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKICAgICAgd2hpbGUgKF9fbi0t
KSArK19faTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRv
ciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIHZvaWQKICAgIF9fYWR2YW5jZShfQmlk
aXJlY3Rpb25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKICAgICAgaWYgKF9fbiA+IDAp
CiAgICAgICAgd2hpbGUgKF9fbi0tKSArK19faTsKICAgICAgZWxzZQogICAgICAgIHdoaWxlIChf
X24rKykgLS1fX2k7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIHZvaWQKICAgIF9fYWR2YW5jZShf
UmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCiAgICAgIF9faSArPSBfX247
CiAgICB9CiMgMTYyICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRl
L2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlu
bGluZSB2b2lkCiAgICBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24p
CiAgICB7CgogICAgICBfX2FkdmFuY2UoX19pLCBfX24sIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19p
KSk7CiAgICB9Cn0KIyA3NSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5j
bHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ub3Ru
ZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9i
aXRzL3N0bF9pdGVyYXRvci5oIiAxIDMKIyA2OCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRm
bGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMK
bmFtZXNwYWNlIHN0ZAp7CiMgODkgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNU
L2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgY2xhc3MgcmV2ZXJzZV9pdGVyYXRvcgogICAgOiBw
dWJsaWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJh
dG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAgICAg
ICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIs
CiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y
Pjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgY3VycmVu
dDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVu
Y2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsK
CiAgICBwdWJsaWM6CgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IoKSB7IH0KCgoKCiAgICAgIGV4
cGxpY2l0CiAgICAgIHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3VycmVu
dChfX3gpIHsgfQoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJh
dG9yJiBfX3gpCiAgICAgIDogY3VycmVudChfX3guY3VycmVudCkgeyB9CgoKCgoKICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZl
cnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7
IH0KCgoKCiAgICAgIGl0ZXJhdG9yX3R5cGUKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1
cnJlbnQ7IH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAg
ICAgIHsKICAgICAgICBfSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgICAgIHJldHVybiAq
LS1fX3RtcDsKICAgICAgfQoKCgoKCgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBj
b25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIC0tY3VycmVudDsKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAg
ICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190bXAg
PSAqdGhpczsKICAgICAgICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9
CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKQogICAgICB7
CiAgICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgog
ICAgICByZXZlcnNlX2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAgICAgICAgcmV2
ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrY3VycmVudDsKICAgICAgICBy
ZXR1cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBv
cGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gcmV2ZXJz
ZV9pdGVyYXRvcihjdXJyZW50IC0gX19uKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9y
JgogICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBj
dXJyZW50IC09IF9fbjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAg
cmV2ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29u
c3QKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50ICsgX19uKTsgfQoKCgoK
CgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlw
ZSBfX24pCiAgICAgIHsKICAgICAgICBjdXJyZW50ICs9IF9fbjsKICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oZGlmZmVy
ZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0KICAgIH07CiMg
MjY5ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUt
dHJlZS1zc2EvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy
YXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0
b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9y
PF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAg
ICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4g
X195LmJhc2UoKSA8IF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAg
ICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAh
KF9feSA8IF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf
X3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195
KQogICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy
YXRvcj4KICAgIGlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZQogICAgb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNlKCk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPgogICAgb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6
ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9y
PF9JdGVyYXRvcj4mIF9feCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PihfX3guYmFzZSgpIC0gX19uKTsgfQojIDMyOSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRm
bGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgYmFja19pbnNlcnRfaXRl
cmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZv
aWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNv
bnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVy
X3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRh
aW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTUgIi9ub3RuZnMvZmNoZS9CVUlM
RC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9pdGVy
YXRvci5oIiAzCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlw
ZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAg
ICBjb250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgIH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyBy
ZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0
b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IKICAg
ICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDM4NiAiL25vdG5m
cy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2Jp
dHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAg
aW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBiYWNrX2luc2VydGVy
KF9Db250YWluZXImIF9feCkKICAgIHsgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250
YWluZXI+KF9feCk7IH0KIyA0MDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNU
L2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvcgog
ICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9p
ZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVy
OwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsK
CgogICAgICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6
IGNvbnRhaW5lcigmX194KSB7IH0KIyA0MjYgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh
cC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAg
ICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250
YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgY29udGFpbmVy
LT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAg
ICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRo
aXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7
IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvcgogICAgICBvcGVy
YXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNDU3ICIvbm90bmZzL2ZjaGUv
QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxf
aXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUg
ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBmcm9udF9pbnNlcnRlcihfQ29u
dGFpbmVyJiBfX3gpCiAgICB7IHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4oX194KTsgfQojIDQ3NiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5j
bHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1Ymxp
YyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgog
ICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgICAgIHR5
cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlw
ZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCgoKCiAgICAgIGluc2VydF9pdGVyYXRv
cihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAg
ICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQojIDUxOCAiL25vdG5mcy9mY2hlL0JV
SUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2l0
ZXJhdG9yLmgiIDMKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3Qg
dHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAg
ICAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CiAgICAgICAgKytp
dGVyOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAgICAgIGluc2VydF9pdGVyYXRv
ciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBpbnNlcnRfaXRl
cmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGluc2Vy
dF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9
OwojIDU1MCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysv
My41LXRyZWUtc3NhL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q29udGFpbmVyLCB0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+CiAgICBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kp
CiAgICB7CiAgICAgIHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6
Oml0ZXJhdG9yKF9faSkpOwogICAgfQp9CgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKCgoKCgoKCiAg
dXNpbmcgc3RkOjppdGVyYXRvcl90cmFpdHM7CiAgdXNpbmcgc3RkOjppdGVyYXRvcjsKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBf
X25vcm1hbF9pdGVyYXRvcgogICAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAog
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y
Pjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAg
IHByb3RlY3RlZDoKICAgICAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7CgogICAgcHVibGljOgogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNl
X3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyIHBvaW50ZXI7Cgog
ICAgICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkgeyB9Cgog
ICAgICBleHBsaWNpdAogICAgICBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfSXRlcmF0b3ImIF9f
aSkgOiBfTV9jdXJyZW50KF9faSkgeyB9CgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+
CiAgICAgIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlciwgX0NvbnRhaW5lcj4mIF9faSkKICAgICAgICA6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkg
eyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpf
TV9jdXJyZW50OyB9CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl
dHVybiBfTV9jdXJyZW50OyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0
b3IrKygpIHsgKytfTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0
ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihf
TV9jdXJyZW50KyspOyB9CgoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y
LS0oKSB7IC0tX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVy
YXRvcgogICAgICBvcGVyYXRvci0tKGludCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01f
Y3VycmVudC0tKTsgfQoKCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKGNvbnN0IGRp
ZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyZW50W19fbl07
IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGRpZmZl
cmVuY2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJlbnQgKz0gX19uOyByZXR1cm4gKnRoaXM7
IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJl
bmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01f
Y3VycmVudCArIF9fbik7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRv
ci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJlbnQgLT0gX19u
OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9y
LShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3Jt
YWxfaXRlcmF0b3IoX01fY3VycmVudCAtIF9fbik7IH0KCiAgICAgIGNvbnN0IF9JdGVyYXRvciYK
ICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KICAgIH07CiMgNjUxICIv
bm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1z
c2EvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckws
IHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wK
ICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWlu
ZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
clIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMu
YmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRh
aW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xo
cy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv
ckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJv
b2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250
YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19y
aHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0Nv
bnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25v
cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBf
X2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl
cmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGlu
ZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9D
b250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9f
cmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9D
b250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25v
cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBf
X2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh
dG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUg
Ym9vbAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29u
dGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jo
cy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29u
dGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y
PF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xo
cy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
TCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9v
bAogIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRh
aW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jo
cy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29u
dGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRv
cjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9f
bGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh
dG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUg
Ym9vbAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0Nv
bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBf
X3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBf
Q29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9f
bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJu
IF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAg
aW5saW5lIHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+
OjpkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhz
LmJhc2UoKSAtIF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3Is
IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ciwgX0NvbnRhaW5lcj4KICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQogIHsgcmV0
dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSAr
IF9fbik7IH0KfQojIDc2ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNs
dWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKbmFtZXNwYWNl
IHN0ZAp7CiMgOTEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUv
YysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIGlubGluZSB2b2lk
CiAgICBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6
dmFsdWVfdHlwZSBfVmFsdWVUeXBlMTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTI7CgoKICAgICAKICAg
ICAKICAgICAKICAgICAKCiAgICAgIF9WYWx1ZVR5cGUxIF9fdG1wID0gKl9fYTsKICAgICAgKl9f
YSA9ICpfX2I7CiAgICAgICpfX2IgPSBfX3RtcDsKICAgIH0KIyAxMTggIi9ub3RuZnMvZmNoZS9C
VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9h
bGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAg
IHN3YXAoX1RwJiBfX2EsIF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIF9UcCBfX3RtcCA9
IF9fYTsKICAgICAgX19hID0gX19iOwogICAgICBfX2IgPSBfX3RtcDsKICAgIH0KIyAxNDYgIi9u
b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz
YS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5s
aW5lIGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpCiAg
ICB7CgogICAgIAoKICAgICAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsK
ICAgIH0KIyAxNjYgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUv
YysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1heChjb25zdCBfVHAmIF9fYSwgY29u
c3QgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAgICAgaWYgKF9fYSA8IF9fYikgcmV0dXJuIF9f
YjsgcmV0dXJuIF9fYTsKICAgIH0KIyAxODYgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh
cC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25z
dCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0
dXJuIF9fYTsKICAgIH0KIyAyMDQgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNU
L2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAm
CiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9f
YTsKICAgIH0KIyAyMjEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1
ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1
dEl0ZXIKICAgIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgIGlucHV0X2l0ZXJhdG9y
X3RhZykKICAgIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwg
KytfX2ZpcnN0KQogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19y
ZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl
bmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZykKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKICAgICAg
Zm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pIHsK
ICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgICAg
KytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2NvcHlfdHJpdmlhbChjb25z
dCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgewog
ICAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIChfX2xhc3QgLSBf
X2ZpcnN0KSk7CiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+
CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwgX19mYWxzZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y
ZXN1bHQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJ
dGVyCiAgICBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAg
eyByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9faXRlcmF0b3JfY2F0
ZWdvcnkoX19maXJzdCkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBf
VHAqCiAgICBfX2NvcHlfYXV4MihfVHAqIF9fZmlyc3QsIF9UcCogX19sYXN0LAogICAgICAgICAg
ICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfdHJp
dmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X2F1eDIoY29uc3QgX1RwKiBfX2ZpcnN0LCBj
b25zdCBfVHAqIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9UcCogX19yZXN1bHQsIF9fdHJ1ZV90
eXBlKQogICAgeyByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0
ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTIoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9PdXRw
dXRJdGVyKF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fcmVzdWx0LmJhc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Ucml2aWFsKCkpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAg
IF9fY29weV9uaTIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUK
ICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0
czxfVmFsdWVUeXBlPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAg
X1RyaXZpYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9U
cml2aWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMShfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAg
IHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3Vs
dCwgX19Ob3JtYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5
cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkx
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7
CiAgICAgIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9y
bWFsKCkpOwogICAgfQojIDMzOSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv
aW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBf
T3V0cHV0SXRlcgogICAgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05v
cm1hbDsKICAgICAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQs
IF9fTm9ybWFsKCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgaW5saW5lIF9CaWRpcmVj
dGlvbmFsSXRlcjIKICAgIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmly
c3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAg
ICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcgogICAgX19jb3B5X2Jh
Y2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlw
ZSBfX247CiAgICAgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24p
CiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsK
ICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlw
ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQm9vbFR5cGU+
CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCiAgICB7CiAgICAgIHN0YXRpYyBf
QmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0
LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIyIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2Zp
cnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkp
OwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19j
b3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgewogICAg
ICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBf
X2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICBjb25zdCBwdHJkaWZmX3QgX051
bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9f
Zmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0IC0gX051
bTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9f
Y29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAg
IHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0
IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29w
eV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgICAgICAgIDo6
Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2Nv
cHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQp
CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czx0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IgX1RyaXZpYWw7CiAgICAgIHJldHVy
biBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAg
ICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVt
cGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAg
X19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkx
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIg
X19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX0JJMihfX2NvcHlfYmFja3dhcmRf
YXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFzZSgpKSk7IH0KCiAgdGVtcGxhdGUgPHR5
cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2Jh
Y2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQs
IF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwg
X19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1l
IF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9p
dGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9f
Tm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0
b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9
CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9C
STIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0
LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVy
biBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11
ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9C
STIKICAgIGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jl
c3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJu
IF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNTA5ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZs
YXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAog
ICAgZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3Qg
X1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19maXJzdCkKICAgICAgICAqX19maXJzdCA9IF9fdmFsdWU7CiAgICB9CiMgNTMxICIv
bm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1z
c2EvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVy
LCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZpbGxf
bihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKICAg
IHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAg
ICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKICBp
bmxpbmUgdm9pZAogIGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciog
X19sYXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWduZWQgY2hhciBf
X3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJzdCk7
CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBj
aGFyKiBfX2xhc3QsIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgc2lnbmVkIGNoYXIg
X190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChj
aGFyKiBfX2ZpcnN0LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7CiAgICBjaGFy
IF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
U2l6ZT4KICAgIGlubGluZSB1bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVkIGNoYXIq
IF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAgewogICAg
ICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0
ICsgX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBzaWdu
ZWQgY2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHNpZ25l
ZCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19j
KTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9TaXplPgogICAgaW5saW5lIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUg
X19uLCBjb25zdCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCAr
IF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMgNjA2ICIvbm90
bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2Ev
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0
eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgog
ICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAg
CgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9
PSAqX19maXJzdDIpIHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAg
ICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0
MSwgX19maXJzdDIpOwogICAgfQojIDY0MCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFw
L0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVu
YW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4K
ICAgIG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICBfQmluYXJ5UHJl
ZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgd2hpbGUgKF9f
Zmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0Mikp
IHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0KICAgICAg
cmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIp
OwogICAgfQojIDY2OCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVk
ZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBpbmxpbmUgYm9vbAog
ICAgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAg
ICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikK
ICAgICAgICBpZiAoISgqX19maXJzdDEgPT0gKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNjk5ICIvbm90bmZzL2ZjaGUvQlVJTEQt
Z2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxnb2Jh
c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ
dGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBib29sCiAgICBlcXVh
bChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w
cmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0
MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9f
Zmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4g
dHJ1ZTsKICAgIH0KIyA3MzIgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2lu
Y2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgYm9vbAogICAg
bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoK
CiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy
CiAgICAgICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmICgqX19m
aXJzdDEgPCAqX19maXJzdDIpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoKl9f
Zmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAg
IHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAgICB9
CiMgNzY3ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8z
LjUtdHJlZS1zc2EvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBi
b29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19m
aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgICAgIDsgKytf
X2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19m
aXJzdDIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJz
dDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0
dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0KCiAg
aW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFy
KiBfX2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgdW5zaWduZWQg
Y2hhciogX19sYXN0MikKICB7CiAgICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9f
Zmlyc3QxOwogICAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICAg
IGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIHN0ZDo6bWlu
KF9fbGVuMSwgX19sZW4yKSk7CiAgICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwg
MCA6IF9fbGVuMSA8IF9fbGVuMjsKICB9CgogIGlubGluZSBib29sCiAgbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9f
bGFzdDIpCiAgewoKICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2ln
bmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Y29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgogIH0K
Cn0KIyA4NyAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysv
My41LXRyZWUtc3NhL2JpdHMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxE
LWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2FsbG9j
LmgiIDEgMwojIDg0ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRl
L2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxsb2MuaCIgMwojIDEgIi9ub3RuZnMvZmNoZS9C
VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9jYXNzZXJ0IiAx
IDMKIyA0NyAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysv
My41LXRyZWUtc3NhL2Nhc3NlcnQiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMg
NAojIDY1ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMgNApleHRlcm4gIkMiIHsKCgpleHRlcm4g
dm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNo
YXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGlu
ZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50
IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNo
YXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0KIyA0OSAiL25vdG5mcy9m
Y2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2Nhc3Nl
cnQiIDIgMwojIDg1ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRl
L2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL25vdG5mcy9mY2hl
L0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvZnVu
Y3RleGNlcHQuaCIgMSAzCiMgMzQgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNU
L2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvbm90
bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2Ev
ZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVk
ZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIg
MwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7
CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i
YWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZv
aWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZh
bGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9l
cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29u
c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
ICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBf
X3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA4NiAiL25vdG5mcy9mY2hl
L0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3Rs
X2FsbG9jLmgiIDIgMwojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2lu
Y2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF90aHJlYWRzLmgiIDEgMwojIDU0ICIvbm90
bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2Ev
Yml0cy9zdGxfdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICBzdHJ1Y3QgX1JlZmNv
dW50X0Jhc2UKICB7CgogICAgdHlwZWRlZiBzaXplX3QgX1JDX3Q7CgoKICAgIHZvbGF0aWxlIF9S
Q190IF9NX3JlZl9jb3VudDsKCgogICAgX19ndGhyZWFkX211dGV4X3QgX01fcmVmX2NvdW50X2xv
Y2s7CgogICAgX1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6IF9NX3JlZl9jb3VudChfX24pCiAg
ICB7CgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfX3RtcCA9IHswLCAwLCAwLCBQVEhSRUFEX01V
VEVYX1RJTUVEX05QLCB7IDAsIDAgfX07CiAgICAgIF9NX3JlZl9jb3VudF9sb2NrID0gX190bXA7
CgoKCgoKICAgIH0KCiAgICB2b2lkCiAgICBfTV9pbmNyKCkKICAgIHsKICAgICAgX19ndGhyZWFk
X211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgKytfTV9yZWZfY291bnQ7CiAg
ICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgIH0KCiAg
ICBfUkNfdAogICAgX01fZGVjcigpCiAgICB7CiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZf
TV9yZWZfY291bnRfbG9jayk7CiAgICAgIHZvbGF0aWxlIF9SQ190IF9fdG1wID0gLS1fTV9yZWZf
Y291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsK
ICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQogIH07CiMgMTA5ICIvbm90bmZzL2ZjaGUvQlVJTEQt
Z2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfdGhyZWFk
cy5oIiAzCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBzdHJ1Y3QgX1N3YXBfbG9ja19zdHJ1
Y3QKICAgIHsgc3RhdGljIF9fZ3RocmVhZF9tdXRleF90IF9TX3N3YXBfbG9jazsgfTsKCiAgdGVt
cGxhdGU8aW50IF9fZHVtbXk+CiAgICBfX2d0aHJlYWRfbXV0ZXhfdAogICAgX1N3YXBfbG9ja19z
dHJ1Y3Q8X19kdW1teT46Ol9TX3N3YXBfbG9jayA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJ
TUVEX05QLCB7IDAsIDAgfX07CgoKCiAgaW5saW5lIHVuc2lnbmVkIGxvbmcKICBfQXRvbWljX3N3
YXAodW5zaWduZWQgbG9uZyAqIF9fcCwgdW5zaWduZWQgbG9uZyBfX3EpCiAgewogICAgX19ndGhy
ZWFkX211dGV4X2xvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAg
dW5zaWduZWQgbG9uZyBfX3Jlc3VsdCA9ICpfX3A7CiAgICAqX19wID0gX19xOwogICAgX19ndGhy
ZWFkX211dGV4X3VubG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAg
ICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKfQojIDE1NSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1t
dWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX3RocmVhZHMuaCIg
MwpuYW1lc3BhY2Ugc3RkCnsKICBzdHJ1Y3QgX1NUTF9tdXRleF9sb2NrCiAgewoKCgoKCiAgICBf
X2d0aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOwoKICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemUoKQog
ICAgewojIDE5MiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9j
KysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogICAgfQoKICAgIHZvaWQKICAg
IF9NX2FjcXVpcmVfbG9jaygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZf
TV9sb2NrKTsKICAgIH0KCiAgICB2b2lkCiAgICBfTV9yZWxlYXNlX2xvY2soKQogICAgewoKCgog
ICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9sb2NrKTsKICAgIH0KICB9OwojIDIyOCAi
L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUt
c3NhL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX2F1dG9fbG9jawogIHsKICAg
IF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAgICBfU1RMX2F1dG9fbG9jayhfU1RMX211dGV4
X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykKICAgIHsgX01fbG9jay5fTV9hY3F1aXJl
X2xvY2soKTsgfQoKICAgIH5fU1RMX2F1dG9fbG9jaygpIHsgX01fbG9jay5fTV9yZWxlYXNlX2xv
Y2soKTsgfQoKICBwcml2YXRlOgogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xv
Y2smKTsKICAgIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAgfTsKCn0K
IyA4NyAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41
LXRyZWUtc3NhL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwoKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQt
Z2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvaTY4Ni1wYy1saW51eC1n
bnUvYml0cy9hdG9taWNpdHkuaCIgMSAzCiMgMzMgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVk
ZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9pNjg2LXBjLWxpbnV4LWdudS9iaXRz
L2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsKCnN0YXRpYyBpbmxpbmUg
X0F0b21pY193b3JkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19leGNoYW5nZV9hbmRf
YWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQgKl9fbWVtLCBpbnQgX192YWwpCnsKICByZWdpc3Rl
ciBfQXRvbWljX3dvcmQgX19yZXN1bHQ7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyB4
YWRkbCAlMCwlMSIKICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChfX3Jlc3VsdCksICIr
bSIgKCpfX21lbSkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fdmFsKQogICAgICAg
ICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnN0YXRp
YyBpbmxpbmUgdm9pZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fYXRvbWljX2FkZCAo
dm9sYXRpbGUgX0F0b21pY193b3JkKiBfX21lbSwgaW50IF9fdmFsKQp7CiAgX19hc21fXyBfX3Zv
bGF0aWxlX18gKCJsb2NrOyBhZGRsICUxLCUwIgogICAgICAgICAgICAgICAgICAgICAgICA6ICIr
bSIgKCpfX21lbSkgOiAiaXIiIChfX3ZhbCkgOiAibWVtb3J5Iik7Cn0KIyA4OSAiL25vdG5mcy9m
Y2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMv
c3RsX2FsbG9jLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgMTAwICIvbm90bmZzL2ZjaGUvQlVJ
TEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxs
b2MuaCIgMwogIGNsYXNzIF9fbmV3X2FsbG9jCiAgewogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lk
KgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KF9f
bik7IH0KCiAgICBzdGF0aWMgdm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCkK
ICAgIHsgOjpvcGVyYXRvciBkZWxldGUoX19wKTsgfQogIH07CiMgMTIzICIvbm90bmZzL2ZjaGUv
QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxf
YWxsb2MuaCIgMwogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICBjbGFzcyBfX21hbGxvY19hbGxv
YwogICAgewogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6
ZV90KTsKICAgICAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7
CgogICAgcHVibGljOgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9f
bikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAg
aWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXN1bHQgPT0gMCwgMCkpCiAgICAgICAgICBfX3Jlc3Vs
dCA9IF9TX29vbV9tYWxsb2MoX19uKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0K
CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgKQog
ICAgICB7IGZyZWUoX19wKTsgfQoKICAgICAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hh
bmRsZXIodm9pZCAoKl9fZikoKSkpKCkKICAgICAgewogICAgICAgIHZvaWQgKCogX19vbGQpKCkg
PSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBfX21hbGxvY19hbGxvY19vb21f
aGFuZGxlciA9IF9fZjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KICAgIH07CgoKICB0
ZW1wbGF0ZTxpbnQgX19pbnN0PgogICAgdm9pZCAoKiBfX21hbGxvY19hbGxvYzxfX2luc3Q+Ojpf
X21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7CgogIHRlbXBsYXRlPGludCBfX2luc3Q+
CiAgICB2b2lkKgogICAgX19tYWxsb2NfYWxsb2M8X19pbnN0Pjo6CiAgICBfU19vb21fbWFsbG9j
KHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsK
ICAgICAgdm9pZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAg
IF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAg
ICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fbXlfbWFsbG9jX2hhbmRsZXIgPT0gMCwgMCkpCiAg
ICAgICAgICAgIF9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAgICAgICAoKl9fbXlfbWFsbG9jX2hh
bmRsZXIpKCk7CiAgICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgICAgaWYg
KF9fcmVzdWx0KQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgfQogICAgfQoK
CiAgdHlwZWRlZiBfX25ld19hbGxvYyBfX21lbV9pbnRlcmZhY2U7CiMgMTkwICIvbm90bmZzL2Zj
aGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9z
dGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgog
ICAgY2xhc3MgX19zaW1wbGVfYWxsb2MKICAgIHsKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIF9U
cCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIF9UcCogX19yZXQg
PSAwOwogICAgICAgIGlmIChfX24pCiAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PF9UcCo+
KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKTsKICAgICAgICByZXR1cm4gX19y
ZXQ7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGFsbG9jYXRlKCkKICAgICAgeyBy
ZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQoKICAgICAgc3Rh
dGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBp
ZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7
IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsg
X0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQogICAgfTsKIyAyMzEgIi9u
b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz
YS9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xh
c3MgX19kZWJ1Z19hbGxvYwogICAgewogICAgcHJpdmF0ZToKCgogICAgICBlbnVtIHtfU19leHRy
YSA9IDh9OwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNp
emVfdCBfX24pCiAgICAgIHsKICAgICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6
OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgICAqKHNpemVfdCopX19yZXN1
bHQgPSBfX247CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgICAg
IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3Qg
X19uKQogICAgICB7CiAgICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkg
X1NfZXh0cmE7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVhbF9w
ID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19u
IiwgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10
cmVlLXNzYS9iaXRzL3N0bF9hbGxvYy5oIiwgMjUyLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkp
KTsKICAgICAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19yZWFsX3AsIF9fbiArIChpbnQpIF9TX2V4
dHJhKTsKICAgICAgfQogICAgfTsKIyAyODggIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh
cC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVt
cGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBjbGFzcyBfX3Bvb2xfYWxsb2MK
ICAgIHsKICAgIHByaXZhdGU6CiAgICAgIGVudW0ge19BTElHTiA9IDh9OwogICAgICBlbnVtIHtf
TUFYX0JZVEVTID0gMTI4fTsKICAgICAgZW51bSB7X05GUkVFTElTVFMgPSBfTUFYX0JZVEVTIC8g
X0FMSUdOfTsKCiAgICAgIHVuaW9uIF9PYmoKICAgICAgewogICAgICAgIHVuaW9uIF9PYmoqIF9N
X2ZyZWVfbGlzdF9saW5rOwogICAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFbMV07CiAgICAgIH07
CgogICAgICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsK
CgogICAgICBzdGF0aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsKICAgICAgc3RhdGljIGNoYXIqIF9T
X2VuZF9mcmVlOwogICAgICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCiAgICAgIHN0YXRp
YyBfU1RMX211dGV4X2xvY2sgX1NfbG9jazsKICAgICAgc3RhdGljIF9BdG9taWNfd29yZCBfU19m
b3JjZV9uZXc7CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIF9TX3JvdW5kX3VwKHNpemVfdCBf
X2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0xKSAm
IH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIF9T
X2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5dGVz
KSArIChzaXplX3QpX0FMSUdOIC0gMSkvKHNpemVfdClfQUxJR04gLSAxKTsgfQoKCgogICAgICBz
dGF0aWMgdm9pZCoKICAgICAgX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCgogICAgICBzdGF0aWMg
Y2hhcioKICAgICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsK
CgoKICAgICAgc3RydWN0IF9Mb2NrCiAgICAgIHsKICAgICAgICBfTG9jaygpIHsgaWYgKF9fdGhy
ZWFkcykgX1NfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogICAgICAgIH5fTG9jaygpIHsgaWYg
KF9fdGhyZWFkcykgX1NfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQogICAgICB9IF9fYXR0cmli
dXRlX18gKChfX3VudXNlZF9fKSk7CiAgICAgIGZyaWVuZCBzdHJ1Y3QgX0xvY2s7CgogICAgcHVi
bGljOgoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAg
IHsKICAgICAgICB2b2lkKiBfX3JldCA9IDA7CgoKCgogICAgICAgIGlmIChfU19mb3JjZV9uZXcg
PT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKGdldGVudigiR0xJQkNQUF9GT1JDRV9O
RVciKSkKICAgICAgICAgICAgICBfX2F0b21pY19hZGQoJl9TX2ZvcmNlX25ldywgMSk7CiAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX2F0b21pY19hZGQoJl9TX2ZvcmNlX25ldywgLTEp
OwoKICAgICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoX1NfZm9yY2VfbmV3ICE9IDApID8g
MCA6IChfX2Fzc2VydF9mYWlsICgiX1NfZm9yY2VfbmV3ICE9IDAiLCAiL25vdG5mcy9mY2hlL0JV
SUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2Fs
bG9jLmgiLCAzNTYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAgICAgfQoKICAg
ICAgICBpZiAoKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpIHx8IChfU19mb3JjZV9uZXcgPiAw
KSkKICAgICAgICAgIF9fcmV0ID0gX19uZXdfYWxsb2M6OmFsbG9jYXRlKF9fbik7CiAgICAgICAg
ZWxzZQogICAgICAgICAgewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xp
c3QgPSBfU19mcmVlX2xpc3QKICAgICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7
CgoKCiAgICAgICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAgICAgICAgX09iaiog
X19yZXN0cmljdF9fIF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICBpZiAo
X19idWlsdGluX2V4cGVjdChfX3Jlc3VsdCA9PSAwLCAwKSkKICAgICAgICAgICAgICBfX3JldCA9
IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24pKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2Zy
ZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3Jlc3VsdDsKICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcmV0ID09IDAsIDApKQog
ICAgICAgICAgICAgIF9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAgICAgICB9CiAgICAgICAgcmV0
dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZSh2
b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBpZiAoKF9fbiA+IChzaXplX3Qp
IF9NQVhfQllURVMpIHx8IChfU19mb3JjZV9uZXcgPiAwKSkKICAgICAgICAgIF9fbmV3X2FsbG9j
OjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAg
ICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdAogICAgICAg
ICAgICAgICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAgICAgICAgX09iaiogX19xID0g
KF9PYmoqKV9fcDsKCgoKCiAgICAgICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAg
ICAgICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAg
ICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7CiAgICAgICAgICB9CiAgICAgIH0KICAgIH07Cgog
IHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PiBfQXRvbWljX3dvcmQKICBfX3Bv
b2xfYWxsb2M8X190aHJlYWRzLCBfX2luc3Q+OjpfU19mb3JjZV9uZXcgPSAwOwoKICB0ZW1wbGF0
ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cj09KGNvbnN0IF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0PiYsCiAgICAgICAgICAgICAg
IGNvbnN0IF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0PiYpCiAgICB7IHJldHVybiB0cnVl
OyB9CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+JiwK
ICAgICAgICAgICAgICAgY29uc3QgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+JikKICAg
IHsgcmV0dXJuIGZhbHNlOyB9CgoKCgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9f
aW5zdD4KICAgIGNoYXIqCiAgICBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLCBfX2luc3Q+OjoKICAg
IF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2JqcykKICAgIHsKICAgICAg
Y2hhciogX19yZXN1bHQ7CiAgICAgIHNpemVfdCBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19u
b2JqczsKICAgICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRf
ZnJlZTsKCiAgICAgIGlmIChfX2J5dGVzX2xlZnQgPj0gX190b3RhbF9ieXRlcykKICAgICAgICB7
CiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICBfU19zdGFydF9m
cmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgICByZXR1cm4gX19yZXN1bHQgOwogICAgICAg
IH0KICAgICAgZWxzZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkKICAgICAgICB7CiAgICAg
ICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAgICAgICAgICBfX3Rv
dGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3Rh
cnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAg
ICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAg
ICAgICBzaXplX3QgX19ieXRlc190b19nZXQgPQogICAgICAgICAgICAyICogX190b3RhbF9ieXRl
cyArIF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsKCiAgICAgICAgICBpZiAoX19ieXRl
c19sZWZ0ID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBf
X215X2ZyZWVfbGlzdCA9CiAgICAgICAgICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlz
dF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAgICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2Zy
ZWUpIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAg
ICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOwogICAgICAgICAgICB9CiAg
ICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKSBfX25ld19hbGxvYzo6YWxsb2NhdGUoX19i
eXRlc190b19nZXQpOwogICAgICAgICAgaWYgKF9TX3N0YXJ0X2ZyZWUgPT0gMCkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAgICAgICAgX09iaiogdm9sYXRp
bGUqIF9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAgIF9PYmoqIF9fcDsKCgoKICAgICAgICAg
ICAgICBfX2kgPSBfX3NpemU7CiAgICAgICAgICAgICAgZm9yICg7IF9faSA8PSAoc2l6ZV90KSBf
TUFYX0JZVEVTOyBfX2kgKz0gKHNpemVfdCkgX0FMSUdOKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0
X2luZGV4KF9faSk7CiAgICAgICAgICAgICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsKICAg
ICAgICAgICAgICAgICAgaWYgKF9fcCAhPSAwKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGlu
azsKICAgICAgICAgICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAg
ICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2Jqcyk7
CgoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
X1NfZW5kX2ZyZWUgPSAwOwogICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19u
ZXdfYWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKCgogICAgICAgICAgICB9CiAgICAg
ICAgICBfU19oZWFwX3NpemUgKz0gX19ieXRlc190b19nZXQ7CiAgICAgICAgICBfU19lbmRfZnJl
ZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAgICAgIHJldHVybiBfU19j
aHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpOwogICAgICAgIH0KICAgIH0KCgoKCgogIHRlbXBs
YXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9fcG9vbF9hbGxv
YzxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQogICAgewogICAgICBp
bnQgX19ub2JqcyA9IDIwOwogICAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19u
LCBfX25vYmpzKTsKICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgICBf
T2JqKiBfX3Jlc3VsdDsKICAgICAgX09iaiogX19jdXJyZW50X29iajsKICAgICAgX09iaiogX19u
ZXh0X29iajsKICAgICAgaW50IF9faTsKCiAgICAgIGlmICgxID09IF9fbm9ianMpCiAgICAgICAg
cmV0dXJuIF9fY2h1bms7CiAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1Nf
ZnJlZWxpc3RfaW5kZXgoX19uKTsKCgogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwog
ICAgICAqX19teV9mcmVlX2xpc3QgPSBfX25leHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19u
KTsKICAgICAgZm9yIChfX2kgPSAxOyA7IF9faSsrKQogICAgICAgIHsKICAgICAgICAgIF9fY3Vy
cmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNo
YXIqKV9fbmV4dF9vYmogKyBfX24pOwogICAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0
X2xpbmsgPSAwOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBl
bHNlCiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSBfX25l
eHRfb2JqOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKCiAgdGVtcGxh
dGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBfU1RMX211dGV4X2xvY2sKICAgIF9f
cG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0Pjo6X1NfbG9jayA9IHsgezAsIDAsIDAsIFBUSFJF
QURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fSB9OwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFk
cywgaW50IF9faW5zdD4KICAgIGNoYXIqIF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0Pjo6
X1Nfc3RhcnRfZnJlZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0
PgogICAgY2hhciogX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19lbmRfZnJlZSA9
IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgc2l6ZV90IF9f
cG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKCiAgdGVtcGxh
dGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB0eXBlbmFtZSBfX3Bvb2xfYWxsb2M8
X190aHJlYWRzLF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCiAgICBfX3Bvb2xfYWxsb2M8X190aHJl
YWRzLF9faW5zdD46Ol9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgogIHR5cGVkZWYgX19wb29s
X2FsbG9jPHRydWUsMD4gX19hbGxvYzsKICB0eXBlZGVmIF9fcG9vbF9hbGxvYzxmYWxzZSwwPiBf
X3NpbmdsZV9jbGllbnRfYWxsb2M7CiMgNTY5ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZs
YXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNsYXNzIGFsbG9jYXRvcgogICAgewogICAgICB0eXBl
ZGVmIF9fYWxsb2MgX0FsbG9jOwogICAgcHVibGljOgogICAgICB0eXBlZGVmIHNpemVfdCBzaXpl
X3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlw
ZWRlZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVy
OwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCYg
Y29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5kCiAgICAgICAgeyB0eXBl
ZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsgfTsKCiAgICAgIGFsbG9jYXRvcigpIHRocm93KCkg
e30KICAgICAgYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpIHRocm93KCkge30KICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9U
cDE+JikgdGhyb3coKSB7fQogICAgICB+YWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICAgICAgcG9p
bnRlcgogICAgICBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0K
CiAgICAgIGNvbnN0X3BvaW50ZXIKICAgICAgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBj
b25zdCB7IHJldHVybiAmX194OyB9CgoKCiAgICAgIF9UcCoKICAgICAgYWxsb2NhdGUoc2l6ZV90
eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKQogICAgICB7CiAgICAgICAgX1RwKiBfX3JldCA9IDA7
CiAgICAgICAgaWYgKF9fbikKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKF9fbiA8PSB0aGlz
LT5tYXhfc2l6ZSgpKQogICAgICAgICAgICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8X1RwKj4oX0Fs
bG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpOwogICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4g
X19yZXQ7CiAgICAgIH0KCgogICAgICB2b2lkCiAgICAgIGRlYWxsb2NhdGUocG9pbnRlciBfX3As
IHNpemVfdHlwZSBfX24pCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6
ZW9mKF9UcCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB0aHJv
dygpIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICAgICAgdm9pZCBjb25z
dHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFs
KTsgfQogICAgICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KICAg
IH07CgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGFsbG9jYXRvcjx2b2lkPgogICAgewogICAgcHVi
bGljOgogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlm
Zl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwogICAgICB0
eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdm9pZCB2YWx1
ZV90eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmVi
aW5kCiAgICAgICAgeyB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsgfTsKICAgIH07CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4m
KQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVDEsIHR5cGVuYW1l
IF9UMj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGFsbG9jYXRvcjxfVDE+
JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KIyA2NjUgIi9u
b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz
YS9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBzdHJ1Y3QgX19hbGxvY2F0b3IKICAgIHsKICAgICAgX0FsbG9jIF9fdW5kZXJs
eWluZ19hbGxvYzsKCiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRl
ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9UcCogcG9pbnRlcjsK
ICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1Rw
JiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAg
ICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAx
PgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw
MSwgX0FsbG9jPiBvdGhlcjsgfTsKCiAgICAgIF9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQogICAg
ICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygpCiAgICAgIDogX191
bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CgogICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9U
cDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKQogICAgICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9f
YS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CgogICAgICB+X19hbGxvY2F0b3IoKSB0aHJvdygpIHt9
CgogICAgICBwb2ludGVyCiAgICAgIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1
cm4gJl9feDsgfQoKICAgICAgY29uc3RfcG9pbnRlcgogICAgICBhZGRyZXNzKGNvbnN0X3JlZmVy
ZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICAgICAgX1RwKgogICAgICBhbGxv
Y2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApCiAgICAgIHsKICAgICAgICBfVHAq
IF9fcmV0ID0gMDsKICAgICAgICBpZiAoX19uKQogICAgICAgICAgX19yZXQgPSBzdGF0aWNfY2Fz
dDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSk7CiAgICAgICAgcmV0
dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBkZWFsbG9jYXRlKHBvaW50ZXIg
X19wLCBzaXplX3R5cGUgX19uKQogICAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRl
KF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3Np
emUoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoK
ICAgICAgdm9pZAogICAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwp
IHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQoKICAgICAgdm9pZAogICAgICBkZXN0cm95KHBvaW50
ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxs
b2M+CiAgICBzdHJ1Y3QgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPgogICAgewogICAgICB0eXBl
ZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf
dHlwZTsKICAgICAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IHZv
aWQqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5kCiAgICAgICAgeyB0
eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7IH07CiAgICB9OwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCxfQWxsb2M+JiBfX2ExLAogICAgICAgICAg
ICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsX0FsbG9jPiYgX19hMikKICAgIHsgcmV0dXJuIF9f
YTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAg
ICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCiAgICB7IHJldHVy
biBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsgfQoK
CgoKCgoKICB0ZW1wbGF0ZTxpbnQgaW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09
KGNvbnN0IF9fbWFsbG9jX2FsbG9jPGluc3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19tYWxs
b2NfYWxsb2M8aW5zdD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxpbnQgX19p
bnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2M8
X19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jPF9faW5zdD4mKQog
ICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwgY29u
c3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3Qg
X19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikKICAg
IHsgcmV0dXJuIGZhbHNlOyB9CiMgODE4ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAv
SU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KICAgIHN0cnVjdCBfQWxsb2Nf
dHJhaXRzCiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZh
bHNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxf
VHA+OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KICAgIGNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxfVHAs
IF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs
IHR5cGVuYW1lIF9UcDE+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9jYXRvcjxf
VHAxPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRy
dWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2FsbG9jPiBfQWxsb2NfdHlw
ZTsKICAgICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgaW50IF9faW5zdD4KICAgIHN0cnVjdCBfQWxsb2Nf
dHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2M8X19pbnN0PiA+CiAgICB7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVf
YWxsb2M8X1RwLCBfX21hbGxvY19hbGxvYzxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5
cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvYzxfX2luc3Q+ID4gYWxsb2NhdG9y
X3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgX190aHJlYWRzLCBp
bnQgX19pbnN0PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX3Bvb2xfYWxsb2M8X190
aHJlYWRzLCBfX2luc3Q+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu
Y2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fcG9vbF9h
bGxvYzxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRl
ZiBfX2FsbG9jYXRvcjxfVHAsIF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsIF9faW5zdD4gPgogICAg
ICBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0FsbG9jPgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9B
bGxvYz4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0
cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxs
b2M+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlYnVn
X2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9j
X3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBf
X21hbGxvY19hbGxvYzxfX2luc3Q+ID4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBf
U19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwg
X19tYWxsb2NfYWxsb2M8X19pbnN0PiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxs
b2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2M8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwogICAg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBib29sIF9fdGhyLCBp
bnQgX19pbnN0PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAx
LCBfX3Bvb2xfYWxsb2M8X190aHIsIF9faW5zdD4gPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxs
b2M8X1RwLCBfX3Bvb2xfYWxsb2M8X190aHIsX19pbnN0PiA+CiAgICAgIF9BbGxvY190eXBlOwog
ICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19wb29sX2FsbG9jPF9fdGhyLF9faW5zdD4g
PgogICAgICBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg
dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8
X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CiAgICB7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVk
ZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlw
ZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+
IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxv
Y2F0b3I8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjx3Y2hhcl90PjsK
ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX19wb29sX2FsbG9jPHRydWUsMD47Cn0KIyA4OCAiL25v
dG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3Nh
L2JpdHMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFw
L0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMK
IyA2NyAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41
LXRyZWUtc3NhL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKCgog
IHRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KICAgIGlubGluZSB2b2lkCiAgICBfQ29u
c3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpCiAgICB7IG5ldyAoc3RhdGljX2Nh
c3Q8dm9pZCo+KF9fcCkpIF9UMShfX3ZhbHVlKTsgfQoKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X1QxPgogICAgaW5saW5lIHZvaWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3ApCiAgICB7IG5ldyAo
c3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMSgpOyB9CiMgOTggIi9ub3RuZnMvZmNoZS9CVUlM
RC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9jb25z
dHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5l
IHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0OyArK19fZmlyc3QpIF9EZXN0cm95KCYqX19maXJzdCk7IH0KIyAxMTIgIi9ub3RuZnMv
ZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRz
L3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgog
ICAgaW5saW5lIHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0Zvcndh
cmRJdGVyYXRvciwgX190cnVlX3R5cGUpCiAgICB7IH0KCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9UcCogX19wb2ludGVyKQogICAgeyBf
X3BvaW50ZXItPn5fVHAoKTsgfQojIDEzNCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFw
L0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAg
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX0Rl
c3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkK
ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy
YXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZV90eXBlPjo6aGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcgogICAgICAgICAgICAgICAgICAgICAgIF9IYXNfdHJpdmlhbF9kZXN0cnVj
dG9yOwoKICAgICAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9IYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yKCkpOwogICAgfQp9CiMgODkgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh
cC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF90cmVlLmgiIDIgMwojIDEg
Ii9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVl
LXNzYS9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2NCAiL25vdG5mcy9mY2hlL0JVSUxELWdj
Yy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2Z1bmN0aW9u
LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgMTAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZs
YXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9u
IHsKICB0eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0
X3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBf
UmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2Fy
Z3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBl
ZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CiMgMTI3ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2Nj
LW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfZnVuY3Rpb24u
aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf
VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv
bnN0IHsgcmV0dXJuIF9feCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9U
cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1
cm4gX194ICogX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7
IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw
LF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAt
X194OyB9Cn07CiMgMTczICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNs
dWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs
Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz
dHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+
CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25z
dCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0
IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wg
b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu
IF9feCA+IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzIDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29u
c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPCBfX3k7IH0K
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9U
cCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID49IF9feTsgfQp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzX2VxdWFsIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs
IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0gX195OyB9Cn07CiMgMjIyICIv
bm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1z
c2EvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9n
aWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wg
b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu
IF9feCAmJiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9v
ciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8
IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6IHB1
YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBf
VHAmIF9feCkgY29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwojIDI3MSAiL25vdG5mcy9mY2hlL0JV
SUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2Z1
bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0
ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50
X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgog
IGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChf
X3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3Vt
ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNh
dGU+Cm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0
ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNs
YXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1By
ZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVi
bGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9N
X3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRl
OjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVu
YW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAg
cmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVk
aWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRp
Y2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVk
KTsKfQojIDM0OSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9j
KysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9P
cGVyYXRpb24+CmNsYXNzIGJpbmRlcjFzdAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVu
YW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBf
T3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUg
dmFsdWU7CnB1YmxpYzoKICBiaW5kZXIxc3QoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAg
ICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3kp
CiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJl
c3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRf
YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAg
fQoKCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVu
YW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiBvcCh2YWx1ZSwgX194KTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9u
LCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4KYmluZDFzdChjb25zdCBf
T3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5kZXIx
c3Q8X09wZXJhdGlvbj4oX19mbiwgX0FyZzFfdHlwZShfX3gpKTsKfQoKCnRlbXBsYXRlIDxjbGFz
cyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0
eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoK
ICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90
eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAg
ICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUm
IF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlv
bjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZp
cnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUp
OwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0
eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAg
IHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0
aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIybmQ8X09wZXJhdGlvbj4KYmluZDJuZChjb25z
dCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUg
X09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1cm4gYmlu
ZGVyMm5kPF9PcGVyYXRpb24+KF9fZm4sIF9BcmcyX3R5cGUoX194KSk7Cn0KIyA0MzggIi9ub3Ru
ZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9i
aXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0
PgpjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9BcmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpw
dWJsaWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRl
cl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7
fQogIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9f
eCk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBv
aW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgq
X194KShfQXJnKSkKewogIHJldHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9S
ZXN1bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFz
cyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6CiAgcHVibGljIGJp
bmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1
bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5
X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9S
ZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9S
ZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1
cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNs
YXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rp
b248X0FyZzEsX0FyZzIsX1Jlc3VsdD4KcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0Fy
ZzIpKSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9S
ZXN1bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lkZW50aXR5IDog
cHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBfVHAmIG9wZXJhdG9yKCkoX1RwJiBf
X3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBf
VHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+
CnN0cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFt
ZSBfUGFpcjo6Zmlyc3RfdHlwZT4gewogIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVy
YXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQogIGNv
bnN0IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBf
X3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwg
dHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90
eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25k
OwogIH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29u
c3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwojIDUy
OCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRy
ZWUtc3NhL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz
IF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4g
ewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01f
ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9f
cC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNv
bnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30K
ICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipf
TV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Jl
Zl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io
KShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9S
ZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4K
Y2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1Jl
dD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6Oipf
X3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChf
VHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U
cCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6
Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3As
IF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgog
IF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz
cyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25z
dF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikg
e30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAg
eyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9m
KShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz
cyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
LF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1Rw
OjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9f
ciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToK
ICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh
c3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3Rf
bWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3Bm
KSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsg
cmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShf
QXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9p
ZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4
cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2
b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0
ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNz
IGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0
IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KHZvaWQgKF9U
cDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25z
dCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9U
cDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1
bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1
YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01f
ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9m
KSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5h
cnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5f
cmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0
ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9m
dW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3Bl
cmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0K
cHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4K
ICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVibGlj
OgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29u
c3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0Fy
ZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6
OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJn
PgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Jl
Zl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJh
dG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJp
dmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+
CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4
cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0
KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9Bcmcg
X194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6Oipf
TV9mKShfQXJnKSBjb25zdDsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw
PgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkK
ICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4o
X1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0
LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1l
bV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7
IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVt
X2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9m
dW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4o
X1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9B
cmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1Rw
OjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1Rw
LF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0
IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9B
cmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihf
UmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Jl
Zl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCgoKfQojIDkwICIvbm90bmZzL2ZjaGUvQlVJTEQt
Z2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfdHJlZS5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIGVudW0gX1JiX3RyZWVfY29sb3IgeyBfTV9yZWQgPSBm
YWxzZSwgX01fYmxhY2sgPSB0cnVlIH07CgogIHN0cnVjdCBfUmJfdHJlZV9ub2RlX2Jhc2UKICB7
CiAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSogX0Jhc2VfcHRyOwoKICAgIF9SYl90cmVl
X2NvbG9yIF9NX2NvbG9yOwogICAgX0Jhc2VfcHRyIF9NX3BhcmVudDsKICAgIF9CYXNlX3B0ciBf
TV9sZWZ0OwogICAgX0Jhc2VfcHRyIF9NX3JpZ2h0OwoKICAgIHN0YXRpYyBfQmFzZV9wdHIKICAg
IF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKICAgIHsKICAgICAgd2hpbGUgKF9feC0+X01fbGVm
dCAhPSAwKSBfX3ggPSBfX3gtPl9NX2xlZnQ7CiAgICAgIHJldHVybiBfX3g7CiAgICB9CgogICAg
c3RhdGljIF9CYXNlX3B0cgogICAgX1NfbWF4aW11bShfQmFzZV9wdHIgX194KQogICAgewogICAg
ICB3aGlsZSAoX194LT5fTV9yaWdodCAhPSAwKSBfX3ggPSBfX3gtPl9NX3JpZ2h0OwogICAgICBy
ZXR1cm4gX194OwogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICBzdHJ1
Y3QgX1JiX3RyZWVfbm9kZSA6IHB1YmxpYyBfUmJfdHJlZV9ub2RlX2Jhc2UKICAgIHsKICAgICAg
dHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWw+KiBfTGlua190eXBlOwogICAgICBfVmFsIF9NX3Zh
bHVlX2ZpZWxkOwogICAgfTsKCiAgc3RydWN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3IKICB7CiAg
ICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZTo6X0Jhc2VfcHRyIF9CYXNlX3B0cjsKICAgIHR5
cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICB0
eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogICAgX0Jhc2VfcHRyIF9NX25vZGU7
CgogICAgdm9pZAogICAgX01faW5jcmVtZW50KCkKICAgIHsKICAgICAgaWYgKF9NX25vZGUtPl9N
X3JpZ2h0ICE9IDApCiAgICAgICAgewogICAgICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3Jp
Z2h0OwogICAgICAgICAgd2hpbGUgKF9NX25vZGUtPl9NX2xlZnQgIT0gMCkKICAgICAgICAgICAg
X01fbm9kZSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg
ewogICAgICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgICAg
IHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fcmlnaHQpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBfTV9ub2RlID0gX195OwogICAgICAgICAgICAgIF9feSA9IF9feS0+X01fcGFyZW50Owog
ICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX01fbm9kZS0+X01fcmlnaHQgIT0gX195KQogICAg
ICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgIH0KICAgIH0KCiAgICB2b2lkCiAgICBfTV9k
ZWNyZW1lbnQoKQogICAgewogICAgICBpZiAoX01fbm9kZS0+X01fY29sb3IgPT0gX01fcmVkCiAg
ICAgICAgICAmJiBfTV9ub2RlLT5fTV9wYXJlbnQtPl9NX3BhcmVudCA9PSBfTV9ub2RlKQogICAg
ICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgICAgZWxzZSBpZiAoX01fbm9kZS0+
X01fbGVmdCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2Rl
LT5fTV9sZWZ0OwogICAgICAgICAgd2hpbGUgKF9feS0+X01fcmlnaHQgIT0gMCkKICAgICAgICAg
ICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAg
fQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25vZGUt
Pl9NX3BhcmVudDsKICAgICAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fbGVmdCkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgICAgICAgX195
ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9NX25vZGUgPSBfX3k7
CiAgICAgICAgfQogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l
IF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBzdHJ1Y3QgX1JiX3RyZWVfaXRlcmF0b3IgOiBwdWJs
aWMgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgogICAgewogICAgICB0eXBlZGVmIF9WYWwgdmFsdWVf
dHlwZTsKICAgICAgdHlwZWRlZiBfUmVmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfUHRyIHBv
aW50ZXI7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwq
PiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBf
VmFsJiwgY29uc3QgX1ZhbCo+CiAgICAgIGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9S
Yl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+IF9TZWxmOwogICAgICB0eXBlZGVmIF9S
Yl90cmVlX25vZGU8X1ZhbD4qIF9MaW5rX3R5cGU7CgogICAgICBfUmJfdHJlZV9pdGVyYXRvcigp
IHt9CiAgICAgIF9SYl90cmVlX2l0ZXJhdG9yKF9MaW5rX3R5cGUgX194KSB7IF9NX25vZGUgPSBf
X3g7IH0KICAgICAgX1JiX3RyZWVfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXQpIHsgX01f
bm9kZSA9IF9faXQuX01fbm9kZTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigp
IGNvbnN0IHsgcmV0dXJuIF9MaW5rX3R5cGUoX01fbm9kZSktPl9NX3ZhbHVlX2ZpZWxkOyB9Cgog
ICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9y
KigpKTsgfQoKICAgICAgX1NlbGYmCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAg
X01faW5jcmVtZW50KCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBfU2Vs
ZgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIF9TZWxmIF9fdG1wID0gKnRo
aXM7CiAgICAgICAgX01faW5jcmVtZW50KCk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9
CgogICAgICBfU2VsZiYKICAgICAgb3BlcmF0b3ItLSgpIHsgX01fZGVjcmVtZW50KCk7IHJldHVy
biAqdGhpczsgfQoKICAgICAgX1NlbGYKICAgICAgb3BlcmF0b3ItLShpbnQpCiAgICAgIHsKICAg
ICAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgICAgIF9NX2RlY3JlbWVudCgpOwogICAgICAg
IHJldHVybiBfX3RtcDsKICAgICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWwsIHR5
cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9
PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRyPiYgX194LAogICAgICAg
ICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRyPiYgX195KQog
ICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVl
X2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4mIF9feCwKICAgICAgICAg
ICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwqPiYgX195KQog
ICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVl
X2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3Qg
X1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9WYWwqPiYgX195KQog
ICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+
JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYs
IF9QdHI+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9kZTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0o
Y29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9WYWwqPiYg
X194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwg
X1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9kZTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0o
Y29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwqPiYgX194LAogICAgICAg
ICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwgY29uc3Qg
X1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9kZTsgfQoK
ICBpbmxpbmUgdm9pZAogIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9SYl90cmVlX25vZGVfYmFzZSog
X194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCiAgewogICAgX1JiX3RyZWVfbm9kZV9i
YXNlKiBfX3kgPSBfX3gtPl9NX3JpZ2h0OwogICAgX194LT5fTV9yaWdodCA9IF9feS0+X01fbGVm
dDsKICAgIGlmIChfX3ktPl9NX2xlZnQgIT0wKQogICAgICBfX3ktPl9NX2xlZnQtPl9NX3BhcmVu
dCA9IF9feDsKICAgIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7CgogICAgaWYgKF9f
eCA9PSBfX3Jvb3QpCiAgICAgIF9fcm9vdCA9IF9feTsKICAgIGVsc2UgaWYgKF9feCA9PSBfX3gt
Pl9NX3BhcmVudC0+X01fbGVmdCkKICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7
CiAgICBlbHNlCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICAgIF9feS0+
X01fbGVmdCA9IF9feDsKICAgIF9feC0+X01fcGFyZW50ID0gX195OwogIH0KCiAgaW5saW5lIHZv
aWQKICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90
cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9
IF9feC0+X01fbGVmdDsKICAgIF9feC0+X01fbGVmdCA9IF9feS0+X01fcmlnaHQ7CiAgICBpZiAo
X195LT5fTV9yaWdodCAhPSAwKQogICAgICBfX3ktPl9NX3JpZ2h0LT5fTV9wYXJlbnQgPSBfX3g7
CiAgICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwoKICAgIGlmIChfX3ggPT0gX19y
b290KQogICAgICBfX3Jvb3QgPSBfX3k7CiAgICBlbHNlIGlmIChfX3ggPT0gX194LT5fTV9wYXJl
bnQtPl9NX3JpZ2h0KQogICAgICBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7CiAgICBl
bHNlCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogICAgX195LT5fTV9yaWdo
dCA9IF9feDsKICAgIF9feC0+X01fcGFyZW50ID0gX195OwogIH0KCiAgaW5saW5lIHZvaWQKICBf
UmJfdHJlZV9yZWJhbGFuY2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVf
YmFzZSomIF9fcm9vdCkKICB7CiAgICBfX3gtPl9NX2NvbG9yID0gX01fcmVkOwogICAgd2hpbGUg
KF9feCAhPSBfX3Jvb3QKICAgICAgICAgICAmJiBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPT0g
X01fcmVkKQogICAgICB7CiAgICAgICAgaWYgKF9feC0+X01fcGFyZW50ID09IF9feC0+X01fcGFy
ZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9SYl90cmVl
X25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fcmlnaHQ7CiAg
ICAgICAgICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7
CiAgICAgICAgICAgICAgICBfX3ktPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAg
ICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAg
ICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgfQog
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKF9feCA9
PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgICAgICAgICAgICBfUmJf
dHJlZV9yb3RhdGVfbGVmdChfX3gsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAg
ICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAg
ICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LT5fTV9wYXJlbnQtPl9NX3BhcmVu
dCwgX19yb290KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAg
ICAgICAgewogICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcGFy
ZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAgIGlmIChfX3kgJiYgX195LT5fTV9j
b2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX194LT5fTV9w
YXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3ktPl9NX2NvbG9y
ID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5f
TV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5f
TV9wYXJlbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCkKICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50
OwogICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gsIF9fcm9vdCk7
CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9j
b2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVu
dC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVm
dChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgIH0KICAg
ICAgICAgIH0KICAgICAgfQogICAgX19yb290LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogIH0KCiAg
aW5saW5lIF9SYl90cmVlX25vZGVfYmFzZSoKICBfUmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNl
KF9SYl90cmVlX25vZGVfYmFzZSogX196LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19sZWZ0bW9zdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcmlnaHRtb3N0KQogIHsKICAgIF9SYl90
cmVlX25vZGVfYmFzZSogX195ID0gX196OwogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3ggPSAw
OwogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3hfcGFyZW50ID0gMDsKICAgIGlmIChfX3ktPl9N
X2xlZnQgPT0gMCkKICAgICAgX194ID0gX195LT5fTV9yaWdodDsKICAgIGVsc2UKICAgICAgaWYg
KF9feS0+X01fcmlnaHQgPT0gMCkKICAgICAgICBfX3ggPSBfX3ktPl9NX2xlZnQ7CiAgICAgIGVs
c2UKICAgICAgICB7CgogICAgICAgICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAgICAgIHdo
aWxlIChfX3ktPl9NX2xlZnQgIT0gMCkKICAgICAgICAgICAgX195ID0gX195LT5fTV9sZWZ0Owog
ICAgICAgICAgX194ID0gX195LT5fTV9yaWdodDsKICAgICAgICB9CiAgICBpZiAoX195ICE9IF9f
eikKICAgICAgewoKICAgICAgICBfX3otPl9NX2xlZnQtPl9NX3BhcmVudCA9IF9feTsKICAgICAg
ICBfX3ktPl9NX2xlZnQgPSBfX3otPl9NX2xlZnQ7CiAgICAgICAgaWYgKF9feSAhPSBfX3otPl9N
X3JpZ2h0KQogICAgICAgICAgewogICAgICAgICAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJl
bnQ7CiAgICAgICAgICAgIGlmIChfX3gpIF9feC0+X01fcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7
CiAgICAgICAgICAgIF9feS0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX194OwogICAgICAgICAgICBf
X3ktPl9NX3JpZ2h0ID0gX196LT5fTV9yaWdodDsKICAgICAgICAgICAgX196LT5fTV9yaWdodC0+
X01fcGFyZW50ID0gX195OwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9feF9w
YXJlbnQgPSBfX3k7CiAgICAgICAgaWYgKF9fcm9vdCA9PSBfX3opCiAgICAgICAgICBfX3Jvb3Qg
PSBfX3k7CiAgICAgICAgZWxzZSBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0gX196KQog
ICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgICAgICAgZWxzZQogICAg
ICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogICAgICAgIF9feS0+X01fcGFy
ZW50ID0gX196LT5fTV9wYXJlbnQ7CiAgICAgICAgc3RkOjpzd2FwKF9feS0+X01fY29sb3IsIF9f
ei0+X01fY29sb3IpOwogICAgICAgIF9feSA9IF9fejsKCiAgICAgIH0KICAgIGVsc2UKICAgICAg
ewogICAgICAgIF9feF9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICBpZiAoX194KQog
ICAgICAgICAgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICBpZiAoX19y
b290ID09IF9feikKICAgICAgICAgIF9fcm9vdCA9IF9feDsKICAgICAgICBlbHNlCiAgICAgICAg
ICBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICAgICAgICBfX3otPl9N
X3BhcmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX196LT5f
TV9wYXJlbnQtPl9NX3JpZ2h0ID0gX194OwogICAgICAgIGlmIChfX2xlZnRtb3N0ID09IF9feikK
ICAgICAgICAgIGlmIChfX3otPl9NX3JpZ2h0ID09IDApCiAgICAgICAgICAgIF9fbGVmdG1vc3Qg
PSBfX3otPl9NX3BhcmVudDsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fbGVmdG1vc3Qg
PSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsKICAgICAgICBpZiAoX19yaWdo
dG1vc3QgPT0gX196KQogICAgICAgICAgaWYgKF9fei0+X01fbGVmdCA9PSAwKQogICAgICAgICAg
ICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgX19yaWdodG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsKICAg
ICAgfQogICAgaWYgKF9feS0+X01fY29sb3IgIT0gX01fcmVkKQogICAgICB7CiAgICAgICAgd2hp
bGUgKF9feCAhPSBfX3Jvb3QgJiYgKF9feCA9PSAwIHx8IF9feC0+X01fY29sb3IgPT0gX01fYmxh
Y2spKQogICAgICAgICAgaWYgKF9feCA9PSBfX3hfcGFyZW50LT5fTV9sZWZ0KQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cgPSBfX3hfcGFyZW50LT5f
TV9yaWdodDsKICAgICAgICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9ibGFjazsK
ICAgICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAg
ICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAg
ICAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgIGlmICgoX193LT5fTV9sZWZ0ID09IDAgfHwKICAgICAgICAgICAgICAg
ICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX01fYmxhY2spICYmCiAgICAgICAgICAgICAg
ICAgIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgICAgICAgIF9fdy0+X01fcmln
aHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgX194ID0gX194
X3BhcmVudDsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9NX3Bh
cmVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0ID09IDAKICAgICAgICAgICAg
ICAgICAgICAgIHx8IF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKQogICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29s
b3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9y
ZWQ7CiAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX193LCBfX3Jv
b3QpOwogICAgICAgICAgICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX194
X3BhcmVudC0+X01fY29sb3I7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9y
ID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0KQogICAgICAg
ICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAg
ICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNl
KiBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgICAgIGlmIChfX3ctPl9NX2Nv
bG9yID09IF9NX3JlZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX193LT5f
TV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xv
ciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9w
YXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xl
ZnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKChfX3ctPl9NX3JpZ2h0ID09
IDAgfHwKICAgICAgICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2Js
YWNrKSAmJgogICAgICAgICAgICAgICAgICAoX193LT5fTV9sZWZ0ID09IDAgfHwKICAgICAgICAg
ICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX01fYmxhY2spKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAg
ICAgICAgICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50
ID0gX194X3BhcmVudC0+X01fcGFyZW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVm
dCA9PSAwIHx8IF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX01fYmxhY2spCiAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3Ig
PSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7
CiAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3csIF9fcm9vdCk7
CiAgICAgICAgICAgICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJl
bnQtPl9NX2NvbG9yOwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9N
X2JsYWNrOwogICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0KQogICAgICAgICAgICAg
ICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAg
ICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgaWYg
KF9feCkgX194LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICB9CiAgICByZXR1cm4gX195Owog
IH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MsIGJvb2wg
X1NfaW5zdGFuY2VsZXNzPgogICAgY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFzZQogICAgewogICAg
cHVibGljOgogICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6
YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAg
ICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAg
ICAgIF9SYl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAg
OiBfTV9ub2RlX2FsbG9jYXRvcihfX2EpLCBfTV9oZWFkZXIoMCkge30KCiAgICBwcm90ZWN0ZWQ6
CiAgICAgIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+
OjphbGxvY2F0b3JfdHlwZQogICAgICBfTV9ub2RlX2FsbG9jYXRvcjsKCiAgICAgIF9SYl90cmVl
X25vZGU8X1RwPiogX01faGVhZGVyOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+KgogICAgICBf
TV9nZXRfbm9kZSgpIHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOyB9Cgog
ICAgICB2b2lkCiAgICAgIF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKQogICAg
ICB7IF9NX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCAxKTsgfQogICAgfTsKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgX1JiX3RyZWVf
YWxsb2NfYmFzZTxfVHAsIF9BbGxvYywgdHJ1ZT4KICAgIHsKICAgIHB1YmxpYzoKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFs
bG9jYXRvcl90eXBlOwogICAgICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qg
eyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICAgICAgX1JiX3RyZWVfYWxsb2NfYmFzZShj
b25zdCBhbGxvY2F0b3JfdHlwZSYpIDogX01faGVhZGVyKDApIHt9CgogICAgcHJvdGVjdGVkOgog
ICAgICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2hlYWRlcjsKCiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0FsbG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46Ol9BbGxvY190eXBl
CiAgICAgIF9BbGxvY190eXBlOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+KgogICAgICBfTV9n
ZXRfbm9kZSgpIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQoKICAgICAgdm9p
ZAogICAgICBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkgeyBfQWxsb2NfdHlw
ZTo6ZGVhbGxvY2F0ZShfX3AsIDEpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfUmJfdHJlZV9iYXNlIDogcHVibGljIF9SYl90
cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgewog
ICAgICB0eXBlZGVmIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLAogICAgICAgIF9BbGxvYywgX0Fs
bG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4gX0Jhc2U7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAg
ICAgX1JiX3RyZWVfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgICA6IF9CYXNl
KF9fYSkgeyB0aGlzLT5fTV9oZWFkZXIgPSBfTV9nZXRfbm9kZSgpOyB9CiAgICAgIH5fUmJfdHJl
ZV9iYXNlKCkgeyBfTV9wdXRfbm9kZSh0aGlzLT5fTV9oZWFkZXIpOyB9CiAgICB9OwoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUs
CiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRv
cjxfVmFsPiA+CiAgICBjbGFzcyBfUmJfdHJlZSA6IHByb3RlY3RlZCBfUmJfdHJlZV9iYXNlPF9W
YWwsIF9BbGxvYz4KICAgIHsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9iYXNlPF9WYWwsIF9BbGxv
Yz4gX0Jhc2U7CgogICAgcHJvdGVjdGVkOgogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFz
ZSogX0Jhc2VfcHRyOwogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4gX1JiX3RyZWVf
bm9kZTsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICAgICAgdHlw
ZWRlZiBfVmFsIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsK
ICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBl
ZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBl
JiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZSogX0xpbmtfdHlw
ZTsKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZf
dCBkaWZmZXJlbmNlX3R5cGU7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0
b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCiAgICBwcm90ZWN0
ZWQ6CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9nZXRfbm9kZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9N
X3B1dF9ub2RlOwogICAgICB1c2luZyBfQmFzZTo6X01faGVhZGVyOwoKICAgICAgX0xpbmtfdHlw
ZQogICAgICBfTV9jcmVhdGVfbm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICAgIHsKICAg
ICAgICBfTGlua190eXBlIF9fdG1wID0gX01fZ2V0X25vZGUoKTsKICAgICAgICB0cnkKICAgICAg
ICAgIHsgX0NvbnN0cnVjdCgmX190bXAtPl9NX3ZhbHVlX2ZpZWxkLCBfX3gpOyB9CiAgICAgICAg
Y2F0Y2goLi4uKQogICAgICAgICAgewogICAgICAgICAgX01fcHV0X25vZGUoX190bXApOwogICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9Cgog
ICAgICBfTGlua190eXBlCiAgICAgIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgICAg
IHsKICAgICAgICBfTGlua190eXBlIF9fdG1wID0gX01fY3JlYXRlX25vZGUoX194LT5fTV92YWx1
ZV9maWVsZCk7CiAgICAgICAgX190bXAtPl9NX2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgICAg
ICBfX3RtcC0+X01fbGVmdCA9IDA7CiAgICAgICAgX190bXAtPl9NX3JpZ2h0ID0gMDsKICAgICAg
ICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgZGVzdHJveV9ub2RlKF9M
aW5rX3R5cGUgX19wKQogICAgICB7CiAgICAgICAgX0Rlc3Ryb3koJl9fcC0+X01fdmFsdWVfZmll
bGQpOwogICAgICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgICAgIH0KCiAgICAgIHNpemVfdHlwZSBf
TV9ub2RlX2NvdW50OwogICAgICBfQ29tcGFyZSBfTV9rZXlfY29tcGFyZTsKCiAgICAgIF9MaW5r
X3R5cGUmCiAgICAgIF9NX3Jvb3QoKSBjb25zdCB7IHJldHVybiAoX0xpbmtfdHlwZSYpIHRoaXMt
Pl9NX2hlYWRlci0+X01fcGFyZW50OyB9CgogICAgICBfTGlua190eXBlJgogICAgICBfTV9sZWZ0
bW9zdCgpIGNvbnN0IHsgcmV0dXJuIChfTGlua190eXBlJikgdGhpcy0+X01faGVhZGVyLT5fTV9s
ZWZ0OyB9CgogICAgICBfTGlua190eXBlJgogICAgICBfTV9yaWdodG1vc3QoKSBjb25zdCB7IHJl
dHVybiAoX0xpbmtfdHlwZSYpIHRoaXMtPl9NX2hlYWRlci0+X01fcmlnaHQ7IH0KCiAgICAgIHN0
YXRpYyBfTGlua190eXBlJgogICAgICBfU19sZWZ0KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiAo
X0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgog
ICAgICBfU19yaWdodChfTGlua190eXBlIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gt
Pl9NX3JpZ2h0KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX3BhcmVudChf
TGlua190eXBlIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3BhcmVudCk7IH0K
CiAgICAgIHN0YXRpYyByZWZlcmVuY2UKICAgICAgX1NfdmFsdWUoX0xpbmtfdHlwZSBfX3gpIHsg
cmV0dXJuIF9feC0+X01fdmFsdWVfZmllbGQ7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBfS2V5Jgog
ICAgICBfU19rZXkoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFs
dWUoX194KSk7IH0KCiAgICAgIHN0YXRpYyBfUmJfdHJlZV9jb2xvciYKICAgICAgX1NfY29sb3Io
X0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIF9feC0+X01fY29sb3I7IH0KCiAgICAgIHN0YXRpYyBf
TGlua190eXBlJgogICAgICBfU19sZWZ0KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlua190
eXBlJikoX194LT5fTV9sZWZ0KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9T
X3JpZ2h0KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9yaWdo
dCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19wYXJlbnQoX0Jhc2VfcHRy
IF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3BhcmVudCk7IH0KCiAgICAgIHN0
YXRpYyByZWZlcmVuY2UKICAgICAgX1NfdmFsdWUoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKChf
TGlua190eXBlKV9feCktPl9NX3ZhbHVlX2ZpZWxkOyB9CgogICAgICBzdGF0aWMgY29uc3QgX0tl
eSYKICAgICAgX1Nfa2V5KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1Nf
dmFsdWUoX0xpbmtfdHlwZShfX3gpKSk7fQoKICAgICAgc3RhdGljIF9SYl90cmVlX2NvbG9yJgog
ICAgICBfU19jb2xvcihfQmFzZV9wdHIgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZShfX3gpLT5f
TV9jb2xvcik7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlCiAgICAgIF9TX21pbmltdW0oX0xp
bmtfdHlwZSBfX3gpCiAgICAgIHsgcmV0dXJuIChfTGlua190eXBlKSBfUmJfdHJlZV9ub2RlX2Jh
c2U6Ol9TX21pbmltdW0oX194KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUKICAgICAgX1Nf
bWF4aW11bShfTGlua190eXBlIF9feCkKICAgICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90
cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOyB9CgogICAgcHVibGljOgogICAgICB0eXBl
ZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIHJlZmVyZW5jZSwgcG9pbnRlcj4gaXRl
cmF0b3I7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgY29uc3Rf
cmVmZXJlbmNlLCBjb25zdF9wb2ludGVyPgogICAgICBjb25zdF9pdGVyYXRvcjsKCiAgICAgIHR5
cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4g
cmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgogICAgICBpdGVyYXRvcgogICAgICBfTV9p
bnNlcnQoX0Jhc2VfcHRyIF9feCwgX0Jhc2VfcHRyIF9feSwgY29uc3QgdmFsdWVfdHlwZSYgX192
KTsKCiAgICAgIF9MaW5rX3R5cGUKICAgICAgX01fY29weShfTGlua190eXBlIF9feCwgX0xpbmtf
dHlwZSBfX3ApOwoKICAgICAgdm9pZAogICAgICBfTV9lcmFzZShfTGlua190eXBlIF9feCk7Cgog
ICAgcHVibGljOgoKICAgICAgX1JiX3RyZWUoKQogICAgICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5
cGUoKSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21wYXJlKCkKICAgICAgeyBfTV9lbXB0
eV9pbml0aWFsaXplKCk7IH0KCiAgICAgIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAp
CiAgICAgICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01f
a2V5X2NvbXBhcmUoX19jb21wKQogICAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICAg
ICAgX1JiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwgY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSkKICAgICAgICA6IF9CYXNlKF9fYSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21w
YXJlKF9fY29tcCkKICAgICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgICAgIF9SYl90
cmVlKGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gpCiAgICAgICAgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKSwgX01fbm9kZV9jb3Vu
dCgwKSwKICAgICAgICAgICAgICAgICBfTV9rZXlfY29tcGFyZShfX3guX01fa2V5X2NvbXBhcmUp
CiAgICAgIHsKICAgICAgICBpZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICAgICAgX01fZW1w
dHlfaW5pdGlhbGl6ZSgpOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgX1Nf
Y29sb3IodGhpcy0+X01faGVhZGVyKSA9IF9NX3JlZDsKICAgICAgICAgICAgX01fcm9vdCgpID0g
X01fY29weShfX3guX01fcm9vdCgpLCB0aGlzLT5fTV9oZWFkZXIpOwogICAgICAgICAgICBfTV9s
ZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAgICAgICAgICBfTV9yaWdodG1v
c3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgICAgICAgIH0KICAgICAgICBfTV9ub2Rl
X2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgICAgIH0KCiAgICAgIH5fUmJfdHJlZSgpIHsg
Y2xlYXIoKTsgfQoKICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz4mCiAgICAgIG9wZXJhdG9yPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194KTsKCiAgICBwcml2YXRlOgogICAgICB2b2lkIF9N
X2VtcHR5X2luaXRpYWxpemUoKQogICAgICB7CiAgICAgICAgX1NfY29sb3IodGhpcy0+X01faGVh
ZGVyKSA9IF9NX3JlZDsKCiAgICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICBfTV9sZWZ0bW9z
dCgpID0gdGhpcy0+X01faGVhZGVyOwogICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gdGhpcy0+X01f
aGVhZGVyOwogICAgICB9CgogICAgcHVibGljOgoKICAgICAgX0NvbXBhcmUKICAgICAga2V5X2Nv
bXAoKSBjb25zdCB7IHJldHVybiBfTV9rZXlfY29tcGFyZTsgfQoKICAgICAgaXRlcmF0b3IKICAg
ICAgYmVnaW4oKSB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CgogICAgICBjb25zdF9pdGVyYXRv
cgogICAgICBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0KCiAgICAgIGl0
ZXJhdG9yCiAgICAgIGVuZCgpIHsgcmV0dXJuIHRoaXMtPl9NX2hlYWRlcjsgfQoKICAgICAgY29u
c3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+X01faGVhZGVyOyB9
CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2Vf
aXRlcmF0b3IoZW5kKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9Cgog
ICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJh
dG9yKGJlZ2luKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQo
KSBjb25zdCB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogICAg
ICBib29sCiAgICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9jb3VudCA9PSAwOyB9
CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfY291
bnQ7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNp
emVfdHlwZSgtMSk7IH0KCiAgICAgIHZvaWQKICAgICAgc3dhcChfUmJfdHJlZTxfS2V5LF9WYWws
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX190KQogICAgICB7CiAgICAgICAgc3RkOjpz
d2FwKHRoaXMtPl9NX2hlYWRlciwgX190Ll9NX2hlYWRlcik7CiAgICAgICAgc3RkOjpzd2FwKF9N
X25vZGVfY291bnQsIF9fdC5fTV9ub2RlX2NvdW50KTsKICAgICAgICBzdGQ6OnN3YXAoX01fa2V5
X2NvbXBhcmUsIF9fdC5fTV9rZXlfY29tcGFyZSk7CiAgICAgIH0KCgogICAgICBwYWlyPGl0ZXJh
dG9yLGJvb2w+CiAgICAgIGluc2VydF91bmlxdWUoY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCiAg
ICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydF9lcXVhbChjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoK
ICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBj
b25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0X2VxdWFs
KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAgICBpbnNlcnRfdW5p
cXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CgogICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAgICBpbnNl
cnRfZXF1YWwoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsK
CiAgICAgIHZvaWQKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbik7CgogICAgICBzaXpl
X3R5cGUKICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAgICB2b2lkCiAgICAg
IGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7CgogICAgICB2b2lkCiAg
ICAgIGVyYXNlKGNvbnN0IGtleV90eXBlKiBfX2ZpcnN0LCBjb25zdCBrZXlfdHlwZSogX19sYXN0
KTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIoKQogICAgICB7CiAgICAgICAgaWYgKF9NX25vZGVf
Y291bnQgIT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAgX01fZXJhc2UoX01fcm9vdCgpKTsK
ICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IHRoaXMtPl9NX2hlYWRlcjsKICAgICAgICAgICAg
X01fcm9vdCgpID0gMDsKICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSB0aGlzLT5fTV9oZWFk
ZXI7CiAgICAgICAgICAgIF9NX25vZGVfY291bnQgPSAwOwogICAgICAgICAgfQogICAgICB9CgoK
ICAgICAgaXRlcmF0b3IKICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAgIGNv
bnN0X2l0ZXJhdG9yCiAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CgogICAg
ICBzaXplX3R5cGUKICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CgogICAg
ICBpdGVyYXRvcgogICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAg
IGNvbnN0X2l0ZXJhdG9yCiAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv
bnN0OwoKICAgICAgaXRlcmF0b3IKICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f
eCk7CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlw
ZSYgX194KSBjb25zdDsKCiAgICAgIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+CiAgICAgIGVxdWFs
X3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpOwoKICAgICAgcGFpcjxjb25zdF9pdGVyYXRvciwg
Y29uc3RfaXRlcmF0b3I+CiAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv
bnN0OwoKCiAgICAgIGJvb2wKICAgICAgX19yYl92ZXJpZnkoKSBjb25zdDsKICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVl
LAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxf
S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgewogICAgICBy
ZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgZXF1YWwoX194LmJlZ2lu
KCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
S2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBl
bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
PiYgX194LAogICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHJldHVybiBsZXhpY29ncmFwaGlj
YWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9W
YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3gg
PT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBl
bmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBfUmJfdHJlZTxfS2V5
LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgIGNv
bnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp
CiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlw
ZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0Nv
bXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNv
bnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gs
CiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+JiBfX3kpCiAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I+PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9W
YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogIHsgcmV0dXJuICEoX194IDwg
X195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFt
ZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAoX195KTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZW
YWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAg
X1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mCiAgICBfUmJf
dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBvcGVyYXRv
cj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4m
IF9feCkKICAgIHsKICAgICAgaWYgKHRoaXMgIT0gJl9feCkKICAgICAgICB7CgogICAgICAgICAg
Y2xlYXIoKTsKICAgICAgICAgIF9NX25vZGVfY291bnQgPSAwOwogICAgICAgICAgX01fa2V5X2Nv
bXBhcmUgPSBfX3guX01fa2V5X2NvbXBhcmU7CiAgICAgICAgICBpZiAoX194Ll9NX3Jvb3QoKSA9
PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICAg
ICAgICBfTV9sZWZ0bW9zdCgpID0gdGhpcy0+X01faGVhZGVyOwogICAgICAgICAgICAgIF9NX3Jp
Z2h0bW9zdCgpID0gdGhpcy0+X01faGVhZGVyOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNl
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9feC5fTV9y
b290KCksIHRoaXMtPl9NX2hlYWRlcik7CiAgICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9T
X21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21h
eGltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gX194Ll9NX25v
ZGVfY291bnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tl
eU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+OjppdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz46OgogICAgX01faW5zZXJ0KF9CYXNlX3B0ciBfX3hfLCBfQmFzZV9wdHIgX195Xywg
Y29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBl
KSBfX3hfOwogICAgICBfTGlua190eXBlIF9feSA9IChfTGlua190eXBlKSBfX3lfOwogICAgICBf
TGlua190eXBlIF9fejsKCiAgICAgIGlmIChfX3kgPT0gdGhpcy0+X01faGVhZGVyIHx8IF9feCAh
PSAwIHx8CiAgICAgICAgICBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tl
eShfX3kpKSkKICAgICAgICB7CiAgICAgICAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwog
ICAgICAgICAgX1NfbGVmdChfX3kpID0gX196OwoKICAgICAgICAgIGlmIChfX3kgPT0gdGhpcy0+
X01faGVhZGVyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fcm9vdCgpID0gX196Owog
ICAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OwogICAgICAgICAgICB9CiAgICAgICAg
ICBlbHNlIGlmIChfX3kgPT0gX01fbGVmdG1vc3QoKSkKICAgICAgICAgICAgX01fbGVmdG1vc3Qo
KSA9IF9fejsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX3ogPSBf
TV9jcmVhdGVfbm9kZShfX3YpOwogICAgICAgICAgX1NfcmlnaHQoX195KSA9IF9fejsKCiAgICAg
ICAgICBpZiAoX195ID09IF9NX3JpZ2h0bW9zdCgpKQogICAgICAgICAgICBfTV9yaWdodG1vc3Qo
KSA9IF9fejsKICAgICAgICB9CiAgICAgIF9TX3BhcmVudChfX3opID0gX195OwogICAgICBfU19s
ZWZ0KF9feikgPSAwOwogICAgICBfU19yaWdodChfX3opID0gMDsKICAgICAgX1JiX3RyZWVfcmVi
YWxhbmNlKF9feiwgdGhpcy0+X01faGVhZGVyLT5fTV9wYXJlbnQpOwogICAgICArK19NX25vZGVf
Y291bnQ7CiAgICAgIHJldHVybiBpdGVyYXRvcihfX3opOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAg
ICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBf
UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNl
cnRfZXF1YWwoY29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IHRo
aXMtPl9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAgICAgIHdo
aWxlIChfX3ggIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfX3kgPSBfX3g7CiAgICAgICAgICBf
X3ggPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKSA/CiAg
ICAgICAgICAgIF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAgICAgICAgfQogICAgICBy
ZXR1cm4gX01faW5zZXJ0KF9feCwgX195LCBfX3YpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0
eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgcGFpcjx0eXBlbmFtZSBfUmJf
dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAg
ICBib29sPgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz46OgogICAgaW5zZXJ0X3VuaXF1ZShjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAgIF9MaW5r
X3R5cGUgX195ID0gdGhpcy0+X01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jv
b3QoKTsKICAgICAgYm9vbCBfX2NvbXAgPSB0cnVlOwogICAgICB3aGlsZSAoX194ICE9IDApCiAg
ICAgICAgewogICAgICAgICAgX195ID0gX194OwogICAgICAgICAgX19jb21wID0gX01fa2V5X2Nv
bXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX194KSk7CiAgICAgICAgICBfX3ggPSBf
X2NvbXAgPyBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gpOwogICAgICAgIH0KICAgICAgaXRl
cmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICAgICAgaWYgKF9fY29tcCkKICAgICAgICBpZiAo
X19qID09IGJlZ2luKCkpCiAgICAgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfTV9p
bnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogICAgICAgIGVsc2UKICAgICAgICAgIC0tX19q
OwogICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fai5fTV9ub2RlKSwgX0tleU9mVmFs
dWUoKShfX3YpKSkKICAgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfTV9pbnNlcnQo
X194LCBfX3ksIF9fdiksIHRydWUpOwogICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihf
X2osIGZhbHNlKTsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9W
YWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZW
YWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LCBfVmFs
LCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgogICAgaW5zZXJ0X3VuaXF1ZShpdGVy
YXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAgIGlmIChfX3Bvc2l0
aW9uLl9NX25vZGUgPT0gdGhpcy0+X01faGVhZGVyLT5fTV9sZWZ0KQogICAgICAgIHsKCiAgICAg
ICAgICBpZiAoc2l6ZSgpID4gMCAmJgogICAgICAgICAgICAgIF9NX2tleV9jb21wYXJlKF9LZXlP
ZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSkpKQogICAgICAgICAgICBy
ZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBf
X3YpOwoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192
KS5maXJzdDsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSB0
aGlzLT5fTV9oZWFkZXIpCiAgICAgICAgewoKICAgICAgICAgIGlmIChfTV9rZXlfY29tcGFyZShf
U19rZXkoX01fcmlnaHRtb3N0KCkpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgICAgICBy
ZXR1cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwogICAgICAgICAgZWxzZQog
ICAgICAgICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogICAgICAgIH0KICAg
ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlv
bjsKICAgICAgICAgIC0tX19iZWZvcmU7CiAgICAgICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nf
a2V5KF9fYmVmb3JlLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpCiAgICAgICAgICAgICAg
JiYgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLF9TX2tleShfX3Bvc2l0aW9uLl9N
X25vZGUpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfU19yaWdodChfX2JlZm9y
ZS5fTV9ub2RlKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2Jl
Zm9yZS5fTV9ub2RlLCBfX3YpOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJl
dHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9f
dik7CgogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNl
cnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0
eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8
X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJf
dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNlcnRf
ZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBp
ZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IHRoaXMtPl9NX2hlYWRlci0+X01fbGVmdCkKICAgICAg
ICB7CgogICAgICAgICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgICAgICAgICAhX01fa2V5X2Nv
bXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAg
ICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9u
Ll9NX25vZGUsIF9fdik7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0
X2VxdWFsKF9fdik7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUg
PT0gdGhpcy0+X01faGVhZGVyKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoIV9NX2tleV9jb21w
YXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSkpCiAgICAgICAg
ICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICAgICAgICBl
bHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICAgICAgICB9CiAgICAg
IGVsc2UKICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247
CiAgICAgICAgICAtLV9fYmVmb3JlOwogICAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfS2V5
T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSkKICAgICAgICAgICAgICAm
JiAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUuX01fbm9kZSkgPT0gMCkKICAgICAg
ICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsKICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRp
b24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3YpOwoKICAgICAgICAgICAgfQogICAg
ICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgICAgICAg
fQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFt
ZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9DbXAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRl
bXBsYXRlPGNsYXNzIF9JST4KICAgICAgdm9pZAogICAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tv
VixfQ21wLF9BbGxvYz46OgogICAgICBpbnNlcnRfZXF1YWwoX0lJIF9fZmlyc3QsIF9JSSBfX2xh
c3QpCiAgICAgIHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp
CiAgICAgICAgICBpbnNlcnRfZXF1YWwoKl9fZmlyc3QpOwogICAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAgdHlw
ZW5hbWUgX0NtcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8Y2xhc3MgX0lJPgogICAg
dm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+OjoKICAgIGluc2Vy
dF91bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCiAgICB7CiAgICAgIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpbnNlcnRfdW5pcXVlKCpfX2ZpcnN0
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5h
bWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgIHsKICAgICAg
X0xpbmtfdHlwZSBfX3kgPQogICAgICAgIChfTGlua190eXBlKSBfUmJfdHJlZV9yZWJhbGFuY2Vf
Zm9yX2VyYXNlKF9fcG9zaXRpb24uX01fbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5fTV9oZWFkZXItPl9NX3BhcmVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5fTV9oZWFk
ZXItPl9NX2xlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy0+X01faGVhZGVyLT5fTV9yaWdodCk7CiAgICAgIGRlc3Ryb3lfbm9kZShfX3kp
OwogICAgICAtLV9NX25vZGVfY291bnQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXks
IHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1l
IF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9W
YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBfUmJfdHJlZTxf
S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZXJhc2UoY29uc3QgX0tleSYg
X194KQogICAgewogICAgICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5n
ZShfX3gpOwogICAgICBzaXplX3R5cGUgX19uID0gc3RkOjpkaXN0YW5jZShfX3AuZmlyc3QsIF9f
cC5zZWNvbmQpOwogICAgICBlcmFzZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwogICAgICByZXR1
cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0
eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0Fs
bG9jPjo6X0xpbmtfdHlwZQogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NvbXBhcmUsX0Fs
bG9jPjo6CiAgICBfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlua190eXBlIF9fcCkKICAgIHsK
CiAgICAgIF9MaW5rX3R5cGUgX190b3AgPSBfTV9jbG9uZV9ub2RlKF9feCk7CiAgICAgIF9fdG9w
LT5fTV9wYXJlbnQgPSBfX3A7CgogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBpZiAoX194
LT5fTV9yaWdodCkKICAgICAgICAgICAgX190b3AtPl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdo
dChfX3gpLCBfX3RvcCk7CiAgICAgICAgICBfX3AgPSBfX3RvcDsKICAgICAgICAgIF9feCA9IF9T
X2xlZnQoX194KTsKCiAgICAgICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBfTGlua190eXBlIF9feSA9IF9NX2Nsb25lX25vZGUoX194KTsKICAgICAgICAg
ICAgICBfX3AtPl9NX2xlZnQgPSBfX3k7CiAgICAgICAgICAgICAgX195LT5fTV9wYXJlbnQgPSBf
X3A7CiAgICAgICAgICAgICAgaWYgKF9feC0+X01fcmlnaHQpCiAgICAgICAgICAgICAgICBfX3kt
Pl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3kpOwogICAgICAgICAgICAgIF9f
cCA9IF9feTsKICAgICAgICAgICAgICBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfTV9lcmFzZShf
X3RvcCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3RvcDsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tl
eU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+OjpfTV9lcmFzZShfTGlua190eXBlIF9feCkKICAgIHsKCiAgICAgIHdoaWxlIChfX3ggIT0g
MCkKICAgICAgICB7CiAgICAgICAgICBfTV9lcmFzZShfU19yaWdodChfX3gpKTsKICAgICAgICAg
IF9MaW5rX3R5cGUgX195ID0gX1NfbGVmdChfX3gpOwogICAgICAgICAgZGVzdHJveV9ub2RlKF9f
eCk7CiAgICAgICAgICBfX3ggPSBfX3k7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAg
ICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZXJhc2UoaXRl
cmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICBpZiAoX19maXJzdCA9
PSBiZWdpbigpICYmIF9fbGFzdCA9PSBlbmQoKSkKICAgICAgICBjbGVhcigpOwogICAgICBlbHNl
CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSBlcmFzZShfX2ZpcnN0KyspOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5
T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz46OgogICAgZXJhc2UoY29uc3QgX0tleSogX19maXJzdCwgY29uc3QgX0tleSogX19sYXN0KQog
ICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgZXJhc2UoKl9fZmly
c3QrKyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5
cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+OjpmaW5kKGNvbnN0IF9LZXkmIF9faykKICAgIHsKICAgICAgX0xp
bmtfdHlwZSBfX3kKICAgICAgICA9IHRoaXMtPl9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBf
X3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYgKCFfTV9r
ZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgICAgIF9feSA9IF9feCwgX194ID0g
X1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7
CgogICAgICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOwogICAgICByZXR1cm4gKF9faiA9
PSBlbmQoKSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/CiAg
ICAgICAgZW5kKCkgOiBfX2o7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVu
YW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w
YXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKICAgIF9SYl90cmVlPF9L
ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGZpbmQoY29uc3QgX0tl
eSYgX19rKSBjb25zdAogICAgewogICAgICBfTGlua190eXBlIF9feQogICAgICAgID0gdGhpcy0+
X01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgd2hpbGUg
KF9feCAhPSAwKQogICAgICAgewogICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShf
X3gpLCBfX2spKQogICAgICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICAgICAgIH0KICAgICBj
b25zdF9pdGVyYXRvciBfX2ogPSBjb25zdF9pdGVyYXRvcihfX3kpOwogICAgIHJldHVybiAoX19q
ID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9fai5fTV9ub2RlKSkpID8K
ICAgICAgIGVuZCgpIDogX19qOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBl
bmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t
cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OnNpemVfdHlwZQogICAgX1JiX3RyZWU8X0tleSxf
VmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgY291bnQoY29uc3QgX0tleSYg
X19rKSBjb25zdAogICAgewogICAgICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRv
cj4gX19wID0gZXF1YWxfcmFuZ2UoX19rKTsKICAgICAgc2l6ZV90eXBlIF9fbiA9IHN0ZDo6ZGlz
dGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFs
dWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5
cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpp
dGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz46OgogICAgbG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQogICAgewogICAgICBfTGlua190
eXBlIF9feQogICAgICAgID0gdGhpcy0+X01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9
IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICBpZiAoIV9NX2tleV9j
b21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19s
ZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAg
ICAgIHJldHVybiBpdGVyYXRvcihfX3kpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5
LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFt
ZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxf
VmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJf
dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBsb3dlcl9i
b3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195CiAg
ICAgICAgPSB0aGlzLT5fTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgp
OwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nf
a2V5KF9feCksIF9faykpCiAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsK
ICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgICAgcmV0dXJu
IGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5
cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9D
b21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWws
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXks
X1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIHVwcGVyX2JvdW5kKGNvbnN0
IF9LZXkmIF9faykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kKICAgICAgICA9IHRoaXMtPl9N
X2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAo
X194ICE9IDApCiAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQog
ICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAg
ICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIHJldHVybiBpdGVyYXRvcihfX3kpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBf
S2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9j
PgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6CiAgICB1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0
CiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195CiAgICAgICAgPSB0aGlzLT5fTV9oZWFkZXI7CiAg
ICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQog
ICAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkKICAgICAgICAgIF9f
eSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9
IF9TX3JpZ2h0KF9feCk7CgogICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9m
VmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGlubGluZQogICAgcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUmJfdHJlZTxf
S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3I+CiAgICBfUmJf
dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBlcXVhbF9y
YW5nZShjb25zdCBfS2V5JiBfX2spCiAgICB7IHJldHVybiBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRv
cj4obG93ZXJfYm91bmQoX19rKSwgdXBwZXJfYm91bmQoX19rKSk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAgICAgICB0eXBl
bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogIGlubGluZQogIHBhaXI8dHlwZW5hbWUg
X1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJh
dG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUs
IF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yPgogIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9D
b21wYXJlLCBfQWxsb2M+CiAgOjplcXVhbF9yYW5nZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CiAg
ewogICAgcmV0dXJuIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+KGxvd2VyX2Jv
dW5kKF9fayksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXBwZXJfYm91bmQoX19rKSk7CiAgfQoKICBpbmxpbmUgaW50CiAgX19ibGFja19jb3VudChfUmJf
dHJlZV9ub2RlX2Jhc2UqIF9fbm9kZSwgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3Jvb3QpCiAgewog
ICAgaWYgKF9fbm9kZSA9PSAwKQogICAgICByZXR1cm4gMDsKICAgIGludCBfX3N1bSA9IDA7CiAg
ICBkbwogICAgICB7CiAgICAgICAgaWYgKF9fbm9kZS0+X01fY29sb3IgPT0gX01fYmxhY2spCiAg
ICAgICAgICArK19fc3VtOwogICAgICAgIGlmIChfX25vZGUgPT0gX19yb290KQogICAgICAgICAg
YnJlYWs7CiAgICAgICAgX19ub2RlID0gX19ub2RlLT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgIHdo
aWxlICgxKTsKICAgIHJldHVybiBfX3N1bTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXks
IHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1l
IF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBib29sCiAgICBfUmJfdHJlZTxfS2V5LF9W
YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X19yYl92ZXJpZnkoKSBjb25zdAogICAg
ewogICAgaWYgKF9NX25vZGVfY291bnQgPT0gMCB8fCBiZWdpbigpID09IGVuZCgpKQogICAgICBy
ZXR1cm4gX01fbm9kZV9jb3VudCA9PSAwICYmIGJlZ2luKCkgPT0gZW5kKCkgJiYKICAgICAgICB0
aGlzLT5fTV9oZWFkZXItPl9NX2xlZnQgPT0gdGhpcy0+X01faGVhZGVyCiAgICAgICAgJiYgdGhp
cy0+X01faGVhZGVyLT5fTV9yaWdodCA9PSB0aGlzLT5fTV9oZWFkZXI7CgogICAgaW50IF9fbGVu
ID0gX19ibGFja19jb3VudChfTV9sZWZ0bW9zdCgpLCBfTV9yb290KCkpOwogICAgZm9yIChjb25z
dF9pdGVyYXRvciBfX2l0ID0gYmVnaW4oKTsgX19pdCAhPSBlbmQoKTsgKytfX2l0KQogICAgICB7
CiAgICAgICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX19pdC5fTV9ub2RlOwogICAg
ICAgIF9MaW5rX3R5cGUgX19MID0gX1NfbGVmdChfX3gpOwogICAgICAgIF9MaW5rX3R5cGUgX19S
ID0gX1NfcmlnaHQoX194KTsKCiAgICAgICAgaWYgKF9feC0+X01fY29sb3IgPT0gX01fcmVkKQog
ICAgICAgICAgaWYgKChfX0wgJiYgX19MLT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAg
ICAgfHwgKF9fUiAmJiBfX1ItPl9NX2NvbG9yID09IF9NX3JlZCkpCiAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKCiAgICAgICAgaWYgKF9fTCAmJiBfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwg
X1Nfa2V5KF9fTCkpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChfX1IgJiYg
X01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fUiksIF9TX2tleShfX3gpKSkKICAgICAgICAgIHJldHVy
biBmYWxzZTsKCiAgICAgICAgaWYgKCFfX0wgJiYgIV9fUiAmJiBfX2JsYWNrX2NvdW50KF9feCwg
X01fcm9vdCgpKSAhPSBfX2xlbikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAg
IGlmIChfTV9sZWZ0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfTV9y
b290KCkpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoX01fcmlnaHRtb3N0KCkgIT0gX1Ji
X3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9NX3Jvb3QoKSkpCiAgICAgIHJldHVybiBmYWxz
ZTsKICAgIHJldHVybiB0cnVlOwogICAgfQp9CiMgNjcgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2Mt
bXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9tYXAiIDIgMwojIDEgIi9ub3Ru
ZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9i
aXRzL3N0bF9tYXAuaCIgMSAzCiMgNjYgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9J
TlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9tYXAuaCIgMwpuYW1lc3BhY2Ug
c3RkCnsKIyA4OSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9j
KysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9L
ZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAgICAg
ICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4g
PgogICAgY2xhc3MgbWFwCiAgewoKICAgCiAgIAoKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9LZXkg
a2V5X3R5cGU7CiAgICB0eXBlZGVmIF9UcCBtYXBwZWRfdHlwZTsKICAgIHR5cGVkZWYgcGFpcjxj
b25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21w
YXJlOwoKICAgIGNsYXNzIHZhbHVlX2NvbXBhcmUKICAgICAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+CiAgICAgIHsKICAgICAgICBmcmllbmQg
Y2xhc3MgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgICAgIHByb3RlY3RlZDoKICAg
ICAgICBfQ29tcGFyZSBjb21wOwogICAgICAgIHZhbHVlX2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6
IGNvbXAoX19jKSB7fQogICAgICBwdWJsaWM6CiAgICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0
IHZhbHVlX3R5cGUmIF9feCwgY29uc3QgdmFsdWVfdHlwZSYgX195KSBjb25zdAogICAgICAgIHsg
cmV0dXJuIGNvbXAoX194LmZpcnN0LCBfX3kuZmlyc3QpOyB9CiAgICAgIH07CgogIHByaXZhdGU6
CgogICAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAgICAg
ICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1Jl
cF90eXBlOwoKICAgIF9SZXBfdHlwZSBfTV90OwoKICBwdWJsaWM6CgoKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgdHlwZWRlZiB0
eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICB0
eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0eXBlZGVm
IHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICB0
eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwog
ICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICB0
eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJh
dG9yOwogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0
b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKIyAxNDQgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2Mt
bXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9tYXAuaCIgMwog
ICAgbWFwKCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpIHsgfQoKCgoKCiAg
ICBleHBsaWNpdAogICAgbWFwKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsIGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9NX3QoX19jb21wLCBfX2Ep
IHsgfQojIDE2MSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9j
KysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAzCiAgICBtYXAoY29uc3QgbWFwJiBfX3gp
CiAgICAgIDogX01fdChfX3guX01fdCkgeyB9CiMgMTczICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2Nj
LW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfbWFwLmgiIDMK
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgbWFwKF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgOiBfTV90KF9Db21w
YXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmly
c3QsIF9fbGFzdCk7IH0KIyAxODkgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNU
L2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9tYXAuaCIgMwogICAgdGVtcGxhdGUg
PHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fY29t
cCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDog
X01fdChfX2NvbXAsIF9fYSkKICAgICAgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19s
YXN0KTsgfQojIDIxMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVk
ZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAzCiAgICBtYXAmCiAgICBvcGVyYXRv
cj0oY29uc3QgbWFwJiBfX3gpCiAgICB7CiAgICAgIF9NX3QgPSBfX3guX01fdDsKICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKCiAgICBhbGxvY2F0b3JfdHlwZQogICAgZ2V0X2FsbG9jYXRvcigp
IGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgoKCgoKCiAgICBpdGVyYXRv
cgogICAgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KCgoKCgoKICAgIGNvbnN0X2l0
ZXJhdG9yCiAgICBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQoKCgoKCiAg
ICBpdGVyYXRvcgogICAgZW5kKCkgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCgogICAgY29u
c3RfaXRlcmF0b3IKICAgIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgog
ICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsg
fQoKCgoKCgogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgcmJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoKCgoKCgogICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgcmVu
ZCgpIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CgoKCgoKCiAgICBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yCiAgICByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KCgoKICAgIGJvb2wK
ICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CgoKICAgIHNpemVfdHlw
ZQogICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CgoKICAgIHNpemVfdHlw
ZQogICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KIyAzMTAg
Ii9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVl
LXNzYS9iaXRzL3N0bF9tYXAuaCIgMwogICAgbWFwcGVkX3R5cGUmCiAgICBvcGVyYXRvcltdKGNv
bnN0IGtleV90eXBlJiBfX2spCiAgICB7CgogICAgIAoKICAgICAgaXRlcmF0b3IgX19pID0gbG93
ZXJfYm91bmQoX19rKTsKCiAgICAgIGlmIChfX2kgPT0gZW5kKCkgfHwga2V5X2NvbXAoKShfX2ss
ICgqX19pKS5maXJzdCkpCiAgICAgICAgX19pID0gaW5zZXJ0KF9faSwgdmFsdWVfdHlwZShfX2ss
IG1hcHBlZF90eXBlKCkpKTsKICAgICAgcmV0dXJuICgqX19pKS5zZWNvbmQ7CiAgICB9CiMgMzM4
ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJl
ZS1zc2EvYml0cy9zdGxfbWFwLmgiIDMKICAgIHBhaXI8aXRlcmF0b3IsYm9vbD4KICAgIGluc2Vy
dChjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUo
X194KTsgfQojIDM2MiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVk
ZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAzCiAgICBpdGVyYXRvcgogICAgaW5z
ZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7IHJldHVy
biBfTV90Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7IH0KIyAzNzQgIi9ub3RuZnMvZmNo
ZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0
bF9tYXAuaCIgMwogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICB2
b2lkCiAgICAgIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QpCiAgICAgIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyAz
ODggIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10
cmVlLXNzYS9iaXRzL3N0bF9tYXAuaCIgMwogICAgdm9pZAogICAgZXJhc2UoaXRlcmF0b3IgX19w
b3NpdGlvbikgeyBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CiMgNDAyICIvbm90bmZzL2ZjaGUv
QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxf
bWFwLmgiIDMKICAgIHNpemVfdHlwZQogICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyBy
ZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiMgNDE1ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11
ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfbWFwLmgiIDMKICAg
IHZvaWQKICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgeyBfTV90
LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyA0MjkgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2Mt
bXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9tYXAuaCIgMwog
ICAgdm9pZAogICAgc3dhcChtYXAmIF9feCkgeyBfTV90LnN3YXAoX194Ll9NX3QpOyB9CgoKCgoK
CgogICAgdm9pZAogICAgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoKCgoKCiAgICBrZXlfY29t
cGFyZQogICAga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KCgoK
CgogICAgdmFsdWVfY29tcGFyZQogICAgdmFsdWVfY29tcCgpIGNvbnN0IHsgcmV0dXJuIHZhbHVl
X2NvbXBhcmUoX01fdC5rZXlfY29tcCgpKTsgfQojIDQ2NyAiL25vdG5mcy9mY2hlL0JVSUxELWdj
Yy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAz
CiAgICBpdGVyYXRvcgogICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90
LmZpbmQoX194KTsgfQojIDQ4MSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv
aW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAzCiAgICBjb25zdF9pdGVy
YXRvcgogICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZp
bmQoX194KTsgfQojIDQ5MiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5j
bHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAzCiAgICBzaXplX3R5cGUKICAg
IGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBfTV90LmZpbmQo
X194KSA9PSBfTV90LmVuZCgpID8gMCA6IDE7IH0KIyA1MDcgIi9ub3RuZnMvZmNoZS9CVUlMRC1n
Y2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9tYXAuaCIg
MwogICAgaXRlcmF0b3IKICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0
dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQojIDUyMSAiL25vdG5mcy9mY2hlL0JVSUxELWdj
Yy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAz
CiAgICBjb25zdF9pdGVyYXRvcgogICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkg
Y29uc3QgeyByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CiMgNTMxICIvbm90bmZzL2Zj
aGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9z
dGxfbWFwLmgiIDMKICAgIGl0ZXJhdG9yCiAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYg
X194KSB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KIyA1NDIgIi9ub3RuZnMvZmNo
ZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0
bF9tYXAuaCIgMwogICAgY29uc3RfaXRlcmF0b3IKICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90
eXBlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KIyA1
NjEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10
cmVlLXNzYS9iaXRzL3N0bF9tYXAuaCIgMwogICAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4KICAg
IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpCiAgICB7IHJldHVybiBfTV90LmVxdWFs
X3JhbmdlKF9feCk7IH0KIyA1ODAgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNU
L2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9tYXAuaCIgMwogICAgcGFpcjxjb25z
dF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4KICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBl
JiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7IH0KCiAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0sxLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9DMSwgdHlwZW5h
bWUgX0ExPgogICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbWFwPF9LMSxfVDEsX0Mx
LF9BMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LMSxfVDEsX0Mx
LF9BMT4mKTsKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSzEsIHR5cGVuYW1lIF9UMSwgdHlwZW5h
bWUgX0MxLCB0eXBlbmFtZSBfQTE+CiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IG1h
cDxfSzEsX1QxLF9DMSxfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFw
PF9LMSxfVDEsX0MxLF9BMT4mKTsKICB9OwojIDYwMyAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1t
dWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAzCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IG1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IG1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fdCA9
PSBfX3kuX01fdDsgfQojIDYyMCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv
aW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAzCiAgdGVtcGxhdGUgPHR5
cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgbWFwPF9LZXksX1RwLF9D
b21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0Nv
bXBhcmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsgfQoK
CiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBh
cmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0
IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0
IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9
PSBfX3kpOyB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBl
bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPihjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg
ICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVy
biBfX3kgPCBfX3g7IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAs
IHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAg
b3BlcmF0b3I8PShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg
ICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAg
eyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlw
ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4m
IF9feCwKICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4m
IF9feSkKICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1l
IF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGlubGluZSB2b2lkCiAgICBzd2FwKG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gsIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IF9feC5zd2FwKF9f
eSk7IH0KfQojIDY4ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRl
L2MrKy8zLjUtdHJlZS1zc2EvbWFwIiAyIDMKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11
ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfbXVsdGltYXAuaCIg
MSAzCiMgNjYgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysr
LzMuNS10cmVlLXNzYS9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKICAgICAgICAgICAgdHlwZW5h
bWUgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBh
bGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgogIGNsYXNzIG11bHRpbWFwOwoKICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwg
dHlwZW5hbWUgX0FsbG9jPgogIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8
X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKCiAgdGVtcGxh
dGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVu
YW1lIF9BbGxvYz4KICBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBt
dWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwojIDEwNCAiL25vdG5mcy9m
Y2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMv
c3RsX211bHRpbWFwLmgiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1Rw
LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgbXVsdGltYXAK
ICB7CgogICAKICAgCgogIHB1YmxpYzoKICAgIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICAgIHR5
cGVkZWYgX1RwIG1hcHBlZF90eXBlOwogICAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXksIF9UcD4g
dmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgX0NvbXBhcmUga2V5X2NvbXBhcmU7CgogICAgY2xhc3Mg
dmFsdWVfY29tcGFyZQogICAgICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwg
dmFsdWVfdHlwZSwgYm9vbD4KICAgICAgewogICAgICAgIGZyaWVuZCBjbGFzcyBtdWx0aW1hcDxf
S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgX0NvbXBh
cmUgY29tcDsKICAgICAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBjb21wKF9fYykg
e30KICAgICAgcHVibGljOgogICAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBl
JiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QKICAgICAgICB7IHJldHVybiBjb21w
KF9feC5maXJzdCwgX195LmZpcnN0KTsgfQogICAgfTsKCiAgcHJpdmF0ZToKCiAgICB0eXBlZGVm
IF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgIF9TZWxl
Y3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKCiAgICBf
UmVwX3R5cGUgX01fdDsKCiAgcHVibGljOgoKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlw
ZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVw
X3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogICAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX1JlcF90eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogICAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3I7CgoKCgoKCgogICAgbXVsdGltYXAoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxs
b2NhdG9yX3R5cGUoKSkgeyB9CgoKCgoKICAgIGV4cGxpY2l0CiAgICBtdWx0aW1hcChjb25zdCBf
Q29tcGFyZSYgX19jb21wLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5
cGUoKSkKICAgICAgOiBfTV90KF9fY29tcCwgX19hKSB7IH0KIyAxNzQgIi9ub3RuZnMvZmNoZS9C
VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9t
dWx0aW1hcC5oIiAzCiAgICBtdWx0aW1hcChjb25zdCBtdWx0aW1hcCYgX194KQogICAgICA6IF9N
X3QoX194Ll9NX3QpIHsgfQojIDE4NiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO
U1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgbXVsdGltYXAoX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIDogX01fdChfQ29t
cGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgICAgIHsgX01fdC5pbnNlcnRfZXF1YWwoX19m
aXJzdCwgX19sYXN0KTsgfQojIDIwMiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO
U1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgbXVsdGltYXAoX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBjb25z
dCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgICA6IF9NX3QoX19jb21wLCBfX2EpCiAgICAg
ICAgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CiMgMjI1ICIvbm90bmZz
L2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0
cy9zdGxfbXVsdGltYXAuaCIgMwogICAgbXVsdGltYXAmCiAgICBvcGVyYXRvcj0oY29uc3QgbXVs
dGltYXAmIF9feCkKICAgIHsKICAgICAgX01fdCA9IF9feC5fTV90OwogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgoKICAgIGFsbG9jYXRvcl90eXBlCiAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3Qg
eyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCgoKCgoKICAgIGl0ZXJhdG9yCiAgICBi
ZWdpbigpIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQoKCgoKCgogICAgY29uc3RfaXRlcmF0b3IK
ICAgIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKICAgIGl0ZXJh
dG9yCiAgICBlbmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoKCiAgICBjb25zdF9pdGVy
YXRvcgogICAgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCgogICAgcmV2
ZXJzZV9pdGVyYXRvcgogICAgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoKCgoK
CgogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4g
X01fdC5yYmVnaW4oKTsgfQoKCgoKCgogICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgcmVuZCgpIHsg
cmV0dXJuIF9NX3QucmVuZCgpOyB9CgoKCgoKCiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAg
ICByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KCgoKICAgIGJvb2wKICAgIGVt
cHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CgoKICAgIHNpemVfdHlwZQogICAg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CgoKICAgIHNpemVfdHlwZQogICAg
bWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KIyAzMjUgIi9ub3Ru
ZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9i
aXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICBpdGVyYXRvcgogICAgaW5zZXJ0KGNvbnN0IHZhbHVl
X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoX194KTsgfQojIDM0OCAiL25v
dG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3Nh
L2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICAgIGl0ZXJhdG9yCiAgICBpbnNlcnQoaXRlcmF0b3Ig
X19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgeyByZXR1cm4gX01fdC5pbnNl
cnRfZXF1YWwoX19wb3NpdGlvbiwgX194KTsgfQojIDM2MCAiL25vdG5mcy9mY2hlL0JVSUxELWdj
Yy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX211bHRpbWFw
LmgiIDMKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAog
ICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
KQogICAgICB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyAzNzQgIi9u
b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz
YS9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICB2b2lkCiAgICBlcmFzZShpdGVyYXRvciBfX3Bv
c2l0aW9uKSB7IF9NX3QuZXJhc2UoX19wb3NpdGlvbik7IH0KIyAzODggIi9ub3RuZnMvZmNoZS9C
VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9t
dWx0aW1hcC5oIiAzCiAgICBzaXplX3R5cGUKICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gp
IHsgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsgfQojIDQwMSAiL25vdG5mcy9mY2hlL0JVSUxELWdj
Yy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX211bHRpbWFw
LmgiIDMKICAgIHZvaWQKICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFz
dCkgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyA0MTUgIi9ub3RuZnMvZmNoZS9C
VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9t
dWx0aW1hcC5oIiAzCiAgICB2b2lkCiAgICBzd2FwKG11bHRpbWFwJiBfX3gpIHsgX01fdC5zd2Fw
KF9feC5fTV90KTsgfQoKCgoKCgoKICAgIHZvaWQKICAgIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7
IH0KCgoKCgoKICAgIGtleV9jb21wYXJlCiAgICBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9N
X3Qua2V5X2NvbXAoKTsgfQoKCgoKCiAgICB2YWx1ZV9jb21wYXJlCiAgICB2YWx1ZV9jb21wKCkg
Y29uc3QgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9jb21wKCkpOyB9CiMgNDU0ICIv
bm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1z
c2EvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgaXRlcmF0b3IKICAgIGZpbmQoY29uc3Qga2V5
X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KIyA0NjggIi9ub3RuZnMvZmNo
ZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0
bF9tdWx0aW1hcC5oIiAzCiAgICBjb25zdF9pdGVyYXRvcgogICAgZmluZChjb25zdCBrZXlfdHlw
ZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQoKCgoKCgogICAgc2l6ZV90
eXBlCiAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNv
dW50KF9feCk7IH0KIyA0OTAgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2lu
Y2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICBpdGVyYXRv
cgogICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5sb3dl
cl9ib3VuZChfX3gpOyB9CiMgNTA0ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T
VC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgY29u
c3RfaXRlcmF0b3IKICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsg
cmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQoKCgoKCgogICAgaXRlcmF0b3IKICAgIHVw
cGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQo
X194KTsgfQoKCgoKCgoKICAgIGNvbnN0X2l0ZXJhdG9yCiAgICB1cHBlcl9ib3VuZChjb25zdCBr
ZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KIyA1
MzcgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10
cmVlLXNzYS9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9y
PgogICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5lcXVh
bF9yYW5nZShfX3gpOyB9CiMgNTUzICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T
VC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgcGFp
cjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4KICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtl
eV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsgfQoKICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBfSzEsIHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX0MxLCB0eXBl
bmFtZSBfQTE+CiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBtdWx0aW1hcDxfSzEs
X1QxLF9DMSxfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFw
PF9LMSxfVDEsX0MxLF9BMT4mKTsKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSzEsIHR5cGVuYW1l
IF9UMSwgdHlwZW5hbWUgX0MxLCB0eXBlbmFtZSBfQTE+CiAgICBmcmllbmQgYm9vbCBvcGVyYXRv
cjwgKGNvbnN0IG11bHRpbWFwPF9LMSxfVDEsX0MxLF9BMT4mLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBtdWx0aW1hcDxfSzEsX1QxLF9DMSxfQTE+Jik7CiAgfTsKIyA1NzUgIi9u
b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz
YS9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVu
YW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvcj09KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv
Yz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUs
X0FsbG9jPiYgX195KQogICAgewogICAgICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7CiAg
ICB9CiMgNTk0ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2Mr
Ky8zLjUtdHJlZS1zc2EvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9D
b21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9U
cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fdCA8IF9feS5fTV90
OyB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf
Q29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0o
Y29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg
ICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7
IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlw
ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxs
b2M+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUs
X0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9CgoKICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgbXVsdGltYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxf
S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feSA8IF9feCk7
IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D
b21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShj
b25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg
ICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsg
cmV0dXJuICEoX194IDwgX195KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVu
YW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2
b2lkCiAgICBzd2FwKG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAg
ICAgICAgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyBfX3gu
c3dhcChfX3kpOyB9Cn0KIyA2OSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv
aW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL21hcCIgMiAzCiMgMiAiL2hvbWUvZmNoZS90bXAvZm9v
Mi5jYyIgMgoKY2xhc3MgZm9vIHsKICBzdGF0aWMgc3RkOjptYXA8aW50LGludD4gYmFyOwp9Owpz
dGQ6Om1hcDxpbnQsaW50PiBmb286OmJhcjsKCmNsYXNzIGZvbzIgewogIGludCB6OwogIGZvbzIg
KCk7Cn07CgoKZm9vMjo6Zm9vMigpIHsKICBmb286OmJhclt6XSA9IDU7Cn0K



More information about the Gcc-bugs mailing list