public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/10568: Template instantiation failure on AIX
@ 2003-04-30 16:46 dje
  0 siblings, 0 replies; only message in thread
From: dje @ 2003-04-30 16:46 UTC (permalink / raw)
  To: gcc-gnats


>Number:         10568
>Category:       c++
>Synopsis:       Template instantiation failure on AIX
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Apr 30 16:46:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     dje@watson.ibm.com
>Release:        gcc-3.4 200304XX (experimental)
>Organization:
>Environment:
powerpc-ibm-aix4.3.3.0
>Description:
Late April C++ front-end changes cause new libstdc++ testcase
failures.  The testcase now produces linker errors for
templates which are explicitly instantiated in the source
code.
>How-To-Repeat:
g++ -O2 -g -lv3test -L/gcc/dje/build/powerpc-ibm-aix4.3.3.0-20030428/powerpc-ibm-aix4.3.3.0//libstdc++-v3/testsuite -lm
>Fix:

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

IyAxICIvZ2NjL2RqZS9zcmMvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yN19pby9iYXNpY19pc3Ry
ZWFtL3NlbnRyeS9jaGFyLzM5ODMtZnN0cmVhbS5jYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxj
b21tYW5kIGxpbmU+IgoKCgoKCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk
ZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvc3RkYysrLmgiIDEKIyA4ICI8Y29tbWFuZCBs
aW5lPiIgMgojIDEgIi9nY2MvZGplL3NyYy9saWJzdGRjKystdjMvdGVzdHN1aXRlLzI3X2lvL2Jh
c2ljX2lzdHJlYW0vc2VudHJ5L2NoYXIvMzk4My1mc3RyZWFtLmNjIgojIDMyICIvZ2NjL2RqZS9z
cmMvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yN19pby9iYXNpY19pc3RyZWFtL3NlbnRyeS9jaGFy
LzM5ODMtZnN0cmVhbS5jYyIKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu
My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv
ZnN0cmVhbSIgMQojIDQ0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw
MDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvZnN0cmVh
bSIgMwoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaXN0cmVhbSIgMSAz
CiMgNDQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCgojIDEg
Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pb3MiIDEgMwojIDQzICIvZ2NjL2Rq
ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaW9zIiAzCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9pb3Nmd2QiIDEgMwojIDQ0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr
LXYzL2luY2x1ZGUvaW9zZndkIiAzCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j
bHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM1ICIv
Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9i
aXRzL2MrK2NvbmZpZy5oIiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM2ICIvZ2Nj
L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRz
L2MrK2NvbmZpZy5oIiAyIDMKIyA0NiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl
L2lvc2Z3ZCIgMiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y
MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAvYml0cy9jKytsb2NhbGUuaCIgMSAzCiMgNDAgIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC9saWJzdGRjKystdjMvaW5jbHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvYysrbG9j
YWxlLmgiIDMKCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz
MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nsb2NhbGUi
IDEgMwojIDQ4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY2xvY2FsZSIgMwoK
IyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9p
bmNsdWRlL2xvY2FsZS5oIiAxIDMgNAojIDQ1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKIyAxICIvdXNyL2lu
Y2x1ZGUvc3RhbmRhcmRzLmgiIDEgMyA0CiMgNDYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvbG9jYWxlLmgiIDIgMyA0CgoKCmV4dGVy
biAiQyIgewojIDYwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw
NDI4L2djYy9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKc3RydWN0IGxjb252IHsKICAgY2hhciAqZGVj
aW1hbF9wb2ludDsKICAgY2hhciAqdGhvdXNhbmRzX3NlcDsKICAgY2hhciAqZ3JvdXBpbmc7CiAg
IGNoYXIgKmludF9jdXJyX3N5bWJvbDsKICAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwogICBjaGFy
ICptb25fZGVjaW1hbF9wb2ludDsKICAgY2hhciAqbW9uX3Rob3VzYW5kc19zZXA7CiAgIGNoYXIg
Km1vbl9ncm91cGluZzsKICAgY2hhciAqcG9zaXRpdmVfc2lnbjsKICAgY2hhciAqbmVnYXRpdmVf
c2lnbjsKICAgY2hhciBpbnRfZnJhY19kaWdpdHM7CiAgIGNoYXIgZnJhY19kaWdpdHM7CiAgIGNo
YXIgcF9jc19wcmVjZWRlczsKICAgY2hhciBwX3NlcF9ieV9zcGFjZTsKICAgY2hhciBuX2NzX3By
ZWNlZGVzOwogICBjaGFyIG5fc2VwX2J5X3NwYWNlOwogICBjaGFyIHBfc2lnbl9wb3NuOwogICBj
aGFyIG5fc2lnbl9wb3NuOwoKCiAgIGNoYXIgKmxlZnRfcGFyZW50aGVzaXM7CiAgIGNoYXIgKnJp
Z2h0X3BhcmVudGhlc2lzOwoKCgoKCn0gOwojIDEwNCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9sb2NhbGUuaCIgMyA0CnN0cnVjdCBs
Y29udiAqbG9jYWxlY29udih2b2lkKTsKY2hhciAqc2V0bG9jYWxlKGludCwgY29uc3QgY2hhciAq
KTsKCgoKCgp0eXBlZGVmIHN0cnVjdCBsY29udiBsY29udjsKCgoKfQojIDUwICIvZ2NjL2RqZS9i
dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY2xvY2FsZSIgMiAzCgoKCgoKbmFtZXNwYWNlIHN0ZAp7
CiAgdXNpbmcgOjpsY29udjsKICB1c2luZyA6OnNldGxvY2FsZTsKICB1c2luZyA6OmxvY2FsZWNv
bnY7Cn0KIyA0MiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy
OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAvYml0cy9jKytsb2NhbGUuaCIgMiAzCgoKCm5hbWVzcGFjZSBzdGQKewogIHR5
cGVkZWYgaW50KiBfX2NfbG9jYWxlOwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgogICAg
aW50CiAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LAogICAgICAgY29uc3QgaW50IF9f
c2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAogICAgICAgY29uc3QgY2hhciogX19m
bXQsCiAgICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYyA9IC0xKQog
ICAgewogICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZSgtMSwgKDApKTsKICAgICAgY2hhciog
X19zYXYgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFsbG9jKHN0cmxlbihfX29sZCkgKyAxKSk7CiAg
ICAgIGlmIChfX3NhdikKICAgICAgICBzdHJjcHkoX19zYXYsIF9fb2xkKTsKICAgICAgc2V0bG9j
YWxlKC0xLCAiQyIpOwoKICAgICAgaW50IF9fcmV0OwoKCgoKCgogICAgICBpZiAoX19wcmVjID49
IDApCiAgICAgICAgX19yZXQgPSBzcHJpbnRmKF9fb3V0LCBfX2ZtdCwgX19wcmVjLCBfX3YpOwog
ICAgICBlbHNlCiAgICAgICAgX19yZXQgPSBzcHJpbnRmKF9fb3V0LCBfX2ZtdCwgX192KTsKCiAg
ICAgIHNldGxvY2FsZSgtMSwgX19zYXYpOwogICAgICBmcmVlKF9fc2F2KTsKICAgICAgcmV0dXJu
IF9fcmV0OwogICAgfQp9CiMgNDcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9p
b3Nmd2QiIDIgMwojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw
MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jY3R5cGUi
IDEgMwojIDQ3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY2N0eXBlIiAzCgoK
IyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9p
bmNsdWRlL2N0eXBlLmgiIDEgMyA0CiMgNzkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvY3R5cGUuaCIgMyA0CiBleHRlcm4gaW50IGlz
YWxwaGEoaW50KTsKIGV4dGVybiBpbnQgaXNhbG51bShpbnQpOwogZXh0ZXJuIGludCBpc2NudHJs
KGludCk7CiBleHRlcm4gaW50IGlzZGlnaXQoaW50KTsKIGV4dGVybiBpbnQgaXNncmFwaChpbnQp
OwogZXh0ZXJuIGludCBpc2xvd2VyKGludCk7CiBleHRlcm4gaW50IGlzcHJpbnQoaW50KTsKIGV4
dGVybiBpbnQgaXNwdW5jdChpbnQpOwogZXh0ZXJuIGludCBpc3NwYWNlKGludCk7CiBleHRlcm4g
aW50IGlzdXBwZXIoaW50KTsKIGV4dGVybiBpbnQgaXN4ZGlnaXQoaW50KTsKIGV4dGVybiBpbnQg
dG91cHBlcihpbnQpOwogZXh0ZXJuIGludCB0b2xvd2VyKGludCk7CiMgMTA3ICIvZ2NjL2RqZS9i
dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL2N0eXBlLmgi
IDMgNAogdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2N0eXBlX3Q7CgoKCgogdHlwZWRlZiBpbnQgd2lu
dF90OwoKCgoKCgogZXh0ZXJuIGludCBpc2FzY2lpKGludCk7CiBleHRlcm4gaW50IHRvYXNjaWko
aW50KTsKIyAxMzEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0
MjgvZ2NjL2luY2x1ZGUvY3R5cGUuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9sb2NhbGVk
ZWYuaCIgMSAzIDQKIyAzOSAiL3Vzci9pbmNsdWRlL3N5cy9sb2NhbGVkZWYuaCIgMyA0CnN0cnVj
dCBfX0xDX2xvY2FsZTsKc3RydWN0IF9MQ19sb2NhbGVfb2JqaGRsOwoKIyAxICIvdXNyL2luY2x1
ZGUvc3lzL2xpbWl0cy5oIiAxIDMgNAojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL2xpbWl0cy5oIiAz
IDQKZXh0ZXJuICJDIiB7CiMgMjQ3ICIvdXNyL2luY2x1ZGUvc3lzL2xpbWl0cy5oIiAzIDQKIyAx
ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNs
dWRlL2Zsb2F0LmgiIDEgMyA0CiMgMjQ4ICIvdXNyL2luY2x1ZGUvc3lzL2xpbWl0cy5oIiAyIDMg
NAojIDM5NyAiL3Vzci9pbmNsdWRlL3N5cy9saW1pdHMuaCIgMyA0Cn0KIyA0MyAiL3Vzci9pbmNs
dWRlL3N5cy9sb2NhbGVkZWYuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2xjX2NvcmUu
aCIgMSAzIDQKIyAzNiAiL3Vzci9pbmNsdWRlL3N5cy9sY19jb3JlLmgiIDMgNAojIDEgIi9nY2Mv
ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lz
L3R5cGVzLmgiIDEgMyA0CiMgNTIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNApleHRlcm4gIkMiIHsKIyA2
NCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pbnR0eXBlcy5oIiAx
IDMgNAojIDU2ICIvdXNyL2luY2x1ZGUvc3lzL2ludHR5cGVzLmgiIDMgNApleHRlcm4gIkMiIHsK
IyA2NSAiL3Vzci9pbmNsdWRlL3N5cy9pbnR0eXBlcy5oIiAzIDQKdHlwZWRlZiBzaWduZWQgY2hh
ciBpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGlu
dCBpbnQzMl90OwoKCgoKdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludDY0X3Q7CgoKCnR5cGVk
ZWYgdW5zaWduZWQgY2hhciB1aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnQxNl90
Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBsb25nIHVpbnQ2NF90OwojIDkyICIvdXNyL2luY2x1ZGUvc3lzL2ludHR5cGVzLmgiIDMgNAp0
eXBlZGVmIGludDY0X3QgaW50bWF4X3Q7CnR5cGVkZWYgdWludDY0X3QgdWludG1heF90OwojIDEw
NCAiL3Vzci9pbmNsdWRlL3N5cy9pbnR0eXBlcy5oIiAzIDQKdHlwZWRlZiBzaWduZWQgbG9uZyBp
bnRwdHJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVpbnRwdHJfdDsKCgoKCgp0eXBlZGVmIHNp
Z25lZCBjaGFyIGludF9sZWFzdDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50X2xlYXN0MTZf
dDsKdHlwZWRlZiBzaWduZWQgaW50IGludF9sZWFzdDMyX3Q7CgoKCgp0eXBlZGVmIHNpZ25lZCBs
b25nIGxvbmcgaW50X2xlYXN0NjRfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnRfbGVh
c3Q4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludF9sZWFzdDE2X3Q7CnR5cGVkZWYgdW5z
aWduZWQgaW50IHVpbnRfbGVhc3QzMl90OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcg
dWludF9sZWFzdDY0X3Q7CiMgMTM4ICIvdXNyL2luY2x1ZGUvc3lzL2ludHR5cGVzLmgiIDMgNAp0
eXBlZGVmIGludDMyX3QgaW50ZmFzdF90Owp0eXBlZGVmIHVpbnQzMl90IHVpbnRmYXN0X3Q7CgoK
dHlwZWRlZiBzaWduZWQgY2hhciBpbnRfZmFzdDhfdDsKdHlwZWRlZiBpbnQzMl90IGludF9mYXN0
MTZfdDsKdHlwZWRlZiBpbnQzMl90IGludF9mYXN0MzJfdDsKdHlwZWRlZiB1aW50MzJfdCB1aW50
X2Zhc3Q4X3Q7CnR5cGVkZWYgdWludDMyX3QgdWludF9mYXN0MTZfdDsKdHlwZWRlZiB1aW50MzJf
dCB1aW50X2Zhc3QzMl90OwoKdHlwZWRlZiBpbnQ2NF90IGludF9mYXN0NjRfdDsKdHlwZWRlZiB1
aW50NjRfdCB1aW50X2Zhc3Q2NF90OwojIDU3NSAiL3Vzci9pbmNsdWRlL3N5cy9pbnR0eXBlcy5o
IiAzIDQKdHlwZWRlZiBzaWduZWQgbG9uZyBfX2xvbmczMl90Owp0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgX191bG9uZzMyX3Q7CiMgNTg3ICIvdXNyL2luY2x1ZGUvc3lzL2ludHR5cGVzLmgiIDMgNAp0
eXBlZGVmIHNpZ25lZCBpbnQgX19sb25nNjRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191bG9u
ZzY0X3Q7CiMgNTk5ICIvdXNyL2luY2x1ZGUvc3lzL2ludHR5cGVzLmgiIDMgNAp0eXBlZGVmIHNp
Z25lZCBpbnQgaW50MzJsb25nNjRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMybG9uZzY0
X3Q7CiMgNjEyICIvdXNyL2luY2x1ZGUvc3lzL2ludHR5cGVzLmgiIDMgNAp0eXBlZGVmIHNpZ25l
ZCBsb25nIGxvbmczMmludDY0X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzMyaW50NjRf
dDsKIyA2MjIgIi91c3IvaW5jbHVkZS9zeXMvaW50dHlwZXMuaCIgMyA0CnR5cGVkZWYgc2lnbmVk
IGNoYXIgaW50ODsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50MTY7CnR5cGVkZWYgc2lnbmVkIGlu
dCBpbnQzMjsKCgoKCnR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQ2NDsKCgoKdHlwZWRlZiB1
bnNpZ25lZCBjaGFyIHVfaW50ODsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVfaW50OF90Owp0eXBl
ZGVmIHVuc2lnbmVkIHNob3J0IHVfaW50MTY7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9pbnQx
Nl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDMyOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1
X2ludDMyX3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdV9pbnQ2NDsKdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIGxvbmcgdV9pbnQ2NF90OwojIDY2NCAiL3Vzci9pbmNsdWRlL3N5cy9p
bnR0eXBlcy5oIiAzIDQKZXh0ZXJuIGxvbmcgc3RydG9pbWF4KGNvbnN0IGNoYXIgKiwgY2hhciAq
KiwgaW50KTsKCgoKCgp9CiMgNjUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CiMgODcgIi9nY2MvZGpl
L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcgaW50IHB0cmRpZmZfdDsKIyAxMTQgIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDMgNAp0eXBlZGVmIGxvbmcgZnBvc190OwoKCgp0eXBlZGVmIGxvbmcgbG9uZyBmcG9zNjRf
dDsKCgoKCgoKdHlwZWRlZiBpbnQzMmxvbmc2NF90IHRpbWVfdDsKCgoKCnR5cGVkZWYgaW50IGNs
b2NrX3Q7CgoKCgoKCnR5cGVkZWYgbG9uZyB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDE0OCAiL2dj
Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgY2hhciB1Y2hhcl90Owp0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IHVzaG9ydF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X3Q7CnR5cGVk
ZWYgdW5zaWduZWQgbG9uZyB1bG9uZ190Owp0eXBlZGVmIHNpZ25lZCBsb25nIHNzaXplX3Q7CgoK
Cgp0eXBlZGVmIGludCBsZXZlbF90Owp0eXBlZGVmIGludDMybG9uZzY0X3QgZGFkZHJfdDsKdHlw
ZWRlZiBpbnQgZGFkZHIzMl90OwoKdHlwZWRlZiBpbnQ2NF90IGRhZGRyNjRfdDsKCnR5cGVkZWYg
Y2hhciAqIGNhZGRyX3Q7CnR5cGVkZWYgdWludDMybG9uZzY0X3QgaW5vX3Q7CnR5cGVkZWYgdWlu
dF90IGlubzMyX3Q7Cgp0eXBlZGVmIHVpbnQ2NF90IGlubzY0X3Q7Cgp0eXBlZGVmIHNob3J0IGNu
dF90Owp0eXBlZGVmIHVpbnQzMmxvbmc2NF90IGRldl90Owp0eXBlZGVmIHVpbnRfdCBkZXYzMl90
OwoKdHlwZWRlZiB1aW50NjRfdCBkZXY2NF90OwoKdHlwZWRlZiBpbnQgY2hhbl90Owp0eXBlZGVm
IGludCB0aW1lMzJfdDsKdHlwZWRlZiBpbnQgcGlkMzJfdDsKdHlwZWRlZiBpbnQgdGlkMzJfdDsK
CnR5cGVkZWYgdWludDY0X3QgcGlkNjRfdDsKdHlwZWRlZiB1aW50NjRfdCB0aWQ2NF90Owp0eXBl
ZGVmIHVpbnQ2NF90IHRpbWU2NF90OwoKCgoKCgoKdHlwZWRlZiB2b2lkICogX19wdHIzMjsKdHlw
ZWRlZiBjaGFyICogX19jcHRyMzI7CgoKdHlwZWRlZiBpbnQgc29mZl90OwoKCgoKdHlwZWRlZiBs
b25nIG9mZl90OwoKCgp0eXBlZGVmIGxvbmcgbG9uZyBvZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBw
YWRkcl90Owp0eXBlZGVmIGludDMybG9uZzY0X3Qga2V5X3Q7CnR5cGVkZWYgaW50IHRpbWVyX3Q7
CnR5cGVkZWYgc2hvcnQgbmxpbmtfdDsKdHlwZWRlZiB1aW50X3QgbW9kZV90Owp0eXBlZGVmIHVp
bnRfdCB1aWRfdDsKdHlwZWRlZiB1aW50X3QgZ2lkX3Q7CnR5cGVkZWYgX19wdHIzMiBtaWRfdDsK
dHlwZWRlZiBpbnQzMmxvbmc2NF90IHBpZF90Owp0eXBlZGVmIGludDMybG9uZzY0X3QgdGlkX3Q7
CnR5cGVkZWYgY2hhciBzbGFiX3RbMTJdOwp0eXBlZGVmIGxvbmcgbXR5cF90Owp0eXBlZGVmIGlu
dCBib29sZWFuX3Q7CnR5cGVkZWYgaW50IGNyaWRfdDsKCgp0eXBlZGVmIGludCBibGtjbnRfdDsK
dHlwZWRlZiBpbnQgYmxrc2l6ZV90OwojIDIzNCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYg
dWxvbmdfdCBmc2Jsa2NudF90Owp0eXBlZGVmIHVsb25nX3QgZnNmaWxjbnRfdDsKCgoKCgoKCnR5
cGVkZWYgdWludDMybG9uZzY0X3QgaWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdXNlY29uZHNf
dDsKdHlwZWRlZiBzaWduZWQgaW50IHN1c2Vjb25kc190Owp0eXBlZGVmIGludCBjbG9ja2lkX3Q7
CgoKCgp0eXBlZGVmIHN0cnVjdCBzaWdzZXRfdCB7CgogdW5zaWduZWQgaW50IGxvc2lnczsKIHVu
c2lnbmVkIGludCBoaXNpZ3M7CgoKCgp9IHNpZ3NldF90OwoKdHlwZWRlZiBpbnQgc2lnbmFsX3Q7
CgoKCgp0eXBlZGVmIHN0cnVjdCBmc2lkX3QgewoKCgoKIHVuc2lnbmVkIGludCB2YWxbMl07CgoK
Cgp9IGZzaWRfdDsKIyAyODUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt
MjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfX3B0
cV9xdWV1ZSB7CiBzdHJ1Y3QgX19wdHFfcXVldWUgKl9fcHRxX25leHQ7CiBzdHJ1Y3QgX19wdHFf
cXVldWUgKl9fcHRxX3ByZXY7Cn0gX19wdHFfcXVldWU7Cgp0eXBlZGVmIGludCBfX3B0bG9ja190
eXBlOwoKdHlwZWRlZiBzdHJ1Y3QgX19wdF9hdHRyICpwdGhyZWFkX2F0dHJfdDsKdHlwZWRlZiBz
dHJ1Y3QgX19wdF9hdHRyICpwdGhyZWFkX2NvbmRhdHRyX3Q7CnR5cGVkZWYgc3RydWN0IF9fcHRf
YXR0ciAqcHRocmVhZF9tdXRleGF0dHJfdDsKCgp0eXBlZGVmIHN0cnVjdCBfX3B0X2F0dHIgKnB0
aHJlYWRfcndsb2NrYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfdDsKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKIyAzMzcgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg
NAp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgX19wdHFfcXVldWUgKiBfX3B0cV9saW5rOwogICAg
ICAgIGludCBfX3Jlc2VydmVkMTsKICAgICAgICBfX3B0bG9ja190eXBlIF9fcHRtdHhfbG9jazsK
ICAgICAgICBpbnQgX19wdG10eF9mbGFnczsKICAgICAgICBwdGhyZWFkX3QgX19wdG10eF9vd25l
cjsKICAgICAgICBpbnQgX19tdHhfaWQ7CiAgICAgICAgaW50IF9fYWNxdWlzaXRpb25zOwogICAg
ICAgIGludCBfX210eF9raW5kOwogICAgICAgIGludCBfX2xvY2tfY3B0OwogICAgICAgIGludCBf
X3NsZWVwczsKICAgICAgICBpbnQgX19taXNzZXM7CiAgICAgICAgaW50IF9fcmVzZXJ2ZWQyOwog
ICAgICAgIHVuc2lnbmVkIGxvbmcgX19wdG10eF9kYng7Cn0gcHRocmVhZF9tdXRleF90OwoKdHlw
ZWRlZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgX19wdGN2X2RieDsKICAgICAgICBp
bnQgX19yZXNlcnZlZDE7CiAgICAgICAgX19wdGxvY2tfdHlwZSBfX3B0Y3ZfbG9jazsKICAgICAg
ICBpbnQgX19wdGN2X2ZsYWdzOwogICAgICAgIF9fcHRxX3F1ZXVlICogX19wdGN2X3dhaXRlcnM7
CiAgICAgICAgaW50IF9fcmVzZXJ2ZWQyOwogICAgICAgIGludCBfX2N2X2lkOwogICAgICAgIHVu
c2lnbmVkIGludCBfX2N2X211dGV4OwogICAgICAgIGludCBfX3Jlc2VydmVkMzsKICAgICAgICBp
bnQgX19jcHR3YWl0OwogICAgICAgIGludCBfX3Jlc2VydmVkOwoKfSBwdGhyZWFkX2NvbmRfdDsK
CgoKdHlwZWRlZiBzdHJ1Y3QgewogX19wdGxvY2tfdHlwZSBfX3B0b25jZV9sb2NrOwogaW50IF9f
cHRvbmNlX2luaXRpYWxpemVkOwogaW50IF9fcHRvbmNlX2V4ZWN1dGluZzsKIGludCBfX3B0b25j
ZV9jb21wbGV0ZWQ7CiBwdGhyZWFkX211dGV4X3QgX19wdG9uY2VfbXV0ZXg7CiBwdGhyZWFkX2Nv
bmRfdCBfX3B0b25jZV9leGVjdXRlZDsKfSBwdGhyZWFkX29uY2VfdDsKCgp0eXBlZGVmIHN0cnVj
dCB7CgoKCgoKICAgICAgICBpbnQgX19wYWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX3B0cmxv
Y2tfZGJ4OwoKCiAgICAgICAgcHRocmVhZF9tdXRleF90IF9fcndsX211dGV4OwogICAgICAgIHB0
aHJlYWRfY29uZF90IF9fcndsX3JzbGVlcGVyczsKICAgICAgICBwdGhyZWFkX2NvbmRfdCBfX3J3
bF93c2xlZXBlcnM7CiAgICAgICAgaW50IF9fcndsX2ZsYWdzOwogICAgICAgIHB0aHJlYWRfdCBf
X3J3bF9vd25lcjsKICAgICAgICBpbnQgX19yd2xfcndsb2NrX2lkOwogICAgICAgIGludCBfX3J3
bF9sb2NrX2NvdW50OwoKCiAgICAgICAgaW50IF9fcndsX3dhaXRpbmc7CiAgICAgICAgaW50IF9f
cndsX3dhY3F1aXNpdGlvbnM7CiAgICAgICAgaW50IF9fcndsX3JhY3F1aXNpdGlvbnM7CiAgICAg
ICAgaW50IF9fcndsX3dzbGVlcHM7CiAgICAgICAgaW50IF9fcndsX3JzbGVlcHM7CiAgICAgICAg
dW5zaWduZWQgbG9uZyBfX3Jlc2VydmVkWzZdOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCgoKCgp0
eXBlZGVmIHN0cnVjdCBfcXVhZCB7IGludCB2YWxbMl07IH0gcXVhZDsKCgojIDEgIi91c3IvaW5j
bHVkZS9zeXMvbV90eXBlcy5oIiAxIDMgNAojIDQwICIvdXNyL2luY2x1ZGUvc3lzL21fdHlwZXMu
aCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92bV90eXBlcy5oIiAxIDMgNAojIDM0ICIvdXNy
L2luY2x1ZGUvc3lzL3ZtX3R5cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcgdm1pZF90OwojIDQ1ICIv
dXNyL2luY2x1ZGUvc3lzL3ZtX3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVsb25nX3Qgdm1oYW5kbGVf
dDsKIyA1OCAiL3Vzci9pbmNsdWRlL3N5cy92bV90eXBlcy5oIiAzIDQKdHlwZWRlZiBsb25nMzJp
bnQ2NF90IGt2bWlkX3Q7CnR5cGVkZWYgdWxvbmczMmludDY0X3Qga3ZtaGFuZGxlX3Q7CnR5cGVk
ZWYgaW50IGt2bWlkeF90Owp0eXBlZGVmIGludDMybG9uZzY0X3Qgdm1pZHhfdDsKdHlwZWRlZiBp
bnQzMmxvbmc2NF90IHZta2V5X3Q7CnR5cGVkZWYgaW50MzJsb25nNjRfdCB2cG5fdDsKdHlwZWRl
ZiBpbnQzMmxvbmc2NF90IHJwbl90OwoKCgoKCgp0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgcnBu
NjRfdDsKCgoKCgoKCnR5cGVkZWYgaW50IGt2cG5fdDsKdHlwZWRlZiBpbnQga3Jwbl90Owp0eXBl
ZGVmIGludDMybG9uZzY0X3Qgdm1zaXplX3Q7CgoKCgoKCnR5cGVkZWYgc3RydWN0Cgp2bWFkZHJf
dAoKewoKIHZtaGFuZGxlX3Qgc3J2YWw7CiBjYWRkcl90IG9mZnNldDsKCgoKCn0gdm1hZGRyX3Q7
Cgp0eXBlZGVmIHN0cnVjdAoKYWRzcGFjZV90Cgp7CgogdWxvbmczMmludDY0X3QgYWxsb2M7CiBr
dm1oYW5kbGVfdCBzcnZhbFsxNl07CgoKCgp9IGFkc3BhY2VfdDsKCgoKCgoKCnR5cGVkZWYgZW51
bSBfTVJfQVRUUl9UWVBFIHsKICBWaXJ0QWRkciA9IDEKfSBNUl9BVFRSX1RZUEU7Cgp0eXBlZGVm
IGVudW0gX01SX0xBQkVMX1RZUEUgewogIEZyZWVNZW0gPSAxLAogIElQTENCID0gMiwKICBSTUFM
TE9DID0gMywKICBQTV9IRUFQID0gNCwKICBSVEFTX0hFQVAgPSA1LAogIFRDRV9UQUJMRSA9IDYs
CiAgSU9fU1BBQ0UgPSA3Cn0gTVJfTEFCRUxfVFlQRTsKCnR5cGVkZWYgc3RydWN0IHsKIHVuc2ln
bmVkIGxvbmcgbG9uZyBtcl9hZGRyOwogdW5zaWduZWQgbG9uZyBsb25nIG1yX3NpemU7CiB1bnNp
Z25lZCBjaGFyIG1yX2F0dDsKIHVuc2lnbmVkIGNoYXIgbXJfbGFiZWw7CiB1bnNpZ25lZCBzaG9y
dCBtcl9ub2RlaWQ7CiBjaGFyIHJlc2VydmVkWzRdOwp9IGlwbGNiX21hcF9yZWdfdDsKIyA0MSAi
L3Vzci9pbmNsdWRlL3N5cy9tX3R5cGVzLmgiIDIgMyA0CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBs
YWJlbF90CnsKCiBzdHJ1Y3QgbGFiZWxfdCAqcHJldjsKIHVsb25nX3QgaWFyOwogdWxvbmdfdCBz
dGFjazsKIHVsb25nX3QgdG9jOwogdWxvbmdfdCBjcjsKIHVsb25nX3QgaW50cHJpOwogdWxvbmdf
dCByZWdbMTldOwojIDY3ICIvdXNyL2luY2x1ZGUvc3lzL21fdHlwZXMuaCIgMyA0Cn0gbGFiZWxf
dDsKCnR5cGVkZWYgaW50MzJsb25nNjRfdCBleHRfdDsKIyA0MTcgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIg
MyA0CgoKCgp0eXBlZGVmIGNoYXIgKiB2YV9saXN0OwojIDQ2NSAiL2djYy9kamUvYnVpbGQvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fcHRyNjQ7CnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBsb25nIF9fY3B0cjY0OwoKCgoKCgp0eXBlZGVmIHVzaG9ydF90IFVuaUNoYXI7CgoKCgp0eXBl
ZGVmIHVjaGFyX3QgdWNoYXI7CnR5cGVkZWYgdXNob3J0X3QgdXNob3J0Owp0eXBlZGVmIHVpbnRf
dCB1aW50Owp0eXBlZGVmIHVsb25nX3QgdWxvbmc7Cgp0eXBlZGVmIHN0cnVjdCB7IGludCByWzFd
OyB9ICogcGh5c2Fkcl90Owp0eXBlZGVmIHBoeXNhZHJfdCBwaHlzYWRyOwoKCnR5cGVkZWYgdW5z
aWduZWQgY2hhciB1X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9zaG9ydDsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1X2xvbmc7Cgp0eXBl
ZGVmIGludCBzd2Jsa190OwoKCgoKc3RydWN0IHNpZ3NldCB7CiB1bnNpZ25lZCBpbnQgbG9zaWdz
OwogdW5zaWduZWQgaW50IGhpc2lnczsKfTsKCgpzdHJ1Y3QgZnNpZCB7CgogdW5zaWduZWQgaW50
IHZhbFsyXTsKCgoKfTsKIyA1MTggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNApzdHJ1Y3QgZmlsZWlkIHsK
IHVpbnRfdCBmaWRfbGVuOwogaW5vMzJfdCBmaWRfaW5vOwogdWludF90IGZpZF9nZW47CiBjaGFy
IGZpZF94WzIwIC0gKHNpemVvZihpbm8zMl90KSArIDIpIC0gc2l6ZW9mKHVpbnRfdCldOwp9Owoj
IDUzOSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2Mv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnN0cnVjdCBmaWQgewogdWludF90IGZpZF9sZW47CiBj
aGFyIGZpZF9kYXRhWzIwXTsKfTsKdHlwZWRlZiBzdHJ1Y3QgZmlkIGZpZF90OwoKCnN0cnVjdCBm
aGFuZGxlIHsKIGNoYXIgeFszMl07Cn07CnR5cGVkZWYgc3RydWN0IGZoYW5kbGUgZmhhbmRsZV90
OwoKc3RydWN0IGZpbGVoYW5kbGUgewogZnNpZF90IGZoX2ZzaWQ7CiBzdHJ1Y3QgZmlsZWlkIGZo
X2ZpZDsKfTsKIyA1NjMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw
MzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNApzdHJ1Y3QgdW5pcXVlX2lkIHsKICAg
ICAgIF9fdWxvbmczMl90IHdvcmQxOwogICAgICAgX191bG9uZzMyX3Qgd29yZDI7CiAgICAgICBf
X3Vsb25nMzJfdCB3b3JkMzsKICAgICAgIF9fdWxvbmczMl90IHdvcmQ0Owp9Owp0eXBlZGVmIHN0
cnVjdCB1bmlxdWVfaWQgdW5pcXVlX2lkX3Q7CiMgNTk1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlw
ZWRlZiBsb25nIGxvbmcgb2Zmc2V0X3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcg
c2l6ZTY0X3Q7CnR5cGVkZWYgbG9uZyBsb25nIHNzaXplNjRfdDsKCgoKCgoKdHlwZWRlZiBsb25n
IGxvbmcgbG9uZ2xvbmdfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdV9sb25nbG9uZ190
OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IGNsYXNzX2lkX3Q7CgoKCn0KIyAzNyAiL3Vzci9pbmNs
dWRlL3N5cy9sY19jb3JlLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgNTIgIi91c3IvaW5jbHVk
ZS9zeXMvbGNfY29yZS5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgewoKICAgIHVuc2lnbmVkIHNob3J0
CiBfX3R5cGVfaWQsCiBfX21hZ2ljOwogICAgdW5zaWduZWQgbG9uZwogX192ZXJzaW9uOwoKICAg
IHNpemVfdCBfX3NpemU7Cgp9IF9MQ19vYmplY3RfdDsKIyAxMDIgIi91c3IvaW5jbHVkZS9zeXMv
bGNfY29yZS5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgewoKICAgIF9MQ19vYmplY3RfdCBfX2hkcjsK
CgoKICAgIGludCBfX2NhdGdldHM7CiAgICBpbnQgX19jYXRjbG9zZTsKCgogICAgaW50IF9fY29t
cHJlc3M7CiAgICBpbnQgX19kZWNvbXByZXNzOwogICAgaW50IF9fc3RhcnRfY29tcHJlc3M7CiAg
ICBpbnQgX19lbmRfY29tcHJlc3M7CgoKICAgIGludCBfX2luaXQ7CiAgICB2b2lkICpfX2RhdGE7
Cn0gX0xDX2NvcmVfY2FyX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CgogICAgX0xDX29iamVjdF90IF9f
aGRyOwoKCiAgICBpbnQgX19ubF9sYW5naW5mbzsKCgogICAgaW50IF9fbWJ0b3djOwogICAgaW50
IF9fbWJzdG93Y3M7CiAgICBpbnQgX193Y3RvbWI7CiAgICBpbnQgX193Y3N0b21iczsKCgogICAg
aW50IF9fbWJsZW47CgoKICAgIGludCBfX3djc3dpZHRoOwogICAgaW50IF9fd2N3aWR0aDsKCgog
ICAgaW50IF9fbWJ0b3BjOwogICAgaW50IF9fbWJzdG9wY3M7CiAgICBpbnQgX19wY3RvbWI7CiAg
ICBpbnQgX19wY3N0b21iczsKCgogICAgaW50IF9fY3NpZDsKICAgIGludCBfX3djc2lkOwoKCiAg
ICBpbnQgX19pbml0OwogICAgdm9pZCAqX19kYXRhOwp9IF9MQ19jb3JlX2NoYXJtYXBfdDsKCgp0
eXBlZGVmIHN0cnVjdCB7CgogICAgX0xDX29iamVjdF90IF9faGRyOwoKCiAgICBpbnQgX190b3d1
cHBlcjsKICAgIGludCBfX3Rvd2xvd2VyOwoKCiAgICBpbnQgX19nZXRfd2N0eXBlOwogICAgaW50
IF9faXNfd2N0eXBlOwoKCiAgICBpbnQgX19pbml0OwogICAgdm9pZCAqX19kYXRhOwp9IF9MQ19j
b3JlX2N0eXBlX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CgogICAgX0xDX29iamVjdF90IF9faGRyOwoK
CiAgICBpbnQgX19zdHJjb2xsOwogICAgaW50IF9fc3RyeGZybTsKCgogICAgaW50IF9fd2NzY29s
bDsKICAgIGludCBfX3djc3hmcm07CgoKICAgIGludCBfX2ZubWF0Y2g7CgoKICAgIGludCBfX3Jl
Z2NvbXA7CiAgICBpbnQgX19yZWdlcnJvcjsKICAgIGludCBfX3JlZ2V4ZWM7CiAgICBpbnQgX19y
ZWdmcmVlOwoKCiAgICBpbnQgX19pbml0OwogICAgdm9pZCAqX19kYXRhOwp9IF9MQ19jb3JlX2Nv
bGxhdGVfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CgogICAgX0xDX29iamVjdF90IF9faGRyOwoKCiAg
ICBpbnQgX19ubF9sYW5naW5mbzsKCgogICAgaW50IF9fc3RyZnRpbWU7CiAgICBpbnQgX19zdHJw
dGltZTsKCgogICAgaW50IF9fd2NzZnRpbWU7CgoKICAgIGludCBfX2luaXQ7CiAgICB2b2lkICpf
X2RhdGE7Cn0gX0xDX2NvcmVfdGltZV90OwoKCnR5cGVkZWYgc3RydWN0IHsKCiAgICBfTENfb2Jq
ZWN0X3QgX19oZHI7CgoKICAgIGludCBfX25sX2xhbmdpbmZvOwoKCiAgICBpbnQgX19zdHJmbW9u
OwoKCiAgICBpbnQgX19pbml0OwogICAgdm9pZCAqX19kYXRhOwp9IF9MQ19jb3JlX21vbmV0YXJ5
X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewoKICAgIF9MQ19vYmplY3RfdCBfX2hkcjsKCgogICAgaW50
IF9fbmxfbGFuZ2luZm87CgoKICAgIGludCBfX2luaXQ7CiAgICB2b2lkICpfX2RhdGE7Cn0gX0xD
X2NvcmVfbnVtZXJpY190OwoKCnR5cGVkZWYgc3RydWN0IHsKCiAgICBfTENfb2JqZWN0X3QgX19o
ZHI7CgoKICAgIGludCBfX25sX2xhbmdpbmZvOwoKCiAgICBpbnQgX19ycG1hdGNoOwoKCiAgICBp
bnQgX19pbml0OwogICAgdm9pZCAqX19kYXRhOwp9IF9MQ19jb3JlX3Jlc3BfdDsKCnR5cGVkZWYg
c3RydWN0IHsKCiAgICBfTENfb2JqZWN0X3QgX19oZHI7CgoKICAgIGludCBfX25sX2xhbmdpbmZv
OwogICAgaW50IF9fbG9jYWxlY29udjsKCgogICAgaW50IF9faW5pdDsKICAgIHZvaWQgKl9fZGF0
YTsKfSBfTENfY29yZV9sb2NhbGVfdDsKCgoKfQojIDQ0ICIvdXNyL2luY2x1ZGUvc3lzL2xvY2Fs
ZWRlZi5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9sb2NhbGVkZWYzMS5oIiAxIDMg
NAojIDM5ICIvdXNyL2luY2x1ZGUvc3lzL2xvY2FsZWRlZjMxLmgiIDMgNAp0eXBlZGVmIHN0cnVj
dCBjb2xkZXNjIHsKIHNob3J0IGNkX3N0cm9mZjsKIHNob3J0IGNkX3JlcG9mZjsKIHNob3J0IGNk
X2N2YWw7CiBzaG9ydCBjZF9jdW5pcTsKfSBjb2xkZXNjX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBj
b2xsYXRpb25fdGFibGUgewogc2hvcnQgbGNfdmVyc2lvbjsKIHNob3J0IGxjX2xlbmd0aDsKIGNo
YXIgKmxjX2xvY2FsZV9uYW1lOwogaW50IGxlbl9jb2xsYXRlOwogc2hvcnQgKmxjX2NvbGxhdGU7
CiBpbnQgbGVuX2NvbHVuaXE7CiBzaG9ydCAqbGNfY29sdW5pcTsKIGludCBsZW5fY29sZGVzYzsK
IGNvbGRlc2NfdCAqbGNfY29sZGVzYzsKIGludCBsZW5fc3RyaW5nczsKIHdjaGFyX3QgKmxjX3N0
cmluZ3M7CiBpbnQgaGlnaF9jdmFsdWU7Cn0gY29sX3Q7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBj
aGFyX2NsYXNzaWZpY2F0aW9uX3RhYmxlIHsKIHNob3J0IGxjX3ZlcnNpb247CiBzaG9ydCBsY19s
ZW5ndGg7CiBzaG9ydCBsY19jb2RlX3R5cGU7CiBzaG9ydCBtYl9jdXJfbWF4Owogc2hvcnQgbWJf
Y3VyX21pbjsKIHNob3J0IGxjX2RzcF93aWR0aDsKIGNoYXIgKmxjX2xvY2FsZV9uYW1lOwogaW50
IGxlbl9jYXNlY29udjsKIHdjaGFyX3QgKmxjX2Nhc2Vjb252OwogaW50IGxlbl9jdHlwZTsKIHVu
c2lnbmVkIHNob3J0ICpsY19jdHlwZTsKfSBjdHlwZV90OwoKCgoKCnR5cGVkZWYgc3RydWN0IGxj
X21vbmV0YXJ5X3RhYmxlIHsKIHNob3J0IGxjX3ZlcnNpb247CiBzaG9ydCBsY19sZW5ndGg7CiBj
aGFyICpsY19sb2NhbGVfbmFtZTsKIGNoYXIgKmludF9jdXJyX3N5bWJvbDsKIGNoYXIgKmN1cnJl
bmN5X3N5bWJvbDsKIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogY2hhciAqbW9uX3Rob3VzYW5k
c19zZXA7CiBjaGFyICptb25fZ3JvdXBpbmc7CiBjaGFyICpwb3NpdGl2ZV9zaWduOwogY2hhciAq
bmVnYXRpdmVfc2lnbjsKIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwogY2hhciBmcmFjX2RpZ2l0czsK
IGNoYXIgcF9jc19wcmVjZWRlczsKIGNoYXIgcF9zZXBfYnlfc3BhY2U7CiBjaGFyIG5fY3NfcHJl
Y2VkZXM7CiBjaGFyIG5fc2VwX2J5X3NwYWNlOwogY2hhciBwX3NpZ25fcG9zbjsKIGNoYXIgbl9z
aWduX3Bvc247Cn0gbW9uX3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgbnVtZXJpY190YWJsZSB7CiBz
aG9ydCBsY192ZXJzaW9uOwogc2hvcnQgbGNfbGVuZ3RoOwogY2hhciAqbGNfbG9jYWxlX25hbWU7
CiBjaGFyICpkZWNpbWFsX3BvaW50OwogY2hhciAqdGhvdXNhbmRzX3NlcDsKIGNoYXIgKmdyb3Vw
aW5nOwp9IG51bV90OwoKCgoKCnR5cGVkZWYgc3RydWN0IGxjX21lc3NhZ2VzX3RhYmxlIHsKIHNo
b3J0IGxjX3ZlcnNpb247CiBzaG9ydCBsY19sZW5ndGg7CiBjaGFyICpsY19sb2NhbGVfbmFtZTsK
IGNoYXIgKm1lc3NhZ2VzOwogY2hhciAqeWVzX3N0cmluZzsKIGNoYXIgKm5vX3N0cmluZzsKfSBt
c2dfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBsY190aW1lX3RhYmxlIHsKIHNob3J0IGxjX3ZlcnNp
b247CiBzaG9ydCBsY19sZW5ndGg7CiBjaGFyICpsY19sb2NhbGVfbmFtZTsKIGNoYXIgKnRfZm10
OwogY2hhciAqZF9mbXQ7CiBjaGFyICpubGxkYXRlOwogY2hhciAqZF90X2ZtdDsKIGNoYXIgKmFi
ZGF5OwogY2hhciAqZGF5OwogY2hhciAqYWJtb247CiBjaGFyICptb247CgoKCgogY2hhciAqbWlz
YzsKIGNoYXIgKnRzdHJzOwogY2hhciAqdHVuaXRzOwoKCgogY2hhciAqeWVhcjsKIGNoYXIgKmFt
X3BtOwp9IHRpbV90OwoKCgoKCgp0eXBlZGVmIHN0cnVjdCB3Y2hhcl9tYXBwaW5nX3RhYmxlIHsK
IHNob3J0IGxjX3ZlcnNpb247CiBzaG9ydCBsY19sZW5ndGg7CiBjaGFyICpsY19pZGVudGlmaWVy
Owp9IG1hcF90OwojIDE4MyAiL3Vzci9pbmNsdWRlL3N5cy9sb2NhbGVkZWYzMS5oIiAzIDQKdHlw
ZWRlZiBzdHJ1Y3QgbG9jYWxlaW5mb190YWJsZSB7CiBjaGFyIGxjX21hZzAsIGxjX21hZzE7CiBz
aG9ydCBsY192ZXJzaW9uOwogc2hvcnQgbGNfY29kZV90eXBlOwogc2hvcnQgbGNfbGVuZ3RoOwog
Y29sX3QgKmxjX2NvbHRibDsKIGN0eXBlX3QgKmxjX2NocnRibDsKIG1vbl90ICpsY19tb250Ymw7
CiBudW1fdCAqbGNfbnVtdGJsOwogdGltX3QgKmxjX3RpbXRibDsKIG1zZ190ICpsY19tc2d0Ymw7
CiBtYXBfdCAqbGNfbWFwdGJsOwp9IGxvY190OwojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL2xvY2Fs
ZWRlZi5oIiAyIDMgNAojIDY2ICIvdXNyL2luY2x1ZGUvc3lzL2xvY2FsZWRlZi5oIiAzIDQKdHlw
ZWRlZiBzdHJ1Y3QgewoKICAgIF9MQ19jb3JlX2NoYXJtYXBfdCBjb3JlOwoKICAgIGNoYXIgKmNt
X2NzbmFtZTsKCiAgICBzaXplX3QgY21fbWJfY3VyX21heDsKICAgIHNpemVfdCBjbV9tYl9jdXJf
bWluOwoKICAgIHVuc2lnbmVkIGNoYXIKICAgICAgY21fbWF4X2Rpc3Bfd2lkdGg7CgoKICAgIHVu
c2lnbmVkCiBjaGFyICpjbV9jc3RhYjsKCiAgICBzdHJ1Y3QgX19MQ19sb2NhbGUKICAgICAgICAg
ICAgICpsb2NfcmVjOwoKICAgIHZvaWQgKl9fbWV0aF9wdHI7CiAgICB2b2lkICpfX2RhdGFfcHRy
OwoKfSBfTENfY2hhcm1hcF90OwoKdHlwZWRlZiBzdHJ1Y3QgX0xDX2NoYXJtYXBfb2JqaGRsIF9M
Q19jaGFybWFwX29iamhkbF90OwoKc3RydWN0IF9MQ19jaGFybWFwX29iamhkbCB7CiBfTENfY2hh
cm1hcF90ICpvYmo7CgoKIHZvaWQgKigqKm1ldGgpKCk7CgoKc3RydWN0IF9MQ19sb2NhbGVfb2Jq
aGRsICpsb2NfaGRsOwoKCn07CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CgogICAgX0xDX2NvcmVf
bW9uZXRhcnlfdCBjb3JlOwoKICAgIGNoYXIgKmludF9jdXJyX3N5bWJvbDsKICAgIGNoYXIgKmN1
cnJlbmN5X3N5bWJvbDsKICAgIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogICAgY2hhciAqbW9u
X3Rob3VzYW5kc19zZXA7CiAgICBjaGFyICptb25fZ3JvdXBpbmc7CiAgICBjaGFyICpwb3NpdGl2
ZV9zaWduOwogICAgY2hhciAqbmVnYXRpdmVfc2lnbjsKICAgIHNpZ25lZCBjaGFyIGludF9mcmFj
X2RpZ2l0czsKICAgIHNpZ25lZCBjaGFyIGZyYWNfZGlnaXRzOwogICAgc2lnbmVkIGNoYXIgcF9j
c19wcmVjZWRlczsKICAgIHNpZ25lZCBjaGFyIHBfc2VwX2J5X3NwYWNlOwogICAgc2lnbmVkIGNo
YXIgbl9jc19wcmVjZWRlczsKICAgIHNpZ25lZCBjaGFyIG5fc2VwX2J5X3NwYWNlOwogICAgc2ln
bmVkIGNoYXIgcF9zaWduX3Bvc247CiAgICBzaWduZWQgY2hhciBuX3NpZ25fcG9zbjsKICAgIGNo
YXIgKmRlYml0X3NpZ247CiAgICBjaGFyICpjcmVkaXRfc2lnbjsKICAgIGNoYXIgKmxlZnRfcGFy
ZW50aGVzaXM7CiAgICBjaGFyICpyaWdodF9wYXJlbnRoZXNpczsKCiAgICBzdHJ1Y3QgX19MQ19s
b2NhbGUKICAgICAgICAgICAgICpsb2NfcmVjOwoKICAgIHZvaWQgKl9fbWV0aF9wdHI7CiAgICB2
b2lkICpfX2RhdGFfcHRyOwoKfSBfTENfbW9uZXRhcnlfdDsKCnR5cGVkZWYgc3RydWN0IF9MQ19t
b25ldGFyeV9vYmpoZGwgX0xDX21vbmV0YXJ5X29iamhkbF90OwpzdHJ1Y3QgX0xDX21vbmV0YXJ5
X29iamhkbCB7CiBfTENfbW9uZXRhcnlfdCAqb2JqOwoKCiB2b2lkICooKiptZXRoKSgpOwoKCnN0
cnVjdCBfTENfbG9jYWxlX29iamhkbCAqbG9jX2hkbDsKCgp9OwoKCgoKCgp0eXBlZGVmIHN0cnVj
dCB7CgogICAgX0xDX2NvcmVfbnVtZXJpY190IGNvcmU7CgogICAgY2hhciAqZGVjaW1hbF9wb2lu
dDsKICAgIGNoYXIgKnRob3VzYW5kc19zZXA7CiAgICB1bnNpZ25lZAogY2hhciAqZ3JvdXBpbmc7
CgogICAgc3RydWN0IF9fTENfbG9jYWxlCiAgICAgICAgICAgICAqbG9jX3JlYzsKCiAgICB2b2lk
ICpfX21ldGhfcHRyOwogICAgdm9pZCAqX19kYXRhX3B0cjsKCn0gX0xDX251bWVyaWNfdDsKCnR5
cGVkZWYgc3RydWN0IF9MQ19udW1lcmljX29iamhkbCBfTENfbnVtZXJpY19vYmpoZGxfdDsKc3Ry
dWN0IF9MQ19udW1lcmljX29iamhkbCB7CiBfTENfbnVtZXJpY190ICpvYmo7CgoKIHZvaWQgKigq
Km1ldGgpKCk7CgoKc3RydWN0IF9MQ19sb2NhbGVfb2JqaGRsICpsb2NfaGRsOwoKCn07CgoKCgoK
Cgp0eXBlZGVmIHN0cnVjdCB7CgogICAgX0xDX2NvcmVfcmVzcF90IGNvcmU7CgogICAgY2hhciAq
eWVzZXhwcjsKICAgIGNoYXIgKm5vZXhwcjsKICAgIGNoYXIgKnllc3N0cjsKICAgIGNoYXIgKm5v
c3RyOwoKICAgIHN0cnVjdCBfX0xDX2xvY2FsZQogICAgICAgICAgICAgKmxvY19yZWM7CgogICAg
dm9pZCAqX19tZXRoX3B0cjsKICAgIHZvaWQgKl9fZGF0YV9wdHI7Cgp9IF9MQ19yZXNwX3Q7Cgp0
eXBlZGVmIHN0cnVjdCBfTENfcmVzcF9vYmpoZGwgX0xDX3Jlc3Bfb2JqaGRsX3Q7CnN0cnVjdCBf
TENfcmVzcF9vYmpoZGwgewogX0xDX3Jlc3BfdCAqb2JqOwoKCiB2b2lkICooKiptZXRoKSgpOwoK
CnN0cnVjdCBfTENfbG9jYWxlX29iamhkbCAqbG9jX2hkbDsKCgp9OwoKCgoKCgoKdHlwZWRlZiBz
dHJ1Y3QgewoKICAgIF9MQ19jb3JlX3RpbWVfdCBjb3JlOwoKICAgIGNoYXIgKmRfZm10OwogICAg
Y2hhciAqdF9mbXQ7CiAgICBjaGFyICpkX3RfZm10OwogICAgY2hhciAqdF9mbXRfYW1wbTsKICAg
IGNoYXIgKmFiZGF5WzddOwogICAgY2hhciAqZGF5WzddOwogICAgY2hhciAqYWJtb25bMTJdOwog
ICAgY2hhciAqbW9uWzEyXTsKICAgIGNoYXIgKmFtX3BtWzJdOwogICAgY2hhciAqZXJhOwogICAg
Y2hhciAqZXJhX3llYXI7CiAgICBjaGFyICplcmFfZF9mbXQ7CiAgICBjaGFyICphbHRfZGlnaXRz
OwogICAgY2hhciAqZXJhX2RfdF9mbXQ7CiAgICBjaGFyICplcmFfdF9mbXQ7CgogICAgc3RydWN0
IF9fTENfbG9jYWxlCiAgICAgICAgICAgICAqbG9jX3JlYzsKCiAgICB2b2lkICpfX21ldGhfcHRy
OwogICAgdm9pZCAqX19kYXRhX3B0cjsKCn0gX0xDX3RpbWVfdDsKCnR5cGVkZWYgc3RydWN0IF9M
Q190aW1lX29iamhkbCBfTENfdGltZV9vYmpoZGxfdDsKc3RydWN0IF9MQ190aW1lX29iamhkbCB7
CiBfTENfdGltZV90ICpvYmo7CgoKIHZvaWQgKigqKm1ldGgpKCk7CgoKc3RydWN0IF9MQ19sb2Nh
bGVfb2JqaGRsICpsb2NfaGRsOwoKCn07CgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIHVuc2ln
bmVkCiBzaG9ydCBuWzQgKzFdOwp9IF9MQ193ZWlnaHRfdDsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3Qg
ewoKICAgIGNoYXIgKmNlX3N5bTsKICAgIF9MQ193ZWlnaHRfdCBjZV93Z3Q7Cgp9IF9MQ19jb2xs
ZWxfdDsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX3dlaWdodF90IGN0X3dndDsKCgog
ICAgX0xDX2NvbGxlbF90ICpjdF9jb2xsZWw7Cgp9IF9MQ19jb2x0YmxfdDsKIyAzMTkgIi91c3Iv
aW5jbHVkZS9zeXMvbG9jYWxlZGVmLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyICp0
Z3Rfd2d0X3N0cls0ICsxXTsKCgp9IF9MQ19zdWJzX3Q7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7
CgogICAgX0xDX2NvcmVfY29sbGF0ZV90IGNvcmU7CgogICAgdW5zaWduZWQKIGNoYXIgY29fbm9y
ZDsKCiAgICBfTENfd2VpZ2h0X3QgY29fc29ydDsKCgogICAgd2NoYXJfdCBjb193Y19taW47CiAg
ICB3Y2hhcl90IGNvX3djX21heDsKCiAgICB3Y2hhcl90IGNvX2NvbF9taW47CiAgICB3Y2hhcl90
IGNvX2NvbF9tYXg7CgogICAgX0xDX2NvbHRibF90ICpjb19jb2x0Ymw7CgogICAgdW5zaWduZWQK
IGNoYXIgY29fbnN1YnM7CiAgICBfTENfc3Vic190ICpjb19zdWJzOwoKICAgIHVuc2lnbmVkCiBz
aG9ydCBjb19zcGVjaWFsOwoKCgoKICAgIHN0cnVjdCBfX0xDX2xvY2FsZQogICAgICAgICAgICAg
ICAgKmxvY19yZWM7CgogICAgdm9pZCAqX19tZXRoX3B0cjsKICAgIHZvaWQgKl9fZGF0YV9wdHI7
Cgp9IF9MQ19jb2xsYXRlX3Q7Cgp0eXBlZGVmIHN0cnVjdCBfTENfY29sbGF0ZV9vYmpoZGwgX0xD
X2NvbGxhdGVfb2JqaGRsX3Q7CnN0cnVjdCBfTENfY29sbGF0ZV9vYmpoZGwgewogX0xDX2NvbGxh
dGVfdCAqb2JqOwoKCiB2b2lkICooKiptZXRoKSgpOwoKCnN0cnVjdCBfTENfbG9jYWxlX29iamhk
bCAqbG9jX2hkbDsKCgp9OwojIDM5MiAiL3Vzci9pbmNsdWRlL3N5cy9sb2NhbGVkZWYuaCIgMyA0
CnR5cGVkZWYgc3RydWN0IHsKCiAgICBjaGFyICpuYW1lOwogICAgdW5zaWduZWQKIGludCBtYXNr
OwoKfSBfTENfY2xhc3NubV90OwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoKICBfTENfY29yZV9j
dHlwZV90IGNvcmU7CgoKICB3Y2hhcl90IG1pbl93YzsKICB3Y2hhcl90IG1heF93YzsKCgogIHdj
aGFyX3QgKnVwcGVyOwogIHdjaGFyX3QgKmxvd2VyOwoKCiAgdW5zaWduZWQKICAgICAgaW50ICpt
YXNrOwogIHVuc2lnbmVkCiAgICAgIGludCAqcW1hc2s7CiAgdW5zaWduZWQKICAgICAgY2hhciAq
cWlkeDsKCgogIHVuc2lnbmVkCiAgICAgIGNoYXIgbmNsYXNzZXM7CiBfTENfY2xhc3NubV90ICpj
bGFzc25tczsKCiAgICBzdHJ1Y3QgX19MQ19sb2NhbGUKICAgICAgICAgICAgICAgKmxvY19yZWM7
CgogICAgdm9pZCAqX19tZXRoX3B0cjsKICAgIHZvaWQgKl9fZGF0YV9wdHI7Cgp9IF9MQ19jdHlw
ZV90OwoKdHlwZWRlZiBzdHJ1Y3QgX0xDX2N0eXBlX29iamhkbCBfTENfY3R5cGVfb2JqaGRsX3Q7
CnN0cnVjdCBfTENfY3R5cGVfb2JqaGRsIHsKIF9MQ19jdHlwZV90ICpvYmo7CgoKIHZvaWQgKigq
Km1ldGgpKCk7CgoKc3RydWN0IF9MQ19sb2NhbGVfb2JqaGRsICpsb2NfaGRsOwoKCn07CiMgNDY1
ICIvdXNyL2luY2x1ZGUvc3lzL2xvY2FsZWRlZi5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgX19MQ19s
b2NhbGUgewoKICAgIF9MQ19jb3JlX2xvY2FsZV90IGNvcmU7CgogICAgY2hhciAqbmxfaW5mb1s2
M107CiAgICBzdHJ1Y3QgbGNvbnYgKm5sX2xjb252OwoKICAgIF9MQ19jaGFybWFwX29iamhkbF90
IGxjX2NoYXJtYXA7CiAgICBfTENfY29sbGF0ZV9vYmpoZGxfdCBsY19jb2xsYXRlOwogICAgX0xD
X2N0eXBlX29iamhkbF90IGxjX2N0eXBlOwogICAgX0xDX21vbmV0YXJ5X29iamhkbF90IGxjX21v
bmV0YXJ5OwogICAgX0xDX251bWVyaWNfb2JqaGRsX3QgbGNfbnVtZXJpYzsKICAgIF9MQ19yZXNw
X29iamhkbF90IGxjX3Jlc3A7CiAgICBfTENfdGltZV9vYmpoZGxfdCBsY190aW1lOwoKICAgIHN0
cnVjdCBfX0xDX2xvY2FsZSAqbG9jX3JlYzsKCgogICAgdm9pZCAqX19tZXRoX3B0cjsKICAgIHZv
aWQgKl9fZGF0YV9wdHI7CgogICAgY2hhciAqX19ubF95ZXNzdHI7CiAgICBjaGFyICpfX25sX25v
c3RyOwogICAgY2hhciAqX19ubF9jcm5jeXN0cjsKCn0gX0xDX2xvY2FsZV90OwoKdHlwZWRlZiBz
dHJ1Y3QgX0xDX2xvY2FsZV9vYmpoZGwgX0xDX2xvY2FsZV9vYmpoZGxfdDsKc3RydWN0IF9MQ19s
b2NhbGVfb2JqaGRsIHsKIF9MQ19sb2NhbGVfdCAqb2JqOwoKCiB2b2lkICooKiptZXRoKSgpOwoK
CnN0cnVjdCBfTENfbG9jYWxlX29iamhkbCAqbG9jX2hkbDsKCgp9OwojIDUxMiAiL3Vzci9pbmNs
dWRlL3N5cy9sb2NhbGVkZWYuaCIgMyA0CnR5cGVkZWYgc3RydWN0IF9MQ19vYmplY3RfaGFuZGxl
IF9MQ19vYmplY3RfaGFuZGxlX3Q7CnN0cnVjdCBfTENfb2JqZWN0X2hhbmRsZSB7CiAgICB1bmlv
biB7CiBfTENfb2JqZWN0X3QgbGNfb2JqZWN0OwogX0xDX2xvY2FsZV9vYmpoZGxfdCBsY19sb2Nh
bGU7CiAgICAgICAgX0xDX2NoYXJtYXBfb2JqaGRsX3QgbGNfY2hhcm1hcDsKICAgICAgICBfTENf
Y29sbGF0ZV9vYmpoZGxfdCBsY19jb2xsYXRlOwogICAgICAgIF9MQ19jdHlwZV9vYmpoZGxfdCBs
Y19jdHlwZTsKICAgICAgICBfTENfbW9uZXRhcnlfb2JqaGRsX3QgbGNfbW9uZXRhcnk7CiAgICAg
ICAgX0xDX251bWVyaWNfb2JqaGRsX3QgbGNfbnVtZXJpYzsKICAgICAgICBfTENfcmVzcF9vYmpo
ZGxfdCBsY19yZXNwOwogICAgICAgIF9MQ190aW1lX29iamhkbF90IGxjX3RpbWU7CiAgICB9IG9i
ajsKCgogICAgdm9pZCAqKCoqbWV0aCkoKTsKCgpzdHJ1Y3QgX0xDX2xvY2FsZV9vYmpoZGwgKmxv
Y19oZGw7CgoKfTsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBfTENfb2JqZWN0X3QgaGRyOwogICAg
X0xDX2xvY2FsZV9vYmpoZGxfdCBoYW5kbGU7Cn0gX0xDX2xvYWRfb2JqZWN0X3Q7CgoKCgoKCgpl
eHRlcm4gX0xDX2NoYXJtYXBfb2JqaGRsX3QgX19sY19jaGFybWFwOwpleHRlcm4gX0xDX2NvbGxh
dGVfb2JqaGRsX3QgX19sY19jb2xsYXRlOwpleHRlcm4gX0xDX2N0eXBlX29iamhkbF90IF9fbGNf
Y3R5cGU7CmV4dGVybiBfTENfbW9uZXRhcnlfb2JqaGRsX3QgX19sY19tb25ldGFyeTsKZXh0ZXJu
IF9MQ19udW1lcmljX29iamhkbF90IF9fbGNfbnVtZXJpYzsKZXh0ZXJuIF9MQ19yZXNwX29iamhk
bF90IF9fbGNfcmVzcDsKZXh0ZXJuIF9MQ190aW1lX29iamhkbF90IF9fbGNfdGltZTsKZXh0ZXJu
IF9MQ19sb2NhbGVfb2JqaGRsX3QgX19sY19sb2NhbGU7CiMgMTMyICIvZ2NjL2RqZS9idWlsZC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL2N0eXBlLmgiIDIgMyA0
CgoKCgoKCgogZXh0ZXJuIGludCBpc193Y3R5cGUod2ludF90LCB3Y3R5cGVfdCk7CiBleHRlcm4g
d2N0eXBlX3QgZ2V0X3djdHlwZShjaGFyICopOwogZXh0ZXJuIGludCBpc2JsYW5rKGludCk7CiMg
NTAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jY3R5cGUiIDIgMwojIDY2ICIv
Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY2N0eXBlIiAzCm5hbWVzcGFjZSBzdGQK
ewogIHVzaW5nIDo6aXNhbG51bTsKICB1c2luZyA6OmlzYWxwaGE7CiAgdXNpbmcgOjppc2NudHJs
OwogIHVzaW5nIDo6aXNkaWdpdDsKICB1c2luZyA6OmlzZ3JhcGg7CiAgdXNpbmcgOjppc2xvd2Vy
OwogIHVzaW5nIDo6aXNwcmludDsKICB1c2luZyA6OmlzcHVuY3Q7CiAgdXNpbmcgOjppc3NwYWNl
OwogIHVzaW5nIDo6aXN1cHBlcjsKICB1c2luZyA6OmlzeGRpZ2l0OwogIHVzaW5nIDo6dG9sb3dl
cjsKICB1c2luZyA6OnRvdXBwZXI7Cn0KIyA0OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p
bmNsdWRlL2lvc2Z3ZCIgMiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl
L2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDQzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu
Y2x1ZGUvYml0cy9zdHJpbmdmd2QuaCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBhbGxvY2F0b3I7CgogIHRlbXBsYXRlPGNsYXNzIF9D
aGFyVD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBl
bmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmc7
CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0eXBlZGVmIGJhc2lj
X3N0cmluZzxjaGFyPiBzdHJpbmc7CgoKCgoKCn0KIyA0OSAiL2djYy9kamUvYnVpbGQvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMr
Ky12My9pbmNsdWRlL2lvc2Z3ZCIgMiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p
bmNsdWRlL2JpdHMvZnBvcy5oIiAxIDMKIyA0MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p
bmNsdWRlL2JpdHMvZnBvcy5oIiAzCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j
bHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi9nY2Mv
ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMv
YysraW8uaCIgMwojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw
MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jc3RkaW8i
IDEgMwojIDQ4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY3N0ZGlvIiAzCgoK
IyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY3N0ZGRlZiIgMSAzCiMgNDcg
Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jc3RkZGVmIiAzCgojIDEgIi9nY2Mv
ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3Rk
ZGVmLmgiIDEgMyA0CiMgNDkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt
MjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jc3Rk
ZGVmIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6cHRyZGlmZl90OwogIHVzaW5nIDo6
c2l6ZV90Owp9CiMgNTEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw
MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jc3RkaW8i
IDIgMwoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L2djYy9pbmNsdWRlL3N0ZGlvLmgiIDEgMyA0CiMgMTQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RkaW8uaCIgMyA0CiMgMSAiL2dj
Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9z
dGRhcmcuaCIgMSAzIDQKIyA0MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdGRhcmcuaCIgMyA0CnR5cGVkZWYgX19idWlsdGluX3Zh
X2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgMTUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKIyA2MSAiL2djYy9k
amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdGRp
by5oIiAzIDQKZXh0ZXJuICJDIiB7CiMgMTUwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N0ZGlvLmgiIDMgNAp0eXBlZGVmIHN0cnVj
dCB7CiB1bnNpZ25lZCBjaGFyICpfcHRyOwogaW50IF9jbnQ7CiB1bnNpZ25lZCBjaGFyICpfYmFz
ZTsKIHVuc2lnbmVkIGNoYXIgKl9idWZlbmRwOwogc2hvcnQgX2ZsYWc7CiBzaG9ydCBfZmlsZTsK
IGludCBfX3N0ZGlvaWQ7CiBjaGFyICpfX25ld2Jhc2U7CgoKCiBsb25nIF91bnVzZWRbMV07CgoK
Cgp9IEZJTEU7CgoKCgpleHRlcm4gRklMRSBfaW9iWzE2XTsKIyAxODUgIi9nY2MvZGplL2J1aWxk
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RkaW8uaCIgMyA0
CmV4dGVybiBzaXplX3QgZnJlYWQodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsKZXh0
ZXJuIHNpemVfdCBmd3JpdGUoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCxGSUxFICopOwoj
IDIzNCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2Mv
aW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGludCBfX2Zsc2J1Zih1bnNpZ25lZCBjaGFyLCBG
SUxFICopOwpleHRlcm4gaW50IF9fZmlsYnVmKEZJTEUgKik7CmV4dGVybiBpbnQgZmVycm9yKEZJ
TEUgKik7CmV4dGVybiBpbnQgZmVvZihGSUxFICopOwpleHRlcm4gdm9pZCBjbGVhcmVycihGSUxF
ICopOwpleHRlcm4gaW50IHB1dGNoYXIoaW50KTsKZXh0ZXJuIGludCBnZXRjaGFyKHZvaWQpOwpl
eHRlcm4gaW50IHB1dGMoaW50LCBGSUxFICopOwpleHRlcm4gaW50IGdldGMoRklMRSAqKTsKZXh0
ZXJuIGludCByZW1vdmUoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCByZW5hbWUoY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRSAqdG1wZmlsZSh2b2lkKTsKZXh0ZXJuIGNo
YXIgKnRtcG5hbShjaGFyICopOwpleHRlcm4gaW50IGZjbG9zZShGSUxFICopOwpleHRlcm4gaW50
IGZmbHVzaChGSUxFICopOwpleHRlcm4gRklMRSAqZm9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICopOwpleHRlcm4gRklMRSAqZnJlb3Blbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg
RklMRSAqKTsKZXh0ZXJuIHZvaWQgc2V0YnVmKEZJTEUgKiwgY2hhciAqKTsKZXh0ZXJuIGludCBz
ZXR2YnVmKEZJTEUgKiwgY2hhciAqLCBpbnQsIHNpemVfdCk7CmV4dGVybiBpbnQgZnByaW50ZihG
SUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludCBmc2NhbmYoRklMRSAqLCBjb25z
dCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQgcHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0
ZXJuIGludCBzY2FuZihjb25zdCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQgc3ByaW50ZihjaGFy
ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc25wcmludGYoY2hhciAqLCBzaXpl
X3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc3NjYW5mKGNvbnN0IGNoYXIgKiwg
Y29uc3QgY2hhciAqLCAuLi4pOwojIDI3MiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdGRpby5oIiAzIDQKIyAxICIvdXNyL2luY2x1
ZGUvdmFfbGlzdC5oIiAxIDMgNAojIDI3MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdGRpby5oIiAyIDMgNApleHRlcm4gaW50IHZm
cHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmV4dGVybiBpbnQg
dnByaW50Zihjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKZXh0ZXJuIGludCB2c3ByaW50
ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwoKZXh0ZXJuIGludCB2c25w
cmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwoKCgpl
eHRlcm4gaW50IGZnZXRjKEZJTEUgKik7CmV4dGVybiBjaGFyICpmZ2V0cyhjaGFyICosIGludCwg
RklMRSAqKTsKZXh0ZXJuIGludCBmcHV0YyhpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQgZnB1dHMo
Y29uc3QgY2hhciAqLCBGSUxFICopOwpleHRlcm4gY2hhciAqZ2V0cyhjaGFyICopOwpleHRlcm4g
aW50IHB1dHMoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCB1bmdldGMoaW50LCBGSUxFICopOwpl
eHRlcm4gaW50IGZnZXRwb3MoRklMRSAqLCBmcG9zX3QgKik7CmV4dGVybiBpbnQgZnNlZWsoRklM
RSAqLCBsb25nIGludCwgaW50KTsKZXh0ZXJuIGludCBmc2V0cG9zKEZJTEUgKiwgY29uc3QgZnBv
c190ICopOwpleHRlcm4gbG9uZyBmdGVsbChGSUxFICopOwpleHRlcm4gdm9pZCByZXdpbmQoRklM
RSAqKTsKZXh0ZXJuIHZvaWQgcGVycm9yKGNvbnN0IGNoYXIgKik7CgoKCgoKZXh0ZXJuIGludCBn
ZXRjX3VubG9ja2VkKEZJTEUgKik7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCh2b2lkKTsK
ZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkKGludCwgRklMRSAqKTsKZXh0ZXJuIGludCBwdXRjaGFy
X3VubG9ja2VkKGludCk7CiMgMzg4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu
My4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gaW50IGZpbGVubyhG
SUxFICopOwpleHRlcm4gRklMRSAqZmRvcGVuKGludCxjb25zdCBjaGFyICopOwpleHRlcm4gY2hh
ciAqY3Rlcm1pZChjaGFyICopOwoKZXh0ZXJuIHZvaWQgZmxvY2tmaWxlKEZJTEUgKik7CmV4dGVy
biB2b2lkIGZ1bmxvY2tmaWxlKEZJTEUgKik7CmV4dGVybiBpbnQgZnNlZWtvKEZJTEUgKiwgb2Zm
X3QsIGludCk7CmV4dGVybiBvZmZfdCBmdGVsbG8oRklMRSAqKTsKZXh0ZXJuIGludCBmdHJ5bG9j
a2ZpbGUoRklMRSAqKTsKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUoRklMRSAqKTsKIyA0MTAgIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUv
c3RkaW8uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3ZhX2xpc3QuaCIgMSAzIDQKIyA0MTEgIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUv
c3RkaW8uaCIgMiAzIDQKCmV4dGVybiBjaGFyICpvcHRhcmc7CmV4dGVybiBpbnQgb3B0ZXJyOwpl
eHRlcm4gaW50IG9wdGluZDsKZXh0ZXJuIGludCBvcHRvcHQ7CiMgNDI4ICIvZ2NjL2RqZS9idWls
ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N0ZGlvLmgiIDMg
NApleHRlcm4gaW50IGdldHcoRklMRSAqKTsKZXh0ZXJuIGludCBwdXR3KGludCwgRklMRSAqKTsK
ZXh0ZXJuIGNoYXIgKnRlbXBuYW0oY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKZXh0ZXJuIEZJ
TEUgKnBvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBwY2xvc2Uo
RklMRSAqKTsKZXh0ZXJuIGludCBnZXRvcHQoaW50LCBjaGFyICogY29uc3QgW10sIGNvbnN0IGNo
YXIqKTsKZXh0ZXJuIGNoYXIgKmN1c2VyaWQoY2hhciAqKTsKIyA0NDggIi9nY2MvZGplL2J1aWxk
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RkaW8uaCIgMyA0
CmV4dGVybiBpbnQgZmdldHBvczY0KEZJTEUgKiwgZnBvczY0X3QgKik7CmV4dGVybiBGSUxFICpm
b3BlbjY0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIEZJTEUgKmZyZW9wZW42
NChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIGludCBmc2Vla282
NChGSUxFICosIG9mZjY0X3QsIGludCk7CmV4dGVybiBpbnQgZnNldHBvczY0KEZJTEUgKiwgY29u
c3QgZnBvczY0X3QgKik7CmV4dGVybiBvZmY2NF90IGZ0ZWxsbzY0KEZJTEUgKik7CiMgNDYzICIv
Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRl
L3N0ZGlvLmgiIDMgNApleHRlcm4gdm9pZCBzZXRidWZmZXIoRklMRSAqLCBjaGFyICosIHNpemVf
dCk7CmV4dGVybiB2b2lkIHNldGxpbmVidWYoRklMRSAqKTsKZXh0ZXJuIGludCB2c2NhbmYoY29u
c3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmV4dGVybiBpbnQgdmZzY2FuZihGSUxFICosIGNv
bnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwpleHRlcm4gaW50IHZzc2NhbmYoY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKIyA1MzQgIi9nY2MvZGplL2J1aWxk
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RkaW8uaCIgMyA0
Cn0KIyA1MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NzdGRpbyIgMiAzCiMg
OTcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jc3RkaW8iIDMKbmFtZXNwYWNl
IHN0ZAp7CiAgdXNpbmcgOjpGSUxFOwogIHVzaW5nIDo6ZnBvc190OwoKICB1c2luZyA6OmNsZWFy
ZXJyOwogIHVzaW5nIDo6ZmNsb3NlOwogIHVzaW5nIDo6ZmVvZjsKICB1c2luZyA6OmZlcnJvcjsK
ICB1c2luZyA6OmZmbHVzaDsKICB1c2luZyA6OmZnZXRjOwogIHVzaW5nIDo6ZmdldHBvczsKICB1
c2luZyA6OmZnZXRzOwogIHVzaW5nIDo6Zm9wZW47CiAgdXNpbmcgOjpmcHJpbnRmOwogIHVzaW5n
IDo6ZnB1dGM7CiAgdXNpbmcgOjpmcHV0czsKICB1c2luZyA6OmZyZWFkOwogIHVzaW5nIDo6ZnJl
b3BlbjsKICB1c2luZyA6OmZzY2FuZjsKICB1c2luZyA6OmZzZWVrOwogIHVzaW5nIDo6ZnNldHBv
czsKICB1c2luZyA6OmZ0ZWxsOwogIHVzaW5nIDo6ZndyaXRlOwogIHVzaW5nIDo6Z2V0YzsKICB1
c2luZyA6OmdldGNoYXI7CiAgdXNpbmcgOjpnZXRzOwogIHVzaW5nIDo6cGVycm9yOwogIHVzaW5n
IDo6cHJpbnRmOwogIHVzaW5nIDo6cHV0YzsKICB1c2luZyA6OnB1dGNoYXI7CiAgdXNpbmcgOjpw
dXRzOwogIHVzaW5nIDo6cmVtb3ZlOwogIHVzaW5nIDo6cmVuYW1lOwogIHVzaW5nIDo6cmV3aW5k
OwogIHVzaW5nIDo6c2NhbmY7CiAgdXNpbmcgOjpzZXRidWY7CiAgdXNpbmcgOjpzZXR2YnVmOwog
IHVzaW5nIDo6c3ByaW50ZjsKICB1c2luZyA6OnNzY2FuZjsKICB1c2luZyA6OnRtcGZpbGU7CiAg
dXNpbmcgOjp0bXBuYW07CiAgdXNpbmcgOjp1bmdldGM7CiAgdXNpbmcgOjp2ZnByaW50ZjsKICB1
c2luZyA6OnZwcmludGY7CiAgdXNpbmcgOjp2c3ByaW50ZjsKfQojIDM2ICIvZ2NjL2RqZS9idWls
ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAv
bGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRzL2MrK2lvLmgi
IDIgMwoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC9iaXRzL2d0aHIuaCIgMSAzCiMgOTYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst
djMvaW5jbHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvZ3Roci5oIiAzCiMgMSAiL2dj
Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvYml0
cy9ndGhyLWRlZmF1bHQuaCIgMSAzCiMgMzUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j
bHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKIyAxICIv
Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9i
aXRzL2d0aHItc2luZ2xlLmgiIDEgMwojIDM0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu
Y2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRzL2d0aHItc2luZ2xlLmgiIDMKdHlwZWRl
ZiBpbnQgX19ndGhyZWFkX211dGV4X3Q7CiMgMjExICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz
L2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRzL2d0aHItc2luZ2xlLmgiIDMKc3Rh
dGljIGlubGluZSBpbnQKX19ndGhyZWFkX2FjdGl2ZV9wICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0K
CnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF9sb2NrIChfX2d0aHJlYWRfbXV0ZXhf
dCAqICkKewogIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhf
dHJ5bG9jayAoX19ndGhyZWFkX211dGV4X3QgKiApCnsKICByZXR1cm4gMDsKfQoKc3RhdGljIGlu
bGluZSBpbnQKX19ndGhyZWFkX211dGV4X3VubG9jayAoX19ndGhyZWFkX211dGV4X3QgKiApCnsK
ICByZXR1cm4gMDsKfQojIDM2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRzL2d0aHItZGVmYXVsdC5oIiAyIDMKIyA5NyAiL2djYy9k
amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvYml0cy9n
dGhyLmgiIDIgMwojIDM4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw
MDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5
cGVkZWYgbG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCgoK
ICB0eXBlZGVmIGZwb3NfdCBfX2Nfc3RyZWFtcG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRl
eF90IF9fY19sb2NrOwoKCiAgdHlwZWRlZiBGSUxFIF9fY19maWxlOwoKCiAgc3RydWN0IF9faW9z
X2ZsYWdzCiAgewogICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25z
dCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Zp
eGVkID0gMHgwMDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4
OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBz
dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfcmlnaHQgPSAweDAwODA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRp
ZmljID0gMHgwMTAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAw
eDAyMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3Rh
dGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90
eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsK
CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19p
bnRfdHlwZSBfU19mYWlsYml0ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfYXBwID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfaW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgy
MDsKICB9Owp9CiMgNDUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw
MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Zw
b3MuaCIgMiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz
MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2N3Y2hhciIg
MSAzCiMgNDggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jd2NoYXIiIDMKCgoK
IyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY3RpbWUiIDEgMwojIDQ4ICIv
Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY3RpbWUiIDMKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAxIDMgNAojIDMwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJu
ICJDIiB7CiMgNzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApzdHJ1Y3QgdG0gewogaW50IHRt
X3NlYzsKIGludCB0bV9taW47CiBpbnQgdG1faG91cjsKIGludCB0bV9tZGF5OwogaW50IHRtX21v
bjsKIGludCB0bV95ZWFyOwogaW50IHRtX3dkYXk7CiBpbnQgdG1feWRheTsKIGludCB0bV9pc2Rz
dDsKfTsKIyAxMTAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAogICAgZXh0ZXJuIHNpemVfdCBz
dHJmdGltZShjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0gKik7
CiAgICBleHRlcm4gY2xvY2tfdCBjbG9jayh2b2lkKTsKICAgIGV4dGVybiBkb3VibGUgZGlmZnRp
bWUodGltZV90LCB0aW1lX3QpOwogICAgZXh0ZXJuIHRpbWVfdCBta3RpbWUoc3RydWN0IHRtICop
OwogICAgZXh0ZXJuIHRpbWVfdCB0aW1lKHRpbWVfdCAqKTsKICAgIGV4dGVybiBjaGFyICphc2N0
aW1lKGNvbnN0IHN0cnVjdCB0bSAqKTsKICAgIGV4dGVybiBjaGFyICpjdGltZShjb25zdCB0aW1l
X3QgKik7CiAgICBleHRlcm4gc3RydWN0IHRtICpnbXRpbWUoY29uc3QgdGltZV90ICopOwogICAg
ZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lKGNvbnN0IHRpbWVfdCAqKTsKIyAxMjggIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDMgNAogICAgZXh0ZXJuIGNoYXIgKmFzY3RpbWVfcihjb25zdCBzdHJ1
Y3QgdG0gKiwgY2hhciAqKTsKICAgIGV4dGVybiBjaGFyICpjdGltZV9yKGNvbnN0IHRpbWVfdCAq
LCBjaGFyICopOwogICAgZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IoY29uc3QgdGltZV90ICos
IHN0cnVjdCB0bSAqKTsKICAgIGV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yKGNvbnN0IHRp
bWVfdCAqLCBzdHJ1Y3QgdG0gKik7CiMgMTU2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0
ZXJuIGNoYXIgKnR6bmFtZVtdOwoKCgoKICAgIGV4dGVybiB2b2lkIHR6c2V0KHZvaWQpOwoKCgoK
CiAgICBleHRlcm4gbG9uZyB0aW1lem9uZTsKICAgIGV4dGVybiBpbnQgZGF5bGlnaHQ7CgoKCiAg
ICBleHRlcm4gY2hhciAqc3RycHRpbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHN0cnVj
dCB0bSAqKTsKCgoKCiBleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgogZXh0ZXJuIHN0cnVjdCB0
bSAqZ2V0ZGF0ZShjb25zdCBjaGFyICopOwoKCgoKc3RydWN0IHRpbWVzcGVjIHsKICAgICAgICB0
aW1lX3QgdHZfc2VjOwogICAgICAgIGxvbmcgdHZfbnNlYzsKfTsKCnN0cnVjdCBpdGltZXJzcGVj
IHsKICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICAgICAgc3RydWN0IHRp
bWVzcGVjIGl0X3ZhbHVlOwp9OwoKCgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMoY2xvY2tpZF90
LCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZShjbG9ja2lkX3Qs
IHN0cnVjdCB0aW1lc3BlYyAqKTsKZXh0ZXJuIGludCBjbG9ja19zZXR0aW1lKGNsb2NraWRfdCwg
Y29uc3Qgc3RydWN0IHRpbWVzcGVjICopOwpleHRlcm4gaW50IG5hbm9zbGVlcChjb25zdCBzdHJ1
Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICopOwoKCgpleHRlcm4gaW50IHRpbWVyX2Ny
ZWF0ZShjbG9ja2lkX3QsIHZvaWQgKiwgdGltZXJfdCAqKTsKCmV4dGVybiBpbnQgdGltZXJfZGVs
ZXRlKHRpbWVyX3QpOwpleHRlcm4gaW50IHRpbWVyX2dldHRpbWUodGltZXJfdCwgc3RydWN0IGl0
aW1lcnNwZWMgKik7CmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1bih0aW1lcl90KTsKZXh0ZXJu
IGludCB0aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMg
Kiwgc3RydWN0IGl0aW1lcnNwZWMgKik7CgoKCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDIx
OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzIDQKIyAyMjcgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDMgNAogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKk5MY3RpbWUobG9uZyAqKTsKIGV4dGVybiB1bnNp
Z25lZCBjaGFyICpOTGFzY3RpbWUoc3RydWN0IHRtICopOwogZXh0ZXJuIGNoYXIgKk5Mc3RydGlt
ZShjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0gKik7CgoKCgp9
CiMgNTIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jdGltZSIgMiAzCiMgNjQg
Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jdGltZSIgMwpuYW1lc3BhY2Ugc3Rk
CnsKICB1c2luZyA6OmNsb2NrX3Q7CiAgdXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAg
dXNpbmcgOjpjbG9jazsKICB1c2luZyA6OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0aW1lOwogIHVz
aW5nIDo6dGltZTsKICB1c2luZyA6OmFzY3RpbWU7CiAgdXNpbmcgOjpjdGltZTsKICB1c2luZyA6
OmdtdGltZTsKICB1c2luZyA6OmxvY2FsdGltZTsKICB1c2luZyA6OnN0cmZ0aW1lOwp9CiMgNTIg
Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jd2NoYXIiIDIgMwoKCiMgMSAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDEgMyA0CiMgNDQgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQK
ZXh0ZXJuICJDIiB7CiMgNjIgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKdHlwZWRlZiBjaGFy
ICogbWJzdGF0ZV90OwojIDEyNyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNApleHRlcm4gd2lu
dF90IGZnZXR3YyhGSUxFICopOwpleHRlcm4gd2NoYXJfdCAqZmdldHdzKHdjaGFyX3QgKiwgaW50
LCBGSUxFICopOwpleHRlcm4gaW50IGZwdXR3cyhjb25zdCB3Y2hhcl90ICosIEZJTEUgKik7CmV4
dGVybiB3aW50X3QgZ2V0d2MoRklMRSAqKTsKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhcih2b2lkKTsK
CgpleHRlcm4gaW50IGlzd2FsbnVtKHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3YWxwaGEod2ludF90
KTsKZXh0ZXJuIGludCBpc3djbnRybCh3aW50X3QpOwpleHRlcm4gaW50IGlzd2RpZ2l0KHdpbnRf
dCk7CmV4dGVybiBpbnQgaXN3Z3JhcGgod2ludF90KTsKZXh0ZXJuIGludCBpc3dsb3dlcih3aW50
X3QpOwpleHRlcm4gaW50IGlzd3ByaW50KHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3cHVuY3Qod2lu
dF90KTsKZXh0ZXJuIGludCBpc3dzcGFjZSh3aW50X3QpOwpleHRlcm4gaW50IGlzd3VwcGVyKHdp
bnRfdCk7CmV4dGVybiBpbnQgaXN3eGRpZ2l0KHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3Y3R5cGUg
KHdpbnRfdCwgd2N0eXBlX3QpOwpleHRlcm4gaW50IHRvd2xvd2VyKHdpbnRfdCk7CmV4dGVybiBp
bnQgdG93dXBwZXIod2ludF90KTsKCgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2Mod2NoYXJfdCwgRklM
RSAqKTsKZXh0ZXJuIHdpbnRfdCBwdXR3Yyh3Y2hhcl90LCBGSUxFICopOwpleHRlcm4gd2ludF90
IHB1dHdjaGFyKHdjaGFyX3QpOwoKCgoKCgpleHRlcm4gd2ludF90IHVuZ2V0d2Mod2ludF90LCBG
SUxFICopOwpleHRlcm4gd2N0eXBlX3Qgd2N0eXBlKGNvbnN0IGNoYXIqKTsKZXh0ZXJuIHdjaGFy
X3QgKndjc2NhdCh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiB3Y2hhcl90ICp3
Y3NjaHIoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKZXh0ZXJuIGludCB3Y3NjbXAoY29uc3Qg
d2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gaW50IHdjc2NvbGwoY29uc3Qgd2No
YXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gd2NoYXJfdCAqd2NzY3B5KHdjaGFyX3Qg
KiwgY29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuKGNvbnN0IHdjaGFyX3Qg
KiwgY29uc3Qgd2NoYXJfdCAqKTsKCnN0YXRpYyBzaXplX3Qgd2NzZnRpbWUod2NoYXJfdCAqX193
Y3NmdGltZV93Y3MsIHNpemVfdCBfX3djc2Z0aW1lX21heHNpemUsCiAgY29uc3Qgd2NoYXJfdCAq
X193Y3NmdGltZV9mb3JtYXQsCiAgY29uc3Qgc3RydWN0IHRtICpfX3djc2Z0aW1lX3RpbXB0cikK
ewogICAgZXh0ZXJuIHNpemVfdCBfX2lzb193Y3NmdGltZSh3Y2hhcl90ICosIHNpemVfdCwgY29u
c3Qgd2NoYXJfdCAqLAogICAgIGNvbnN0IHN0cnVjdCB0bSAqKTsKICAgIHJldHVybiBfX2lzb193
Y3NmdGltZShfX3djc2Z0aW1lX3djcywgX193Y3NmdGltZV9tYXhzaXplLCBfX3djc2Z0aW1lX2Zv
cm1hdCwKICAgICBfX3djc2Z0aW1lX3RpbXB0cik7Cn0KCgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4o
Y29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQod2NoYXJfdCAqLCBjb25z
dCB3Y2hhcl90ICosIHNpemVfdCk7CmV4dGVybiBpbnQgd2NzbmNtcChjb25zdCB3Y2hhcl90ICos
IGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkod2NoYXJf
dCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CmV4dGVybiB3Y2hhcl90ICp3Y3NwYnJrKGNv
bnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIo
Y29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKZXh0ZXJuIHNpemVfdCB3Y3NzcG4oY29uc3Qgd2No
YXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gZG91YmxlIHdjc3RvZChjb25zdCB3Y2hh
cl90ICosIHdjaGFyX3QgKiopOwoKc3RhdGljIHdjaGFyX3QgKndjc3Rvayh3Y2hhcl90ICpfX3dj
c3Rva193czEsIGNvbnN0IHdjaGFyX3QgKl9fd2NzdG9rX3dzMiwKICAgICAgICAgd2NoYXJfdCAq
Kl9fd2NzdG9rX3B0cikKewogICAgZXh0ZXJuIHdjaGFyX3QgKl9faXNvX3djc3Rvayh3Y2hhcl90
ICosIGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7CiAgICByZXR1cm4gX19pc29fd2NzdG9r
KF9fd2NzdG9rX3dzMSwgX193Y3N0b2tfd3MyLCBfX3djc3Rva19wdHIpOwp9CgoKCgoKCmV4dGVy
biBsb25nIHdjc3RvbChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGludCk7CmV4dGVybiB1
bnNpZ25lZCBsb25nIHdjc3RvdWwoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpOwpl
eHRlcm4gd2NoYXJfdCAqd2Nzd2NzKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsK
ZXh0ZXJuIGludCB3Y3N3aWR0aChjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CmV4dGVybiBzaXpl
X3Qgd2NzeGZybSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKZXh0ZXJuIGlu
dCB3Y3dpZHRoKHdjaGFyX3QpOwoKCmV4dGVybiB3aW50X3QgYnRvd2MoaW50KTsKZXh0ZXJuIGlu
dCBmd3ByaW50ZihGSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKZXh0ZXJuIGludCBmd3Nj
YW5mKEZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwpleHRlcm4gaW50IGZ3aWRlKEZJTEUg
KiwgaW50KTsKZXh0ZXJuIGludCBtYnNpbml0KGNvbnN0IG1ic3RhdGVfdCAqKTsKZXh0ZXJuIHNp
emVfdCBtYnJsZW4oY29uc3QgY2hhciAqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJuIHNp
emVfdCBtYnJ0b3djKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIG1ic3RhdGVfdCAq
KTsKZXh0ZXJuIHNpemVfdCBtYnNydG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICoqLCBzaXpl
X3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJuIGludCBzd3ByaW50Zih3Y2hhcl90ICosIHNpemVfdCwg
Y29uc3Qgd2NoYXJfdCAqLCAuLi4pOwpleHRlcm4gaW50IHN3c2NhbmYoY29uc3Qgd2NoYXJfdCAq
LCBjb25zdCB3Y2hhcl90ICosIC4uLik7CgpleHRlcm4gaW50IHZmd3ByaW50ZihGSUxFICosIGNv
bnN0IHdjaGFyX3QgKiwgdmFfbGlzdCk7CmV4dGVybiBpbnQgdndwcmludGYoY29uc3Qgd2NoYXJf
dCAqLCB2YV9saXN0KTsKZXh0ZXJuIGludCB2c3dwcmludGYod2NoYXJfdCAqLCBzaXplX3QsIGNv
bnN0IHdjaGFyX3QgKiwgdmFfbGlzdCk7CgoKCgoKCgpleHRlcm4gc2l6ZV90IHdjcnRvbWIoY2hh
ciAqLCB3Y2hhcl90LCBtYnN0YXRlX3QgKik7CmV4dGVybiBzaXplX3Qgd2NzcnRvbWJzKGNoYXIg
KiwgY29uc3Qgd2NoYXJfdCAqKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7CmV4dGVybiB3Y2hhcl90
ICp3Y3NzdHIoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gaW50IHdj
dG9iKHdpbnRfdCk7CmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGUoY29uc3QgY2hhciAqKTsKZXh0ZXJu
IHdjaGFyX3QgKndtZW1jaHIoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90LCBzaXplX3QpOwpleHRl
cm4gaW50IHdtZW1jbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7
CmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXpl
X3QpOwpleHRlcm4gd2NoYXJfdCAqd21lbW1vdmUod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICos
IHNpemVfdCk7CmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0KHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6
ZV90KTsKZXh0ZXJuIGludCB3cHJpbnRmKGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKZXh0ZXJuIGlu
dCB3c2NhbmYoY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwojIDI2OSAiL3Vzci9pbmNsdWRlL3djaGFy
LmgiIDMgNApleHRlcm4gd2NoYXJfdCAqZ2V0d3Mod2NoYXJfdCAqKTsKZXh0ZXJuIGludCBwdXR3
cyhjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gaW50IHdzcHJpbnRmKHdjaGFyX3QgKiwgY29uc3Qg
Y2hhciAqLCAuLi4pOwoKZXh0ZXJuIGludCB2d3NwcmludGYod2NoYXJfdCAqLCBjb25zdCBjaGFy
ICosIHZhX2xpc3QpOwoKCgoKCmV4dGVybiBpbnQgd2NzY2FzZWNtcChjb25zdCB3Y2hhcl90ICos
IGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiB3Y2hhcl90ICp3Y3NkdXAoY29uc3Qgd2NoYXJfdCAq
KTsKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3Qg
Kiwgc2l6ZV90KTsKZXh0ZXJuIHNpemVfdCB3Y3NubGVuKGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90
KTsKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqKiwgc2l6
ZV90LCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGQoY29u
c3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsKZXh0ZXJuIGZsb2F0IHdjc3RvZihjb25zdCB3Y2hh
cl90ICosIHdjaGFyX3QgKiopOwpleHRlcm4gc2l6ZV90IG1ic25ydG93Y3Mod2NoYXJfdCAqLCBj
b25zdCBjaGFyICoqLCBzaXplX3QsIHNpemVfdCwgbWJzdGF0ZV90ICopOwpleHRlcm4gd2NoYXJf
dCAqd2NwY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIHdjaGFyX3QgKndj
cG5jcHkod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CgoKCmV4dGVybiB3Y2hh
cl90ICpzdHJ0b3dzKHdjaGFyX3QgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKndzdHJ0b3MoY2hh
ciAqLCB3Y2hhcl90ICopOwojIDMxNyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNApleHRlcm4g
bG9uZyBsb25nIGludCB3Y3N0b2xsKAogICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICB3Y2hhcl90
ICoqLAogICAgIGludCApOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3VsbCgK
ICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgd2NoYXJfdCAqKiwKICAgICBpbnQgKTsKCgoKCgp9
CiMgNTUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jd2NoYXIiIDIgMwojIDY5
ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY3djaGFyIiAzCm5hbWVzcGFjZSBz
dGQKewogIHVzaW5nIDo6bWJzdGF0ZV90Owp9CiMgNDYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst
djMvaW5jbHVkZS9iaXRzL2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgZnBvcwogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBz
dHJlYW1vZmYgX01fb2ZmOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CgogICAgcHVibGljOgog
ICAgICBfX3N0YXRlX3R5cGUKICAgICAgc3RhdGUoKSBjb25zdCB7IHJldHVybiBfTV9zdDsgfQoK
ICAgICAgdm9pZAogICAgICBzdGF0ZShfX3N0YXRlX3R5cGUgX19zdCkgeyBfTV9zdCA9IF9fc3Q7
IH0KCgoKICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5
cGUoKSkgeyB9CgogICAgICBmcG9zKHN0cmVhbW9mZiBfX29mZiwgX19zdGF0ZV90eXBlIF9fc3Qg
PSBfX3N0YXRlX3R5cGUoKSkKICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9zdChfX3N0KSB7IH0K
CiAgICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAg
ICAgZnBvcyYKICAgICAgb3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmICs9IF9f
b2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yLT0oc3RyZWFt
b2ZmIF9fb2ZmKSB7IF9NX29mZiAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9z
CiAgICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKIGZwb3MgX190KCp0aGlz
KTsKIF9fdCArPSBfX29mZjsKIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGZwb3MKICAgICAg
b3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogZnBvcyBfX3QoKnRoaXMpOwogX190
IC09IF9fb2ZmOwogcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRv
cj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19w
b3MuX01fb2ZmOyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19w
b3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiAhPSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAg
IHN0cmVhbW9mZgogICAgICBfTV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoK
ICAgICAgdm9pZAogICAgICBfTV9wb3NpdGlvbihzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmID0g
X19vZmY7IH0KICAgIH07CgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgoK
Cgp9CiMgNTAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pb3Nmd2QiIDIgMwoj
IDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Z1bmN0ZXhjZXB0Lmgi
IDEgMwojIDM0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9mdW5jdGV4
Y2VwdC5oIiAzCiMgMSAiL2djYy9kamUvc3JjL2xpYnN0ZGMrKy12My9saWJzdXBjKysvZXhjZXB0
aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk
ZS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Ro
cm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9p
ZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3df
YmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
cnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9l
cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3Qg
Y2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9f
cyk7Cn0KIyA1MSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy
OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2lvc2Z3ZCIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvczsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No
YXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg
YmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf
Q2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgIHR5cGVu
YW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1
ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiwKICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4K
ICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICB0eXBlbmFtZSBf
QWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFt
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry
YWl0czxfQ2hhclQ+LAogICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgog
ICAgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj
X2ZpbGVidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
VD4gPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz
aWNfZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
ID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+ID4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9z
X2Jhc2U7CiMgMTM2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw
NDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaW9zZndkIiAz
CiAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVm
PGNoYXI+IHN0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsK
ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lv
c3RyZWFtPGNoYXI+IGlvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0
cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVh
bTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0
eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBi
YXNpY19maWxlYnVmPGNoYXI+IGZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFy
PiBpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5
cGVkZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBmc3RyZWFtOwojIDE2NiAiL2djYy9kamUvYnVpbGQv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp
YnN0ZGMrKy12My9pbmNsdWRlL2lvc2Z3ZCIgMwp9CiMgNDUgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9pb3MiIDIgMwojIDEgIi9nY2MvZGplL3NyYy9saWJzdGRjKystdjMvbGli
c3VwYysrL2V4Y2VwdGlvbiIgMSAzCiMgNDAgIi9nY2MvZGplL3NyYy9saWJzdGRjKystdjMvbGli
c3VwYysrL2V4Y2VwdGlvbiIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CiMgNTIg
Ii9nY2MvZGplL3NyYy9saWJzdGRjKystdjMvbGlic3VwYysrL2V4Y2VwdGlvbiIgMwogIGNsYXNz
IGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAg
dmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3
aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJs
aWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9leGNlcHRpb24oKSB0aHJvdygpIHsg
fQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoKCiAgdHlwZWRl
ZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVj
dGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJt
aW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVybWluYXRlKCkgX19hdHRyaWJ1dGVf
XyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVk
KHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0
cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyAxMDAgIi9nY2MvZGplL3NyYy9saWJzdGRjKyst
djMvbGlic3VwYysrL2V4Y2VwdGlvbiIgMwogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgdGhy
b3coKTsKfQoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiMgMTE1ICIvZ2NjL2RqZS9zcmMvbGlic3Rk
YysrLXYzL2xpYnN1cGMrKy9leGNlcHRpb24iIDMKICB2b2lkIF9fdmVyYm9zZV90ZXJtaW5hdGVf
aGFuZGxlciAoKTsKfQoKfQojIDQ2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu
My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv
aW9zIiAyIDMKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw
NDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9jaGFy
X3RyYWl0cy5oIiAxIDMKIyA0NCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Jp
dHMvY2hhcl90cmFpdHMuaCIgMwoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1
ZGUvY3N0cmluZyIgMSAzCiMgNDggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9j
c3RyaW5nIiAzCgoKCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y
MDAzMDQyOC9nY2MvaW5jbHVkZS9zdHJpbmcuaCIgMSAzIDQKIyA1NyAiL2djYy9kamUvYnVpbGQv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdHJpbmcuaCIgMyA0
CmV4dGVybiAiQyIgewojIDEwMCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CiAgICAgICAgZXh0ZXJuIHZvaWQg
Km1lbWNocihjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsKICAgICAgICBleHRlcm4gdm9pZCAq
bWVtY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiB2b2lk
ICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7CiAgICAgICAgZXh0ZXJuIHNpemVfdCBzdHJj
c3BuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKICAgICAgICBleHRlcm4gc2l6ZV90IHN0
cmxlbihjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVybiBzaXplX3Qgc3Ryc3BuKGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqKTsKIyAxMzIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RyaW5nLmgiIDMgNAogICAgICAgIGV4dGVy
biB2b2lkICptZW1tb3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwogICAgICAgIGV4
dGVybiBjaGFyICpzdHJjcHkoY2hhciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVybiBj
aGFyICpzdHJuY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogICAgICAgIGV4dGVy
biBjaGFyICpzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVybiBjaGFy
ICpzdHJuY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiBp
bnQgbWVtY21wKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLHNpemVfdCk7CiAgICAgICAgZXh0
ZXJuIGludCBzdHJjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVy
biBpbnQgc3RybmNtcChjb25zdCBjaGFyICosY29uc3QgY2hhciAqLHNpemVfdCk7CiAgICAgICAg
ZXh0ZXJuIGludCBzdHJuY29sbGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgaW50ICk7CiAgICAgICAg
ZXh0ZXJuIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICosIGludCk7CiAgICAgICAgZXh0ZXJuIGNo
YXIgKnN0cnBicmsoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVybiBj
aGFyICpzdHJyY2hyKGNvbnN0IGNoYXIgKiwgaW50KTsKICAgICAgICBleHRlcm4gY2hhciAqc3Ry
c3RyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKICAgICAgICBleHRlcm4gY2hhciAqc3Ry
dG9rKGNoYXIgKiwgY29uc3QgY2hhciAqKTsKICAgICAgICBleHRlcm4gY2hhciAqc3RyZXJyb3Io
aW50KTsKICAgICAgICBleHRlcm4gaW50IHN0cmNvbGwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICopOwogICAgICAgIGV4dGVybiBzaXplX3Qgc3RyeGZybShjaGFyICosIGNvbnN0IGNoYXIgKiwg
c2l6ZV90KTsKIGV4dGVybiBjaGFyICpzdHJ0b2tfcihjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hh
ciAqKik7CiMgMTYzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw
NDI4L2djYy9pbmNsdWRlL3N0cmluZy5oIiAzIDQKICAgICAgICBleHRlcm4gdm9pZCAqbWVtY2Nw
eSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwojIDE3MiAiL2djYy9kamUvYnVp
bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdHJpbmcuaCIg
MyA0CmV4dGVybiBjaGFyICpzdHJkdXAoY29uc3QgY2hhciAqKTsKIyAyMTUgIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RyaW5nLmgi
IDMgNAogICAgICAgIGV4dGVybiBjaGFyICppbmRleChjb25zdCBjaGFyICosIGludCk7CiAgICAg
ICAgZXh0ZXJuIGNoYXIgKnJpbmRleChjb25zdCBjaGFyICosIGludCk7CiAgICAgICAgZXh0ZXJu
IHZvaWQgc3dhYihjb25zdCB2b2lkICosIHZvaWQgKiwgc3NpemVfdCk7CiAgICAgICAgZXh0ZXJu
IHdjaGFyX3QgKndjc2NhdCh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiAgICAgICAgZXh0
ZXJuIHdjaGFyX3QgKndjc2Nocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpOwogICAgICAgIGV4
dGVybiBpbnQgd2NzY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAg
ICBleHRlcm4gd2NoYXJfdCAqd2NzY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAg
ICAgICBleHRlcm4gc2l6ZV90IHdjc2NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90
ICopOwogICAgICAgIGV4dGVybiBzaXplX3Qgd2NzbGVuKGNvbnN0IHdjaGFyX3QgKik7CiAgICAg
ICAgZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNp
emVfdCk7CiAgICAgICAgZXh0ZXJuIGludCB3Y3NuY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qg
d2NoYXJfdCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5KHdjaGFy
X3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiB3Y2hhcl90ICp3
Y3NwYnJrKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAgICBleHRlcm4g
d2NoYXJfdCAqd2NzcmNocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpOwogICAgICAgIGV4dGVy
biBzaXplX3Qgd2Nzc3BuKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAg
ICBleHRlcm4gd2NoYXJfdCAqd2Nzd2NzKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAq
KTsKICAgICAgICBleHRlcm4gaW50IHdjc3dpZHRoKGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsK
ICAgICAgICBleHRlcm4gaW50IHdjd2lkdGgod2NoYXJfdCk7CiAgICAgICAgZXh0ZXJuIGludCB3
Y3Njb2xsKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAgICBleHRlcm4g
c2l6ZV90IHdjc3hmcm0od2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CiMgMjk2
ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNs
dWRlL3N0cmluZy5oIiAzIDQKfQojIDUyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1
ZGUvY3N0cmluZyIgMiAzCiMgNzcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9j
c3RyaW5nIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWVtY3B5OwogIHVzaW5nIDo6bWVt
bW92ZTsKICB1c2luZyA6OnN0cmNweTsKICB1c2luZyA6OnN0cm5jcHk7CiAgdXNpbmcgOjpzdHJj
YXQ7CiAgdXNpbmcgOjpzdHJuY2F0OwogIHVzaW5nIDo6bWVtY21wOwogIHVzaW5nIDo6c3RyY21w
OwogIHVzaW5nIDo6c3RyY29sbDsKICB1c2luZyA6OnN0cm5jbXA7CiAgdXNpbmcgOjpzdHJ4ZnJt
OwogIHVzaW5nIDo6c3RyY3NwbjsKICB1c2luZyA6OnN0cnNwbjsKICB1c2luZyA6OnN0cnRvazsK
ICB1c2luZyA6Om1lbXNldDsKICB1c2luZyA6OnN0cmVycm9yOwogIHVzaW5nIDo6c3RybGVuOwoK
ICB1c2luZyA6Om1lbWNocjsKCiAgaW5saW5lIHZvaWQqCiAgbWVtY2hyKHZvaWQqIF9fcCwgaW50
IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB2b2lk
Kj4oX19wKSwgX19jLCBfX24pOyB9CgogIHVzaW5nIDo6c3RyY2hyOwoKICBpbmxpbmUgY2hhcioK
ICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RyY2hy
KGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3RycGJy
azsKCiAgaW5saW5lIGNoYXIqCiAgc3RycGJyayhjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3My
KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJrKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9f
czEpLCBfX3MyKTsgfQoKICB1c2luZyA6OnN0cnJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cnJj
aHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycmNocihjb25z
dF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnN0cjsKCiAg
aW5saW5lIGNoYXIqCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyBy
ZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19z
Mik7IH0KfQojIDQ2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw
NDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9jaGFy
X3RyYWl0cy5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKIyA2MSAiL2djYy9kamUvYnVpbGQvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0
ZGMrKy12My9pbmNsdWRlL2JpdHMvY2hhcl90cmFpdHMuaCIgMwogIHRlbXBsYXRlPGNsYXNzIF9D
aGFyVD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0cwogICAgewogICAgICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7CgogICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50X3R5cGU7CiAgICAgIHR5
cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlw
ZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lk
CiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMik7Cgog
ICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNo
YXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5
cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMgaW50CiAgICAg
IGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp
emVfdCBfX24pOwoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90
eXBlKiBfX3MpOwoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25z
dCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpOwoKICAg
ICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNo
YXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAg
ICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19u
KTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywg
c2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSk7CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAg
IHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlw
ZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMg
Ym9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5
cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpOwoKICAgICAgc3Rh
dGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYyk7CiAgICB9OwoK
CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAgewogICAgICB0
eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKICAgICAg
dHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90
eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZv
aWQKICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQog
ICAgICB7IF9fYzEgPSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBj
aGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19j
MSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUm
IF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7
IH0KCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEs
IGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gbWVtY21w
KF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNv
bnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywg
c2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IGNoYXJfdHlwZSo+KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0
YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5
cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlw
ZSo+KG1lbW1vdmUoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUq
CiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVf
dCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbWNweShfX3Mx
LCBfX3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNo
YXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBz
dGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQog
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoKICAgICAgc3Rh
dGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oX19jKSk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGlu
dF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9
PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50X3R5cGU+KCgtMSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAg
bm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiAoX19jID09IGVvZigp
KSA/IDAgOiBfX2M7IH0KICB9OwojIDI1MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs
dWRlL2JpdHMvY2hhcl90cmFpdHMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIHN0cnVjdCBfQ2hhcl90cmFpdHNfbWF0Y2gKICAgIHsKICAgICAg
X0NoYXJUIF9NX2M7CiAgICAgIF9DaGFyX3RyYWl0c19tYXRjaChfQ2hhclQgY29uc3QmIF9fYykg
OiBfTV9jKF9fYykgeyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yKCkoX0NoYXJUIGNvbnN0
JiBfX2EpIHsgcmV0dXJuIF9UcmFpdHM6OmVxKF9NX2MsIF9fYSk7IH0KICAgIH07Cn0KIyA0NyAi
L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2lvcyIgMiAzCgojIDEgIi9nY2MvZGpl
L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0NCAiL2dj
Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlZndkLmgiIDMKCgoKCiMg
MSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvZnVuY3RleGNlcHQuaCIg
MSAzCiMgMzYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Z1bmN0ZXhj
ZXB0LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24o
dm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190
aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsK
CgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xl
bmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFu
Z2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
ICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZv
aWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA0OSAiL2djYy9k
amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlZndkLmgiIDIgMwoKbmFtZXNw
YWNlIHN0ZAp7CgogIGNsYXNzIGxvY2FsZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGlubGluZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFy
VCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu
ZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3VwcGVyKF9DaGFyVCwgY29uc3Qg
bG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg
ICBpc2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2RpZ2l0
KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBib29sCiAgICBpc3B1bmN0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQs
IGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg
Ym9vbAogICAgaXNhbG51bShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQsIGNvbnN0IGxv
Y2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAg
ICB0b3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUm
KTsKCgogIGNsYXNzIGN0eXBlX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
Y2xhc3MgY3R5cGU7CiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTxjaGFyPjsKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWU7CgoKICBjbGFzcyBjb2Rl
Y3Z0X2Jhc2U7CiAgY2xhc3MgX19lbmNfdHJhaXRzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRl
cm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVj
dnQ7CiAgdGVtcGxhdGU8PiBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47CgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFt
ZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4g
PgogICAgY2xhc3MgbnVtX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51bV9w
dXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdDsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPiBjbGFzcwogICAgY29sbGF0ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1lX2Jhc2U7CiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVy
YXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAg
ICBjbGFzcyB0aW1lX2dldF9ieW5hbWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0
aW1lX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0g
b3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTsK
CgogIGNsYXNzIG1vbmV5X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5
X2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0
cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1dDsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVu
Y3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBj
bGFzcyBtb25leXB1bmN0X2J5bmFtZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jhc2U7CiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFjZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBf
X2xvYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNl
dChjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpOwp9CiMgNDkgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9pb3MiIDIgMwojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMv
aW5jbHVkZS9iaXRzL2lvc19iYXNlLmgiIDEgMwojIDQ0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr
LXYzL2luY2x1ZGUvYml0cy9pb3NfYmFzZS5oIiAzCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvYXRvbWljaXR5LmgiIDEg
MwojIDQxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC9iaXRzL2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsKCiMg
MSAiL3Vzci9pbmNsdWRlL3N5cy9hdG9taWNfb3AuaCIgMSAzIDQKIyA0MCAiL3Vzci9pbmNsdWRl
L3N5cy9hdG9taWNfb3AuaCIgMyA0CnR5cGVkZWYgaW50ICphdG9taWNfcDsKdHlwZWRlZiB1c2hv
cnQgKmF0b21pY19oOwp0eXBlZGVmIGxvbmcgKmF0b21pY19sOwojIDcwICIvdXNyL2luY2x1ZGUv
c3lzL2F0b21pY19vcC5oIiAzIDQKaW50IGZldGNoX2FuZF9hZGQoYXRvbWljX3AsaW50KTsKdWlu
dCBmZXRjaF9hbmRfYW5kKGF0b21pY19wLHVpbnQpOwp1aW50IGZldGNoX2FuZF9vcihhdG9taWNf
cCx1aW50KTsKYm9vbGVhbl90IGNvbXBhcmVfYW5kX3N3YXAoYXRvbWljX3AsaW50ICosaW50KTsK
bG9uZyBmZXRjaF9hbmRfYWRkbHAoYXRvbWljX2wsbG9uZyk7CnVsb25nIGZldGNoX2FuZF9hbmRs
cChhdG9taWNfbCx1bG9uZyk7CnVsb25nIGZldGNoX2FuZF9vcmxwKGF0b21pY19sLHVsb25nKTsK
Ym9vbGVhbl90IGNvbXBhcmVfYW5kX3N3YXBscChhdG9taWNfbCwgbG9uZyAqLCBsb25nKTsKdXNo
b3J0IGZldGNoX2FuZF9hZGRfaChhdG9taWNfaCxpbnQpOwojIDEwMiAiL3Vzci9pbmNsdWRlL3N5
cy9hdG9taWNfb3AuaCIgMyA0CmJvb2xlYW5fdCBfY2hlY2tfbG9jayhhdG9taWNfcCwgaW50LCBp
bnQpOwp2b2lkIF9jbGVhcl9sb2NrKGF0b21pY19wLCBpbnQpOwppbnQgX3NhZmVfZmV0Y2goYXRv
bWljX3ApOwoKCgoKCgojcHJhZ21hIG1jX2Z1bmMgX2NsZWFyX2xvY2sgeyAiNDgwMDM0MDMiIH0K
CgojcHJhZ21hIG1jX2Z1bmMgX2NoZWNrX2xvY2sgeyAiNDgwMDM0MjMiIH0KCgojcHJhZ21hIG1j
X2Z1bmMgX3NhZmVfZmV0Y2ggeyAiODA2MzAwMDAiICI1NDYzMDAzRiIgIjQxODIwMDA0IiB9CgoK
CgojcHJhZ21hIHJlZ19raWxsZWRfYnkgX3NhZmVfZmV0Y2ggY3IwLGdyMwojIDQ0ICIvZ2NjL2Rq
ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRzL2F0
b21pY2l0eS5oIiAyIDMKCnN0YXRpYyBpbmxpbmUgaW50Cl9fYXR0cmlidXRlX18gKCh1bnVzZWQp
KQpfX2V4Y2hhbmdlX2FuZF9hZGQgKGF0b21pY19wIF9fbWVtLCBpbnQgX192YWwpCnsKICByZXR1
cm4gZmV0Y2hfYW5kX2FkZCAoX19tZW0sIF9fdmFsKTsKfQoKc3RhdGljIGlubGluZSB2b2lkCl9f
YXR0cmlidXRlX18gKCh1bnVzZWQpKQpfX2F0b21pY19hZGQgKGF0b21pY19wIF9fbWVtLCBpbnQg
X192YWwpCnsKICAodm9pZCkgZmV0Y2hfYW5kX2FkZCAoX19tZW0sIF9fdmFsKTsKfQojIDQ2ICIv
Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9pb3NfYmFzZS5oIiAyIDMKCiMg
MSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2NsYXNzZXMu
aCIgMSAzCiMgNDQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0
MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2Fs
ZV9jbGFzc2VzLmgiIDMKCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu
My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv
c3RyaW5nIiAxIDMKIyA0NCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y
MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0cmlu
ZyIgMwoKCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw
NDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvbWVtb3J5IiAx
IDMKIyA1MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL21lbW9yeSIgMwoKIyAx
ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MSAzCiMgNjYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz
MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NsaW1pdHMi
IDEgMwojIDQ4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY2xpbWl0cyIgMwoK
IyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9p
bmNsdWRlL2xpbWl0cy5oIiAxIDMgNAojIDExICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL2xpbWl0cy5oIiAzIDQKIyAxICIvZ2NjL2Rq
ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N5c2xp
bWl0cy5oIiAxIDMgNAoKCgoKCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTIyICIvZ2NjL2Rq
ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL2xpbWl0
cy5oIiAzIDQKIyAxICIvZ2NjL2RqZS9pbnN0YWxsL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw
MzA0MjgvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC8zLjQvaW5jbHVkZS9saW1p
dHMuaCIgMSAzIDQKIyAxMjIgIi9nY2MvZGplL2luc3RhbGwvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC0yMDAzMDQyOC9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjMuMy4wLzMuNC9pbmNsdWRl
L2xpbWl0cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTIzICIv
Z2NjL2RqZS9pbnN0YWxsL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvbGliL2djYy1s
aWIvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC8zLjQvaW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKIyAx
MjMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2lu
Y2x1ZGUvbGltaXRzLmgiIDIgMyA0CiMgOCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQKIyAxMiAiL2dj
Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9s
aW1pdHMuaCIgMiAzIDQKIyA1MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Ns
aW1pdHMiIDIgMwojIDY3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw
MDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9z
dGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl
L2NzdGRsaWIiIDEgMwojIDQ4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY3N0
ZGxpYiIgMwoKCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw
MDMwNDI4L2djYy9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMgNAojIDU0ICIvZ2NjL2RqZS9idWlsZC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQK
ZXh0ZXJuICJDIiB7CiMgOTUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt
MjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RkbGliLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBkaXZfdCB7
CiBpbnQgcXVvdDsKIGludCByZW07Cn0gZGl2X3Q7Cgp0eXBlZGVmIHN0cnVjdCBsZGl2X3Qgewog
bG9uZyBpbnQgcXVvdDsKIGxvbmcgaW50IHJlbTsKfSBsZGl2X3Q7CgoKCgoKCmV4dGVybiBzaXpl
X3QgX19nZXRtYmN1cm1heCAodm9pZCk7CmV4dGVybiBpbnQgX19nZXRtYXhkaXNwd2lkdGggKHZv
aWQpOwojIDEyNiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy
OC9nY2MvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CiBleHRlcm4gaW50IG1ibGVuKGNvbnN0IGNoYXIg
Kiwgc2l6ZV90KTsKIGV4dGVybiBzaXplX3QgbWJzdG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFy
ICosIHNpemVfdCk7CiBleHRlcm4gaW50IG1idG93Yyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwg
c2l6ZV90KTsKIGV4dGVybiBzaXplX3Qgd2NzdG9tYnMoY2hhciAqLCBjb25zdCB3Y2hhcl90ICos
IHNpemVfdCk7CiBleHRlcm4gaW50IHdjdG9tYihjaGFyICosIGNvbnN0IHdjaGFyX3QpOwojIDE4
MiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5j
bHVkZS9zdGRsaWIuaCIgMyA0CiBleHRlcm4gZG91YmxlIGF0b2YoY29uc3QgY2hhciAqKTsKIGV4
dGVybiBpbnQgYXRvaShjb25zdCBjaGFyICopOwogZXh0ZXJuIGxvbmcgaW50IGF0b2woY29uc3Qg
Y2hhciAqKTsKIGV4dGVybiBkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIgKiwgY2hhciAqICopOwog
ZXh0ZXJuIGxvbmcgaW50IHN0cnRvbChjb25zdCBjaGFyICosIGNoYXIgKiAqLCBpbnQpOwogZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFyICogKiwgaW50
KTsKIGV4dGVybiBpbnQgcmFuZCh2b2lkKTsKIGV4dGVybiB2b2lkIHNyYW5kKHVuc2lnbmVkIGlu
dCk7CiBleHRlcm4gdm9pZCAqY2FsbG9jKHNpemVfdCwgc2l6ZV90KTsKIGV4dGVybiB2b2lkIGZy
ZWUodm9pZCAqKTsKIGV4dGVybiB2b2lkICptYWxsb2Moc2l6ZV90KTsKIGV4dGVybiB2b2lkICpy
ZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKIGV4dGVybiB2b2lkIGFib3J0KHZvaWQpOwogZXh0ZXJu
IGludCBhdGV4aXQodm9pZCAoKikodm9pZCkpOwogZXh0ZXJuIHZvaWQgZXhpdChpbnQpOwogZXh0
ZXJuIGNoYXIgKmdldGVudihjb25zdCBjaGFyICopOwogZXh0ZXJuIGludCBzeXN0ZW0oY29uc3Qg
Y2hhciAqKTsKIGV4dGVybiB2b2lkICpic2VhcmNoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAq
LCBzaXplX3QsIHNpemVfdCwgaW50KCopKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICopKTsKIGV4
dGVybiB2b2lkIHFzb3J0KHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIGludCgqKShjb25zdCB2b2lk
ICosY29uc3Qgdm9pZCAqKSk7CiMgMjExICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIGV4dGVybiBpbnQgYWJz
KGludCk7CiBleHRlcm4gc3RydWN0IGRpdl90IGRpdihpbnQsIGludCk7CiBleHRlcm4gbG9uZyBp
bnQgbGFicyhsb25nIGludCk7CiBleHRlcm4gc3RydWN0IGxkaXZfdCBsZGl2KGxvbmcgaW50LCBs
b25nIGludCk7CiMgMjM1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw
MDMwNDI4L2djYy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N5cy93YWl0LmgiIDEgMyA0
CiMgNTMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2Nj
L2luY2x1ZGUvc3lzL3dhaXQuaCIgMyA0CmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2luY2x1
ZGUvc3lzL3Jlc291cmNlLmgiIDEgMyA0CiMgNTQgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2Uu
aCIgMyA0CmV4dGVybiAiQyIgewoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMyA0
CiMgNTAgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKZXh0ZXJuICJDIiB7CiMgOTAgIi91
c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKc3RydWN0IHRpbWV2YWwgewogdGltZV90IHR2X3Nl
YzsKCiBzdXNlY29uZHNfdCB0dl91c2VjOwoKCgp9OwoKCgoKc3RydWN0IHRpbWV2YWwzMiB7CiAg
ICBpbnQzMl90IHR2X3NlYzsKICAgIGludDMyX3QgdHZfdXNlYzsKfTsKCgoKCgoKc3RydWN0IHRp
bWV2YWw2NCB7CiAgICBpbnQ2NF90IHR2X3NlYzsKICAgIGludDY0X3QgdHZfdXNlYzsKfTsKCgoK
CgoKc3RydWN0IGl0aW1lcnZhbCB7CiBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKIHN0cnVj
dCB0aW1ldmFsIGl0X3ZhbHVlOwp9OwoKCgoKCgoKZXh0ZXJuIGludCBnZXRpdGltZXIoaW50LCBz
dHJ1Y3QgaXRpbWVydmFsICopOwpleHRlcm4gaW50IHNldGl0aW1lcihpbnQsIGNvbnN0IHN0cnVj
dCBpdGltZXJ2YWwgKiwgc3RydWN0IGl0aW1lcnZhbCAqKTsKZXh0ZXJuIGludCBnZXR0aW1lb2Zk
YXkoc3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsKZXh0ZXJuIGludCB1dGltZXMoY29uc3QgY2hh
ciAqLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqKTsKIyAxNTQgIi91c3IvaW5jbHVkZS9zeXMvdGlt
ZS5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QKCmZkX3NldAoKewogICAgICAgIGxvbmcgZmRzX2JpdHNb
KDMyNzY3LyhzaXplb2YobG9uZykgKiA4KSsxKV07Cn0gZmRfc2V0OwojIDE2OSAiL3Vzci9pbmNs
dWRlL3N5cy90aW1lLmgiIDMgNApleHRlcm4gaW50IHNlbGVjdChpbnQsIGZkX3NldCAqLCBmZF9z
ZXQgKiwgZmRfc2V0ICosIHN0cnVjdCB0aW1ldmFsICopOwojIDI3MiAiL3Vzci9pbmNsdWRlL3N5
cy90aW1lLmgiIDMgNApzdHJ1Y3QgdGltZXN0cnVjX3QgewogICAgICAgIHRpbWVfdCB0dl9zZWM7
CiAgICAgICAgc3VzZWNvbmRzX3QgdHZfbnNlYzsKfTsKCgoKCgpzdHJ1Y3QgdGltZXN0cnVjMzJf
dCB7CiAgICBpbnQzMl90IHR2X3NlYzsKICAgIGludDMyX3QgdHZfbnNlYzsKfTsKIyAyOTUgIi91
c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKc3RydWN0IGl0aW1lcnN0cnVjX3QgewogICAgICAg
IHN0cnVjdCB0aW1lc3RydWNfdCBpdF9pbnRlcnZhbDsKICAgICAgICBzdHJ1Y3QgdGltZXN0cnVj
X3QgaXRfdmFsdWU7Cn07CgoKCgoKc3RydWN0IGl0aW1lcnN0cnVjMzJfdCB7CiAgICBzdHJ1Y3Qg
dGltZXN0cnVjMzJfdCBpdF9pbnRlcnZhbDsKICAgIHN0cnVjdCB0aW1lc3RydWMzMl90IGl0X3Zh
bHVlOwp9OwojIDMxOCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAp0eXBlZGVmIHN0cnVj
dCB0aW1lYmFzZXN0cnVjdCB7CiBpbnQgZmxhZzsKIHVuc2lnbmVkIGludCB0Yl9oaWdoOwogdW5z
aWduZWQgaW50IHRiX2xvdzsKIH0gdGltZWJhc2VzdHJ1Y3RfdDsKCmludCByZWFkX3JlYWxfdGlt
ZSh0aW1lYmFzZXN0cnVjdF90ICosIHNpemVfdCk7CmludCB0aW1lX2Jhc2VfdG9fdGltZSh0aW1l
YmFzZXN0cnVjdF90ICosIHNpemVfdCk7CiMgNDUwICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg
MyA0CnN0cnVjdCB0aW1lem9uZSB7CiBpbnQgdHpfbWludXRlc3dlc3Q7CiBpbnQgdHpfZHN0dGlt
ZTsKfTsKIyA0ODIgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKfQojIDU4ICIvdXNyL2lu
Y2x1ZGUvc3lzL3Jlc291cmNlLmgiIDIgMyA0CiMgMTAyICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291
cmNlLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcmxpbV90OwpzdHJ1Y3QgcmxpbWl0IHsK
IHJsaW1fdCBybGltX2N1cjsKIHJsaW1fdCBybGltX21heDsKfTsKCgoKCgp0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgbG9uZyBybGltNjRfdDsKc3RydWN0IHJsaW1pdDY0IHsKIHJsaW02NF90IHJsaW1f
Y3VyOwogcmxpbTY0X3QgcmxpbV9tYXg7Cn07CiMgMTU0ICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291
cmNlLmgiIDMgNApzdHJ1Y3QgcnVzYWdlCnsKIHN0cnVjdCB0aW1ldmFsIHJ1X3V0aW1lOwogc3Ry
dWN0IHRpbWV2YWwgcnVfc3RpbWU7CiBsb25nIHJ1X21heHJzczsKIGxvbmcgcnVfaXhyc3M7CiBs
b25nIHJ1X2lkcnNzOwogbG9uZyBydV9pc3JzczsKIGxvbmcgcnVfbWluZmx0OwogbG9uZyBydV9t
YWpmbHQ7CiBsb25nIHJ1X25zd2FwOwogbG9uZyBydV9pbmJsb2NrOwogbG9uZyBydV9vdWJsb2Nr
OwogbG9uZyBydV9tc2dzbmQ7CiBsb25nIHJ1X21zZ3JjdjsKIGxvbmcgcnVfbnNpZ25hbHM7CiBs
b25nIHJ1X252Y3N3OwogbG9uZyBydV9uaXZjc3c7Cn07CgoKCgoKc3RydWN0IHJ1c2FnZTY0CnsK
IHN0cnVjdCB0aW1ldmFsIHJ1X3V0aW1lOwogc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7CiBsb25n
IGxvbmcgcnVfbWF4cnNzOwogbG9uZyBsb25nIHJ1X2l4cnNzOwogbG9uZyBsb25nIHJ1X2lkcnNz
OwogbG9uZyBsb25nIHJ1X2lzcnNzOwogbG9uZyBsb25nIHJ1X21pbmZsdDsKIGxvbmcgbG9uZyBy
dV9tYWpmbHQ7CiBsb25nIGxvbmcgcnVfbnN3YXA7CiBsb25nIGxvbmcgcnVfaW5ibG9jazsKIGxv
bmcgbG9uZyBydV9vdWJsb2NrOwogbG9uZyBsb25nIHJ1X21zZ3NuZDsKIGxvbmcgbG9uZyBydV9t
c2dyY3Y7CiBsb25nIGxvbmcgcnVfbnNpZ25hbHM7CiBsb25nIGxvbmcgcnVfbnZjc3c7CiBsb25n
IGxvbmcgcnVfbml2Y3N3Owp9OwoKCgoKCnN0cnVjdCB0cnVzYWdlNjQKewogc3RydWN0IHRpbWV2
YWw2NCBydV91dGltZTsKIHN0cnVjdCB0aW1ldmFsNjQgcnVfc3RpbWU7CiBsb25nbG9uZ190IHJ1
X21heHJzczsKIGxvbmdsb25nX3QgcnVfaXhyc3M7CiBsb25nbG9uZ190IHJ1X2lkcnNzOwogbG9u
Z2xvbmdfdCBydV9pc3JzczsKIGxvbmdsb25nX3QgcnVfbWluZmx0OwogbG9uZ2xvbmdfdCBydV9t
YWpmbHQ7CiBsb25nbG9uZ190IHJ1X25zd2FwOwogbG9uZ2xvbmdfdCBydV9pbmJsb2NrOwogbG9u
Z2xvbmdfdCBydV9vdWJsb2NrOwogbG9uZ2xvbmdfdCBydV9tc2dzbmQ7CiBsb25nbG9uZ190IHJ1
X21zZ3JjdjsKIGxvbmdsb25nX3QgcnVfbnNpZ25hbHM7CiBsb25nbG9uZ190IHJ1X252Y3N3Owog
bG9uZ2xvbmdfdCBydV9uaXZjc3c7Cn07CiMgMjQ5ICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNl
LmgiIDMgNApleHRlcm4gaW50IGdldHByaW9yaXR5KGludCwgaWRfdCk7CmV4dGVybiBpbnQgc2V0
cHJpb3JpdHkoaW50LCBpZF90LCBpbnQpOwpleHRlcm4gaW50IGdldHJsaW1pdChpbnQsIHN0cnVj
dCBybGltaXQgKik7CmV4dGVybiBpbnQgc2V0cmxpbWl0KGludCwgY29uc3Qgc3RydWN0IHJsaW1p
dCAqKTsKCgpleHRlcm4gaW50IGdldHJsaW1pdDY0KGludCwgc3RydWN0IHJsaW1pdDY0ICopOwpl
eHRlcm4gaW50IHNldHJsaW1pdDY0KGludCwgY29uc3Qgc3RydWN0IHJsaW1pdDY0ICopOwoKCgoK
CgoKZXh0ZXJuIGludCBnZXRydXNhZ2UoaW50LCBzdHJ1Y3QgcnVzYWdlICopOwoKZXh0ZXJuIGlu
dCBnZXRydXNhZ2U2NChpbnQsIHN0cnVjdCBydXNhZ2U2NCAqKTsKIyAyOTAgIi91c3IvaW5jbHVk
ZS9zeXMvcmVzb3VyY2UuaCIgMyA0Cn0KIyA1OSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zeXMvd2FpdC5oIiAyIDMgNAoKCgojIDEg
Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1
ZGUvc3lzL3NpZ25hbC5oIiAxIDMgNAojIDc3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMyA0CmV4dGVybiAi
QyIgewojIDEwOCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy
OC9nY2MvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMgNApleHRlcm4gdm9pZCAoKnNpZ25hbChpbnQs
IHZvaWQgKCopKGludCkpKShpbnQpOwoKCgoKCgoKZXh0ZXJuIGludCByYWlzZShpbnQpOwoKCnR5
cGVkZWYgaW50IHNpZ19hdG9taWNfdDsKIyAyMzcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKdW5pb24g
c2lndmFsCnsKCgoKICAgICAgICB2b2lkICogc2l2YWxfcHRyOwoKICAgICAgICBpbnQgc2l2YWxf
aW50Owp9OwojIDI1OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz
MDQyOC9nY2MvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCB7CiBpbnQg
c2lfc2lnbm87CiBpbnQgc2lfZXJybm87CiBpbnQgc2lfY29kZTsKIHBpZF90IHNpX3BpZDsKIHVp
ZF90IHNpX3VpZDsKIyAyODYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt
MjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKIHZvaWQgKnNpX2FkZHI7CiBp
bnQgc2lfc3RhdHVzOwoKCiBsb25nIHNpX2JhbmQ7CgoKICAgICAgICB1bmlvbiBzaWd2YWwgc2lf
dmFsdWU7CgoKCgoKCgogICAgICAgIGludCBfX3BhZFs3XTsKCgoKfSBzaWdpbmZvX3Q7CgoKCgoK
CgpzdHJ1Y3Qgc2lnYWN0aW9uIHsKCiAgIHVuaW9uIHsKCgoKCgoKIHZvaWQgKCpfX3N1X2hhbmRs
ZXIpKGludCk7CgoKCiB2b2lkICgqX19zdV9zaWdhY3Rpb24pIChpbnQsIHNpZ2luZm9fdCAqLCB2
b2lkICopOwoKCgogICAgfSBzYV91bmlvbjsKIHNpZ3NldF90IHNhX21hc2s7CiBpbnQgc2FfZmxh
Z3M7Cn07CiMgMzQ5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw
NDI4L2djYy9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9j
b250ZXh0LmgiIDEgMyA0CiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvY29udGV4dC5oIiAzIDQKIyAx
ICIvdXNyL2luY2x1ZGUvc3lzL21fcGFyYW0uaCIgMSAzIDQKIyAyNiAiL3Vzci9pbmNsdWRlL3N5
cy9jb250ZXh0LmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9tc3RzYXZlLmgiIDEgMyA0
CiMgNDcgIi91c3IvaW5jbHVkZS9zeXMvbXN0c2F2ZS5oIiAzIDQKc3RydWN0Cgptc3RzYXZlCgoK
CnsKCiBzdHJ1Y3QgbXN0c2F2ZSAqcHJldjsKIGxhYmVsX3QgKmtqbXBidWY7CiBjaGFyICpzdGFj
a2ZpeDsKIGNoYXIgaW50cHJpOwogY2hhciBiYWNrdDsKIGNoYXIgcnN2ZFsyXTsKIHBpZF90IGN1
cmlkOwoKIGludCBleGNwX3R5cGU7CiB1bG9uZ190IGlhcjsKIHVsb25nX3QgbXNyOwogdWxvbmdf
dCBjcjsKIHVsb25nX3QgbHI7CiB1bG9uZ190IGN0cjsKIHVsb25nX3QgeGVyOwogdWxvbmdfdCBt
cTsKICB1bG9uZ190IHRpZDsKIHVsb25nX3QgZnBzY3I7CiBjaGFyIGZwZXU7CiBjaGFyIGZwaW5m
bzsKIGNoYXIgcGFkWzJdOwoKIHVsb25nX3QgZXhjZXB0WzVdOwogY2hhciBwYWQxWzRdOwogdWxv
bmdfdCBvX2lhcjsKICAgICAgICB1bG9uZ190IG9fdG9jOwogdWxvbmdfdCBvX2FyZzE7CiB1bG9u
Z190IGV4Y2JyYW5jaDsKCgoKIHVsb25nX3QgZnBzY3J4OwogdWxvbmdfdCBvX3ZhZGRyOwogdWxv
bmdfdCBjYWNoZWFsaWduWzddOwogYWRzcGFjZV90IGFzOwogdWxvbmdfdCBncHJbMzJdOwogZG91
YmxlIGZwclszMl07CiMgMTMxICIvdXNyL2luY2x1ZGUvc3lzL21zdHNhdmUuaCIgMyA0Cn07CiMg
MjIwICIvdXNyL2luY2x1ZGUvc3lzL21zdHNhdmUuaCIgMyA0CmV4dGVybiBjaGFyIF9fcG1hcF9z
dGFja1tdOwojIDI3ICIvdXNyL2luY2x1ZGUvc3lzL2NvbnRleHQuaCIgMiAzIDQKCgpleHRlcm4g
IkMiIHsKIyA3MSAiL3Vzci9pbmNsdWRlL3N5cy9jb250ZXh0LmgiIDMgNApzdHJ1Y3QgX19jb250
ZXh0NjQgewogdW5zaWduZWQgbG9uZyBsb25nIGdwclszMl07CiB1bnNpZ25lZCBsb25nIGxvbmcg
bXNyOwogdW5zaWduZWQgbG9uZyBsb25nIGlhcjsKIHVuc2lnbmVkIGxvbmcgbG9uZyBscjsKIHVu
c2lnbmVkIGxvbmcgbG9uZyBjdHI7CiB1bnNpZ25lZCBpbnQgY3I7CiB1bnNpZ25lZCBpbnQgeGVy
OwogdW5zaWduZWQgaW50IGZwc2NyOwogdW5zaWduZWQgaW50IGZwc2NyeDsKICAgICAgICB1bnNp
Z25lZCBsb25nIGxvbmcgZXhjZXB0WzFdOwogZG91YmxlIGZwclszMl07CiBjaGFyIGZwZXU7CiBj
aGFyIGZwaW5mbzsKICAgICAgICBjaGFyIHBhZFsyXTsKICAgICAgICBpbnQgZXhjcF90eXBlOwp9
OwojIDExOSAiL3Vzci9pbmNsdWRlL3N5cy9jb250ZXh0LmgiIDMgNApzdHJ1Y3Qgc2lnY29udGV4
dDY0IHsKIGludCBzY19vbnN0YWNrOwogdW5zaWduZWQgaW50IHNjX21hc2sxOwogdW5zaWduZWQg
aW50IHNjX21hc2syOwogaW50IHNjX3VlcnJvcjsKIHN0cnVjdCBfX2NvbnRleHQ2NCBzY19jb250
ZXh0Owp9OwojIDIxMSAiL3Vzci9pbmNsdWRlL3N5cy9jb250ZXh0LmgiIDMgNApzdHJ1Y3QgX19q
bXBidWYgewoKIHN0cnVjdCBtc3RzYXZlIGptcF9jb250ZXh0OwoKCgp9OwojIDI0NSAiL3Vzci9p
bmNsdWRlL3N5cy9jb250ZXh0LmgiIDMgNApzdHJ1Y3QgX19zaWdjb250ZXh0IHsKCiBpbnQgc2Nf
b25zdGFjazsKIHNpZ3NldF90IHNjX21hc2s7CiBpbnQgc2NfdWVycm9yOwogc3RydWN0IF9fam1w
YnVmIHNjX2ptcGJ1ZjsKCgoKCgoKfTsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKCgoKCiB2b2lk
ICpzc19zcDsKIHNpemVfdCBzc19zaXplOwoKCiBpbnQgc3NfZmxhZ3M7CiBpbnQgX19wYWRbNF07
Cn0gc3RhY2tfdDsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9fam1wYnVmIG1jb250ZXh0X3Q7Cgp0
eXBlZGVmIHN0cnVjdCB1Y29udGV4dF90IHsKIGludCBfX3NjX29uc3RhY2s7CiAgICAgICAgc2ln
c2V0X3QgdWNfc2lnbWFzazsKCiAgICAgICAgaW50IF9fc2NfdWVycm9yOwogbWNvbnRleHRfdCB1
Y19tY29udGV4dDsKCgoKIHN0cnVjdCB1Y29udGV4dF90ICp1Y19saW5rOwoKCiBzdGFja190IHVj
X3N0YWNrOwogaW50IF9fcGFkWzRdOwp9IHVjb250ZXh0X3Q7CgoKfQojIDM1MCAiL2djYy9kamUv
YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zeXMvc2ln
bmFsLmgiIDIgMyA0CgoKCgpzdHJ1Y3Qgc2lnc3RhY2sgewogdm9pZCAqc3Nfc3A7CiBpbnQgc3Nf
b25zdGFjazsKfTsKIyA0MzYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt
MjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKZXh0ZXJuIGludCBzaWdtYXNr
KGludCk7CiMgNTg5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw
NDI4L2djYy9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9t
X3NpZ25hbC5oIiAxIDMgNAojIDU5MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDIgMyA0CiMgNTk5ICIvZ2Nj
L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N5
cy9zaWduYWwuaCIgMyA0CnN0cnVjdCBzaWdldmVudCB7CiB1bmlvbiBzaWd2YWwgc2lnZXZfdmFs
dWU7CiBpbnQgc2lnZXZfc2lnbm87CiBpbnQgc2lnZXZfbm90aWZ5OwoKCgoKIHZvaWQgKCpzaWdl
dl9ub3RpZnlfZnVuY3Rpb24pKHVuaW9uIHNpZ3ZhbCk7CiBwdGhyZWFkX2F0dHJfdCAqIHNpZ2V2
X25vdGlmeV9hdHRyaWJ1dGVzOwoKfTsKIyA2MjcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKc3RydWN0
IG9zaWdldmVudCB7CgoKCiB2b2lkICpzZXZ0X3ZhbHVlOwoKIHNpZ25hbF90IHNldnRfc2lnbm87
Cn07CiMgNzE4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L2djYy9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMyA0CnN0cnVjdCBzaWd2ZWMgewojIDczMCAiL2dj
Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9z
eXMvc2lnbmFsLmgiIDMgNAogICB1bmlvbiB7CgoKCgoKCiB2b2lkICgqc3ZfaGFuZGxlcikoaW50
KTsKCgoKICAgICAgICB2b2lkICgqc3Zfc2lnYWN0aW9uKSAoaW50LCBzaWdpbmZvX3QgKiwgdm9p
ZCAqKTsKICAgfSBzdl91bmlvbjsKIGludCBzdl9tYXNrOwogaW50IHN2X2ZsYWdzOwoKfTsKIyA4
MDQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2lu
Y2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKZXh0ZXJuIGludCBzaWd3YWl0KGNvbnN0IHNpZ3NldF90
ICosIGludCAqKTsKCmV4dGVybiBpbnQgc2lnYmxvY2soaW50KTsKZXh0ZXJuIGludCBzaWdsb2Nh
bG1hc2soaW50LCBjb25zdCBzaWdzZXRfdCAqKTsKZXh0ZXJuIGludCBzaWd2ZWMoaW50LCBzdHJ1
Y3Qgc2lndmVjICosIHN0cnVjdCBzaWd2ZWMgKik7CgoKCgoKCgpleHRlcm4gaW50IHNpZ2dldG1h
c2sodm9pZCk7CmV4dGVybiBpbnQgc2lnc2V0bWFzayhpbnQpOwojIDg1NiAiL2djYy9kamUvYnVp
bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zeXMvc2lnbmFs
LmgiIDMgNApleHRlcm4gaW50IGtpbGwocGlkX3QsIGludCk7CmV4dGVybiBpbnQgc2lncHJvY21h
c2soaW50LCBjb25zdCBzaWdzZXRfdCAqLCBzaWdzZXRfdCAqKTsKZXh0ZXJuIGludCBzaWdzdXNw
ZW5kKGNvbnN0IHNpZ3NldF90ICopOwoKZXh0ZXJuIGludCBzaWdhY3Rpb24oaW50LCBjb25zdCBz
dHJ1Y3Qgc2lnYWN0aW9uICosIHN0cnVjdCBzaWdhY3Rpb24gKik7CgpleHRlcm4gaW50IHNpZ2Vt
cHR5c2V0KHNpZ3NldF90ICopOwpleHRlcm4gaW50IHNpZ2ZpbGxzZXQoc2lnc2V0X3QgKik7CmV4
dGVybiBpbnQgc2lnYWRkc2V0KHNpZ3NldF90ICosIGludCk7CmV4dGVybiBpbnQgc2lnZGVsc2V0
KHNpZ3NldF90ICosIGludCk7CmV4dGVybiBpbnQgc2lnaXNtZW1iZXIoY29uc3Qgc2lnc2V0X3Qg
KiwgaW50KTsKZXh0ZXJuIGludCBzaWdwZW5kaW5nKHNpZ3NldF90ICopOwoKCmV4dGVybiB2b2lk
ICgqYnNkX3NpZ25hbCAoaW50LCB2b2lkICgqKShpbnQpKSkoaW50KTsKZXh0ZXJuIGludCBraWxs
cGcocGlkX3QsIGludCk7CmV4dGVybiBpbnQgc2lnaG9sZChpbnQpOwpleHRlcm4gaW50IHNpZ2ln
bm9yZShpbnQpOwpleHRlcm4gaW50IHNpZ2ludGVycnVwdChpbnQsIGludCk7CmV4dGVybiBpbnQg
c2lncGF1c2UoaW50KTsKZXh0ZXJuIGludCBzaWdyZWxzZShpbnQpOwpleHRlcm4gdm9pZCAoKnNp
Z3NldChpbnQsIHZvaWQoKikoaW50KSkpKGludCk7CgpleHRlcm4gaW50IHNpZ2FsdHN0YWNrKGNv
bnN0IHN0YWNrX3QgKiwgc3RhY2tfdCAqKTsKZXh0ZXJuIGludCBzaWdzdGFjayhzdHJ1Y3Qgc2ln
c3RhY2sgKiwgc3RydWN0IHNpZ3N0YWNrICopOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbChw
dGhyZWFkX3QsIGludCk7CmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrKGludCwgY29uc3Qgc2ln
c2V0X3QgKiwgc2lnc2V0X3QgKik7CmV4dGVybiBpbnQgc2lncXVldWUocGlkX3QsIGludCwgY29u
c3QgdW5pb24gc2lndmFsKTsKc3RydWN0IHRpbWVzcGVjOwpleHRlcm4gaW50IHNpZ3RpbWVkd2Fp
dChjb25zdCBzaWdzZXRfdCAqLCBzaWdpbmZvX3QgKiwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICop
OwpleHRlcm4gaW50IHNpZ3dhaXRpbmZvKGNvbnN0IHNpZ3NldF90ICosIHNpZ2luZm9fdCAqKTsK
IyA5MTMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2Nj
L2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKfQojIDYzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0CiMg
MTQxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9p
bmNsdWRlL3N5cy93YWl0LmgiIDMgNAp0eXBlZGVmIGVudW0ge1BfQUxMLCBQX1BJRCwgUF9QR0lE
fSBpZHR5cGVfdDsKIyAxNTkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt
MjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3dhaXQuaCIgMyA0CmV4dGVybiBwaWRfdCB3YWl0KGlu
dCAqKTsKCmV4dGVybiBwaWRfdCB3YWl0cGlkKHBpZF90LCBpbnQgKiwgaW50KTsKIyAxNzMgIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUv
c3lzL3dhaXQuaCIgMyA0CmV4dGVybiBpbnQgd2FpdGlkKGlkdHlwZV90LCBpZF90LCBzaWdpbmZv
X3QgKiwgaW50KTsKCgoKZXh0ZXJuIHBpZF90IHdhaXQzKGludCAqLCBpbnQsIHN0cnVjdCBydXNh
Z2UgKik7CgoKCmV4dGVybiBwaWRfdCBrd2FpdHBpZChpbnQgKiwgcGlkX3QsIGludCwgc3RydWN0
IHJ1c2FnZSAqLCBzaWdpbmZvX3QgKik7CgpleHRlcm4gcGlkX3Qga3dhaXRwaWQ2NChpbnQgKiwg
cGlkX3QsIGludCwgc3RydWN0IHJ1c2FnZTY0ICosIHNpZ2luZm9fdCAqKTsKCgoKZXh0ZXJuIHBp
ZF90IHdhaXQzNjQoaW50ICosIGludCwgc3RydWN0IHJ1c2FnZTY0ICopOwojIDIwMSAiL2djYy9k
amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zeXMv
d2FpdC5oIiAzIDQKZXh0ZXJuIHBpZF90IHdhaXQ0KHBpZF90LCBpbnQgKiwgaW50LCBzdHJ1Y3Qg
cnVzYWdlICopOwojIDIyMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y
MDAzMDQyOC9nY2MvaW5jbHVkZS9zeXMvd2FpdC5oIiAzIDQKfQojIDIzNiAiL2djYy9kamUvYnVp
bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdGRsaWIuaCIg
MiAzIDQKIyAzMDggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0
MjgvZ2NjL2luY2x1ZGUvc3RkbGliLmgiIDMgNAogZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4KHZvaWQp
OwogZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4KHVuc2lnbmVkIHNob3J0W10pOwogZXh0ZXJuIGxvbmcg
anJhbmQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsKIGV4dGVybiB2b2lkIGxjb25nNDgodW5zaWduZWQg
c2hvcnQgaW50ICopOwogZXh0ZXJuIGxvbmcgbHJhbmQ0OCh2b2lkKTsKIGV4dGVybiBsb25nIG1y
YW5kNDgodm9pZCk7CiBleHRlcm4gbG9uZyBucmFuZDQ4KHVuc2lnbmVkIHNob3J0W10pOwogZXh0
ZXJuIHVuc2lnbmVkIHNob3J0ICpzZWVkNDgodW5zaWduZWQgc2hvcnRbXSk7CiBleHRlcm4gdm9p
ZCBzZXRrZXkoY29uc3QgY2hhciAqKTsKIGV4dGVybiB2b2lkIHNyYW5kNDgobG9uZyk7CgogZXh0
ZXJuIGludCBwdXRlbnYoY2hhciAqKTsKIyAzMzcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RkbGliLmgiIDMgNAogZXh0ZXJuIGlu
dCByYW5kX3IodW5zaWduZWQgaW50ICopOwojIDM2MSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CiBleHRlcm4g
bG9uZyBhNjRsKGNvbnN0IGNoYXIgKik7CiBleHRlcm4gY2hhciAqZWN2dChkb3VibGUsIGludCwg
aW50ICosIGludCAqKTsKIGV4dGVybiBjaGFyICpmY3Z0KGRvdWJsZSwgaW50LCBpbnQgKiwgaW50
ICopOwogZXh0ZXJuIGNoYXIgKmdjdnQoZG91YmxlLCBpbnQsIGNoYXIgKik7CiBleHRlcm4gaW50
IGdldHN1Ym9wdChjaGFyICoqLCBjaGFyICpjb25zdCAqLCBjaGFyICoqKTsKIGV4dGVybiBpbnQg
Z3JhbnRwdChpbnQpOwogZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSh1bnNpZ25lZCwgY2hhciAqLCBz
aXplX3QpOwogZXh0ZXJuIGNoYXIgKmw2NGEobG9uZyk7CiBleHRlcm4gY2hhciAqbWt0ZW1wKGNo
YXIgKik7CiBleHRlcm4gaW50IG1rc3RlbXAoY2hhciAqKTsKIGV4dGVybiBjaGFyICpwdHNuYW1l
KGludCk7CiBleHRlcm4gbG9uZyByYW5kb20odm9pZCk7CiBleHRlcm4gY2hhciAqcmVhbHBhdGgo
Y29uc3QgY2hhciAqLCBjaGFyICopOwogZXh0ZXJuIGNoYXIgKnNldHN0YXRlKGNvbnN0IGNoYXIg
Kik7CiBleHRlcm4gdm9pZCBzcmFuZG9tKHVuc2lnbmVkKTsKIGV4dGVybiBpbnQgdW5sb2NrcHQo
aW50KTsKIGV4dGVybiBpbnQgdHR5c2xvdCh2b2lkKTsKIGV4dGVybiB2b2lkICp2YWxsb2Moc2l6
ZV90KTsKIyA0NjQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0
MjgvZ2NjL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqb3B0YXJnOwpleHRlcm4g
aW50IG9wdGluZDsKZXh0ZXJuIGludCBvcHRlcnI7CiMgNDgyICIvZ2NjL2RqZS9idWlsZC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIGV4
dGVybiBmbG9hdCBhdG9mZihjaGFyICopOwogZXh0ZXJuIGZsb2F0IHN0cnRvZihjb25zdCBjaGFy
ICosIGNoYXIgKiopOwogZXh0ZXJuIGludCBzZXRlbnYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICosIGludCk7CiBleHRlcm4gdm9pZCBpbXVsX2RibChsb25nLCBsb25nLCBsb25nICopOwogZXh0
ZXJuIHZvaWQgdW11bF9kYmwodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg
bG9uZyAqKTsKIGV4dGVybiBpbnQgb25fZXhpdCh2b2lkICgqKShpbnQsIHZvaWQgKiksIHZvaWQg
Kik7CiMgNTA4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L2djYy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIGV4dGVybiBkb3VibGUgd2NzdG9kKGNvbnN0IHdj
aGFyX3QgKiwgd2NoYXJfdCAqKik7CiBleHRlcm4gbG9uZyBpbnQgd2NzdG9sKGNvbnN0IHdjaGFy
X3QgKiwgd2NoYXJfdCAqKiwgaW50KTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3Vs
KGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKiwgaW50KTsKCiBleHRlcm4gaW50IHJwbWF0Y2go
Y29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgY2xlYXJlbnYodm9pZCk7CiBleHRlcm4gaW50IGdl
dG9wdChpbnQsIGNoYXIqIGNvbnN0KiwgY29uc3QgY2hhciopOwogZXh0ZXJuIGNoYXIgKmdldHBh
c3MoY29uc3QgY2hhciAqKTsKIyA1MzUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RkbGliLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBs
bGRpdl90IHsKICAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICAgbG9uZyBsb25nIGludCByZW0g
Owp9IGxsZGl2X3Q7CiMgNTQ5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
LTIwMDMwNDI4L2djYy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGxvbmcgbG9uZyBpbnQg
bGxhYnMoIGxvbmcgbG9uZyBpbnQgKTsKZXh0ZXJuIGxsZGl2X3QgbGxkaXYoIGxvbmcgbG9uZyBp
bnQsIGxvbmcgbG9uZyBpbnQgKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCgKICAgICBj
b25zdCBjaGFyICosCiAgICAgY2hhciAqKiwKICAgICBpbnQgKTsKZXh0ZXJuIHVuc2lnbmVkIGxv
bmcgbG9uZyBpbnQgc3RydG91bGwoCiAgICAgY29uc3QgY2hhciAqLAogICAgIGNoYXIgKiosCiAg
ICAgaW50ICk7CiMgNTY5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw
MDMwNDI4L2djYy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKfQojIDUzICIvZ2NjL2RqZS9idWlsZC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli
c3RkYysrLXYzL2luY2x1ZGUvY3N0ZGxpYiIgMiAzCiMgODQgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9jc3RkbGliIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6ZGl2X3Q7
CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNpbmcgOjphYnM7CiAgdXNp
bmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRvaTsKICB1c2luZyA6OmF0
b2w7CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwogIHVzaW5nIDo6ZGl2Owog
IHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpnZXRlbnY7CiAgdXNpbmcg
OjpsYWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsKICB1c2luZyA6Om1ibGVu
OwogIHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAgdXNpbmcgOjpxc29ydDsK
ICB1c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5nIDo6c3JhbmQ7CiAgdXNp
bmcgOjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpzdHJ0b3VsOwogIHVzaW5n
IDo6c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3Y3RvbWI7CgogIGlubGlu
ZSBsb25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0KCiAgaW5saW5lIGxk
aXZfdAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2opOyB9
Cn0KIyA2OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDIgMwoKIyAxICIvZ2NjL2RqZS9zcmMvbGlic3RkYysrLXYzL2xpYnN1cGMrKy9uZXci
IDEgMwojIDQ0ICIvZ2NjL2RqZS9zcmMvbGlic3RkYysrLXYzL2xpYnN1cGMrKy9uZXciIDMKZXh0
ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCgoKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVi
bGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQoK
CiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93
X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5cGVkZWYgdm9p
ZCAoKm5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hh
bmRsZXIpIHRocm93KCk7Cn0KIyA4MiAiL2djYy9kamUvc3JjL2xpYnN0ZGMrKy12My9saWJzdXBj
KysvbmV3IiAzCnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFk
X2FsbG9jKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJh
ZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB0aHJvdygpOwp2b2lkIG9wZXJh
dG9yIGRlbGV0ZVtdKHZvaWQqKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXpl
X3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3W10o
c3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRv
ciBkZWxldGUodm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVy
YXRvciBkZWxldGVbXSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlu
bGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7
IHJldHVybiBfX3A7IH0KaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2
b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9CgoKaW5saW5lIHZvaWQgb3BlcmF0b3Ig
ZGVsZXRlICh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9CmlubGluZSB2b2lkIG9wZXJhdG9yIGRl
bGV0ZVtdKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH0KCn0KIyA3MCAiL2djYy9kamUvYnVpbGQv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp
YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvZ2NjL2Rq
ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfcGFpci5oIiAxIDMKIyA2NCAiL2dj
Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX3BhaXIuaCIgMwpuYW1lc3Bh
Y2Ugc3RkCnsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsK
ICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBf
VDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKCgoKCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkg
e30KCgoKCiAgcGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19h
KSwgc2Vjb25kKF9fYikge30KCgogIHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KICBw
YWlyKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25k
KF9fcC5zZWNvbmQpIHt9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8
X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3gu
c2Vjb25kID09IF9feS5zZWNvbmQ7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+
CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBw
YWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAog
ICAgICAgICAoIShfX3kuZmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vj
b25kKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYg
X195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj
bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194
LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKCnRl
bXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25z
dCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0
dXJuICEoX195IDwgX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWly
PF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQojIDE0MCAiL2djYy9k
amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX3BhaXIuaCIgMwp0ZW1wbGF0ZSA8
Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihf
VDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsK
fQoKfQojIDcyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y
MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv
dHlwZV90cmFpdHMuaCIgMSAzCiMgNTMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk
ZS9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKIyA5MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p
bmNsdWRlL2JpdHMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1Y3QgX190cnVlX3R5cGUge307CnN0cnVj
dCBfX2ZhbHNlX3R5cGUge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3Ry
YWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9m
aXJzdDsKIyAxMTMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0
MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3R5cGVf
dHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBj
aGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90
cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90
eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBp
bnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
YWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w
bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9u
Zz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19p
bnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy
YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxz
aWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVl
X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJf
dD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1
Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz
X2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs
Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl
cjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3Igewog
ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVzcGFjZSBfX2dudV9jeHgK
ewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xh
c3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw
ZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3I8IF9fZ251X2N4eDo6
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiA+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDczICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu
Y2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMr
Ky12My9pbmNsdWRlL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNjggIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5
cGVzLmgiIDMKCm5hbWVzcGFjZSBzdGQKewojIDgwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz
L2luY2x1ZGUvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCiAgc3RydWN0IGlucHV0
X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IG91dHB1dF9pdGVyYXRvcl90YWcge307CgogIHN0
cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307
CgogIHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBmb3J3YXJkX2l0
ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIDogcHVi
bGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwojIDEwMiAiL2djYy9kamUvYnVpbGQv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp
YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DYXRlZ29yeSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRGlzdGFu
Y2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICAgdHlwZW5hbWUgX1BvaW50ZXIgPSBfVHAqLCB0eXBl
bmFtZSBfUmVmZXJlbmNlID0gX1RwJj4KICAgIHN0cnVjdCBpdGVyYXRvcgogICAgewoKICAgICAg
dHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgICB0eXBlZGVmIF9UcCB2
YWx1ZV90eXBlOwoKICAgICAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwoKICAg
ICAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwoKICAgICAgdHlwZWRlZiBfUmVmZXJlbmNlIHJl
ZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAg
IHN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRv
cjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogICAg
ICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
ICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm
ZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIF9U
cCYgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0
IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vz
c19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVl
X3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlw
ZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVu
Y2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgIGlubGluZSB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX19p
dGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCiAgICB7IHJldHVybiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpOyB9Cgp9CiMgNzQgIi9nY2Mv
ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAx
ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfaXRlcmF0b3JfYmFz
ZV9mdW5jcy5oIiAxIDMKIyA2OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Jp
dHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzkgIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwojIDY5ICIvZ2Nj
L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5j
cy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJh
dG9yPgogICAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46
OmRpZmZlcmVuY2VfdHlwZQogICAgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykK
ICAgIHsKCiAgICAgCgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0
b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KSB7CiAgICAgICAgKytfX2ZpcnN0OyArK19fbjsKICAgICAgfQogICAgICByZXR1cm4gX19u
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBp
bmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZQogICAgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgcmFuZG9tX2Fj
Y2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAogICAgICByZXR1cm4gX19sYXN0IC0gX19m
aXJzdDsKICAgIH0KIyAxMDkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt
MjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRz
L3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyYXRvcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0
b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAgICAgIHJldHVybiBfX2Rpc3RhbmNlKF9f
Zmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlubGlu
ZSB2b2lkCiAgICBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1
dF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAogICAgICB3aGlsZSAoX19uLS0pICsrX19pOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFt
ZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFs
SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19uID4gMCkKICAgICAgICB3
aGlsZSAoX19uLS0pICsrX19pOwogICAgICBlbHNlCiAgICAgICAgd2hpbGUgKF9fbisrKSAtLV9f
aTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBl
bmFtZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9SYW5kb21BY2Nl
c3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAgIHJhbmRvbV9hY2Nl
c3NfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKICAgICAgX19pICs9IF9fbjsKICAgIH0KIyAx
NjIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9pdGVyYXRvcl9i
YXNlX2Z1bmNzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5h
bWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIHZvaWQKICAgIGFkdmFuY2UoX0lucHV0SXRlcmF0b3Im
IF9faSwgX0Rpc3RhbmNlIF9fbikKICAgIHsKCiAgICAgIF9fYWR2YW5jZShfX2ksIF9fbiwgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKICAgIH0KfQojIDc1ICIvZ2NjL2RqZS9idWlsZC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk
YysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2djYy9kamUvYnVp
bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
L2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDY4ICIvZ2Nj
L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1l
c3BhY2Ugc3RkCnsKIyA4OSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y
MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv
c3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBjbGFz
cyByZXZlcnNlX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAg
ICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBjdXJyZW50OwoKICAgIHB1YmxpYzoK
ICAgICAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAg
ICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyIHBvaW50ZXI7Cgog
ICAgcHVibGljOgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yKCkgeyB9CgoKCgogICAgICBleHBs
aWNpdAogICAgICByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQo
X194KSB7IH0KCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRv
ciYgX194KQogICAgICA6IGN1cnJlbnQoX194LmN1cnJlbnQpIHsgfQoKCgoKCiAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICAgIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJz
ZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKIDogY3VycmVudChfX3guYmFzZSgpKSB7IH0KCgoKCiAg
ICAgIGl0ZXJhdG9yX3R5cGUKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0K
CgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsKIF9J
dGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiByZXR1cm4gKi0tX190bXA7CiAgICAgIH0KCgoKCgoK
ICAgICAgcG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRv
ciooKSk7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygp
CiAgICAgIHsKIC0tY3VycmVudDsKIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICBy
ZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiByZXZlcnNlX2l0
ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAtLWN1cnJlbnQ7CiByZXR1cm4gX190bXA7CiAgICAgIH0K
CgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgpCiAgICAgIHsK
ICsrY3VycmVudDsKIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0
ZXJhdG9yIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0g
KnRoaXM7CiArK2N1cnJlbnQ7CiByZXR1cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2
ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QK
ICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50IC0gX19uKTsgfQoKCgoKCgog
ICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBf
X24pCiAgICAgIHsKIGN1cnJlbnQgLT0gX19uOwogcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoK
CiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBf
X24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCArIF9fbik7
IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItPShkaWZmZXJl
bmNlX3R5cGUgX19uKQogICAgICB7CiBjdXJyZW50ICs9IF9fbjsKIHJldHVybiAqdGhpczsKICAg
ICAgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5
cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsgfQogICAgfTsKIyAyNjkgIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
PT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgY29uc3Qg
cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3guYmFzZSgp
ID09IF9feS5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feCwKICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAg
eyByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3Qg
cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICBjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShj
b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICBjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+
PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICBjb25zdCBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX194IDwgX195
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgdHlwZW5hbWUg
cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgIG9wZXJhdG9y
LShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgIGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSAt
IF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5l
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgogICAgb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgIGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KQogICAgeyByZXR1cm4gcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOyB9CiMgMzI5ICIvZ2NjL2RqZS9i
dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRvcgogICAg
OiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwg
dm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoK
ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgog
ICAgICBleHBsaWNpdAogICAgICBiYWNrX2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gp
IDogY29udGFpbmVyKCZfX3gpIHsgfQojIDM1NSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p
bmNsdWRlL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3Im
CiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192
YWx1ZSkKICAgICAgewogY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiByZXR1cm4gKnRo
aXM7CiAgICAgIH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Iq
KCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAg
b3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0
b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDM4NiAi
L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgaW5saW5lIGJhY2tfaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+CiAgICBiYWNrX2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAg
IHsgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7IH0KIyA0MDEg
Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9pdGVyYXRvci5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9p
dGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwg
dm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciog
Y29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWlu
ZXJfdHlwZTsKCgogICAgICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5l
ciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyA0MjYgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGZyb250X2luc2VydF9p
dGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVy
ZW5jZSBfX3ZhbHVlKQogICAgICB7CiBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CiBy
ZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAg
IG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBmcm9udF9p
bnNlcnRfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAg
ICB9OwojIDQ1NyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy
OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2l0
ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgaW5saW5lIGZy
b250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgZnJvbnRfaW5zZXJ0ZXIoX0NvbnRh
aW5lciYgX194KQogICAgeyByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
KF9feCk7IH0KIyA0NzYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw
MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0
bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNz
IGluc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3Rh
Zywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0Nv
bnRhaW5lciogY29udGFpbmVyOwogICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBp
dGVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlw
ZTsKCgoKCgogICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBf
Q29udGFpbmVyOjppdGVyYXRvciBfX2kpCiAgICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9f
aSkge30KIyA1MTggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0
MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9p
dGVyYXRvci5oIiAzCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KGNvbnN0
IHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiBp
dGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CiArK2l0ZXI7CiByZXR1cm4g
KnRoaXM7CiAgICAgIH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigp
IHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRv
cisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9w
ZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA1NTAgIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NvbnRhaW5lciwgdHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGluc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRl
cmF0b3IgX19pKQogICAgewogICAgICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
KF9feCwKICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IoX19pKSk7CiAgICB9Cn0K
Cm5hbWVzcGFjZSBfX2dudV9jeHgKewoKCgoKCgoKICB1c2luZyBzdGQ6Oml0ZXJhdG9yX3RyYWl0
czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9yOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwg
dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIDog
cHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVy
YXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpw
b2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0
b3IgX01fY3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAg
IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAgICAgX19ub3Jt
YWxfaXRlcmF0b3IoKSA6IF9NX2N1cnJlbnQoX0l0ZXJhdG9yKCkpIHsgfQoKICAgICAgZXhwbGlj
aXQKICAgICAgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpIDogX01fY3Vy
cmVudChfX2kpIHsgfQoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICBpbmxp
bmUgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXIsIF9Db250
YWluZXI+JiBfX2kpCiA6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkgeyB9CgoKICAgICAgcmVmZXJl
bmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CgogICAg
ICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9
CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgKytfTV9jdXJy
ZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJh
dG9yKysoaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoK
ICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKSB7IC0tX01fY3VycmVu
dDsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRv
ci0tKGludCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudC0tKTsgfQoKCiAg
ICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19u
KSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyZW50W19fbl07IH0KCiAgICAgIF9fbm9ybWFs
X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQog
ICAgICB7IF9NX2N1cnJlbnQgKz0gX19uOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFs
X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29u
c3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCArIF9fbik7IH0K
CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVu
Y2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJlbnQgLT0gX19uOyByZXR1cm4gKnRoaXM7IH0K
CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNl
X3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3Vy
cmVudCAtIF9fbik7IH0KCiAgICAgIGNvbnN0IF9JdGVyYXRvciYKICAgICAgYmFzZSgpIGNvbnN0
IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KICAgIH07CiMgNjUxICIvZ2NjL2RqZS9idWlsZC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk
YysrLXYzL2luY2x1ZGUvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAg
aW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBf
X3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBf
Q29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9f
bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJu
IF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0
ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxp
bmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwg
X0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhz
LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250
YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y
PF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3Jt
YWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19s
aHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh
dG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUg
Ym9vbAogIG9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29u
dGFpbmVyPiYgX19saHMsCiAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwg
X0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2Uo
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+
CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNl
KCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlw
ZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9w
ZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYg
X19saHMsCiAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5l
cj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhzLmJhc2UoKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5l
IGJvb2wKICBvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u
dGFpbmVyPiYgX19saHMsCiAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf
Q29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIs
IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjw9KGNvbnN0IF9f
bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsg
cmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0
b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xo
cywKICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYg
X19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBf
Q29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgIGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xo
cy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv
ciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgIGNv
bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsg
cmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWlu
ZXI+CiAgaW5saW5lIHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250
YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICBjb25zdCBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMu
YmFzZSgpIC0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwg
dHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
LCBfQ29udGFpbmVyPgogIG9wZXJhdG9yKyh0eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgIGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9faSkKICB7IHJldHVybiBfX25v
cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9
Cn0KIyA3NiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewojIDkxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr
LXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9G
b3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBpbmxpbmUgdm9pZAogICAg
aXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikKICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVl
X3R5cGUgX1ZhbHVlVHlwZTE7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOwoKCiAgICAgCiAgICAgCiAg
ICAgCiAgICAgCgogICAgICBfVmFsdWVUeXBlMSBfX3RtcCA9ICpfX2E7CiAgICAgICpfX2EgPSAq
X19iOwogICAgICAqX19iID0gX190bXA7CiAgICB9CiMgMTE4ICIvZ2NjL2RqZS9idWlsZC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk
YysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikKICAgIHsK
CiAgICAgCgogICAgICBfVHAgX190bXAgPSBfX2E7CiAgICAgIF9fYSA9IF9fYjsKICAgICAgX19i
ID0gX190bXA7CiAgICB9CiMgMTQ2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu
My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGlu
ZSBjb25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAg
ewoKICAgICAKCiAgICAgIGlmIChfX2IgPCBfX2EpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAg
ICB9CiMgMTY2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb25zdCBfVHAm
CiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAgewoKICAgICAKCiAg
ICAgIGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMTg2ICIv
Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29u
c3QgX1RwJgogICAgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUg
X19jb21wKQogICAgewoKICAgICAgaWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJl
dHVybiBfX2E7CiAgICB9CiMgMjA0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu
My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg
X0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19hLCBj
b25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAgaWYgKF9fY29tcChf
X2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMjIxICIvZ2NjL2RqZS9i
dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9P
dXRwdXRJdGVyCiAgICBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwKICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAg
ewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3Qp
CiAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+
CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weShfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwK
ICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZQog
ICAgICAgICAgX0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBf
X2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiArK19fZmly
c3Q7CiArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV90cml2aWFs
KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAg
ICB7CiAgICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFz
dCAtIF9fZmlyc3QpKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3Qp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0
SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxz
ZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9f
aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBf
X2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogIF9PdXRw
dXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X2F1eDIoX1Rw
KiBfX2ZpcnN0LCBfVHAqIF9fbGFzdCwKICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAg
IHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2NvcHlfYXV4Mihj
b25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LAogIF9UcCogX19yZXN1bHQsIF9f
dHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091
dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTIoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVu
dF9vcGVyYXRvcgogICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9PdXRwdXRJdGVyKF9fY29weV9h
dXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fcmVzdWx0LmJhc2UoKSwKICAgICAgICAgX1RyaXZpYWwoKSkpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBf
T3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1
ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw
ZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAg
ICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICBfVHJpdmlhbCgpKTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+
CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVl
X3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxf
T3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfbmkyKF9f
Zmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgog
ICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2Vf
dHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9P
dXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19m
aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiMgMzM5ICIvZ2NjL2Rq
ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5l
IF9PdXRwdXRJdGVyCiAgICBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+OjpfTm9ybWFsIF9f
Tm9ybWFsOwogICAgICAgcmV0dXJuIF9fY29weV9uaTEoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCwgX19Ob3JtYWwoKSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlv
bmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAgICBpbmxpbmUgX0JpZGly
ZWN0aW9uYWxJdGVyMgogICAgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19m
aXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
cjIgX19yZXN1bHQsCiAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewogICAg
ICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xh
c3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGluZSBf
QmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX3Jlc3VsdCwKICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAg
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSBfX247CiAgICAgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1f
X24pCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3Vs
dDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwg
dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQm9vbFR5
cGU+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCiAgICB7CiAgICAgIHN0YXRp
YyBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2Zp
cnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIg
X19yZXN1bHQpCiAgICAgIHsKICAgICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkKF9fZmlyc3Qs
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAq
LCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBf
VHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiBj
b25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiBtZW1tb3ZlKF9fcmVzdWx0
IC0gX051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsKIHJldHVybiBfX3Jlc3VsdCAt
IF9OdW07CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVj
dCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+
CiAgICB7CiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBj
b25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgewogcmV0dXJuIF9fY29weV9i
YWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgOjpjb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2Fy
ZF9hdXgoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgIDo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvciBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkx
LCBfQkkyLCBfVHJpdmlhbD4KICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsK
ICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxp
bmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBf
X2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkK
ICAgIHsgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f
cmVzdWx0LmJhc2UoKSkpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBf
QkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0
ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgX0JJMiBfX3Jlc3VsdCwg
X19mYWxzZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUg
X0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0
ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICBfQkkyIF9fcmVzdWx0LCBf
X3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJh
dG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJk
X291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAg
ICAgICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2Fy
ZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAg
IF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1
cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCwKICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDQ3NyAiL2djYy9kamUv
YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu
My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBjb3B5
X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxf
aXRlcmF0b3I8X0JJMT46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFj
a3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAg
ICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDUwOSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12
My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y
d2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIGZpbGwoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAg
ICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAqX19maXJz
dCA9IF9fdmFsdWU7CiAgICB9CiMgNTMxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1
ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVy
LCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZpbGxf
bihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKICAg
IHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAqX19m
aXJzdCA9IF9fdmFsdWU7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgogIGlubGluZSB2
b2lkCiAgZmlsbCh1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFyKiBfX2xhc3Qs
IGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKICB7CiAgICB1bnNpZ25lZCBjaGFyIF9fdG1wID0g
X19jOwogICAgbWVtc2V0KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9Cgog
IGlubGluZSB2b2lkCiAgZmlsbChzaWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9f
bGFzdCwgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykKICB7CiAgICBzaWduZWQgY2hhciBfX3RtcCA9
IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3Rt
cCksIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKGNoYXIqIF9f
Zmlyc3QsIGNoYXIqIF9fbGFzdCwgY29uc3QgY2hhciYgX19jKQogIHsKICAgIGNoYXIgX190bXAg
PSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190
bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgog
ICAgaW5saW5lIHVuc2lnbmVkIGNoYXIqCiAgICBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJz
dCwgX1NpemUgX19uLCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwo
X19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIHNpZ25lZCBjaGFy
KgogICAgZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3Qgc2lnbmVkIGNoYXIm
IF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAg
ICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+
CiAgICBpbmxpbmUgY2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNv
bnN0IGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBf
X2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KIyA2MDYgIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgcGFpcjxfSW5w
dXRJdGVyMSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7Cgog
ICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiAqX19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiArK19fZmlyc3QxOwogKytfX2ZpcnN0MjsK
ICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmly
c3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjQwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu
Y2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0
ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAg
IHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LAogICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAg
IAoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19m
aXJzdDEsICpfX2ZpcnN0MikpIHsKICsrX19maXJzdDE7CiArK19fZmlyc3QyOwogICAgICB9CiAg
ICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmly
c3QyKTsKICAgIH0KIyA2NjggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt
MjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVu
YW1lIF9JbnB1dEl0ZXIyPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAg
IHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0
MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKIGlmICghKCpfX2ZpcnN0MSA9PSAqX19maXJzdDIp
KQogICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQojIDY5OSAiL2djYy9k
amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l
IF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAog
ICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAg
ICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQog
aWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgcmV0dXJuIGZhbHNl
OwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA3MzIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst
djMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgYm9vbAogICAgbGV4aWNvZ3JhcGhp
Y2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKICAgIHsKCiAg
ICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7
CiBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICByZXR1cm4gdHJ1ZTsKIGlmICgqX19maXJz
dDIgPCAqX19maXJzdDEpCiAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gX19m
aXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAgfQojIDc2NyAiL2dj
Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0
SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICBfSW5wdXRJdGVyMiBf
X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAg
IHsKCiAgICAgCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m
aXJzdDIgIT0gX19sYXN0MgogICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogaWYgKF9f
Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgIHJldHVybiB0cnVlOwogaWYgKF9fY29tcCgq
X19maXJzdDIsICpfX2ZpcnN0MSkpCiAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1
cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAgfQoKICBp
bmxpbmUgYm9vbAogIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIq
IF9fZmlyc3QxLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIF9fZmlyc3QyLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQogIHsKICAg
IGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgICBjb25zdCBzaXpl
X3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogICAgY29uc3QgaW50IF9fcmVzdWx0ID0g
bWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0Miwgc3RkOjptaW4oX19sZW4xLCBfX2xlbjIpKTsKICAg
IHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOwog
IH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCBjaGFyKiBf
X2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0Miwg
Y29uc3QgY2hhciogX19sYXN0MikKICB7CgoKCgoKCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmUoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgIChjb25zdCB1
bnNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyKikgX19m
aXJzdDIsCiAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopIF9fbGFzdDIpOwoKICB9Cgp9CiMg
NTUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9tZW1vcnkiIDIgMwojIDEgIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA4
NCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsbG9jLmgiIDMK
IyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9mdW5jdGV4Y2VwdC5o
IiAxIDMKIyAzNiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy
OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvZnVuY3Rl
eGNlcHQuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlv
bih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBf
X3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQp
OwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
bGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9y
YW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAg
dm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDg1ICIvZ2Nj
L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAi
L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAz
CiMgNTQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF90aHJlYWRz
LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIHN0cnVjdCBfUmVmY291bnRfQmFzZQogIHsKCiAg
ICB0eXBlZGVmIHNpemVfdCBfUkNfdDsKCgogICAgdm9sYXRpbGUgX1JDX3QgX01fcmVmX2NvdW50
OwoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9yZWZfY291bnRfbG9jazsKCiAgICBfUmVmY291
bnRfQmFzZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50KF9fbikKICAgIHsKCiAgICAgIF9fZ3Ro
cmVhZF9tdXRleF90IF9fdG1wID0gMDsKICAgICAgX01fcmVmX2NvdW50X2xvY2sgPSBfX3RtcDsK
CgoKCgogICAgfQoKICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAgewogICAgICBfX2d0aHJlYWRf
bXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICArK19NX3JlZl9jb3VudDsKICAg
ICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgfQoKICAg
IF9SQ190CiAgICBfTV9kZWNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9N
X3JlZl9jb3VudF9sb2NrKTsKICAgICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAtLV9NX3JlZl9j
b3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwog
ICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsKIyAxMDkgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICB0ZW1wbGF0ZTxpbnQgX19kdW1t
eT4KICAgIHN0cnVjdCBfU3dhcF9sb2NrX3N0cnVjdAogICAgeyBzdGF0aWMgX19ndGhyZWFkX211
dGV4X3QgX1Nfc3dhcF9sb2NrOyB9OwoKICB0ZW1wbGF0ZTxpbnQgX19kdW1teT4KICAgIF9fZ3Ro
cmVhZF9tdXRleF90CiAgICBfU3dhcF9sb2NrX3N0cnVjdDxfX2R1bW15Pjo6X1Nfc3dhcF9sb2Nr
ID0gMDsKCgoKICBpbmxpbmUgdW5zaWduZWQgbG9uZwogIF9BdG9taWNfc3dhcCh1bnNpZ25lZCBs
b25nICogX19wLCB1bnNpZ25lZCBsb25nIF9fcSkKICB7CiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9j
aygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICB1bnNpZ25lZCBsb25n
IF9fcmVzdWx0ID0gKl9fcDsKICAgICpfX3AgPSBfX3E7CiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5s
b2NrKCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHJldHVybiBfX3Jl
c3VsdDsKICB9Cgp9CiMgMTU1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0
cy9zdGxfdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHN0cnVjdCBfU1RMX211dGV4X2xv
Y2sKICB7CgoKCgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAgdm9pZAogICAg
X01faW5pdGlhbGl6ZSgpCiAgICB7CiMgMTkyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu
Y2x1ZGUvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgICB9CgogICAgdm9pZAogICAgX01fYWNxdWly
ZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX2xvY2spOwog
ICAgfQoKICAgIHZvaWQKICAgIF9NX3JlbGVhc2VfbG9jaygpCiAgICB7CgoKCiAgICAgIF9fZ3Ro
cmVhZF9tdXRleF91bmxvY2soJl9NX2xvY2spOwogICAgfQogIH07CiMgMjI4ICIvZ2NjL2RqZS9i
dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgc3RydWN0IF9T
VExfYXV0b19sb2NrCiAgewogICAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICAgIF9TVExf
YXV0b19sb2NrKF9TVExfbXV0ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQogICAg
eyBfTV9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9CgogICAgfl9TVExfYXV0b19sb2NrKCkgeyBf
TV9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9CgogIHByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9y
PShjb25zdCBfU1RMX2F1dG9fbG9jayYpOwogICAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9h
dXRvX2xvY2smKTsKICB9OwoKfQojIDg2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1
ZGUvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgoKCm5hbWVzcGFjZSBzdGQKewojIDk5ICIvZ2NjL2Rq
ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxsb2MuaCIgMwogIGNsYXNzIF9f
bmV3X2FsbG9jCiAgewogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6
ZV90IF9fbikKICAgIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KF9fbik7IH0KCiAgICBzdGF0aWMg
dm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCkKICAgIHsgOjpvcGVyYXRvciBk
ZWxldGUoX19wKTsgfQogIH07CiMgMTIyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1
ZGUvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICBjbGFzcyBf
X21hbGxvY19hbGxvYwogICAgewogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIHZvaWQqIF9TX29v
bV9tYWxsb2Moc2l6ZV90KTsKICAgICAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29t
X2hhbmRsZXIpKCk7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2Nh
dGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9f
bik7CiAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXN1bHQgPT0gMCwgMCkpCiAgIF9f
cmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAg
ICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVf
dCApCiAgICAgIHsgZnJlZShfX3ApOyB9CgogICAgICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxs
b2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogICAgICB7CiAgICAgICAgdm9pZCAoKiBfX29s
ZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIF9fbWFsbG9jX2FsbG9j
X29vbV9oYW5kbGVyID0gX19mOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQogICAgfTsK
CgogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICB2b2lkICgqIF9fbWFsbG9jX2FsbG9jPF9faW5z
dD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpID0gMDsKCiAgdGVtcGxhdGU8aW50IF9f
aW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvYzxfX2luc3Q+OjoKICAgIF9TX29vbV9t
YWxsb2Moc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVy
KSgpOwogICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAoOzspCiAgICAgICAgewogICAg
ICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwog
ICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19teV9tYWxsb2NfaGFuZGxlciA9PSAwLCAw
KSkKICAgICAgICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxs
b2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAg
ICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICB9CiAg
ICB9CgoKICB0eXBlZGVmIF9fbmV3X2FsbG9jIF9fbWVtX2ludGVyZmFjZTsKIyAxODkgIi9nY2Mv
ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBfX3NpbXBsZV9hbGxv
YwogICAgewogICAgcHVibGljOgogICAgICBzdGF0aWMgX1RwKgogICAgICBhbGxvY2F0ZShzaXpl
X3QgX19uKQogICAgICB7CiBfVHAqIF9fcmV0ID0gMDsKIGlmIChfX24pCiAgIF9fcmV0ID0gc3Rh
dGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpOwogcmV0
dXJuIF9fcmV0OwogICAgICB9CgogICAgICBzdGF0aWMgX1RwKgogICAgICBhbGxvY2F0ZSgpCiAg
ICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0KCiAg
ICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAg
ICAgIHsgaWYgKDAgIT0gX19uKSBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2Yg
KF9UcCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBkZWFsbG9jYXRlKF9UcCogX19wKQog
ICAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0KICAgIH07CiMg
MjI3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxsb2MuaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIF9fZGVidWdfYWxsb2MKICAg
IHsKICAgIHByaXZhdGU6CgoKICAgICAgZW51bSB7X1NfZXh0cmEgPSA4fTsKCiAgICBwdWJsaWM6
CiAgICAgIHN0YXRpYyB2b2lkKgogICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAg
ICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyAoaW50
KSBfU19leHRyYSk7CiAgICAgICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uOwogICAgICAgIHJl
dHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwogICAgICB9CgogICAgICBzdGF0aWMgdm9p
ZAogICAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgewogICAgICAg
IGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgICAgIGlm
ICgqKHNpemVfdCopX19yZWFsX3AgIT0gX19uKQogICAgICAgICAgYWJvcnQoKTsKICAgICAgICBf
QWxsb2M6OmRlYWxsb2NhdGUoX19yZWFsX3AsIF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAg
fQogICAgfTsKIyAyODUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw
MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0
bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBj
bGFzcyBfX3Bvb2xfYWxsb2MKICAgIHsKICAgIHByaXZhdGU6CiAgICAgIGVudW0ge19BTElHTiA9
IDh9OwogICAgICBlbnVtIHtfTUFYX0JZVEVTID0gMTI4fTsKICAgICAgZW51bSB7X05GUkVFTElT
VFMgPSBfTUFYX0JZVEVTIC8gX0FMSUdOfTsKCiAgICAgIHVuaW9uIF9PYmoKICAgICAgewogICAg
ICAgIHVuaW9uIF9PYmoqIF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgIGNoYXIgX01fY2xpZW50
X2RhdGFbMV07CiAgICAgIH07CgogICAgICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9s
aXN0W19ORlJFRUxJU1RTXTsKCgogICAgICBzdGF0aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsKICAg
ICAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVlOwogICAgICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBf
c2l6ZTsKCiAgICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sgX1NfbG9jazsKICAgICAgc3RhdGlj
IF9BdG9taWNfd29yZCBfU19mb3JjZV9uZXc7CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIF9T
X3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChz
aXplX3QpIF9BTElHTi0xKSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9CgogICAgICBzdGF0
aWMgc2l6ZV90CiAgICAgIF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKQogICAgICB7
IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpX0FMSUdOIC0gMSkvKHNpemVfdClfQUxJR04g
LSAxKTsgfQoKCgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgX1NfcmVmaWxsKHNpemVfdCBfX24p
OwoKCgogICAgICBzdGF0aWMgY2hhcioKICAgICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6
ZSwgaW50JiBfX25vYmpzKTsKCgoKICAgICAgc3RydWN0IF9Mb2NrCiAgICAgIHsKICAgICAgICBf
TG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1NfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogICAg
ICAgIH5fTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1NfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsg
fQogICAgICB9IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CiAgICAgIGZyaWVuZCBzdHJ1
Y3QgX0xvY2s7CgogICAgcHVibGljOgoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRl
KHNpemVfdCBfX24pCiAgICAgIHsKIHZvaWQqIF9fcmV0ID0gMDsKCgoKCiBpZiAoX1NfZm9yY2Vf
bmV3ID09IDApCiAgIHsKICAgICBpZiAoZ2V0ZW52KCJHTElCQ1BQX0ZPUkNFX05FVyIpKQogICAg
ICAgX19hdG9taWNfYWRkKCZfU19mb3JjZV9uZXcsIDEpOwogICAgIGVsc2UKICAgICAgIF9fYXRv
bWljX2FkZCgmX1NfZm9yY2VfbmV3LCAtMSk7CiAgIH0KCiBpZiAoKF9fbiA+IChzaXplX3QpIF9N
QVhfQllURVMpIHx8IChfU19mb3JjZV9uZXcgPiAwKSkKICAgX19yZXQgPSBfX25ld19hbGxvYzo6
YWxsb2NhdGUoX19uKTsKIGVsc2UKICAgewogICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVf
bGlzdCA9IF9TX2ZyZWVfbGlzdAogICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCgog
ICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICBfT2JqKiBfX3Jlc3RyaWN0X18gX19yZXN1
bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXN1bHQg
PT0gMCwgMCkpCiAgICAgICBfX3JldCA9IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24pKTsKICAg
ICBlbHNlCiAgICAgICB7CiAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01fZnJlZV9s
aXN0X2xpbms7CiAgX19yZXQgPSBfX3Jlc3VsdDsKICAgICAgIH0KICAgICBpZiAoX19idWlsdGlu
X2V4cGVjdChfX3JldCA9PSAwLCAwKSkKICAgICAgIF9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgIH0K
IHJldHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2Nh
dGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgICB7CiBpZiAoKF9fbiA+IChzaXplX3QpIF9N
QVhfQllURVMpIHx8IChfU19mb3JjZV9uZXcgPiAwKSkKICAgX19uZXdfYWxsb2M6OmRlYWxsb2Nh
dGUoX19wLCBfX24pOwogZWxzZQogICB7CiAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9s
aXN0ID0gX1NfZnJlZV9saXN0CiAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAg
X09iaiogX19xID0gKF9PYmoqKV9fcDsKCgoKCiAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwog
ICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAqX19t
eV9mcmVlX2xpc3QgPSBfX3E7CiAgIH0KICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8Ym9vbCBf
X3RocmVhZHMsIGludCBfX2luc3Q+IF9BdG9taWNfd29yZAogIF9fcG9vbF9hbGxvYzxfX3RocmVh
ZHMsIF9faW5zdD46Ol9TX2ZvcmNlX25ldyA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRz
LCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19wb29s
X2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+JiwKICAgICAgICBjb25zdCBfX3Bvb2xfYWxsb2M8X190
aHJlYWRzLF9faW5zdD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxib29sIF9f
dGhyZWFkcywgaW50IF9faW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0
IF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9f
cG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0PiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQoKCgoK
CiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBjaGFyKgogICAgX19w
b29sX2FsbG9jPF9fdGhyZWFkcywgX19pbnN0Pjo6CiAgICBfU19jaHVua19hbGxvYyhzaXplX3Qg
X19zaXplLCBpbnQmIF9fbm9ianMpCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0OwogICAgICBz
aXplX3QgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgIHNpemVfdCBfX2J5
dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgICBpZiAoX19ieXRl
c19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpCiAgICAgICAgewogICAgICAgICAgX19yZXN1bHQgPSBf
U19zdGFydF9mcmVlOwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwog
ICAgICAgICAgcmV0dXJuIF9fcmVzdWx0IDsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYnl0
ZXNfbGVmdCA+PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19ub2JqcyA9IChpbnQpKF9f
Ynl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9f
bm9ianM7CiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICBfU19z
dGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAg
ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9f
Z2V0ID0KICAgICAgICAgICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFw
X3NpemUgPj4gNCk7CgogICAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPQogICAgICAg
ICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsK
CiAgICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGlu
ayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09i
aiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgICAgfQogICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9
IChjaGFyKikgX19uZXdfYWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICAg
IGlmIChfU19zdGFydF9mcmVlID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXpl
X3QgX19pOwogICAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAg
ICAgICAgICAgICBfT2JqKiBfX3A7CgoKCiAgICAgICAgICAgICAgX19pID0gX19zaXplOwogICAg
ICAgICAgICAgIGZvciAoOyBfX2kgPD0gKHNpemVfdCkgX01BWF9CWVRFUzsgX19pICs9IChzaXpl
X3QpIF9BTElHTikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19teV9mcmVl
X2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAg
ICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgICAgIGlmIChfX3Ag
IT0gMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAqX19teV9m
cmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAg
ICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fcDsKICAgICAgICAgICAgICAgICAgICAgIF9TX2Vu
ZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpOwoKCiAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gMDsKICAgICAg
ICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fbmV3X2FsbG9jOjphbGxvY2F0ZShfX2J5
dGVzX3RvX2dldCk7CgoKICAgICAgICAgICAgfQogICAgICAgICAgX1NfaGVhcF9zaXplICs9IF9f
Ynl0ZXNfdG9fZ2V0OwogICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19i
eXRlc190b19nZXQ7CiAgICAgICAgICByZXR1cm4gX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25v
YmpzKTsKICAgICAgICB9CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50
IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLCBfX2luc3Q+Ojpf
U19yZWZpbGwoc2l6ZV90IF9fbikKICAgIHsKICAgICAgaW50IF9fbm9ianMgPSAyMDsKICAgICAg
Y2hhciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CiAgICAgIF9PYmoq
IHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgX09iaiogX19yZXN1bHQ7CiAgICAgIF9P
YmoqIF9fY3VycmVudF9vYmo7CiAgICAgIF9PYmoqIF9fbmV4dF9vYmo7CiAgICAgIGludCBfX2k7
CgogICAgICBpZiAoMSA9PSBfX25vYmpzKQogICAgICAgIHJldHVybiBfX2NodW5rOwogICAgICBf
X215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoK
ICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0g
X19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsg
OyBfX2krKykKICAgICAgICB7CiAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAg
ICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmogKyBfX24pOwogICBpZiAo
X19ub2JqcyAtIDEgPT0gX19pKQogICAgIHsKICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJl
ZV9saXN0X2xpbmsgPSAwOwogICAgICAgYnJlYWs7CiAgICAgfQogICBlbHNlCiAgICAgX19jdXJy
ZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7CiB9CiAgICAgIHJldHVy
biBfX3Jlc3VsdDsKICAgIH0KCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0
PgogICAgX1NUTF9tdXRleF9sb2NrCiAgICBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLF9faW5zdD46
Ol9TX2xvY2sgPSB7IDAgfTsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+
CiAgICBjaGFyKiBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUg
PSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNoYXIqIF9f
cG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOwoKICB0ZW1wbGF0
ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHNpemVfdCBfX3Bvb2xfYWxsb2M8X190
aHJlYWRzLF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJl
YWRzLCBpbnQgX19pbnN0PgogICAgdHlwZW5hbWUgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2lu
c3Q+OjpfT2JqKiB2b2xhdGlsZQogICAgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+Ojpf
U19mcmVlX2xpc3RbX05GUkVFTElTVFNdOwoKICB0eXBlZGVmIF9fcG9vbF9hbGxvYzx0cnVlLDA+
IF9fYWxsb2M7CiAgdHlwZWRlZiBfX3Bvb2xfYWxsb2M8ZmFsc2UsMD4gX19zaW5nbGVfY2xpZW50
X2FsbG9jOwojIDU2NCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz
MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3Rs
X2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjbGFzcyBhbGxvY2F0b3IK
ICAgIHsKICAgICAgdHlwZWRlZiBfX2FsbG9jIF9BbGxvYzsKICAgIHB1YmxpYzoKICAgICAgdHlw
ZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl
X3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IF9U
cCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICAgICAgdHlw
ZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVf
dHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3RydWN0IHJlYmlu
ZAogICAgICAgIHsgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7IH07CgogICAgICBhbGxv
Y2F0b3IoKSB0aHJvdygpIHt9CiAgICAgIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJv
dygpIHt9CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgYWxsb2NhdG9yKGNv
bnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30KICAgICAgfmFsbG9jYXRvcigpIHRocm93
KCkge30KCiAgICAgIHBvaW50ZXIKICAgICAgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7
IHJldHVybiAmX194OyB9CgogICAgICBjb25zdF9wb2ludGVyCiAgICAgIGFkZHJlc3MoY29uc3Rf
cmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKCgogICAgICBfVHAqCiAgICAg
IGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkKICAgICAgewogX1RwKiBf
X3JldCA9IDA7CiBpZiAoX19uKQogICB7CiAgICAgaWYgKF9fbiA8PSB0aGlzLT5tYXhfc2l6ZSgp
KQogICAgICAgX19yZXQgPSBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9fbiAq
IHNpemVvZihfVHApKSk7CiAgICAgZWxzZQogICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsKICAg
fQogcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBkZWFsbG9jYXRlKHBv
aW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3As
IF9fbiAqIHNpemVvZihfVHApKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkg
Y29uc3QgdGhyb3coKSB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgICAg
IHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3Ap
IF9UcChfX3ZhbCk7IH0KICAgICAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9U
cCgpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBhbGxvY2F0b3I8dm9pZD4KICAg
IHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdm9pZCogcG9pbnRl
cjsKICAgICAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVm
IHZvaWQgdmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAg
c3RydWN0IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7IH07
CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9j
YXRvcjxfVDI+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Qx
LCB0eXBlbmFtZSBfVDI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBhbGxv
Y2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9
CiMgNjYwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxsb2Mu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0
IF9fYWxsb2NhdG9yCiAgICB7CiAgICAgIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogICAg
ICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl
cmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29u
c3QgX1RwKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAg
ICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9UcCB2
YWx1ZV90eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3Qg
cmViaW5kCiAgICAgICAgeyB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7
IH07CgogICAgICBfX2FsbG9jYXRvcigpIHRocm93KCkge30KICAgICAgX19hbGxvY2F0b3IoY29u
c3QgX19hbGxvY2F0b3ImIF9fYSkgdGhyb3coKQogICAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhf
X2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4K
ICAgICAgICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2Ep
IHRocm93KCkKICAgICAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2Fs
bG9jKSB7fQoKICAgICAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICAgICAgcG9pbnRlcgog
ICAgICBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCiAgICAg
IGNvbnN0X3BvaW50ZXIKICAgICAgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7
IHJldHVybiAmX194OyB9CgoKCiAgICAgIF9UcCoKICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9f
biwgY29uc3Qgdm9pZCogPSAwKQogICAgICB7CiBfVHAqIF9fcmV0ID0gMDsKIGlmIChfX24pCiAg
IF9fcmV0ID0gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2Yo
X1RwKSkpOwogcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBkZWFsbG9j
YXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgICB7IF9fdW5kZXJseWluZ19hbGxv
Yy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXpl
b2YoX1RwKTsgfQoKICAgICAgdm9pZAogICAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0
IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQoKICAgICAgdm9pZAogICAgICBk
ZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPgogICAg
ewogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90
IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwogICAgICB0eXBl
ZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdm9pZCB2YWx1ZV90
eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5k
CiAgICAgICAgeyB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7IH07CiAg
ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCxfQWxsb2M+JiBfX2Ex
LAogICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsX0FsbG9jPiYgX19hMikKICAg
IHsgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2Fs
bG9jOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBf
X2ExLAogICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIp
CiAgICB7IHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWlu
Z19hbGxvYzsgfQoKCgoKCgoKICB0ZW1wbGF0ZTxpbnQgaW5zdD4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jPGluc3Q+JiwKICAgICAgICAgICAgICAg
Y29uc3QgX19tYWxsb2NfYWxsb2M8aW5zdD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1w
bGF0ZTxpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19t
YWxsb2NfYWxsb2M8X19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9j
PF9faW5zdD4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWJ1Z19hbGxvYzxf
QWxsb2M+JiwgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikKICAgIHsgcmV0dXJuIHRydWU7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yIT0oY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwgY29uc3QgX19kZWJ1Z19hbGxvYzxf
QWxsb2M+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9CiMgODEzICIvZ2NjL2RqZS9idWlsZC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk
YysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzCiAgICB7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBhbGxv
Y2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Fs
bG9jYXRvcj4KICAgIGNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+Ojpf
U19pbnN0YW5jZWxlc3M7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDE+
CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9jYXRvcjxfVHAxPiA+CiAgICB7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVk
ZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2FsbG9jPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRl
ZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcCwgaW50IF9faW5zdD4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19t
YWxsb2NfYWxsb2M8X19pbnN0PiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2lu
c3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX21h
bGxvY19hbGxvYzxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0
b3I8X1RwLCBfX21hbGxvY19hbGxvYzxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAg
c3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLCBfX2luc3Q+
ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsK
ICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fcG9vbF9hbGxvYzxfX3RocmVhZHMs
IF9faW5zdD4gPgogICAgICBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxf
VHAsIF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICBhbGxvY2F0b3JfdHlw
ZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAg
c3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPgogICAgewog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBl
ZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5
cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4g
PiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5
cGVuYW1lIF9UcDEsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvYzxf
X2luc3Q+ID4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3Mg
PSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2M8
X19pbnN0PiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19t
YWxsb2NfYWxsb2M8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0PgogICAg
c3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBfX3Bvb2xfYWxsb2M8
X190aHIsIF9faW5zdD4gPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3Rh
bmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX3Bvb2xf
YWxsb2M8X190aHIsX19pbnN0PiA+CiAgICAgIF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9f
YWxsb2NhdG9yPF9UcCwgX19wb29sX2FsbG9jPF9fdGhyLF9faW5zdD4gPgogICAgICBhbGxvY2F0
b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMSwg
dHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRv
cjxfVHAxLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxs
b2M8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRl
ZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBl
OwogICAgfTsKCgoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPGNoYXI+Owog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxvY2F0b3I8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIF9fcG9vbF9hbGxvYzx0cnVlLDA+OwoKfQojIDU2ICIvZ2NjL2RqZS9idWlsZC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli
c3RkYysrLXYzL2luY2x1ZGUvbWVtb3J5IiAyIDMKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr
LXYzL2luY2x1ZGUvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDY3ICIvZ2NjL2RqZS9idWls
ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAv
bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKbmFtZXNwYWNlIHN0
ZAp7CgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgogICAgaW5saW5lIHZv
aWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkKICAgIHsgbmV3
IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKF9fdmFsdWUpOyB9CgoKCgoKCgogIHRlbXBs
YXRlIDxjbGFzcyBfVDE+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCkK
ICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKCk7IH0KIyA5OCAiL2djYy9k
amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0
cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0
LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQojIDExMiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12
My9pbmNsdWRlL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0
ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkKICAgIHsgfQoKCgoKCgogIHRl
bXBsYXRlIDxjbGFzcyBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3koX1RwKiBfX3Bv
aW50ZXIpCiAgICB7IF9fcG9pbnRlci0+fl9UcCgpOyB9CiMgMTM0ICIvZ2NjL2RqZS9idWlsZC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli
c3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBfRGVzdHJveShfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVf
dHlwZQogICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlX3R5cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9y
CiAgICAgICAgICAgICAgICAgICAgICAgX0hhc190cml2aWFsX2Rlc3RydWN0b3I7CgogICAgICBf
X2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7
CiAgICB9Cn0KIyA1NyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz
MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL21lbW9yeSIg
MiAzCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF91bmlu
aXRpYWxpemVkLmgiIDEgMwojIDY2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu
My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv
Yml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBf
Rm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAg
ICAgICBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Zvcndh
cmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICBfRm9yd2FyZEl0ZXIg
X19yZXN1bHQsCiAgICAgICAgX19mYWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIg
X19jdXIgPSBfX3Jlc3VsdDsKICAgICAgdHJ5IHsKIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCwgKytfX2N1cikKICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiBy
ZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogewogICBfRGVzdHJveShfX3Jl
c3VsdCwgX19jdXIpOwogICB0aHJvdzsKIH0KICAgIH0KIyAxMDYgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0Zv
cndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1
ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6
aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1
eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwogICAgfQoKICBpbmxpbmUg
Y2hhcioKICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hh
ciogX19sYXN0LCBjaGFyKiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2Zp
cnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBf
X2ZpcnN0KTsKICB9CgogIGlubGluZSB3Y2hhcl90KgogIHVuaW5pdGlhbGl6ZWRfY29weShjb25z
dCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90KiBfX2xhc3QsCiAgICAgICB3Y2hhcl90
KiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2No
YXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFz
dCAtIF9fZmlyc3QpOwogIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5
cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgY29uc3Qg
X1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgeyBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZv
aWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQog
ICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICB0cnkgewogZm9y
ICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCiAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194
KTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiB7CiAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3Vy
KTsKICAgdGhyb3c7CiB9CiAgICB9CiMgMTY0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu
Y2x1ZGUvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXpl
ZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf
VHAmIF9feCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv
cndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIF9f
dW5pbml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsK
ICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXpl
LCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6
ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAg
Y29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICByZXR1cm4gZmlsbF9uKF9f
Zmlyc3QsIF9fbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
LCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3Vu
aW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAog
ICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0Zvcndh
cmRJdGVyIF9fY3VyID0gX19maXJzdDsKICAgICAgdHJ5IHsKIGZvciAoIDsgX19uID4gMDsgLS1f
X24sICsrX19jdXIpCiAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKIHJldHVybiBfX2N1cjsK
ICAgICAgfQogICAgICBjYXRjaCguLi4pCiB7CiAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsK
ICAgdGhyb3c7CiB9CiAgICB9CiMgMjEwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1
ZGUvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3YXJk
SXRlcgogICAgdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXpl
IF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNf
UE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19maXJzdCwgX19u
LCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CiMgMjI3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz
L2luY2x1ZGUvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+
CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICBfSW5wdXRJ
dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgX0ZvcndhcmRJdGVy
IF9fcmVzdWx0KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVk
X2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgdHJ5IHsKIHJldHVybiB1
bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsKICAgICAgfQogICAg
ICBjYXRjaCguLi4pCiB7CiAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgIHRocm93Owog
fQogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5p
bml0aWFsaXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIg
X19taWQsCiAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICBfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0KQogICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19y
ZXN1bHQsIF9fbWlkLCBfX3gpOwogICAgICB0cnkgewogcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiB7CiAg
IF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgIHRocm93OwogfQogICAgfQoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1
dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgX0ZvcndhcmRJdGVy
IF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgY29uc3QgX1RwJiBfX3gp
CiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19m
aXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICAgICAgdHJ5IHsKIHVuaW5pdGlhbGl6ZWRfZmls
bChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogewogICBf
RGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsKICAgdGhyb3c7CiB9CiAgICB9Cgp9CiMgNTkgIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9tZW1vcnkiIDIgMwojIDEgIi9nY2MvZGpl
L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEg
MwojIDY0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfcmF3X3N0
b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9yCiAg
ICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lk
LCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9NX2l0
ZXI7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICByYXdfc3RvcmFnZV9pdGVyYXRv
cihfRm9yd2FyZEl0ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkge30KCiAgICAgIHJhd19zdG9y
YWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKICAgICAg
cmF3X3N0b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fZWxlbWVu
dCkKICAgICAgewogX0NvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVudCk7CiByZXR1cm4gKnRo
aXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3Is
IF9UcD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiArK19NX2l0ZXI7CiByZXR1cm4gKnRo
aXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3Is
IF9UcD4KICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKIHJhd19zdG9yYWdlX2l0ZXJhdG9y
PF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4gX190bXAgPSAqdGhpczsKICsrX01faXRlcjsKIHJldHVy
biBfX3RtcDsKICAgICAgfQogICAgfTsKfQojIDYwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz
L2luY2x1ZGUvbWVtb3J5IiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDcxICIvZ2NjL2RqZS9idWls
ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAv
bGlic3RkYysrLXYzL2luY2x1ZGUvbWVtb3J5IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+CiAgICBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRp
ZmZfdCBfX2xlbiwgX1RwKikKICAgIHsKICAgICAgaWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0
ODM2NDcgLyBzaXplb2YoX1RwKSkpCiBfX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsK
CiAgICAgIHdoaWxlIChfX2xlbiA+IDApCiB7CiAgIF9UcCogX190bXAgPSAoX1RwKikgc3RkOjpt
YWxsb2MoKHN0ZDo6c2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICBpZiAoX190bXAgIT0g
MCkKICAgICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAgIF9f
bGVuIC89IDI7CiB9CiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oKF9UcCopMCwg
MCk7CiAgICB9CiMgMTAzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw
MDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvbWVtb3J5
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHBhaXI8X1RwKixwdHJkaWZm
X3Q+CiAgICBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4pCiAgICB7IHJldHVy
biBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7IH0KIyAxMTUgIi9nY2Mv
ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICB2b2lkCiAgICByZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkKICAg
IHsgc3RkOjpmcmVlKF9fcCk7IH0KIyAxMjcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j
bHVkZS9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgc3RydWN0IGF1dG9f
cHRyX3JlZgogICAgewogICAgICBfVHAxKiBfTV9wdHI7CgogICAgICBleHBsaWNpdAogICAgICBh
dXRvX3B0cl9yZWYoX1RwMSogX19wKTogX01fcHRyKF9fcCkgeyB9CiAgICB9OwojIDE2NiAiL2dj
Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL21lbW9yeSIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIGNsYXNzIGF1dG9fcHRyCiAgICB7CiAgICBwcml2YXRlOgogICAgICBfVHAq
IF9NX3B0cjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CgoK
CgoKCgogICAgICBleHBsaWNpdAogICAgICBhdXRvX3B0cihlbGVtZW50X3R5cGUqIF9fcCA9IDAp
IHRocm93KCkgOiBfTV9wdHIoX19wKSB7IH0KIyAxOTIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst
djMvaW5jbHVkZS9tZW1vcnkiIDMKICAgICAgYXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3co
KSA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMDMgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9tZW1vcnkiIDMKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAg
ICAgICBhdXRvX3B0cihhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpIDogX01fcHRyKF9fYS5y
ZWxlYXNlKCkpIHsgfQojIDIxNCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL21l
bW9yeSIgMwogICAgICBhdXRvX3B0ciYKICAgICAgb3BlcmF0b3I9KGF1dG9fcHRyJiBfX2EpIHRo
cm93KCkKICAgICAgewogcmVzZXQoX19hLnJlbGVhc2UoKSk7CiByZXR1cm4gKnRoaXM7CiAgICAg
IH0KIyAyMzEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9tZW1vcnkiIDMKICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBhdXRvX3B0ciYKICAgICAgICBvcGVy
YXRvcj0oYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQogICAgICAgIHsKICAgcmVzZXQoX19h
LnJlbGVhc2UoKSk7CiAgIHJldHVybiAqdGhpczsKIH0KIyAyNTEgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9tZW1vcnkiIDMKICAgICAgfmF1dG9fcHRyKCkgeyBkZWxldGUgX01f
cHRyOyB9CiMgMjYxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw
NDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvbWVtb3J5IiAz
CiAgICAgIGVsZW1lbnRfdHlwZSYKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgdGhyb3coKSB7IHJl
dHVybiAqX01fcHRyOyB9CgoKCgoKCgogICAgICBlbGVtZW50X3R5cGUqCiAgICAgIG9wZXJhdG9y
LT4oKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIF9NX3B0cjsgfQojIDI4MyAiL2djYy9kamUvYnVp
bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
L2xpYnN0ZGMrKy12My9pbmNsdWRlL21lbW9yeSIgMwogICAgICBlbGVtZW50X3R5cGUqCiAgICAg
IGdldCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01fcHRyOyB9CiMgMjk3ICIvZ2NjL2RqZS9i
dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvbWVtb3J5IiAzCiAgICAgIGVsZW1lbnRfdHlwZSoKICAg
ICAgcmVsZWFzZSgpIHRocm93KCkKICAgICAgewogZWxlbWVudF90eXBlKiBfX3RtcCA9IF9NX3B0
cjsKIF9NX3B0ciA9IDA7CiByZXR1cm4gX190bXA7CiAgICAgIH0KIyAzMTIgIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC9saWJzdGRjKystdjMvaW5jbHVkZS9tZW1vcnkiIDMKICAgICAgdm9pZAogICAgICByZXNldChl
bGVtZW50X3R5cGUqIF9fcCA9IDApIHRocm93KCkKICAgICAgewogaWYgKF9fcCAhPSBfTV9wdHIp
CiAgIHsKICAgICBkZWxldGUgX01fcHRyOwogICAgIF9NX3B0ciA9IF9fcDsKICAgfQogICAgICB9
CiMgMzMzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvbWVtb3J5IiAzCiAgICAg
IGF1dG9fcHRyKGF1dG9fcHRyX3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICAg
IDogX01fcHRyKF9fcmVmLl9NX3B0cikgeyB9CgogICAgICBhdXRvX3B0ciYKICAgICAgb3BlcmF0
b3I9KGF1dG9fcHRyX3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICAgIHsKIGlm
IChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpCiAgIHsKICAgICBkZWxldGUgX01fcHRyOwog
ICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgfQogcmV0dXJuICp0aGlzOwogICAgICB9Cgog
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIG9wZXJhdG9yIGF1dG9fcHRyX3Jl
ZjxfVHAxPigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBhdXRvX3B0cl9yZWY8X1RwMT4odGhp
cy0+cmVsZWFzZSgpKTsgfQoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBv
cGVyYXRvciBhdXRvX3B0cjxfVHAxPigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBhdXRvX3B0
cjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9CgogIH07Cn0KIyA0OSAiL2djYy9kamUvYnVpbGQv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp
YnN0ZGMrKy12My9pbmNsdWRlL3N0cmluZyIgMiAzCgoKCiMgMSAiL2djYy9kamUvYnVpbGQvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0
ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEgMwojIDY0ICIvZ2NjL2RqZS9i
dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwpuYW1lc3BhY2Ug
c3RkCnsKIyAxMDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0
MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9m
dW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3Qg
dW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYg
X1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3Mg
X0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYg
X0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVu
dF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKIyAxMjcgIi9nY2MvZGpl
L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw
LF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg
Y29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g
X194IC0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG11bHRpcGxpZXMg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKiBfX3k7
IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm
IF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPgp7CiAgX1Rw
IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0KfTsKIyAx
NzMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9mdW5jdGlvbi5o
IiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBlcXVhbF90byA6IHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194
LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID09IF9feTsgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U
cCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f
eSkgY29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IGxlc3MgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv
b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0
dXJuIF9feCA8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVy
X2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf
X3ggPj0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3NfZXF1YWwg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3Io
KShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8PSBf
X3k7IH0KfTsKIyAyMjIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw
MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0
bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigp
KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9f
eTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBj
b25zdCB7IHJldHVybiAhX194OyB9Cn07CiMgMjcxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz
L2luY2x1ZGUvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0
ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUg
X1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0
ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNh
dGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5h
bWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIV9N
X3ByZWQoX194KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSB1
bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsK
ICByZXR1cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgYmluYXJ5X25lZ2F0ZQogIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRf
dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1By
ZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0ZShjb25zdCBf
UHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0
IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCwKICAgICAgICAg
ICAgICAgICAgY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUm
IF9feSkgY29uc3QKICB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194LCBfX3kpOwogIH0KfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0
ZT4Kbm90Mihjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5X25lZ2F0
ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CiMgMzQ5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz
L2luY2x1ZGUvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlv
bj4KY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09w
ZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRp
b24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsK
cHVibGljOgogIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNv
bnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAg
OiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5
cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVu
dF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9CgoKICB0
eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09w
ZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9w
KHZhbHVlLCBfX3gpOwogIH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNz
IF9UcD4KaW5saW5lIGJpbmRlcjFzdDxfT3BlcmF0aW9uPgpiaW5kMXN0KGNvbnN0IF9PcGVyYXRp
b24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9u
OjpmaXJzdF9hcmd1bWVudF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjFzdDxfT3Bl
cmF0aW9uPihfX2ZuLCBfQXJnMV90eXBlKF9feCkpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVy
YXRpb24+CmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1l
IF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVy
YXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFs
dWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAg
ICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KQog
ICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1
bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJn
dW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoK
CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVuYW1l
IF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJu
IG9wKF9feCwgdmFsdWUpOwogIH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNs
YXNzIF9UcD4KaW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPgpiaW5kMm5kKGNvbnN0IF9PcGVy
YXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0
aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBlOwogIHJldHVybiBiaW5kZXIybmQ8
X09wZXJhdGlvbj4oX19mbiwgX0FyZzJfdHlwZShfX3gpKTsKfQojIDQzOCAiL2djYy9kamUvYnVp
bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
L2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNs
YXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24g
OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jl
c3VsdCAoKl9NX3B0cikoX0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9u
KCkge30KICBleHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gp
KF9BcmcpKSA6IF9NX3B0cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194KSBj
b25zdCB7IHJldHVybiBfTV9wdHIoX194KTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBj
bGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVz
dWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQp7CiAgcmV0dXJuIHBvaW50ZXJfdG9f
dW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf
QXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fYmluYXJ5
X2Z1bmN0aW9uIDoKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+
IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsKcHVibGlj
OgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQgcG9pbnRl
cl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkKICAgICAg
OiBfTV9wdHIoX194KSB7fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIg
X195KSBjb25zdCB7CiAgICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9OwoKCnRl
bXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBw
b2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PgpwdHJfZnVuKF9S
ZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlf
ZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CnN0cnVjdCBfSWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewog
IF9UcCYgb3BlcmF0b3IoKShfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9CiAgY29uc3Qg
X1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qxc3QgOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlPiB7CiAgdHlwZW5hbWUg
X1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0
dXJuIF9feC5maXJzdDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9w
ZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsK
ICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+CnsKICB0
eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3Qg
ewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNv
bmRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4g
X194LnNlY29uZDsKICB9Cn07CiMgNTI4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1
ZGUvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw
PgpjbGFzcyBtZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKixfUmV0PiB7CnB1
YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9f
cGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4q
X01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVu
YXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3Rf
bWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9S
ZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2Yp
KCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5h
cnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qo
X1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9U
cCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAo
X1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFz
cyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7
CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYp
KCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
cikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6
Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xh
c3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixf
QXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19w
ZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0Fy
ZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1Jl
dCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21l
bV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQog
IF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJl
dHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9B
cmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0Fy
ZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6Oipf
X3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yLCBf
QXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9S
ZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1f
ZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9
CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1
cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9Bcmcp
IGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdDx2b2lkLCBf
VHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGlj
aXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQg
b3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgog
IHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29u
c3RfbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1Rw
Kix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoq
X19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9U
cCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoq
X01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Jl
Zl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGlj
OgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9f
cGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7
IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9m
dW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZf
dCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJh
dG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgog
IHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFf
dCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRv
cigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2
YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAg
ZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkg
OiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9f
eCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9N
X2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNs
YXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qo
dm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3Io
KShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRl
OgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGlj
aXQgY29uc3RfbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDog
X01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gp
IGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2Yp
KF9BcmcpIGNvbnN0Owp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+Cmlu
bGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpKQogIHsg
cmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs
IGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0
IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl90PF9SZXQsX1Rw
PihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1
bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0
dXJuIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVu
X3JlZihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl9y
ZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwg
Y2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0
IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4o
X19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5s
aW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6Oipf
X2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0Fy
Zz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K
aW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9U
cDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4o
X19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5s
aW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW5fcmVmKF9SZXQg
KF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8
X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKCgp9CiMgNTMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst
djMvaW5jbHVkZS9zdHJpbmciIDIgMwojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j
bHVkZS9iaXRzL2Jhc2ljX3N0cmluZy5oIiAxIDMKIyA0NCAiL2djYy9kamUvYnVpbGQvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMr
Ky12My9pbmNsdWRlL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiMg
MTA4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9iYXNpY19zdHJpbmcu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nCiAgICB7CgogICAgcHVibGljOgogICAg
ICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Ry
YWl0czo6Y2hhcl90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRv
cl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJl
bmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgcmVmZXJl
bmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0
X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIgcG9pbnRl
cjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9p
bnRlcjsKICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIs
IGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1h
bF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBiYXNpY19zdHJpbmc+CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9y
OwogICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29u
c3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8
aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKIyAxNDMgIi9nY2MvZGpl
L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgIHN0
cnVjdCBfUmVwCiAgICAgIHsKCiB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmVi
aW5kPGNoYXI+OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9jOwojIDE2MSAiL2djYy9kamUvYnVpbGQv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp
YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKIHN0YXRpYyBjb25zdCBz
aXplX3R5cGUgX1NfbWF4X3NpemU7CiBzdGF0aWMgY29uc3QgX0NoYXJUIF9TX3Rlcm1pbmFsOwoK
IHNpemVfdHlwZSBfTV9sZW5ndGg7CiBzaXplX3R5cGUgX01fY2FwYWNpdHk7CiBfQXRvbWljX3dv
cmQgX01fcmVmZXJlbmNlczsKCiAgICAgICAgYm9vbAogX01faXNfbGVha2VkKCkgY29uc3QKICAg
ICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzIDwgMDsgfQoKICAgICAgICBib29sCiBfTV9pc19z
aGFyZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAwOyB9CgogICAg
ICAgIHZvaWQKIF9NX3NldF9sZWFrZWQoKQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IC0xOyB9
CgogICAgICAgIHZvaWQKIF9NX3NldF9zaGFyYWJsZSgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2Vz
ID0gMDsgfQoKIF9DaGFyVCoKIF9NX3JlZmRhdGEoKSB0aHJvdygpCiB7IHJldHVybiByZWludGVy
cHJldF9jYXN0PF9DaGFyVCo+KHRoaXMgKyAxKTsgfQoKIF9DaGFyVCYKIG9wZXJhdG9yW10oc2l6
ZV90IF9fcykgdGhyb3coKQogeyByZXR1cm4gX01fcmVmZGF0YSgpIFtfX3NdOyB9CgogX0NoYXJU
KgogX01fZ3JhYihjb25zdCBfQWxsb2MmIF9fYWxsb2MxLCBjb25zdCBfQWxsb2MmIF9fYWxsb2My
KQogewogICByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2FsbG9jMikK
ICAgICAgICAgICA/IF9NX3JlZmNvcHkoKSA6IF9NX2Nsb25lKF9fYWxsb2MxKTsKIH0KCgogc3Rh
dGljIF9SZXAqCiBfU19jcmVhdGUoc2l6ZV90LCBjb25zdCBfQWxsb2MmKTsKCiB2b2lkCiBfTV9k
aXNwb3NlKGNvbnN0IF9BbGxvYyYgX19hKQogewogICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZf
TV9yZWZlcmVuY2VzLCAtMSkgPD0gMCkKICAgICBfTV9kZXN0cm95KF9fYSk7CiB9Cgogdm9pZAog
X01fZGVzdHJveShjb25zdCBfQWxsb2MmKSB0aHJvdygpOwoKIF9DaGFyVCoKIF9NX3JlZmNvcHko
KSB0aHJvdygpCiB7CiAgIF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7CiAgIHJldHVy
biBfTV9yZWZkYXRhKCk7CiB9CgogX0NoYXJUKgogX01fY2xvbmUoY29uc3QgX0FsbG9jJiwgc2l6
ZV90eXBlIF9fcmVzID0gMCk7CiAgICAgIH07CgoKICAgICAgc3RydWN0IF9BbGxvY19oaWRlciA6
IF9BbGxvYwogICAgICB7CiBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX2RhdCwgY29uc3QgX0FsbG9j
JiBfX2EpCiA6IF9BbGxvYyhfX2EpLCBfTV9wKF9fZGF0KSB7IH0KCiBfQ2hhclQqIF9NX3A7CiAg
ICAgIH07CgogICAgcHVibGljOgoKCgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3Mg
PSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAgbXV0YWJs
ZSBfQWxsb2NfaGlkZXIgX01fZGF0YXBsdXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1Nf
ZW1wdHlfcmVwX3N0b3JhZ2VbKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9m
KHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQqCiAgICAg
IF9NX2RhdGEoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CgogICAg
ICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoX0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJuIChfTV9k
YXRhcGx1cy5fTV9wID0gX19wKTsgfQoKICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gJigocmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0x
XSk7IH0KCgoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWJlZ2luKCkgY29uc3QgeyByZXR1cm4g
aXRlcmF0b3IoX01fZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWVuZCgpIGNv
bnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAg
IHZvaWQKICAgICAgX01fbGVhaygpCiAgICAgIHsKIGlmICghX01fcmVwKCktPl9NX2lzX2xlYWtl
ZCgpKQogICBfTV9sZWFrX2hhcmQoKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01f
Y2hlY2soc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7CiBpZiAoX19wb3MgPiB0aGlzLT5z
aXplKCkpCiAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCgiYmFzaWNfc3RyaW5nOjpfTV9jaGVjayIp
KTsKIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgoKICAgICAgaXRlcmF0b3IK
ICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX29mZikgY29uc3QKICAg
ICAgewogYm9vbCBfX3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogc2l6
ZV90eXBlIF9fbmV3b2ZmID0gX190ZXN0b2ZmID8gX19vZmYgOiB0aGlzLT5zaXplKCkgLSBfX3Bv
czsKIHJldHVybiAoX01faWJlZ2luKCkgKyBfX3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoKCgog
ICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAgICAg
ICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9f
azIpCiAgICAgICAgewogICBmb3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQogICAg
IHRyYWl0c190eXBlOjphc3NpZ24oKl9fcCwgKl9fazEpOwogfQoKICAgICAgc3RhdGljIHZvaWQK
ICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3Ig
X19rMikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgp
KTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwg
Y29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5
X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZv
aWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX2sxLCBfQ2hhclQq
IF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7
IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNv
bnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBl
Ojpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX211
dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIp
OwoKICAgICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQoKTsKCiAgICAgIHN0YXRpYyBfUmVwJgog
ICAgICBfU19lbXB0eV9yZXAoKQogICAgICB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxfUmVw
Kj4oJl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAgIHB1YmxpYzoKCgoKCiAgICAgIGlubGlu
ZQogICAgICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmlu
Zyhjb25zdCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0
ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgIHNpemVfdHlwZSBfX24gPSBucG9zKTsKICAgICAgYmFz
aWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAg
ICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgICBiYXNpY19zdHJpbmco
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sCiAgICAgY29uc3QgX0FsbG9jJiBfX2Eg
PSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3Qg
X0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19u
LCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIHRlbXBs
YXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVy
YXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQsCiAgICAgICBjb25zdCBfQWxsb2MmIF9f
YSA9IF9BbGxvYygpKTsKCiAgICAgIH5iYXNpY19zdHJpbmcoKQogICAgICB7IF9NX3JlcCgpLT5f
TV9kaXNwb3NlKHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgb3BlcmF0b3I9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMt
PmFzc2lnbihfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KGNv
bnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zKTsgfQoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXNz
aWduKDEsIF9fYyk7IH0KCgogICAgICBpdGVyYXRvcgogICAgICBiZWdpbigpCiAgICAgIHsKIF9N
X2xlYWsoKTsKIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOwogICAgICB9CgogICAgICBjb25z
dF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJh
dG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpCiAgICAgIHsKICAg
ICAgICAgX01fbGVhaygpOwogIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXpl
KCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBlbmQoKSBjb25zdAogICAg
ICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9Cgog
ICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpCiAgICAgIHsgcmV0dXJuIHJldmVy
c2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
CiAgICAgIHJiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKQog
ICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9CgogICAgICBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSBjb25zdAogICAgICB7IHJldHVybiBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9CgogICAgcHVibGljOgoKICAg
ICAgc2l6ZV90eXBlCiAgICAgIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVu
Z3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gX01f
cmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29u
c3QgeyByZXR1cm4gX1JlcDo6X1NfbWF4X3NpemU7IH0KCiAgICAgIHZvaWQKICAgICAgcmVzaXpl
KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6
ZV90eXBlIF9fbikgeyB0aGlzLT5yZXNpemUoX19uLCBfQ2hhclQoKSk7IH0KCiAgICAgIHNpemVf
dHlwZQogICAgICBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9jYXBhY2l0
eTsgfQoKICAgICAgdm9pZAogICAgICByZXNlcnZlKHNpemVfdHlwZSBfX3Jlc19hcmcgPSAwKTsK
CiAgICAgIHZvaWQKICAgICAgY2xlYXIoKSB7IF9NX211dGF0ZSgwLCB0aGlzLT5zaXplKCksIDAp
OyB9CgogICAgICBib29sCiAgICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+c2l6ZSgp
ID09IDA7IH0KCgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXSAoc2l6ZV90
eXBlIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRhKClbX19wb3NdOyB9CgogICAg
ICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19wb3MpCiAgICAgIHsKIF9N
X2xlYWsoKTsKIHJldHVybiBfTV9kYXRhKClbX19wb3NdOwogICAgICB9CgogICAgICBjb25zdF9y
ZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogaWYgKF9fbiA+
PSB0aGlzLT5zaXplKCkpCiAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCgiYmFzaWNfc3RyaW5nOjph
dCIpKTsKIHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKICAgICAgcmVmZXJlbmNlCiAg
ICAgIGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsKIGlmIChfX24gPj0gc2l6ZSgpKQogICBfX3Ro
cm93X291dF9vZl9yYW5nZSgoImJhc2ljX3N0cmluZzo6YXQiKSk7CiBfTV9sZWFrKCk7CiByZXR1
cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9w
ZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXBwZW5k
KF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IF9D
aGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zKTsgfQoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChz
aXplX3R5cGUoMSksIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBl
bmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg
X19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0
IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zLCB0cmFpdHNfdHlw
ZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChzaXpl
X3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhcHBlbmQoX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJl
cGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZv
aWQKICAgICAgcHVzaF9iYWNrKF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfTV9p
ZW5kKCksIF9NX2llbmQoKSwgMSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBh
c3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0No
YXJUKiBfX3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3Np
Z24oY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIHRy
YWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNz
aWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxh
Y2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNzaWdu
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9f
bGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBl
IF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9f
Yyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQg
aW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9y
IF9fZW5kKQogICAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsg
fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29u
c3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9z
MSwgX19zdHIsIDAsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg
aW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAg
IHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3Ms
IGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MsIF9f
cywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAg
ICB7CiB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBfX24sIF9fYyk7CiByZXR1cm4gKnRo
aXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9D
aGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAgewogc2l6ZV90eXBlIF9fcG9zID0gX19wIC0gX01f
aWJlZ2luKCk7CiB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBzaXplX3R5cGUoMSksIF9f
Yyk7CiBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogIHJldHVybiB0aGlzLT5fTV9pYmVnaW4o
KSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVf
dHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQogICAgICB7CiByZXR1cm4gdGhp
cy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbiksCiAgICAgICAg
X01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFz
ZShpdGVyYXRvciBfX3Bvc2l0aW9uKQogICAgICB7CiBzaXplX3R5cGUgX19pID0gX19wb3NpdGlv
biAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwgX19wb3Np
dGlvbiArIDEsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKIF9NX3JlcCgpLT5fTV9zZXRfbGVha2Vk
KCk7CiByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAg
ICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewogICAg
ICAgIHNpemVfdHlwZSBfX2kgPSBfX2ZpcnN0IC0gX01faWJlZ2luKCk7CiB0aGlzLT5yZXBsYWNl
KF9fZmlyc3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogX01fcmVwKCktPl9NX3Nl
dF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl
IF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVw
bGFjZShfX3BvcywgX19uLCBfX3N0ci5fTV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUg
X19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgIHNpemVfdHlwZSBfX3BvczIs
IHNpemVfdHlwZSBfX24yKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgIHNp
emVfdHlwZSBfX24yKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5
cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1
cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uMSwgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
cykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9z
LCBzaXplX3R5cGUgX19uMSwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0
dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwg
X19uMiwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9y
IF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsg
cmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5z
aXplKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19p
MSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAt
IF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwgX19zLCBfX24pOyB9CgogICAgICBiYXNpY19zdHJp
bmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0No
YXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLCB0
cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl
cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbiwgX0NoYXJU
IF9fYyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAog
IF9JbnB1dEl0ZXJhdG9yIF9fazEsIF9JbnB1dEl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1
cm4gX01fcmVwbGFjZShfX2kxLCBfX2kyLCBfX2sxLCBfX2syLAogICAgICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsgfQoKCgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig
X19pMiwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+
cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAogICAgICAgICAgX19rMSwg
X19rMiAtIF9fazEpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0
b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQq
IF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCks
IF9faTIgLSBfX2kxLAogICAgICAgICAgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgaXRl
cmF0b3IgX19rMSwgaXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNl
KF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICBfX2sxLmJhc2UoKSwg
X19rMiAtIF9fazEpOwogfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJh
dG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJh
dG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2lu
KCksIF9faTIgLSBfX2kxLAogICAgICAgICAgX19rMS5iYXNlKCksIF9fazIgLSBfX2sxKTsKIH0K
CiAgICBwcml2YXRlOgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRv
ciBfX2kyLCBfSW5wdXRJdGVyYXRvciBfX2sxLAogICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlu
cHV0X2l0ZXJhdG9yX3RhZyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
PgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3Ig
X19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyYXRvciBfX2sxLAogICAgIF9Gb3J3YXJk
SXRlcmF0b3IgX19rMik7CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAg
c3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9J
bkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgX19mYWxzZV90eXBlKQogewogICAg
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0luSXRlcj46Oml0ZXJhdG9y
X2NhdGVnb3J5IF9UYWc7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KF9fYmVnLCBfX2Vu
ZCwgX19hLCBfVGFnKCkpOwogfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAg
ICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywg
X0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICBfX3RydWVfdHlwZSkKIHsKICAg
cmV0dXJuIF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwKICAgICAg
ICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX19lbmQpLCBfX2EpOwogfQoKICAgICAgdGVtcGxh
dGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0
cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKIHsK
ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRl
Z3JhbDsKICAgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2EsIF9JbnRl
Z3JhbCgpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAg
ICBzdGF0aWMgX0NoYXJUKgogICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0lu
SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn
KTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFy
VCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXIgX19iZWcsIF9Gd2RJdGVyIF9fZW5kLCBj
b25zdCBfQWxsb2MmIF9fYSwKICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCiAgICAgIHN0
YXRpYyBfQ2hhclQqCiAgICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19yZXEsIF9DaGFyVCBf
X2MsIGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAg
ICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zID0gMCkg
Y29uc3Q7CgogICAgICB2b2lkCiAgICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19zKTsKCgogICAgICBjb25zdCBfQ2hhclQqCiAgICAgIGNfc3RyKCkgY29u
c3QKICAgICAgewoKIHNpemVfdHlwZSBfX24gPSB0aGlzLT5zaXplKCk7CiB0cmFpdHNfdHlwZTo6
YXNzaWduKF9NX2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJu
IF9NX2RhdGEoKTsKICAgICAgfQoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29u
c3QgeyByZXR1cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRf
YWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlw
ZQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw
ZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3Ry
aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXpl
X3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6
bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBz
aXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXpl
KCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAg
ICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5n
dGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChfQ2hhclQgX19jLCBzaXpl
X3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2Zp
cnN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3Bv
cywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2Yo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7
CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywg
c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJz
dF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXpl
X3R5cGUKICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAw
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fYywgX19wb3MpOyB9CgogICAgICBz
aXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp
emVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFz
dF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5
cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3Ms
IHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9v
Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5n
dGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9f
Yywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZp
bmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9v
Zihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9z
LCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rf
b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgc2l6ZV90eXBlIF9fbikg
Y29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0No
YXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7
IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBz
aXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xh
c3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5w
b3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zdHIuZGF0
YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf
bGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAg
c2l6ZV90eXBlIF9fbikgY29uc3Q7CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90
X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBl
OjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29m
KF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OwoKICAgICAgYmFzaWNf
c3RyaW5nCiAgICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0g
bnBvcykgY29uc3QKICAgICAgewogaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICBfX3Rocm93
X291dF9vZl9yYW5nZSgoImJhc2ljX3N0cmluZzo6c3Vic3RyIikpOwogcmV0dXJuIGJhc2ljX3N0
cmluZygqdGhpcywgX19wb3MsIF9fbik7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJl
KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICAgIHsKIHNpemVfdHlwZSBfX3Np
emUgPSB0aGlzLT5zaXplKCk7CiBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKIHNp
emVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fc2l6ZSwgX19vc2l6ZSk7CgogaW50IF9fciA9IHRy
YWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xlbik7CiBpZiAo
IV9fcikKICAgX19yID0gX19zaXplIC0gX19vc2l6ZTsKIHJldHVybiBfX3I7CiAgICAgIH0KCiAg
ICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29u
c3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShz
aXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0
ciwKICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdDsKCiAgICAg
IGludAogICAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCgoKICAgICAgaW50
CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0No
YXJUKiBfX3MpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9z
LCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICBzaXplX3R5cGUgX19u
MikgY29uc3Q7CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKCkKICAgIDogX01fZGF0YXBsdXMoX1Nf
ZW1wdHlfcmVwKCkuX01fcmVmY29weSgpLCBfQWxsb2MoKSkgeyB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgIGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAg
X19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3Qg
X0NoYXJUKiBfX2xocywKICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf
QWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9B
bGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgY29uc3QgX0NoYXJUKiBf
X3JocykKICAgIHsKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBf
X3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0
cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fbGhzLCBfQ2hhclQgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAg
X19zdHJpbmdfdHlwZSBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlw
ZSgxKSwgX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fbGhzLAogICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0g
MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9DaGFyVCog
X19saHMsCiAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA9PSAwOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykK
ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAh
PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJU
KiBfX2xocywKICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhz
KQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgIT0gMDsgfQoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8
IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgY29uc3QgX0NoYXJU
KiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAg
IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAg
eyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPiAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19saHMsCiAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhz
KQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVy
biBfX3Jocy5jb21wYXJlKF9fbGhzKSA8IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19saHMsCiAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykK
ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgIGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogIHsgcmV0dXJu
IF9fcmhzLmNvbXBhcmUoX19saHMpID49IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19saHMsCiAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykK
ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICBjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJu
IF9fcmhzLmNvbXBhcmUoX19saHMpIDw9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAg
IHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IF9fbGhzLnN3
YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAg
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAogICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JiBfX2lzLAogICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fc3RyLCBfQ2hhclQgX19kZWxpbSk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08
X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mIF9faXMsCiAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19z
dHIpOwp9CiMgNTQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0
MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJpbmciIDIg
MwoKCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2FsZ29yaXRobSIgMSAz
CiMgNjUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9hbGdvcml0aG0iIDMKCgoK
CiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIg
MSAzCiMgNjQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdv
LmgiIDMKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfaGVh
cC5oIiAxIDMKIyA2MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz
MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3Rs
X2hlYXAuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAgdm9p
ZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgX0Rpc3Rh
bmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCiAgICB7
CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAg
d2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkg
PCBfX3ZhbHVlKSB7CiAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3Bh
cmVudCk7CiBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogX19wYXJlbnQgPSAoX19ob2xlSW5kZXgg
LSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1
ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAg
aW5saW5lIHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICBf
VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgX0Rpc3RhbmNlVHlwZTsKCgogICAg
IAoKICAgICAKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFz
dCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICBfVmFsdWVUeXBlKCooX19s
YXN0IC0gMSkpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcCwKICAgICB0eXBlbmFtZSBfQ29t
cGFyZT4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp
cnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBf
X3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9
IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJ
bmRleCAmJiBfX2NvbXAoKihfX2ZpcnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgewogKihfX2Zp
cnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogX19ob2xlSW5kZXgg
PSBfX3BhcmVudDsKIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB9CiAg
ICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBp
bmxpbmUgdm9pZAogICAgcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgX0NvbXBhcmUgX19jb21wKQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cmF0b3I+Ojp2YWx1ZV90eXBlCiAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQog
ICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoKICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rp
c3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlVHlwZSgwKSwKICAg
IF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFt
ZSBfVHA+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBf
X3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4Owog
ICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgICAg
IHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKIGlmICgqKF9fZmlyc3QgKyBfX3NlY29u
ZENoaWxkKSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKQogICBfX3NlY29uZENo
aWxkLS07CiAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENo
aWxkKTsKIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKIF9fc2Vjb25kQ2hpbGQgPSAyICog
KF9fc2Vjb25kQ2hpbGQgKyAxKTsKICAgICAgfQogICAgICBpZiAoX19zZWNvbmRDaGlsZCA9PSBf
X2xlbikgewogKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25k
Q2hpbGQgLSAxKSk7CiBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAgICB9CiAg
ICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVl
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBl
bmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAg
X19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBf
X2ZpcnN0KSwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6
dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX19wb3BfaGVhcChf
X2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkp
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBl
bmFtZSBfRGlzdGFuY2UsCiAgICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg
dm9pZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rp
c3RhbmNlIF9faG9sZUluZGV4LAogICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSwgX0Nv
bXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUlu
ZGV4OwogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7
CiAgICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKIGlmIChfX2NvbXAoKihfX2Zp
cnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkK
ICAgX19zZWNvbmRDaGlsZC0tOwogKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0
ICsgX19zZWNvbmRDaGlsZCk7CiBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiBfX3NlY29u
ZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAgaWYgKF9fc2Vj
b25kQ2hpbGQgPT0gX19sZW4pIHsKICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJz
dCArIChfX3NlY29uZENoaWxkIC0gMSkpOwogX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0g
MTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJ
bmRleCwgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5s
aW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAg
X19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBf
X2ZpcnN0KSwKICAgICAgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2
b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAK
CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwg
X19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSwgX19jb21w
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAg
dm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgIF9WYWx1ZVR5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAg
IAoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5j
ZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFy
ZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiBfX2FkanVzdF9oZWFw
KF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVu
dCkpKTsKIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiBfX3BhcmVudC0tOwogICAgICB9CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUg
X0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgX0NvbXBh
cmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
UmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZQogICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoKICAgICAgaWYgKF9fbGFz
dCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xh
c3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikv
MjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50
LCBfX2xlbiwKICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkp
LCBfX2NvbXApOwogaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKIF9fcGFyZW50LS07CiAgICAg
IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAg
dm9pZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewoKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUg
KF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0pOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgdm9pZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgX0NvbXBhcmUgX19jb21w
KQogICAgewoKICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiBwb3Bf
aGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKICAgIH0KCn0KIyA2NSAiL2djYy9kamUv
YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu
My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMiAzCiMgMSAiL2djYy9k
amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMgNjQg
Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF90ZW1wYnVmLmgiIDMK
bmFtZXNwYWNlIHN0ZAp7CiMgNzQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9i
aXRzL3N0bF90ZW1wYnVmLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNs
YXNzIF9UcD4KICBjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlcgp7CgogCgogIHB0cmRpZmZfdCBfTV9v
cmlnaW5hbF9sZW47CiAgcHRyZGlmZl90IF9NX2xlbjsKICBfVHAqIF9NX2J1ZmZlcjsKCgogIHZv
aWQgX01fYWxsb2NhdGVfYnVmZmVyKCkgewogICAgX01fb3JpZ2luYWxfbGVuID0gX01fbGVuOwog
ICAgX01fYnVmZmVyID0gMDsKCiAgICBpZiAoX01fbGVuID4gKHB0cmRpZmZfdCkoMjE0NzQ4MzY0
NyAvIHNpemVvZihfVHApKSkKICAgICAgX01fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHAp
OwoKICAgIHdoaWxlIChfTV9sZW4gPiAwKSB7CiAgICAgIF9NX2J1ZmZlciA9IChfVHAqKSBtYWxs
b2MoX01fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgICBpZiAoX01fYnVmZmVyKQogICAgICAgIGJy
ZWFrOwogICAgICBfTV9sZW4gLz0gMjsKICAgIH0KICB9CgogIHZvaWQgX01faW5pdGlhbGl6ZV9i
dWZmZXIoY29uc3QgX1RwJiwgX190cnVlX3R5cGUpIHt9CiAgdm9pZCBfTV9pbml0aWFsaXplX2J1
ZmZlcihjb25zdCBfVHAmIHZhbCwgX19mYWxzZV90eXBlKSB7CiAgICB1bmluaXRpYWxpemVkX2Zp
bGxfbihfTV9idWZmZXIsIF9NX2xlbiwgdmFsKTsKICB9CgpwdWJsaWM6CgogIHB0cmRpZmZfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gX01fbGVuOyB9CgogIHB0cmRpZmZfdCByZXF1ZXN0ZWRfc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX29yaWdpbmFsX2xlbjsgfQoKICBfVHAqIGJlZ2luKCkgeyBy
ZXR1cm4gX01fYnVmZmVyOyB9CgogIF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVyICsgX01f
bGVuOyB9CgogIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv
cndhcmRJdGVyYXRvciBfX2xhc3QpIHsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFp
dHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcgogICAgICAgICAgICBfVHJp
dmlhbDsKCiAgICB0cnkgewogICAgICBfTV9sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9f
bGFzdCk7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOwogICAgICBpZiAoX01fbGVuID4gMCkK
ICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9
CiAgICBjYXRjaCguLi4pCiAgICAgIHsKIGZyZWUoX01fYnVmZmVyKTsKIF9NX2J1ZmZlciA9IDA7
CiBfTV9sZW4gPSAwOwogdGhyb3c7CiAgICAgIH0KICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigp
IHsKICAgIF9EZXN0cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsgX01fbGVuKTsKICAgIGZyZWUo
X01fYnVmZmVyKTsKICB9Cgpwcml2YXRlOgoKICBfVGVtcG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVt
cG9yYXJ5X2J1ZmZlciYpIHt9CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZm
ZXImKSB7fQp9OwoKfQojIDY2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0
cy9zdGxfYWxnby5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgODQgIi9nY2MvZGplL2J1aWxk
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9s
aWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBj
b25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpCiAgICB7CgogICAgIAogICAgICBpZiAoX19h
IDwgX19iKQogaWYgKF9fYiA8IF9fYykKICAgcmV0dXJuIF9fYjsKIGVsc2UgaWYgKF9fYSA8IF9f
YykKICAgcmV0dXJuIF9fYzsKIGVsc2UKICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19h
IDwgX19jKQogcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19iIDwgX19jKQogcmV0dXJuIF9f
YzsKICAgICAgZWxzZQogcmV0dXJuIF9fYjsKICAgIH0KIyAxMTggIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFu
KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJl
IF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKQogaWYgKF9f
Y29tcChfX2IsIF9fYykpCiAgIHJldHVybiBfX2I7CiBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2Mp
KQogICByZXR1cm4gX19jOwogZWxzZQogICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2Nv
bXAoX19hLCBfX2MpKQogcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19jb21wKF9fYiwgX19j
KSkKIHJldHVybiBfX2M7CiAgICAgIGVsc2UKIHJldHVybiBfX2I7CiAgICB9CiMgMTUwICIvZ2Nj
L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Z1bmN0aW9uPgogICAgX0Z1bmN0aW9u
CiAgICBmb3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRnVu
Y3Rpb24gX19mKQogICAgewoKICAgICAKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KQogX19mKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZjsKICAgIH0KCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg
X0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LAogIGNvbnN0IF9UcCYgX192YWwsCiAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3
aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgISgqX19maXJzdCA9PSBfX3ZhbCkpCiArK19fZmly
c3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgog
ICAgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgIF9Q
cmVkaWNhdGUgX19wcmVkLAogICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmlyc3QpKQogKytfX2ZpcnN0Owog
ICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZp
bmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAog
IGNvbnN0IF9UcCYgX192YWwsCiAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAg
ICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVu
Y2VfdHlwZSBfX3RyaXBfY291bnQKID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogICAgICBm
b3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogaWYgKCpfX2ZpcnN0
ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICsrX19maXJzdDsKCiBpZiAoKl9fZmlyc3QgPT0g
X192YWwpIHJldHVybiBfX2ZpcnN0OwogKytfX2ZpcnN0OwoKIGlmICgqX19maXJzdCA9PSBfX3Zh
bCkgcmV0dXJuIF9fZmlyc3Q7CiArK19fZmlyc3Q7CgogaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy
ZXR1cm4gX19maXJzdDsKICsrX19maXJzdDsKICAgICAgfQoKICAgICAgc3dpdGNoKF9fbGFzdCAt
IF9fZmlyc3QpIHsKICAgICAgY2FzZSAzOgogaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4g
X19maXJzdDsKICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogaWYgKCpfX2ZpcnN0ID09IF9fdmFs
KSByZXR1cm4gX19maXJzdDsKICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogaWYgKCpfX2ZpcnN0
ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICsrX19maXJzdDsKICAgICAgY2FzZSAwOgogICAg
ICBkZWZhdWx0OgogcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiA9IChf
X2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAgICAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsg
LS1fX3RyaXBfY291bnQpIHsKIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsK
ICsrX19maXJzdDsKCiBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiArK19f
Zmlyc3Q7CgogaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogKytfX2ZpcnN0
OwoKIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICsrX19maXJzdDsKICAg
ICAgfQoKICAgICAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICAgICAgY2FzZSAzOgogaWYg
KF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogKytfX2ZpcnN0OwogICAgICBjYXNl
IDI6CiBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiArK19fZmlyc3Q7CiAg
ICAgIGNhc2UgMToKIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICsrX19m
aXJzdDsKICAgICAgY2FzZSAwOgogICAgICBkZWZhdWx0OgogcmV0dXJuIF9fbGFzdDsKICAgICAg
fQogICAgfQojIDI4OSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz
MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4K
ICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCiAgICAgCiAgICAgCgogICAg
ICByZXR1cm4gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0ZXJhdG9yX2NhdGVnb3J5
KF9fZmlyc3QpKTsKICAgIH0KIyAzMDkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk
ZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl
bmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmRfaWYoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICBfUHJlZGljYXRlIF9fcHJlZCkK
ICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3Qs
IF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMgMzI5ICIvZ2Nj
L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGphY2VudF9m
aW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAg
ICAKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKIHJldHVybiBfX2xhc3Q7CiAg
ICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAh
PSBfX2xhc3QpIHsKIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICByZXR1cm4gX19maXJzdDsK
IF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbGFzdDsKICAgIH0KIyAz
NTggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNh
dGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3By
ZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKIHJl
dHVybiBfX2xhc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3
aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAq
X19uZXh0KSkKICAgcmV0dXJuIF9fZmlyc3Q7CiBfX2ZpcnN0ID0gX19uZXh0OwogICAgICB9CiAg
ICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgMzg3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz
L2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX1RwPgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAog
ICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlw
ZSBfX24gPSAwOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiBp
ZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9
CiMgNDExICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4K
ICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBl
CiAgICBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJl
ZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiBpZiAoX19wcmVkKCpfX2ZpcnN0KSkK
ICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDUwICIvZ2NjL2RqZS9idWlsZC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli
c3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjEK
ICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEs
CiAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwg
X19maXJzdDIgPT0gX19sYXN0MikKIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9yd2FyZEl0
ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1wID09IF9f
bGFzdDIpCiByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKCgoKICAg
ICAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogICAgICBfX3AxID0gX19maXJzdDI7ICsrX19w
MTsKCiAgICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogICAgICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogX19maXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xh
c3QxLCAqX19maXJzdDIpOwogaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgIHJldHVybiBfX2xh
c3QxOwoKIF9fcCA9IF9fcDE7CiBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKIGlmICgrK19fY3VycmVu
dCA9PSBfX2xhc3QxKQogICByZXR1cm4gX19sYXN0MTsKCiB3aGlsZSAoKl9fY3VycmVudCA9PSAq
X19wKSB7CiAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgIHJldHVybiBfX2ZpcnN0MTsKICAg
aWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgcmV0dXJuIF9fbGFzdDE7CiB9CgogKytf
X2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDE7CiAgICB9CiMgNTIyICIvZ2Nj
L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwgdHlwZW5h
bWUgX0JpbmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFyY2goX0ZvcndhcmRJdGVy
MSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgX0ZvcndhcmRJdGVyMiBfX2Zp
cnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgX0JpbmFyeVByZWQgX19wcmVkaWNhdGUp
CiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFz
dDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9y
d2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1w
ID09IF9fbGFzdDIpIHsKIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0
ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICsrX19maXJzdDE7CiByZXR1cm4gX19maXJzdDE7
CiAgICAgIH0KCgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogICAgICBfX3AxID0g
X19maXJzdDI7ICsrX19wMTsKCiAgICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJz
dDE7CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogd2hpbGUgKF9fZmlyc3Qx
ICE9IF9fbGFzdDEpIHsKICAgaWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkK
ICAgICBicmVhazsKICAgKytfX2ZpcnN0MTsKIH0KIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx
ICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICsrX19maXJzdDE7CiBp
ZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgcmV0dXJuIF9fbGFzdDE7CgogX19wID0gX19wMTsK
IF9fY3VycmVudCA9IF9fZmlyc3QxOwogaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpIHJldHVy
biBfX2xhc3QxOwoKIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkgewogICBp
ZiAoKytfX3AgPT0gX19sYXN0MikKICAgICByZXR1cm4gX19maXJzdDE7CiAgIGlmICgrK19fY3Vy
cmVudCA9PSBfX2xhc3QxKQogICAgIHJldHVybiBfX2xhc3QxOwogfQoKICsrX19maXJzdDE7CiAg
ICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDU5NiAiL2djYy9kamUvYnVpbGQv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp
YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3
YXJkSXRlcgogICAgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7Cgog
ICAgIAogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiByZXR1cm4gX19maXJz
dDsKICAgICAgZWxzZSB7CiBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsK
IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0g
MTsKICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICsrX19pOwogICB3aGlsZSAoX19p
ICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAqX19pID09IF9fdmFsKSB7CiAgICAgKytfX2k7CiAg
ICAgLS1fX247CiAgIH0KICAgaWYgKF9fbiA9PSAwKQogICAgIHJldHVybiBfX2ZpcnN0OwogICBl
bHNlCiAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKIH0KIHJldHVybiBf
X2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2NDMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j
bHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jp
bmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBf
VHAmIF9fdmFsLAogICAgICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAK
ICAgICAKCgogICAgICBpZiAoX19jb3VudCA8PSAwKQogcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVs
c2Ugewogd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgIGlmIChfX2JpbmFyeV9wcmVkKCpf
X2ZpcnN0LCBfX3ZhbCkpCiAgICAgYnJlYWs7CiAgICsrX19maXJzdDsKIH0KIHdoaWxlIChfX2Zp
cnN0ICE9IF9fbGFzdCkgewogICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgX0Zvcndh
cmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICsrX19pOwogICB3aGlsZSAoX19pICE9IF9fbGFzdCAm
JiBfX24gIT0gMCAmJiBfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkgewogICAgICsrX19pOwog
ICAgIC0tX19uOwogICB9CiAgIGlmIChfX24gPT0gMCkKICAgICByZXR1cm4gX19maXJzdDsKICAg
ZWxzZSB7CiAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QpIHsKICAgICAgIGlmIChfX2JpbmFyeV9w
cmVkKCpfX2ksIF9fdmFsKSkKICBicmVhazsKICAgICAgICsrX19pOwogICAgIH0KICAgICBfX2Zp
cnN0ID0gX19pOwogICB9CiB9CiByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgNjk3ICIv
Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAg
IF9Gb3J3YXJkSXRlcjIKICAgIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9G
b3J3YXJkSXRlcjEgX19sYXN0MSwKICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAg
ICAKICAgICAKICAgICAKCgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFz
dDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiBpdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3Qy
KTsKICAgICAgcmV0dXJuIF9fZmlyc3QyOwogICAgfQojIDczMiAiL2djYy9kamUvYnVpbGQvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0
ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVW5hcnlPcGVyYXRpb24+
CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3BlcmF0aW9u
IF9fdW5hcnlfb3ApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3Qg
IT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAqX19yZXN1bHQgPSBfX3VuYXJ5X29w
KCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDc2NSAiL2djYy9kamUv
YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu
My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1
dEl0ZXIsCiAgICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAg
IHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgIF9C
aW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgog
ICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIs
ICsrX19yZXN1bHQpCiAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19maXJzdDEsICpfX2ZpcnN0
Mik7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3OTYgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2UoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgY29uc3QgX1RwJiBfX29sZF92
YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoK
CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKIGlmICgqX19maXJz
dCA9PSBfX29sZF92YWx1ZSkKICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4MjUg
Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVu
YW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYg
X19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgKl9f
Zmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4NTYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst
djMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIK
ICAgIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3Qg
X1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAg
cmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDg4OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p
bmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs
IHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5
cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICByZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs
CiAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoK
ICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0LCArK19fcmVzdWx0KQogKl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3
X3ZhbHVlIDogKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA5MTggIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICB2b2lk
CiAgICBnZW5lcmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg
X0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogKl9fZmlyc3QgPSBfX2dlbigpOwogICAgfQojIDk0
MiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUg
X0dlbmVyYXRvcj4KICAgIF9PdXRwdXRJdGVyCiAgICBnZW5lcmF0ZV9uKF9PdXRwdXRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCgoKCiAgICAg
IGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICpfX2ZpcnN0ID0gX19nZW4oKTsK
ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgOTY5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr
LXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVy
CiAgICByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
IF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAog
ICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp
CiBpZiAoISgqX19maXJzdCA9PSBfX3ZhbHVlKSkgewogICAqX19yZXN1bHQgPSAqX19maXJzdDsK
ICAgKytfX3Jlc3VsdDsKIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMDMgIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUg
X1ByZWRpY2F0ZT4KICAgIF9PdXRwdXRJdGVyCiAgICByZW1vdmVfY29weV9pZihfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf
UHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKIGlmICghX19wcmVkKCpfX2ZpcnN0KSkg
ewogICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgKytfX3Jlc3VsdDsKIH0KICAgICAgcmV0dXJu
IF9fcmVzdWx0OwogICAgfQojIDEwMzkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk
ZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5
cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoK
ICAgICAKICAgICAKCiAgICAgCgoKICAgICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0
LCBfX3ZhbHVlKTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVy
biBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAgIDogcmVtb3ZlX2NvcHkoKytf
X2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1ZSk7CiAgICB9CiMgMTA3MyAiL2djYy9kamUvYnVp
bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
L2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgog
ICAgcmVtb3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIF9fZmly
c3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICAgICAgX0ZvcndhcmRJdGVy
IF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QK
ICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX19wcmVk
KTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg
X091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAg
ICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9f
cmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiBpZiAo
IShfX3ZhbHVlID09ICpfX2ZpcnN0KSkgewogICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICorK19f
cmVzdWx0ID0gX192YWx1ZTsKIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CgoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4K
ICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgZm9yd2FyZF9p
dGVyYXRvcl90YWcpCiAgICB7CgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hp
bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiBpZiAoISgqX19yZXN1bHQgPT0gKl9fZmlyc3QpKQog
ICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0K
IyAxMTQ1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+
CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAg
IAogICAgIAoKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
T3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsKCiAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICByZXR1cm4gX191bmlxdWVfY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTE3MCAi
L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFt
ZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0LAogICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgb3V0cHV0X2l0ZXJh
dG9yX3RhZykKICAgIHsKCiAgICAgCgoKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3Vs
dCA9IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogaWYgKCFfX2Jp
bmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkgewogICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAg
ICorK19fcmVzdWx0ID0gX192YWx1ZTsKIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9
CiMgMTE5OSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRl
ciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmlx
dWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgX0Zvcndh
cmRJdGVyIF9fcmVzdWx0LAogICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAg
Zm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCgogICAgICAqX19yZXN1bHQgPSAq
X19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiBpZiAoIV9fYmluYXJ5
X3ByZWQoKl9fcmVzdWx0LCAqX19maXJzdCkpICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAg
IHJldHVybiArK19fcmVzdWx0OwogICAgfQojIDEyMzIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst
djMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAg
IGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICBfQmluYXJ5UHJlZGlj
YXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0
ZXJUeXBlOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAg
ICAgIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwKX19yZXN1bHQsIF9fYmlu
YXJ5X3ByZWQsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxMjYzICIvZ2NjL2RqZS9idWlsZC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk
YysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogIAogIAoKCiAgIF9fZmlyc3QgPSBhZGph
Y2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0
LCBfX2xhc3QsIF9fZmlyc3QpOwogICAgfQojIDEyOTAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst
djMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVu
aXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCgog
ICAgICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fYmluYXJ5X3By
ZWQpOwogICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0LCBf
X2JpbmFyeV9wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0
aW9uYWxJdGVyPgogICAgdm9pZAogICAgX19yZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0
b3JfdGFnKQogICAgewogICB3aGlsZSAodHJ1ZSkKICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qg
fHwgX19maXJzdCA9PSAtLV9fbGFzdCkKICAgIHJldHVybjsKICAgICBlbHNlCiAgICBpdGVyX3N3
YXAoX19maXJzdCsrLCBfX2xhc3QpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcpCiAgICB7CiAgIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0KQogICAgIGl0ZXJf
c3dhcChfX2ZpcnN0KyssIC0tX19sYXN0KTsKICAgIH0KIyAxMzQ5ICIvZ2NjL2RqZS9idWlsZC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli
c3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJldmVyc2UoX0JpZGlyZWN0
aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogIAoK
ICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0
KSk7CiAgICB9CiMgMTM3NCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y
MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlw
ZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcmV2ZXJzZV9jb3B5KF9CaWRp
cmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAo
X19maXJzdCAhPSBfX2xhc3QpIHsKIC0tX19sYXN0OwogKl9fcmVzdWx0ID0gKl9fbGFzdDsKICsr
X19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEzOTkgIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+CiAgICBfRXVjbGlkZWFuUmluZ0Vs
ZW1lbnQKICAgIF9fZ2NkKF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX20sIF9FdWNsaWRlYW5SaW5n
RWxlbWVudCBfX24pCiAgICB7CiAgICAgIHdoaWxlIChfX24gIT0gMCkgewogX0V1Y2xpZGVhblJp
bmdFbGVtZW50IF9fdCA9IF9fbSAlIF9fbjsKIF9fbSA9IF9fbjsKIF9fbiA9IF9fdDsKICAgICAg
fQogICAgICByZXR1cm4gX19tOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3
YXJkSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAg
ICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlk
ZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKIHJldHVybjsKCiAgICAgIF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogICAgICBkbyB7CiBzd2FwKCpfX2ZpcnN0KyssICpfX2Zp
cnN0MisrKTsKIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICBfX21pZGRsZSA9IF9fZmlyc3Qy
OwogICAgICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpOwoKICAgICAgX19maXJzdDIgPSBf
X21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpIHsKIHN3YXAoKl9fZmly
c3QrKywgKl9fZmlyc3QyKyspOwogaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgIF9fbWlkZGxl
ID0gX19maXJzdDI7CiBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgIF9fZmlyc3QyID0g
X19taWRkbGU7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl
Y3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19m
aXJzdCwKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19sYXN0LAogICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7
CgogICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBf
X21pZGRsZSkpCiByZXR1cm47CgogICAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9f
bGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CgogICAgICB3aGlsZSAoX19maXJz
dCAhPSBfX21pZGRsZSAmJiBfX21pZGRsZSAhPSBfX2xhc3QpCiBzd2FwICgqX19maXJzdCsrLCAq
LS1fX2xhc3QpOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpIHsKIF9fcmV2ZXJzZShf
X21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgfQog
ICAgICBlbHNlIHsKIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9p
dGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsCiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAg
ewoKICAgICAKCgogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3QgPT0g
X19taWRkbGUpKQogcmV0dXJuOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVl
X3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0
OwogICAgICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFu
Y2UgX19sID0gX19uIC0gX19rOwoKICAgICAgaWYgKF9fayA9PSBfX2wpIHsKIHN3YXBfcmFuZ2Vz
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiByZXR1cm47CiAgICAgIH0KCiAgICAgIF9E
aXN0YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7CgogICAgICBmb3IgKF9EaXN0YW5jZSBfX2kg
PSAwOyBfX2kgPCBfX2Q7IF9faSsrKSB7CiBfVmFsdWVUeXBlIF9fdG1wID0gKl9fZmlyc3Q7CiBf
UmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0OwoKIGlmIChfX2sgPCBfX2wpIHsKICAgZm9y
IChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19sL19fZDsgX19qKyspIHsKICAgICBpZiAoX19w
ID4gX19maXJzdCArIF9fbCkgewogICAgICAgKl9fcCA9ICooX19wIC0gX19sKTsKICAgICAgIF9f
cCAtPSBfX2w7CiAgICAgfQoKICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgIF9fcCArPSBf
X2s7CiAgIH0KIH0KCiBlbHNlIHsKICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19r
L19fZCAtIDE7IF9faiArKykgewogICAgIGlmIChfX3AgPCBfX2xhc3QgLSBfX2spIHsKICAgICAg
ICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICBfX3AgKz0gX19rOwogICAgIH0KCiAgICAgKl9f
cCA9ICogKF9fcCAtIF9fbCk7CiAgICAgX19wIC09IF9fbDsKICAgfQogfQoKICpfX3AgPSBfX3Rt
cDsKICsrX19maXJzdDsKICAgICAgfQogICAgfQojIDE1NjEgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y
d2FyZEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAg
IAoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6
aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwogICAgICBfX3JvdGF0ZShfX2ZpcnN0LCBfX21p
ZGRsZSwgX19sYXN0LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTU4OSAiL2djYy9kamUvYnVpbGQv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp
YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAg
cm90YXRlX2NvcHkoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwK
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0
KQogICAgewoKICAgICAKICAgICAKCgogICAgICByZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRs
ZSwgY29weShfX21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOwogICAgfQojIDE2MTIgIi9nY2Mv
ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgX0Rpc3RhbmNlCiAgICBfX3JhbmRvbV9u
dW1iZXIoX0Rpc3RhbmNlIF9fbikKICAgIHsKCiAgICAgIHJldHVybiBscmFuZDQ4KCkgJSBfX247
CgoKCiAgICB9CiMgMTYzNCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y
MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAg
aW5saW5lIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0g
X19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogaXRlcl9zd2FwKF9faSwgX19maXJz
dCArIF9fcmFuZG9tX251bWJlcigoX19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CiMgMTY2MCAi
L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUmFuZG9tTnVtYmVy
R2VuZXJhdG9yPgogICAgdm9pZAogICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgIF9SYW5kb21OdW1iZXJHZW5l
cmF0b3ImIF9fcmFuZCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7
IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogaXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZCgo
X19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9G
b3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX19w
YXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgX1By
ZWRpY2F0ZSBfX3ByZWQsCiAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICB3aGlsZSAoX19wcmVkKCpf
X2ZpcnN0KSkKIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAg
IF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKCsrX19uZXh0ICE9
IF9fbGFzdCkKIGlmIChfX3ByZWQoKl9fbmV4dCkpIHsKICAgc3dhcCgqX19maXJzdCwgKl9fbmV4
dCk7CiAgICsrX19maXJzdDsKIH0KCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0
ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcgogICAgX19wYXJ0aXRpb24oX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgX1ByZWRpY2F0ZSBfX3By
ZWQsCiAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlICh0cnVl
KSB7CiB3aGlsZSAodHJ1ZSkKICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgIHJldHVybiBf
X2ZpcnN0OwogICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICsrX19maXJzdDsKICAg
ZWxzZQogICAgIGJyZWFrOwogLS1fX2xhc3Q7CiB3aGlsZSAodHJ1ZSkKICAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KQogICAgIHJldHVybiBfX2ZpcnN0OwogICBlbHNlIGlmICghX19wcmVkKCpfX2xh
c3QpKQogICAgIC0tX19sYXN0OwogICBlbHNlCiAgICAgYnJlYWs7CiBpdGVyX3N3YXAoX19maXJz
dCwgX19sYXN0KTsKICsrX19maXJzdDsKICAgICAgfQogICAgfQojIDE3NDggIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0Zvcndh
cmRJdGVyCiAgICBwYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAg
ICAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9y
X2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBf
Rm9yd2FyZEl0ZXIKICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs
IF9EaXN0YW5jZSBfX2xlbikKICAgIHsKICAgICAgaWYgKF9fbGVuID09IDEpCiByZXR1cm4gX19w
cmVkKCpfX2ZpcnN0KSA/IF9fbGFzdCA6IF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21p
ZGRsZSA9IF9fZmlyc3Q7CiAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICAg
IF9Gb3J3YXJkSXRlciBfX2JlZ2luID0gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJz
dCwgX19taWRkbGUsCiAgICAgICBfX3ByZWQsCiAgICAgICBfX2xlbiAvIDIpOwogICAgICBfRm9y
d2FyZEl0ZXIgX19lbmQgPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19s
YXN0LAogICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyKTsK
ICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiAgICAgIGFkdmFuY2UoX19i
ZWdpbiwgc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19lbmQpKTsKICAgICAgcmV0dXJuIF9fYmVn
aW47CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt
ZSBfUG9pbnRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4K
ICAgIF9Gb3J3YXJkSXRlcgogICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgX1ByZWRpY2F0ZSBfX3ByZWQs
IF9EaXN0YW5jZSBfX2xlbiwKICAgIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgX0Rpc3RhbmNlIF9f
YnVmZmVyX3NpemUpCiAgICB7CiAgICAgIGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7CiBf
Rm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsKIF9Qb2ludGVyIF9fcmVzdWx0MiA9IF9f
YnVmZmVyOwogZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgaWYgKF9f
cHJlZCgqX19maXJzdCkpIHsKICAgICAqX19yZXN1bHQxID0gKl9fZmlyc3Q7CiAgICAgKytfX3Jl
c3VsdDE7CiAgIH0KICAgZWxzZSB7CiAgICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAgICsr
X19yZXN1bHQyOwogICB9CiBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiBy
ZXR1cm4gX19yZXN1bHQxOwogICAgICB9CiAgICAgIGVsc2UgewogX0ZvcndhcmRJdGVyIF9fbWlk
ZGxlID0gX19maXJzdDsKIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiBfRm9yd2FyZEl0
ZXIgX19iZWdpbiA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRs
ZSwKICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgIF9fbGVuIC8gMiwKICAgICAgICAgIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9zaXplKTsKIF9Gb3J3YXJkSXRlciBfX2VuZCA9IF9fc3RhYmxlX3BhcnRp
dGlvbl9hZGFwdGl2ZSggX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgX19wcmVkLAogICAgICAg
ICBfX2xlbiAtIF9fbGVuIC8gMiwKICAgICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwog
cm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiBhZHZhbmNlKF9fYmVnaW4sIHN0ZDo6
ZGlzdGFuY2UoX19taWRkbGUsIF9fZW5kKSk7CiByZXR1cm4gX19iZWdpbjsKICAgICAgfQogICAg
fQojIDE4NDggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNh
dGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHN0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAg
IHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogcmV0dXJuIF9f
Zmlyc3Q7CiAgICAgIGVsc2UKICAgICAgewogdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5j
ZVR5cGU7CgogX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyLCBfVmFsdWVUeXBlPiBfX2J1
ZihfX2ZpcnN0LCBfX2xhc3QpOwogaWYgKF9fYnVmLnNpemUoKSA+IDApCiAgIHJldHVybiBfX3N0
YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAg
ICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAogICAgICAgICAgX19idWYu
YmVnaW4oKSwgX19idWYuc2l6ZSgpKTsKIGVsc2UKICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVf
cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICBfRGlzdGFuY2VUeXBl
KF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNj
ZXNzSXRlcgogICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICBfVHAgX19waXZvdCkKICAgIHsKICAg
ICAgd2hpbGUgKHRydWUpIHsKIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3QpCiAgICsrX19maXJz
dDsKIC0tX19sYXN0Owogd2hpbGUgKF9fcGl2b3QgPCAqX19sYXN0KQogICAtLV9fbGFzdDsKIGlm
ICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICByZXR1cm4gX19maXJzdDsKIGl0ZXJfc3dhcChfX2Zp
cnN0LCBfX2xhc3QpOwogKytfX2ZpcnN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICBfVHAg
X19waXZvdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB3aGlsZSAodHJ1ZSkgewogd2hp
bGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkpCiAgICsrX19maXJzdDsKIC0tX19sYXN0Owog
d2hpbGUgKF9fY29tcChfX3Bpdm90LCAqX19sYXN0KSkKICAgLS1fX2xhc3Q7CiBpZiAoIShfX2Zp
cnN0IDwgX19sYXN0KSkKICAgcmV0dXJuIF9fZmlyc3Q7CiBpdGVyX3N3YXAoX19maXJzdCwgX19s
YXN0KTsKICsrX19maXJzdDsKICAgICAgfQogICAgfQojIDE5MjkgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICBlbnVtIHsgX01fdGhyZXNob2xk
ID0gMTYgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw
ZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKICAgIHsKICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hpbGUgKF9fdmFsIDwg
Kl9fbmV4dCkgewogKl9fbGFzdCA9ICpfX25leHQ7CiBfX2xhc3QgPSBfX25leHQ7CiAtLV9fbmV4
dDsKICAgICAgfQogICAgICAqX19sYXN0ID0gX192YWw7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICB2b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX1RwIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAgICAgLS1fX25leHQ7CiAgICAgIHdoaWxl
IChfX2NvbXAoX192YWwsICpfX25leHQpKSB7CiAqX19sYXN0ID0gKl9fbmV4dDsKIF9fbGFzdCA9
IF9fbmV4dDsKIC0tX19uZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0K
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAg
IF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsK
CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBf
X2xhc3Q7ICsrX19pKQogICAgICB7CiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsID0gKl9faTsKIGlmIChfX3ZhbCA8ICpfX2ZpcnN0
KSB7CiAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgKl9fZmlyc3Qg
PSBfX3ZhbDsKIH0KIGVsc2UKICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9fdmFs
KTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ
dGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5zZXJ0aW9uX3NvcnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg
X0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVy
bjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAh
PSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsID0gKl9faTsKIGlmIChfX2NvbXAoX192YWws
ICpfX2ZpcnN0KSkgewogICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9faSwgX19pICsgMSk7CiAg
ICpfX2ZpcnN0ID0gX192YWw7CiB9CiBlbHNlCiAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo
X19pLCBfX3ZhbCwgX19jb21wKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5ndWFyZGVkX2lu
c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9SYW5k
b21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogX191bmd1
YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSkpOwogICAgfQoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4K
ICAgIGlubGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChf
UmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKIF9f
dW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwog
ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9p
ZAogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0
ID4gX01fdGhyZXNob2xkKSB7CiBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBf
TV90aHJlc2hvbGQpOwogX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9NX3Ro
cmVzaG9sZCwgX19sYXN0KTsKICAgICAgfQogICAgICBlbHNlCiBfX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRp
b25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly
c3QgPiBfTV90aHJlc2hvbGQpIHsKIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCAr
IF9NX3RocmVzaG9sZCwgX19jb21wKTsKIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmly
c3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCwgX19jb21wKTsKICAgICAgfQogICAgICBlbHNlCiBf
X2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBfU2l6ZQogICAgX19sZyhfU2l6ZSBf
X24pCiAgICB7CiAgICAgIF9TaXplIF9fazsKICAgICAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsg
X19uID4+PSAxKSArK19fazsKICAgICAgcmV0dXJuIF9fazsKICAgIH0KCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemU+CiAgICB2b2lkCiAg
ICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwKICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQpCiAgICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVf
dHlwZSBfVmFsdWVUeXBlOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJl
c2hvbGQpIHsKIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgcGFydGlhbF9zb3J0KF9fZmly
c3QsIF9fbGFzdCwgX19sYXN0KTsKICAgcmV0dXJuOwogfQogLS1fX2RlcHRoX2xpbWl0OwogX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwg
X19sYXN0LAogICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICooX19m
aXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7
CiBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQpOwogX19sYXN0
ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog
ICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsCiAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0LCBfQ29tcGFyZSBfX2Nv
bXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgd2hpbGUgKF9fbGFzdCAt
IF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAg
cGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICByZXR1cm47
CiB9CiAtLV9fZGVwdGhfbGltaXQ7CiBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgIF9fdW5n
dWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICBfVmFsdWVUeXBlKF9fbWVkaWFu
KCpfX2ZpcnN0LAogICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAog
ICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19jb21wKSksCiAgICBfX2NvbXApOwogX19pbnRyb3Nv
cnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0LCBfX2NvbXApOwogX19sYXN0ID0g
X19jdXQ7CiAgICAgIH0KICAgIH0KIyAyMTY2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu
Y2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBl
OwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiBfX2ludHJv
c29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwog
X19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICB9CiAgICB9CiMg
MjE5NyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFy
ZT4KICAgIGlubGluZSB2b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5
cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFz
dCkgewogX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGcoX19sYXN0IC0gX19m
aXJzdCkgKiAyLCBfX2NvbXApOwogX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh
c3QsIF9fY29tcCk7CiAgICAgIH0KICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAg
ICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs
IF9fbGFzdCk7CiByZXR1cm47CiAgICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRk
bGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0
YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0
KF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgIF9f
bGFzdCAtIF9fbWlkZGxlKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3Rh
YmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LAogICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly
c3QgPCAxNSkgewogX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiBy
ZXR1cm47CiAgICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0
ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19t
aWRkbGUsIF9fbGFzdCwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2Zp
cnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAg
ICBfX2xhc3QgLSBfX21pZGRsZSwKICAgICAgICBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwK
ICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9S
YW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplKQog
ICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgICAg
IHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKIF9fcmVzdWx0ID0gbWVy
Z2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgX19maXJzdCArIF9fc3RlcF9z
aXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgIF9fcmVzdWx0KTsKIF9fZmlyc3QgKz0gX190
d29fc3RlcDsKICAgICAgfQoKICAgICAgX19zdGVwX3NpemUgPSBzdGQ6Om1pbihfRGlzdGFuY2Uo
X19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKICAgICAgbWVyZ2UoX19maXJzdCwgX19m
aXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICBf
X3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwg
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nl
c3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgIF9D
b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19z
dGVwX3NpemU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7
CiBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgIF9f
Zmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICBfX3Jlc3VsdCwK
ICAgIF9fY29tcCk7CiBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KICAgICAgX19zdGVw
X3NpemUgPSBzdGQ6Om1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXpl
KTsKCiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICBfX2Zp
cnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICBfX3Jlc3VsdCwKICAgICBfX2NvbXApOwog
ICAgfQoKICBlbnVtIHsgX01fY2h1bmtfc2l6ZSA9IDcgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fY2h1
bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LAogICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplKQogICAgewogICAgICB3
aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKIF9faW5zZXJ0aW9uX3Nv
cnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7CiBfX2ZpcnN0ICs9IF9fY2h1bmtf
c2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfRGlz
dGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19jaHVua19pbnNlcnRpb25f
c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
CiAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg
ICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiBfX2luc2VydGlv
bl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7CiBfX2ZpcnN0
ICs9IF9fY2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs
IF9fbGFzdCwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhf
YnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcikKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19s
YXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsg
X19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOwogICAg
ICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUpOwoK
ICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKIF9fbWVyZ2Vfc29ydF9sb29wKF9f
Zmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplKTsKIF9fc3RlcF9zaXplICo9IDI7
CiBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19z
dGVwX3NpemUpOwogX19zdGVwX3NpemUgKj0gMjsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0NvbXBhcmUgX19jb21wKQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46
OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CgogICAgICBfRGlzdGFuY2UgX19sZW4gPSBfX2xh
c3QgLSBfX2ZpcnN0OwogICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBf
X2xlbjsKCiAgICAgIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9NX2NodW5rX3NpemU7CiAgICAg
IF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19j
b21wKTsKCiAgICAgIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiBfX21lcmdlX3NvcnRf
bG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKIF9f
c3RlcF9zaXplICo9IDI7CiBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFz
dCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CiBfX3N0ZXBfc2l6ZSAqPSAyOwogICAg
ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt
ZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19zdGFibGVfc29y
dF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlz
dGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFz
dCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0g
X19maXJzdCArIF9fbGVuOwogICAgICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiBfX3N0
YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJf
c2l6ZSk7CiBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVy
LCBfX2J1ZmZlcl9zaXplKTsKICAgICAgfQogICAgICBlbHNlIHsKIF9fbWVyZ2Vfc29ydF93aXRo
X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogX19tZXJnZV9zb3J0X3dpdGhf
YnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgfQogICAgICBfX21lcmdl
X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAt
IF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21p
ZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFu
Y2UsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9z
b3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9E
aXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy
ZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0
ICsgMSkgLyAyOwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBf
X2xlbjsKICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogX19zdGFibGVfc29ydF9h
ZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogX19zdGFibGVfc29ydF9hZGFwdGl2
ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiBfX21lcmdl
X3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2NvbXApOwog
X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2Nv
bXApOwogICAgICB9CiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9f
bGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KIyAyNDMwICIvZ2NjL2RqZS9i
dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgc3RhYmxlX3NvcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlw
ZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJ
dGVyLCBfVmFsdWVUeXBlPiBidWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKGJ1Zi5iZWdp
bigpID09IDApCiBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAg
ZWxzZQogX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigp
LCBfRGlzdGFuY2VUeXBlKGJ1Zi5zaXplKCkpKTsKICAgIH0KIyAyNDY2ICIvZ2NjL2RqZS9idWls
ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAv
bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQK
ICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAg
ICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4gYnVmKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQogX19pbnBsYWNlX3N0
YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgZWxzZQogX19zdGFibGVf
c29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBl
KGJ1Zi5zaXplKCkpLAogICAgICAgICAgX19jb21wKTsKICAgIH0KIyAyNTAyICIvZ2NjL2RqZS9i
dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoK
ICAgICAKCiAgICAgCgogICAgICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICBm
b3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19p
KQogaWYgKCpfX2kgPCAqX19maXJzdCkKICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwg
X19pLCBfVmFsdWVUeXBlKCpfX2kpKTsKICAgICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxl
KTsKICAgIH0KIyAyNTQwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw
MDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsCiAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsCiAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1
ZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2NvbXApOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBf
X2kgPCBfX2xhc3Q7ICsrX19pKQogaWYgKF9fY29tcCgqX19pLCAqX19maXJzdCkpCiAgIF9fcG9w
X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1ZhbHVlVHlwZSgqX19pKSwgX19jb21wKTsK
ICAgICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgfQojIDI1Nzkg
Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4K
ICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVz
dWx0X2ZpcnN0LAogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1
ZV90eXBlIF9JbnB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6
ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAgICAK
CiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1
bHRfbGFzdDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19y
ZXN1bHRfZmlyc3Q7CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3Jl
YWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmly
c3Q7CiArK19fcmVzdWx0X3JlYWxfbGFzdDsKICsrX19maXJzdDsKICAgICAgfQogICAgICBtYWtl
X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgICAgIHdoaWxlIChf
X2ZpcnN0ICE9IF9fbGFzdCkgewogaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0KQogICBf
X2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICBfRGlzdGFu
Y2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgX0lucHV0VmFs
dWVUeXBlKCpfX2ZpcnN0KSk7CiArK19fZmlyc3Q7CiAgICAgIH0KICAgICAgc29ydF9oZWFwKF9f
cmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogICAgICByZXR1cm4gX19yZXN1bHRf
cmVhbF9sYXN0OwogICAgfQojIDI2MzMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk
ZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFuZG9tQWNj
ZXNzSXRlcgogICAgcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgIF9Db21wYXJlIF9f
Y29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcj46OnZhbHVlX3R5cGUgX0lucHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZh
bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAog
ICAgIAogICAgIAoKCiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSBy
ZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVh
bF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYm
IF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAqX19yZXN1bHRfcmVhbF9s
YXN0ID0gKl9fZmlyc3Q7CiArK19fcmVzdWx0X3JlYWxfbGFzdDsKICsrX19maXJzdDsKICAgICAg
fQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19j
b21wKTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiBpZiAoX19jb21wKCpfX2Zp
cnN0LCAqX19yZXN1bHRfZmlyc3QpKQogICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBf
RGlzdGFuY2VUeXBlKDApLAogICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9f
cmVzdWx0X2ZpcnN0KSwKICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSwKICAgX19jb21wKTsK
ICsrX19maXJzdDsKICAgICAgfQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVz
dWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsK
ICAgIH0KIyAyNjg2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw
NDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lk
CiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbnRoLAogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90
eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2Zp
cnN0ID4gMykgewogX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICBfX3VuZ3VhcmRlZF9wYXJ0
aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwK
ICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICoo
X19sYXN0IC0gMSkpKSk7CiBpZiAoX19jdXQgPD0gX19udGgpCiAgIF9fZmlyc3QgPSBfX2N1dDsK
IGVsc2UKICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChf
X2ZpcnN0LCBfX2xhc3QpOwogICAgfQojIDI3MjggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMv
aW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj
ZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1
ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0g
X19maXJzdCA+IDMpIHsKIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgX191bmd1YXJkZWRf
cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmly
c3QsCiAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAg
ICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgX19jb21wKSksCiAgICBfX2NvbXApOwogaWYgKF9f
Y3V0IDw9IF9fbnRoKQogICBfX2ZpcnN0ID0gX19jdXQ7CiBlbHNlCiAgIF9fbGFzdCA9IF9fY3V0
OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp
OwogICAgfQojIDI3NjggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw
MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9U
cD4KICAgIF9Gb3J3YXJkSXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1Zh
bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ
dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCgoKCiAgICAgCiAgICAgCiAg
ICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBf
X2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9f
bWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogX19oYWxmID0gX19sZW4gPj4gMTsK
IF9fbWlkZGxlID0gX19maXJzdDsKIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiBpZiAoKl9f
bWlkZGxlIDwgX192YWwpIHsKICAgX19maXJzdCA9IF9fbWlkZGxlOwogICArK19fZmlyc3Q7CiAg
IF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogfQogZWxzZQogICBfX2xlbiA9IF9faGFsZjsK
ICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODE2ICIvZ2NjL2RqZS9idWls
ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAv
bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0Zv
cndhcmRJdGVyCiAgICBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVl
X3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAg
ICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9f
bGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19t
aWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiBfX2hhbGYgPSBfX2xlbiA+PiAxOwog
X19taWRkbGUgPSBfX2ZpcnN0OwogYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKIGlmIChfX2Nv
bXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgX19maXJzdCA9IF9fbWlkZGxlOwogICArK19fZmly
c3Q7CiAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogfQogZWxzZQogICBfX2xlbiA9IF9f
aGFsZjsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODU2ICIvZ2NjL2Rq
ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAg
IHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBj
b25zdCBfVHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBf
RGlzdGFuY2VUeXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBf
X2xlbiA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlw
ZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xl
biA+IDApIHsKIF9faGFsZiA9IF9fbGVuID4+IDE7CiBfX21pZGRsZSA9IF9fZmlyc3Q7CiBhZHZh
bmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICBfX2xlbiA9
IF9faGFsZjsKIGVsc2UgewogICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICsrX19maXJzdDsKICAg
X19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiB9CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmly
c3Q7CiAgICB9CiMgMjkwMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y
MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg
X1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgY29uc3QgX1RwJiBf
X3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9f
bGVuID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBl
IF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVu
ID4gMCkgewogX19oYWxmID0gX19sZW4gPj4gMTsKIF9fbWlkZGxlID0gX19maXJzdDsKIGFkdmFu
Y2UoX19taWRkbGUsIF9faGFsZik7CiBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICBf
X2xlbiA9IF9faGFsZjsKIGVsc2UgewogICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICsrX19maXJz
dDsKICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiB9CiAgICAgIH0KICAgICAgcmV0dXJu
IF9fZmlyc3Q7CiAgICB9CiMgMjk0OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw
ZW5hbWUgX1RwPgogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVxdWFs
X3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf
VHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFu
Y2VUeXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9
IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hh
bGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAg
d2hpbGUgKF9fbGVuID4gMCkgewogX19oYWxmID0gX19sZW4gPj4gMTsKIF9fbWlkZGxlID0gX19m
aXJzdDsKIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiBpZiAoKl9fbWlkZGxlIDwgX192YWwp
IHsKICAgX19maXJzdCA9IF9fbWlkZGxlOwogICArK19fZmlyc3Q7CiAgIF9fbGVuID0gX19sZW4g
LSBfX2hhbGYgLSAxOwogfQogZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgIF9fbGVuID0g
X19oYWxmOwogZWxzZSB7CiAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX3ZhbCk7CiAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICBfX3JpZ2h0ID0gdXBwZXJf
Ym91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwpOwogICByZXR1cm4gcGFpcjxfRm9yd2Fy
ZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKIH0KICAgICAgfQogICAgICBy
ZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7
CiAgICB9CiMgMzAwMyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz
MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1Rw
LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+
CiAgICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwgY29uc3QgX1RwJiBfX3ZhbCwKICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1Zh
bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ
dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAK
CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFz
dCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRk
bGUsIF9fbGVmdCwgX19yaWdodDsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKIF9faGFsZiA9
IF9fbGVuID4+IDE7CiBfX21pZGRsZSA9IF9fZmlyc3Q7CiBhZHZhbmNlKF9fbWlkZGxlLCBfX2hh
bGYpOwogaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICBfX2ZpcnN0ID0gX19taWRk
bGU7CiAgICsrX19maXJzdDsKICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiB9CiBlbHNl
IGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgIF9fbGVuID0gX19oYWxmOwogZWxzZSB7
CiAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19jb21w
KTsKICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgr
K19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsKICAgcmV0dXJuIHBhaXI8X0Zvcndh
cmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiB9CiAgICAgIH0KICAgICAg
cmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3Qp
OwogICAgfQojIDMwNTIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw
MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9U
cD4KICAgIGJvb2wKICAgIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7
CgoKICAgICAKICAgICAKCiAgICAgCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91
bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYm
ICEoX192YWwgPCAqX19pKTsKICAgIH0KIyAzMDgzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz
L2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgYmluYXJ5
X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAg
ICAKICAgICAKCiAgICAgCgoKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9f
Zmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7CiAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0
ICYmICFfX2NvbXAoX192YWwsICpfX2kpOwogICAgfQojIDMxMTUgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgog
ICAgX091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy
MSBfX2xhc3QxLAogICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwK
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAK
CgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9
IF9fbGFzdDIpIHsKIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QyOwogICArK19fZmlyc3QyOwogfQogZWxzZSB7CiAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0MTsKICAgKytfX2ZpcnN0MTsKIH0KICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJu
IGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0
KSk7CiAgICB9CiMgMzE2NiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y
MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBf
SW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICB0eXBlbmFtZSBfQ29tcGFyZT4K
ICAgIF9PdXRwdXRJdGVyCiAgICBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs
CiAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAog
ICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9f
Zmlyc3QxKSkgewogICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICsrX19maXJzdDI7CiB9CiBl
bHNlIHsKICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICArK19fZmlyc3QxOwogfQogKytfX3Jl
c3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShf
X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAg
IF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bGFzdCwKICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikKICAgIHsKICAg
ICAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogcmV0dXJuOwogICAgICBpZiAoX19s
ZW4xICsgX19sZW4yID09IDIpIHsKIGlmICgqX19taWRkbGUgPCAqX19maXJzdCkKICAgICAgIGl0
ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiByZXR1cm47CiAgICAgIH0KICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7
CiAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikg
ewogX19sZW4xMSA9IF9fbGVuMSAvIDI7CiBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsK
IF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1
dCk7CiBfX2xlbjIyID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAg
ICAgfQogICAgICBlbHNlIHsKIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogYWR2YW5jZShfX3NlY29u
ZF9jdXQsIF9fbGVuMjIpOwogX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21p
ZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiBfX2xlbjExID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBf
X2ZpcnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwg
X19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9f
Zmlyc3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgc3RkOjpkaXN0YW5jZShfX21p
ZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJz
dCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsK
ICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwg
X19sYXN0LAogICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIpOwogICAg
fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUg
X0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91
dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fbGFzdCwKICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAg
ICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4y
ID09IDApCiByZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogaWYgKF9f
Y29tcCgqX19taWRkbGUsICpfX2ZpcnN0KSkKICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21p
ZGRsZSk7CiByZXR1cm47CiAgICAgIH0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Rf
Y3V0ID0gX19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9f
bWlkZGxlOwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgIF9EaXN0YW5jZSBfX2xl
bjIyID0gMDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogX19sZW4xMSA9IF9fbGVuMSAv
IDI7CiBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKIF9fc2Vjb25kX2N1dCA9IGxvd2Vy
X2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKIF9fbGVuMjIg
PSBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVs
c2UgewogX19sZW4yMiA9IF9fbGVuMiAvIDI7CiBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4y
Mik7CiBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNv
bmRfY3V0LCBfX2NvbXApOwogX19sZW4xMSA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19maXJz
dF9jdXQpOwogICAgICB9CiAgICAgIHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vj
b25kX2N1dCk7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0
X2N1dDsKICAgICAgYWR2YW5jZShfX25ld19taWRkbGUsIHN0ZDo6ZGlzdGFuY2UoX19taWRkbGUs
IF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9f
Zmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgX19sZW4xMSwgX19sZW4yMiwgX19jb21w
KTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1
dCwgX19sYXN0LAogICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIsIF9f
Y29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy
MSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4K
ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fcm90YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlv
bmFsSXRlcjEgX19maXJzdCwKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbWlkZGxlLAog
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgIF9EaXN0YW5jZSBfX2xl
bjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZl
ciwKICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyMiBfX2J1ZmZlcl9lbmQ7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYgX19s
ZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9f
bGFzdCwgX19idWZmZXIpOwogY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0
KTsKIHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3QpOwogICAgICB9
CiAgICAgIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiBfX2J1ZmZlcl9lbmQg
PSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiBjb3B5KF9fbWlkZGxlLCBfX2xh
c3QsIF9fZmlyc3QpOwogcmV0dXJuIGNvcHlfYmFja3dhcmQoX19idWZmZXIsIF9fYnVmZmVyX2Vu
ZCwgX19sYXN0KTsKICAgICAgfQogICAgICBlbHNlIHsKIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sYXN0KTsKIGFkdmFuY2UoX19maXJzdCwgc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19s
YXN0KSk7CiByZXR1cm4gX19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIs
CiAgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzPgogICAgX0JpZGlyZWN0aW9uYWxJdGVy
MwogICAgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlk
aXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmly
c3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIzIF9fcmVzdWx0KQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKIHJldHVy
biBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChf
X2ZpcnN0MiA9PSBfX2xhc3QyKQogcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFz
dDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgICAtLV9fbGFzdDI7CiAgICAgIHdo
aWxlICh0cnVlKSB7CiBpZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewogICAqLS1fX3Jlc3VsdCA9
ICpfX2xhc3QxOwogICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICByZXR1cm4gY29weV9i
YWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgIC0tX19sYXN0MTsKIH0K
IGVsc2UgewogICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICBpZiAoX19maXJzdDIgPT0gX19s
YXN0MikKICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jl
c3VsdCk7CiAgIC0tX19sYXN0MjsKIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIs
CiAgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg
IF9CaWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJ
dGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiByZXR1cm4gY29weV9iYWNrd2Fy
ZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogICAgICBpZiAoX19maXJzdDIgPT0gX19s
YXN0MikKIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7
CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGlsZSAodHJ1ZSkgewog
aWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7CiAgICotLV9fcmVzdWx0ID0gKl9fbGFz
dDE7CiAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgIHJldHVybiBjb3B5X2JhY2t3YXJk
KF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAgLS1fX2xhc3QxOwogfQogZWxzZSB7
CiAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQog
ICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsK
ICAgLS1fX2xhc3QyOwogfQogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Qb2ludGVy
PgogICAgdm9pZAogICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9E
aXN0YW5jZSBfX2xlbjIsCiAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVm
ZmVyX3NpemUpCiAgICB7CiAgIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1
ZmZlcl9zaXplKSB7CiAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBf
X21pZGRsZSwgX19idWZmZXIpOwogICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9f
bWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICB9CiAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1
ZmZlcl9zaXplKSB7CiAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwg
X19sYXN0LCBfX2J1ZmZlcik7CiAgICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRs
ZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAgfQogICBlbHNlIHsKICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICBfRGlzdGFuY2UgX19sZW4xMSA9
IDA7CiAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgIGlmIChfX2xlbjEgPiBfX2xlbjIp
IHsKICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19s
ZW4xMSk7CiAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAq
X19maXJzdF9jdXQpOwogICAgX19sZW4yMiA9IHN0ZDo6ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vj
b25kX2N1dCk7CiAgICAgfQogICAgIGVsc2UgewogICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAg
ICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICBfX2ZpcnN0X2N1dCA9IHVwcGVy
X2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgIF9fbGVuMTEgPSBz
dGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICB9CiAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1
dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xl
bjIyLCBfX2J1ZmZlciwKICAgICAgICBfX2J1ZmZlcl9zaXplKTsKICAgICBfX21lcmdlX2FkYXB0
aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAg
X19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgIF9fbWVyZ2VfYWRhcHRpdmUo
X19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAg
ICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgIH0KICAg
IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1l
IF9EaXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50ZXIsCiAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAg
IHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFu
Y2UgX19sZW4yLAogICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9z
aXplLAogICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICBpZiAoX19sZW4xIDw9IF9fbGVu
MiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgIF9Qb2ludGVyIF9fYnVmZmVyX2Vu
ZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICBtZXJnZShfX2J1ZmZl
ciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOwogICB9
CiAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgX1BvaW50ZXIgX19i
dWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgX19tZXJn
ZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19s
YXN0LAogICAgICAgICAgX19jb21wKTsKICAgfQogICBlbHNlIHsKICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Nl
Y29uZF9jdXQgPSBfX21pZGRsZTsKICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgX0Rp
c3RhbmNlIF9fbGVuMjIgPSAwOwogICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgIF9fbGVu
MTEgPSBfX2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICBf
X3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQs
IF9fY29tcCk7CiAgICBfX2xlbjIyID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRf
Y3V0KTsKICAgICB9CiAgICAgZWxzZSB7CiAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgIGFk
dmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91
bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICBfX2xlbjEx
ID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgfQogICAgIF9CaWRp
cmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJz
dF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgX19sZW4xIC0gX19sZW4xMSwg
X19sZW4yMiwgX19idWZmZXIsCiAgICAgICAgX19idWZmZXJfc2l6ZSk7CiAgICAgX19tZXJnZV9h
ZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAg
ICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgIF9fbWVy
Z2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0g
X19sZW4xMSwKICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6
ZSwgX19jb21wKTsKICAgfQogICAgfQojIDM1MDggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMv
aW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rp
b25hbEl0ZXI+CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBf
X2ZpcnN0LAogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVy
Pjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAg
IAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQog
cmV0dXJuOwoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjEgPSBzdGQ6OmRpc3RhbmNlKF9fZmly
c3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjIgPSBzdGQ6OmRpc3RhbmNl
KF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9u
YWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19i
dWYuYmVnaW4oKSA9PSAwKQogX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMik7CiAgICAgIGVsc2UKIF9fbWVyZ2VfYWRhcHRpdmUo
X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICBfX2J1Zi5iZWdp
bigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSkpOwogICAgfQojIDM1NTkgIi9nY2MvZGpl
L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog
ICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX21pZGRsZSwKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRl
cj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAg
ICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3Qp
CiByZXR1cm47CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMSA9IHN0ZDo6ZGlzdGFuY2UoX19m
aXJzdCwgX19taWRkbGUpOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IHN0ZDo6ZGlzdGFu
Y2UoX19taWRkbGUsIF9fbGFzdCk7CgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rp
b25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChf
X2J1Zi5iZWdpbigpID09IDApCiBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXApOwogICAgICBlbHNlCiBfX21lcmdl
X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAg
X19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAogICAgX19jb21wKTsK
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lu
cHV0SXRlcjI+CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcjEgX19sYXN0MSwKICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy
IF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUg
KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKIGlmICgqX19maXJz
dDIgPCAqX19maXJzdDEpCiAgIHJldHVybiBmYWxzZTsKIGVsc2UgaWYoKl9fZmlyc3QxIDwgKl9f
Zmlyc3QyKQogICArK19fZmlyc3QxOwogZWxzZQogICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoK
ICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+
CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs
IF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgoKICAg
ICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKIGlm
IChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICByZXR1cm4gZmFsc2U7CiBlbHNlIGlm
KF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICsrX19maXJzdDE7CiBlbHNlCiAgICsr
X19maXJzdDEsICsrX19maXJzdDI7CgogICAgICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0
ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfdW5pb24o
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICBfSW5wdXRJ
dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3
aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiBpZiAo
Kl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgKytf
X2ZpcnN0MTsKIH0KIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAqX19yZXN1
bHQgPSAqX19maXJzdDI7CiAgICsrX19maXJzdDI7CiB9CiBlbHNlIHsKICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QxOwogICArK19fZmlyc3QxOwogICArK19fZmlyc3QyOwogfQogKytfX3Jlc3VsdDsK
ICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0
MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgIHR5
cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF91bmlvbihfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9D
b21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoK
CiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp
IHsKIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0MTsKICAgKytfX2ZpcnN0MTsKIH0KIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpf
X2ZpcnN0MSkpIHsKICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICArK19fZmlyc3QyOwogfQog
ZWxzZSB7CiAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgKytfX2ZpcnN0MTsKICAgKytfX2Zp
cnN0MjsKIH0KICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIs
IF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5h
bWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2ludGVyc2VjdGlvbihfSW5w
dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxl
IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiBpZiAoKl9fZmly
c3QxIDwgKl9fZmlyc3QyKQogICArK19fZmlyc3QxOwogZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9f
Zmlyc3QxKQogICArK19fZmlyc3QyOwogZWxzZSB7CiAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsK
ICAgKytfX2ZpcnN0MTsKICAgKytfX2ZpcnN0MjsKICAgKytfX3Jlc3VsdDsKIH0KICAgICAgcmV0
dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw
ZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgdHlwZW5hbWUgX0Nv
bXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAg
ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiBp
ZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgKytfX2ZpcnN0MTsKIGVsc2UgaWYg
KF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICsrX19maXJzdDI7CiBlbHNlIHsKICAg
Kl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICArK19fZmlyc3QxOwogICArK19fZmlyc3QyOwogICAr
K19fcmVzdWx0OwogfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1
dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19m
aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAg
IAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBf
X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3Qy
KSB7CiAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgKytfX2ZpcnN0MTsKICAgKytfX3Jlc3Vs
dDsKIH0KIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgKytfX2ZpcnN0MjsKIGVs
c2UgewogICArK19fZmlyc3QxOwogICArK19fZmlyc3QyOwogfQogICAgICByZXR1cm4gY29weShf
X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAog
ICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVuY2Uo
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgX0lucHV0SXRl
cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAg
ICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDIpCiBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAqX19yZXN1bHQg
PSAqX19maXJzdDE7CiAgICsrX19maXJzdDE7CiAgICsrX19yZXN1bHQ7CiB9CiBlbHNlIGlmIChf
X2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICArK19fZmlyc3QyOwogZWxzZSB7CiAgICsr
X19maXJzdDE7CiAgICsrX19maXJzdDI7CiB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBf
X2xhc3QxLCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIx
LCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0
SXRlcgogICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf
SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ
dGVyMiBfX2xhc3QyLAogICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAK
ICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikg
ewogICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICsrX19maXJzdDE7CiAgICsrX19yZXN1bHQ7
CiB9CiBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3QyOwogICArK19fZmlyc3QyOwogICArK19fcmVzdWx0OwogfQogZWxzZSB7CiAgICsrX19m
aXJzdDE7CiAgICsrX19maXJzdDI7CiB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xh
c3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9P
dXRwdXRJdGVyLAogICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0
X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
LAogICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiBpZiAoX19jb21wKCpf
X2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICsrX19m
aXJzdDE7CiAgICsrX19yZXN1bHQ7CiB9CiBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19m
aXJzdDEpKSB7CiAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgKytfX2ZpcnN0MjsKICAgKytf
X3Jlc3VsdDsKIH0KIGVsc2UgewogICArK19fZmlyc3QxOwogICArK19fZmlyc3QyOwogfQogICAg
ICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg
X19yZXN1bHQpKTsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgog
ICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0g
X19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiBpZiAoKl9fcmVzdWx0
IDwgKl9fZmlyc3QpCiAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAog
ICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAg
ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0
ICE9IF9fbGFzdCkKIGlmIChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0g
X19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgog
ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2Fy
ZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFz
dCkKIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdCkKICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAg
ICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogIF9Db21wYXJlIF9fY29t
cCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0
dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAg
IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVz
dWx0KSkKICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGJvb2wKICAg
IG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlv
bmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09
IF9fbGFzdCkKIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9f
Zmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkKIHJldHVybiBmYWxz
ZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAtLV9faTsKIGlmICgqX19pIDwgKl9faWkpIHsK
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgd2hpbGUgKCEoKl9faSA8ICot
LV9faikpCiAgICAge30KICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgcmV2ZXJzZShfX2lpLCBf
X2xhc3QpOwogICByZXR1cm4gdHJ1ZTsKIH0KIGlmIChfX2kgPT0gX19maXJzdCkgewogICByZXZl
cnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgIHJldHVybiBmYWxzZTsKIH0KICAgICAgfQogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJl
PgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz
dCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAg
IHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKIHJldHVybiBm
YWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19p
OwogICAgICBpZiAoX19pID09IF9fbGFzdCkKIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19s
YXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogX0JpZGlyZWN0aW9uYWxJdGVyIF9f
aWkgPSBfX2k7CiAtLV9faTsKIGlmIChfX2NvbXAoKl9faSwgKl9faWkpKSB7CiAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgIHdoaWxlICghX19jb21wKCpfX2ksICotLV9faikp
CiAgICAge30KICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgcmV2ZXJzZShfX2lpLCBfX2xhc3Qp
OwogICByZXR1cm4gdHJ1ZTsKIH0KIGlmIChfX2kgPT0gX19maXJzdCkgewogICByZXZlcnNlKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgIHJldHVybiBmYWxzZTsKIH0KICAgICAgfQogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBib29sCiAgICBwcmV2X3Blcm11
dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19s
YXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiBy
ZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAg
ICArK19faTsKICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCiByZXR1cm4gZmFsc2U7CiAgICAgIF9f
aSA9IF9fbGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2lpID0gX19pOwogLS1fX2k7CiBpZiAoKl9faWkgPCAqX19pKSB7CiAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgIHdoaWxlICghKCotLV9faiA8ICpfX2kpKQogICAg
IHt9CiAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAg
cmV0dXJuIHRydWU7CiB9CiBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgcmV2ZXJzZShfX2ZpcnN0
LCBfX2xhc3QpOwogICByZXR1cm4gZmFsc2U7CiB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wK
ICAgIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAog
ICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiByZXR1cm4gZmFsc2U7CiAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYg
KF9faSA9PSBfX2xhc3QpCiByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAg
LS1fX2k7CgogICAgICBmb3IoOzspIHsKIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwog
LS1fX2k7CiBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkgewogICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19qID0gX19sYXN0OwogICB3aGlsZSAoIV9fY29tcCgqLS1fX2osICpfX2kpKQogICAgIHt9CiAg
IGl0ZXJfc3dhcChfX2ksIF9faik7CiAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgcmV0dXJu
IHRydWU7CiB9CiBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xh
c3QpOwogICByZXR1cm4gZmFsc2U7CiB9CiAgICAgIH0KICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfSW5wdXRJdGVyCiAg
ICBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwK
ICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpCiAgICB7Cgog
ICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsr
X19maXJzdDEpCiBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9
IF9fbGFzdDI7ICsrX19pdGVyKQogICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIpCiAgICAgcmV0
dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5
UHJlZGljYXRlPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9G
b3J3YXJkSXRlciBfX2xhc3QyLAogICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7Cgog
ICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19s
YXN0MTsgKytfX2ZpcnN0MSkKIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBf
X2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19p
dGVyKSkKICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIHJldHVybiBfX2xhc3QxOwogICAgfQoj
IDQyMDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIyPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmly
c3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0
MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBm
b3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIp
CiByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0g
X19sYXN0MTsKIHdoaWxlICgxKSB7CiAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAg
PSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgaWYgKF9f
bmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgIHJldHVybiBfX3Jlc3VsdDsKICAgZWxzZSB7CiAg
ICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7
CiAgICAgKytfX2ZpcnN0MTsKICAgfQogfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICB0eXBlbmFtZSBf
QmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2Fy
ZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgX0ZvcndhcmRJ
dGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgIGZvcndhcmRfaXRl
cmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICBfQmluYXJ5UHJlZGljYXRl
IF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiByZXR1cm4gX19s
YXN0MTsKICAgICAgZWxzZSB7CiBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKIHdo
aWxlICgxKSB7CiAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgPSBzZWFyY2goX19m
aXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICBpZiAoX19uZXdf
cmVzdWx0ID09IF9fbGFzdDEpCiAgICAgcmV0dXJuIF9fcmVzdWx0OwogICBlbHNlIHsKICAgICBf
X3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAg
ICArK19fZmlyc3QxOwogICB9CiB9CiAgICAgIH0KICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19m
aXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAg
ewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rp
b25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlk
aXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAgICBfUmV2SXRlcjEgX19ybGFzdDEoX19m
aXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogICAgICBfUmV2SXRl
cjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAg
ICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyKTsKCiAgICAgIGlmIChfX3JyZXN1bHQgPT0g
X19ybGFzdDEpCiByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiBfQmlkaXJlY3Rpb25hbEl0
ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKIGFkdmFuY2UoX19yZXN1bHQsIC1zdGQ6
OmRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0K
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19m
aXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLAogICAg
ICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHR5
cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAg
ICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRl
cjI7CgogICAgICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogICAgICBfUmV2SXRlcjIg
X19ybGFzdDIoX19maXJzdDIpOwogICAgICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9S
ZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9f
cmxhc3QyLAogICAgICAgX19jb21wKTsKCiAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEp
CiByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVz
dWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKIGFkdmFuY2UoX19yZXN1bHQsIC1zdGQ6OmRpc3RhbmNl
KF9fZmlyc3QyLCBfX2xhc3QyKSk7CiByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIy
PgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19m
aXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0
MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAg
ICAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3Qy
LAogICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgX19pdGVyYXRvcl9jYXRlZ29y
eShfX2ZpcnN0MikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0
eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLAogICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAg
IGlubGluZSBfRm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3Qx
LCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9G
b3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKCgogICAgICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwg
X19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
dDEpLAogICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKICAgX19jb21wKTsKICAgIH0K
Cn0KIyA3MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2FsZ29yaXRobSIgMiAz
CiMgNTcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJpbmciIDIgMwojIDEg
Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Jhc2ljX3N0cmluZy50Y2Mi
IDEgMwojIDQ1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9iYXNpY19z
dHJpbmcudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU19tYXhfc2l6ZSA9
ICgoKG5wb3MgLSBzaXplb2YoX1JlcCkpL3NpemVvZihfQ2hhclQpKSAtIDEpIC8gNDsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBjb25zdCBfQ2hhclQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgX1JlcDo6X1NfdGVybWluYWwgPSBfQ2hhclQoKTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0
eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUK
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Om5wb3M7CgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXpl
X3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9TX2VtcHR5
X3JlcF9zdG9yYWdlWwogICAgKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9m
KHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVn
LCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICBpbnB1dF9pdGVyYXRvcl90
YWcpCiAgICAgIHsKIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgIHJl
dHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgogX0NoYXJUIF9fYnVmWzEwMF07CiBz
aXplX3R5cGUgX19pID0gMDsKIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXplb2Yo
X19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCiAgIHsKICAgICBfX2J1ZltfX2krK10gPSAqX19iZWc7
CiAgICAgKytfX2JlZzsKICAgfQogX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9faSwgX19h
KTsKIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKIF9f
ci0+X01fbGVuZ3RoID0gX19pOwogdHJ5CiAgIHsKCgoKICAgICBmb3IgKDs7KQogICAgICAgewog
IF9DaGFyVCogX19wID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2xlbmd0aDsKICBfQ2hh
clQqIF9fbGFzdCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsKICBmb3Ig
KDs7KQogICAgewogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgewogICBfX3ItPl9N
X2xlbmd0aCA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAqX19wID0gX1JlcDo6X1NfdGVy
bWluYWw7CiAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICB9CiAgICAgIGlmIChf
X3AgPT0gX19sYXN0KQogICAgICAgIGJyZWFrOwogICAgICAqX19wKysgPSAqX19iZWc7CiAgICAg
ICsrX19iZWc7CiAgICB9CgogIHNpemVfdHlwZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0
YSgpOwogIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fYSk7
CiAgdHJhaXRzX3R5cGU6OmNvcHkoX19hbm90aGVyLT5fTV9yZWZkYXRhKCksCiAgICAgIF9fci0+
X01fcmVmZGF0YSgpLCBfX2xlbik7CiAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgX19yID0gX19h
bm90aGVyOwogIF9fci0+X01fbGVuZ3RoID0gX19sZW47CiAgICAgICB9CiAgIH0KIGNhdGNoKC4u
LikKICAgewogICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgIHRocm93OwogICB9CiByZXR1
cm4gMDsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5JdGVyPgogICAgICBf
Q2hhclQqCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg
ICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9j
JiBfX2EsCiAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICAgIHsKIGlmIChfX2JlZyA9PSBf
X2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZj
b3B5KCk7CgoKIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fYmVnID09IF9Jbkl0ZXIoKSwgMCkpCiAg
IF9fdGhyb3dfbG9naWNfZXJyb3IoImJhc2ljX3N0cmluZzo6X1NfY29uc3RydWN0IE5VTEwgbm90
IHZhbGlkIik7Cgogc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oc3Rk
OjpkaXN0YW5jZShfX2JlZywgX19lbmQpKTsKCgogX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRl
KF9fZG5ldywgX19hKTsKIHRyeQogICB7IF9TX2NvcHlfY2hhcnMoX19yLT5fTV9yZWZkYXRhKCks
IF9fYmVnLCBfX2VuZCk7IH0KIGNhdGNoKC4uLikKICAgewogICAgIF9fci0+X01fZGVzdHJveShf
X2EpOwogICAgIHRocm93OwogICB9CiBfX3ItPl9NX2xlbmd0aCA9IF9fZG5ldzsKCiBfX3ItPl9N
X3JlZmRhdGEoKVtfX2RuZXddID0gX1JlcDo6X1NfdGVybWluYWw7CiByZXR1cm4gX19yLT5fTV9y
ZWZkYXRhKCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hhclQqCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19uLCBf
Q2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIHsKICAgICAgaWYgKF9fbiA9PSAwICYm
IF9fYSA9PSBfQWxsb2MoKSkKIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoK
ICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbiwgX19hKTsKICAgICAgdHJ5CiB7
CiAgIGlmIChfX24pCiAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfX3ItPl9NX3JlZmRhdGEoKSwg
X19uLCBfX2MpOwogfQogICAgICBjYXRjaCguLi4pCiB7CiAgIF9fci0+X01fZGVzdHJveShfX2Ep
OwogICB0aHJvdzsKIH0KICAgICAgX19yLT5fTV9sZW5ndGggPSBfX247CiAgICAgIF9fci0+X01f
cmVmZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgcmV0dXJuIF9fci0+X01f
cmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAg
ICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9BbGxvYygpLCBfX3N0ci5n
ZXRfYWxsb2NhdG9yKCkpLAogICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0
cmluZyhjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNp
emVfdHlwZSgpLCBfQ2hhclQoKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3Qg
YmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAg
OiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAg
ICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX0FsbG9jKCkpLCBfQWxsb2MoKSkKICAgIHsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg
YmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywK
ICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9T
X2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICBfX3N0ci5fTV9mb2xk
KF9fcG9zLCBfX24pLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVz
KF9TX2NvbnN0cnVjdChfX3MsIF9fcyArIF9fbiwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJp
bmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1
cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgPyBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykg
OgogICAgICAgICAgX19zICsgbnBvcywgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoc2l6
ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFw
bHVzKF9TX2NvbnN0cnVjdChfX24sIF9fYywgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIgX19iZWcsIF9JbnB1
dEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25z
dHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICB7
CiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5fTV9yZXAoKSkKIHsKCiAgIGFsbG9jYXRvcl90
eXBlIF9fYSA9IHRoaXMtPmdldF9hbGxvY2F0b3IoKTsKICAgX0NoYXJUKiBfX3RtcCA9IF9fc3Ry
Ll9NX3JlcCgpLT5fTV9ncmFiKF9fYSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKTsKICAgX01fcmVw
KCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgX01fZGF0YShfX3RtcCk7CiB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mCiAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAg
YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90
eXBlIF9fbikKICAgICB7CiAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIu
c2l6ZSgpOwogICAgICAgaWYgKF9fcG9zID4gX19zdHJzaXplKQogIF9fdGhyb3dfb3V0X29mX3Jh
bmdlKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuID0g
X19uIDwgX19zdHJzaXplIC0gX19wb3M7CiAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdzaXpl
ID0gX190ZXN0biA/IF9fbiA6IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgcmV0dXJuIHRoaXMt
PmFzc2lnbihfX3N0ci5fTV9kYXRhKCkgKyBfX3BvcywgX19uZXdzaXplKTsKICAgICB9CgogICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgIGFzc2lnbihjb25zdCBfQ2hh
clQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICB7CiAgICAgICBpZiAoX19uID4gdGhpcy0+bWF4
X3NpemUoKSkKICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsK
ICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQq
PigpKF9fcywgX01fZGF0YSgpKQogICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEo
KSArIHRoaXMtPnNpemUoKSwgX19zKSkKICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdp
bigpLCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAgICAgIGVsc2UKICB7CgogICAgY29u
c3Qgc2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01fZGF0YSgpOwogICAgaWYgKF9fcG9zID49IF9f
bikKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fZGF0YSgpLCBfX3MsIF9fbik7CiAgICBlbHNl
IGlmIChfX3BvcykKICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpLCBfX3MsIF9fbik7
CiAgICBfTV9yZXAoKS0+X01fbGVuZ3RoID0gX19uOwogICAgX01fZGF0YSgpW19fbl0gPSBfUmVw
OjpfU190ZXJtaW5hbDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgICAgfQoKICAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwg
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwg
c2l6ZV90eXBlIF9fbikKICAgICB7CiAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0g
X19zdHIuc2l6ZSgpOwogICAgICAgaWYgKF9fcG9zMiA+IF9fc3Ryc2l6ZSkKICBfX3Rocm93X291
dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgIGNvbnN0IGJvb2wgX190
ZXN0biA9IF9fbiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgIGNvbnN0IHNpemVfdHlwZSBf
X25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3MyOwogICAgICAgcmV0
dXJuIHRoaXMtPmluc2VydChfX3BvczEsIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19uZXdz
aXplKTsKICAgICB9CgogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JgogICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg
IGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u
KQogICAgIHsKICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg
ICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi
YXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgaWYgKF9fc2l6ZSA+IHRoaXMtPm1heF9zaXpl
KCkgLSBfX24pCiAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Omlu
c2VydCIpOwogICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBsZXNzPGNvbnN0
IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hh
clQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAgICAgICAgcmV0dXJuIF9NX3JlcGxh
Y2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9zLCBfTV9pYmVnaW4oKSArIF9fcG9zLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uKTsKICAgICAgIGVsc2UKICAg
ICAgICAgewoKCgogICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29mZiA9IF9fcyAtIF9NX2Rh
dGEoKTsKICAgICAgICAgICBfTV9tdXRhdGUoX19wb3MsIDAsIF9fbik7CiAgICAgICAgICAgX19z
ID0gX01fZGF0YSgpICsgX19vZmY7CiAgICAgICAgICAgX0NoYXJUKiBfX3AgPSBfTV9kYXRhKCkg
KyBfX3BvczsKICAgICAgICAgICBpZiAoX19zICsgX19uIDw9IF9fcCkKICAgICAgICAgICAgIHRy
YWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBfX24pOwogICAgICAgICAgIGVsc2UgaWYgKF9fcyA+
PSBfX3ApCiAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcyArIF9fbiwgX19u
KTsKICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHRyYWl0c190
eXBlOjpjb3B5KF9fcCwgX19zLCBfX3AgLSBfX3MpOwogICAgICAgICAgICAgICB0cmFpdHNfdHlw
ZTo6Y29weShfX3AgKyAoX19wLV9fcyksIF9fcCArIF9fbiwgX19uIC0gKF9fcC1fX3MpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KICAgICB9Cgog
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgIHJlcGxhY2Uoc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgIHNpemVf
dHlwZSBfX24yKQogICAgIHsKICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z
aXplKCk7CiAgICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgIF9fdGhyb3dfb3V0X29m
X3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgIGNvbnN0IGJvb2wgX190ZXN0
bjEgPSBfX24xIDwgX19zaXplIC0gX19wb3M7CiAgICAgICBjb25zdCBzaXplX3R5cGUgX19mb2xk
bjEgPSBfX3Rlc3RuMSA/IF9fbjEgOiBfX3NpemUgLSBfX3BvczsKICAgICAgIGlmIChfX3NpemUg
LSBfX2ZvbGRuMSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24yKQogICAgICAgICBfX3Rocm93X2xl
bmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgICBpZiAoX01fcmVwKCkt
Pl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkK
ICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBf
X3MpKQogICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3Ms
CiAgICBfTV9pYmVnaW4oKSArIF9fcG9zICsgX19mb2xkbjEsIF9fcywgX19zICsgX19uMik7Cgog
ICAgICAgZWxzZQogIHJldHVybiBfTV9yZXBsYWNlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2li
ZWdpbigpICsgX19wb3MgKyBfX2ZvbGRuMSwKICAgICAgX19zLCBfX3MgKyBfX24yLAogICAgICB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX0NoYXJUKj46Oml0ZXJhdG9yX2NhdGVnb3J5
KCkpOwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJiBfX2EpIHRo
cm93ICgpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01f
Y2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpOwogICAgICBfUmF3X2J5dGVzX2FsbG9jKF9f
YSkuZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwgX19zaXplKTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjpfTV9sZWFrX2hhcmQoKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJl
ZCgpKQogX01fbXV0YXRlKDAsIDAsIDApOwogICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgp
OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl
IF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fb2xkX3Np
emUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXplID0gX19v
bGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3NyYyA9IF9N
X2RhdGEoKSArIF9fcG9zICsgX19sZW4xOwogICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVj
aCA9IF9fb2xkX3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKCiAgICAgIGlmIChfTV9yZXAoKS0+X01f
aXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkpCiB7CgogICBhbGxvY2F0b3Jf
dHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CgoKICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNp
emUgPSA0MDk2OwogICBjb25zdCBzaXplX3R5cGUgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICog
c2l6ZW9mICh2b2lkKik7CgogICBjb25zdCBzaXplX3R5cGUgX19wYWdlX2NhcGFjaXR5ID0gKF9f
cGFnZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6ZQogICAgICAgICAgLSBzaXplb2YoX1JlcCkg
LSBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICBfUmVw
KiBfX3I7CiAgIGlmIChfX25ld19zaXplID4gY2FwYWNpdHkoKSAmJiBfX25ld19zaXplID4gX19w
YWdlX2NhcGFjaXR5KQoKICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSA+IDIq
Y2FwYWNpdHkoKSA/CiAgICAgIF9fbmV3X3NpemUgOiAyKmNhcGFjaXR5KCksIF9fYSk7CiAgIGVs
c2UKICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsKICAgdHJ5CiAg
ICAgewogICAgICAgaWYgKF9fcG9zKQogIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0
YSgpLCBfTV9kYXRhKCksIF9fcG9zKTsKICAgICAgIGlmIChfX2hvd19tdWNoKQogIHRyYWl0c190
eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsCiAgICAgIF9fc3Jj
LCBfX2hvd19tdWNoKTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CiAgICAgICBfX3ItPl9N
X2Rpc3Bvc2UoZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgIHRocm93OwogICAgIH0KICAgX01fcmVw
KCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgX01fZGF0YShfX3ItPl9NX3JlZmRhdGEoKSk7CiAgICAg
IH0KICAgICAgZWxzZSBpZiAoX19ob3dfbXVjaCAmJiBfX2xlbjEgIT0gX19sZW4yKQogewoKICAg
dHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hv
d19tdWNoKTsKIH0KICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfTV9y
ZXAoKS0+X01fbGVuZ3RoID0gX19uZXdfc2l6ZTsKICAgICAgX01fZGF0YSgpW19fbmV3X3NpemVd
ID0gX1JlcDo6X1NfdGVybWluYWw7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2VydmUoc2l6ZV90eXBlIF9fcmVzKQog
ICAgewogICAgICBpZiAoX19yZXMgPiB0aGlzLT5jYXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9p
c19zaGFyZWQoKSkKICAgICAgICB7CiAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9zaXplKCkpCiAg
ICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOwoKICAgaWYg
KF9fcmVzIDwgdGhpcy0+c2l6ZSgpKQogICAgIF9fcmVzID0gdGhpcy0+c2l6ZSgpOwogICBhbGxv
Y2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAgIF9DaGFyVCogX190bXAgPSBfTV9y
ZXAoKS0+X01fY2xvbmUoX19hLCBfX3JlcyAtIHRoaXMtPnNpemUoKSk7CiAgIF9NX3JlcCgpLT5f
TV9kaXNwb3NlKF9fYSk7CiAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB2b2lkIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnN3YXAoYmFz
aWNfc3RyaW5nJiBfX3MpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfbGVha2VkKCkp
CiBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmIChfX3MuX01fcmVwKCktPl9N
X2lzX2xlYWtlZCgpKQogX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYg
KHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9jYXRvcigpKQogewogICBfQ2hh
clQqIF9fdG1wID0gX01fZGF0YSgpOwogICBfTV9kYXRhKF9fcy5fTV9kYXRhKCkpOwogICBfX3Mu
X01fZGF0YShfX3RtcCk7CiB9CgogICAgICBlbHNlCiB7CiAgIGJhc2ljX3N0cmluZyBfX3RtcDEo
X01faWJlZ2luKCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxvY2F0b3IoKSk7CiAgIGJhc2ljX3N0
cmluZyBfX3RtcDIoX19zLl9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpLAogICAgICAgICB0aGlz
LT5nZXRfYWxsb2NhdG9yKCkpOwogICAqdGhpcyA9IF9fdG1wMjsKICAgX19zID0gX190bXAxOwog
fQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46Ol9SZXAqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpfUmVwOjoKICAgIF9TX2NyZWF0ZShzaXplX3QgX19jYXBhY2l0eSwgY29uc3QgX0FsbG9jJiBf
X2FsbG9jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKCgogICAgICBpZiAoX19jYXBhY2l0eSA+IF9TX21heF9z
aXplKQoKCgogX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X1NfY3JlYXRlIik7
CgoKCgogICAgICBzaXplX3QgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hh
clQpICsgc2l6ZW9mKF9SZXApOwojIDUzMiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs
dWRlL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMwogICAgICBjb25zdCBzaXplX3QgX19wYWdlc2l6
ZSA9IDQwOTY7CiAgICAgIGNvbnN0IHNpemVfdCBfX3N1YnBhZ2VzaXplID0gMTI4OwogICAgICBj
b25zdCBzaXplX3QgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CiAg
ICAgIGlmICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpID4gX19wYWdlc2l6ZSkKIHsK
ICAgc2l6ZV90IF9fZXh0cmEgPQogICAgIChfX3BhZ2VzaXplIC0gKChfX3NpemUgKyBfX21hbGxv
Y19oZWFkZXJfc2l6ZSkgJSBfX3BhZ2VzaXplKSkKICAgICAlIF9fcGFnZXNpemU7CiAgIF9fY2Fw
YWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICBfX3NpemUgPSAoX19jYXBhY2l0
eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiB9CiAgICAgIGVsc2UgaWYg
KF9fc2l6ZSA+IF9fc3VicGFnZXNpemUpCiB7CiAgIHNpemVfdCBfX2V4dHJhID0KICAgICAoX19z
dWJwYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpICUgX19zdWJwYWdl
c2l6ZSkpCiAgICAgJSBfX3N1YnBhZ2VzaXplOwogICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBz
aXplb2YoX0NoYXJUKTsKICAgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hh
clQpICsgc2l6ZW9mKF9SZXApOwogfQoKCgogICAgICB2b2lkKiBfX3BsYWNlID0gX1Jhd19ieXRl
c19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOwogICAgICBfUmVwICpfX3AgPSBuZXcg
KF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2FwYWNpdHkgPSBfX2NhcGFjaXR5OwogICAg
ICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfX3AtPl9NX2xlbmd0aCA9IDA7CiAgICAg
IHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9jbG9uZShjb25zdCBfQWxsb2Mm
IF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
X3JlcXVlc3RlZF9jYXAgPSBfTV9sZW5ndGggKyBfX3JlczsKCiAgICAgIGNvbnN0IHNpemVfdHlw
ZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRl
cl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFn
ZV9jYXBhY2l0eSA9CiAgICAgICAgKF9fcGFnZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6ZSAt
IHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7
CiAgICAgIF9SZXAqIF9fcjsKICAgICAgaWYgKF9fcmVxdWVzdGVkX2NhcCA+IF9NX2NhcGFjaXR5
ICYmIF9fcmVxdWVzdGVkX2NhcCA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgX19yID0gX1Jl
cDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCA+IDIqX01fY2FwYWNpdHkgPwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3JlcXVlc3RlZF9jYXAgOiAyKl9NX2NhcGFjaXR5LCBfX2Fs
bG9jKTsKICAgICAgZWxzZQogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3Rl
ZF9jYXAsIF9fYWxsb2MpOwoKICAgICAgaWYgKF9NX2xlbmd0aCkKIHsKICAgdHJ5CiAgICAgeyB0
cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9sZW5n
dGgpOyB9CiAgIGNhdGNoKC4uLikKICAgICB7CiAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hbGxv
Yyk7CiAgICAgICB0aHJvdzsKICAgICB9CiB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVu
Z3RoOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9p
ZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzaXplKHNpemVf
dHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmIChfX24gPiBtYXhfc2l6ZSgpKQog
X190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzaXplIik7CiAgICAgIHNpemVf
dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgPCBfX24pCiB0aGlz
LT5hcHBlbmQoX19uIC0gX19zaXplLCBfX2MpOwogICAgICBlbHNlIGlmIChfX24gPCBfX3NpemUp
CiB0aGlzLT5lcmFzZShfX24pOwoKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01f
cmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAg
IF9JbnB1dEl0ZXIgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CgogYmFzaWNfc3Ry
aW5nIF9fcyhfX2sxLCBfX2syKTsKIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX19pMSwgX19pMiwg
X19zLl9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpKTsKICAgICAgfQoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICAgIF9NX3JlcGxhY2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2ky
LCBfRm9yd2FyZEl0ZXIgX19rMSwKICAgICAgICBfRm9yd2FyZEl0ZXIgX19rMikKICAgICAgewog
c2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oc3RkOjpkaXN0YW5jZShf
X2sxLCBfX2syKSk7CiBzaXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7CiBzaXplX3R5cGUg
X19kbWF4ID0gdGhpcy0+bWF4X3NpemUoKTsKCiBpZiAoX19kbWF4IDw9IF9fZG5ldykKICAgX190
aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X01fcmVwbGFjZSIpOwogc2l6ZV90eXBl
IF9fb2ZmID0gX19pMSAtIF9NX2liZWdpbigpOwogX01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9f
ZG5ldyk7CgoKICAgICAgICBpZiAoX19kbmV3KQogICBfU19jb3B5X2NoYXJzKF9NX2RhdGEoKSAr
IF9fb2ZmLCBfX2sxLCBfX2syKTsKCiByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNp
emVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgIHNpemVfdHlwZSBf
X3BvczIsIHNpemVfdHlwZSBfX24yKQogICAgewogICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJz
aXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQogX190aHJv
d19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICBjb25zdCBib29s
IF9fdGVzdG4yID0gX19uMiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fZm9sZG4yID0gX190ZXN0bjIgPyBfX24yIDogX19zdHJzaXplIC0gX19wb3MyOwogICAg
ICByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvczEsIF9fbjEsCiAgICAgIF9fc3RyLl9NX2RhdGEo
KSArIF9fcG9zMiwgX19mb2xkbjIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewoKCgog
ICAgICBzaXplX3R5cGUgX19zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19s
ZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFj
aXR5KCkpCiB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2Fm
ZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01faWJlZ2luKCksCiAgICAgICAgX19zdHIu
X01faWVuZCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19sZW4gPSBzdGQ6Om1pbihzaXpl
X3R5cGUoX19zdHIuc2l6ZSgpIC0gX19wb3MpLAogICAgIF9fbikgKyB0aGlzLT5zaXplKCk7CiAg
ICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiB0aGlzLT5yZXNlcnZlKF9fbGVuKTsK
ICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIu
X01fY2hlY2soX19wb3MpLAogICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0g
X19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQog
dGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVu
ZCgpLCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykK
ICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBp
ZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAg
ICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAg
IG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAg
ICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjpsZW5ndGgoX19saHMpOwogICAgICBfX3N0
cmluZ190eXBlIF9fc3RyOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgp
KTsKICAgICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9fbGVuKTsKICAgICAgX19zdHIu
YXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19s
aHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQog
ICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4g
X19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXpl
X3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc2l6
ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsg
MSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19saHMpOwogICAgICBfX3N0
ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRv
ciBfX2kyLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBl
IF9fbjEgPSBfX2kyIC0gX19pMTsKICAgICAgc2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9p
YmVnaW4oKTsKICAgICAgaWYgKG1heF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0g
X19uMikKIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAg
ICAgX01fbXV0YXRlIChfX29mZjEsIF9fbjEsIF9fbjIpOwoKICAgICAgaWYgKF9fbjIpCiB0cmFp
dHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKSArIF9fb2ZmMSwgX19uMiwgX19jKTsKICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXpl
X3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkK
IF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlmIChf
X24gPiB0aGlzLT5zaXplKCkgLSBfX3BvcykKIF9fbiA9IHRoaXMtPnNpemUoKSAtIF9fcG9zOwoK
ICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9kYXRhKCkgKyBfX3BvcywgX19uKTsKCiAg
ICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6
ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBjb25z
dCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgZm9yICg7IF9feHBvcyArIF9fbiA8
PSBfX3NpemU7ICsrX194cG9zKQogaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9f
eHBvcywgX19zLCBfX24pID09IDApCiAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9z
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsK
ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9f
cmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQogewogICBjb25zdCBfQ2hhclQq
IF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgc2l6ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwog
ICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fZGF0YSArIF9fcG9zLCBf
X24sIF9fYyk7CiAgIGlmIChfX3ApCiAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiB9CiAgICAg
IHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5
cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3Np
emUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX24gPD0gX19zaXplKQogewogICBfX3BvcyA9
IHN0ZDo6bWluKHNpemVfdHlwZShfX3NpemUgLSBfX24pLCBfX3Bvcyk7CiAgIGNvbnN0IF9DaGFy
VCogX19kYXRhID0gX01fZGF0YSgpOwogICBkbwogICAgIHsKICAgICAgIGlmICh0cmFpdHNfdHlw
ZTo6Y29tcGFyZShfX2RhdGEgKyBfX3BvcywgX19zLCBfX24pID09IDApCiAgcmV0dXJuIF9fcG9z
OwogICAgIH0KICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsKIH0KICAgICAgcmV0dXJuIG5wb3M7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAg
ICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKIHsK
ICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6ZSAtIDE7CiAgIGlmIChfX3hwb3MgPiBfX3BvcykKICAg
ICBfX3hwb3MgPSBfX3BvczsKCiAgIGZvciAoKytfX3hwb3M7IF9feHBvcy0tID4gMDsgKQogICAg
IGlmICh0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICByZXR1
cm4gX194cG9zOwogfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFt
ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9vZihj
b25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAog
ICAgewogICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+c2l6ZSgpOyArK19fcG9zKQog
ewogICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9k
YXRhKClbX19wb3NdKTsKICAgaWYgKF9fcCkKICAgICByZXR1cm4gX19wb3M7CiB9CiAgICAgIHJl
dHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f
c2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pCiB7CiAgIGlmICgt
LV9fc2l6ZSA+IF9fcG9zKQogICAgIF9fc2l6ZSA9IF9fcG9zOwogICBkbwogICAgIHsKICAgICAg
IGlmICh0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogIHJl
dHVybiBfX3NpemU7CiAgICAgfQogICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiB9CiAgICAgIHJl
dHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywg
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3Qg
X194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194
cG9zKQogaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19feHBvc10p
KQogICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0
eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUK
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJz
dF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBz
aXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7
ICsrX194cG9zKQogaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykp
CiAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5
cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rf
bm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p
IGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg
IGlmIChfX3NpemUpCiB7CiAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgIF9fc2l6ZSA9IF9f
cG9zOwogICBkbwogICAgIHsKICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24s
IF9NX2RhdGEoKVtfX3NpemVdKSkKICByZXR1cm4gX19zaXplOwogICAgIH0KICAgd2hpbGUgKF9f
c2l6ZS0tKTsKIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2Yo
X0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUg
X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogewogICBpZiAoLS1fX3Np
emUgPiBfX3BvcykKICAgICBfX3NpemUgPSBfX3BvczsKICAgZG8KICAgICB7CiAgICAgICBpZiAo
IXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX19zaXplXSwgX19jKSkKICByZXR1cm4gX19zaXpl
OwogICAgIH0KICAgd2hpbGUgKF9fc2l6ZS0tKTsKIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp
cy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAg
aWYgKF9fcG9zID4gX19zaXplKQogX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6
Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IHN0ZDo6bWluKHNpemVfdHlwZShf
X3NpemUgLSBfX3BvcyksIF9fbik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9f
cnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01f
ZGF0YSgpICsgX19wb3MsIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAgICBpZiAoIV9fcikKIF9f
ciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21w
YXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcm
IF9fc3RyLAogICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAg
ewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUg
X19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBfX3Bv
czIgPiBfX29zaXplKQogX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFy
ZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBzdGQ6Om1pbihzaXplX3R5cGUoX19zaXpl
IC0gX19wb3MxKSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IHN0ZDo6bWluKHNp
emVfdHlwZShfX29zaXplIC0gX19wb3MyKSwgX19uMik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9
IHN0ZDo6bWluKF9fcnNpemUsIF9fcm9zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBl
Ojpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwKICAgICAgICAgX19zdHIuZGF0YSgpICsgX19w
b3MyLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogX19yID0gX19yc2l6ZSAtIF9fcm9zaXplOwog
ICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykg
Y29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAg
c2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHNpemVf
dHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0
cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9f
cikKIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQq
IF9fcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsK
ICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0
cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6
bGVuZ3RoKF9fcyk7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gc3RkOjptaW4oc2l6ZV90eXBl
KF9fc2l6ZSAtIF9fcG9zKSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWlu
KF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUo
X01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKIF9fciA9IF9f
cnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAog
ICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShz
aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICBz
aXplX3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMt
PnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogX190aHJvd19vdXRfb2ZfcmFuZ2Uo
ImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBzdGQ6
Om1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19y
c2l6ZSA9IHN0ZDo6bWluKHNpemVfdHlwZShfX3NpemUgLSBfX3BvcyksIF9fbjEpOwogICAgICBz
aXplX3R5cGUgX19sZW4gPSBzdGQ6Om1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9f
ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsK
ICAgICAgaWYgKCFfX3IpCiBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9f
cjsKICAgIH0KCgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmc8Y2hhcj47
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I+
PihiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi
YXNpY19vc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXI+Jiwg
Y29uc3Qgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+
JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJiwgY2hhcik7CiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNpY19p
c3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiMgMTA3OSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12
My9pbmNsdWRlL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMwp9CiMgNTggIi9nY2MvZGplL2J1aWxk
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9s
aWJzdGRjKystdjMvaW5jbHVkZS9zdHJpbmciIDIgMwojIDQ4ICIvZ2NjL2RqZS9idWlsZC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk
YysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVfY2xhc3Nlcy5oIiAyIDMKCgpuYW1lc3BhY2Ugc3Rk
CnsKCiAgY2xhc3MgbG9jYWxlCiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGlu
dCBjYXRlZ29yeTsKCgogICAgY2xhc3MgZmFjZXQ7CiAgICBjbGFzcyBpZDsKICAgIGNsYXNzIF9J
bXBsOwoKICAgIGZyaWVuZCBjbGFzcyBmYWNldDsKICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsKCiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAg
ICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj
ZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJv
dygpOwoKCgogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUgPSAwOwogICAgc3RhdGljIGNv
bnN0IGNhdGVnb3J5IGN0eXBlID0gMUwgPDwgMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBu
dW1lcmljID0gMUwgPDwgMTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwg
PDwgMjsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lID0gMUwgPDwgMzsKICAgIHN0YXRp
YyBjb25zdCBjYXRlZ29yeSBtb25ldGFyeSA9IDFMIDw8IDQ7CiAgICBzdGF0aWMgY29uc3QgY2F0
ZWdvcnkgbWVzc2FnZXMgPSAxTCA8PCA1OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9
IChjdHlwZSB8IG51bWVyaWMgfCBjb2xsYXRlIHwKICAgICAgICAgdGltZSB8IG1vbmV0YXJ5IHwg
bWVzc2FnZXMpOwoKCiAgICBsb2NhbGUoKSB0aHJvdygpOwoKICAgIGxvY2FsZShjb25zdCBsb2Nh
bGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShjb25zdCBjaGFy
KiBfX3MpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgY2hhciogX19z
LCBjYXRlZ29yeSBfX2NhdCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25z
dCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZhY2V0PgogICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZik7
CgogICAgfmxvY2FsZSgpIHRocm93KCk7CgogICAgY29uc3QgbG9jYWxlJgogICAgb3BlcmF0b3I9
KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
RmFjZXQ+CiAgICAgIGxvY2FsZQogICAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcikg
Y29uc3Q7CgoKICAgIHN0cmluZwogICAgbmFtZSgpIGNvbnN0OwoKICAgIGJvb2wKICAgIG9wZXJh
dG9yPT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKTsKCiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgp
CiAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9CgogICAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
ICAgYm9vbAogICAgICBvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0
cywgX0FsbG9jPiYgX19zMSwKICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3MyKSBjb25zdDsKCgogICAgc3RhdGljIGxvY2FsZQogICAgZ2xvYmFsKGNvbnN0
IGxvY2FsZSYpOwoKICAgIHN0YXRpYyBjb25zdCBsb2NhbGUmCiAgICBjbGFzc2ljKCk7CgogIHBy
aXZhdGU6CgogICAgX0ltcGwqIF9NX2ltcGw7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfY2xhc3Np
YzsKCgogICAgc3RhdGljIF9JbXBsKiBfU19nbG9iYWw7CiMgMTU0ICIvZ2NjL2RqZS9idWlsZC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli
c3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVfY2xhc3Nlcy5oIiAzCiAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IF9TX2NhdGVnb3JpZXNfc2l6ZSA9IDYgKyAwOwoKCgoKCiAgICBzdGF0aWMgY29u
c3QgY2hhcioqIF9TX2NhdGVnb3JpZXM7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShfSW1wbCop
IHRocm93KCk7CgogICAgc3RhdGljIGlubGluZSB2b2lkCiAgICBfU19pbml0aWFsaXplKCkKICAg
IHsKICAgICAgaWYgKCFfU19jbGFzc2ljKQogY2xhc3NpYygpOwogICAgfQoKICAgIHN0YXRpYyBj
YXRlZ29yeQogICAgX1Nfbm9ybWFsaXplX2NhdGVnb3J5KGNhdGVnb3J5KTsKCiAgICB2b2lkCiAg
ICBfTV9jb2FsZXNjZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwg
Y2F0ZWdvcnkgX19jYXQpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjpfSW1wbAogIHsKICBwdWJs
aWM6CgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6OmZh
Y2V0OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9G
YWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2Fs
ZSYpIHRocm93KCk7CgogIHByaXZhdGU6CgogICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7
CiAgICBjb25zdCBmYWNldCoqIF9NX2ZhY2V0czsKICAgIHNpemVfdCBfTV9mYWNldHNfc2l6ZTsK
ICAgIGNoYXIqKiBfTV9uYW1lczsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBf
U19pZF9jdHlwZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX251
bWVyaWNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jb2xsYXRl
W107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfdGltZVtdOwogICAg
c3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5W107CiAgICBzdGF0
aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbWVzc2FnZXNbXTsKICAgIHN0YXRpYyBj
b25zdCBsb2NhbGU6OmlkKiBjb25zdCogY29uc3QgX1NfZmFjZXRfY2F0ZWdvcmllc1tdOwoKICAg
IGlubGluZSB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgeyBfX2F0b21p
Y19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOyB9CgogICAgaW5saW5lIHZvaWQKICAgIF9NX3JlbW92
ZV9yZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQo
Jl9NX3JlZmVyZW5jZXMsIC0xKSA9PSAxKQogewogICB0cnkKICAgICB7IGRlbGV0ZSB0aGlzOyB9
CiAgIGNhdGNoKC4uLikKICAgICB7IH0KIH0KICAgIH0KCiAgICBfSW1wbChjb25zdCBfSW1wbCYs
IHNpemVfdCk7CiAgICBfSW1wbChjb25zdCBjaGFyKiwgc2l6ZV90KTsKICAgIF9JbXBsKGZhY2V0
KiosIHNpemVfdCwgYm9vbCk7CgogICB+X0ltcGwoKSB0aHJvdygpOwoKICAgIF9JbXBsKGNvbnN0
IF9JbXBsJik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IF9JbXBsJik7CgogICAgaW5s
aW5lIGJvb2wKICAgIF9NX2NoZWNrX3NhbWVfbmFtZSgpCiAgICB7CiAgICAgIGJvb2wgX19yZXQg
PSB0cnVlOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX3JldCAmJiBfX2kgPCBfU19jYXRl
Z29yaWVzX3NpemUgLSAxOyArK19faSkKIF9fcmV0ICY9IChzdHJjbXAoX01fbmFtZXNbX19pXSwg
X01fbmFtZXNbX19pICsgMV0pID09IDApOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogICAg
dm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29yaWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOwoK
ICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdvcnkoY29uc3QgX0ltcGwqLCBjb25zdCBsb2Nh
bGU6OmlkKiBjb25zdCopOwoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfZmFjZXQoY29uc3QgX0lt
cGwqLCBjb25zdCBsb2NhbGU6OmlkKik7CgogICAgdm9pZAogICAgX01faW5zdGFsbF9mYWNldChj
b25zdCBsb2NhbGU6OmlkKiwgY29uc3QgZmFjZXQqKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
RmFjZXQ+CiAgICAgIGlubGluZSB2b2lkCiAgICAgIF9NX2luaXRfZmFjZXQoX0ZhY2V0KiBfX2Zh
Y2V0KQogICAgICB7IF9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZmFjZXQpOyB9CiAg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxlOjpsb2NhbGUoY29uc3Qg
bG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZikKICAgIHsKICAgICAgX01faW1wbCA9IG5ldyBf
SW1wbCgqX19vdGhlci5fTV9pbXBsLCAxKTsKICAgICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNl
dCgmX0ZhY2V0OjppZCwgX19mKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX1Nf
Y2F0ZWdvcmllc19zaXplOyArK19faSkKIHsKICAgZGVsZXRlIFtdIF9NX2ltcGwtPl9NX25hbWVz
W19faV07CiAgIGNoYXIqIF9fbmV3ID0gbmV3IGNoYXJbMl07CiAgIHN0cmNweShfX25ldywgIioi
KTsKICAgX01faW1wbC0+X01fbmFtZXNbX19pXSA9IF9fbmV3OwogfQogICAgfQoKCgogIGNsYXNz
IGxvY2FsZTo6ZmFjZXQKICB7CiAgcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAg
ICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKCiAgICBtdXRhYmxlIF9BdG9taWNfd29yZCBf
TV9yZWZlcmVuY2VzOwoKICBwcm90ZWN0ZWQ6CgogICAgc3RhdGljIF9fY19sb2NhbGUgX1NfY19s
b2NhbGU7CgoKICAgIHN0YXRpYyBjaGFyIF9TX2NfbmFtZVsyXTsKCiAgICBleHBsaWNpdAogICAg
ZmFjZXQoc2l6ZV90IF9fcmVmcyA9IDApIHRocm93KCk7CgogICAgdmlydHVhbAogICAgfmZhY2V0
KCk7CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBf
X2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKICAgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IDApOwoK
ICAgIHN0YXRpYyBfX2NfbG9jYWxlCiAgICBfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBf
X2Nsb2MpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2Nh
bGUmIF9fY2xvYyk7CgogIHByaXZhdGU6CiAgICB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkg
Y29uc3QgdGhyb3coKTsKCiAgICB2b2lkCiAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgY29uc3Qg
dGhyb3coKTsKCiAgICBmYWNldChjb25zdCBmYWNldCYpOwoKICAgIHZvaWQKICAgIG9wZXJhdG9y
PShjb25zdCBmYWNldCYpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjppZAogIHsKICBwcml2YXRl
OgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBs
OwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0
JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
RmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0
aHJvdyAoKTsKCgoKCiAgICBtdXRhYmxlIHNpemVfdCBfTV9pbmRleDsKCgogICAgc3RhdGljIF9B
dG9taWNfd29yZCBfU19oaWdod2F0ZXI7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IGlk
Jik7CgogICAgaWQoY29uc3QgaWQmKTsKCiAgcHVibGljOgoKCiAgICBpZCgpOwoKICAgIGlubGlu
ZSBzaXplX3QKICAgIF9NX2lkKCkgY29uc3QKICAgIHsKICAgICAgaWYgKCFfTV9pbmRleCkKIF9N
X2luZGV4ID0gMSArIF9fZXhjaGFuZ2VfYW5kX2FkZCgmX1NfaGlnaHdhdGVyLCAxKTsKICAgICAg
cmV0dXJuIF9NX2luZGV4IC0gMTsKICAgIH0KICB9Owp9CiMgNDggIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9iaXRzL2lvc19iYXNlLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoK
CgogIGVudW0gX0lvc19GbXRmbGFncyB7IF9NX2lvc19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9
OwoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwg
X0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxp
bnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZs
YWdzCiAgb3BlcmF0b3J8KF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7
IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0
PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl4oX0lvc19G
bXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Mo
c3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxp
bmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0Zt
dGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3Nf
Rm10ZmxhZ3MKICBvcGVyYXRvciY9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBf
X2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdz
CiAgb3BlcmF0b3JePShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsg
cmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJh
dG9yfihfSW9zX0ZtdGZsYWdzIF9fYSkKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKH5zdGF0aWNf
Y2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9Jb3NfT3Blbm1vZGUgeyBfTV9pb3Nfb3Blbm1v
ZGVfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciYo
X0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Bl
bm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoK
ICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfChfSW9zX09wZW5tb2RlIF9fYSwgX0lv
c19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+
KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2Rl
CiAgb3BlcmF0b3JeKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJl
dHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGlu
dD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnw9KF9Jb3NfT3Bl
bm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19i
OyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3ImPShfSW9zX09wZW5tb2RlJiBf
X2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBp
bmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yXj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9z
X09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9J
b3NfT3Blbm1vZGUKICBvcGVyYXRvcn4oX0lvc19PcGVubW9kZSBfX2EpCiAgeyByZXR1cm4gX0lv
c19PcGVubW9kZSh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX0lvc3Rh
dGUgeyBfTV9pb3NfaW9zdGF0ZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19Jb3N0
YXRlCiAgb3BlcmF0b3ImKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyBy
ZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGlu
dD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfChfSW9zX0lvc3Rh
dGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNf
Y2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9z
X0lvc3RhdGUKICBvcGVyYXRvcl4oX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikK
ICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nh
c3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8PShfSW9z
X0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBf
X2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBf
X2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlu
bGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl49KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lv
c3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19J
b3N0YXRlCiAgb3BlcmF0b3J+KF9Jb3NfSW9zdGF0ZSBfX2EpCiAgeyByZXR1cm4gX0lvc19Jb3N0
YXRlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgogIGVudW0gX0lvc19TZWVrZGlyIHsgX01f
aW9zX3NlZWtkaXJfZW5kID0gMUwgPDwgMTYgfTsKCiAgY2xhc3MgX19sb2NhbGVfY2FjaGVfYmFz
ZTsKIyAxNjAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2lvc19iYXNl
LmgiIDMKICBjbGFzcyBpb3NfYmFzZQogIHsKICBwdWJsaWM6CgoKCiAgICBjbGFzcyBmYWlsdXJl
IDogcHVibGljIGV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIGZhaWx1cmUoY29uc3Qgc3RyaW5nJiBfX3N0cikgdGhyb3coKTsKCgoKICAgICAgdmlydHVh
bAogICAgICB+ZmFpbHVyZSgpIHRocm93KCk7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAg
ICAgIHdoYXQoKSBjb25zdCB0aHJvdygpOwoKICAgIHByaXZhdGU6CiAgICAgIGVudW0geyBfTV9i
dWZzaXplID0gMjU2IH07CiAgICAgIGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsKCiAgICB9Owoj
IDIxNCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaW9zX2Jhc2UuaCIg
MwogICAgdHlwZWRlZiBfSW9zX0ZtdGZsYWdzIGZtdGZsYWdzOwoKICAgIHN0YXRpYyBjb25zdCBm
bXRmbGFncyBib29sYWxwaGEgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhhKTsK
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZGVjID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9T
X2RlYyk7CgogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZpeGVkID0gZm10ZmxhZ3MoX19pb3Nf
ZmxhZ3M6Ol9TX2ZpeGVkKTsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10Zmxh
Z3MoX19pb3NfZmxhZ3M6Ol9TX2hleCk7CgoKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaW50
ZXJuYWwgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaW50ZXJuYWwpOwoKCiAgICBzdGF0aWMg
Y29uc3QgZm10ZmxhZ3MgbGVmdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19sZWZ0KTsKCiAg
ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgb2N0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX29j
dCk7CgoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyByaWdodCA9IGZtdGZsYWdzKF9faW9zX2Zs
YWdzOjpfU19yaWdodCk7CgogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNjaWVudGlmaWMgPSBm
bXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2NpZW50aWZpYyk7CgoKICAgIHN0YXRpYyBjb25zdCBm
bXRmbGFncyBzaG93YmFzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93YmFzZSk7CgoK
ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9pbnQgPSBmbXRmbGFncyhfX2lvc19mbGFn
czo6X1Nfc2hvd3BvaW50KTsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvcyA9IGZt
dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9zKTsKCiAgICBzdGF0aWMgY29uc3QgZm10Zmxh
Z3Mgc2tpcHdzID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NraXB3cyk7CgogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdW5pdGJ1
Zik7CgoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSBmbXRmbGFncyhfX2lv
c19mbGFnczo6X1NfdXBwZXJjYXNlKTsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYWRqdXN0
ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYWRqdXN0ZmllbGQpOwoKICAgIHN0YXRp
YyBjb25zdCBmbXRmbGFncyBiYXNlZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYmFz
ZWZpZWxkKTsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZmxvYXRmaWVsZCA9IGZtdGZsYWdz
KF9faW9zX2ZsYWdzOjpfU19mbG9hdGZpZWxkKTsKIyAyNzEgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9iaXRzL2lvc19iYXNlLmgiIDMKICAgIHR5cGVkZWYgX0lvc19Jb3N0YXRl
IGlvc3RhdGU7CgoKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUoX19p
b3NfZmxhZ3M6Ol9TX2JhZGJpdCk7CgogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9mYml0ID0g
aW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZW9mYml0KTsKCgoKICAgIHN0YXRpYyBjb25zdCBpb3N0
YXRlIGZhaWxiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19mYWlsYml0KTsKCiAgICBzdGF0
aWMgY29uc3QgaW9zdGF0ZSBnb29kYml0ID0gaW9zdGF0ZSgwKTsKIyAyOTggIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2lvc19iYXNlLmgiIDMKICAgIHR5cGVkZWYgX0lv
c19PcGVubW9kZSBvcGVubW9kZTsKCiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXBwID0gb3Bl
bm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2FwcCk7CgogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGF0
ZSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hdGUpOwoKCgoKICAgIHN0YXRpYyBjb25zdCBv
cGVubW9kZSBiaW5hcnkgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsKCiAgICBzdGF0
aWMgY29uc3Qgb3Blbm1vZGUgaW4gPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfaW4pOwoKICAg
IHN0YXRpYyBjb25zdCBvcGVubW9kZSBvdXQgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nfb3V0
KTsKCiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19mbGFn
czo6X1NfdHJ1bmMpOwojIDMyNSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Jp
dHMvaW9zX2Jhc2UuaCIgMwogICAgdHlwZWRlZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsKCiAgICBz
dGF0aWMgY29uc3Qgc2Vla2RpciBiZWcgPSBzZWVrZGlyKDApOwoKICAgIHN0YXRpYyBjb25zdCBz
ZWVrZGlyIGN1ciA9IHNlZWtkaXIoMSk7CgogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgZW5kID0g
c2Vla2RpcigyKTsKIyAzNDcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt
MjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRz
L2lvc19iYXNlLmgiIDMKICAgIGVudW0gZXZlbnQKICAgIHsKICAgICAgZXJhc2VfZXZlbnQsCiAg
ICAgIGltYnVlX2V2ZW50LAogICAgICBjb3B5Zm10X2V2ZW50CiAgICB9OwoKCgoKICAgIHR5cGVk
ZWYgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSAoZXZlbnQsIGlvc19iYXNlJiwgaW50KTsKCgoKCiAg
ICB2b2lkCiAgICByZWdpc3Rlcl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19p
bmRleCk7CgogIHByb3RlY3RlZDoKCgoKCgoKICAgIHN0cmVhbXNpemUgX01fcHJlY2lzaW9uOwog
ICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsKICAgIGZtdGZsYWdzIF9NX2ZsYWdzOwogICAgaW9zdGF0
ZSBfTV9leGNlcHRpb247CiAgICBpb3N0YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsKCgoKCiAgICBz
dHJ1Y3QgX0NhbGxiYWNrX2xpc3QKICAgIHsKCiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0
OwogICAgICBpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX01fZm47CiAgICAgIGludCBfTV9pbmRl
eDsKICAgICAgX0F0b21pY193b3JkIF9NX3JlZmNvdW50OwoKICAgICAgX0NhbGxiYWNrX2xpc3Qo
aW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4LAogICAgICAgX0NhbGxi
YWNrX2xpc3QqIF9fY2IpCiAgICAgIDogX01fbmV4dChfX2NiKSwgX01fZm4oX19mbiksIF9NX2lu
ZGV4KF9faW5kZXgpLCBfTV9yZWZjb3VudCgwKSB7IH0KCiAgICAgIHZvaWQKICAgICAgX01fYWRk
X3JlZmVyZW5jZSgpIHsgX19hdG9taWNfYWRkKCZfTV9yZWZjb3VudCwgMSk7IH0KCgogICAgICBp
bnQKICAgICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHsgcmV0dXJuIF9fZXhjaGFuZ2VfYW5kX2Fk
ZCgmX01fcmVmY291bnQsIC0xKTsgfQogICAgfTsKCiAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX2Nh
bGxiYWNrczsKCiAgICB2b2lkCiAgICBfTV9jYWxsX2NhbGxiYWNrcyhldmVudCBfX2V2KSB0aHJv
dygpOwoKICAgIHZvaWQKICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKHZvaWQpOwoKCiAgICBzdHJ1
Y3QgX1dvcmRzCiAgICB7CiAgICAgIHZvaWQqIF9NX3B3b3JkOwogICAgICBsb25nIF9NX2l3b3Jk
OwogICAgICBfV29yZHMoKSA6IF9NX3B3b3JkKDApLCBfTV9pd29yZCgwKSB7IH0KICAgIH07CgoK
ICAgIF9Xb3JkcyBfTV93b3JkX3plcm87CgoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX2xvY2Fs
X3dvcmRfc2l6ZSA9IDg7CiAgICBfV29yZHMgX01fbG9jYWxfd29yZFtfU19sb2NhbF93b3JkX3Np
emVdOwoKCiAgICBpbnQgX01fd29yZF9zaXplOwogICAgX1dvcmRzKiBfTV93b3JkOwoKICAgIF9X
b3JkcyYKICAgIF9NX2dyb3dfd29yZHMoaW50IF9faW5kZXgpOwoKCiAgICBsb2NhbGUgX01faW9z
X2xvY2FsZTsKCgoKICAgIGF1dG9fcHRyPF9fbG9jYWxlX2NhY2hlX2Jhc2U+IF9NX2xvY2FsZV9j
YWNoZTsKCiAgICB2b2lkCiAgICBfTV9pbml0KCk7CgogIHB1YmxpYzoKCgoKCgogICAgY2xhc3Mg
SW5pdAogICAgewogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7CiAgICBwdWJsaWM6CiAgICAg
IEluaXQoKTsKICAgICAgfkluaXQoKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NyZWF0
ZV9idWZmZXJzKGJvb2wgX19zeW5jKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2Rlc3Ry
b3lfYnVmZmVycygpOwoKCgoKICAgICAgc3RhdGljIGJvb2wKICAgICAgX1NfaW5pdGlhbGl6ZWQo
KSB7IHJldHVybiBfU19pb3NfYmFzZV9pbml0OyB9CgogICAgcHJpdmF0ZToKICAgICAgc3RhdGlj
IGludCBfU19pb3NfYmFzZV9pbml0OwogICAgICBzdGF0aWMgYm9vbCBfU19zeW5jZWRfd2l0aF9z
dGRpbzsKICAgIH07CgoKCgoKCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdzKCkgY29uc3Qg
eyByZXR1cm4gX01fZmxhZ3M7IH0KIyA0ODcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j
bHVkZS9iaXRzL2lvc19iYXNlLmgiIDMKICAgIGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoZm10
ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAg
ICAgX01fZmxhZ3MgPSBfX2ZtdGZsOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CiMgNTAzICIv
Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9pb3NfYmFzZS5oIiAzCiAgICBp
bmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10
ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgfD0gX19mbXRmbDsKICAgICAg
cmV0dXJuIF9fb2xkOwogICAgfQojIDUyMCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs
dWRlL2JpdHMvaW9zX2Jhc2UuaCIgMwogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZtdGZs
YWdzIF9fZm10ZmwsIGZtdGZsYWdzIF9fbWFzaykKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQg
PSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgJj0gfl9fbWFzazsKICAgICAgX01fZmxhZ3MgfD0g
KF9fZm10ZmwgJiBfX21hc2spOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgoKCgoKCgogICAg
aW5saW5lIHZvaWQKICAgIHVuc2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZmxhZ3MgJj0gfl9f
bWFzazsgfQojIDU0NyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz
MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaW9z
X2Jhc2UuaCIgMwogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbigpIGNvbnN0IHsg
cmV0dXJuIF9NX3ByZWNpc2lvbjsgfQoKCgoKCgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHBy
ZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9
IF9NX3ByZWNpc2lvbjsKICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOwogICAgICByZXR1cm4g
X19vbGQ7CiAgICB9CgoKCgoKCgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKCkgY29u
c3QgeyByZXR1cm4gX01fd2lkdGg7IH0KCgoKCgoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3
aWR0aChzdHJlYW1zaXplIF9fd2lkZSkKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9N
X3dpZHRoOwogICAgICBfTV93aWR0aCA9IF9fd2lkZTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAg
fQojIDU5NiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaW9zX2Jhc2Uu
aCIgMwogICAgc3RhdGljIGJvb2wKICAgIHN5bmNfd2l0aF9zdGRpbyhib29sIF9fc3luYyA9IHRy
dWUpOwojIDYwOCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy
OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaW9zX2Jh
c2UuaCIgMwogICAgbG9jYWxlCiAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKIyA2MTkg
Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2lvc19iYXNlLmgiIDMKICAg
IGlubGluZSBsb2NhbGUKICAgIGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19sb2NhbGU7
IH0KCgoKCgogICAgc3RhdGljIGludAogICAgeGFsbG9jKCkgdGhyb3coKTsKCgoKCiAgICBpbmxp
bmUgbG9uZyYKICAgIGl3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9
IChfX2l4IDwgX01fd29yZF9zaXplKQogICA/IF9NX3dvcmRbX19peF0gOiBfTV9ncm93X3dvcmRz
KF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX2l3b3JkOwogICAgfQoKCgoKICAgIGlubGlu
ZSB2b2lkKiYKICAgIHB3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9
IChfX2l4IDwgX01fd29yZF9zaXplKQogICA/IF9NX3dvcmRbX19peF0gOiBfTV9ncm93X3dvcmRz
KF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX3B3b3JkOwogICAgfQoKCgogICAgX19sb2Nh
bGVfY2FjaGVfYmFzZSYKICAgIF9NX2NhY2hlKCkgeyByZXR1cm4gKl9NX2xvY2FsZV9jYWNoZTsg
fQoKCgoKCgogICAgdmlydHVhbCB+aW9zX2Jhc2UoKTsKCiAgcHJvdGVjdGVkOgogICAgaW9zX2Jh
c2UoKTsKCgoKICBwcml2YXRlOgogICAgaW9zX2Jhc2UoY29uc3QgaW9zX2Jhc2UmKTsKCiAgICBp
b3NfYmFzZSYKICAgIG9wZXJhdG9yPShjb25zdCBpb3NfYmFzZSYpOwoKICB9OwoKCgogIGlubGlu
ZSBpb3NfYmFzZSYKICBib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu
c2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5s
aW5lIGlvc19iYXNlJgogIG5vYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i
YXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoK
CiAgaW5saW5lIGlvc19iYXNlJgogIHNob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg
X19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoK
CiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAg
ICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwog
IH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7
CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7
CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2Up
CiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBf
X2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3dwb3MoaW9zX2Jhc2UmIF9fYmFz
ZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19i
YXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFz
ZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBf
X2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIHNraXB3cyhpb3NfYmFzZSYgX19iYXNl
KQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFz
ZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9za2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkK
ICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFz
ZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2Up
CiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19i
YXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBub3VwcGVyY2FzZShpb3NfYmFzZSYgX19i
YXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1
cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICB1bml0YnVmKGlvc19iYXNlJiBf
X2Jhc2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICByZXR1
cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBub3VuaXRidWYoaW9zX2Jhc2Um
IF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAg
cmV0dXJuIF9fYmFzZTsKICB9CgoKCiAgaW5saW5lIGlvc19iYXNlJgogIGludGVybmFsKGlvc19i
YXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9z
X2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBp
b3NfYmFzZSYKICBsZWZ0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z
X2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwog
IH0KCgogIGlubGluZSBpb3NfYmFzZSYKICByaWdodChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAg
IF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAg
IHJldHVybiBfX2Jhc2U7CiAgfQoKCgogIGlubGluZSBpb3NfYmFzZSYKICBkZWMoaW9zX2Jhc2Um
IF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6YmFz
ZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGhl
eChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpoZXgsIGlv
c19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9z
X2Jhc2UmCiAgb2N0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jh
c2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgoK
ICBpbmxpbmUgaW9zX2Jhc2UmCiAgZml4ZWQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh
c2Uuc2V0Zihpb3NfYmFzZTo6Zml4ZWQsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVy
biBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIHNjaWVudGlmaWMoaW9zX2Jhc2Um
IF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2NpZW50aWZpYywgaW9zX2Jh
c2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgp9CiMgNTAgIi9nY2MvZGpl
L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pb3MiIDIgMwojIDEgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDEgMwojIDQ0ICIvZ2NjL2RqZS9idWlsZC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk
YysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCgoKCgoKCm5hbWVzcGFjZSBzdGQKewoKCgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6
ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9pb3Ms
CiAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAg
ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCk7CiMgMTIzICIvZ2Nj
L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVm
CiAgICB7CiAgICBwdWJsaWM6CgoKCgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK
ICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0
cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJh
aXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwojIDE0NiAiL2djYy9kamUvYnVpbGQvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMr
Ky12My9pbmNsdWRlL3N0cmVhbWJ1ZiIgMwogICAgICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4g
X19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRy
YWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0
c190eXBlOjpzdGF0ZV90eXBlIF9fc3RhdGVfdHlwZTsKCgogICAgICBmcmllbmQgY2xhc3MgYmFz
aWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNf
aXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2lj
X29zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xh
c3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKCiAgICAgIGZy
aWVuZCBzdHJlYW1zaXplCiAgICAgIF9fY29weV9zdHJlYW1idWZzPD4oYmFzaWNfaW9zPGNoYXJf
dHlwZSwgdHJhaXRzX3R5cGU+JiBfX2lvcywKICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4s
X19zdHJlYW1idWZfdHlwZSogX19zYm91dCk7CgogICAgcHJvdGVjdGVkOgoKCgoKCgogICAgICBi
b29sIF9NX2J1Zl91bmlmaWVkOwojIDE4MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs
dWRlL3N0cmVhbWJ1ZiIgMwogICAgICBjaGFyX3R5cGUqIF9NX2luX2JlZzsKICAgICAgY2hhcl90
eXBlKiBfTV9pbl9jdXI7CiAgICAgIGNoYXJfdHlwZSogX01faW5fZW5kOwogICAgICBjaGFyX3R5
cGUqIF9NX291dF9iZWc7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2N1cjsKICAgICAgY2hhcl90
eXBlKiBfTV9vdXRfZW5kOwojIDE5NSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl
L3N0cmVhbWJ1ZiIgMwogICAgICBjaGFyX3R5cGUqIF9NX291dF9saW07CiMgMjA0ICIvZ2NjL2Rq
ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAgIGlvc19iYXNlOjpv
cGVubW9kZSBfTV9tb2RlOwoKCgoKCgogICAgICBsb2NhbGUgX01fYnVmX2xvY2FsZTsKCgoKCgoK
ICAgICAgZnBvczxfX3N0YXRlX3R5cGU+IF9NX3BvczsKCgoKICAgICAgdm9pZAogICAgICBfTV9t
b3ZlX2luX2N1cihvZmZfdHlwZSBfX24pCiAgICAgIHsKIGNvbnN0IGJvb2wgX190ZXN0b3V0ID0g
X01fb3V0X2N1cjsKIF9NX2luX2N1ciArPSBfX247CiBpZiAoX190ZXN0b3V0ICYmIF9NX2J1Zl91
bmlmaWVkKQogICBfTV9vdXRfY3VyICs9IF9fbjsKICAgICAgfQojIDIzOSAiL2djYy9kamUvYnVp
bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
L2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0cmVhbWJ1ZiIgMwogICAgICB2b2lkCiAgICAgIF9NX21v
dmVfb3V0X2N1cihvZmZfdHlwZSBfX24pCiAgICAgIHsKIGNvbnN0IGJvb2wgX190ZXN0aW4gPSBf
TV9pbl9jdXI7CgogX01fb3V0X2N1ciArPSBfX247CiBpZiAoX190ZXN0aW4gJiYgX01fYnVmX3Vu
aWZpZWQpCiAgIF9NX2luX2N1ciArPSBfX247CiBpZiAoX01fb3V0X2N1ciA+IF9NX291dF9saW0p
CiAgIHsKICAgICBfTV9vdXRfbGltID0gX01fb3V0X2N1cjsKCiAgICAgaWYgKF9fdGVzdGluKQog
ICAgICAgX01faW5fZW5kICs9IF9fbjsKICAgfQogICAgICB9CgogIHB1YmxpYzoKCiAgICAgIHZp
cnR1YWwKICAgICAgfmJhc2ljX3N0cmVhbWJ1ZigpCiAgICAgIHsKIF9NX2J1Zl91bmlmaWVkID0g
ZmFsc2U7CiBfTV9tb2RlID0gaW9zX2Jhc2U6Om9wZW5tb2RlKDApOwogICAgICB9CiMgMjczICIv
Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAgIGxvY2Fs
ZQogICAgICBwdWJpbWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQogICAgICB7CiBsb2NhbGUgX190
bXAodGhpcy0+Z2V0bG9jKCkpOwogdGhpcy0+aW1idWUoX19sb2MpOwogcmV0dXJuIF9fdG1wOwog
ICAgICB9CiMgMjg5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw
NDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVm
IiAzCiAgICAgIGxvY2FsZQogICAgICBnZXRsb2MoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9i
dWZfbG9jYWxlOyB9CiMgMzAyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3Ry
ZWFtYnVmIiAzCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHB1YnNldGJ1ZihjaGFyX3R5
cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1ZihfX3Ms
IF9fbik7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtvZmYob2ZmX3R5cGUgX19vZmYs
IGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0g
aW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla29m
ZihfX29mZiwgX193YXksIF9fbW9kZSk7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtw
b3MocG9zX3R5cGUgX19zcCwKICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNl
OjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtwb3MoX19zcCwg
X19tb2RlKTsgfQoKICAgICAgaW50CiAgICAgIHB1YnN5bmMoKSB7IHJldHVybiB0aGlzLT5zeW5j
KCk7IH0KIyAzMjkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0
MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYi
IDMKICAgICAgc3RyZWFtc2l6ZQogICAgICBpbl9hdmFpbCgpCiAgICAgIHsKIHN0cmVhbXNpemUg
X19yZXQgPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiByZXR1cm4gX19yZXQgPyBfX3JldCA6IHRo
aXMtPnNob3dtYW55YygpOwogICAgICB9CiMgMzQzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz
L2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAgIGludF90eXBlCiAgICAgIHNuZXh0YygpCiAgICAg
IHsKIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogcmV0dXJuICh0cmFpdHNf
dHlwZTo6ZXFfaW50X3R5cGUodGhpcy0+c2J1bXBjKCksIF9fZW9mKQogID8gX19lb2YgOiB0aGlz
LT5zZ2V0YygpKTsKICAgICAgfQojIDM1OSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs
dWRlL3N0cmVhbWJ1ZiIgMwogICAgICBpbnRfdHlwZQogICAgICBzYnVtcGMoKTsKIyAzNzAgIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDMKICAgICAgaW50X3R5
cGUKICAgICAgc2dldGMoKQogICAgICB7CiBpbnRfdHlwZSBfX3JldDsKIGlmIChfTV9pbl9jdXIg
PCBfTV9pbl9lbmQpCiAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0aGlzLT5f
TV9pbl9jdXIpOwogZWxzZQogICBfX3JldCA9IHRoaXMtPnVuZGVyZmxvdygpOwogcmV0dXJuIF9f
cmV0OwogICAgICB9CiMgMzg5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3Ry
ZWFtYnVmIiAzCiAgICAgIHN0cmVhbXNpemUKICAgICAgc2dldG4oY2hhcl90eXBlKiBfX3MsIHN0
cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54c2dldG4oX19zLCBfX24pOyB9CiMg
NDAzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAg
IGludF90eXBlCiAgICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKTsKIyA0MTUgIi9nY2MvZGpl
L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDMKICAgICAgaW50X3R5cGUKICAg
ICAgc3VuZ2V0YygpOwojIDQzMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0
cmVhbWJ1ZiIgMwogICAgICBpbnRfdHlwZQogICAgICBzcHV0YyhjaGFyX3R5cGUgX19jKTsKIyA0
NDUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDMKICAgICAg
c3RyZWFtc2l6ZQogICAgICBzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
X24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzcHV0bihfX3MsIF9fbik7IH0KCiAgICBwcm90ZWN0
ZWQ6CiMgNDU5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAz
CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZigpCiAgICAgIDogX01fYnVmX3VuaWZpZWQoZmFsc2UpLCBf
TV9pbl9iZWcoMCksIF9NX2luX2N1cigwKSwKICAgICAgX01faW5fZW5kKDApLCBfTV9vdXRfYmVn
KDApLCBfTV9vdXRfY3VyKDApLCBfTV9vdXRfZW5kKDApLAogICAgICBfTV9vdXRfbGltKDApLCBf
TV9tb2RlKGlvc19iYXNlOjpvcGVubW9kZSgwKSksCiAgICAgIF9NX2J1Zl9sb2NhbGUobG9jYWxl
KCkpCiAgICAgIHsgfQojIDQ3OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0
cmVhbWJ1ZiIgMwogICAgICBjaGFyX3R5cGUqCiAgICAgIGViYWNrKCkgY29uc3QgeyByZXR1cm4g
X01faW5fYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGdwdHIoKSBjb25zdCB7IHJldHVy
biBfTV9pbl9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWdwdHIoKSBjb25zdCB7IHJl
dHVybiBfTV9pbl9lbmQ7IH0KIyA0OTQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk
ZS9zdHJlYW1idWYiIDMKICAgICAgdm9pZAogICAgICBnYnVtcChpbnQgX19uKSB7IF9NX2luX2N1
ciArPSBfX247IH0KIyA1MDUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt
MjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJl
YW1idWYiIDMKICAgICAgdm9pZAogICAgICBzZXRnKGNoYXJfdHlwZSogX19nYmVnLCBjaGFyX3R5
cGUqIF9fZ25leHQsIGNoYXJfdHlwZSogX19nZW5kKQogICAgICB7CiBfTV9pbl9iZWcgPSBfX2di
ZWc7CiBfTV9pbl9jdXIgPSBfX2duZXh0OwogX01faW5fZW5kID0gX19nZW5kOwogaWYgKCEoX01f
bW9kZSAmIGlvc19iYXNlOjppbikgJiYgX19nYmVnICYmIF9fZ25leHQgJiYgX19nZW5kKQogICBf
TV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjppbjsKICAgICAgfQojIDUyNyAiL2djYy9kamUv
YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu
My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0cmVhbWJ1ZiIgMwogICAgICBjaGFyX3R5cGUqCiAg
ICAgIHBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2JlZzsgfQoKICAgICAgY2hhcl90eXBl
KgogICAgICBwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2N1cjsgfQoKICAgICAgY2hhcl90
eXBlKgogICAgICBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9lbmQ7IH0KIyA1NDMgIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDMKICAgICAgdm9pZAog
ICAgICBwYnVtcChpbnQgX19uKSB7IF9NX291dF9jdXIgKz0gX19uOyB9CiMgNTUzICIvZ2NjL2Rq
ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAgIHZvaWQKICAgICAg
c2V0cChjaGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBlKiBfX3BlbmQpCiAgICAgIHsKIF9NX291
dF9iZWcgPSBfTV9vdXRfY3VyID0gX01fb3V0X2xpbSA9IF9fcGJlZzsKIF9NX291dF9lbmQgPSBf
X3BlbmQ7CiBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkgJiYgX19wYmVnICYmIF9fcGVu
ZCkKICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6b3V0OwogICAgICB9CiMgNTc1ICIv
Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAgIHZpcnR1
YWwgdm9pZAogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgICB7CiBpZiAoX01f
YnVmX2xvY2FsZSAhPSBfX2xvYykKICAgX01fYnVmX2xvY2FsZSA9IF9fbG9jOwogICAgICB9CiMg
NTkzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAg
IHZpcnR1YWwgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSxfVHJhaXRzPioKICAgICAgc2V0YnVm
KGNoYXJfdHlwZSosIHN0cmVhbXNpemUpCiAgICAgIHsgcmV0dXJuIHRoaXM7IH0KIyA2MDQgIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDMKICAgICAgdmlydHVh
bCBwb3NfdHlwZQogICAgICBzZWVrb2ZmKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2RpciwKICAg
ICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAg
ICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0KIyA2MTYgIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDMKICAgICAgdmlydHVhbCBwb3NfdHlw
ZQogICAgICBzZWVrcG9zKHBvc190eXBlLAogICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9z
X2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5
cGUoLTEpKTsgfQojIDYyOSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y
MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0cmVh
bWJ1ZiIgMwogICAgICB2aXJ0dWFsIGludAogICAgICBzeW5jKCkgeyByZXR1cm4gMDsgfQojIDY1
MSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0cmVhbWJ1ZiIgMwogICAgICB2
aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc2hvd21hbnljKCkgeyByZXR1cm4gMDsgfQojIDY2NyAi
L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0cmVhbWJ1ZiIgMwogICAgICB2aXJ0
dWFsIHN0cmVhbXNpemUKICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f
bik7CiMgNjg5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAz
CiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCkKICAgICAgeyByZXR1cm4g
dHJhaXRzX3R5cGU6OmVvZigpOyB9CiMgNzAyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu
Y2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdWZsb3coKQog
ICAgICB7CiBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKIGNvbnN0IGJvb2wg
X190ZXN0ZW9mID0KICAgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKHRoaXMtPnVuZGVyZmxvdygp
LCBfX3JldCk7CiBpZiAoIV9fdGVzdGVvZiAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgIHsK
ICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAr
K19NX2luX2N1cjsKICAgfQogcmV0dXJuIF9fcmV0OwogICAgICB9CiMgNzI2ICIvZ2NjL2RqZS9i
dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAgIHZpcnR1YWwgaW50X3R5
cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7
IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KIyA3NDQgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDMKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAg
IHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwojIDc2OSAiL2dj
Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0cmVhbWJ1ZiIgMwogICAgICB2aXJ0dWFs
IGludF90eXBlCiAgICAgIG92ZXJmbG93KGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQog
ICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KIyA4MDAgIi9nY2MvZGplL2J1aWxk
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9s
aWJzdGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDMKICAgIHByaXZhdGU6CiAgICAgIGJhc2lj
X3N0cmVhbWJ1Zihjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJikgeyB9OwoKICAgICAgX19zdHJlYW1i
dWZfdHlwZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKSB7IHJldHVy
biAqdGhpczsgfTsKCiAgICB9Owp9CgoKCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz
L2luY2x1ZGUvYml0cy9zdHJlYW1idWYudGNjIiAxIDMKIyAzOSAiL2djYy9kamUvYnVpbGQvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0
ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RyZWFtYnVmLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzYnVtcGMoKQogICAgewogICAgICBpbnRfdHlw
ZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1ciA8IF9NX2luX2VuZCkKIHsKICAgY2hhcl90eXBl
IF9fYyA9ICp0aGlzLT5fTV9pbl9jdXI7CiAgIF9NX21vdmVfaW5fY3VyKDEpOwogICBfX3JldCA9
IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpOwogfQogICAgICBlbHNlCiBfX3JldCA9IHRo
aXMtPnVmbG93KCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPjo6CiAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5
cGUgX19yZXQ7CiAgICAgIGNvbnN0IGJvb2wgX190ZXN0cG9zID0gX01faW5fYmVnIDwgX01faW5f
Y3VyOwogICAgICBpZiAoIV9fdGVzdHBvcyB8fCAhdHJhaXRzX3R5cGU6OmVxKF9fYywgdGhpcy0+
X01faW5fY3VyWy0xXSkpCiBfX3JldCA9IHRoaXMtPnBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9f
aW50X3R5cGUoX19jKSk7CiAgICAgIGVsc2UKIHsKICAgX01fbW92ZV9pbl9jdXIoLTEpOwogICBf
X3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+X01faW5fY3VyKTsKIH0KICAg
ICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
Pjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN1
bmdldGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2JlZyA8
IF9NX2luX2N1cikKIHsKICAgX01fbW92ZV9pbl9jdXIoLTEpOwogICBfX3JldCA9IHRyYWl0c190
eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKIH0KICAgICAgZWxzZQogX19yZXQgPSB0aGlz
LT5wYmFja2ZhaWwoKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBl
IF9fcmV0OwogICAgICBpZiAoX01fb3V0X2N1ciA8IF9NX291dF9lbmQpCiB7CiAgICpfTV9vdXRf
Y3VyID0gX19jOwogICBfTV9tb3ZlX291dF9jdXIoMSk7CiAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6
OnRvX2ludF90eXBlKF9fYyk7CiB9CiAgICAgIGVsc2UKIF9fcmV0ID0gdGhpcy0+b3ZlcmZsb3co
dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVh
bXNpemUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzZ2V0bihj
aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19y
ZXQgPSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiB7CiAgIHNpemVfdCBfX2J1Zl9sZW4g
PSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgIHsKICAg
ICAgIHNpemVfdCBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgc2l6ZV90IF9fbGVu
ID0gc3RkOjptaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICB0cmFpdHNfdHlwZTo6
Y29weShfX3MsIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgX19yZXQgKz0gX19sZW47CiAgICAg
ICBfX3MgKz0gX19sZW47CiAgICAgICBfTV9tb3ZlX2luX2N1cihfX2xlbik7CiAgICAgfQoKICAg
aWYgKF9fcmV0IDwgX19uKQogICAgIHsKICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPnVmbG93
KCk7CiAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBl
Ojplb2YoKSkpCiAgewogICAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19zKyssIHRyYWl0c190eXBl
Ojp0b19jaGFyX3R5cGUoX19jKSk7CiAgICArK19fcmV0OwogIH0KICAgICAgIGVsc2UKICBicmVh
azsKICAgICB9CiB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3Ry
ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19z
LCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAg
IHdoaWxlIChfX3JldCA8IF9fbikKIHsKICAgb2ZmX3R5cGUgX19idWZfbGVuID0gX01fb3V0X2Vu
ZCAtIF9NX291dF9jdXI7CiAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgIHsKICAgICAgIG9mZl90
eXBlIF9fcmVtYWluaW5nID0gX19uIC0gX19yZXQ7CiAgICAgICBvZmZfdHlwZSBfX2xlbiA9IHN0
ZDo6bWluKF9fYnVmX2xlbiwgX19yZW1haW5pbmcpOwogICAgICAgdHJhaXRzX3R5cGU6OmNvcHko
X01fb3V0X2N1ciwgX19zLCBfX2xlbik7CiAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgIF9f
cyArPSBfX2xlbjsKICAgICAgIF9NX21vdmVfb3V0X2N1cihfX2xlbik7CiAgICAgfQoKICAgaWYg
KF9fcmV0IDwgX19uKQogICAgIHsKICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93
KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX19zKSk7CiAgICAgICBpZiAoIXRyYWl0c190eXBl
OjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgewogICAgKytfX3JldDsK
ICAgICsrX19zOwogIH0KICAgICAgIGVsc2UKICBicmVhazsKICAgICB9CiB9CiAgICAgIHJldHVy
biBfX3JldDsKICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxf
Q2hhclQsIF9UcmFpdHM+JiBfX2lvcywKICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPiogX19zYmluLAogICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
KiBfX3Nib3V0KQogIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBp
bnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlw
ZTsKCiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwogICAgICB0cnkKIHsKICAgZm9yICg7OykK
ICAgICAgIHsKICAgICAgIHN0cmVhbXNpemUgX194dHJjdDsKICAgICAgIGNvbnN0IG9mZl90eXBl
IF9fYXZhaWwgPSBfX3NiaW4tPl9NX2luX2VuZAogICAgICAgICAgICAgICAgICAgICAgICAgLSBf
X3NiaW4tPl9NX2luX2N1cjsKICAgICAgICBpZiAoX19hdmFpbCkKICB7CiAgICBfX3h0cmN0ID0g
X19zYm91dC0+c3B1dG4oX19zYmluLT5fTV9pbl9jdXIsIF9fYXZhaWwpOwogICAgX19yZXQgKz0g
X194dHJjdDsKICAgIF9fc2Jpbi0+X01fbW92ZV9pbl9jdXIoX194dHJjdCk7CiAgICBpZiAoX194
dHJjdCAhPSBfX2F2YWlsKQogICAgICBicmVhazsKICB9CiAgICAgICAgZWxzZQogIHsKICAgIHN0
cmVhbXNpemUgX19jaGFyc3JlYWQ7CiAgICBjb25zdCBvZmZfdHlwZSBfX3NpemUgPSBfX3Nib3V0
LT5fTV9vdXRfZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIF9fc2JvdXQtPl9NX291
dF9jdXI7CiAgICBpZiAoX19zaXplKQogICAgICB7CiAgICAgICAgX0NoYXJUKiBfX2J1ZiA9CiAg
IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAg
ICAgICAgICAgICogX19zaXplKSk7CgoKICAgICAgICBfX2NoYXJzcmVhZCA9IF9fc2Jpbi0+c2dl
dG4oX19idWYsIF9fc2l6ZSk7CiAgICAgICAgX194dHJjdCA9IF9fc2JvdXQtPnNwdXRuKF9fYnVm
LCBfX2NoYXJzcmVhZCk7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewogICAgICAgIF9feHRyY3Qg
PSBfX2NoYXJzcmVhZCA9IDA7CiAgICAgICAgY29uc3QgaW50X3R5cGUgX19jID0gX19zYmluLT5z
Z2V0YygpOwogICAgICAgIGlmICghX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfVHJhaXRzOjpl
b2YoKSkpCiAgIHsKICAgICArK19fY2hhcnNyZWFkOwogICAgIGlmIChfVHJhaXRzOjplcV9pbnRf
dHlwZShfX3Nib3V0LT5vdmVyZmxvdyhfX2MpLAogICAgICAgICBfVHJhaXRzOjplb2YoKSkpCiAg
ICAgICBicmVhazsKICAgICArK19feHRyY3Q7CiAgICAgX19zYmluLT5zYnVtcGMoKTsKICAgfQog
ICAgICB9CiAgICBfX3JldCArPSBfX3h0cmN0OwogICAgaWYgKF9feHRyY3QgIT0gX19jaGFyc3Jl
YWQpCiAgICAgIGJyZWFrOwogIH0KICAgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19z
YmluLT5zZ2V0YygpLCBfVHJhaXRzOjplb2YoKSkpCiAgICBicmVhazsKICAgICAgIH0KIH0KICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiB7CiAgIF9faW9zLnNldHN0YXRlKGlvc19iYXNl
OjpmYWlsYml0KTsKICAgaWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6ZmFpbGJp
dCkgIT0gMCkKICAgICB0aHJvdzsKIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCiAg
ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPjsKICBleHRlcm4gdGVt
cGxhdGUKICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxjaGFy
PiYsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiosCiAgICAgICAgYmFzaWNfc3RyZWFtYnVmPGNoYXI+
Kik7CiMgMjcwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdHJlYW1i
dWYudGNjIiAzCn0KIyA4MTQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt
MjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJl
YW1idWYiIDIgMwojIDUxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw
MDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaW9zIiAy
IDMKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9iYXNpY19pb3Mu
aCIgMSAzCiMgNDAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0
MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Jhc2lj
X2lvcy5oIiAzCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw
MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0
cmVhbWJ1Zl9pdGVyYXRvci5oIiAxIDMKIyA0MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p
bmNsdWRlL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDMKCgoKCgpuYW1lc3BhY2Ugc3RkCnsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3Mg
aXN0cmVhbWJ1Zl9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3Jf
dGFnLCBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlLAogICAgICAgICAgICBfQ2hh
clQqLCBfQ2hhclQmPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgICBwcml2YXRl
OgoKCgoKCgoKICAgICAgbXV0YWJsZSBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAgaW50
X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoKSB0aHJv
dygpCiAgICAgIDogX01fc2J1ZigwKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQoKICAg
ICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykgdGhyb3coKQogICAgICA6
IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgogICAg
ICBpc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93KCkKICAgICAg
OiBfTV9zYnVmKF9fcyksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KCgogICAgICBjaGFy
X3R5cGUKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6
OnRvX2NoYXJfdHlwZShfTV9nZXQoKSk7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3ImCiAg
ICAgIG9wZXJhdG9yKysoKQogICAgICB7CiBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190
eXBlOjplb2YoKTsKIGlmIChfTV9zYnVmICYmIHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9z
YnVmLT5zYnVtcGMoKSwgX19lb2YpKQogICBfTV9zYnVmID0gMDsKIGVsc2UKICAgX01fYyA9IF9f
ZW9mOwogcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yCiAg
ICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0
c190eXBlOjplb2YoKTsKIGlzdHJlYW1idWZfaXRlcmF0b3IgX19vbGQgPSAqdGhpczsKIGlmIChf
TV9zYnVmCiAgICAgJiYgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChfX29sZC5fTV9jID0gX01f
c2J1Zi0+c2J1bXBjKCkpLAogICAgIF9fZW9mKSkKICAgX01fc2J1ZiA9IDA7CiBlbHNlCiAgIF9N
X2MgPSBfX2VvZjsKIHJldHVybiBfX29sZDsKICAgICAgfQoKCgoKICAgICAgYm9vbAogICAgICBl
cXVhbChjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yJiBfX2IpIGNvbnN0CiAgICAgIHsKIGNvbnN0
IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogYm9vbCBfX3RoaXNlb2YgPSB0
cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fZ2V0KCksIF9fZW9mKTsKIGJvb2wgX19iZW9mID0g
dHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYi5fTV9nZXQoKSwgX19lb2YpOwogcmV0dXJuIChf
X3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAgfQoK
CiAgICBwcml2YXRlOgogICAgICBpbnRfdHlwZQogICAgICBfTV9nZXQoKSBjb25zdAogICAgICB7
CiBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKIGludF90eXBlIF9f
cmV0ID0gX19lb2Y7CiBpZiAoX01fc2J1ZikKICAgewogICAgIGlmICghdHJhaXRzX3R5cGU6OmVx
X2ludF90eXBlKF9NX2MsIF9fZW9mKSkKICAgICAgIF9fcmV0ID0gX01fYzsKICAgICBlbHNlCiAg
ICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChfX3JldCA9IF9NX3NidWYtPnNnZXRj
KCkpLCBfX2VvZikpCiAgX01fc2J1ZiA9IDA7CiAgIH0KIHJldHVybiBfX3JldDsKICAgICAgfQog
ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQsIF9UcmFpdHM+JiBfX2IpCiAgICB7IHJldHVybiBfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4m
IF9fYSwKICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4m
IF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9y
CiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2
b2lkLCB2b2lkPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90
eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVk
ZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgICBwcml2
YXRlOgogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAgYm9vbCBfTV9mYWlsZWQ7
CgogICAgcHVibGljOgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19z
KSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9NX3Ni
dWYpIHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0
aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAg
ICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKQogICAg
ICB7CiBpZiAoIV9NX2ZhaWxlZCAmJgogICAgIF9UcmFpdHM6OmVxX2ludF90eXBlKF9NX3NidWYt
PnNwdXRjKF9fYyksIF9UcmFpdHM6OmVvZigpKSkKICAgX01fZmFpbGVkID0gdHJ1ZTsKIHJldHVy
biAqdGhpczsKICAgICAgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0
b3IqKCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9p
dGVyYXRvciYKICAgICAgb3BlcmF0b3IrKyhpbnQpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRo
aXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBib29sCiAgICAgIGZhaWxlZCgpIGNv
bnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gX01fZmFpbGVkOyB9CgogICAgICBvc3RyZWFtYnVm
X2l0ZXJhdG9yJgogICAgICBfTV9wdXQoY29uc3QgX0NoYXJUKiBfX3dzLCBzdHJlYW1zaXplIF9f
bGVuKQogICAgICB7CiBpZiAoX19idWlsdGluX2V4cGVjdCghX01fZmFpbGVkLCB0cnVlKQogICAg
ICYmIF9fYnVpbHRpbl9leHBlY3QodGhpcy0+X01fc2J1Zi0+c3B1dG4oX193cywgX19sZW4pICE9
IF9fbGVuLCBmYWxzZSkpCiAgIF9NX2ZhaWxlZCA9IHRydWU7CiByZXR1cm4gKnRoaXM7CiAgICAg
IH0KICAgIH07Cn0KIyA0MiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y
MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv
YmFzaWNfaW9zLmgiIDIgMwoKCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl
L2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0NCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12
My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli
c3RkYysrLXYzL2luY2x1ZGUvY3djdHlwZSIgMSAzCiMgNDggIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9jd2N0eXBlIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIg
MSAzIDQKIyA0NSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgp0
eXBlZGVmIHdpbnRfdCAoKndjdHJhbnNfdCkod2ludF90KTsKCmV4dGVybiB3aW50X3QgdG93Y3Ry
YW5zKHdpbnRfdCwgd2N0cmFuc190KTsKZXh0ZXJuIHdjdHJhbnNfdCB3Y3RyYW5zKGNvbnN0IGNo
YXIgKik7CgoKCgoKCgpleHRlcm4gaW50IGlzd2JsYW5rKHdpbnRfdCk7CgoKCgp9CiMgNTMgIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jd2N0eXBlIiAyIDMKIyA0NyAiL2djYy9k
amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgoK
Cm5hbWVzcGFjZSBzdGQKewojIDYzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu
My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv
Yml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICB2b2lk
CiAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX2luLCBfVHYmIF9fb3V0LCBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19i
YXNlID0gMTApOwoKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX19jb252ZXJ0X3RvX3YoY29u
c3QgY2hhciosIGxvbmcmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsCiAgICAgY29uc3QgX19jX2xvY2Fs
ZSYsIGludCk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fY29udmVydF90b192KGNvbnN0
IGNoYXIqLCB1bnNpZ25lZCBsb25nJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAogICAgIGNvbnN0IF9f
Y19sb2NhbGUmLCBpbnQpOwoKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX19jb252ZXJ0X3Rv
X3YoY29uc3QgY2hhciosIGxvbmcgbG9uZyYsIGlvc19iYXNlOjppb3N0YXRlJiwKICAgICBjb25z
dCBfX2NfbG9jYWxlJiwgaW50KTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX19jb252ZXJ0
X3RvX3YoY29uc3QgY2hhciosIHVuc2lnbmVkIGxvbmcgbG9uZyYsIGlvc19iYXNlOjppb3N0YXRl
JiwKICAgICBjb25zdCBfX2NfbG9jYWxlJiwgaW50KTsKCgogIHRlbXBsYXRlPD4KICAgIHZvaWQK
ICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqLCBmbG9hdCYsIGlvc19iYXNlOjppb3N0YXRl
JiwKICAgICBjb25zdCBfX2NfbG9jYWxlJiwgaW50KTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAog
ICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciosIGRvdWJsZSYsIGlvc19iYXNlOjppb3N0YXRl
JiwKICAgICBjb25zdCBfX2NfbG9jYWxlJiwgaW50KTsKCiB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAg
ICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiwgbG9uZyBkb3VibGUmLCBpb3NfYmFzZTo6aW9z
dGF0ZSYsCiAgICAgY29uc3QgX19jX2xvY2FsZSYsIGludCk7CgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9fcGFkCiAgICB7CiAgICAg
IHN0YXRpYyB2b2lkCiAgICAgIF9TX3BhZChpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwg
X0NoYXJUKiBfX25ld3MsCiAgICAgIGNvbnN0IF9DaGFyVCogX19vbGRzLCBjb25zdCBzdHJlYW1z
aXplIF9fbmV3bGVuLAogICAgICBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuLCBjb25zdCBib29s
IF9fbnVtKTsKICAgIH07CiMgMTI1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu
My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv
Yml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBi
b29sCiAgICBfX3ZlcmlmeV9ncm91cGluZyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiYgX19n
cm91cGluZywKICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJUPiYgX19ncm91cGluZ190bXApOwoK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAgIF9fYWRkX2dy
b3VwaW5nKF9DaGFyVCogX19zLCBfQ2hhclQgX19zZXAsCiAgICAgY29uc3QgY2hhciogX19nYmVn
LCBjb25zdCBjaGFyKiBfX2dlbmQsCiAgICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0LCBjb25zdCBf
Q2hhclQqIF9fbGFzdCk7CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu
ZQogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+CiAgICBfX3dyaXRlKG9zdHJlYW1idWZf
aXRlcmF0b3I8X0NoYXJUPiBfX3MsIGNvbnN0IF9DaGFyVCogX193cywgaW50IF9fbGVuKQogICAg
ewogICAgICBfX3MuX01fcHV0KF9fd3MsIF9fbGVuKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBpbmxp
bmUKICAgIF9PdXRJdGVyCiAgICBfX3dyaXRlKF9PdXRJdGVyIF9fcywgY29uc3QgX0NoYXJUKiBf
X3dzLCBpbnQgX19sZW4pCiAgICB7CiAgICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVu
OyBfX2orKywgKytfX3MpCiAqX19zID0gX193c1tfX2pdOwogICAgICByZXR1cm4gX19zOwogICAg
fQoKCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC9iaXRzL2N0eXBlX2Jhc2UuaCIgMSAzCiMgMzYgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvY3R5cGVfYmFzZS5o
IiAzCiAgc3RydWN0IGN0eXBlX2Jhc2UKICB7CgogICAgdHlwZWRlZiBjb25zdCBpbnQqIF9fdG9f
dHlwZTsKCgoKICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IG1hc2s7CiAgICBzdGF0aWMgY29uc3Qg
bWFzayB1cHBlciA9IDB4NDAwOwogICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSAweDA0MDsK
ICAgIHN0YXRpYyBjb25zdCBtYXNrIGFscGhhID0gMHgwMDE7CiAgICBzdGF0aWMgY29uc3QgbWFz
ayBkaWdpdCA9IDB4MDEwOwogICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gMHg4MDA7CiAg
ICBzdGF0aWMgY29uc3QgbWFzayBzcGFjZSA9IDB4MjAwOwogICAgc3RhdGljIGNvbnN0IG1hc2sg
cHJpbnQgPSAweDA4MDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoID0gMHgwMjA7CiAgICBz
dGF0aWMgY29uc3QgbWFzayBjbnRybCA9IDB4MDA4OwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHVu
Y3QgPSAweDEwMDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtID0gMHgwMDI7CiAgfTsKIyAx
NjggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2FsZV9mYWNldHMu
aCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX2N0eXBlX2Fi
c3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0eXBlX2Jhc2UKICAg
IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGJv
b2wKICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBp
cyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSAqX19oaSwgbWFzayAqX192
ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsg
fQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBj
aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CgogICAgICBjb25zdCBjaGFy
X3R5cGUqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNv
bnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9u
b3QoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvdXBwZXIoY2hh
cl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2MpOyB9
CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlICpfX2xvLCBj
b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBw
ZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b2xvd2VyKGNoYXJfdHlw
ZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19jKTsgfQoKICAg
ICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9f
bG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXIq
CiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlw
ZSogX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywgX19oaSwg
X190byk7IH0KCiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19k
ZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0
KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBuYXJyb3coY29uc3QgY2hhcl90eXBl
KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFy
ICpfX3RvKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19sbywgX19oaSwg
X19kZmF1bHQsIF9fdG8pOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBf
X2N0eXBlX2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApOiBsb2NhbGU6OmZhY2V0KF9f
cmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2N0eXBlX2Fic3RyYWN0X2Jhc2UoKSB7
IH0KCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9f
YykgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lz
KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgIG1hc2sq
IF9fdmVjKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAg
ZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICBjb25zdCBjaGFy
X3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgog
ICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgY29u
c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQog
ICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy
X3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRv
X3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSog
X19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4o
Y2hhcikgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRl
bihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAogICAgICAgIGNoYXJfdHlwZSog
X19kZXN0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNo
YXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBj
aGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo
YXJfdHlwZSogX19oaSwKICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdCA9IDA7
CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGUgOiBw
dWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjdHlw
ZTo6bWFzayBtYXNrOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp
dAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8
X0NoYXJUPihfX3JlZnMpIHsgfQoKICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5j
dHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5
cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19p
cyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192
ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5f
aXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25v
dChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgY29uc3QgY2hhcl90eXBlKiBf
X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hh
cl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAg
ZG9fdG91cHBlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSBfX2Mp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIo
Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBj
aGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIK
ICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSog
X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVz
dCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6
OmlkIGN0eXBlPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8Y2hh
cj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPGNoYXI+CiAgICB7CiAgICBwdWJsaWM6
CgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIF9f
Y19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CiAgICAgIGJvb2wgX01fZGVsOwogICAgICBfX3Rv
X3R5cGUgX01fdG91cHBlcjsKICAgICAgX190b190eXBlIF9NX3RvbG93ZXI7CiAgICAgIGNvbnN0
IG1hc2sqIF9NX3RhYmxlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7
CiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgdGFibGVfc2l6ZSA9IDEgKyBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPigtMSk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShjb25zdCBtYXNr
KiBfX3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNlLCBzaXplX3QgX19yZWZzID0gMCk7Cgog
ICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgbWFzayog
X190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwKICAgICBzaXplX3QgX19yZWZzID0gMCk7
CgogICAgICBpbmxpbmUgYm9vbAogICAgICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0OwoK
ICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIGlzKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0
IGNoYXIqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFy
KgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBf
X2hpKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBzY2FuX25vdChtYXNr
IF9fbSwgY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgcHJv
dGVjdGVkOgogICAgICBjb25zdCBtYXNrKgogICAgICB0YWJsZSgpIGNvbnN0IHRocm93KCkKICAg
ICAgeyByZXR1cm4gX01fdGFibGU7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBtYXNrKgogICAgICBj
bGFzc2ljX3RhYmxlKCkgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7Cgog
ICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNo
YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9f
bSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19t
LCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hh
cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBj
b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg
ICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAg
IGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSog
X19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90
eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq
IF9faGksCiAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07CgogIHRl
bXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBlPGNoYXI+
ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CiMgNTA0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz
L2luY2x1ZGUvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk
YysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRzL2N0eXBlX2lubGluZS5o
IiAxIDMKIyAzNyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy
OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAvYml0cy9jdHlwZV9pbmxpbmUuaCIgMwogIGJvb2wKICBjdHlwZTxjaGFyPjo6
CiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdAogIHsgcmV0dXJuIChfX2xjX2N0eXBlKS5v
YmotPm1hc2tbX19jXSAmIF9fbTsgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBp
cyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBfX3ZlYykgY29u
c3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gpCiAgICAgICpfX3ZlYysrID0gKF9fbGNf
Y3R5cGUpLm9iai0+bWFza1sqX19sb3crK107CiAgICByZXR1cm4gX19oaWdoOwogIH0KCiAgY29u
c3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciog
X19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBf
X2hpZ2ggJiYgIXRoaXMtPmlzKF9fbSwgKl9fbG93KSkKICAgICAgKytfX2xvdzsKICAgIHJldHVy
biBfX2xvdzsKICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5fbm90KG1h
c2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAogIHsK
ICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCAmJiB0aGlzLT5pcyhfX20sICpfX2xvdykgIT0gMCkK
ICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9CiMgNTA1ICIvZ2NjL2RqZS9idWls
ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAv
bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1lIDogcHVibGljIGN0eXBl
PF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl
OwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6
ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5
cGVfYnluYW1lKCkgeyB9OwogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTxj
aGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgogIHRlbXBsYXRl
PD4KICAgIGN0eXBlX2J5bmFtZTx3Y2hhcl90Pjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBz
aXplX3QgcmVmcyk7CgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0
cy9jb2RlY3Z0LmgiIDEgMwojIDQ1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu
My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv
Yml0cy9jb2RlY3Z0LmgiIDMKCgogIGNsYXNzIGNvZGVjdnRfYmFzZQogIHsKICBwdWJsaWM6CiAg
ICBlbnVtIHJlc3VsdAogICAgewogICAgICBvaywKICAgICAgcGFydGlhbCwKICAgICAgZXJyb3Is
CiAgICAgIG5vY29udgogICAgfTsKICB9OwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVy
blQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgX19jb2Rl
Y3Z0X2Fic3RyYWN0X2Jhc2UKICAgIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjb2Rl
Y3Z0X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpy
ZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAgICB0
eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3RhdGVf
dHlwZTsKCgogICAgICByZXN1bHQKICAgICAgb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0
IGludGVybl90eXBlKiBfX2Zyb20sCiAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBj
b25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICBleHRlcm5fdHlwZSogX190bywgZXh0
ZXJuX3R5cGUqIF9fdG9fZW5kLAogICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAg
ICAgewogcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9f
ZnJvbV9uZXh0LAogICAgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAg
ICAgIHJlc3VsdAogICAgICB1bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBl
KiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICBleHRlcm5fdHlwZSomIF9fdG9f
bmV4dCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlmdChfX3N0YXRlLCBfX3Rv
LF9fdG9fZW5kLF9fdG9fbmV4dCk7IH0KCiAgICAgIHJlc3VsdAogICAgICBpbihzdGF0ZV90eXBl
JiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogIGNvbnN0IGV4dGVybl90eXBl
KiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogIGludGVybl90
eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgaW50ZXJuX3R5cGUqJiBfX3RvX25l
eHQpIGNvbnN0CiAgICAgIHsKIHJldHVybiB0aGlzLT5kb19pbihfX3N0YXRlLCBfX2Zyb20sIF9f
ZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsK
ICAgICAgfQoKICAgICAgaW50CiAgICAgIGVuY29kaW5nKCkgY29uc3QgdGhyb3coKQogICAgICB7
IHJldHVybiB0aGlzLT5kb19lbmNvZGluZygpOyB9CgogICAgICBib29sCiAgICAgIGFsd2F5c19u
b2NvbnYoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Fsd2F5c19ub2Nv
bnYoKTsgfQoKICAgICAgaW50CiAgICAgIGxlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z
dCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNp
emVfdCBfX21heCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbGVuZ3RoKF9fc3RhdGUs
IF9fZnJvbSwgX19lbmQsIF9fbWF4KTsgfQoKICAgICAgaW50CiAgICAgIG1heF9sZW5ndGgoKSBj
b25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX21heF9sZW5ndGgoKTsgfQoKICAg
IHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2Uo
c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmly
dHVhbAogICAgICB+X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwg
cmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlw
ZSogX19mcm9tLAogICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50
ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90
eXBlKiBfX3RvX2VuZCwKICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsK
CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0
ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5
cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRv
X2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAg
Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9t
X25leHQsCiAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAg
ICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBpbnQK
ICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwgYm9v
bAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKSA9IDA7CgogICAgICB2aXJ0
dWFsIGludAogICAgICBkb19sZW5ndGgoc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBf
X2Zyb20sCiAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0ID0g
MDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygp
ID0gMDsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9F
eHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dAogICAgOiBwdWJsaWMg
X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPgogICAg
ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7
CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVy
blQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKICAgIHBy
b3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9jb2RlY3Z0OwoKICAgIHB1Ymxp
YzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2Rl
Y3Z0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9J
bnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAgICBleHBsaWNpdAog
ICAgICBjb2RlY3Z0KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAg
cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0
dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJu
X3R5cGUqIF9fZnJvbSwKICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0
IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRl
cm5fdHlwZSogX190b19lbmQsCiAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0
ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5
cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4o
c3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICBjb25z
dCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4
dCwKICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgIGlu
dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRv
X2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19h
bHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRv
X2xlbmd0aChzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICBjb25zdCBl
eHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGlu
dAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4K
ICAgIGxvY2FsZTo6aWQgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+OjppZDsK
CgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90Pgog
ICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8Y2hhciwgY2hhciwgbWJzdGF0ZV90
PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjaGFyIGludGVybl90eXBlOwogICAg
ICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRl
X3R5cGU7CgogICAgcHJvdGVjdGVkOgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2NvZGVj
dnQ7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxp
Y2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGljaXQKICAg
ICAgY29kZWN2dChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHBy
b3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCBy
ZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBl
KiBfX2Zyb20sCiAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRl
cm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5
cGUqIF9fdG9fZW5kLAogICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4
dGVybl90eXBlKiBfX3RvLAogICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYg
X190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRl
X3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgY29uc3QgZXh0
ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAg
ICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICBpbnRlcm5f
dHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNv
ZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlz
X25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5n
dGgoc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgY29uc3QgZXh0ZXJu
X3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAg
ICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgfTsKIyAzMzYgIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2NvZGVjdnQuaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNs
YXNzIGNvZGVjdnRfYnluYW1lIDogcHVibGljIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBf
U3RhdGVUPgogICAgewogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0X2J5
bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGNvZGVjdnQ8
X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPihfX3JlZnMpCiAgICAgIHsKIGlmICh0aGlzLT5f
TV9jX2xvY2FsZV9jb2RlY3Z0ICE9IHRoaXMtPl9TX2NfbG9jYWxlKQogICBfU19kZXN0cm95X2Nf
bG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2NvZGVjdnQpOwogX1NfY3JlYXRlX2NfbG9jYWxlKHRo
aXMtPl9NX2NfbG9jYWxlX2NvZGVjdnQsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnRfYnluYW1lKCkgeyB9CiAgICB9OwojIDUzMCAiL2dj
Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMK
CgogIGNsYXNzIF9fbnVtX2Jhc2UKICB7CiAgcHVibGljOgoKCiAgICBlbnVtCiAgICAgIHsKICAg
ICAgICBfU19taW51cywKICAgICAgICBfU19wbHVzLAogICAgICAgIF9TX3gsCiAgICAgICAgX1Nf
WCwKICAgICAgICBfU19kaWdpdHMsCiAgICAgICAgX1NfZGlnaXRzX2VuZCA9IF9TX2RpZ2l0cyAr
IDE2LAogICAgICAgIF9TX3VkaWdpdHMgPSBfU19kaWdpdHNfZW5kLAogICAgICAgIF9TX3VkaWdp
dHNfZW5kID0gX1NfdWRpZ2l0cyArIDE2LAogICAgICAgIF9TX2UgPSBfU19kaWdpdHMgKyAxNCwK
ICAgICAgICBfU19FID0gX1NfdWRpZ2l0cyArIDE0LAogX1NfZW5kID0gX1NfdWRpZ2l0c19lbmQK
ICAgICAgfTsKCgoKCgoKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfU19hdG9tc19vdXQ7CgogIHBy
b3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0IGNoYXIqIF9TX2F0b21zX2luOwoKICAgIGVudW0K
ICAgIHsKICAgICAgX01femVybywKICAgICAgX01fZSA9IF9NX3plcm8gKyAxMCwKICAgICAgX01f
RSA9IF9NX3plcm8gKyAxMSwKICAgICAgX01fc2l6ZSA9IDIxICsgMQogICAgfTsKCgoKICAgIHN0
YXRpYyB2b2lkCiAgICBfU19mb3JtYXRfZmxvYXQoY29uc3QgaW9zX2Jhc2UmIF9faW8sIGNoYXIq
IF9fZnB0ciwgY2hhciBfX21vZCk7CgoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19mb3JtYXRfaW50
KGNvbnN0IGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2QsIGNoYXIgX19t
b2RsKTsKICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVu
Y3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0
cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgcHJpdmF0ZToKICAg
ICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2Fu
ZHNfc2VwOwogICAgICBjb25zdCBjaGFyKiBfTV9ncm91cGluZzsKICAgICAgY29uc3QgY2hhcl90
eXBlKiBfTV90cnVlbmFtZTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV9mYWxzZW5hbWU7Cgog
ICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChzaXplX3QgX19yZWZzID0g
MCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0
KCk7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBz
aXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0
aWFsaXplX251bXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBkZWNpbWFs
X3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgpOyB9
CgogICAgICBjaGFyX3R5cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsgfQoKICAgICAgc3RyaW5nCiAgICAgIGdyb3Vw
aW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ3JvdXBpbmcoKTsgfQoKICAgICAg
c3RyaW5nX3R5cGUKICAgICAgdHJ1ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b190cnVlbmFtZSgpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBmYWxzZW5hbWUoKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb19mYWxzZW5hbWUoKTsgfQoKICAgIHByb3RlY3RlZDoK
ICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3QoKTsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl
CiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kZWNpbWFs
X3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91c2FuZHNfc2Vw
KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVh
bCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9ncm91
cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb190cnVlbmFtZSgpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIF9NX3RydWVuYW1lOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190
eXBlCiAgICAgIGRvX2ZhbHNlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2ZhbHNlbmFt
ZTsgfQoKCiAgICAgIHZvaWQKICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxl
IF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBsb2NhbGU6OmlkIG51bXB1bmN0PF9DaGFyVD46OmlkOwoKICB0ZW1wbGF0ZTw+CiAgICBudW1w
dW5jdDxjaGFyPjo6fm51bXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51bXB1
bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKIyA2
NzcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2FsZV9mYWNldHMu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0X2J5bmFt
ZSA6IHB1YmxpYyBudW1wdW5jdDxfQ2hhclQ+CiAgICB7CgogICAgICBfX2NfbG9jYWxlIF9NX2Nf
bG9jYWxlX251bXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90
eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAg
ICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90
IF9fcmVmcyA9IDApCiAgICAgIDogbnVtcHVuY3Q8X0NoYXJUPihfX3JlZnMpCiAgICAgIHsKIF9T
X2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCwgX19zKTsKIF9NX2luaXRpYWxp
emVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOwogICAgICB9CgogICAgcHJvdGVjdGVk
OgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdF9ieW5hbWUoKQogICAgICB7IF9TX2Rlc3Ry
b3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBudW1fZ2V0IDogcHVi
bGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBfX251bV9iYXNlCiAgICB7CiAgICBwdWJsaWM6Cgog
ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVy
X3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg
IG51bV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoK
ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3Yp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l
cnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf
dHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0
ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3Yp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l
cnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQo
X19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAg
IGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAg
ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25n
IGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5k
LCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90
eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
Z2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAg
ICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAg
ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYg
X192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2lu
LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2lu
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwgfm51bV9nZXQoKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9leHRyYWN0X2Zsb2F0
KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwKICAg
ICAgICAgc3RyaW5nJiBfX3h0cmMpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX2V4
dHJhY3RfaW50KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0
YXRlJiwKICAgICAgIHN0cmluZyYgX194dHJjLCBpbnQmIF9fYmFzZSkgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i
YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBib29sJikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBp
dGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlv
c19iYXNlOjppb3N0YXRlJiwgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwKICAgICAgIHVuc2lnbmVkIHNob3J0JikgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNl
JiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICB1bnNpZ25lZCBpbnQmKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgIHVuc2lnbmVkIGxv
bmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90
eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAg
ICBsb25nIGxvbmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dl
dChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsCiAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRl
cl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICBkb3VibGUmKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jh
c2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgIGxvbmcgZG91YmxlJikgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5
cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICB2b2lkKiYpIGNv
bnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
PgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwojIDg0OCAiL2dj
Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIG51
bV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIF9fbnVtX2Jhc2UKICAgIHsKICAg
IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf
T3V0SXRlciBpdGVyX3R5cGU7CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhw
bGljaXQKICAgICAgbnVtX3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9f
cmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i
YXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBl
CiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxs
LCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBf
X2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywg
aW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgdW5zaWduZWQgbG9uZyBfX3YpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9
CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19m
LCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAg
ICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAog
ICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19w
dXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQo
aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9f
dikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9f
dik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2Um
IF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgbG9uZyBkb3VibGUgX192KSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRl
cl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUg
X19maWxsLAogICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZl
cnRfZmxvYXQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAg
IGNoYXIgX19tb2QsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgX01fZ3Jv
dXBfZmxvYXQoY29uc3Qgc3RyaW5nJiBfX2dyb3VwaW5nLCBjaGFyX3R5cGUgX19zZXAsCiAgICAg
ICBjb25zdCBjaGFyX3R5cGUqIF9fcCwgY2hhcl90eXBlKiBfX25ldywgY2hhcl90eXBlKiBfX2Nz
LAogICAgICAgaW50JiBfX2xlbikgY29uc3Q7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFs
dWVUPgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZlcnRfaW50KGl0ZXJfdHlwZSwg
aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgIF9WYWx1ZVQgX192KSBj
b25zdDsKCiAgICAgIHZvaWQKICAgICAgX01fZ3JvdXBfaW50KGNvbnN0IHN0cmluZyYgX19ncm91
cGluZywgY2hhcl90eXBlIF9fc2VwLAogICAgIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUqIF9f
bmV3LCBjaGFyX3R5cGUqIF9fY3MsCiAgICAgaW50JiBfX2xlbikgY29uc3Q7CgogICAgICB2b2lk
CiAgICAgIF9NX3BhZChjaGFyX3R5cGUgX19maWxsLCBzdHJlYW1zaXplIF9fdywgaW9zX2Jhc2Um
IF9faW8sCiAgICAgIGNoYXJfdHlwZSogX19uZXcsIGNvbnN0IGNoYXJfdHlwZSogX19jcywgaW50
JiBfX2xlbikgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1fcHV0KCkgeyB9OwoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBj
aGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxv
bmcgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVy
X3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZykgY29uc3Q7
CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jh
c2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBl
IF9fZmlsbCwgdW5zaWduZWQgbG9uZyBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJf
dHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGws
IGRvdWJsZSBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0
KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBfX3Yp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwg
aW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0OwogICAg
fTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBs
b2NhbGU6OmlkIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5
cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoK
CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY29sbGF0ZTsKCiAgICBwdWJsaWM6CiAgICAg
IHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZShzaXpl
X3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9j
X2xvY2FsZV9jb2xsYXRlID0gX1NfY19sb2NhbGU7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGNv
bGxhdGUoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2Fs
ZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUgPSBfU19jbG9uZV9j
X2xvY2FsZShfX2Nsb2MpOyB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQq
IF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwg
Y29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY29tcGFy
ZShfX2xvMSwgX19oaTEsIF9fbG8yLCBfX2hpMik7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAg
IHRyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJhbnNmb3JtKF9fbG8sIF9faGkpOyB9CgogICAgICBs
b25nCiAgICAgIGhhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2hhc2goX19sbywgX19oaSk7IH0KCgogICAgICBp
bnQKICAgICAgX01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqKSBjb25zdDsK
CiAgICAgIHNpemVfdAogICAgICBfTV90cmFuc2Zvcm0oX0NoYXJUKiwgY29uc3QgX0NoYXJUKiwg
c2l6ZV90KSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2xsYXRl
KCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9Cgog
ICAgICB2aXJ0dWFsIGludAogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNv
bnN0IF9DaGFyVCogX19oaTEsCiAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCog
X19oaTIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb190cmFuc2Zv
cm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBsb25nCiAgICAgIGRvX2hhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hh
clQqIF9faGkpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
bG9jYWxlOjppZCBjb2xsYXRlPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgaW50CiAg
ICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikgY29u
c3Q7CgogIHRlbXBsYXRlPD4KICAgIHNpemVfdAogICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNm
b3JtKGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KSBjb25zdDsKIyAxMDQxICIvZ2NjL2RqZS9i
dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlX2J5bmFtZSA6IHB1YmxpYyBjb2xs
YXRlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90
eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAg
ICAgZXhwbGljaXQKICAgICAgY29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3Qg
X19yZWZzID0gMCkKICAgICAgOiBjb2xsYXRlPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiBfU19k
ZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2NvbGxhdGUpOwogX1NfY3JlYXRlX2Nf
bG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2NvbGxhdGUsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGVfYnluYW1lKCkgeyB9CiAgICB9OwoK
CiAgY2xhc3MgdGltZV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gZGF0ZW9yZGVyIHsgbm9f
b3JkZXIsIGRteSwgbWR5LCB5bWQsIHlkbSB9OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGNsYXNzIF9fdGltZXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsK
ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIF9fY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9j
YWxlOjppZCBpZDsKCgogICAgICBzdGF0aWMgY29uc3QgX0NoYXJUKiBfU190aW1lem9uZXNbMTRd
OwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV90aW1lcHVuY3Q7
CiAgICAgIGNoYXIqIF9NX25hbWVfdGltZXB1bmN0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2Rh
dGVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfZXJhX2Zvcm1hdDsKICAgICAg
Y29uc3QgX0NoYXJUKiBfTV90aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1l
X2VyYV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9hbTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9wbTsKICAgICAgY29uc3QgX0NoYXJU
KiBfTV9hbV9wbV9mb3JtYXQ7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkxOwogICAgICBj
b25zdCBfQ2hhclQqIF9NX2RheTI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MzsKICAgICAg
Y29uc3QgX0NoYXJUKiBfTV9kYXk0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTU7CiAgICAg
IGNvbnN0IF9DaGFyVCogX01fZGF5NjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk3OwoKCiAg
ICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2ExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9h
MjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f
ZGF5X2E0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNTsKICAgICAgY29uc3QgX0NoYXJU
KiBfTV9kYXlfYTY7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E3OwoKCiAgICAgIGNvbnN0
IF9DaGFyVCogX01fbW9udGgwMTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAyOwogICAg
ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgw
NDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA1OwogICAgICBjb25zdCBfQ2hhclQqIF9N
X21vbnRoMDY7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNzsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9tb250aDA4OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDk7CiAgICAgIGNv
bnN0IF9DaGFyVCogX01fbW9udGgxMDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDExOwog
ICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMTI7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9t
b250aF9hMDE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTAyOwogICAgICBjb25zdCBf
Q2hhclQqIF9NX21vbnRoX2EwMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDQ7CiAg
ICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21v
bnRoX2EwNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDc7CiAgICAgIGNvbnN0IF9D
aGFyVCogX01fbW9udGhfYTA4OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwOTsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMTA7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u
dGhfYTExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMjsKCiAgICBwdWJsaWM6CiAg
ICAgIGV4cGxpY2l0CiAgICAgIF9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAg
IGV4cGxpY2l0CiAgICAgIF9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFy
KiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgX01fcHV0KF9DaGFy
VCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IF9DaGFyVCogX19mb3JtYXQsCiAgICAgIGNv
bnN0IHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV9mb3JtYXRzKGNv
bnN0IF9DaGFyVCoqIF9fZGF0ZSkgY29uc3QKICAgICAgewoKIF9fZGF0ZVswXSA9IF9NX2RhdGVf
Zm9ybWF0OwogX19kYXRlWzFdID0gX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICB9CgogICAgICB2
b2lkCiAgICAgIF9NX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX3RpbWUpIGNvbnN0CiAg
ICAgIHsKCiBfX3RpbWVbMF0gPSBfTV90aW1lX2Zvcm1hdDsKIF9fdGltZVsxXSA9IF9NX3RpbWVf
ZXJhX2Zvcm1hdDsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9hbXBtKGNvbnN0IF9DaGFy
VCoqIF9fYW1wbSkgY29uc3QKICAgICAgewogX19hbXBtWzBdID0gX01fYW07CiBfX2FtcG1bMV0g
PSBfTV9wbTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9kYXRlX3RpbWVfZm9ybWF0cyhj
b25zdCBfQ2hhclQqKiBfX2R0KSBjb25zdAogICAgICB7CgogX19kdFswXSA9IF9NX2RhdGVfdGlt
ZV9mb3JtYXQ7CiBfX2R0WzFdID0gX01fZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAg
ICAgIHZvaWQKICAgICAgX01fZGF5cyhjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CiAgICAg
IHsKIF9fZGF5c1swXSA9IF9NX2RheTE7CiBfX2RheXNbMV0gPSBfTV9kYXkyOwogX19kYXlzWzJd
ID0gX01fZGF5MzsKIF9fZGF5c1szXSA9IF9NX2RheTQ7CiBfX2RheXNbNF0gPSBfTV9kYXk1Owog
X19kYXlzWzVdID0gX01fZGF5NjsKIF9fZGF5c1s2XSA9IF9NX2RheTc7CiAgICAgIH0KCiAgICAg
IHZvaWQKICAgICAgX01fZGF5c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNv
bnN0CiAgICAgIHsKIF9fZGF5c1swXSA9IF9NX2RheV9hMTsKIF9fZGF5c1sxXSA9IF9NX2RheV9h
MjsKIF9fZGF5c1syXSA9IF9NX2RheV9hMzsKIF9fZGF5c1szXSA9IF9NX2RheV9hNDsKIF9fZGF5
c1s0XSA9IF9NX2RheV9hNTsKIF9fZGF5c1s1XSA9IF9NX2RheV9hNjsKIF9fZGF5c1s2XSA9IF9N
X2RheV9hNzsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9tb250aHMoY29uc3QgX0NoYXJU
KiogX19tb250aHMpIGNvbnN0CiAgICAgIHsKIF9fbW9udGhzWzBdID0gX01fbW9udGgwMTsKIF9f
bW9udGhzWzFdID0gX01fbW9udGgwMjsKIF9fbW9udGhzWzJdID0gX01fbW9udGgwMzsKIF9fbW9u
dGhzWzNdID0gX01fbW9udGgwNDsKIF9fbW9udGhzWzRdID0gX01fbW9udGgwNTsKIF9fbW9udGhz
WzVdID0gX01fbW9udGgwNjsKIF9fbW9udGhzWzZdID0gX01fbW9udGgwNzsKIF9fbW9udGhzWzdd
ID0gX01fbW9udGgwODsKIF9fbW9udGhzWzhdID0gX01fbW9udGgwOTsKIF9fbW9udGhzWzldID0g
X01fbW9udGgxMDsKIF9fbW9udGhzWzEwXSA9IF9NX21vbnRoMTE7CiBfX21vbnRoc1sxMV0gPSBf
TV9tb250aDEyOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX21vbnRoc19hYmJyZXZpYXRl
ZChjb25zdCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QKICAgICAgewogX19tb250aHNbMF0gPSBf
TV9tb250aF9hMDE7CiBfX21vbnRoc1sxXSA9IF9NX21vbnRoX2EwMjsKIF9fbW9udGhzWzJdID0g
X01fbW9udGhfYTAzOwogX19tb250aHNbM10gPSBfTV9tb250aF9hMDQ7CiBfX21vbnRoc1s0XSA9
IF9NX21vbnRoX2EwNTsKIF9fbW9udGhzWzVdID0gX01fbW9udGhfYTA2OwogX19tb250aHNbNl0g
PSBfTV9tb250aF9hMDc7CiBfX21vbnRoc1s3XSA9IF9NX21vbnRoX2EwODsKIF9fbW9udGhzWzhd
ID0gX01fbW9udGhfYTA5OwogX19tb250aHNbOV0gPSBfTV9tb250aF9hMTA7CiBfX21vbnRoc1sx
MF0gPSBfTV9tb250aF9hMTE7CiBfX21vbnRoc1sxMV0gPSBfTV9tb250aF9hMTI7CiAgICAgIH0K
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfl9fdGltZXB1bmN0KCk7CgoKICAg
ICAgdm9pZAogICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9
IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6
OmlkIF9fdGltZXB1bmN0PF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgY29uc3QgY2hh
cioKICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfU190aW1lem9uZXNbMTRdOwoKICB0ZW1wbGF0ZTw+
CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3Qo
X19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5j
dDxjaGFyPjo6X01fcHV0KGNoYXIqLCBzaXplX3QsIGNvbnN0IGNoYXIqLCBjb25zdCB0bSopIGNv
bnN0OwojIDEyODEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0
MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2Fs
ZV9mYWNldHMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNvbnN0IF9DaGFy
VCogX190aW1lcHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzWzE0XTsKCgojIDEgIi9nY2MvZGpl
L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvdGlt
ZV9tZW1iZXJzLmgiIDEgMwojIDM3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu
My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRzL3RpbWVfbWVtYmVycy5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6
ZV90IF9fcmVmcykKICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICB7CiAgICAgIF9NX25h
bWVfdGltZXB1bmN0ID0gX1NfY19uYW1lOwogICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfX3RpbWVwdW5jdDxfQ2hh
clQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAogICAg
ICAgICBzaXplX3QgX19yZWZzKQogICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgIHsKICAg
ICAgX01fbmFtZV90aW1lcHVuY3QgPSBuZXcgY2hhcltzdHJsZW4oX19zKSArIDFdOwogICAgICBz
dHJjcHkoX01fbmFtZV90aW1lcHVuY3QsIF9fcyk7CiAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1
bmN0KF9fY2xvYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9fdGlt
ZXB1bmN0PF9DaGFyVD46On5fX3RpbWVwdW5jdCgpCiAgICB7CiAgICAgIGlmIChfU19jX25hbWUg
IT0gX01fbmFtZV90aW1lcHVuY3QpCiBkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CiAgICAg
IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKICAgIH0KIyAxMjg2
ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVfZmFjZXRzLmgi
IDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBj
bGFzcyB0aW1lX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5
cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFy
VD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhw
bGljaXQKICAgICAgdGltZV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpm
YWNldCAoX19yZWZzKSB7IH0KCiAgICAgIGRhdGVvcmRlcgogICAgICBkYXRlX29yZGVyKCkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGF0ZV9vcmRlcigpOyB9CgogICAgICBpdGVyX3R5
cGUKICAgICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF90aW1lKF9fYmVnLCBfX2VuZCwgX19pbywg
X19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X2RhdGUoaXRlcl90eXBl
IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2dldF9kYXRlKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVy
X3R5cGUKICAgICAgZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3dlZWtkYXkoX19iZWcsIF9fZW5kLCBf
X2lvLCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfbW9udGhuYW1l
KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fZ2V0X21vbnRobmFtZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsg
fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90
eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfeWVhcihfX2Jl
ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmly
dHVhbAogICAgICB+dGltZV9nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgZGF0ZW9yZGVyCiAgICAg
IGRvX2RhdGVfb3JkZXIoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRv
X2dldF90aW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p
bywKICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAg
dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRf
d2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0
X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgoKICAgICAgdm9p
ZAogICAgICBfTV9leHRyYWN0X251bShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5k
LCBpbnQmIF9fbWVtYmVyLAogICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xl
biwKICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIpIGNvbnN0OwoKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfbmFt
ZShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAg
ICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4bGVuLAogICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CgoKICAgICAgdm9pZAogICAgICBfTV9leHRy
YWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAg
ICAgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVfZ2V0PF9D
aGFyVCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWUgOiBwdWJsaWMgdGltZV9nZXQ8X0No
YXJULCBfSW5JdGVyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQK
ICAgICAgdGltZV9nZXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAg
ICAgOiB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+KF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVk
OgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldF9ieW5hbWUoKSB7IH0KICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1l
X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBw
dWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091
dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBs
aWNpdAogICAgICB0aW1lX3B1dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZh
Y2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3Ms
IGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSogX190bSwKICAgY29u
c3QgX0NoYXJUKiBfX2JlZywgY29uc3QgX0NoYXJUKiBfX2VuZCkgY29uc3Q7CgogICAgICBpdGVy
X3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUg
X19maWxsLAogICBjb25zdCB0bSogX190bSwgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCA9IDAp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW8sIF9fZmlsbCwgX190
bSwgX19mb3JtYXQsIF9fbW9kKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg
ICB+dGltZV9wdXQoKQogICAgICB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRv
X3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY29u
c3QgdG0qIF9fdG0sCiAgICAgIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QpIGNvbnN0OwogICAg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxv
Y2FsZTo6aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1l
IDogcHVibGljIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+CiAgICB7CiAgICBwdWJsaWM6Cgog
ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRl
cl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIq
ICwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4o
X19yZWZzKQogICAgICB7IH07CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50
aW1lX3B1dF9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFzcyBtb25leV9iYXNlCiAgewogIHB1
YmxpYzoKICAgIGVudW0gcGFydCB7IG5vbmUsIHNwYWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07
CiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmllbGRbNF07IH07CgogICAgc3RhdGljIGNvbnN0
IHBhdHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOwoKCgogICAgc3RhdGljIHBhdHRlcm4KICAgIF9T
X2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9f
cG9zbik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAg
Y2xhc3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFz
ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg
ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAg
ICBwcml2YXRlOgogICAgICBjb25zdCBjaGFyKiBfTV9ncm91cGluZzsKICAgICAgY2hhcl90eXBl
IF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwogICAg
ICBjb25zdCBjaGFyX3R5cGUqIF9NX2N1cnJfc3ltYm9sOwogICAgICBjb25zdCBjaGFyX3R5cGUq
IF9NX3Bvc2l0aXZlX3NpZ247CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fbmVnYXRpdmVfc2ln
bjsKICAgICAgaW50IF9NX2ZyYWNfZGlnaXRzOwogICAgICBwYXR0ZXJuIF9NX3Bvc19mb3JtYXQ7
CiAgICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0
CiAgICAgIG1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3Jl
ZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0
CiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6
ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01f
aW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY2xvYywgX19zKTsgfQoKICAgICAgY2hhcl90eXBlCiAg
ICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFs
X3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcK
ICAgICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygp
OyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAg
IHBvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wb3NpdGl2ZV9z
aWduKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIG5lZ2F0aXZlX3NpZ24oKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7IH0KCiAgICAgIGludAogICAg
ICBmcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRz
KCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX3Bvc19mb3JtYXQoKTsgfQoKICAgICAgcGF0dGVybgogICAgICBuZWdfZm9y
bWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVnX2Zvcm1hdCgpOyB9CgogICAg
cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0KCk7CgogICAgICB2aXJ0
dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f
dGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0K
CiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9f
Y3Vycl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyX3N5bWJvbDsgfQoKICAg
ICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19wb3NpdGl2ZV9zaWduKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlw
ZQogICAgICBkb19uZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnYXRp
dmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZnJhY19kaWdpdHMoKSBjb25z
dAogICAgICB7IHJldHVybiBfTV9mcmFjX2RpZ2l0czsgfQoKICAgICAgdmlydHVhbCBwYXR0ZXJu
CiAgICAgIGRvX3Bvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9wb3NfZm9ybWF0
OyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fbmVnX2Zvcm1hdCgpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0KCgogICAgICAgdm9pZAogICAgICAgX01faW5p
dGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsLAogICAgY29uc3Qg
Y2hhciogX19uYW1lID0gX19udWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgYm9vbCBfSW50bD4KICAgIGxvY2FsZTo6aWQgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6
aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNvbnN0IGJv
b2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCiAgdGVtcGxhdGU8PgogICAgbW9u
ZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgbW9u
ZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZv
aWQKICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChf
X2NfbG9jYWxlLCBjb25zdCBjaGFyKik7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5
cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwg
Y29uc3QgY2hhciopOwojIDE2MjAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9i
aXRzL2xvY2FsZV9mYWNldHMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBf
SW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lIDogcHVibGljIG1vbmV5cHVuY3Q8X0No
YXJULCBfSW50bD4KICAgIHsKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0
OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaW50bCA9IF9JbnRsOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdF9ieW5h
bWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBtb25leXB1bmN0
PF9DaGFyVCwgX0ludGw+KF9fcmVmcykKICAgICAgewogX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2Nf
bG9jYWxlX21vbmV5cHVuY3QsIF9fcyk7CiBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01fY19s
b2NhbGVfbW9uZXlwdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwK
ICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9N
X2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3RfYnluYW1lPF9DaGFyVCwg
X0ludGw+OjppbnRsOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
ZXI+CiAgICBjbGFzcyBtb25leV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAg
cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9J
bkl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmlu
Z190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAg
ICBtb25leV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsg
fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19l
bmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
Z2V0KF9fcywgX19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fdW5pdHMpOyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBf
X2ludGwsIGlvc19iYXNlJiBfX2lvLAogICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmlu
Z190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywg
X19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoK
ICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJf
dHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9f
aW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9u
ZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg
ZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19i
YXNlJiBfX2lvLAogICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBf
X2RpZ2l0cykgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpp
ZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNs
YXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVy
X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7Cgog
ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X3B1
dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYg
X19pbywKICAgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX191bml0cykgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fdW5p
dHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19p
bnRsLCBpb3NfYmFzZSYgX19pbywKICAgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgc3RyaW5nX3R5
cGUmIF9fZGlnaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2lu
dGwsIF9faW8sIF9fZmlsbCwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH5tb25leV9wdXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJf
dHlwZSBfX2ZpbGwsCiAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBp
b3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUm
IF9fZGlnaXRzKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVy
Pjo6aWQ7CgoKICBzdHJ1Y3QgbWVzc2FnZXNfYmFzZQogIHsKICAgIHR5cGVkZWYgaW50IGNhdGFs
b2c7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXMg
OiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1lc3NhZ2VzX2Jhc2UKICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgX19j
X2xvY2FsZSBfTV9jX2xvY2FsZV9tZXNzYWdlczsKICAgICAgY2hhciogX01fbmFtZV9tZXNzYWdl
czsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGlj
aXQKICAgICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVmcyA9IDApOwoKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIG1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBf
X3JlZnMgPSAwKTsKCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8
Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25z
dCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmLCBjb25zdCBjaGFyKikgY29uc3Q7
CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50
IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX2dldChfX2MsIF9fc2V0LCBfX21zZ2lkLCBfX3MpOyB9CgogICAgICB2b2lkCiAgICAg
IGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jbG9zZShf
X2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygpOwoK
ICAgICAgdmlydHVhbCBjYXRhbG9nCiAgICAgIGRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNo
YXI+JiwgY29uc3QgbG9jYWxlJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAg
ICAgIGRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGZhdWx0
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBkb19jbG9zZShjYXRhbG9nKSBjb25z
dDsKCgogICAgICBjaGFyKgogICAgICBfTV9jb252ZXJ0X3RvX2NoYXIoY29uc3Qgc3RyaW5nX3R5
cGUmIF9fbXNnKSBjb25zdAogICAgICB7CgogcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19tc2cuY19zdHIoKSkpOwogICAgICB9CgoKICAgICAgc3Ry
aW5nX3R5cGUKICAgICAgX01fY29udmVydF9mcm9tX2NoYXIoY2hhciogX19tc2cpIGNvbnN0CiAg
ICAgIHsKCiBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxjaGFyPjo6bGVuZ3RoKF9fbXNnKSAt
IDE7CiMgMTgzMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy
OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxl
X2ZhY2V0cy5oIiAzCiByZXR1cm4gc3RyaW5nX3R5cGUoKTsKICAgICAgfQogICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6
aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJpbmcKICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQo
Y2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZyYpIGNvbnN0OwoKCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVz
c2FnZXM8X0NoYXJUPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy
X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7Cgog
ICAgICBleHBsaWNpdAogICAgICBtZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXpl
X3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNz
YWdlc19ieW5hbWUoKQogICAgICB7IH0KICAgIH07CgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk
YysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRzL21lc3NhZ2VzX21lbWJl
cnMuaCIgMSAzCiMgMzcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw
MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9wb3dlcnBj
LWlibS1haXg0LjMuMy4wL2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKHNpemVfdCBfX3Jl
ZnMpCiAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICB7IF9NX2NfbG9jYWxlX21lc3Nh
Z2VzID0gX1NfY19sb2NhbGU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgIG1l
c3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUsIGNvbnN0IGNoYXIqLCBzaXplX3Qg
X19yZWZzKQogICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgeyBfTV9jX2xvY2FsZV9t
ZXNzYWdlcyA9IF9TX2NfbG9jYWxlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFyVD46
Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2Ms
CiAgICAgIGNvbnN0IGNoYXIqKSBjb25zdAogICAgeyByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3Ms
IF9fbG9jKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbWVzc2FnZXM8X0No
YXJUPjo6fm1lc3NhZ2VzKCkKICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9t
ZXNzYWdlcyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgbWVz
c2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fb3Blbihjb25z
dCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdAogICAgeyByZXR1cm4g
MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxf
Q2hhclQ+OjpzdHJpbmdfdHlwZQogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fZ2V0KGNhdGFsb2cs
IGludCwgaW50LAogICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3QKICAg
IHsgcmV0dXJuIF9fZGZhdWx0OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHZv
aWQKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0CiAgICB7IH0K
CgogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICAgbWVzc2FnZXNfYnluYW1lPF9DaGFy
VD46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCiAgICAg
OiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykKICAgICB7CiAgICAgICBfU19kZXN0cm95X2NfbG9j
YWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKICAgICAgIF9TX2NyZWF0ZV9jX2xvY2Fs
ZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKICAgICB9CiMgMTg2NyAiL2djYy9k
amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFj
ZShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0
PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0No
YXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlw
ZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnByaW50LCBfX2MpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCBf
X2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0No
YXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpjbnRybCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQgX19jLCBj
b25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g
PihfX2xvYykuaXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wgaXNsb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2Nh
bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku
aXMoY3R5cGVfYmFzZTo6bG93ZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxwaGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBf
X2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0
eXBlX2Jhc2U6OmFscGhhLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBib29sCiAgICBpc2RpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2Mp
CiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9i
YXNlOjpkaWdpdCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp
bmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAg
eyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6
cHVuY3QsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv
b2wKICAgIGlzeGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJl
dHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGln
aXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK
ICAgIGlzYWxudW0oX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJu
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBf
X2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp
c2dyYXBoKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf
ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpncmFwaCwgX19jKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3Vw
cGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFj
ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b3VwcGVyKF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQgX19jLCBj
b25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g
PihfX2xvYykudG9sb3dlcihfX2MpOyB9CiMgMTk0NyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12
My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgY2xhc3MgX19sb2NhbGVfY2FjaGVf
YmFzZQogIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsCiAgICB+X19sb2NhbGVfY2FjaGVfYmFzZSgp
IHsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fbG9jYWxl
X2NhY2hlIDogcHVibGljIF9fbG9jYWxlX2NhY2hlX2Jhc2UKICAgIHsKCiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IHRyYWl0
c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoK
ICAgIHB1YmxpYzoKCgoKCgoKICAgICAgX0NoYXJUIF9NX2xpdGVyYWxzW19fbnVtX2Jhc2U6Ol9T
X2VuZF07CgoKCgogICAgICBfQ2hhclQgX01fZGVjaW1hbF9wb2ludDsKCgoKCgogICAgICBfQ2hh
clQgX01fdGhvdXNhbmRzX3NlcDsKCgoKICAgICAgc3RyaW5nX3R5cGUgX01fdHJ1ZW5hbWU7CiAg
ICAgIHN0cmluZ190eXBlIF9NX2ZhbHNlbmFtZTsKCgoKICAgICAgYm9vbCBfTV91c2VfZ3JvdXBp
bmc7CgoKCiAgICAgIHN0cmluZyBfTV9ncm91cGluZzsKCiAgICAgIF9fbG9jYWxlX2NhY2hlKCkg
OiBfTV91c2VfZ3JvdXBpbmcoZmFsc2UpCiAgICAgIHsgfTsKCiAgICAgIF9fbG9jYWxlX2NhY2hl
JgogICAgICBvcGVyYXRvcj0oY29uc3QgX19sb2NhbGVfY2FjaGUmIF9fbGMpOwoKCiAgICAgIHZv
aWQKICAgICAgX01faW5pdChjb25zdCBsb2NhbGUmKTsKICAgIH07Cn0KIyA0NSAiL2djYy9kamUv
YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu
My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNwYWNl
IHN0ZAp7CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFzZQogICAgewogICAgcHVibGlj
OgoKCgoKCgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0
czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsK
IyA3OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvYmFzaWNfaW9zLmgi
IDMKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRl
ZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7
CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1
dF90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRz
PiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3Ry
ZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX01fdGllOwogICAgICBtdXRhYmxlIGNoYXJfdHlw
ZSBfTV9maWxsOwogICAgICBtdXRhYmxlIGJvb2wgX01fZmlsbF9pbml0OwogICAgICBiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX01fc3RyZWFtYnVmOwoKCiAgICAgIGNvbnN0IF9f
Y3R5cGVfdHlwZSogX01fZmN0eXBlOwoKICAgICAgY29uc3QgX19udW1wdXRfdHlwZSogX01fZm51
bXB1dDsKCiAgICAgIGNvbnN0IF9fbnVtZ2V0X3R5cGUqIF9NX2ZudW1nZXQ7CgogICAgcHVibGlj
OgoKCgoKCgoKICAgICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5mYWlsKCkgPyAwIDogY29uc3RfY2FzdDxiYXNpY19pb3MqPih0aGlzKTsgfQoKICAgICAgYm9v
bAogICAgICBvcGVyYXRvciEoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCk7IH0K
IyAxMjIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Jhc2ljX2lvcy5o
IiAzCiAgICAgIGlvc3RhdGUKICAgICAgcmRzdGF0ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N
X3N0cmVhbWJ1Zl9zdGF0ZTsgfQojIDEzMyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs
dWRlL2JpdHMvYmFzaWNfaW9zLmgiIDMKICAgICAgdm9pZAogICAgICBjbGVhcihpb3N0YXRlIF9f
c3RhdGUgPSBnb29kYml0KTsKCgoKCgoKCiAgICAgIHZvaWQKICAgICAgc2V0c3RhdGUoaW9zdGF0
ZSBfX3N0YXRlKQogICAgICB7IHRoaXMtPmNsZWFyKHRoaXMtPnJkc3RhdGUoKSB8IF9fc3RhdGUp
OyB9CgoKCgoKCgogICAgICBib29sCiAgICAgIGdvb2QoKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5yZHN0YXRlKCkgPT0gMDsgfQoKCgoKCgoKICAgICAgYm9vbAogICAgICBlb2YoKSBjb25z
dAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgZW9mYml0KSAhPSAwOyB9CiMgMTcz
ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9iYXNpY19pb3MuaCIgMwog
ICAgICBib29sCiAgICAgIGZhaWwoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0
ZSgpICYgKGJhZGJpdCB8IGZhaWxiaXQpKSAhPSAwOyB9CgoKCgoKCgogICAgICBib29sCiAgICAg
IGJhZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRiaXQpICE9
IDA7IH0KIyAxOTQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0
MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Jhc2lj
X2lvcy5oIiAzCiAgICAgIGlvc3RhdGUKICAgICAgZXhjZXB0aW9ucygpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX2V4Y2VwdGlvbjsgfQojIDIyOSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p
bmNsdWRlL2JpdHMvYmFzaWNfaW9zLmgiIDMKICAgICAgdm9pZAogICAgICBleGNlcHRpb25zKGlv
c3RhdGUgX19leGNlcHQpCiAgICAgIHsKICAgICAgICBfTV9leGNlcHRpb24gPSBfX2V4Y2VwdDsK
ICAgICAgICB0aGlzLT5jbGVhcihfTV9zdHJlYW1idWZfc3RhdGUpOwogICAgICB9CgoKCgoKCgog
ICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3MoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4qIF9fc2IpCiAgICAgIDogaW9zX2Jhc2UoKSwgX01fZmN0eXBlKDApLCBfTV9mbnVtcHV0
KDApLCBfTV9mbnVtZ2V0KDApCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKCgoKCgoKICAg
ICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zKCkgeyB9CiMgMjY2ICIvZ2NjL2RqZS9idWlsZC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli
c3RkYysrLXYzL2luY2x1ZGUvYml0cy9iYXNpY19pb3MuaCIgMwogICAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHRpZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rp
ZTsgfQojIDI3OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy
OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvYmFzaWNf
aW9zLmgiIDMKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KgogICAgICB0aWUo
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX3RpZXN0cikKICAgICAgewogICAgICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV90aWU7CiAgICAgICAg
X01fdGllID0gX190aWVzdHI7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgoKCgoKCgog
ICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoKSBjb25z
dAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWY7IH0KIyAzMTggIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9iaXRzL2Jhc2ljX2lvcy5oIiAzCiAgICAgIGJhc2ljX3N0cmVhbWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICByZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPiogX19zYik7CgoKCgogICAgICBiYXNpY19pb3MmCiAgICAgIGNvcHlmbXQoY29uc3Qg
YmFzaWNfaW9zJiBfX3Jocyk7CgoKCgoKCgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbCgpIGNv
bnN0CiAgICAgIHsKIGlmICghX01fZmlsbF9pbml0KQogICB7CiAgICAgX01fZmlsbCA9IHRoaXMt
PndpZGVuKCcgJyk7CiAgICAgX01fZmlsbF9pbml0ID0gdHJ1ZTsKICAgfQogcmV0dXJuIF9NX2Zp
bGw7CiAgICAgIH0KIyAzNTMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt
MjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRz
L2Jhc2ljX2lvcy5oIiAzCiAgICAgIGNoYXJfdHlwZQogICAgICBmaWxsKGNoYXJfdHlwZSBfX2No
KQogICAgICB7CiBjaGFyX3R5cGUgX19vbGQgPSB0aGlzLT5maWxsKCk7CiBfTV9maWxsID0gX19j
aDsKIHJldHVybiBfX29sZDsKICAgICAgfQojIDM3MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12
My9pbmNsdWRlL2JpdHMvYmFzaWNfaW9zLmgiIDMKICAgICAgbG9jYWxlCiAgICAgIGltYnVlKGNv
bnN0IGxvY2FsZSYgX19sb2MpOwojIDM5MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs
dWRlL2JpdHMvYmFzaWNfaW9zLmgiIDMKICAgICAgY2hhcgogICAgICBuYXJyb3coY2hhcl90eXBl
IF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3Q7CiMgNDExICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr
LXYzL2luY2x1ZGUvYml0cy9iYXNpY19pb3MuaCIgMwogICAgICBjaGFyX3R5cGUKICAgICAgd2lk
ZW4oY2hhciBfX2MpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKCgoKCgoKCiAgICAgIGJhc2ljX2lv
cygpIDogaW9zX2Jhc2UoKSwgX01fZmN0eXBlKDApLCBfTV9mbnVtcHV0KDApLCBfTV9mbnVtZ2V0
KDApCiAgICAgIHsgfQoKCgoKCgoKICAgICAgdm9pZAogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJvb2wKICAgICAgX01fY2hlY2tfZmFj
ZXQoY29uc3QgbG9jYWxlOjpmYWNldCogX19mKSBjb25zdAogICAgICB7CiBpZiAoIV9fZikKICAg
X190aHJvd19iYWRfY2FzdCgpOwogcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHZvaWQKICAg
ICAgX01fY2FjaGVfbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKCgogICAgICB2b2lkCiAg
ICAgIF9NX3NldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkgeyBfTV9zdHJlYW1idWZfc3RhdGUgfD0g
X19zdGF0ZTsgfQogICAgfTsKfQoKCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j
bHVkZS9iaXRzL2Jhc2ljX2lvcy50Y2MiIDEgMwojIDM0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr
LXYzL2luY2x1ZGUvYml0cy9iYXNpY19pb3MudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNp
Y19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y2xlYXIoaW9zdGF0ZSBfX3N0YXRlKQogICAgewogICAg
ICBpZiAodGhpcy0+cmRidWYoKSkKIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGU7CiAgICAg
IGVsc2UKICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsKICAgICAgaWYg
KCh0aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQogX190aHJvd19pb3NfZmFp
bHVyZSgiYmFzaWNfaW9zOjpjbGVhciIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
PioKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgIHsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFy
VCwgX1RyYWl0cz4qIF9fb2xkID0gX01fc3RyZWFtYnVmOwogICAgICBfTV9zdHJlYW1idWYgPSBf
X3NiOwogICAgICB0aGlzLT5jbGVhcigpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lvczxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNvcHlmbXQo
Y29uc3QgYmFzaWNfaW9zJiBfX3JocykKICAgIHsKCgoKCiAgICAgIF9Xb3JkcyogX193b3JkcyA9
IChfX3Jocy5fTV93b3JkX3NpemUgPD0gX1NfbG9jYWxfd29yZF9zaXplKSA/CiAgICAgICAgICAg
ICAgICAgIF9NX2xvY2FsX3dvcmQgOiBuZXcgX1dvcmRzW19fcmhzLl9NX3dvcmRfc2l6ZV07CgoK
ICAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IgPSBfX3Jocy5fTV9jYWxsYmFja3M7CiAgICAgIGlm
IChfX2NiKQogX19jYi0+X01fYWRkX3JlZmVyZW5jZSgpOwogICAgICBfTV9jYWxsX2NhbGxiYWNr
cyhlcmFzZV9ldmVudCk7CiAgICAgIGlmIChfTV93b3JkICE9IF9NX2xvY2FsX3dvcmQpCiB7CiAg
IGRlbGV0ZSBbXSBfTV93b3JkOwogICBfTV93b3JkID0gMDsKIH0KICAgICAgX01fZGlzcG9zZV9j
YWxsYmFja3MoKTsKCgogICAgICBfTV9jYWxsYmFja3MgPSBfX2NiOwogICAgICBmb3IgKGludCBf
X2kgPSAwOyBfX2kgPCBfX3Jocy5fTV93b3JkX3NpemU7ICsrX19pKQogX193b3Jkc1tfX2ldID0g
X19yaHMuX01fd29yZFtfX2ldOwogICAgICBpZiAoX01fd29yZCAhPSBfTV9sb2NhbF93b3JkKQog
ewogICBkZWxldGUgW10gX01fd29yZDsKICAgX01fd29yZCA9IDA7CiB9CiAgICAgIF9NX3dvcmQg
PSBfX3dvcmRzOwogICAgICBfTV93b3JkX3NpemUgPSBfX3Jocy5fTV93b3JkX3NpemU7CgogICAg
ICB0aGlzLT5mbGFncyhfX3Jocy5mbGFncygpKTsKICAgICAgdGhpcy0+d2lkdGgoX19yaHMud2lk
dGgoKSk7CiAgICAgIHRoaXMtPnByZWNpc2lvbihfX3Jocy5wcmVjaXNpb24oKSk7CiAgICAgIHRo
aXMtPnRpZShfX3Jocy50aWUoKSk7CiAgICAgIHRoaXMtPmZpbGwoX19yaHMuZmlsbCgpKTsKICAg
ICAgX01faW9zX2xvY2FsZSA9IF9fcmhzLmdldGxvYygpOwogICAgICBfTV9jYWNoZV9sb2NhbGUo
X01faW9zX2xvY2FsZSk7CgogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsK
CgogICAgICB0aGlzLT5leGNlcHRpb25zKF9fcmhzLmV4Y2VwdGlvbnMoKSk7CgogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGNoYXIKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpuYXJyb3coY2hh
cl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgIHsKICAgICAgY2hhciBfX3JldCA9
IF9fZGZhdWx0OwogICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKIF9fcmV0ID0g
X01fZmN0eXBlLT5uYXJyb3coX19jLCBfX2RmYXVsdCk7CiAgICAgIHJldHVybiBfX3JldDsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgX0No
YXJUCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6d2lkZW4oY2hhciBfX2MpIGNvbnN0
CiAgICB7CiAgICAgIGNoYXJfdHlwZSBfX3JldCA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoX01f
Y2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKIF9fcmV0ID0gX01fZmN0eXBlLT53aWRlbihfX2MpOwog
ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBsb2NhbGUKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+
OjppbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBsb2NhbGUgX19vbGQodGhp
cy0+Z2V0bG9jKCkpOwogICAgICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOwogICAgICBfTV9jYWNo
ZV9sb2NhbGUoX19sb2MpOwogICAgICBpZiAodGhpcy0+cmRidWYoKSAhPSAwKQogdGhpcy0+cmRi
dWYoKS0+cHViaW1idWUoX19sb2MpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2lj
X2lvczxfQ2hhclQsIF9UcmFpdHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+KiBfX3NiKQogICAgewoKICAgICAgaW9zX2Jhc2U6Ol9NX2luaXQoKTsKCgogICAgICBpZiAo
IV9NX2xvY2FsZV9jYWNoZS5nZXQoKSkKIHsKICAgdHlwZWRlZiBfX2xvY2FsZV9jYWNoZTxfQ2hh
clQ+IF9fY2FjaGVfdDsKICAgdGhpcy0+X01fbG9jYWxlX2NhY2hlID0gYXV0b19wdHI8X19sb2Nh
bGVfY2FjaGVfYmFzZT4oc3RhdGljX2Nhc3Q8X19sb2NhbGVfY2FjaGVfYmFzZSo+KG5ldyBfX2Nh
Y2hlX3QpKTsKICAgX01fY2FjaGVfbG9jYWxlKF9NX2lvc19sb2NhbGUpOwogfQojIDE3MCAiL2dj
Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwogICAg
ICBfTV9maWxsID0gX0NoYXJUKCk7CiAgICAgIF9NX2ZpbGxfaW5pdCA9IGZhbHNlOwoKICAgICAg
X01fdGllID0gMDsKICAgICAgX01fZXhjZXB0aW9uID0gZ29vZGJpdDsKICAgICAgX01fc3RyZWFt
YnVmID0gX19zYjsKICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zYiA/IGdvb2RiaXQgOiBi
YWRiaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpfTV9jYWNoZV9sb2Nh
bGUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3Qo
aGFzX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19sb2MpLCB0cnVlKSkKIF9NX2ZjdHlwZSA9ICZ1c2Vf
ZmFjZXQ8X19jdHlwZV90eXBlPihfX2xvYyk7CiAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KGhh
c19mYWNldDxfX251bXB1dF90eXBlPihfX2xvYyksIHRydWUpKQogX01fZm51bXB1dCA9ICZ1c2Vf
ZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpOwogICAgICBpZiAoX19idWlsdGluX2V4cGVjdCho
YXNfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpLCB0cnVlKSkKIF9NX2ZudW1nZXQgPSAmdXNl
X2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9fbG9jKTsKICAgICAgc3RhdGljX2Nhc3Q8X19sb2NhbGVf
Y2FjaGU8X0NoYXJUPiY+KF9NX2NhY2hlKCkpLl9NX2luaXQoX19sb2MpOwogICAgfQoKCgoKCiAg
ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczxjaGFyPjsKCgoKCgp9CiMgNDU1ICIvZ2Nj
L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9iYXNpY19pb3MuaCIgMiAzCiMgNTIg
Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pb3MiIDIgMwojIDQ2ICIvZ2NjL2Rq
ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaXN0cmVhbSIgMiAzCiMgMSAiL2djYy9kamUvYnVp
bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
L2xpYnN0ZGMrKy12My9pbmNsdWRlL2xpbWl0cyIgMSAzCiMgNDcgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9saW1pdHMiIDMKIyAxNTAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst
djMvaW5jbHVkZS9saW1pdHMiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKICBlbnVtIGZsb2F0X3Jv
dW5kX3N0eWxlCiAgewogICAgcm91bmRfaW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgcm91bmRfdG93
YXJkX3plcm8gPSAwLAogICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICByb3VuZF90b3dhcmRf
aW5maW5pdHkgPSAyLAogICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICB9OwoKCgoK
CgoKICBlbnVtIGZsb2F0X2Rlbm9ybV9zdHlsZQogIHsKCiAgICBkZW5vcm1faW5kZXRlcm1pbmF0
ZSA9IC0xLAoKICAgIGRlbm9ybV9hYnNlbnQgPSAwLAoKICAgIGRlbm9ybV9wcmVzZW50ID0gMQog
IH07CiMgMTkyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvbGltaXRzIiAzCiAg
c3RydWN0IF9fbnVtZXJpY19saW1pdHNfYmFzZQogIHsKCgogICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc3BlY2lhbGl6ZWQgPSBmYWxzZTsKCgoKCiAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9
IDA7CgogICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7CgogICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CgoKCgoKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu
dGVnZXIgPSBmYWxzZTsKCgoKCiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNl
OwoKCiAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMDsKCgoKICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50ID0gMDsKCgogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx
MCA9IDA7CgoKCiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CgoKICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKCiAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKCgogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0
X05hTiA9IGZhbHNlOwoKCiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9
IGRlbm9ybV9hYnNlbnQ7CgoKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9
IGZhbHNlOwoKCgogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CgoKCiAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CgoKCgogICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgoKICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBz
ID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7
CgoKCiAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu
ZF90b3dhcmRfemVybzsKICB9OwojIDI4NSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs
dWRlL2xpbWl0cyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBudW1lcmlj
X2xpbWl0cyA6IHB1YmxpYyBfX251bWVyaWNfbGltaXRzX2Jhc2UKICAgIHsKCgogICAgICBzdGF0
aWMgX1RwIG1pbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQoKICAg
ICAgc3RhdGljIF9UcCBtYXgoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7
IH0KCgogICAgICBzdGF0aWMgX1RwIGVwc2lsb24oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PF9UcD4oMCk7IH0KCiAgICAgIHN0YXRpYyBfVHAgcm91bmRfZXJyb3IoKSB0aHJvdygpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KCiAgICAgIHN0YXRpYyBfVHAgaW5maW5pdHko
KSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KCiAgICAgIHN0YXRpYyBf
VHAgcXVpZXRfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgoK
ICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxfVHA+KDApOyB9CgoKCiAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21pbigpIHRocm93KCkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAg
ICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJvb2wgbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBtYXgoKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g
MTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl
Z2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGJvb2wgZXBzaWxvbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcm91bmRf
ZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x
dWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O
YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu
b3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s
b3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRocm93KCkKICAgICAg
eyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcXVpZXRfTmFOKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBzaWduYWxpbmdfTmFOKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBkZW5vcm1f
bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5k
ZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCgoK
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9y
b3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVt
cGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+CiAgICB7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjaGFyIG1p
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKCgoY2hhcikoLTEpIDwgMCkgPyAoY2hhcikxIDw8
IChzaXplb2YoY2hhcikgKiA4IC0gKChjaGFyKSgtMSkgPCAwKSkgOiAoY2hhcikwKTsgfQogICAg
ICBzdGF0aWMgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgoKGNoYXIpKC0xKSA8
IDApID8gKChjaGFyKTEgPDwgKHNpemVvZihjaGFyKSAqIDggLSAoKGNoYXIpKC0xKSA8IDApKSkg
LSAxIDogfihjaGFyKTApOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXpl
b2YoY2hhcikgKiA4IC0gKChjaGFyKSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzMTAgPSAoKHNpemVvZihjaGFyKSAqIDggLSAoKGNoYXIpKC0xKSA8IDApKSAqIDY0MyAv
IDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSAoKGNoYXIpKC0xKSA8
IDApOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJh
ZGl4ID0gMjsKICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMDsgfQogICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0
IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu
dDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNo
YXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0
aWMgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAg
ICBzdGF0aWMgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFy
KCk7IH0KICAgICAgc3RhdGljIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll
YzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf
YmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu
ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3Ry
dWN0IG51bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAtMTI3IC0gMTsgfQogICAgICBzdGF0aWMgc2lnbmVk
IGNoYXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjc7IH0KCiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgZGlnaXRzID0gKHNpemVvZihzaWduZWQgY2hhcikgKiA4IC0gKChzaWduZWQgY2hh
cikoLTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChzaXplb2Yo
c2lnbmVkIGNoYXIpICogOCAtICgoc2lnbmVkIGNoYXIpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYp
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
ZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3Rh
dGljIHNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAg
ICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAg
PSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs
b2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2lnbmVk
IGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25l
ZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3Rh
dGljIHNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgZGVu
b3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+
KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh
cmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1
bnNpZ25lZCBjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXpl
ZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAxMjcgKiAyVSArIDE7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzID0gKHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDggLSAoKHVuc2lnbmVkIGNoYXIpKC0xKSA8
IDApKTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9ICgoc2l6ZW9mKHVuc2lnbmVk
IGNoYXIpICogOCAtICgodW5zaWduZWQgY2hhcikoLTEpIDwgMCkpICogNjQzIC8gMjEzNik7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh
Y3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGlj
IHVuc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAg
ICBzdGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEw
ID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2ln
bmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0K
ICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVu
c2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1
OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm
b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z
dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0
IG51bWVyaWNfbGltaXRzPHdjaGFyX3Q+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IG1pbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gKCgod2NoYXJfdCkoLTEpIDwgMCkgPyAod2NoYXJfdCkxIDw8IChzaXpl
b2Yod2NoYXJfdCkgKiA4IC0gKCh3Y2hhcl90KSgtMSkgPCAwKSkgOiAod2NoYXJfdCkwKTsgfQog
ICAgICBzdGF0aWMgd2NoYXJfdCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgoKHdjaGFy
X3QpKC0xKSA8IDApID8gKCh3Y2hhcl90KTEgPDwgKHNpemVvZih3Y2hhcl90KSAqIDggLSAoKHdj
aGFyX3QpKC0xKSA8IDApKSkgLSAxIDogfih3Y2hhcl90KTApOyB9CgogICAgICBzdGF0aWMgY29u
c3QgaW50IGRpZ2l0cyA9IChzaXplb2Yod2NoYXJfdCkgKiA4IC0gKCh3Y2hhcl90KSgtMSkgPCAw
KSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZih3Y2hhcl90KSAq
IDggLSAoKHdjaGFyX3QpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zaWduZWQgPSAoKHdjaGFyX3QpKC0xKSA8IDApOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh
Y3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGlj
IHdjaGFyX3QgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0
aWMgd2NoYXJfdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l
bnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f
c3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgaW5maW5pdHko
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJf
dCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBz
dGF0aWMgd2NoYXJfdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hh
cl90KCk7IH0KICAgICAgc3RhdGljIHdjaGFyX3QgZGVub3JtX21pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gd2NoYXJfdCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y
ZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5
bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBu
dW1lcmljX2xpbWl0czxzaG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl
Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gLTMyNzY3IC0gMTsgfQogICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAzMjc2NzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAo
c2l6ZW9mKHNob3J0KSAqIDggLSAoKHNob3J0KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZihzaG9ydCkgKiA4IC0gKChzaG9ydCkoLTEpIDwgMCkp
ICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg
PSAyOwogICAgICBzdGF0aWMgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MDsgfQogICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQx
MCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBzaG9y
dCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0
aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAg
ICAgIHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz
aG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7
IHJldHVybiBzaG9ydCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg
PSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1l
cmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1pbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQg
bWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAzMjc2NyAqIDJVICsgMTsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGludCBkaWdpdHMgPSAoc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDggLSAoKHVu
c2lnbmVkIHNob3J0KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg
PSAoKHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA4IC0gKCh1bnNpZ25lZCBzaG9ydCkoLTEpIDwg
MCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJh
ZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHJvdW5kX2Vycm9y
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu
b3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFs
c2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMg
dW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHNp
Z25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGVub3JtX21pbigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v
ZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsK
ICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+CiAgICB7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0
YXRpYyBpbnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAtMjE0NzQ4MzY0NyAtIDE7IH0K
ICAgICAgc3RhdGljIGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDc7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gKHNpemVvZihpbnQpICogOCAtICgo
aW50KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVv
ZihpbnQpICogOCAtICgoaW50KSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBpbnQgZXBzaWxv
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgaW50IHJvdW5kX2Vy
cm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50
IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAg
PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O
YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g
ZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g
ZmFsc2U7CgogICAgICBzdGF0aWMgaW50IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyBpbnQgcXVpZXRfTmFOKCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyBp
bnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
PigwKTsgfQogICAgICBzdGF0aWMgaW50IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll
YzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf
YmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu
ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3Ry
dWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBt
aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGlu
dCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDcgKiAyVSArIDE7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gKHNpemVvZih1bnNpZ25lZCBpbnQpICogOCAt
ICgodW5zaWduZWQgaW50KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
MTAgPSAoKHNpemVvZih1bnNpZ25lZCBpbnQpICogOCAtICgodW5zaWduZWQgaW50KSgtMSkgPCAw
KSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFk
aXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp
bml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h
YnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoK
ICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQg
aW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAg
ICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp
bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5
bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4K
ICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgbG9uZyBtaW4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIC0yMTQ3NDgzNjQ3TCAtIDE7IH0KICAgICAgc3RhdGljIGxvbmcg
bWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGlj
IGNvbnN0IGludCBkaWdpdHMgPSAoc2l6ZW9mKGxvbmcpICogOCAtICgobG9uZykoLTEpIDwgMCkp
OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChzaXplb2YobG9uZykgKiA4IC0g
KChsb25nKSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGVwc2lsb24oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p
dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz
ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg
ICAgIHN0YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIHNp
Z25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDAp
OyB9CiAgICAgIHN0YXRpYyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1
NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2Jl
Zm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf
c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVj
dCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBt
aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TCAqIDJVTCArIDE7IH0K
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gKHNpemVvZih1bnNpZ25lZCBsb25nKSAq
IDggLSAoKHVuc2lnbmVkIGxvbmcpKC0xKSA8IDApKTsKICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMxMCA9ICgoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogOCAtICgodW5zaWduZWQgbG9uZyko
LTEpIDwgMCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25l
ZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZXBzaWxvbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9l
cnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEw
ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf
TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9
IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9
IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRp
YyB1bnNpZ25lZCBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2ln
bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVub3JtX21pbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxv
ID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAg
fTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4KICAg
IHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAg
c3RhdGljIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIC05MjIzMzcyMDM2
ODU0Nzc1ODA3TEwgLSAxOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQog
ICAgICB7IHJldHVybiA5MjIzMzcyMDM2ODU0Nzc1ODA3TEw7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzID0gKHNpemVvZihsb25nIGxvbmcpICogOCAtICgobG9uZyBsb25nKSgtMSkg
PCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZihsb25nIGxv
bmcpICogOCAtICgobG9uZyBsb25nKSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGxv
bmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgbG9u
ZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9
IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3Np
Z25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls
ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIGluZmluaXR5KCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAg
IHN0YXRpYyBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2lnbmFsaW5n
X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsg
fQogICAgICBzdGF0aWMgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu
eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls
ZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8Pgog
ICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4KICAgIHsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVu
c2lnbmVkIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAg
c3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDky
MjMzNzIwMzY4NTQ3NzU4MDdMTCAqIDJVTEwgKyAxOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0cyA9IChzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSAqIDggLSAoKHVuc2lnbmVkIGxv
bmcgbG9uZykoLTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChz
aXplb2YodW5zaWduZWQgbG9uZyBsb25nKSAqIDggLSAoKHVuc2lnbmVkIGxvbmcgbG9uZykoLTEp
IDwgMCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhy
b3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcg
cm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k
ZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt
X2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgaW5maW5pdHko
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o
MCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAg
ICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jv
dW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3Jv
dW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICB0ZW1w
bGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZmxvYXQ+CiAgICB7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBmbG9hdCBt
aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTc1NDk0MzVlLTM4RjsgfQogICAgICBzdGF0
aWMgZmxvYXQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAzLjQwMjgyMzQ3ZSszOEY7IH0K
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMjQ7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzMTAgPSA2OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFk
aXggPSAyOwogICAgICBzdGF0aWMgZmxvYXQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMS4xOTIwOTI5MGUtN0Y7IH0KICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9yKCkgdGhy
b3coKQogICAgICB7IHJldHVybiAwLjVGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudCA9ICgtMTI1KTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9
ICgtMzcpOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEyODsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4OwoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2luZmluaXR5ID0gMTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0
X05hTiA9IDE7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gaGFz
X3F1aWV0X05hTjsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu
b3JtCiA9IDEuNDAxMjk4NDZlLTQ1RiA/IGRlbm9ybV9wcmVzZW50IDogZGVub3JtX2Fic2VudDsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBz
dGF0aWMgZmxvYXQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9o
dWdlX3ZhbGYgKCk7IH0KICAgICAgc3RhdGljIGZsb2F0IHF1aWV0X05hTigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gX19idWlsdGluX25hbmYgKCIiKTsgfQogICAgICBzdGF0aWMgZmxvYXQgc2ln
bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gX19idWlsdGluX25hbnNmICgiIik7
IH0KICAgICAgc3RhdGljIGZsb2F0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IDEuNDAxMjk4NDZlLTQ1RjsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5CiA9
IGhhc19pbmZpbml0eSAmJiBoYXNfcXVpZXRfTmFOICYmIGhhc19kZW5vcm0gPT0gZGVub3JtX3By
ZXNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y
ZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5
bGUgPSByb3VuZF90b19uZWFyZXN0OwogICAgfTsKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVj
dCBudW1lcmljX2xpbWl0czxkb3VibGU+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwODsgfQogICAgICBzdGF0aWMgZG91
YmxlIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNTM7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzMTAgPSAxNTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcm91
bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuNTsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGludCBtaW5fZXhwb25lbnQgPSAoLTEwMjEpOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudDEwID0gKC0zMDcpOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu
dCA9IDEwMjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzMDg7Cgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSAxOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gMTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3Np
Z25hbGluZ19OYU4gPSBoYXNfcXVpZXRfTmFOOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVu
b3JtX3N0eWxlIGhhc19kZW5vcm0KID0gNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQgPyBkZW5vcm1f
cHJlc2VudCA6IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5v
cm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gX19idWlsdGluX2h1Z2VfdmFsKCk7IH0KICAgICAgc3RhdGljIGRvdWJs
ZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9uYW4gKCIiKTsg
fQogICAgICBzdGF0aWMgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIF9fYnVpbHRpbl9uYW5zICgiIik7IH0KICAgICAgc3RhdGljIGRvdWJsZSBkZW5vcm1fbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiA0Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNDsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5CiA9IGhhc19pbmZpbml0eSAmJiBoYXNfcXVp
ZXRfTmFOICYmIGhhc19kZW5vcm0gPT0gZGVub3JtX3ByZXNlbnQ7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1
bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b19uZWFyZXN0Owog
ICAgfTsKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nIGRv
dWJsZT4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl
OwoKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
Mi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDhMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtYXgo
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4TDsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA1MzsKICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMxMCA9IDE1OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg
PSAyOwogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMi4yMjA0NDYwNDkyNTAzMTMxZS0xNkw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91Ymxl
IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjVMOyB9CgogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9ICgtMTAyMSk7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50MTAgPSAoLTMwNyk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4
cG9uZW50ID0gMTAyNDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDMw
ODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IDE7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSAxOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfc2lnbmFsaW5nX05hTiA9IGhhc19xdWlldF9OYU47CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybQogPSA0Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNEwgPyBk
ZW5vcm1fcHJlc2VudCA6IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19kZW5vcm1fbG9zcwogPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBpbmZpbml0
eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gX19idWlsdGluX2h1Z2VfdmFsbCAoKTsgfQogICAg
ICBzdGF0aWMgbG9uZyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBf
X2J1aWx0aW5fbmFubCAoIiIpOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBzaWduYWxpbmdf
TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBfX2J1aWx0aW5fbmFuc2wgKCIiKTsgfQogICAg
ICBzdGF0aWMgbG9uZyBkb3VibGUgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
NC45NDA2NTY0NTg0MTI0NjU0ZS0zMjRMOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p
ZWM1NTkKID0gaGFzX2luZmluaXR5ICYmIGhhc19xdWlldF9OYU4gJiYgaGFzX2Rlbm9ybSA9PSBk
ZW5vcm1fcHJlc2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l
c3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSBy
b3VuZF9zdHlsZSA9IHJvdW5kX3RvX25lYXJlc3Q7CiAgICB9OwoKCgoKCn0KIyA0NyAiL2djYy9k
amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2lzdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7
CiMgNTggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNf
aXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNf
dHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9f
c3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4g
X19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g
X19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQs
IF9UcmFpdHM+IF9faXN0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJU
LCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxf
Q2hhclQ+IF9fY3R5cGVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVDIsIHR5
cGVuYW1lIF9UcmFpdHMyPgogICAgICAgIGZyaWVuZCBiYXNpY19pc3RyZWFtPF9DaGFyVDIsIF9U
cmFpdHMyPiYKICAgICAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJUMiwgX1RyYWl0
czI+JiwgX0NoYXJUMiYpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUMiwgdHlwZW5h
bWUgX1RyYWl0czI+CiAgICAgICAgZnJpZW5kIGJhc2ljX2lzdHJlYW08X0NoYXJUMiwgX1RyYWl0
czI+JgogICAgICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQyLCBfVHJhaXRzMj4m
LCBfQ2hhclQyKik7CgogICAgcHJvdGVjdGVkOgoKCgoKCgoKICAgICAgc3RyZWFtc2l6ZSBfTV9n
Y291bnQ7CgogICAgcHVibGljOgojIDEwNCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs
dWRlL2lzdHJlYW0iIDMKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaXN0cmVhbShfX3N0cmVh
bWJ1Zl90eXBlKiBfX3NiKTogX01fZ2NvdW50KHN0cmVhbXNpemUoMCkpCiAgICAgIHsgdGhpcy0+
aW5pdChfX3NiKTsgfQoKCgoKCgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pc3RyZWFtKCkK
ICAgICAgeyBfTV9nY291bnQgPSBzdHJlYW1zaXplKDApOyB9CgoKICAgICAgY2xhc3Mgc2VudHJ5
OwogICAgICBmcmllbmQgY2xhc3Mgc2VudHJ5OwojIDEzMSAiL2djYy9kamUvYnVpbGQvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMr
Ky12My9pbmNsdWRlL2lzdHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBf
X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9z
X3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFz
ZSYgKCpfX3BmKShpb3NfYmFzZSYpKTsKIyAxNjkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMv
aW5jbHVkZS9pc3RyZWFtIiAzCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+
KGJvb2wmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihzaG9y
dCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVk
IHNob3J0JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oaW50
JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQg
aW50JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4obG9uZyYg
X19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxv
bmcmIF9fbik7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4obG9uZyBs
b25nJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWdu
ZWQgbG9uZyBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cj4+KGZsb2F0JiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4o
ZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4obG9u
ZyBkb3VibGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih2
b2lkKiYgX19wKTsKIyAyMzAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt
MjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3Ry
ZWFtIiAzCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVm
X3R5cGUqIF9fc2IpOwojIDI0MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2lz
dHJlYW0iIDMKICAgICAgaW5saW5lIHN0cmVhbXNpemUKICAgICAgZ2NvdW50KCkgY29uc3QKICAg
ICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CiMgMjcyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz
L2luY2x1ZGUvaXN0cmVhbSIgMwogICAgICBpbnRfdHlwZQogICAgICBnZXQoKTsKIyAyODYgIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCiAgICAgIF9faXN0cmVh
bV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlJiBfX2MpOwojIDMxMyAiL2djYy9kamUvYnVpbGQv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp
YnN0ZGMrKy12My9pbmNsdWRlL2lzdHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg
IGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsK
IyAzMjQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCiAgICAg
IGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1z
aXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0KF9fcywgX19uLCB0aGlzLT53aWRlbign
XG4nKSk7IH0KIyAzNDcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw
MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFt
IiAzCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19z
YiwgY2hhcl90eXBlIF9fZGVsaW0pOwojIDM1NyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p
bmNsdWRlL2lzdHJlYW0iIDMKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQo
X19zdHJlYW1idWZfdHlwZSYgX19zYikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0KF9fc2IsIHRo
aXMtPndpZGVuKCdcbicpKTsgfQojIDM4NiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs
dWRlL2lzdHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldGxpbmUoY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CiMgMzk3ICIvZ2Nj
L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaXN0cmVhbSIgMwogICAgICBpbmxpbmUgX19p
c3RyZWFtX3R5cGUmCiAgICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u
KQogICAgICB7IHJldHVybiB0aGlzLT5nZXRsaW5lKF9fcywgX19uLCB0aGlzLT53aWRlbignXG4n
KSk7IH0KIyA0MTYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0
MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAz
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24gPSAxLCBp
bnRfdHlwZSBfX2RlbGltID0gdHJhaXRzX3R5cGU6OmVvZigpKTsKIyA0MjcgIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCiAgICAgIGludF90eXBlCiAgICAgIHBl
ZWsoKTsKIyA0NDUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0
MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAz
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1z
aXplIF9fbik7CiMgNDY0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw
MDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaXN0cmVh
bSIgMwogICAgICBzdHJlYW1zaXplCiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJl
YW1zaXplIF9fbik7CiMgNDgwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaXN0
cmVhbSIgMwogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcHV0YmFjayhjaGFyX3R5cGUgX19j
KTsKIyA0OTUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICB1bmdldCgpOwojIDUxMyAiL2djYy9kamUvYnVpbGQv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp
YnN0ZGMrKy12My9pbmNsdWRlL2lzdHJlYW0iIDMKICAgICAgaW50CiAgICAgIHN5bmMoKTsKIyA1
MjcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCiAgICAgIHBv
c190eXBlCiAgICAgIHRlbGxnKCk7CiMgNTQyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu
Y2x1ZGUvaXN0cmVhbSIgMwogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cocG9zX3R5
cGUpOwojIDU1OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy
OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2lzdHJlYW0iIDMK
ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vl
a2Rpcik7CgoKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaXN0cmVh
bSgpOiBfTV9nY291bnQoc3RyZWFtc2l6ZSgwKSkgeyB9CiAgICB9OwojIDU3OCAiL2djYy9kamUv
YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu
My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2lzdHJlYW0iIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OnNlbnRyeQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfVHJhaXRz
IHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVh
bV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9UcmFpdHM6OmludF90eXBlIF9faW50X3R5cGU7CiMgNjEwICIvZ2NjL2RqZS9idWlsZC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk
YysrLXYzL2luY2x1ZGUvaXN0cmVhbSIgMwogICAgICBleHBsaWNpdAogICAgICBzZW50cnkoYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBib29sIF9fbm9za2lwd3MgPSBmYWxz
ZSk7CiMgNjIwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaXN0cmVhbSIgMwog
ICAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gX01fb2s7IH0KCiAgICBwcml2YXRl
OgogICAgICBib29sIF9NX29rOwogICAgfTsKIyA2MzkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst
djMvaW5jbHVkZS9pc3RyZWFtIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0
b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKTsK
CiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0
cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVu
c2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9U
cmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KIyA2ODAgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3Bl
cmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19z
KTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhcixfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBfX2luLCB1
bnNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0
PGNoYXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1Ry
YWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQojIDcwMiAiL2djYy9kamUvYnVpbGQvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMr
Ky12My9pbmNsdWRlL2lzdHJlYW0iIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbQogICAgOiBwdWJsaWMgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LAogICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlw
ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCgogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CgoKCgoKCgogICAgICBleHBsaWNp
dAogICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiog
X19zYikKICAgICAgOiBfX2lzdHJlYW1fdHlwZSgpLCBfX29zdHJlYW1fdHlwZSgpCiAgICAgIHsg
dGhpcy0+aW5pdChfX3NiKTsgfQoKCgoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zdHJl
YW0oKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvc3Ry
ZWFtKCkgOiBfX2lzdHJlYW1fdHlwZSgpLCBfX29zdHJlYW1fdHlwZSgpCiAgICAgIHsgfQogICAg
fTsKIyA3NjYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JiBfX2lzKTsKfQoKCgoKCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl
L2JpdHMvaXN0cmVhbS50Y2MiIDEgMwojIDM2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu
Y2x1ZGUvYml0cy9pc3RyZWFtLnRjYyIgMwoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz
L2luY2x1ZGUvbG9jYWxlIiAxIDMKIyA0MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs
dWRlL2xvY2FsZSIgMwoKCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu
My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv
Yml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMSAzCiMgMzcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst
djMvaW5jbHVkZS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCgojIDEgIi9nY2MvZGplL2J1aWxk
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9s
aWJzdGRjKystdjMvaW5jbHVkZS9jZXJybm8iIDEgMwojIDQ3ICIvZ2NjL2RqZS9idWlsZC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk
YysrLXYzL2luY2x1ZGUvY2Vycm5vIiAzCgojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAxIDMg
NAojIDU5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMyA0CmV4dGVybiBpbnQgZXJybm87CiMgNDkg
Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jZXJybm8iIDIgMwojIDM5ICIvZ2Nj
L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAz
CgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY21hdGgiIDEgMwojIDQ4
ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY21hdGgiIDMKCgoKIyAxICIvZ2Nj
L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL21h
dGguaCIgMSAzIDQKIyA1NSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y
MDAzMDQyOC9nY2MvaW5jbHVkZS9tYXRoLmgiIDMgNApleHRlcm4gIkMiIHsKIyA3NCAiL2djYy9k
amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9tYXRo
LmgiIDMgNApleHRlcm4gdW5zaWduZWQgX0RCTElORlsyXTsKIyAxMzMgIi9nY2MvZGplL2J1aWxk
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvbWF0aC5oIiAzIDQK
ZXh0ZXJuIGRvdWJsZSBhY29zKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgYXNpbihkb3VibGUpOwpl
eHRlcm4gZG91YmxlIGF0YW4oZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBhdGFuMihkb3VibGUsZG91
YmxlKTsKZXh0ZXJuIGRvdWJsZSBjZWlsKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgY29zKGRvdWJs
ZSk7CmV4dGVybiBkb3VibGUgY29zaChkb3VibGUpOwpleHRlcm4gZG91YmxlIGV4cChkb3VibGUp
OwpleHRlcm4gZG91YmxlIGZhYnMoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBmbG9vcihkb3VibGUp
OwpleHRlcm4gZG91YmxlIGZtb2QoZG91YmxlLCBkb3VibGUpOwpleHRlcm4gZG91YmxlIGZyZXhw
KGRvdWJsZSwgaW50ICopOwpleHRlcm4gZG91YmxlIGxkZXhwKGRvdWJsZSwgaW50KTsKZXh0ZXJu
IGRvdWJsZSBsb2coZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBsb2cxMChkb3VibGUpOwpleHRlcm4g
ZG91YmxlIG1vZGYoZG91YmxlLCBkb3VibGUgKik7CmV4dGVybiBkb3VibGUgcG93KGRvdWJsZSwg
ZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBzaW4oZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBzaW5oKGRv
dWJsZSk7CmV4dGVybiBkb3VibGUgc3FydChkb3VibGUpOwpleHRlcm4gZG91YmxlIHRhbihkb3Vi
bGUpOwpleHRlcm4gZG91YmxlIHRhbmgoZG91YmxlKTsKIyAyMjQgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvbWF0aC5oIiAzIDQKZXh0
ZXJuIGludCBzaWduZ2FtOwojIDI2NCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9tYXRoLmgiIDMgNApleHRlcm4gdW5zaWduZWQgaW50
IF9TRlBNQVg7CiMgMzE0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw
MDMwNDI4L2djYy9pbmNsdWRlL21hdGguaCIgMyA0CmV4dGVybiBkb3VibGUgZXJmKGRvdWJsZSk7
CmV4dGVybiBkb3VibGUgZXJmYyhkb3VibGUpOwpleHRlcm4gaW50IGlzbmFuKGRvdWJsZSk7CmV4
dGVybiBkb3VibGUgaHlwb3QoZG91YmxlLGRvdWJsZSk7CmV4dGVybiBkb3VibGUgajAoZG91Ymxl
KTsKZXh0ZXJuIGRvdWJsZSBqMShkb3VibGUpOwpleHRlcm4gZG91YmxlIGpuKGludCwgZG91Ymxl
KTsKCgoKCmV4dGVybiBkb3VibGUgZ2FtbWEoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWEo
ZG91YmxlKTsKCmV4dGVybiBkb3VibGUgeTAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB5MShkb3Vi
bGUpOwpleHRlcm4gZG91YmxlIHluKGludCwgZG91YmxlKTsKIyAzNDMgIi9nY2MvZGplL2J1aWxk
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvbWF0aC5oIiAzIDQK
ZXh0ZXJuIGRvdWJsZSBhY29zaChkb3VibGUpOwpleHRlcm4gZG91YmxlIGFzaW5oKGRvdWJsZSk7
CmV4dGVybiBkb3VibGUgYXRhbmgoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBjYnJ0KGRvdWJsZSk7
CmV4dGVybiBkb3VibGUgZXhwbTEoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBsb2cxcChkb3VibGUp
OwpleHRlcm4gZG91YmxlIHJlbWFpbmRlcihkb3VibGUsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUg
cmludChkb3VibGUpOwpleHRlcm4gZG91YmxlIHNjYWxiKGRvdWJsZSwgZG91YmxlKTsKIyAzNzMg
Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1
ZGUvbWF0aC5oIiAzIDQKIGV4dGVybiBpbnQgaWxvZ2IoKTsKIGV4dGVybiBkb3VibGUgbG9nYigp
OwogZXh0ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIoKTsKIyA0MzIgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvbWF0aC5oIiAzIDQKICAgICBz
dHJ1Y3QgZGJsX2h5cG90IHsKICAgICAgICAgZG91YmxlIHgsIHk7CiAgICAgfTsKCgpleHRlcm4g
ZG91YmxlIGNvcHlzaWduIChkb3VibGUsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUgZHJlbShkb3Vi
bGUsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUgZXhwX19FKGRvdWJsZSwgZG91YmxlKTsKZXh0ZXJu
IGRvdWJsZSBsb2dfX0woZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBuZWFyZXN0KGRvdWJsZSk7CmV4
dGVybiBkb3VibGUgcnNxcnQoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB0cnVuYyhkb3VibGUpOwpl
eHRlcm4gaW50IGl0cnVuYyhkb3VibGUpOwpleHRlcm4gaW50IHVub3JkZXJlZChkb3VibGUsIGRv
dWJsZSk7CmV4dGVybiB1bnNpZ25lZCB1aXRydW5jKGRvdWJsZSk7CmV4dGVybiBpbnQgaXNpbmYo
ZG91YmxlKTsKCmV4dGVybiBpbnQgZHRvaShkb3VibGUpOwojIDQ2MyAiL2djYy9kamUvYnVpbGQv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9tYXRoLmgiIDMgNApl
eHRlcm4gaW50IF9jbGFzcyhkb3VibGUpOwoKZXh0ZXJuIGludCBmaW5pdGUoKTsKIyA0ODAgIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUv
bWF0aC5oIiAzIDQKc3RydWN0IF9fbWF0aF9leGNlcHRpb24gewogaW50IHR5cGU7CiBjaGFyICpu
YW1lOwogZG91YmxlIGFyZzE7CiBkb3VibGUgYXJnMjsKIGRvdWJsZSByZXR2YWw7Cn07CiMgNTM1
ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNs
dWRlL21hdGguaCIgMyA0CmV4dGVybiBsb25nIGxvbmcgaW50IF9fbXVsdGk2NCggbG9uZyBsb25n
IGludCwgbG9uZyBsb25nIGludCApOwpleHRlcm4gbG9uZyBsb25nIGludCBfX2Rpdmk2NCggbG9u
ZyBsb25nIGludCwgbG9uZyBsb25nIGludCApOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu
dCBfX2RpdnU2NCggdW5zaWduZWQgbG9uZyBsb25nIGludCwKICAgICB1bnNpZ25lZCBsb25nIGxv
bmcgaW50ICk7CmV4dGVybiBsb25nIGxvbmcgaW50IF9fbWF4aTY0KCBsb25nIGxvbmcgaW50LCBs
b25nIGxvbmcgaW50ICk7CmV4dGVybiBsb25nIGxvbmcgaW50IF9fbWluaTY0KCBsb25nIGxvbmcg
aW50LCBsb25nIGxvbmcgaW50ICk7CmV4dGVybiBsb25nIGxvbmcgaW50IF9fZjY0dG9pNjRyeigg
ZG91YmxlICk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fZjY0dG91NjRyeiggZG91
YmxlICk7CiMgNTYzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw
NDI4L2djYy9pbmNsdWRlL21hdGguaCIgMyA0Cn0KIyA1MiAiL2djYy9kamUvYnVpbGQvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMr
Ky12My9pbmNsdWRlL2NtYXRoIiAyIDMKIyA4MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p
bmNsdWRlL2NtYXRoIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIG5hbWVzcGFjZSBfX2M5OV9i
aW5kaW5nCiAgewojIDE2MSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y
MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NtYXRo
IiAzCiAgfQp9CgpuYW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1Rw
IF9fY21hdGhfcG93ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOwoKICBpbmxpbmUgZG91YmxlCiAgYWJz
KGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBpbmxpbmUg
ZmxvYXQKICBhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9
CgogIGlubGluZSBsb25nIGRvdWJsZQogIGFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4g
X19idWlsdGluX2ZhYnNsKF9feCk7IH0KCgoKCgogIGlubGluZSBmbG9hdAogIGFjb3MoZmxvYXQg
X194KSB7IHJldHVybiA6OmFjb3Moc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCiAgdXNp
bmcgOjphY29zOwoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYWNvcyhsb25nIGRvdWJsZSBf
X3gpIHsgcmV0dXJuIDo6YWNvcyhzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1c2lu
ZyA6OmFzaW47CgoKCgoKICBpbmxpbmUgZmxvYXQKICBhc2luKGZsb2F0IF9feCkgeyByZXR1cm4g
Ojphc2luKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBk
b3VibGUKICBhc2luKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphc2luKHN0YXRpY19jYXN0
PGRvdWJsZT4oX194KSk7IH0KCgogIHVzaW5nIDo6YXRhbjsKCgoKCgogIGlubGluZSBmbG9hdAog
IGF0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW4oc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gp
KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4obG9uZyBkb3VibGUgX194KSB7
IHJldHVybiA6OmF0YW4oc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCiAgdXNpbmcgOjph
dGFuMjsKCgoKCgogIGlubGluZSBmbG9hdAogIGF0YW4yKGZsb2F0IF9feSwgZmxvYXQgX194KQog
IHsgcmV0dXJuIDo6YXRhbjIoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3kpLCBzdGF0aWNfY2FzdDxk
b3VibGU+KF9feCkpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbjIobG9uZyBk
b3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gOjphdGFuMihzdGF0aWNfY2Fz
dDxkb3VibGU+KF9feSksIHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgogIHVzaW5nIDo6
Y2VpbDsKCgoKCgogIGlubGluZSBmbG9hdAogIGNlaWwoZmxvYXQgX194KSB7IHJldHVybiA6OmNl
aWwoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJs
ZQogIGNlaWwobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmNlaWwoc3RhdGljX2Nhc3Q8ZG91
YmxlPihfX3gpKTsgfQoKCiAgdXNpbmcgOjpjb3M7CgogIGlubGluZSBmbG9hdAogIGNvcyhmbG9h
dCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Nvc2YoX194KTsgfQoKICBpbmxpbmUgbG9uZyBk
b3VibGUKICBjb3MobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NsKF9f
eCk7IH0KCiAgdXNpbmcgOjpjb3NoOwoKCgoKCiAgaW5saW5lIGZsb2F0CiAgY29zaChmbG9hdCBf
X3gpIHsgcmV0dXJuIDo6Y29zaChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKCgoKCiAg
aW5saW5lIGxvbmcgZG91YmxlCiAgY29zaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y29z
aChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1c2luZyA6OmV4cDsKCgoKCgogIGlu
bGluZSBmbG9hdAogIGV4cChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZXhwKHN0YXRpY19jYXN0PGRv
dWJsZT4oX194KSk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBleHAobG9uZyBkb3Vi
bGUgX194KSB7IHJldHVybiA6OmV4cChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1
c2luZyA6OmZhYnM7CgogIGlubGluZSBmbG9hdAogIGZhYnMoZmxvYXQgX194KQogIHsgcmV0dXJu
IF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGZhYnMobG9u
ZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9CgogIHVzaW5n
IDo6Zmxvb3I7CgoKCgoKICBpbmxpbmUgZmxvYXQKICBmbG9vcihmbG9hdCBfX3gpIHsgcmV0dXJu
IDo6Zmxvb3Ioc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCgoKCgogIGlubGluZSBsb25n
IGRvdWJsZQogIGZsb29yKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpmbG9vcihzdGF0aWNf
Y2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1c2luZyA6OmZtb2Q7CgoKCgoKICBpbmxpbmUgZmxv
YXQKICBmbW9kKGZsb2F0IF9feCwgZmxvYXQgX195KQogIHsgcmV0dXJuIDo6Zm1vZChzdGF0aWNf
Y2FzdDxkb3VibGU+KF9feCksIHN0YXRpY19jYXN0PGRvdWJsZT4oX195KSk7IH0KCgoKCgoKICBp
bmxpbmUgbG9uZyBkb3VibGUKICBmbW9kKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KQogIHsgcmV0dXJuIDo6Zm1vZChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCksIHN0YXRpY19jYXN0
PGRvdWJsZT4oX195KSk7IH0KCgogIHVzaW5nIDo6ZnJleHA7CgoKCgoKICBpbmxpbmUgZmxvYXQK
ICBmcmV4cChmbG9hdCBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHAoX194LCBfX2V4
cCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmcmV4cChsb25nIGRvdWJsZSBfX3gs
IGludCogX19leHApCiAgeyByZXR1cm4gOjpmcmV4cChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCks
IF9fZXhwKTsgfQoKCiAgdXNpbmcgOjpsZGV4cDsKCgoKCgogIGlubGluZSBmbG9hdAogIGxkZXhw
KGZsb2F0IF9feCwgaW50IF9fZXhwKQogIHsgcmV0dXJuIDo6bGRleHAoc3RhdGljX2Nhc3Q8ZG91
YmxlPihfX3gpLCBfX2V4cCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsZGV4cChs
b25nIGRvdWJsZSBfX3gsIGludCBfX2V4cCkKICB7IHJldHVybiA6OmxkZXhwKHN0YXRpY19jYXN0
PGRvdWJsZT4oX194KSwgX19leHApOyB9CgoKICB1c2luZyA6OmxvZzsKCgoKCgogIGlubGluZSBm
bG9hdCBsb2coZmxvYXQgX194KQogIHsgcmV0dXJuIDo6bG9nKHN0YXRpY19jYXN0PGRvdWJsZT4o
X194KSk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsb2cobG9uZyBkb3VibGUgX194
KSB7IHJldHVybiA6OmxvZyhzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1c2luZyA6
OmxvZzEwOwoKCgoKCiAgaW5saW5lIGZsb2F0CiAgbG9nMTAoZmxvYXQgX194KSB7IHJldHVybiA6
OmxvZzEwKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBk
b3VibGUKICBsb2cxMChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nMTAoc3RhdGljX2Nh
c3Q8ZG91YmxlPihfX3gpKTsgfQoKCiAgdXNpbmcgOjptb2RmOwoKCgoKCiAgaW5saW5lIGZsb2F0
CiAgbW9kZihmbG9hdCBfX3gsIGZsb2F0KiBfX2lwdHIpCiAgewogICAgZG91YmxlIF9fdG1wOwog
ICAgZG91YmxlIF9fcmVzID0gOjptb2RmKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSwgJl9fdG1w
KTsKICAgICpfX2lwdHIgPSBzdGF0aWNfY2FzdDxmbG9hdD4oX190bXApOwogICAgcmV0dXJuIF9f
cmVzOwogIH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBtb2RmKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUqIF9faXB0cikKICB7CiAgICBkb3VibGUgX190bXA7CiAgICBkb3VibGUg
X19yZXMgPSA6Om1vZGYoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpLCAmX190bXApOwogICAgKiBf
X2lwdHIgPSBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oX190bXApOwogICAgcmV0dXJuIF9fcmVz
OwogIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIF9fcG93
X2hlbHBlcihfVHAgX194LCBpbnQgX19uKQogICAgewogICAgICByZXR1cm4gX19uIDwgMAogICAg
ICAgID8gX1RwKDEpL19fY21hdGhfcG93ZXIoX194LCAtX19uKQogICAgICAgIDogX19jbWF0aF9w
b3dlcihfX3gsIF9fbik7CiAgICB9CgogIHVzaW5nIDo6cG93OwoKCgoKCiAgaW5saW5lIGZsb2F0
CiAgcG93KGZsb2F0IF9feCwgZmxvYXQgX195KQogIHsgcmV0dXJuIDo6cG93KHN0YXRpY19jYXN0
PGRvdWJsZT4oX194KSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3kpKTsgfQoKCgoKCgogIGlubGlu
ZSBsb25nIGRvdWJsZQogIHBvdyhsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKICB7
IHJldHVybiA6OnBvdyhzdGF0aWNfY2FzdDxkb3VibGU+KF9feCksIHN0YXRpY19jYXN0PGRvdWJs
ZT4oX195KSk7IH0KCgogIGlubGluZSBkb3VibGUKICBwb3coZG91YmxlIF9feCwgaW50IF9faSkK
ICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX2kpOyB9CgogIGlubGluZSBmbG9hdAogIHBv
dyhmbG9hdCBfX3gsIGludCBfX24pCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19uKTsg
fQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194LCBpbnQgX19uKQog
IHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7IH0KCiAgdXNpbmcgOjpzaW47CgogIGlu
bGluZSBmbG9hdAogIHNpbihmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NpbmYoX194
KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzaW4obG9uZyBkb3VibGUgX194KQogIHsgcmV0
dXJuIF9fYnVpbHRpbl9zaW5sKF9feCk7IH0KCiAgdXNpbmcgOjpzaW5oOwoKCgoKCiAgaW5saW5l
IGZsb2F0CiAgc2luaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6c2luaChzdGF0aWNfY2FzdDxkb3Vi
bGU+KF9feCkpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc2luaChsb25nIGRvdWJs
ZSBfX3gpIHsgcmV0dXJuIDo6c2luaChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1
c2luZyA6OnNxcnQ7CgogIGlubGluZSBmbG9hdAogIHNxcnQoZmxvYXQgX194KQogIHsgcmV0dXJu
IF9fYnVpbHRpbl9zcXJ0ZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHNxcnQobG9u
ZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0bChfX3gpOyB9CgogIHVzaW5n
IDo6dGFuOwoKCgoKCiAgaW5saW5lIGZsb2F0CiAgdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjp0
YW4oc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJs
ZQogIHRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6dGFuKHN0YXRpY19jYXN0PGRvdWJs
ZT4oX194KSk7IH0KCgogIHVzaW5nIDo6dGFuaDsKCgoKCgogIGlubGluZSBmbG9hdAogIHRhbmgo
ZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmgoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoK
CgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHRhbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVy
biA6OnRhbmgoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKfQojIDc0NCAiL2djYy9kamUv
YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu
My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NtYXRoIiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0
ZGMrKy12My9pbmNsdWRlL2JpdHMvY21hdGgudGNjIiAxIDMKIyAzNSAiL2djYy9kamUvYnVpbGQv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp
YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvY21hdGgudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIF9UcAogICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1
bnNpZ25lZCBpbnQgX19uKQogICAgewogICAgICBfVHAgX195ID0gX19uICUgMiA/IF9feCA6IDE7
CgogICAgICB3aGlsZSAoX19uID4+PSAxKQogICAgICAgIHsKICAgICAgICAgIF9feCA9IF9feCAq
IF9feDsKICAgICAgICAgIGlmIChfX24gJSAyKQogICAgICAgICAgICBfX3kgPSBfX3kgKiBfX3g7
CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9feTsKICAgIH0KfQojIDc0NSAiL2djYy9kamUvYnVp
bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
L2xpYnN0ZGMrKy12My9pbmNsdWRlL2NtYXRoIiAyIDMKIyA0MiAiL2djYy9kamUvYnVpbGQvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0
ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKCiMgMSAiL2djYy9k
amUvc3JjL2xpYnN0ZGMrKy12My9saWJzdXBjKysvdHlwZWluZm8iIDEgMwojIDQwICIvZ2NjL2Rq
ZS9zcmMvbGlic3RkYysrLXYzL2xpYnN1cGMrKy90eXBlaW5mbyIgMwpleHRlcm4gIkMrKyIgewoK
bmFtZXNwYWNlIF9fY3h4YWJpdjEKewogIGNsYXNzIF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTUg
Ii9nY2MvZGplL3NyYy9saWJzdGRjKystdjMvbGlic3VwYysrL3R5cGVpbmZvIiAzCm5hbWVzcGFj
ZSBzdGQKewoKCgoKCgogIGNsYXNzIHR5cGVfaW5mbwogIHsKICBwdWJsaWM6CgoKCgogICAgdmly
dHVhbCB+dHlwZV9pbmZvKCk7CgogIHByaXZhdGU6CgogICAgdHlwZV9pbmZvJiBvcGVyYXRvcj0o
Y29uc3QgdHlwZV9pbmZvJik7CiAgICB0eXBlX2luZm8oY29uc3QgdHlwZV9pbmZvJik7CgogIHBy
b3RlY3RlZDoKICAgIGNvbnN0IGNoYXIgKl9fbmFtZTsKCiAgcHJvdGVjdGVkOgogICAgZXhwbGlj
aXQgdHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9fbik6IF9fbmFtZShfX24pIHsgfQoKICBwdWJsaWM6
CgoKCiAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZTsgfQoK
CiAgICBib29sIGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdDsKCgoKICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdDsKIyAxMDYgIi9nY2Mv
ZGplL3NyYy9saWJzdGRjKystdjMvbGlic3VwYysrL3R5cGVpbmZvIiAzCiAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRv
cj09KF9fYXJnKTsgfQoKCiAgcHVibGljOgoKICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJf
cCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgYm9vbCBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsKCgoK
CgoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb19jYXRjaChjb25zdCB0eXBlX2luZm8gKl9fdGhyX3R5
cGUsIHZvaWQgKipfX3Rocl9vYmosCiAgICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKCgog
ICAgdmlydHVhbCBib29sIF9fZG9fdXBjYXN0KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlw
ZV9pbmZvICpfX3RhcmdldCwKICAgICAgICB2b2lkICoqX19vYmpfcHRyKSBjb25zdDsKICB9OwoK
CgoKCgogIGNsYXNzIGJhZF9jYXN0IDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAg
ICBiYWRfY2FzdCgpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9jYXN0KCkgdGhyb3co
KTsKICB9OwoKCiAgY2xhc3MgYmFkX3R5cGVpZCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVi
bGljOgogICAgYmFkX3R5cGVpZCAoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfdHlw
ZWlkKCkgdGhyb3coKTsKICB9Owp9Cgp9CiMgNDUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMv
aW5jbHVkZS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGUKICAgIGxvY2FsZTo6Y29tYmluZShj
b25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0CiAgICB7CiAgICAgIF9JbXBsKiBfX3RtcCA9IG5l
dyBfSW1wbCgqX01faW1wbCwgMSk7CiAgICAgIF9fdG1wLT5fTV9yZXBsYWNlX2ZhY2V0KF9fb3Ro
ZXIuX01faW1wbCwgJl9GYWNldDo6aWQpOwogICAgICByZXR1cm4gbG9jYWxlKF9fdG1wKTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBib29sCiAgICBsb2NhbGU6Om9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25z
dAogICAgewogICAgICB0eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hhclQ+IF9fY29sbGF0ZV90eXBl
OwogICAgICBjb25zdCBfX2NvbGxhdGVfdHlwZSYgX19jb2xsYXRlID0gdXNlX2ZhY2V0PF9fY29s
bGF0ZV90eXBlPigqdGhpcyk7CiAgICAgIHJldHVybiAoX19jb2xsYXRlLmNvbXBhcmUoX19zMS5k
YXRhKCksIF9fczEuZGF0YSgpICsgX19zMS5sZW5ndGgoKSwKICAgIF9fczIuZGF0YSgpLCBfX3My
LmRhdGEoKSArIF9fczIubGVuZ3RoKCkpIDwgMCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmIF9f
bG9jKQogICAgewogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOwogICAgICBj
b25zdCBsb2NhbGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7
CiAgICAgIGlmICghKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0c19zaXplICYmIF9fZmFj
ZXRzW19faV0pKQogICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IF9GYWNldCY+KCpfX2ZhY2V0c1tfX2ldKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19s
b2MpIHRocm93KCkKICAgIHsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01faWQoKTsK
ICAgICAgY29uc3QgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01f
ZmFjZXRzOwogICAgICByZXR1cm4gKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0c19zaXpl
ICYmIF9fZmFjZXRzW19faV0pOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6CiAgICBfTV9leHRyYWN0X2Zsb2F0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9f
eHRyYykgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJh
aXRzX3R5cGU7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAg
IGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+
KF9fbG9jKTsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxu
dW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMg
PSBfX2N0eXBlLndpZGVuKCcrJyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19j
dHlwZS53aWRlbignLScpOwogICAgICBpbnQgX19wb3MgPSAwOwogICAgICBjaGFyX3R5cGUgX19j
ID0gKl9fYmVnOwogICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKSB8fCBf
X3RyYWl0c190eXBlOjplcShfX2MsIF9fbWludXMpKQogICAmJiBfX2JlZyAhPSBfX2VuZCkKIHsK
ICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgKytfX3BvczsKICAg
X19jID0gKigrK19fYmVnKTsKIH0KCgogICAgICBjb25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19j
dHlwZS53aWRlbihfU19hdG9tc19pbltfTV96ZXJvXSk7CiAgICAgIGJvb2wgX19mb3VuZF96ZXJv
ID0gZmFsc2U7CiAgICAgIHdoaWxlIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9femVybykgJiYg
X19iZWcgIT0gX19lbmQpCiB7CiAgIF9fYyA9ICooKytfX2JlZyk7CiAgIF9fZm91bmRfemVybyA9
IHRydWU7CiB9CiAgICAgIGlmIChfX2ZvdW5kX3plcm8pCiB7CiAgIF9feHRyYyArPSBfU19hdG9t
c19pbltfTV96ZXJvXTsKICAgKytfX3BvczsKIH0KCgogICAgICBjb25zdCBzaXplX3QgX19sZW4g
PSBfTV9FIC0gX01femVybyArIDE7CiAgICAgIGNoYXJfdHlwZSBfX3dhdG9tc1tfX2xlbl07CiAg
ICAgIF9fY3R5cGUud2lkZW4oX1NfYXRvbXNfaW4sIF9TX2F0b21zX2luICsgX19sZW4sIF9fd2F0
b21zKTsKICAgICAgYm9vbCBfX2ZvdW5kX2RlYyA9IGZhbHNlOwogICAgICBib29sIF9fZm91bmRf
c2NpID0gZmFsc2U7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX2RlYyA9IF9fbnAuZGVjaW1hbF9w
b2ludCgpOwoKICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAgIGNvbnN0IHN0cmlu
ZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBib29sIF9fY2hlY2tfZ3JvdXBp
bmcgPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7CiAgICAgIGNv
bnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwoKICAgICAgd2hpbGUg
KF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f
cCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193YXRvbXMsIDEwLCBfX2MpOwoKCiAgICAgICAgICBp
ZiAoX19wICYmICFfX3RyYWl0c190eXBlOjplcShfX2MsIGNoYXJfdHlwZSgpKSkKICAgICB7Cgog
ICAgICAgKytfX3BvczsKICAgICAgIF9feHRyYyArPSBfU19hdG9tc19pbltfX3AgLSBfX3dhdG9t
c107CiAgICAgICArK19fc2VwX3BvczsKICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgfQog
ICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3NlcCkKICAgICAmJiBf
X2NoZWNrX2dyb3VwaW5nICYmICFfX2ZvdW5kX2RlYykKICAgICB7CgoKICAgICAgICAgICAgICBp
ZiAoX19zZXBfcG9zKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2ZvdW5k
X2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAg
ICAgIF9fc2VwX3BvcyA9IDA7CiAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgIGVsc2UKICB7CiAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsK
ICAgIGJyZWFrOwogIH0KICAgICAgICAgICAgfQogICBlbHNlIGlmIChfX3RyYWl0c190eXBlOjpl
cShfX2MsIF9fZGVjKSAmJiAhX19mb3VuZF9kZWMpCiAgICAgewoKCgogICAgICAgaWYgKF9fZm91
bmRfZ3JvdXBpbmcuc2l6ZSgpKQogIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hh
cj4oX19zZXBfcG9zKTsKICAgICAgICsrX19wb3M7CiAgICAgICBfX3h0cmMgKz0gJy4nOwogICAg
ICAgX19jID0gKigrK19fYmVnKTsKICAgICAgIF9fZm91bmRfZGVjID0gdHJ1ZTsKICAgICB9CiAg
IGVsc2UgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fd2F0b21zW19NX2VdKQogICAgICB8
fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fd2F0b21zW19NX0VdKSkKICAgICAmJiAhX19mb3Vu
ZF9zY2kgJiYgX19wb3MpCiAgICAgewoKICAgICAgICsrX19wb3M7CiAgICAgICBfX3h0cmMgKz0g
X19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgX19jID0gKigrK19fYmVnKTsKCgog
ICAgICAgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKQogICAgfHwgX190cmFpdHNf
dHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICB7CiAgICArK19fcG9zOwogICAgX194dHJjICs9IF9f
Y3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgIF9fYyA9ICooKytfX2JlZyk7CiAgfQogICAg
ICAgX19mb3VuZF9zY2kgPSB0cnVlOwogICAgIH0KICAgZWxzZQoKICAgICBicmVhazsKICAgICAg
ICB9CgoKCiAgICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6
ZSgpKQogICAgICAgIHsKCiAgIGlmICghX19mb3VuZF9kZWMpCiAgICAgX19mb3VuZF9ncm91cGlu
ZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3Zlcmlm
eV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dyb3VwaW5nKSkKICAgICBfX2VyciB8PSBp
b3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgX194dHJjICs9IGNoYXIoKTsKICAg
ICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7
CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6CiAgICBfTV9leHRyYWN0X2ludChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywKICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX194dHJj
LCBpbnQmIF9fYmFzZSkgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hh
clQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9j
KCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8
X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVz
ZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGlvc19iYXNlOjpmbXRm
bGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAg
ICAgIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgIF9fYmFzZSA9IDg7
CiAgICAgIGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpCiAgICAgICAgX19i
YXNlID0gMTY7CiAgICAgIGVsc2UKIF9fYmFzZSA9IDEwOwoKCiAgICAgIGludCBfX3BvcyA9IDA7
CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3Bs
dXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0g
X19jdHlwZS53aWRlbignLScpOwoKICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9f
cGx1cykgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICAgJiYgX19iZWcgIT0g
X19lbmQpCiB7CiAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICsr
X19wb3M7CiAgIF9fYyA9ICooKytfX2JlZyk7CiB9CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9f
emVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRvbXNfaW5bX01femVyb10pOwogICAgICBjb25zdCBj
aGFyX3R5cGUgX194ID0gX19jdHlwZS53aWRlbigneCcpOwogICAgICBjb25zdCBjaGFyX3R5cGUg
X19YID0gX19jdHlwZS53aWRlbignWCcpOwogICAgICBpZiAoX19iYXNlID09IDEwKQogewogICBi
b29sIF9fZm91bmRfemVybyA9IGZhbHNlOwogICB3aGlsZSAoX190cmFpdHNfdHlwZTo6ZXEoX19j
LCBfX3plcm8pICYmIF9fYmVnICE9IF9fZW5kKQogICAgIHsKICAgICAgIF9fYyA9ICooKytfX2Jl
Zyk7CiAgICAgICBfX2ZvdW5kX3plcm8gPSB0cnVlOwogICAgIH0KICAgaWYgKF9fZm91bmRfemVy
bykKICAgICB7CiAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNfaW5bX01femVyb107CiAgICAgICAr
K19fcG9zOwogICAgICAgaWYgKF9fYmFzZWZpZWxkID09IDApCiAgewogICAgaWYgKChfX3RyYWl0
c190eXBlOjplcShfX2MsIF9feCkKICAgICAgICAgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBf
X1gpKQogICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAgICB7CiAgICAgICAgX194dHJjICs9
IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICArK19fcG9zOwogICAgICAgIF9f
YyA9ICooKytfX2JlZyk7CiAgICAgICAgX19iYXNlID0gMTY7CiAgICAgIH0KICAgIGVsc2UKICAg
ICAgX19iYXNlID0gODsKICB9CiAgICAgfQogfQogICAgICBlbHNlIGlmIChfX2Jhc2UgPT0gMTYp
CiB7CiAgIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9femVybykgJiYgX19iZWcgIT0gX19l
bmQpCiAgICAgewogICAgICAgX194dHJjICs9IF9TX2F0b21zX2luW19NX3plcm9dOwogICAgICAg
KytfX3BvczsKICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICBpZiAoKF9fdHJhaXRzX3R5
cGU6OmVxKF9fYywgX194KSB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fWCkpCiAgICAmJiBf
X2JlZyAhPSBfX2VuZCkKICB7CiAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFy
KCkpOwogICAgKytfX3BvczsKICAgIF9fYyA9ICooKytfX2JlZyk7CiAgfQogICAgIH0KIH0KCgoK
ICAgICAgc2l6ZV90IF9fbGVuOwogICAgICBpZiAoX19iYXNlID09IDE2KQogX19sZW4gPSBfTV9z
aXplOwogICAgICBlbHNlCiBfX2xlbiA9IF9fYmFzZTsKCgogICAgICBjaGFyX3R5cGUgX193YXRv
bXNbX01fc2l6ZV07CiAgICAgIF9fY3R5cGUud2lkZW4oX1NfYXRvbXNfaW4sIF9TX2F0b21zX2lu
ICsgX19sZW4sIF9fd2F0b21zKTsKICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAg
IGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBib29sIF9f
Y2hlY2tfZ3JvdXBpbmcgPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9
IDA7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwog
ICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgY29uc3QgY2hh
cl90eXBlKiBfX3AgPSBfX3RyYWl0c190eXBlOjpmaW5kKF9fd2F0b21zLCBfX2xlbiwgX19jKTsK
CgogICAgICAgICAgaWYgKF9fcCAmJiAhX190cmFpdHNfdHlwZTo6ZXEoX19jLCBjaGFyX3R5cGUo
KSkpCiAgICAgewoKICAgICAgIF9feHRyYyArPSBfU19hdG9tc19pbltfX3AgLSBfX3dhdG9tc107
CiAgICAgICArK19fcG9zOwogICAgICAgKytfX3NlcF9wb3M7CiAgICAgICBfX2MgPSAqKCsrX19i
ZWcpOwogICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19z
ZXApICYmIF9fY2hlY2tfZ3JvdXBpbmcpCiAgICAgewoKCiAgICAgICAgICAgICAgaWYgKF9fc2Vw
X3BvcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGlu
ZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICBfX3Nl
cF9wb3MgPSAwOwogICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICBlbHNlCiAgewogICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICBicmVh
azsKICB9CiAgICAgICAgICAgIH0KICAgZWxzZQoKICAgICBicmVhazsKICAgICAgICB9CgoKCiAg
ICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQogICAg
ICAgIHsKCiAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9f
c2VwX3Bvcyk7CiAgICAgICAgICBpZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9f
Zm91bmRfZ3JvdXBpbmcpKQogICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAg
IH0KCgogICAgICBfX3h0cmMgKz0gY2hhcigpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAg
ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAg
fQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9J
bkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBl
IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdAogICAgewoKICAgICAgaWYgKCEo
X19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkpCiAgICAgICAgewoKCiAgICAgICAg
ICBzdHJpbmcgX194dHJjOwogICAgICAgICAgaW50IF9fYmFzZTsKICAgICAgICAgIF9fYmVnID0g
X01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2Up
OwoKICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIo
KSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICBpZiAoIShfX2VyciAmIGlv
c19iYXNlOjpmYWlsYml0KSAmJiBfX3VsIDw9IDEpCiAgICAgX192ID0gX191bDsKICAgZWxzZQog
ICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAg
ZWxzZQogICAgICAgIHsKICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5
cGU7CiAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAg
ICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICBjb25zdCBudW1wdW5jdDxfQ2hh
clQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgIGNvbnN0
IF9fc3RyaW5nX3R5cGUgX190cnVlID0gX19ucC50cnVlbmFtZSgpOwogICBjb25zdCBfX3N0cmlu
Z190eXBlIF9fZmFsc2UgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX3RydWVzID0gX190cnVlLmNfc3RyKCk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq
IF9fZmFsc2VzID0gX19mYWxzZS5jX3N0cigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdHJ1
ZW4gPSBfX3RydWUuc2l6ZSgpIC0gMTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZhbHNlbiA9
IF9fZmFsc2Uuc2l6ZSgpIC0gMTsKCiAgICAgICAgICBmb3IgKHNpemVfdCBfX24gPSAwOyBfX2Jl
ZyAhPSBfX2VuZDsgKytfX24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUg
X19jID0gKl9fYmVnKys7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RmID0gX19uIDw9IF9fZmFs
c2VuCiAgICAgICAgICAgICAgID8gX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX2ZhbHNlc1tfX25d
KSA6IGZhbHNlOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0dCA9IF9fbiA8PSBfX3RydWVuCiAg
ICAgICAgICAgICAgID8gX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3RydWVzW19fbl0pIDogZmFs
c2U7CiAgICAgICAgICAgICAgaWYgKCEoX190ZXN0ZiB8fCBfX3Rlc3R0KSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2Ug
aWYgKF9fdGVzdGYgJiYgX19uID09IF9fZmFsc2VuKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBfX3YgPSAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3R0ICYmIF9fbiA9PSBfX3RydWVuKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3YgPSAxOwogICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgaWYg
KF9fYmVnID09IF9fZW5kKQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0Owog
ICAgICAgIH0KICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQs
IF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25n
JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7
CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vyciwg
X194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192
LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl
cgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19i
ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgewogICAgICBz
dHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3Rf
aW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgdW5z
aWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191
bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19i
YXNlOjpmYWlsYml0KQogICAmJiBfX3VsIDw9IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0
Pjo6bWF4KCkpCiBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX191bCk7CiAgICAg
IGVsc2UKIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4gX19iZWc7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9J
bkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBl
IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICB7CiAgICAg
IHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFj
dF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICB1
bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBf
X3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9z
X2Jhc2U6OmZhaWxiaXQpCiAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50
Pjo6bWF4KCkpCiBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fdWwpOwogICAgICBl
bHNlCiBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J
dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBf
X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAg
c3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0
X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9f
Y29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19i
YXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9J
bkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxv
bmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFz
ZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy
LCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBf
X3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J
dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBf
X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewog
ICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4
dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAg
ICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxl
LCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy
VCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9f
dikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2VydmUo
MzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBf
X2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwg
X19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1f
Z2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90
eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIGRvdWJsZSYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAg
ICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2Jl
ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0
cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAg
IF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90
eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QKICAgIHsKICAg
ICAgc3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9
IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAg
ICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxl
KTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl
cj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz
ZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3Yp
IGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVmIGlvc19iYXNlOjpmbXRmbGFncyBmbXRmbGFnczsK
ICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7CiAgICAgIGZtdGZsYWdzIF9fZm10
bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFzZWZpZWxkCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBwZXJjYXNlIHwgaW9zX2Jhc2U6Omlu
dGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZtdCAmIF9fZm10bWFzayB8IChpb3NfYmFzZTo6
aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7CgogICAgICBzdHJpbmcgX194dHJjOwogICAgICBp
bnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19p
bywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKCgogICAgICBfX2lvLmZsYWdzKF9fZm10KTsKCiAg
ICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3Ry
KCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIg
JiBpb3NfYmFzZTo6ZmFpbGJpdCkpCiBfX3YgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX3Vs
KTsKICAgICAgZWxzZQogX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBf
X2JlZzsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ
dGVyPgogICAgdm9pZAogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV9wYWQo
X0NoYXJUIF9fZmlsbCwgc3RyZWFtc2l6ZSBfX3csIGlvc19iYXNlJiBfX2lvLAogICAgX0NoYXJU
KiBfX25ldywgY29uc3QgX0NoYXJUKiBfX2NzLCBpbnQmIF9fbGVuKSBjb25zdAogICAgewoKCiAg
ICAgIF9fcGFkPF9DaGFyVCwgY2hhcl90cmFpdHM8X0NoYXJUPiA+OjpfU19wYWQoX19pbywgX19m
aWxsLCBfX25ldywgX19jcywKICAgICAgICBfX3csIF9fbGVuLCB0cnVlKTsKICAgICAgX19sZW4g
PSBzdGF0aWNfY2FzdDxpbnQ+KF9fdyk7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBpbmxpbmUgaW50CiAgICBfX2ludF90b19jaGFyKF9DaGFyVCogX19vdXQsIGNvbnN0
IGludCBfX3NpemUsIGxvbmcgX192LAogICAgICAgICBjb25zdCBfQ2hhclQqIF9fbGl0LCBpb3Nf
YmFzZTo6Zm10ZmxhZ3MgX19mbGFncykKICAgIHsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX192KTsKICAgICAgYm9vbCBfX25lZyA9IGZhbHNl
OwogICAgICBpZiAoX192IDwgMCkKIHsKICAgX191bCA9IC1fX3VsOwogICBfX25lZyA9IHRydWU7
CiB9CiAgICAgIHJldHVybiBfX2ludF90b19jaGFyKF9fb3V0LCBfX3NpemUsIF9fdWwsIF9fbGl0
LCBfX2ZsYWdzLCBfX25lZyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBpbnQKICAgIF9faW50X3RvX2NoYXIoX0NoYXJUKiBfX291dCwgY29uc3QgaW50IF9f
c2l6ZSwgdW5zaWduZWQgbG9uZyBfX3YsCiAgICAgICAgIGNvbnN0IF9DaGFyVCogX19saXQsIGlv
c19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzKQogICAgeyByZXR1cm4gX19pbnRfdG9fY2hhcihfX291
dCwgX19zaXplLCBfX3YsIF9fbGl0LCBfX2ZsYWdzLCBmYWxzZSk7IH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBpbnQKICAgIF9faW50X3RvX2NoYXIoX0NoYXJUKiBf
X291dCwgY29uc3QgaW50IF9fc2l6ZSwgbG9uZyBsb25nIF9fdiwKICAgICAgICAgY29uc3QgX0No
YXJUKiBfX2xpdCwgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MpCiAgICB7CiAgICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBfX3VsbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oX192
KTsKICAgICAgYm9vbCBfX25lZyA9IGZhbHNlOwogICAgICBpZiAoX192IDwgMCkKIHsKICAgX191
bGwgPSAtX191bGw7CiAgIF9fbmVnID0gdHJ1ZTsKIH0KICAgICAgcmV0dXJuIF9faW50X3RvX2No
YXIoX19vdXQsIF9fc2l6ZSwgX191bGwsIF9fbGl0LCBfX2ZsYWdzLCBfX25lZyk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBpbnQKICAgIF9faW50X3RvX2No
YXIoX0NoYXJUKiBfX291dCwgY29uc3QgaW50IF9fc2l6ZSwgdW5zaWduZWQgbG9uZyBsb25nIF9f
diwKICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xpdCwgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxh
Z3MpCiAgICB7IHJldHVybiBfX2ludF90b19jaGFyKF9fb3V0LCBfX3NpemUsIF9fdiwgX19saXQs
IF9fZmxhZ3MsIGZhbHNlKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVmFsdWVUPgogICAgaW50CiAgICBfX2ludF90b19jaGFyKF9DaGFyVCogX19vdXQsIGNvbnN0
IGludCBfX3NpemUsIF9WYWx1ZVQgX192LAogICAgY29uc3QgX0NoYXJUKiBfX2xpdCwgaW9zX2Jh
c2U6OmZtdGZsYWdzIF9fZmxhZ3MsIGJvb2wgX19uZWcpCiAgICB7CgogICAgICBjb25zdCBib29s
IF9fc2hvd2Jhc2UgPSAoX19mbGFncyAmIGlvc19iYXNlOjpzaG93YmFzZSkgJiYgX192OwogICAg
ICBjb25zdCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2ZsYWdzICYgaW9zX2Jh
c2U6OmJhc2VmaWVsZDsKICAgICAgX0NoYXJUKiBfX2J1ZiA9IF9fb3V0ICsgX19zaXplIC0gMTsK
ICAgICAgX0NoYXJUKiBfX2J1ZmVuZCA9IF9fb3V0ICsgX19zaXplOwoKICAgICAgaWYgKF9fYnVp
bHRpbl9leHBlY3QoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCwgZmFsc2UpKQogewoKICAg
ZG8KICAgICB7CiAgICAgICAqX19idWYtLSA9IF9fbGl0WyhfX3YgJiAweDcpICsgX19udW1fYmFz
ZTo6X1NfZGlnaXRzXTsKICAgICAgIF9fdiA+Pj0gMzsKICAgICB9CiAgIHdoaWxlIChfX3YgIT0g
MCk7CiAgIGlmIChfX3Nob3diYXNlKQogICAgICpfX2J1Zi0tID0gX19saXRbX19udW1fYmFzZTo6
X1NfZGlnaXRzXTsKIH0KICAgICAgZWxzZSBpZiAoX19idWlsdGluX2V4cGVjdChfX2Jhc2VmaWVs
ZCA9PSBpb3NfYmFzZTo6aGV4LCBmYWxzZSkpCiB7CgogICBjb25zdCBib29sIF9fdXBwZXJjYXNl
ID0gX19mbGFncyAmIGlvc19iYXNlOjp1cHBlcmNhc2U7CiAgIGludCBfX2Nhc2Vfb2Zmc2V0ID0g
X191cHBlcmNhc2UKICAgICAgICAgICAgICAgICAgICAgICA/IF9fbnVtX2Jhc2U6Ol9TX3VkaWdp
dHMgOiBfX251bV9iYXNlOjpfU19kaWdpdHM7CiAgIGRvCiAgICAgewogICAgICAgKl9fYnVmLS0g
PSBfX2xpdFsoX192ICYgMHhmKSArIF9fY2FzZV9vZmZzZXRdOwogICAgICAgX192ID4+PSA0Owog
ICAgIH0KICAgd2hpbGUgKF9fdiAhPSAwKTsKICAgaWYgKF9fc2hvd2Jhc2UpCiAgICAgewoKICAg
ICAgICpfX2J1Zi0tID0gX19saXRbX19udW1fYmFzZTo6X1NfeCArIF9fdXBwZXJjYXNlXTsKCiAg
ICAgICAqX19idWYtLSA9IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX2RpZ2l0c107CiAgICAgfQogfQog
ICAgICBlbHNlCiB7CgogICBkbwogICAgIHsKICAgICAgICpfX2J1Zi0tID0gX19saXRbKF9fdiAl
IDEwKSArIF9fbnVtX2Jhc2U6Ol9TX2RpZ2l0c107CiAgICAgICBfX3YgLz0gMTA7CiAgICAgfQog
ICB3aGlsZSAoX192ICE9IDApOwogICBpZiAoX19uZWcpCiAgICAgKl9fYnVmLS0gPSBfX2xpdFtf
X251bV9iYXNlOjpfU19taW51c107CiAgIGVsc2UgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hv
d3BvcykKICAgICAqX19idWYtLSA9IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX3BsdXNdOwogfQogICAg
ICBpbnQgX19yZXQgPSBfX2J1ZmVuZCAtIF9fYnVmIC0gMTsKICAgICAgcmV0dXJuIF9fcmV0Owog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg
dm9pZAogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV9ncm91cF9pbnQoY29u
c3Qgc3RyaW5nJiBfX2dyb3VwaW5nLCBfQ2hhclQgX19zZXAsIGlvc19iYXNlJiBfX2lvLAogICBf
Q2hhclQqIF9fbmV3LCBfQ2hhclQqIF9fY3MsIGludCYgX19sZW4pIGNvbnN0CiAgICB7CgoKCgoK
ICAgICAgc3RyZWFtc2l6ZSBfX29mZiA9IDA7CiAgICAgIGNvbnN0IGlvc19iYXNlOjpmbXRmbGFn
cyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKChfX2lvLmZsYWdzKCkg
JiBpb3NfYmFzZTo6c2hvd2Jhc2UpICYmIF9fbGVuID4gMSkKIGlmIChfX2Jhc2VmaWVsZCA9PSBp
b3NfYmFzZTo6b2N0KQogICB7CiAgICAgX19vZmYgPSAxOwogICAgICpfX25ldyA9ICpfX2NzOwog
ICB9CiBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6aGV4KQogICB7CiAgICAgX19v
ZmYgPSAyOwogICAgICpfX25ldyA9ICpfX2NzOwogICAgICooX19uZXcgKyAxKSA9ICooX19jcyAr
IDEpOwogICB9CiAgICAgIF9DaGFyVCogX19wOwogICAgICBfX3AgPSBfX2FkZF9ncm91cGluZyhf
X25ldyArIF9fb2ZmLCBfX3NlcCwKICAgICAgX19ncm91cGluZy5jX3N0cigpLAogICAgICBfX2dy
b3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwKICAgICAgX19jcyArIF9fb2ZmLCBf
X2NzICsgX19sZW4pOwogICAgICBfX2xlbiA9IF9fcCAtIF9fbmV3OwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlwZW5h
bWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVy
Pjo6CiAgICAgIF9NX2NvbnZlcnRfaW50KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9D
aGFyVCBfX2ZpbGwsCiAgICAgICBfVmFsdWVUIF9fdikgY29uc3QKICAgICAgewogdHlwZWRlZiBf
X2xvY2FsZV9jYWNoZTxfQ2hhclQ+IF9fY2FjaGVfdHlwZTsKIF9fY2FjaGVfdHlwZSYgX19sYyA9
IHN0YXRpY19jYXN0PF9fY2FjaGVfdHlwZSY+KF9faW8uX01fY2FjaGUoKSk7CiBfQ2hhclQqIF9f
bGl0ID0gX19sYy5fTV9saXRlcmFsczsKCgogaW50IF9faWxlbiA9IDQgKiBzaXplb2YoX1ZhbHVl
VCk7CiBfQ2hhclQqIF9fY3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2Nh
KHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICogX19pbGVuKSk7CgoKIGludCBfX2xlbjsKIF9f
bGVuID0gX19pbnRfdG9fY2hhcigmX19jc1swXSwgX19pbGVuLCBfX3YsIF9fbGl0LCBfX2lvLmZs
YWdzKCkpOwogX19jcyA9IF9fY3MgKyBfX2lsZW4gLSBfX2xlbjsKCgogX0NoYXJUKiBfX2NzMjsK
IGlmIChfX2xjLl9NX3VzZV9ncm91cGluZykKICAgewoKCiAgICAgX19jczIgPSBzdGF0aWNfY2Fz
dDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICogX19s
ZW4gKiAyKSk7CiAgICAgX01fZ3JvdXBfaW50KF9fbGMuX01fZ3JvdXBpbmcsIF9fbGMuX01fdGhv
dXNhbmRzX3NlcCwgX19pbywKICAgIF9fY3MyLCBfX2NzLCBfX2xlbik7CiAgICAgX19jcyA9IF9f
Y3MyOwogICB9CgoKIF9DaGFyVCogX19jczM7CiBzdHJlYW1zaXplIF9fdyA9IF9faW8ud2lkdGgo
KTsKIGlmIChfX3cgPiBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2xlbikpCiAgIHsKICAgICBf
X2NzMyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFy
VCkKICAgICAgICAgKiBfX3cpKTsKICAgICBfTV9wYWQoX19maWxsLCBfX3csIF9faW8sIF9fY3Mz
LCBfX2NzLCBfX2xlbik7CiAgICAgX19jcyA9IF9fY3MzOwogICB9CiBfX2lvLndpZHRoKDApOwoK
CgogcmV0dXJuIF9fd3JpdGUoX19zLCBfX2NzLCBfX2xlbik7CiAgICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIHZvaWQKICAgIG51bV9wdXQ8
X0NoYXJULCBfT3V0SXRlcj46OgogICAgX01fZ3JvdXBfZmxvYXQoY29uc3Qgc3RyaW5nJiBfX2dy
b3VwaW5nLCBfQ2hhclQgX19zZXAsIGNvbnN0IF9DaGFyVCogX19wLAogICAgIF9DaGFyVCogX19u
ZXcsIF9DaGFyVCogX19jcywgaW50JiBfX2xlbikgY29uc3QKICAgIHsKCgoKICAgICAgX0NoYXJU
KiBfX3AyOwogICAgICBpbnQgX19kZWNsZW4gPSBfX3AgPyBfX3AgLSBfX2NzIDogX19sZW47CiAg
ICAgIF9fcDIgPSBfX2FkZF9ncm91cGluZyhfX25ldywgX19zZXAsCiAgICAgICBfX2dyb3VwaW5n
LmNfc3RyKCksCiAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwK
ICAgICAgIF9fY3MsIF9fY3MgKyBfX2RlY2xlbik7CgoKICAgICAgaW50IF9fbmV3bGVuID0gX19w
MiAtIF9fbmV3OwogICAgICBpZiAoX19wKQogewogICBjaGFyX3RyYWl0czxfQ2hhclQ+Ojpjb3B5
KF9fcDIsIF9fcCwgX19sZW4gLSBfX2RlY2xlbik7CiAgIF9fbmV3bGVuICs9IF9fbGVuIC0gX19k
ZWNsZW47CiB9CiAgICAgIF9fbGVuID0gX19uZXdsZW47CgogICAgfQojIDg1MiAiL2djYy9kamUv
YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu
My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJ
dGVyPjo6CiAgICAgIF9NX2NvbnZlcnRfZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19p
bywgX0NoYXJUIF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAgX1ZhbHVlVCBfX3YpIGNvbnN0
CiAgICAgIHsKCgoKCgoKCiBjb25zdCBpbnQgX19tYXhfZGlnaXRzID0gbnVtZXJpY19saW1pdHM8
X1ZhbHVlVD46OmRpZ2l0czEwICsgMjsKCgogc3RyZWFtc2l6ZSBfX3ByZWMgPSBfX2lvLnByZWNp
c2lvbigpOwogaWYgKF9fcHJlYyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbWF4X2RpZ2l0
cykpCiAgIF9fcHJlYyA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbWF4X2RpZ2l0cyk7CiBl
bHNlIGlmIChfX3ByZWMgPCBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPigwKSkKICAgX19wcmVjID0g
c3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oNik7CgogdHlwZWRlZiBfX2xvY2FsZV9jYWNoZTxfQ2hh
clQ+IF9fY2FjaGVfdHlwZTsKIF9fY2FjaGVfdHlwZSYgX19sYyA9IHN0YXRpY19jYXN0PF9fY2Fj
aGVfdHlwZSY+KF9faW8uX01fY2FjaGUoKSk7CgoKIGludCBfX2xlbjsKCiBjaGFyIF9fZmJ1Zlsx
Nl07CiMgOTAzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVf
ZmFjZXRzLnRjYyIgMwogY29uc3QgYm9vbCBfX2ZpeGVkID0gX19pby5mbGFncygpICYgaW9zX2Jh
c2U6OmZpeGVkOwogY29uc3QgaW50IF9fbWF4X2V4cCA9IG51bWVyaWNfbGltaXRzPF9WYWx1ZVQ+
OjptYXhfZXhwb25lbnQxMDsKCgoKCgoKIGNvbnN0IGludCBfX2NzX3NpemUgPSBfX2ZpeGVkID8g
X19tYXhfZXhwICsgX19tYXhfZGlnaXRzICsgNAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBfX21heF9kaWdpdHMgKiAzOwogY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihf
X2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwoKIF9TX2Zvcm1hdF9mbG9hdChfX2lvLCBfX2Zi
dWYsIF9fbW9kKTsKIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCAwLCBfX2ZidWYsIF9f
diwgX1NfY19sb2NhbGUsIF9fcHJlYyk7CgoKCgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBf
X2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2Zh
Y2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNf
Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAq
IF9fbGVuKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsK
CgogICAgICBjb25zdCBfQ2hhclQgX19jZGVjID0gX19jdHlwZS53aWRlbignLicpOwogICAgICBj
b25zdCBfQ2hhclQgX19kZWMgPSBfX2xjLl9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNvbnN0IF9D
aGFyVCogX19wOwogICAgICBpZiAoX19wID0gY2hhcl90cmFpdHM8X0NoYXJUPjo6ZmluZChfX3dz
LCBfX2xlbiwgX19jZGVjKSkKIF9fd3NbX19wIC0gX193c10gPSBfX2RlYzsKCgogICAgICBfQ2hh
clQqIF9fd3MyOwogICAgICBpZiAoX19sYy5fTV91c2VfZ3JvdXBpbmcpCiB7CgoKICAgICBfX3dz
MiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkK
ICAgICAgICAgKiBfX2xlbiAqIDIpKTsKICAgICBfTV9ncm91cF9mbG9hdChfX2xjLl9NX2dyb3Vw
aW5nLCBfX2xjLl9NX3Rob3VzYW5kc19zZXAsIF9fcCwKICAgICAgX193czIsIF9fd3MsIF9fbGVu
KTsKICAgICBfX3dzID0gX193czI7CiB9CgoKICAgICAgX0NoYXJUKiBfX3dzMzsKICAgICAgc3Ry
ZWFtc2l6ZSBfX3cgPSBfX2lvLndpZHRoKCk7CiAgICAgIGlmIChfX3cgPiBzdGF0aWNfY2FzdDxz
dHJlYW1zaXplPihfX2xlbikpCiB7CiAgIF9fd3MzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19i
dWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwogICBfTV9wYWQoX19maWxsLCBf
X3csIF9faW8sIF9fd3MzLCBfX3dzLCBfX2xlbik7CiAgIF9fd3MgPSBfX3dzMzsKIH0KICAgICAg
X19pby53aWR0aCgwKTsKCgoKICAgICAgcmV0dXJuIF9fd3JpdGUoX19zLCBfX3dzLCBfX2xlbik7
CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4K
ICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChp
dGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3Yp
IGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFn
cygpOwogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAg
ICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAgICAgIF9fcyA9
IF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCBfX3V2KTsKICAgICAgICB9CiAgICAg
IGVsc2UKICAgICAgICB7CiAgIHR5cGVkZWYgX19sb2NhbGVfY2FjaGU8X0NoYXJUPiBfX2NhY2hl
X3R5cGU7CiAgIF9fY2FjaGVfdHlwZSYgX19sYyA9IHN0YXRpY19jYXN0PF9fY2FjaGVfdHlwZSY+
KF9faW8uX01fY2FjaGUoKSk7CiAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJp
bmdfdHlwZTsKICAgX19zdHJpbmdfdHlwZSBfX25hbWU7CiAgICAgICAgICBpZiAoX192KQogICAg
IF9fbmFtZSA9IF9fbGMuX01fdHJ1ZW5hbWU7CiAgICAgICAgICBlbHNlCiAgICAgX19uYW1lID0g
X19sYy5fTV9mYWxzZW5hbWU7CgogICBjb25zdCBfQ2hhclQqIF9fY3MgPSBfX25hbWUuY19zdHIo
KTsKICAgaW50IF9fbGVuID0gX19uYW1lLnNpemUoKTsKICAgX0NoYXJUKiBfX2NzMzsKICAgc3Ry
ZWFtc2l6ZSBfX3cgPSBfX2lvLndpZHRoKCk7CiAgIGlmIChfX3cgPiBzdGF0aWNfY2FzdDxzdHJl
YW1zaXplPihfX2xlbikpCiAgICAgewogICAgICAgX19jczMgPSBzdGF0aWNfY2FzdDxfQ2hhclQq
PihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgKiBfX3cpKTsKICAg
ICAgIF9NX3BhZChfX2ZpbGwsIF9fdywgX19pbywgX19jczMsIF9fY3MsIF9fbGVuKTsKICAgICAg
IF9fY3MgPSBfX2NzMzsKICAgICB9CiAgIF9faW8ud2lkdGgoMCk7CiAgIF9fcyA9IF9fd3JpdGUo
X19zLCBfX2NzLCBfX2xlbik7CiB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVt
X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jh
c2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4g
X01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0
PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYg
X19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29u
c3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCBfX3YpOyB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091
dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlw
ZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNv
bnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9fYiwgX19maWxsLCBfX3YpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0
SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBl
IF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgdW5zaWdu
ZWQgbG9uZyBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywg
X19pbywgX19maWxsLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46
OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19m
aWxsLCBkb3VibGUgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9mbG9hdChfX3Ms
IF9faW8sIF9fZmlsbCwgY2hhcigpLCBfX3YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9P
dXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJf
dHlwZSBfX2ZpbGwsCiAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9j
b252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1f
cHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz
ZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNv
bnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygp
OwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwg
aW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgfCBpb3NfYmFzZTo6dXBwZXJjYXNlIHwgaW9zX2Jh
c2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZsYWdzICYgX19mbXQgfCAoaW9zX2Jh
c2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwogICAgICB0cnkKIHsKICAgX19zID0gX01f
Y29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsCiAgICAgICAgICByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGxvbmc+KF9fdikpOwogICBfX2lvLmZsYWdzKF9fZmxhZ3MpOwogfQogICAgICBj
YXRjaCAoLi4uKQogewogICBfX2lvLmZsYWdzKF9fZmxhZ3MpOwogICB0aHJvdzsKIH0KICAgICAg
cmV0dXJuIF9fczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg
IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlv
c19iYXNlJiBfX2lvLAogICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYg
X191bml0cykgY29uc3QKICAgIHsKICAgICAgc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fYmVn
ID0gdGhpcy0+ZG9fZ2V0KF9fYmVnLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX19zdHIp
OwoKICAgICAgY29uc3QgaW50IF9fbiA9IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6ZGln
aXRzMTA7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2Fs
bG9jYShfX24pKTsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAg
ICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+
ID4oX19sb2MpOwogICAgICBjb25zdCBfQ2hhclQqIF9fd2NzID0gX19zdHIuY19zdHIoKTsKICAg
ICAgX19jdHlwZS5uYXJyb3coX193Y3MsIF9fd2NzICsgX19zdHIuc2l6ZSgpICsgMSwgY2hhcigp
LCBfX2NzKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX19jcywgX191bml0cywgX19lcnIsIF9TX2Nf
bG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0NoYXJU
LCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs
IGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgc3RyaW5nX3R5cGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVmIG1vbmV5
cHVuY3Q8X0NoYXJULCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5j
dDxfQ2hhclQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6
OnBhcnQgcGFydDsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBl
IHNpemVfdHlwZTsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAg
ICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90cnVlPihf
X2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9u
ZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVz
ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKICAgICAgY29uc3QgbW9uZXlfYmFzZTo6
cGF0dGVybiBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0KCkKICAgICAgICAgIDogX19t
cGYubmVnX2Zvcm1hdCgpOwoKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19wb3Nfc2lnbiA9X19p
bnRsID8gX19tcHQucG9zaXRpdmVfc2lnbigpCiAgICAgICAgOiBfX21wZi5wb3NpdGl2ZV9zaWdu
KCk7CiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fbmVnX3NpZ24gPV9faW50bCA/IF9fbXB0Lm5l
Z2F0aXZlX3NpZ24oKQogICAgICAgIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwogICAgICBjb25z
dCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgpCiAgICAgICAg
ICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAgICAgIGNvbnN0IGNoYXJfdHlw
ZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQogICAgICAgICAgICAgOiBf
X21wZi50aG91c2FuZHNfc2VwKCk7CgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9f
aW50bCA/IF9fbXB0Lmdyb3VwaW5nKCkgOiBfX21wZi5ncm91cGluZygpOwoKCiAgICAgIHN0cmlu
Z190eXBlIF9fc2lnbjsKCiAgICAgIHN0cmluZyBfX2dyb3VwaW5nX3RtcDsKCiAgICAgIGludCBf
X3NlcF9wb3MgPSAwOwoKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CgogICAgICBib29s
IF9fdGVzdGRlY2ZvdW5kID0gZmFsc2U7CgoKICAgICAgc3RyaW5nX3R5cGUgX190ZW1wX3VuaXRz
OwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgY2hhcl90eXBlIF9fZW9mID0g
c3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihjaGFyX3RyYWl0czxjaGFyX3R5cGU+Ojplb2YoKSk7CiAg
ICAgIGZvciAoaW50IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IDQgJiYgX190ZXN0
dmFsaWQ7ICsrX19pKQogewogICBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0PihfX3Au
ZmllbGRbX19pXSk7CiAgIHN3aXRjaCAoX193aGljaCkKICB7CiAgY2FzZSBtb25leV9iYXNlOjpz
eW1ib2w6CiAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAg
fHwgX19pIDwgMiB8fCBfX3NpZ24uc2l6ZSgpID4gMQogICAgICAgIHx8ICgoc3RhdGljX2Nhc3Q8
cGFydD4oX19wLmZpZWxkWzNdKSAhPSBtb25leV9iYXNlOjpub25lKQogICAgICYmIF9faSA9PSAy
KSkKICAgICAgewoKCgoKCiAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1ib2wgPSBfX2lu
dGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgIDogX19tcGYuY3Vycl9zeW1ib2wo
KTsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3N5bWJvbC5zaXplKCk7CiAgICAgICAgc2l6
ZV90eXBlIF9faiA9IDA7CiAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgJiYg
X19qIDwgX19sZW4gJiYgX19zeW1ib2xbX19qXSA9PSBfX2MpCiAgIHsKICAgICBfX2MgPSAqKCsr
X19iZWcpOwogICAgICsrX19qOwogICB9CgoKICAgICAgICBpZiAoX19qICE9IF9fbGVuICYmIChf
X2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpKQogICBfX3Rlc3R2YWxpZCA9IGZhbHNl
OwogICAgICB9CiAgICBicmVhazsKICBjYXNlIG1vbmV5X2Jhc2U6OnNpZ246CgogICAgaWYgKF9f
cG9zX3NpZ24uc2l6ZSgpICYmIF9fbmVnX3NpZ24uc2l6ZSgpKQogICAgewoKICAgICAgaWYgKF9f
YyA9PSBfX3Bvc19zaWduWzBdKQogICAgICAgIHsKICAgX19zaWduID0gX19wb3Nfc2lnbjsKICAg
X19jID0gKigrK19fYmVnKTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYyA9PSBfX25lZ19z
aWduWzBdKQogICAgICAgIHsKICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgX19jID0gKigrK19f
YmVnKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwog
ICAgfQogICAgZWxzZSBpZiAoX19wb3Nfc2lnbi5zaXplKCkgJiYgX19jID09IF9fcG9zX3NpZ25b
MF0pCiAgICAgIHsKICAgICAgICBfX3NpZ24gPSBfX3Bvc19zaWduOwogICAgICAgIF9fYyA9ICoo
KytfX2JlZyk7CiAgICAgIH0KICAgIGVsc2UgaWYgKF9fbmVnX3NpZ24uc2l6ZSgpICYmIF9fYyA9
PSBfX25lZ19zaWduWzBdKQogICAgICB7CiAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAg
ICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICB9CiAgICBicmVhazsKICBjYXNlIG1vbmV5X2Jh
c2U6OnZhbHVlOgoKCiAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICYmIChfX2N0eXBlLmlz
KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpCiAgICAgICAgfHwgKF9fYyA9PSBfX2QgJiYgIV9fdGVz
dGRlY2ZvdW5kKQogICAgICAgIHx8IF9fYyA9PSBfX3NlcCkpCiAgICAgIHsKICAgICAgICBpZiAo
X19jID09IF9fZCkKICAgewogICAgIF9fZ3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+
KF9fc2VwX3Bvcyk7CiAgICAgX19zZXBfcG9zID0gMDsKICAgICBfX3Rlc3RkZWNmb3VuZCA9IHRy
dWU7CiAgIH0KICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19zZXApCiAgIHsKICAgICBpZiAoX19n
cm91cGluZy5zaXplKCkpCiAgICAgICB7CgogICAgICAgICBfX2dyb3VwaW5nX3RtcCArPSBzdGF0
aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAg
fQogICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICB9CiAgIH0KICAgICAgICBlbHNlCiAgIHsKICAgICBfX3RlbXBfdW5p
dHMgKz0gX19jOwogICAgICsrX19zZXBfcG9zOwogICB9CiAgICAgICAgX19jID0gKigrK19fYmVn
KTsKICAgICAgfQogICAgYnJlYWs7CiAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKICBjYXNlIG1v
bmV5X2Jhc2U6Om5vbmU6CgogICAgaWYgKF9faSAhPSAzKQogICAgICB3aGlsZSAoX19iZWcgIT0g
X19lbmQKICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAg
ICBfX2MgPSAqKCsrX19iZWcpOwogICAgYnJlYWs7CiAgfQogfQoKCiAgICAgIGlmIChfX3NpZ24u
c2l6ZSgpID4gMSkKIHsKICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaWduLnNpemUoKTsKICAgc2l6
ZV90eXBlIF9faSA9IDE7CiAgIGZvciAoOyBfX2MgIT0gX19lb2YgJiYgX19pIDwgX19sZW47ICsr
X19pKQogICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2MgIT0gX19zaWduW19faV0pCiAg
ICAgICBfX2MgPSAqKCsrX19iZWcpOwoKICAgaWYgKF9faSAhPSBfX2xlbikKICAgICBfX3Rlc3R2
YWxpZCA9IGZhbHNlOwogfQoKCiAgICAgIHdoaWxlIChfX3RlbXBfdW5pdHNbMF0gPT0gX19jdHlw
ZS53aWRlbignMCcpKQogX190ZW1wX3VuaXRzLmVyYXNlKF9fdGVtcF91bml0cy5iZWdpbigpKTsK
CiAgICAgIGlmIChfX3NpZ24uc2l6ZSgpICYmIF9fc2lnbiA9PSBfX25lZ19zaWduKQogX190ZW1w
X3VuaXRzLmluc2VydChfX3RlbXBfdW5pdHMuYmVnaW4oKSwgX19jdHlwZS53aWRlbignLScpKTsK
CgogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkgJiYgX19ncm91cGluZ190bXAuc2l6ZSgpKQog
ewogICBpZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZ3JvdXBpbmdfdG1wKSkK
ICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogfQoKCiAgICAgIGlmIChfX2MgPT0gX19lb2YpCiBf
X2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwoKCiAgICAgIGlmICghX190ZXN0dmFsaWQgfHwgIV9f
dGVtcF91bml0cy5zaXplKCkpCiBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgZWxz
ZQoKIF9fdGVtcF91bml0cy5zd2FwKF9fdW5pdHMpOwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091
dEl0ZXIKICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90
eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAog
ICAgbG9uZyBkb3VibGUgX191bml0cykgY29uc3QKICAgIHsKICAgICAgY29uc3QgbG9jYWxlIF9f
bG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwojIDEzMDkgIi9nY2MvZGplL2J1aWxk
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9s
aWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgICAgIGNvbnN0
IGludCBfX2NzX3NpemUgPSBudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT46Om1heF9leHBvbmVu
dDEwICsgNTsKICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5f
YWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICBpbnQgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9f
Y3MsIDAsICIlLjAxTGYiLCBfX3VuaXRzLCBfU19jX2xvY2FsZSk7CgogICAgICBfQ2hhclQqIF9f
d3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQp
CiAgICAgICAgICAqIF9fY3Nfc2l6ZSkpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3Mg
KyBfX2xlbiwgX193cyk7CiAgICAgIHN0cmluZ190eXBlIF9fZGlnaXRzKF9fd3MpOwogICAgICBy
ZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAg
IF9PdXRJdGVyCiAgICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0
ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmls
bCwKICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlw
ZWRlZiBtb25leV9iYXNlOjpwYXJ0IHBhcnQ7CgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBf
X2lvLmdldGxvYygpOwogICAgICBjb25zdCBzaXplX3R5cGUgX193aWR0aCA9IHN0YXRpY19jYXN0
PHNpemVfdHlwZT4oX19pby53aWR0aCgpKTsKCgogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0No
YXJULCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQs
IGZhbHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0ID0g
dXNlX2ZhY2V0PF9fbW9uZXlfdHJ1ZT4oX19sb2MpOwogICAgICBjb25zdCBfX21vbmV5X2ZhbHNl
JiBfX21wZiA9IHVzZV9mYWNldDxfX21vbmV5X2ZhbHNlPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0
eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsK
CgoKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2JlZyA9IF9fZGlnaXRzLmRhdGEoKTsKICAgICAg
Y29uc3QgY2hhcl90eXBlKiBfX2VuZCA9IF9fYmVnICsgX19kaWdpdHMuc2l6ZSgpOwogICAgICBt
b25leV9iYXNlOjpwYXR0ZXJuIF9fcDsKICAgICAgc3RyaW5nX3R5cGUgX19zaWduOwogICAgICBp
ZiAoKl9fYmVnICE9IF9fY3R5cGUud2lkZW4oJy0nKSkKIHsKICAgX19wID0gX19pbnRsID8gX19t
cHQucG9zX2Zvcm1hdCgpIDogX19tcGYucG9zX2Zvcm1hdCgpOwogICBfX3NpZ24gPV9faW50bCA/
IF9fbXB0LnBvc2l0aXZlX3NpZ24oKSA6IF9fbXBmLnBvc2l0aXZlX3NpZ24oKTsKIH0KICAgICAg
ZWxzZQogewogICBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0KCkgOiBfX21wZi5uZWdf
Zm9ybWF0KCk7CiAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpIDogX19t
cGYubmVnYXRpdmVfc2lnbigpOwogICArK19fYmVnOwogfQoKCiAgICAgIF9fZW5kID0gX19jdHlw
ZS5zY2FuX25vdChjdHlwZV9iYXNlOjpkaWdpdCwgX19iZWcsIF9fZW5kKTsKICAgICAgaWYgKF9f
YmVnICE9IF9fZW5kKQogewoKCgogICBzdHJpbmdfdHlwZSBfX3JlczsKICAgc3RyaW5nX3R5cGUg
X192YWx1ZTsKICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1ib2wgPSBfX2ludGwgPyBfX21wdC5j
dXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgIDogX19tcGYuY3Vycl9zeW1ib2woKTsKCgogICBj
b25zdCBpbnQgX19mcmFjID0gX19pbnRsID8gX19tcHQuZnJhY19kaWdpdHMoKQogICAgICAgICAg
ICA6IF9fbXBmLmZyYWNfZGlnaXRzKCk7CiAgIGlmIChfX2ZyYWMgPiAwKQogICAgIHsKICAgICAg
IGNvbnN0IGNoYXJfdHlwZSBfX2QgPSBfX2ludGwgPyBfX21wdC5kZWNpbWFsX3BvaW50KCkKICAg
ICAgICA6IF9fbXBmLmRlY2ltYWxfcG9pbnQoKTsKICAgICAgIGlmIChfX2VuZCAtIF9fYmVnID49
IF9fZnJhYykKICB7CiAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19lbmQgLSBfX2ZyYWMsIF9f
ZW5kKTsKICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwgX19kKTsKICAgIF9fZW5k
IC09IF9fZnJhYzsKICB9CiAgICAgICBlbHNlCiAgewoKICAgIF9fdmFsdWUgPSBzdHJpbmdfdHlw
ZShfX2JlZywgX19lbmQpOwogICAgaW50IF9fcGFkZGVjID0gX19mcmFjIC0gKF9fZW5kIC0gX19i
ZWcpOwogICAgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAnKTsKICAgIF9fdmFs
dWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwgX19wYWRkZWMsIF9femVybyk7CiAgICBfX3ZhbHVl
Lmluc2VydChfX3ZhbHVlLmJlZ2luKCksIF9fZCk7CiAgICBfX2JlZyA9IF9fZW5kOwogIH0KICAg
ICB9CgoKCiAgIGlmIChfX2JlZyAhPSBfX2VuZCkKICAgICB7CiAgICAgICBjb25zdCBzdHJpbmcg
X19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5nKCkKICAgICAgICAgICAgOiBfX21w
Zi5ncm91cGluZygpOwogICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogIHsKICAgIGNvbnN0
IGNoYXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQogICAgICAg
ICAgICAgICAgICA6IF9fbXBmLnRob3VzYW5kc19zZXAoKTsKICAgIGNvbnN0IGNoYXIqIF9fZ2Jl
ZyA9IF9fZ3JvdXBpbmcuY19zdHIoKTsKICAgIGNvbnN0IGNoYXIqIF9fZ2VuZCA9IF9fZ2JlZyAr
IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgY29uc3QgaW50IF9fbiA9IChfX2VuZCAtIF9fYmVnKSAq
IDI7CiAgICBfQ2hhclQqIF9fd3MyID0KICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X0No
YXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbikpOwogICAgX0NoYXJU
KiBfX3dzX2VuZCA9IF9fYWRkX2dyb3VwaW5nKF9fd3MyLCBfX3NlcCwgX19nYmVnLAogICAgICAg
ICAgX19nZW5kLCBfX2JlZywgX19lbmQpOwogICAgX192YWx1ZS5pbnNlcnQoMCwgX193czIsIF9f
d3NfZW5kIC0gX193czIpOwogIH0KICAgICAgIGVsc2UKICBfX3ZhbHVlLmluc2VydCgwLCBzdHJp
bmdfdHlwZShfX2JlZywgX19lbmQpKTsKICAgICB9CgoKICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9f
ZiA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKICAgc2l6ZV90eXBlIF9f
bGVuID0gX192YWx1ZS5zaXplKCkgKyBfX3NpZ24uc2l6ZSgpOwogICBfX2xlbiArPSAoX19pby5m
bGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSA/IF9fc3ltYm9sLnNpemUoKSA6IDA7CiAgIGJv
b2wgX190ZXN0aXBhZCA9IF9fZiA9PSBpb3NfYmFzZTo6aW50ZXJuYWwgJiYgX19sZW4gPCBfX3dp
ZHRoOwoKCiAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDQ7ICsrX19pKQogICAgIHsKICAgICAg
IHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtfX2ldKTsKICAgICAg
IHN3aXRjaCAoX193aGljaCkKICB7CiAgY2FzZSBtb25leV9iYXNlOjpzeW1ib2w6CiAgICBpZiAo
X19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICBfX3JlcyArPSBfX3N5bWJv
bDsKICAgIGJyZWFrOwogIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCgoKICAgIGlmIChfX3NpZ24u
c2l6ZSgpKQogICAgICBfX3JlcyArPSBfX3NpZ25bMF07CiAgICBicmVhazsKICBjYXNlIG1vbmV5
X2Jhc2U6OnZhbHVlOgogICAgX19yZXMgKz0gX192YWx1ZTsKICAgIGJyZWFrOwogIGNhc2UgbW9u
ZXlfYmFzZTo6c3BhY2U6CgoKCiAgICBpZiAoX190ZXN0aXBhZCkKICAgICAgX19yZXMgKz0gc3Ry
aW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgZWxzZQogICAgICBfX3JlcyAr
PSBfX2N0eXBlLndpZGVuKF9fZmlsbCk7CiAgICBicmVhazsKICBjYXNlIG1vbmV5X2Jhc2U6Om5v
bmU6CiAgICBpZiAoX190ZXN0aXBhZCkKICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX193aWR0
aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgYnJlYWs7CiAgfQogICAgIH0KCgogICBpZiAoX19zaWdu
LnNpemUoKSA+IDEpCiAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX19zaWduLmJlZ2luKCkgKyAx
LCBfX3NpZ24uZW5kKCkpOwoKCiAgIF9fbGVuID0gX19yZXMuc2l6ZSgpOwogICBpZiAoX193aWR0
aCA+IF9fbGVuKQogICAgIHsKICAgICAgIGlmIChfX2YgPT0gaW9zX2Jhc2U6OmxlZnQpCgogIF9f
cmVzLmFwcGVuZChfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7CiAgICAgICBlbHNlCgogIF9fcmVz
Lmluc2VydCgwLCBzdHJpbmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCkpOwogICAgICAg
X19sZW4gPSBfX3dpZHRoOwogICAgIH0KCgogICBfX3MgPSBfX3dyaXRlKF9fcywgX19yZXMuY19z
dHIoKSwgX19sZW4pOwogfQogICAgICBfX2lvLndpZHRoKDApOwogICAgICByZXR1cm4gX19zOwog
ICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog
ICAgdGltZV9iYXNlOjpkYXRlb3JkZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmRv
X2RhdGVfb3JkZXIoKSBjb25zdAogICAgeyByZXR1cm4gdGltZV9iYXNlOjpub19vcmRlcjsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAg
ICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChp
dGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgIGNvbnN0IF9DaGFyVCogX19m
b3JtYXQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAg
ICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVu
Y3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBzaXplX3QgX19sZW4gPSBj
aGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19mb3JtYXQpOwoKICAgICAgZm9yIChzaXplX3Qg
X19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4gJiYgIV9fZXJyOyArK19faSkK
IHsKICAgY2hhciBfX2MgPSBfX2Zvcm1hdFtfX2ldOwogICBpZiAoX19jID09ICclJykKICAgICB7
CgogICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgY2hhciBfX21vZCA9IDA7CiAg
ICAgICBpbnQgX19tZW0gPSAwOwogICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykK
ICB7CiAgICBfX21vZCA9IF9fYzsKICAgIF9fYyA9IF9fZm9ybWF0WysrX19pXTsKICB9CiAgICAg
ICBzd2l0Y2ggKF9fYykKICB7CiAgICBjb25zdCBjaGFyKiBfX2NzOwogICAgX0NoYXJUIF9fd2Nz
WzEwXTsKICBjYXNlICdhJzoKCiAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5czFbN107CiAgICBf
X3RwLl9NX2RheXNfYWJicmV2aWF0ZWQoX19kYXlzMSk7CiAgICBfTV9leHRyYWN0X25hbWUoX19i
ZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2RheXMxLCA3LAogICAgICBfX2Vycik7CiAgICBi
cmVhazsKICBjYXNlICdBJzoKCiAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5czJbN107CiAgICBf
X3RwLl9NX2RheXMoX19kYXlzMik7CiAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBf
X3RtLT50bV93ZGF5LCBfX2RheXMyLCA3LAogICAgICBfX2Vycik7CiAgICBicmVhazsKICBjYXNl
ICdoJzoKICBjYXNlICdiJzoKCiAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzMVsxMl07CiAg
ICBfX3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChfX21vbnRoczEpOwogICAgX01fZXh0cmFjdF9u
YW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRoczEsIDEyLAogICAgICBfX2Vy
cik7CiAgICBicmVhazsKICBjYXNlICdCJzoKCiAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhz
MlsxMl07CiAgICBfX3RwLl9NX21vbnRocyhfX21vbnRoczIpOwogICAgX01fZXh0cmFjdF9uYW1l
KF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRoczIsIDEyLAogICAgICBfX2Vycik7
CiAgICBicmVhazsKICBjYXNlICdjJzoKCiAgICBjb25zdCBjaGFyX3R5cGUqIF9fZHRbMl07CiAg
ICBfX3RwLl9NX2RhdGVfdGltZV9mb3JtYXRzKF9fZHQpOwogICAgX01fZXh0cmFjdF92aWFfZm9y
bWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgX19kdFswXSk7CiAgICBi
cmVhazsKICBjYXNlICdkJzoKCiAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0t
PnRtX21kYXksIDEsIDMxLCAyLAogICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgIGJyZWFrOwogIGNh
c2UgJ0QnOgoKICAgIF9fY3MgPSAiJW0vJWQvJXkiOwogICAgX19jdHlwZS53aWRlbihfX2NzLCBf
X2NzICsgOSwgX193Y3MpOwogICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwg
X19pbywgX19lcnIsIF9fdG0sCiAgICAgX193Y3MpOwogICAgYnJlYWs7CiAgY2FzZSAnSCc6Cgog
ICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9ob3VyLCAwLCAyMywgMiwK
ICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICBicmVhazsKICBjYXNlICdJJzoKCiAgICBfTV9leHRy
YWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDEsIDEyLCAyLAogICAgIF9fY3R5
cGUsIF9fZXJyKTsKICAgIGJyZWFrOwogIGNhc2UgJ20nOgoKICAgIF9NX2V4dHJhY3RfbnVtKF9f
YmVnLCBfX2VuZCwgX19tZW0sIDEsIDEyLCAyLCBfX2N0eXBlLAogICAgIF9fZXJyKTsKICAgIGlm
ICghX19lcnIpCiAgICAgIF9fdG0tPnRtX21vbiA9IF9fbWVtIC0gMTsKICAgIGJyZWFrOwogIGNh
c2UgJ00nOgoKICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWluLCAw
LCA1OSwgMiwKICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICBicmVhazsKICBjYXNlICduJzoKICAg
IGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09ICdcbicpCiAgICAgICsrX19iZWc7CiAg
ICBlbHNlCiAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgYnJlYWs7CiAgY2Fz
ZSAnUic6CgogICAgX19jcyA9ICIlSDolTSI7CiAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3Mg
KyA2LCBfX3djcyk7CiAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lv
LCBfX2VyciwgX190bSwKICAgICBfX3djcyk7CiAgICBicmVhazsKICBjYXNlICdTJzoKCiAgICBf
TV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX3NlYywgMCwgNTksIDIsCiAgICAg
X19jdHlwZSwgX19lcnIpOwogICAgYnJlYWs7CiAgY2FzZSAndCc6CiAgICBpZiAoX19jdHlwZS5u
YXJyb3coKl9fYmVnLCAwKSA9PSAnXHQnKQogICAgICArK19fYmVnOwogICAgZWxzZQogIF9fZXJy
IHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgYnJlYWs7CiAgY2FzZSAnVCc6CgogICAgX19jcyA9
ICIlSDolTTolUyI7CiAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA5LCBfX3djcyk7CiAg
ICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwK
ICAgICBfX3djcyk7CiAgICBicmVhazsKICBjYXNlICd4JzoKCiAgICBjb25zdCBjaGFyX3R5cGUq
IF9fZGF0ZXNbMl07CiAgICBfX3RwLl9NX2RhdGVfZm9ybWF0cyhfX2RhdGVzKTsKICAgIF9NX2V4
dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgIF9f
ZGF0ZXNbMF0pOwogICAgYnJlYWs7CiAgY2FzZSAnWCc6CgogICAgY29uc3QgY2hhcl90eXBlKiBf
X3RpbWVzWzJdOwogICAgX190cC5fTV90aW1lX2Zvcm1hdHMoX190aW1lcyk7CiAgICBfTV9leHRy
YWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICBfX3Rp
bWVzWzBdKTsKICAgIGJyZWFrOwogIGNhc2UgJ3knOgoKICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVn
LCBfX2VuZCwgX190bS0+dG1feWVhciwgMCwgOTksIDIsCiAgICAgX19jdHlwZSwgX19lcnIpOwog
ICAgYnJlYWs7CiAgY2FzZSAnWSc6CgogICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBf
X21lbSwgMCwKICAgICBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSwgNCwKICAgICBfX2N0eXBl
LCBfX2Vycik7CiAgICBpZiAoIV9fZXJyKQogICAgICBfX3RtLT50bV95ZWFyID0gX19tZW0gLSAx
OTAwOwogICAgYnJlYWs7CiAgY2FzZSAnWic6CgogICAgaWYgKF9fY3R5cGUuaXMoY3R5cGVfYmFz
ZTo6dXBwZXIsICpfX2JlZykpCiAgICAgIHsKICAgICAgICBpbnQgX190bXA7CiAgICAgICAgX01f
ZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXAsCiAgICAgICAgICBfX3RpbWVwdW5jdDxf
Q2hhclQ+OjpfU190aW1lem9uZXMsCiAgICAgICAgICAxNCwgX19lcnIpOwoKCiAgICAgICAgY2hh
cl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgICBpZiAoIV9fZXJyICYmIF9fdG1wID09IDAKICAg
ICAmJiAoX19jID09IF9fY3R5cGUud2lkZW4oJy0nKQogICAgICAgICB8fCBfX2MgPT0gX19jdHlw
ZS53aWRlbignKycpKSkKICAgewogICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190
bXAsIDAsIDIzLCAyLAogICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgIF9NX2V4dHJhY3RfbnVt
KF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDU5LCAyLAogICAgICAgX19jdHlwZSwgX19lcnIpOwog
ICB9CiAgICAgfQogICAgICAgIGVsc2UKICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAg
ICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CgogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm
YWlsYml0OwogICAgICB9CiAgfQogICAgICAgZWxzZQogIHsKCiAgICBpZiAoX19jID09IF9fY3R5
cGUubmFycm93KCpfX2JlZywgMCkpCiAgICAgICsrX19iZWc7CiAgICBlbHNlCiAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjpmYWlsYml0OwogIH0KIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBf
SW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X251bShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUm
IF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3Qg
X19sZW4sCiAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSwKICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSAwOwogICAgICBz
dHJpbmcgX19kaWdpdHM7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwogICAgICBjaGFy
X3R5cGUgX19jID0gKl9fYmVnOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19pIDwg
X19sZW4KICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKSkKIHsKICAg
X19kaWdpdHMgKz0gX19jdHlwZS5uYXJyb3coX19jLCAwKTsKICAgX19jID0gKigrK19fYmVnKTsK
ICAgKytfX2k7CiB9CiAgICAgIGlmIChfX2kgPT0gX19sZW4pCiB7CiAgIGludCBfX3ZhbHVlID0g
YXRvaShfX2RpZ2l0cy5jX3N0cigpKTsKICAgaWYgKF9fbWluIDw9IF9fdmFsdWUgJiYgX192YWx1
ZSA8PSBfX21heCkKICAgICBfX21lbWJlciA9IF9fdmFsdWU7CiAgIGVsc2UKICAgICBfX3Rlc3R2
YWxpZCA9IGZhbHNlOwogfQogICAgICBlbHNlCiBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICBp
ZiAoIV9fdGVzdHZhbGlkKQogX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAg
dGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90eXBl
JiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgY29uc3QgX0No
YXJUKiogX19uYW1lcywgc2l6ZV90IF9faW5kZXhsZW4sCiAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VycikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9f
dHJhaXRzX3R5cGU7CiAgICAgIGludCogX19tYXRjaGVzID0gc3RhdGljX2Nhc3Q8aW50Kj4oX19i
dWlsdGluX2FsbG9jYShzaXplb2YoaW50KQogICAgICAgICAqIF9faW5kZXhsZW4pKTsKICAgICAg
c2l6ZV90IF9fbm1hdGNoZXMgPSAwOwogICAgICBzaXplX3QgX19wb3MgPSAwOwogICAgICBib29s
IF9fdGVzdHZhbGlkID0gdHJ1ZTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX25hbWU7CgogICAg
ICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwoKICAgICAgZm9yIChzaXplX3QgX19pMSA9IDA7IF9f
aTEgPCBfX2luZGV4bGVuOyArK19faTEpCiBpZiAoX19jID09IF9fbmFtZXNbX19pMV1bMF0pCiAg
IF9fbWF0Y2hlc1tfX25tYXRjaGVzKytdID0gX19pMTsKCiAgICAgIHdoaWxlIChfX25tYXRjaGVz
ID4gMSkKIHsKCiAgIHNpemVfdCBfX21pbmxlbiA9IDEwOwogICBmb3IgKHNpemVfdCBfX2kyID0g
MDsgX19pMiA8IF9fbm1hdGNoZXM7ICsrX19pMikKICAgICBfX21pbmxlbiA9IG1pbihfX21pbmxl
biwKICAgICAgX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZXNbX19tYXRjaGVzW19faTJdXSkp
OwoKICAgaWYgKF9fcG9zIDwgX19taW5sZW4gJiYgX19iZWcgIT0gX19lbmQpCiAgICAgewogICAg
ICAgKytfX3BvczsKICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICBmb3IgKHNpemVfdCBf
X2kzID0gMDsgX19pMyA8IF9fbm1hdGNoZXM7ICsrX19pMykKICB7CiAgICBfX25hbWUgPSBfX25h
bWVzW19fbWF0Y2hlc1tfX2kzXV07CiAgICBpZiAoX19uYW1lW19fcG9zXSAhPSBfX2MpCiAgICAg
IF9fbWF0Y2hlc1tfX2kzXSA9IF9fbWF0Y2hlc1stLV9fbm1hdGNoZXNdOwogIH0KICAgICB9CiAg
IGVsc2UKICAgICBicmVhazsKIH0KCiAgICAgIGlmIChfX25tYXRjaGVzID09IDEpCiB7CgogICBf
X25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1swXV07CiAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9f
dHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOwogICB3aGlsZSAoX19wb3MgPCBfX2xlbiAmJiBf
X2JlZyAhPSBfX2VuZCAmJiBfX25hbWVbX19wb3NdID09ICpfX2JlZykKICAgICArK19fYmVnLCAr
K19fcG9zOwoKICAgaWYgKF9fbGVuID09IF9fcG9zKQogICAgIF9fbWVtYmVyID0gX19tYXRjaGVz
WzBdOwogICBlbHNlCiAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKIH0KICAgICAgZWxzZQogX190
ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCkKIF9fZXJyIHw9IGlvc19i
YXNlOjpmYWlsYml0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg
IGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19pbywKICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewog
ICAgICBfQ2hhclQgX193Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJVgiOwogICAg
ICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0
JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5
cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9y
bWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9f
YmVnID09IF9fZW5kKQogX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9f
YmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+
CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF9k
YXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hh
clQgX193Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJXgiOwogICAgICBsb2NhbGUg
X19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBl
ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4o
X19jcywgX19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVn
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9f
ZW5kKQogX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J
dGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF93ZWVrZGF5KGl0
ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICB0eXBlZGVm
IGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgbG9jYWxlIF9fbG9jID0g
X19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVz
ZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBjaGFyX3R5
cGUqIF9fZGF5c1s3XTsKICAgICAgX190cC5fTV9kYXlzX2FiYnJldmlhdGVkKF9fZGF5cyk7CiAg
ICAgIGludCBfX3RtcHdkYXk7CiAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9f
dG1wd2RheSwgX19kYXlzLCA3LCBfX2Vycik7CgoKCgoKCgogICAgICBpZiAoIV9fZXJyKQogewog
ICBzaXplX3QgX19wb3MgPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19kYXlzW19fdG1wd2RheV0p
OwogICBfX3RwLl9NX2RheXMoX19kYXlzKTsKICAgY29uc3QgY2hhcl90eXBlKiBfX25hbWUgPSBf
X2RheXNbX190bXB3ZGF5XTsKICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgIHsK
CiAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1l
KTsKICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kCiAgICAgICAm
JiBfX25hbWVbX19wb3NdID09ICpfX2JlZykKICArK19fYmVnLCArK19fcG9zOwogICAgICAgaWYg
KF9fbGVuICE9IF9fcG9zKQogIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgIH0KICAg
aWYgKCFfX2VycikKICAgICBfX3RtLT50bV93ZGF5ID0gX190bXB3ZGF5OwogfQogICAgICBpZiAo
X19iZWcgPT0gX19lbmQpCiBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4g
X19iZWc7CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dl
dF9tb250aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsCiAgICAgICAgICAg
ICAgICAgICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBf
X3RtKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFp
dHNfdHlwZTsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1l
cHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+
ID4oX19sb2MpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzWzEyXTsKICAgICAgX190
cC5fTV9tb250aHNfYWJicmV2aWF0ZWQoX19tb250aHMpOwogICAgICBpbnQgX190bXBtb247CiAg
ICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1wbW9uLCBfX21vbnRocywgMTIs
IF9fZXJyKTsKCgoKCgoKCiAgICAgIGlmICghX19lcnIpCiB7CiAgIHNpemVfdCBfX3BvcyA9IF9f
dHJhaXRzX3R5cGU6Omxlbmd0aChfX21vbnRoc1tfX3RtcG1vbl0pOwogICBfX3RwLl9NX21vbnRo
cyhfX21vbnRocyk7CiAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19tb250aHNbX190bXBt
b25dOwogICBpZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgewoKICAgICAgIGNvbnN0
IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgd2hp
bGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19lbmQKICAgICAgICYmIF9fbmFtZVtfX3Bv
c10gPT0gKl9fYmVnKQogICsrX19iZWcsICsrX19wb3M7CiAgICAgICBpZiAoX19sZW4gIT0gX19w
b3MpCiAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgfQogICBpZiAoIV9fZXJyKQog
ICAgIF9fdG0tPnRtX21vbiA9IF9fdG1wbW9uOwogfQoKICAgICAgaWYgKF9fYmVnID09IF9fZW5k
KQogX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVy
CiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF95ZWFyKGl0ZXJfdHlw
ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBf
X2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2Zh
Y2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVn
OwogICAgICBzaXplX3QgX19pID0gMDsKICAgICAgc3RyaW5nIF9fZGlnaXRzOwogICAgICB3aGls
ZSAoX19pIDwgNCAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OmRp
Z2l0LCBfX2MpKQogewogICBfX2RpZ2l0cyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIDApOwogICBf
X2MgPSAqKCsrX19iZWcpOwogICArK19faTsKIH0KICAgICAgaWYgKF9faSA9PSAyIHx8IF9faSA9
PSA0KQogewogICBsb25nIF9fbDsKICAgX19jb252ZXJ0X3RvX3YoX19kaWdpdHMuY19zdHIoKSwg
X19sLCBfX2VyciwgX1NfY19sb2NhbGUpOwogICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWls
Yml0KSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykKICAgICB7CiAgICAgICBfX2wgPSBfX2kgPT0gMiA/
IF9fbCA6IF9fbCAtIDE5MDA7CiAgICAgICBfX3RtLT50bV95ZWFyID0gc3RhdGljX2Nhc3Q8aW50
PihfX2wpOwogICAgIH0KIH0KICAgICAgZWxzZQogX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7
CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAg
ICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVy
Pjo6CiAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29u
c3QgdG0qIF9fdG0sCiBjb25zdCBfQ2hhclQqIF9fYmVnLCBjb25zdCBfQ2hhclQqIF9fZW5kKSBj
b25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlw
ZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv
Yyk7CiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKIHsKICAgY2hhciBfX2MgPSBfX2N0eXBl
Lm5hcnJvdygqX19iZWcsIDApOwogICArK19fYmVnOwogICBpZiAoX19jID09ICclJykKICAgICB7
CiAgICAgICBjaGFyIF9fZm9ybWF0OwogICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICBzaXpl
X3QgX19sZW4gPSAxOwogICAgICAgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAg
ICAgICsrX19iZWc7CiAgICAgICBpZiAoX19jID09ICdFJyB8fCBfX2MgPT0gJ08nKQogIHsKICAg
IF9fbW9kID0gX19jOwogICAgX19mb3JtYXQgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwog
ICAgKytfX2JlZzsKICB9CiAgICAgICBlbHNlCiAgX19mb3JtYXQgPSBfX2M7CiAgICAgICBfX3Mg
PSB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBfQ2hhclQoKSwgX190bSwgX19mb3JtYXQsIF9fbW9k
KTsKICAgICB9CiAgIGVsc2UKICAgICB7CiAgICAgICAqX19zID0gX19jOwogICAgICAgKytfX3M7
CiAgICAgfQogfQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIHRpbWVfcHV0PF9DaGFy
VCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywg
Y2hhcl90eXBlLCBjb25zdCB0bSogX190bSwKICAgIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2Qp
IGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0
eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f
bG9jKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxf
X3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCgogICAgICBjb25zdCBzaXplX3QgX19tYXhs
ZW4gPSA2NDsKICAgICAgY2hhcl90eXBlKiBfX3JlcyA9IHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+
KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGNoYXJfdHlwZSkgKiBfX21heGxlbikpOwoKCgoKCgog
ICAgICBjaGFyX3R5cGUgX19mbXRbNF07CiAgICAgIF9fZm10WzBdID0gX19jdHlwZS53aWRlbign
JScpOwogICAgICBpZiAoIV9fbW9kKQogewogICBfX2ZtdFsxXSA9IF9fZm9ybWF0OwogICBfX2Zt
dFsyXSA9IGNoYXJfdHlwZSgpOwogfQogICAgICBlbHNlCiB7CiAgIF9fZm10WzFdID0gX19tb2Q7
CiAgIF9fZm10WzJdID0gX19mb3JtYXQ7CiAgIF9fZm10WzNdID0gY2hhcl90eXBlKCk7CiB9Cgog
ICAgICBfX3RwLl9NX3B1dChfX3JlcywgX19tYXhsZW4sIF9fZm10LCBfX3RtKTsKCgogICAgICBy
ZXR1cm4gX193cml0ZShfX3MsIF9fcmVzLCBjaGFyX3RyYWl0czxjaGFyX3R5cGU+OjpsZW5ndGgo
X19yZXMpKTsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAg
IGNvbGxhdGU8X0NoYXJUPjo6X01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQq
KSBjb25zdAogICAgeyByZXR1cm4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgc2l6ZV90CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25z
dCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX2NvbXBh
cmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICBjb25z
dCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAogICAgewoKCiAgICAg
IGNvbnN0IHN0cmluZ190eXBlIF9fb25lKF9fbG8xLCBfX2hpMSk7CiAgICAgIGNvbnN0IHN0cmlu
Z190eXBlIF9fdHdvKF9fbG8yLCBfX2hpMik7CgogICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IF9f
b25lLmNfc3RyKCk7CiAgICAgIGNvbnN0IF9DaGFyVCogX19wZW5kID0gX19vbmUuY19zdHIoKSAr
IF9fb25lLmxlbmd0aCgpOwogICAgICBjb25zdCBfQ2hhclQqIF9fcSA9IF9fdHdvLmNfc3RyKCk7
CiAgICAgIGNvbnN0IF9DaGFyVCogX19xZW5kID0gX190d28uY19zdHIoKSArIF9fdHdvLmxlbmd0
aCgpOwoKCgoKICAgICAgZm9yICg7OykKIHsKICAgaW50IF9fcmVzID0gX01fY29tcGFyZShfX3As
IF9fcSk7CiAgIGlmIChfX3JlcykKICAgICByZXR1cm4gX19yZXM7CgogICBfX3AgKz0gY2hhcl90
cmFpdHM8X0NoYXJUPjo6bGVuZ3RoKF9fcCk7CiAgIF9fcSArPSBjaGFyX3RyYWl0czxfQ2hhclQ+
OjpsZW5ndGgoX19xKTsKICAgaWYgKF9fcCA9PSBfX3BlbmQgJiYgX19xID09IF9fcWVuZCkKICAg
ICByZXR1cm4gMDsKICAgZWxzZSBpZiAoX19wID09IF9fcGVuZCkKICAgICByZXR1cm4gLTE7CiAg
IGVsc2UgaWYgKF9fcSA9PSBfX3FlbmQpCiAgICAgcmV0dXJuIDE7CgogICBfX3ArKzsKICAgX19x
Kys7CiB9CiAgICB9CgogdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgY29s
bGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlwZQogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX3Ry
YW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAg
IHsKCiAgICAgIHN0cmluZ190eXBlIF9fc3RyKF9fbG8sIF9faGkpOwoKICAgICAgY29uc3QgX0No
YXJUKiBfX3AgPSBfX3N0ci5jX3N0cigpOwogICAgICBjb25zdCBfQ2hhclQqIF9fcGVuZCA9IF9f
c3RyLmNfc3RyKCkgKyBfX3N0ci5sZW5ndGgoKTsKCiAgICAgIHNpemVfdCBfX2xlbiA9IChfX2hp
IC0gX19sbykgKiAyOwoKICAgICAgc3RyaW5nX3R5cGUgX19yZXQ7CgoKCgogICAgICBmb3IgKDs7
KQogewoKICAgX0NoYXJUKiBfX2MgPQogICAgIHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRp
bl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2xlbikpOwogICBzaXplX3QgX19yZXMgPSBfTV90
cmFuc2Zvcm0oX19jLCBfX3AsIF9fbGVuKTsKCgogICBpZiAoX19yZXMgPj0gX19sZW4pCiAgICAg
ewogICAgICAgX19sZW4gPSBfX3JlcyArIDE7CiAgICAgICBfX2MgPSBzdGF0aWNfY2FzdDxfQ2hh
clQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICogX19sZW4pKTsK
ICAgICAgIF9fcmVzID0gX01fdHJhbnNmb3JtKF9fYywgX19wLCBfX3JlcyArIDEpOwogICAgIH0K
CiAgIF9fcmV0LmFwcGVuZChfX2MsIF9fcmVzKTsKICAgX19wICs9IGNoYXJfdHJhaXRzPF9DaGFy
VD46Omxlbmd0aChfX3ApOwogICBpZiAoX19wID09IF9fcGVuZCkKICAgICByZXR1cm4gX19yZXQ7
CgogICBfX3ArKzsKICAgX19yZXQucHVzaF9iYWNrKF9DaGFyVCgpKTsKIH0KICAgIH0KCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb25nCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAg
ZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAg
IHsKICAgICAgdW5zaWduZWQgbG9uZyBfX3ZhbCA9IDA7CiAgICAgIGZvciAoOyBfX2xvIDwgX19o
aTsgKytfX2xvKQogX192YWwgPSAqX19sbyArICgoX192YWwgPDwgNykgfAogICAgICAgICAoX192
YWwgPj4gKG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjpkaWdpdHMgLSA3KSkpOwogICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oX192YWwpOwogICAgfQojIDIxNDEgIi9nY2MvZGpl
L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgX19w
YWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxs
LAogICAgICAgX0NoYXJUKiBfX25ld3MsIGNvbnN0IF9DaGFyVCogX19vbGRzLAogICAgICAgY29u
c3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwKICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4s
IGNvbnN0IGJvb2wgX19udW0pCiAgICB7CiAgICAgIHNpemVfdCBfX3BsZW4gPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KF9fbmV3bGVuIC0gX19vbGRsZW4pOwogICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0
YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAg
ICAgICAgKiBfX3BsZW4pKTsKICAgICAgX1RyYWl0czo6YXNzaWduKF9fcGFkcywgX19wbGVuLCBf
X2ZpbGwpOwoKICAgICAgX0NoYXJUKiBfX2JlZzsKICAgICAgX0NoYXJUKiBfX2VuZDsKICAgICAg
c2l6ZV90IF9fbW9kID0gMDsKICAgICAgc2l6ZV90IF9fYmVnbGVuOwogICAgICBpb3NfYmFzZTo6
Zm10ZmxhZ3MgX19hZGp1c3QgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7
CgogICAgICBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmxlZnQpCiB7CgogICBfX2JlZyA9IGNv
bnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgX19iZWdsZW4gPSBfX29sZGxlbjsKICAgX19l
bmQgPSBfX3BhZHM7CiB9CiAgICAgIGVsc2UgaWYgKF9fYWRqdXN0ID09IGlvc19iYXNlOjppbnRl
cm5hbCAmJiBfX251bSkKIHsKCgoKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9j
KCk7CiAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0No
YXJUPiA+KF9fbG9jKTsKICAgY29uc3QgX0NoYXJUIF9fbWludXMgPSBfX2N0eXBlLndpZGVuKCct
Jyk7CiAgIGNvbnN0IF9DaGFyVCBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7CiAgIGJvb2wg
X190ZXN0c2lnbiA9IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19taW51cykKICAgICAgICAgICB8
fCBfVHJhaXRzOjplcShfX29sZHNbMF0sIF9fcGx1cyk7CgogICBib29sIF9fdGVzdGhleCA9IF9U
cmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJzAnKSwgX19vbGRzWzBdKQogICAgICAgICAgJiYgKF9U
cmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJ3gnKSwgX19vbGRzWzFdKQogICAgICAgICAgfHwgX1Ry
YWl0czo6ZXEoX19jdHlwZS53aWRlbignWCcpLCBfX29sZHNbMV0pKTsKICAgaWYgKF9fdGVzdGhl
eCkKICAgICB7CiAgICAgICBfX25ld3NbMF0gPSBfX29sZHNbMF07CiAgICAgICBfX25ld3NbMV0g
PSBfX29sZHNbMV07CiAgICAgICBfX21vZCArPSAyOwogICAgICAgX19uZXdzICs9IDI7CiAgICAg
ICBfX2JlZyA9IF9fcGFkczsKICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgX19lbmQg
PSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyArIF9fbW9kKTsKICAgICB9CiAgIGVsc2UgaWYg
KF9fdGVzdHNpZ24pCiAgICAgewogICAgICAgX1RyYWl0czo6ZXEoKF9fbmV3c1swXSA9IF9fb2xk
c1swXSksIF9fcGx1cykgPyBfX3BsdXMgOiBfX21pbnVzOwogICAgICAgKytfX21vZDsKICAgICAg
ICsrX19uZXdzOwogICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICBfX2JlZ2xlbiA9IF9fcGxl
bjsKICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMgKyBfX21vZCk7CiAg
ICAgfQogICBlbHNlCiAgICAgewoKICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgX19iZWds
ZW4gPSBfX3BsZW47CiAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsK
ICAgICB9CiB9CiAgICAgIGVsc2UKIHsKCiAgIF9fYmVnID0gX19wYWRzOwogICBfX2JlZ2xlbiA9
IF9fcGxlbjsKICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7CiB9CiAgICAg
IF9UcmFpdHM6OmNvcHkoX19uZXdzLCBfX2JlZywgX19iZWdsZW4pOwogICAgICBfVHJhaXRzOjpj
b3B5KF9fbmV3cyArIF9fYmVnbGVuLCBfX2VuZCwKICAgICBfX25ld2xlbiAtIF9fYmVnbGVuIC0g
X19tb2QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBib29sCiAgICBf
X3ZlcmlmeV9ncm91cGluZyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiYgX19ncm91cGluZywK
ICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJUPiYgX19ncm91cGluZ190bXApCiAgICB7CiAgICAg
IGludCBfX2kgPSAwOwogICAgICBpbnQgX19qID0gMDsKICAgICAgY29uc3QgaW50IF9fbGVuID0g
X19ncm91cGluZy5zaXplKCk7CiAgICAgIGNvbnN0IGludCBfX24gPSBfX2dyb3VwaW5nX3RtcC5z
aXplKCk7CiAgICAgIGJvb2wgX190ZXN0ID0gdHJ1ZTsKCgoKCiAgICAgIHdoaWxlIChfX3Rlc3Qg
JiYgX19pIDwgX19uIC0gMSkKIGZvciAoX19qID0gMDsgX190ZXN0ICYmIF9faiA8IF9fbGVuICYm
IF9faSA8IF9fbiAtIDE7ICsrX19qLCsrX19pKQogICBfX3Rlc3QgJj0gX19ncm91cGluZ1tfX2pd
ID09IF9fZ3JvdXBpbmdfdG1wW19fbiAtIF9faSAtIDFdOwoKCiAgICAgIF9faiA9PSBfX2xlbiA/
IF9faiA9IDAgOiBfX2o7CiAgICAgIF9fdGVzdCAmPSBfX2dyb3VwaW5nW19fal0gPj0gX19ncm91
cGluZ190bXBbX19uIC0gX19pIC0gMV07CiAgICAgIHJldHVybiBfX3Rlc3Q7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAgIF9fYWRkX2dyb3VwaW5nKF9D
aGFyVCogX19zLCBfQ2hhclQgX19zZXAsCiAgICAgY29uc3QgY2hhciogX19nYmVnLCBjb25zdCBj
aGFyKiBfX2dlbmQsCiAgICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0LCBjb25zdCBfQ2hhclQqIF9f
bGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiAqX19nYmVnKQogICAgICAg
IHsKICAgICAgICAgIF9fcyA9IF9fYWRkX2dyb3VwaW5nKF9fcywgX19zZXAsCiAgICAgICAgICAo
X19nYmVnICsgMSA9PSBfX2dlbmQgPyBfX2diZWcgOiBfX2diZWcgKyAxKSwKICAgICAgICAgIF9f
Z2VuZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ2JlZyk7CiAgICAgICAgICBfX2ZpcnN0ID0gX19s
YXN0IC0gKl9fZ2JlZzsKICAgICAgICAgICpfX3MrKyA9IF9fc2VwOwogICAgICAgIH0KICAgICAg
ZG8KICpfX3MrKyA9ICpfX2ZpcnN0Kys7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCk7
CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICB2b2lkCiAgICBfX2xvY2FsZV9jYWNoZTxfQ2hhclQ+OjpfTV9pbml0KGNvbnN0IGxvY2FsZSYg
X19sb2MpCiAgICB7CiAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KGhhc19mYWNldDxudW1wdW5j
dDxfQ2hhclQ+ID4oX19sb2MpLCB0cnVlKSkKIHsKICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYg
X19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICBfTV9mYWxzZW5h
bWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICBfTV90cnVlbmFtZSA9IF9fbnAudHJ1ZW5hbWUoKTsK
ICAgX01fdGhvdXNhbmRzX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwogICBfTV9kZWNpbWFs
X3BvaW50ID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CiAgIF9NX2dyb3VwaW5nID0gX19ucC5ncm91
cGluZygpOwogICBfTV91c2VfZ3JvdXBpbmcgPSBfTV9ncm91cGluZy5zaXplKCkgIT0gMAogICAg
ICAgICAgICYmIF9NX2dyb3VwaW5nLmRhdGEoKVswXSAhPSAwOwogfQogICAgICBpZiAoX19idWls
dGluX2V4cGVjdChoYXNfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKSwgdHJ1ZSkpCiB7CiAg
IGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3QgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f
bG9jKTsKICAgX19jdC53aWRlbihfX251bV9iYXNlOjpfU19hdG9tc19vdXQsCiAgICAgICBfX251
bV9iYXNlOjpfU19hdG9tc19vdXQgKyBfX251bV9iYXNlOjpfU19lbmQsCiAgICAgICBfTV9saXRl
cmFscyk7CiB9CiAgICB9CgoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDxj
aGFyLCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1
ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIGZhbHNl
PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8Y2hhciwgdHJ1ZT47
CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxh
dGUgY2xhc3MgbW9uZXlfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5j
dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3RfYnluYW1lPGNoYXI+Owog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBudW1fcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX3RpbWVwdW5jdDxj
aGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8Y2hhcj47CiAgZXh0ZXJuIHRl
bXBsYXRlIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xh
c3MgdGltZV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFt
ZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXM8Y2hhcj47CiAgZXh0ZXJu
IHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgY3R5cGVfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0
X2J5bmFtZTxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBj
b2xsYXRlPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTxjaGFy
PjsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3Rh
dGVfdD4mCiAgICB1c2VfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29u
c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29sbGF0ZTxjaGFyPiYK
ICAgIHVzZV9mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0
ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bnVtcHVuY3Q8
Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1f
cHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsK
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0
PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBj
b25zdCBtb25leXB1bmN0PGNoYXIsIHRydWU+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hh
ciwgdHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBt
b25leXB1bmN0PGNoYXIsIGZhbHNlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIGZh
bHNlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5
X3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDxtb25leV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUm
KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9nZXQ8Y2hhcj4mCiAgICB1c2Vf
ZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgY29uc3QgX190aW1lcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8
Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1l
X3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYp
OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfZ2V0PGNoYXI+JgogICAgdXNlX2Zh
Y2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgY29uc3QgbWVzc2FnZXM8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihj
b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8
Y3R5cGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29s
CiAgICBoYXNfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29uc3QgbG9j
YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvbGxhdGU8
Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo
YXNfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs
YXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYp
OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1fZ2V0PGNoYXI+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh
Y2V0PG1vbmV5cHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl
CiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X2dldDxjaGFy
PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19m
YWNldDxfX3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYp
OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX2dldDxjaGFy
PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19m
YWNldDxtZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwojIDI1NDcgIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCn0KIyA0OCAi
L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2xvY2FsZSIgMiAzCiMgMzggIi9nY2Mv
ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2lzdHJlYW0udGNjIiAyIDMKIyAxICIv
Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvb3N0cmVhbSIgMSAzCiMgNDQgIi9nY2Mv
ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9vc3RyZWFtIiAzCgoKCm5hbWVzcGFjZSBzdGQK
ewojIDU3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvb3N0cmVhbSIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2lj
X29zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAg
ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz
X3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBf
X3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+
IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU
LCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFy
VCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8
X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQyLCB0
eXBlbmFtZSBfVHJhaXRzMj4KICAgICAgICBmcmllbmQgYmFzaWNfb3N0cmVhbTxfQ2hhclQyLCBf
VHJhaXRzMj4mCiAgICAgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVDIsIF9UcmFp
dHMyPiYsIF9DaGFyVDIpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RyYWl0czI+CiAgICAg
ICAgZnJpZW5kIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0czI+JgogICAgICAgIG9wZXJhdG9y
PDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzMj4mLCBjaGFyKTsKCiAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVDIsIHR5cGVuYW1lIF9UcmFpdHMyPgogICAgICAgIGZyaWVuZCBiYXNp
Y19vc3RyZWFtPF9DaGFyVDIsIF9UcmFpdHMyPiYKICAgICAgICBvcGVyYXRvcjw8KGJhc2ljX29z
dHJlYW08X0NoYXJUMiwgX1RyYWl0czI+JiwgY29uc3QgX0NoYXJUMiopOwoKICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RyYWl0czI+CiAgICAgICAgZnJpZW5kIGJhc2ljX29zdHJlYW08Y2hhciwg
X1RyYWl0czI+JgogICAgICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz
Mj4mLCBjb25zdCBjaGFyKik7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQyLCB0eXBl
bmFtZSBfVHJhaXRzMj4KICAgICAgICBmcmllbmQgYmFzaWNfb3N0cmVhbTxfQ2hhclQyLCBfVHJh
aXRzMj4mCiAgICAgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVDIsIF9UcmFpdHMy
PiYsIGNvbnN0IGNoYXIqKTsKIyAxMDQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk
ZS9vc3RyZWFtIiAzCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX29zdHJlYW0oX19zdHJlYW1i
dWZfdHlwZSogX19zYikKICAgICAgeyB0aGlzLT5pbml0KF9fc2IpOyB9CgoKCgoKCiAgICAgIHZp
cnR1YWwKICAgICAgfmJhc2ljX29zdHJlYW0oKSB7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAg
ICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CiMgMTMwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz
L2luY2x1ZGUvb3N0cmVhbSIgMwogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8
PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShfX29zdHJlYW1fdHlwZSYpKTsKCiAgICAgIF9fb3N0
cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlw
ZSYpKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAo
Kl9fcGYpIChpb3NfYmFzZSYpKTsKIyAxNjcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j
bHVkZS9vc3RyZWFtIiAzCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxv
bmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVk
IGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGJvb2wg
X19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikK
ICAgICAgewogaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19i
YXNlOjpiYXNlZmllbGQ7CiBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9z
X2Jhc2U6OmhleCkKICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgbG9uZz4KICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX24pKSk7CiBlbHNl
CiAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAg
ICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9y
dCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgbG9uZz4oX19uKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8
KGludCBfX24pCiAgICAgIHsKIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdz
KCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBf
X2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikp
KTsKIGVsc2UKICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19u
KSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2ln
bmVkIGludCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3Bl
cmF0b3I8PChsb25nIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVy
YXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg
IG9wZXJhdG9yPDwoZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0
YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX3ApOwojIDI0OCAiL2djYy9kamUvYnVpbGQvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMr
Ky12My9pbmNsdWRlL29zdHJlYW0iIDMKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7CiMgMjgxICIvZ2NjL2RqZS9idWlsZC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk
YysrLXYzL2luY2x1ZGUvb3N0cmVhbSIgMwogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgcHV0
KGNoYXJfdHlwZSBfX2MpOwoKCiAgICAgIHZvaWQKICAgICAgX01fd3JpdGUoY29uc3QgY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7CiBzdHJlYW1zaXplIF9fcHV0ID0gdGhp
cy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOwogaWYgKF9fcHV0ICE9IF9fbikKICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIH0KIyAzMDkgIi9nY2MvZGplL2J1aWxk
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9s
aWJzdGRjKystdjMvaW5jbHVkZS9vc3RyZWFtIiAzCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg
ICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwojIDMyMiAiL2dj
Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL29zdHJlYW0iIDMKICAgICAgX19vc3RyZWFt
X3R5cGUmCiAgICAgIGZsdXNoKCk7CiMgMzMzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu
Y2x1ZGUvb3N0cmVhbSIgMwogICAgICBwb3NfdHlwZQogICAgICB0ZWxscCgpOwojIDM0NCAiL2dj
Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL29zdHJlYW0iIDMKICAgICAgX19vc3RyZWFt
X3R5cGUmCiAgICAgIHNlZWtwKHBvc190eXBlKTsKIyAzNTYgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9vc3RyZWFtIiAzCiAgICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vl
a3Aob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGV4
cGxpY2l0CiAgICAgIGJhc2ljX29zdHJlYW0oKSB7IH0KICAgIH07CiMgMzc0ICIvZ2NjL2RqZS9i
dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvb3N0cmVhbSIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OnNlbnRyeQogICAgewoKICAgICAgYm9vbCBfTV9vazsKICAgICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9NX29zOwoKICAgIHB1YmxpYzoKIyAzOTMgIi9nY2MvZGpl
L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9vc3RyZWFtIiAzCiAgICAgIGV4cGxpY2l0CiAgICAg
IHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7CiMgNDAzICIvZ2Nj
L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvb3N0cmVhbSIgMwogICAgICB+c2VudHJ5KCkK
ICAgICAgewoKIGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRidWYgJiYgIXVuY2F1
Z2h0X2V4Y2VwdGlvbigpKQogICB7CgogICAgIGlmIChfTV9vcy5yZGJ1ZigpICYmIF9NX29zLnJk
YnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgIF9NX29zLnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICB9CiAgICAgIH0KIyA0MjEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j
bHVkZS9vc3RyZWFtIiAzCiAgICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdAogICAgICB7IHJldHVy
biBfTV9vazsgfQogICAgfTsKIyA0NDIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk
ZS9vc3RyZWFtIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mIF9fb3V0LCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBfX291dC53aWRl
bihfX2MpKTsgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp
dHM+JiBfX291dCwgY2hhciBfX2MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08
Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBzaWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19v
dXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2lj
X29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCB1bnNpZ25lZCBjaGFyIF9fYykKICAgIHsg
cmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQojIDQ4MiAiL2djYy9k
amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL29zdHJlYW0iIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19v
dXQsIGNvbnN0IF9DaGFyVCogX19zKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hh
ciogX19zKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNo
YXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+
JiBfX291dCwgY29uc3QgY2hhciogX19zKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAg
ICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry
ZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3Qgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsg
cmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoK
ICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz
PiAmCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBj
b25zdCB1bnNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0KIyA1MTYgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9vc3RyZWFtIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5k
bChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBmbHVz
aChfX29zLnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAg
ICB7IHJldHVybiBfX29zLnB1dChfQ2hhclQoKSk7IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBmbHVzaChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAg
ICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0KCn0KCgoKCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9iaXRzL29zdHJlYW0udGNjIiAxIDMKIyAzNiAiL2djYy9kamUvYnVp
bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
L2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvb3N0cmVhbS50Y2MiIDMKCgoKbmFtZXNwYWNlIHN0
ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX29z
dHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zKQogICAgOiBfTV9vcyhfX29zKQogICAgewoKICAg
ICAgaWYgKF9fb3MudGllKCkgJiYgX19vcy5nb29kKCkpCiBfX29zLnRpZSgpLT5mbHVzaCgpOwoK
ICAgICAgaWYgKF9fb3MuZ29vZCgpKQogX01fb2sgPSB0cnVlOwogICAgICBlbHNlCiB7CiAgIF9N
X29rID0gZmFsc2U7CiAgIF9fb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogfQogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShfX29zdHJlYW1f
dHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2Vy
YikKIHsKICAgdHJ5CiAgICAgeyBfX3BmKCp0aGlzKTsgfQogICBjYXRjaCguLi4pCiAgICAgewoK
CiAgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsKICAg
ICB9CiB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19p
b3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7IF9fcGYoKnRoaXMpOyB9
CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKIHsKICAgdHJ5CiAg
ICAgeyBfX3BmKCp0aGlzKTsgfQogICBjYXRjaCguLi4pCiAgICAgewoKCiAgICAgICB0aGlzLT5f
TV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsKICAgICB9CiB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Jp
bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIgJiYg
X19zYmluKQogewogICB0cnkKICAgICB7CiAgICAgICBpZiAoIV9fY29weV9zdHJlYW1idWZzKCp0
aGlzLCBfX3NiaW4sIHRoaXMtPnJkYnVmKCkpKQogIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpm
YWlsYml0KTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3Nl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAgZWxzZSBp
ZiAoIV9fc2JpbikKIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChib29sIF9fbikKICAgIHsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsKICAg
ICAgIGlmIChfTV9jaGVja19mYWNldCh0aGlzLT5fTV9mbnVtcHV0KSkKICBpZiAodGhpcy0+X01f
Zm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywKICAgICAgIHRoaXMtPmZpbGwoKSwgX19uKS5mYWls
ZWQoKSkKICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgIH0KICAgY2F0
Y2goLi4uKQogICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9
IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3Bl
cmF0b3I8PChsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg
IGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsKICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlz
LT5maWxsKCk7CiAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygp
ICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgIGlmIChfTV9jaGVja19mYWNldCh0aGlzLT5f
TV9mbnVtcHV0KSkKICB7CiAgICBib29sIF9fYiA9IGZhbHNlOwogICAgaWYgKChfX2ZtdCAmIGlv
c19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19iYXNlOjpoZXgpKQogICAgICB7CiAgICAgICAg
dW5zaWduZWQgbG9uZyBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pOwogICAg
ICAgIF9fYiA9IHRoaXMtPl9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsCiAgICAgICAgX19j
LCBfX2wpLmZhaWxlZCgpOwogICAgICB9CiAgICBlbHNlCiAgICAgIF9fYiA9IHRoaXMtPl9NX2Zu
dW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsCiAgICAgIF9fYywgX19uKS5mYWlsZWQoKTsKICAgIGlm
IChfX2IpCiAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogIH0KICAgICB9
CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAgICBpZiAo
X01fY2hlY2tfZmFjZXQodGhpcy0+X01fZm51bXB1dCkpCiAgaWYgKHRoaXMtPl9NX2ZudW1wdXQt
PnB1dCgqdGhpcywgKnRoaXMsCiAgICAgICB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICB9CiAgIGNhdGNoKC4uLikK
ICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRo
cm93OwogICAgIH0KIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8
KGxvbmcgbG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBp
ZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+
ZmlsbCgpOwogICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAm
IGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQodGhpcy0+X01f
Zm51bXB1dCkpCiAgewogICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgIGlmICgoX19mbXQgJiBpb3Nf
YmFzZTo6b2N0KSB8fCAoX19mbXQgJiBpb3NfYmFzZTo6aGV4KSkKICAgICAgewogICAgICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBfX2w7CiAgICAgICAgX19sID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPihfX24pOwogICAgICAgIF9fYiA9IHRoaXMtPl9NX2ZudW1wdXQtPnB1dCgqdGhp
cywgKnRoaXMsCiAgICAgICAgX19jLCBfX2wpLmZhaWxlZCgpOwogICAgICB9CiAgICBlbHNlCiAg
ICAgIF9fYiA9IHRoaXMtPl9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsCiAgICAgIF9fYywg
X19uKS5mYWlsZWQoKTsKICAgIGlmIChfX2IpCiAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogIH0KICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRoaXMt
Pl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9f
bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiB7
CiAgIHRyeQogICAgIHsKICAgICAgIGlmIChfTV9jaGVja19mYWNldCh0aGlzLT5fTV9mbnVtcHV0
KSkKICBpZiAodGhpcy0+X01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywKICAgICAgIHRoaXMt
PmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgIH0KICAgY2F0Y2goLi4uKQogICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsKICAgICAg
IGlmIChfTV9jaGVja19mYWNldCh0aGlzLT5fTV9mbnVtcHV0KSkKICBpZiAodGhpcy0+X01fZm51
bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywKICAgICAgIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQo
KSkKICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgIH0KICAgY2F0Y2go
Li4uKQogICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0
b3I8PChsb25nIGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwog
ICAgICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAgICBpZiAoX01fY2hlY2tfZmFj
ZXQodGhpcy0+X01fZm51bXB1dCkpCiAgaWYgKHRoaXMtPl9NX2ZudW1wdXQtPnB1dCgqdGhpcywg
KnRoaXMsCiAgICAgICB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAg
ICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0K
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoY29uc3Qgdm9pZCog
X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikK
IHsKICAgdHJ5CiAgICAgewogICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KHRoaXMtPl9NX2ZudW1w
dXQpKQogIGlmICh0aGlzLT5fTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLAogICAgICAgdGhp
cy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgfQogICBjYXRjaCguLi4pCiAgICAgewoKCiAgICAgICB0aGlzLT5fTV9zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsKICAgICB9CiB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjpwdXQoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiB7CiAgIGludF90eXBlIF9fcHV0ID0gcmRi
dWYoKS0+c3B1dGMoX19jKTsKICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3B1dCwg
dHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OndyaXRlKGNvbnN0IF9DaGFyVCog
X19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAg
ICAgIGlmIChfX2NlcmIpCiBfTV93cml0ZShfX3MsIF9fbik7CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjpmbHVzaCgpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAg
ICBpZiAoX19jZXJiKQogewogICBpZiAodGhpcy0+cmRidWYoKSAmJiB0aGlzLT5yZGJ1ZigpLT5w
dWJzeW5jKCkgPT0gLTEpCiAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiB9
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgp
CiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBpZiAoIXRo
aXMtPmZhaWwoKSkKIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFz
ZTo6Y3VyLCBpb3NfYmFzZTo6b3V0KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpz
ZWVrcChwb3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiB7CgoK
ICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3Nf
YmFzZTo6b3V0KTsKCgogICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogfQogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6CiAgICBzZWVrcChvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtk
aXIgX19kKQogICAgewogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKIHsKCgogICBwb3NfdHlwZSBf
X2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZCwKICAgICAgICAgICBp
b3NfYmFzZTo6b3V0KTsKCgogICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkK
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogfQogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpCiAgICB7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBl
OwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAg
ICAgIGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsKICAgICAgIHN0cmVhbXNpemUgX193ID0g
X19vdXQud2lkdGgoKTsKICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJU
Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX3cgKyAxKSkpOwogICAgICAg
X19wYWRzWzBdID0gX19jOwogICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICBpZiAo
X193ID4gX19sZW4pCiAgewogICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0
LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsK
ICAgIF9fbGVuID0gX193OwogIH0KICAgICAgIF9fb3V0Ll9NX3dyaXRlKF9fcGFkcywgX19sZW4p
OwogICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgfQogICBjYXRjaCguLi4pCiAgICAgewoKCiAg
ICAgICBfX291dC5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlmICgoX19v
dXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsKICAgICB9
CiB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf
b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQogICAgewogICAgICB0eXBl
ZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5
cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9f
Y2VyYikKIHsKICAgdHJ5CiAgICAgewogICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0
aCgpOwogICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9h
bGxvY2EoX193ICsgMSkpOwogICAgICAgX19wYWRzWzBdID0gX19jOwogICAgICAgc3RyZWFtc2l6
ZSBfX2xlbiA9IDE7CiAgICAgICBpZiAoX193ID4gX19sZW4pCiAgewogICAgX19wYWQ8Y2hhciwg
X1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAg
ICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgIF9fbGVuID0gX193OwogIH0KICAgICAgIF9f
b3V0Ll9NX3dyaXRlKF9fcGFkcywgX19sZW4pOwogICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAg
fQogICBjYXRjaCguLi4pCiAgICAgewoKCiAgICAgICBfX291dC5fTV9zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICB0aHJvdzsKICAgICB9CiB9CiAgICAgIHJldHVybiBfX291dDsKICAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5
cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAg
ICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlm
IChfX2NlcmIgJiYgX19zKQogewogICB0cnkKICAgICB7CiAgICAgICBzdHJlYW1zaXplIF9fdyA9
IF9fb3V0LndpZHRoKCk7CiAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFy
VCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgIHN0cmVh
bXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19z
KSk7CiAgICAgICBpZiAoX193ID4gX19sZW4pCiAgewogICAgX19wYWQ8X0NoYXJULCBfVHJhaXRz
Pjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgIF9fcywgX193LCBf
X2xlbiwgZmFsc2UpOwogICAgX19zID0gX19wYWRzOwogICAgX19sZW4gPSBfX3c7CiAgfQogICAg
ICAgX19vdXQuX01fd3JpdGUoX19zLCBfX2xlbik7CiAgICAgICBfX291dC53aWR0aCgwKTsKICAg
ICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIF9fb3V0Ll9NX3NldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAgZWxzZSBpZiAoIV9fcykKIF9f
b3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBl
ZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCgoKICAg
ICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPiBfX3RyYWl0c190eXBlOwoKICAgICAgdHlwZW5h
bWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJi
ICYmIF9fcykKIHsKICAgc2l6ZV90IF9fY2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp
OwogICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2Nh
KHNpemVvZihfQ2hhclQpICogKF9fY2xlbiArIDEpKSk7CiAgIGZvciAoc2l6ZV90IF9faSA9IDA7
IF9faSA8IF9fY2xlbjsgKytfX2kpCiAgICAgX193c1tfX2ldID0gX19vdXQud2lkZW4oX19zW19f
aV0pOwogICBfQ2hhclQqIF9fc3RyID0gX193czsKCiAgIHRyeQogICAgIHsKICAgICAgIHN0cmVh
bXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2NsZW4pOwogICAgICAgc3Ry
ZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0
aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7
CgogICAgICAgaWYgKF9fdyA+IF9fbGVuKQogIHsKICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46
Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICBfX3dzLCBfX3csIF9f
bGVuLCBmYWxzZSk7CiAgICBfX3N0ciA9IF9fcGFkczsKICAgIF9fbGVuID0gX193OwogIH0KICAg
ICAgIF9fb3V0Ll9NX3dyaXRlKF9fc3RyLCBfX2xlbik7CiAgICAgICBfX291dC53aWR0aCgwKTsK
ICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIF9fb3V0Ll9NX3NldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAgZWxzZSBpZiAoIV9fcykK
IF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAg
ICB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBf
VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19v
dXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNo
YXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw
ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogewogICB0
cnkKICAgICB7CiAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICBj
aGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cpKTsK
ICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRz
OjpsZW5ndGgoX19zKSk7CgogICAgICAgaWYgKF9fdyA+IF9fbGVuKQogIHsKICAgIF9fcGFkPGNo
YXIsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAg
X19zLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICBfX3MgPSBfX3BhZHM7CiAgICBfX2xlbiA9IF9f
dzsKICB9CiAgICAgICBfX291dC5fTV93cml0ZShfX3MsIF9fbGVuKTsKICAgICAgIF9fb3V0Lndp
ZHRoKDApOwogICAgIH0KICAgY2F0Y2goLi4uKQogICAgIHsKCgogICAgICAgX19vdXQuX01fc2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAgICBlbHNlIGlm
ICghX19zKQogX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBf
X291dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LAogICAg
ICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQog
ICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJl
YW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19v
dXQpOwogICAgICBpZiAoX19jZXJiKQogewogICBjb25zdCBfQ2hhclQqIF9fcyA9IF9fc3RyLmRh
dGEoKTsKICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICBfQ2hhclQqIF9fcGFk
cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkg
KiBfX3cpKTsKICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9f
c3RyLnNpemUoKSk7CgoKCiAgIGlmIChfX3cgPiBfX2xlbikKICAgICB7CiAgICAgICBfX3BhZDxf
Q2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLCBfX3Ms
CiAgICAgICAgICBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAg
ICBfX2xlbiA9IF9fdzsKICAgICB9CiAgIF9fb3V0Ll9NX3dyaXRlKF9fcywgX19sZW4pOwogICBf
X291dC53aWR0aCgwKTsKIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCgoKCiAgZXh0ZXJu
IHRlbXBsYXRlIGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIG9z
dHJlYW0mIGVuZGwob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRzKG9z
dHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYpOwogIGV4
dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjaGFyKTsKICBleHRl
cm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgdW5zaWduZWQgY2hhcik7
CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIHNpZ25lZCBj
aGFyKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29u
c3QgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0m
LCBjb25zdCB1bnNpZ25lZCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJh
dG9yPDwob3N0cmVhbSYsIGNvbnN0IHNpZ25lZCBjaGFyKik7CiMgNzI3ICIvZ2NjL2RqZS9idWls
ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAv
bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9vc3RyZWFtLnRjYyIgMwp9CiMgNTQ5ICIvZ2NjL2Rq
ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvb3N0cmVhbSIgMiAzCiMgMzkgIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2lzdHJlYW0udGNjIiAyIDMKCm5hbWVzcGFjZSBz
dGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19ub3NraXB3cykKICAgIHsKICAg
ICAgaWYgKF9faW4uZ29vZCgpKQogewogICBpZiAoX19pbi50aWUoKSkKICAgICBfX2luLnRpZSgp
LT5mbHVzaCgpOwogICBpZiAoIV9fbm9za2lwd3MgJiYgKF9faW4uZmxhZ3MoKSAmIGlvc19iYXNl
Ojpza2lwd3MpKQogICAgIHsKICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSB0cmFpdHNf
dHlwZTo6ZW9mKCk7CiAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1Zigp
OwogICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgIGlmIChfX2lu
Ll9NX2NoZWNrX2ZhY2V0KF9faW4uX01fZmN0eXBlKSkKICB3aGlsZSAoIXRyYWl0c190eXBlOjpl
cV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAmJiBfX2luLl9NX2ZjdHlwZS0+aXMoY3R5
cGVfYmFzZTo6c3BhY2UsCiAgICAgICAgICB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykp
KQogICAgX19jID0gX19zYi0+c25leHRjKCk7CgoKCiAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVx
X2ludF90eXBlKF9fYywgX19lb2YpKQogIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7
CgogICAgIH0KIH0KCiAgICAgIGlmIChfX2luLmdvb2QoKSkKIF9NX29rID0gdHJ1ZTsKICAgICAg
ZWxzZQogewogICBfTV9vayA9IGZhbHNlOwogICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWls
Yml0KTsKIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19w
ZikoX19pc3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShf
X2lvc190eXBlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikp
CiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
CiAgICBvcGVyYXRvcj4+KGJvb2wmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0
KTsKICAgICAgIGlmIChfTV9jaGVja19mYWNldCh0aGlzLT5fTV9mbnVtZ2V0KSkKICB0aGlzLT5f
TV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgIHRoaXMt
PnNldHN0YXRlKF9fZXJyKTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRo
aXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihzaG9ydCYgX19uKQog
ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp
CiB7CiAgIHRyeQogICAgIHsKICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jh
c2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgbG9uZyBfX2w7CiAgICAgICBp
ZiAoX01fY2hlY2tfZmFjZXQodGhpcy0+X01fZm51bWdldCkpCiAgdGhpcy0+X01fZm51bWdldC0+
Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbCk7CgoKICAgICAgIGlmICghKF9fZXJyICYg
aW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAmJiAobnVtZXJpY19saW1pdHM8c2hvcnQ+OjptaW4oKSA8
PSBfX2wKICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8c2hvcnQ+OjptYXgoKSkpCiAg
X19uID0gX19sOwogICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6
OmZhaWxiaXQ7CgogICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgIH0KICAgY2F0Y2go
Li4uKQogICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBv
cGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKIHsKICAgdHJ5CiAgICAgewogICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29v
ZGJpdCk7CiAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQodGhpcy0+X01fZm51bWdldCkpCiAgdGhp
cy0+X01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICB0
aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgfQogICBjYXRjaCguLi4pCiAgICAgewoKCiAgICAg
ICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsKICAgICB9CiB9
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW50JiBfX24p
CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2Vy
YikKIHsKICAgdHJ5CiAgICAgewogICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3Nf
YmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICBsb25nIF9fbDsKICAgICAg
IGlmIChfTV9jaGVja19mYWNldCh0aGlzLT5fTV9mbnVtZ2V0KSkKICB0aGlzLT5fTV9mbnVtZ2V0
LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19sKTsKCgogICAgICAgaWYgKCEoX19lcnIg
JiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICYmIChudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSA8
PSBfX2wKICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQogIF9f
biA9IF9fbDsKICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm
YWlsYml0OwoKICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICB9CiAgIGNhdGNoKC4u
LikKICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
IHRocm93OwogICAgIH0KIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl
cmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0
KTsKICAgICAgIGlmIChfTV9jaGVja19mYWNldCh0aGlzLT5fTV9mbnVtZ2V0KSkKICB0aGlzLT5f
TV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgIHRoaXMt
PnNldHN0YXRlKF9fZXJyKTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRo
aXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nJiBfX24pCiAg
ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikK
IHsKICAgdHJ5CiAgICAgewogICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz
ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo
dGhpcy0+X01fZm51bWdldCkpCiAgdGhpcy0+X01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhp
cywgX19lcnIsIF9fbik7CiAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgfQogICBj
YXRjaCguLi4pCiAgICAgewoKCiAgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICB0aHJvdzsKICAgICB9CiB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK
ICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsKICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6
Omdvb2RiaXQpOwogICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KHRoaXMtPl9NX2ZudW1nZXQpKQog
IHRoaXMtPl9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAg
ICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgIH0KICAgY2F0Y2goLi4uKQogICAgIHsKCgog
ICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhyb3c7CiAgICAg
fQogfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25n
IGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAg
ICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBf
X2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgIGlmIChf
TV9jaGVja19mYWNldCh0aGlzLT5fTV9mbnVtZ2V0KSkKICB0aGlzLT5fTV9mbnVtZ2V0LT5nZXQo
KnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJy
KTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3NldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19u
KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl
cmIpCiB7CiAgIHRyeQogICAgIHsKICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9z
X2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgaWYgKF9NX2NoZWNrX2Zh
Y2V0KHRoaXMtPl9NX2ZudW1nZXQpKQogIHRoaXMtPl9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwg
KnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgIH0K
ICAgY2F0Y2goLi4uKQogICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgb3BlcmF0b3I+PihmbG9hdCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJi
KCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsKICAgICAg
IGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdv
b2RiaXQpOwogICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KHRoaXMtPl9NX2ZudW1nZXQpKQogIHRo
aXMtPl9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAg
dGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgIH0KICAgY2F0Y2goLi4uKQogICAgIHsKCgogICAg
ICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICBpZiAoKHRoaXMt
PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhyb3c7CiAgICAgfQog
fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGRvdWJsZSYg
X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChf
X2NlcmIpCiB7CiAgIHRyeQogICAgIHsKICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0g
aW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgaWYgKF9NX2NoZWNr
X2ZhY2V0KHRoaXMtPl9NX2ZudW1nZXQpKQogIHRoaXMtPl9NX2ZudW1nZXQtPmdldCgqdGhpcywg
MCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAg
IH0KICAgY2F0Y2goLi4uKQogICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKIHsKICAgdHJ5CiAgICAg
ewogICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3Nf
YmFzZTo6Z29vZGJpdCk7CiAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQodGhpcy0+X01fZm51bWdl
dCkpCiAgdGhpcy0+X01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7
CiAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgfQogICBjYXRjaCguLi4pCiAgICAg
ewoKCiAgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsK
ICAgICB9CiB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4o
dm9pZComIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAg
ICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBf
X2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgIGlmIChf
TV9jaGVja19mYWNldCh0aGlzLT5fTV9mbnVtZ2V0KSkKICB0aGlzLT5fTV9mbnVtZ2V0LT5nZXQo
KnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJy
KTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3NldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KQog
ICAgewogICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICAgaWYgKF9fY2Vy
YikKICB7CiAgICB0cnkKICAgICAgewogICAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7CiAg
ICAgICAgaWYgKF9fc2JvdXQpCiAgIHsKICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0
aGlzLT5yZGJ1ZigpOwogICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19z
YmluLCBfX3Nib3V0KTsKICAgfQogICAgICAgIGlmICghX19zYm91dCB8fCAhX194dHJjdCkKICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CiAgICBjYXRjaCguLi4p
CiAgICAgIHsKCgogICAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgdGhyb3c7CiAgICAgIH0KICB9CiAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6CiAgICBnZXQodm9pZCkKICAgIHsKICAgICAgY29uc3QgaW50X3R5cGUg
X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGludF90eXBlIF9fYyA9IF9fZW9mOwog
ICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg
ICAgaWYgKF9fY2VyYikKIHsKICAgdHJ5CiAgICAgewogICAgICAgX19jID0gdGhpcy0+cmRidWYo
KS0+c2J1bXBjKCk7CgogICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBf
X2VvZikpCiAgX01fZ2NvdW50ID0gMTsKICAgICAgIGVsc2UKICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgIH0KICAgY2F0Y2goLi4uKQog
ICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhy
b3c7CiAgICAgfQogfQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJf
dHlwZSYgX19jKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJi
KCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKIHsKICAgIHRyeQogICAgIHsKICAgICAg
IGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgaW50X3R5
cGUgX19idWZ2YWwgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICBpZiAoIXRyYWl0
c190eXBlOjplcV9pbnRfdHlwZShfX2J1ZnZhbCwgX19lb2YpKQogIHsKICAgIF9NX2djb3VudCA9
IDE7CiAgICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYnVmdmFsKTsKICB9CiAg
ICAgICBlbHNlCiAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpm
YWlsYml0KTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3Nl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f
biwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogewogICB0cnkKICAg
ICB7CiAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRf
dHlwZShfX2RlbGltKTsKICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6
OmVvZigpOwogICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAg
ICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgIHdoaWxlIChfTV9nY291
bnQgKyAxIDwgX19uCiAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19l
b2YpCiAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQog
IHsKICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgIF9fYyA9
IF9fc2ItPnNuZXh0YygpOwogICAgKytfTV9nY291bnQ7CiAgfQogICAgICAgaWYgKHRyYWl0c190
eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
ZW9mYml0KTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3Nl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAgKl9fcyA9
IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkKIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KF9f
c3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9n
Y291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9f
Y2VyYikKIHsKICAgdHJ5CiAgICAgewogICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0
cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICBjb25zdCBpbnRfdHlwZSBf
X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fdGhp
c19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3RoaXNfc2ItPnNn
ZXRjKCk7CiAgICAgICBjaGFyX3R5cGUgX19jMiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUo
X19jKTsKCiAgICAgICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9m
KQogICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKQogICAg
ICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLnNwdXRjKF9fYzIpLCBfX2VvZikp
CiAgewogICAgKytfTV9nY291bnQ7CiAgICBfX2MgPSBfX3RoaXNfc2ItPnNuZXh0YygpOwogICAg
X19jMiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICB9CiAgICAgICBpZiAodHJh
aXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjplb2ZiaXQpOwogICAgIH0KICAgY2F0Y2goLi4uKQogICAgIHsKCgogICAgICAgdGhpcy0+
X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAgICBp
ZiAoIV9NX2djb3VudCkKIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3Ry
ZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQgPSAw
OwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKIHsK
ICAgICAgICAgIHRyeQogICAgIHsKICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJh
aXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgY29uc3QgaW50X3R5cGUgX19l
b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0g
dGhpcy0+cmRidWYoKTsKICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAg
ICAgd2hpbGUgKF9NX2djb3VudCArIDEgPCBfX24KICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFf
aW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo
X19jLCBfX2lkZWxpbSkpCiAgewogICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlw
ZShfX2MpOwogICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICArK19NX2djb3VudDsKICB9CiAg
ICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgZWxzZQogIHsKICAgIGlmICh0cmFpdHNf
dHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpCiAgICAgIHsKICAgICAgICBfX3NiLT5z
YnVtcGMoKTsKICAgICAgICArK19NX2djb3VudDsKICAgICAgfQogICAgZWxzZQogICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgfQogICAgIH0KICAgY2F0Y2goLi4uKQog
ICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhy
b3c7CiAgICAgfQogfQogICAgICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2Nv
dW50KQogdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6CiAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24sIGludF90eXBlIF9fZGVs
aW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs
IHRydWUpOwogICAgICBpZiAoX19jZXJiICYmIF9fbiA+IDApCiB7CiAgIHRyeQogICAgIHsKICAg
ICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgX19z
dHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICBpbnRfdHlwZSBfX2M7
CgogICAgICAgX19uID0gc3RkOjptaW4oX19uLCBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6
bWF4KCkpOwogICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbgogICAgICAgJiYgIXRyYWl0c190
eXBlOjplcV9pbnRfdHlwZShfX2MgPSBfX3NiLT5zYnVtcGMoKSwgX19lb2YpKQogIHsKICAgICsr
X01fZ2NvdW50OwogICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZGVsaW0p
KQogICAgICBicmVhazsKICB9CiAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9f
YywgX19lb2YpKQogIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgIH0KICAg
Y2F0Y2goLi4uKQogICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwZWVrKHZvaWQpCiAgICB7CiAgICAgIGludF90eXBlIF9f
YyA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsg
X19jID0gdGhpcy0+cmRidWYoKS0+c2dldGMoKTsgfQogICBjYXRjaCguLi4pCiAgICAgewoKCiAg
ICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsKICAgICB9
CiB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkKGNoYXJfdHlwZSogX19z
LCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsK
ICAgICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCktPnNnZXRuKF9fcywgX19uKTsKICAgICAg
IGlmIChfTV9nY291bnQgIT0gX19uKQogIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQg
fCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgfQogICBjYXRjaCguLi4pCiAgICAgewoKCiAgICAg
ICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsKICAgICB9CiB9
CiAgICAgIGVsc2UKIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OgogICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAg
ICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAg
aWYgKF9fY2VyYikKIHsKICAgdHJ5CiAgICAgewoKICAgICAgIHN0cmVhbXNpemUgX19udW0gPSB0
aGlzLT5yZGJ1ZigpLT5pbl9hdmFpbCgpOwogICAgICAgaWYgKF9fbnVtID49IDApCiAgewogICAg
X19udW0gPSBzdGQ6Om1pbihfX251bSwgX19uKTsKICAgIGlmIChfX251bSkKICAgICAgX01fZ2Nv
dW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX251bSk7CiAgfQogICAgICAgZWxzZQog
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgIH0KICAgY2F0Y2goLi4uKQog
ICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhy
b3c7CiAgICAgfQogfQogICAgICBlbHNlCiB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp
dCk7CiAgICAgIHJldHVybiBfTV9nY291bnQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwdXRiYWNrKGNoYXJf
dHlwZSBfX2MpCiAgICB7CgoKICAgICAgX01fZ2NvdW50ID0gMDsKCiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAg
ICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgIF9fc3Ry
ZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgaWYgKCFfX3NiCiAgICB8
fCB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19zYi0+c3B1dGJhY2tjKF9fYyksIF9fZW9mKSkK
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICB9CiAgIGNhdGNoKC4uLikK
ICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRo
cm93OwogICAgIH0KIH0KICAgICAgZWxzZQogdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxi
aXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB1bmdldCh2b2lkKQogICAg
ewoKCiAgICAgIF9NX2djb3VudCA9IDA7CgogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl
KTsKICAgICAgaWYgKF9fY2VyYikKIHsKICAgdHJ5CiAgICAgewogICAgICAgY29uc3QgaW50X3R5
cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBf
X3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgIGlmICghX19zYgogICAgfHwgdHJhaXRzX3R5cGU6
OmVxX2ludF90eXBlKF9fc2ItPnN1bmdldGMoKSwgX19lb2YpKQogIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgIH0KICAgY2F0Y2goLi4uKQogICAgIHsKCgogICAgICAgdGhp
cy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAg
ICBlbHNlCiB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgaW50CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3luYyh2
b2lkKQogICAgewoKICAgICAgaW50IF9fcmV0ID0gLTE7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAgICBfX3N0
cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgIGlmIChfX3NiKQogIHsK
ICAgIGlmIChfX3NiLT5wdWJzeW5jKCkgPT0gLTEpCiAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgZWxzZQogICAgICBfX3JldCA9IDA7CiAgfQogICAgIH0KICAgY2F0
Y2goLi4uKQogICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9
IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6CiAgICB0ZWxsZyh2b2lkKQogICAgewoKICAgICAgcG9zX3R5cGUgX19y
ZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogX19yZXQgPSB0aGlz
LT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjppbik7CiAg
ICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhwb3NfdHlwZSBfX3BvcykK
ICAgIHsKCiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogewoKCiAgIHBvc190eXBlIF9fZXJyID0g
dGhpcy0+cmRidWYoKS0+cHVic2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6OmluKTsKCgogICBpZiAo
X19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZmFpbGJpdCk7CgogfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBz
ZWVrZyhvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kaXIpCiAgICB7CgogICAg
ICBpZiAoIXRoaXMtPmZhaWwoKSkKIHsKCgogICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVm
KCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZGlyLAogICAgICAgICAgIGlvc19iYXNlOjppbik7CgoK
ICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUg
X19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19j
ZXJiKQogewogICB0cnkKICAgICB7IF9faW4uZ2V0KF9fYyk7IH0KICAgY2F0Y2goLi4uKQogICAg
IHsKCgogICAgICAgX19pbi5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlm
ICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93Owog
ICAgIH0KIH0KICAgICAgZWxzZQogX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAg
ICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVy
YXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3Mp
CiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0
cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVh
bWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0
czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg
ICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgc3RyZWFtc2l6ZSBf
X2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9f
Y2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsKCiAg
ICAgICBzdHJlYW1zaXplIF9fbnVtID0gX19pbi53aWR0aCgpOwogICAgICAgaWYgKF9fbnVtID09
IDApCiAgX19udW0gPSBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCk7CgogICAgICAg
Y29uc3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19p
bi5nZXRsb2MoKSk7CiAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigp
OwogICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgIGlu
dF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwg
X19udW0gLSAxCiAgICAgICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAg
ICAgICYmICFfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfVHJhaXRzOjp0b19jaGFyX3R5
cGUoX19jKSkpCiAgewogICAgKl9fcysrID0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAg
ICArK19fZXh0cmFjdGVkOwogICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgfQogICAgICAgaWYg
KF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogIF9faW4uc2V0c3RhdGUoaW9zX2Jh
c2U6OmVvZmJpdCk7CgoKCiAgICAgICAqX19zID0gY2hhcl90eXBlKCk7CgogICAgICAgX19pbi53
aWR0aCgwKTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIF9faW4uX01fc2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsKICAgICB9CiB9CiAgICAgIGlmICghX19l
eHRyYWN0ZWQpCiBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJu
IF9faW47CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJl
YW08X0NoYXJULF9UcmFpdHM+JiBfX2luKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2lu
dF90eXBlOwoKICAgICAgY29uc3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9f
Y3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7CiAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2Yg
PSBfVHJhaXRzOjplb2YoKTsKICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRi
dWYoKTsKICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgd2hpbGUg
KCFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAmJiBfX2N0eXBlLmlzKGN0
eXBlX2Jhc2U6OnNwYWNlLCBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKSkpCiBfX2MgPSBfX3Ni
LT5zbmV4dGMoKTsKCiAgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikp
CiBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAg
ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJh
dG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBl
ZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0
cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0
eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9f
ZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19j
ZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKIHsKICAgX19zdHIuZXJhc2UoKTsK
ICAgc3RyZWFtc2l6ZSBfX3cgPSBfX2luLndpZHRoKCk7CiAgIF9fc2l6ZV90eXBlIF9fbjsKICAg
X19uID0gX193ID4gMCA/IHN0YXRpY19jYXN0PF9fc2l6ZV90eXBlPihfX3cpIDogX19zdHIubWF4
X3NpemUoKTsKCiAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0
eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1Ry
YWl0czo6ZW9mKCk7CiAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAg
IF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgIHdoaWxlIChfX2V4dHJhY3RlZCA8
IF9fbgogICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgJiYgIV9fY3R5
cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpKSkKICAg
ICB7CiAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICsr
X19leHRyYWN0ZWQ7CiAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICB9CiAgIGlmIChf
VHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICBfX2luLnNldHN0YXRlKGlvc19i
YXNlOjplb2ZiaXQpOwogICBfX2luLndpZHRoKDApOwogfQoKCiAgICAgIGlmICghX19leHRyYWN0
ZWQpCiBfX2luLnNldHN0YXRlIChpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICByZXR1cm4gX19p
bjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBn
ZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9fZGVsaW0pCiAg
ICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVh
bV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBf
X2ludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVh
bWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3Ry
ZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKCiAgICAg
IF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IGZh
bHNlOwogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCB0
cnVlKTsKICAgICAgaWYgKF9fY2VyYikKIHsKICAgX19zdHIuZXJhc2UoKTsKICAgX19zaXplX3R5
cGUgX19uID0gX19zdHIubWF4X3NpemUoKTsKCiAgIF9faW50X3R5cGUgX19pZGVsaW0gPSBfVHJh
aXRzOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9f
aW4ucmRidWYoKTsKICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgY29uc3Qg
X19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICBfX3Rlc3RkZWxpbSA9IF9UcmFp
dHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pOwoKICAgd2hpbGUgKF9fZXh0cmFjdGVkIDw9
IF9fbgogICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgJiYgIV9fdGVz
dGRlbGltKQogICAgIHsKICAgICAgIF9fc3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2Mp
OwogICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAg
ICAgX190ZXN0ZGVsaW0gPSBfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKTsKICAg
ICB9CiAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICBfX2luLnNl
dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogfQogICAgICBpZiAoIV9fZXh0cmFjdGVkICYmICFf
X3Rlc3RkZWxpbSkKIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1
cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBj
bGFzcyBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAg
ICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19zdHIpCiAgICB7IHJldHVybiBnZXRs
aW5lKF9faW4sIF9fc3RyLCBfX2luLndpZGVuKCdcbicpKTsgfQoKCgoKCiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0m
IHdzKGlzdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3Ry
ZWFtJiwgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJl
YW0mLCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVh
bSYsIHVuc2lnbmVkIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+
Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3Bl
cmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBzaWduZWQgY2hhciopOwojIDEyMTcgIi9nY2MvZGpl
L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2lzdHJlYW0udGNjIiAzCn0KIyA3NzYgIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAyIDMKIyA0NiAiL2djYy9k
amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0
LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDIgMwoKCgojIDEgIi9nY2MvZGpl
L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvYmFz
aWNfZmlsZS5oIiAxIDMKIyA0MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAvYml0cy9iYXNpY19maWxlLmgiIDMKCgoKCm5hbWVzcGFjZSBz
dGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX2Jhc2ljX2ZpbGU7
CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBfX2Jhc2ljX2ZpbGU8Y2hhcj4KICAgIHsKCiAgICAg
IF9fY19maWxlKiBfTV9jZmlsZTsKCiAgICAgIGJvb2wgX01fY2ZpbGVfY3JlYXRlZDsKCiAgICBw
dWJsaWM6CiAgICAgIF9fYmFzaWNfZmlsZShfX2NfbG9jayogX19sb2NrID0gMCk7CgogICAgICB2
b2lkCiAgICAgIF9NX29wZW5fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlLCBpbnQmIF9f
cF9tb2RlLCBpbnQmIF9fcndfbW9kZSwKICAgICBjaGFyKiBfX2NfbW9kZSk7CgogICAgICBfX2Jh
c2ljX2ZpbGUqCiAgICAgIG9wZW4oY29uc3QgY2hhciogX19uYW1lLCBpb3NfYmFzZTo6b3Blbm1v
ZGUgX19tb2RlLCBpbnQgX19wcm90ID0gMDY2NCk7CgogICAgICBfX2Jhc2ljX2ZpbGUqCiAgICAg
IHN5c19vcGVuKF9fY19maWxlKiBfX2ZpbGUsIGlvc19iYXNlOjpvcGVubW9kZSk7CgogICAgICBf
X2Jhc2ljX2ZpbGUqCiAgICAgIHN5c19vcGVuKGludCBfX2ZkLCBpb3NfYmFzZTo6b3Blbm1vZGUg
X19tb2RlLCBib29sIF9fZGVsKTsKCiAgICAgIGludAogICAgICBzeXNfZ2V0YygpOwoKICAgICAg
aW50CiAgICAgIHN5c191bmdldGMoaW50KTsKCiAgICAgIF9fYmFzaWNfZmlsZSoKICAgICAgY2xv
c2UoKTsKCiAgICAgIGJvb2wKICAgICAgaXNfb3BlbigpIGNvbnN0OwoKICAgICAgaW50CiAgICAg
IGZkKCk7CgogICAgICB+X19iYXNpY19maWxlKCk7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHhz
cHV0bihjb25zdCBjaGFyKiBfX3MsIHN0cmVhbXNpemUgX19uLCBib29sIF9fc3RkaW8pOwoKICAg
ICAgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hhciogX19zLCBzdHJlYW1zaXplIF9fbiwgYm9v
bCBfX3N0ZGlvKTsKCiAgICAgIHN0cmVhbW9mZgogICAgICBzZWVrb2ZmKHN0cmVhbW9mZiBfX29m
ZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksIGJvb2wgX19zdGRpbywKICAgICAgIGlvc19iYXNl
OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCiAgICAg
IHN0cmVhbW9mZgogICAgICBzZWVrcG9zKHN0cmVhbW9mZiBfX3BvcywgYm9vbCBfX3N0ZGlvLAog
ICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNl
OjpvdXQpOwoKICAgICAgaW50CiAgICAgIHN5bmMoKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAg
c2hvd21hbnljX2hlbHBlcihib29sIF9fc3RkaW8pOwogICAgfTsKfQojIDUwICIvZ2NjL2RqZS9i
dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvZnN0cmVhbSIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiMg
NjMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfZmls
ZWJ1ZiA6IHB1YmxpYyBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAg
cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9U
cmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Omlu
dF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3Nf
dHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5
cGUgb2ZmX3R5cGU7CgoKCgoKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5
cGUsIHRyYWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2Zp
bGVidWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19maWxlYnVmX3R5cGU7CiAgICAgIHR5cGVk
ZWYgX19iYXNpY19maWxlPGNoYXI+IF9fZmlsZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IHRyYWl0c190eXBlOjpzdGF0ZV90eXBlIF9fc3RhdGVfdHlwZTsKICAgICAgdHlwZWRlZiBjb2Rl
Y3Z0PGNoYXJfdHlwZSwgY2hhciwgX19zdGF0ZV90eXBlPiBfX2NvZGVjdnRfdHlwZTsKICAgICAg
dHlwZWRlZiBjdHlwZTxjaGFyX3R5cGU+IF9fY3R5cGVfdHlwZTsKCgogICAgICBmcmllbmQgY2xh
c3MgaW9zX2Jhc2U7CgogICAgcHJvdGVjdGVkOgoKCgoKCgoKICAgICAgX19jX2xvY2sgX01fbG9j
azsKCgoKCgoKCiAgICAgIF9fZmlsZV90eXBlIF9NX2ZpbGU7CgoKCgoKCgogICAgICBfX3N0YXRl
X3R5cGUgX01fc3RhdGVfY3VyOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3RhdGVfYmVnOwoKCgoK
CgogICAgICBjaGFyX3R5cGUqIF9NX2J1ZjsKCgoKCgoKICAgICAgc2l6ZV90IF9NX2J1Zl9zaXpl
OwoKCgoKCgoKICAgICAgYm9vbCBfTV9idWZfYWxsb2NhdGVkOwoKCiAgICAgIGJvb2wgX01fbGFz
dF9vdmVyZmxvd2VkOwojIDE0OSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Zz
dHJlYW0iIDMKICAgICAgY2hhcl90eXBlKiBfTV9maWxlcG9zOwojIDE1OSAiL2djYy9kamUvYnVp
bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
L2xpYnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDMKICAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBfU19wYmFja19zaXplID0gMTsKICAgICAgY2hhcl90eXBlIF9NX3BiYWNrW19TX3BiYWNrX3Np
emVdOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOwogICAgICBjaGFyX3R5cGUq
IF9NX3BiYWNrX2VuZF9zYXZlOwogICAgICBib29sIF9NX3BiYWNrX2luaXQ7CgoKCgoKICAgICAg
dm9pZAogICAgICBfTV9jcmVhdGVfcGJhY2soKQogICAgICB7CiBpZiAoIV9NX3BiYWNrX2luaXQp
CiAgIHsKICAgICBzaXplX3QgX19kaXN0ID0gdGhpcy0+X01faW5fZW5kIC0gdGhpcy0+X01faW5f
Y3VyOwogICAgIHNpemVfdCBfX2xlbiA9IHN0ZDo6bWluKF9TX3BiYWNrX3NpemUsIF9fZGlzdCk7
CiAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJhY2ssIHRoaXMtPl9NX2luX2N1ciwgX19sZW4p
OwogICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gdGhpcy0+X01faW5fY3VyOwogICAgIF9NX3BiYWNr
X2VuZF9zYXZlID0gdGhpcy0+X01faW5fZW5kOwogICAgIHRoaXMtPnNldGcoX01fcGJhY2ssIF9N
X3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsKICAgICBfTV9wYmFja19pbml0ID0gdHJ1ZTsKICAg
fQogICAgICB9CgoKCgogICAgICB2b2lkCiAgICAgIF9NX2Rlc3Ryb3lfcGJhY2soKSB0aHJvdygp
CiAgICAgIHsKIGlmIChfTV9wYmFja19pbml0KQogICB7CgogICAgIHNpemVfdCBfX29mZl9jdXIg
PSB0aGlzLT5fTV9pbl9jdXIgLSBfTV9wYmFjazsKCgogICAgIHNpemVfdCBfX29mZl9lbmQgPSAw
OwogICAgIHNpemVfdCBfX3BiYWNrX2xlbiA9IHRoaXMtPl9NX2luX2VuZCAtIF9NX3BiYWNrOwog
ICAgIHNpemVfdCBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSB0aGlzLT5fTV9idWY7
CiAgICAgaWYgKF9fcGJhY2tfbGVuID4gX19zYXZlX2xlbikKICAgICAgIF9fb2ZmX2VuZCA9IF9f
cGJhY2tfbGVuIC0gX19zYXZlX2xlbjsKCiAgICAgdGhpcy0+c2V0Zyh0aGlzLT5fTV9idWYsIF9N
X3BiYWNrX2N1cl9zYXZlICsgX19vZmZfY3VyLAogICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSAr
IF9fb2ZmX2VuZCk7CiAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfX251bGw7CiAgICAgX01fcGJh
Y2tfZW5kX3NhdmUgPSBfX251bGw7CiAgICAgX01fcGJhY2tfaW5pdCA9IGZhbHNlOwogICB9CiAg
ICAgIH0KCiAgICBwdWJsaWM6CgoKCgoKCgogICAgICBiYXNpY19maWxlYnVmKCk7CgoKCgogICAg
ICB2aXJ0dWFsCiAgICAgIH5iYXNpY19maWxlYnVmKCkKICAgICAgewogdGhpcy0+Y2xvc2UoKTsK
IF9NX2J1Zl9zaXplID0gMDsKIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICB9CgoK
CgoKICAgICAgYm9vbAogICAgICBpc19vcGVuKCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBfTV9m
aWxlLmlzX29wZW4oKTsgfQojIDI1MSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl
L2ZzdHJlYW0iIDMKICAgICAgX19maWxlYnVmX3R5cGUqCiAgICAgIG9wZW4oY29uc3QgY2hhciog
X19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKTsKIyAyNjUgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAzCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICBj
bG9zZSgpIHRocm93KCk7CgogICAgcHJvdGVjdGVkOgoKCgoKCiAgICAgIHZvaWQKICAgICAgX01f
YWxsb2NhdGVfaW50ZXJuYWxfYnVmZmVyKCk7CgoKCgoKCiAgICAgIHZvaWQKICAgICAgX01fZGVz
dHJveV9pbnRlcm5hbF9idWZmZXIoKSB0aHJvdygpOwoKCgogICAgICB2aXJ0dWFsIHN0cmVhbXNp
emUKICAgICAgc2hvd21hbnljKCk7CiMgMzA2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu
Y2x1ZGUvZnN0cmVhbSIgMwogICAgICBpbnRfdHlwZQogICAgICBfTV91bmRlcmZsb3coYm9vbCBf
X2J1bXApOwoKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCk7CgoKICAg
ICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1ZmxvdygpOwoKCiAgICAgIHZpcnR1YWwgaW50X3R5
cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsKIyAzMzEg
Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p
Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAzCiAgICAgIHZpcnR1
YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgX19jID0gX1RyYWl0czo6ZW9mKCkp
OwojIDM0NiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDMKICAg
ICAgaW50X3R5cGUKICAgICAgX01fb3ZlcmZsb3coaW50X3R5cGUgX19jID0gX1RyYWl0czo6ZW9m
KCkpOwojIDM1NiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy
OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDMK
ICAgICAgdm9pZAogICAgICBfTV9jb252ZXJ0X3RvX2V4dGVybmFsKGNoYXJfdHlwZSosIHN0cmVh
bXNpemUsIHN0cmVhbXNpemUmLCBzdHJlYW1zaXplJik7CiMgMzcxICIvZ2NjL2RqZS9idWlsZC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli
c3RkYysrLXYzL2luY2x1ZGUvZnN0cmVhbSIgMwogICAgICB2aXJ0dWFsIF9fc3RyZWFtYnVmX3R5
cGUqCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKCiAgICAg
IHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6
OnNlZWtkaXIgX193YXksCiAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jh
c2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7CgoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBz
ZWVrcG9zKHBvc190eXBlIF9fcG9zLAogICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9
IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOwoKCiAgICAgIHZpcnR1YWwgaW50CiAgICAg
IHN5bmMoKQogICAgICB7CiBpbnQgX19yZXQgPSAwOwogY29uc3QgYm9vbCBfX3Rlc3RwdXQgPSB0
aGlzLT5fTV9vdXRfYmVnIDwgdGhpcy0+X01fb3V0X2xpbTsKCiBjb25zdCBib29sIF9fc3luYyA9
IHRoaXMtPl9NX2J1Zl9zaXplIDw9IDE7CgoKCiBpZiAoX190ZXN0cHV0KQogICB7CgogICAgIG9m
Zl90eXBlIF9fb2ZmID0gdGhpcy0+X01fb3V0X2N1ciAtIHRoaXMtPl9NX291dF9saW07CgoKICAg
ICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX292ZXJmbG93KCksIHRyYWl0c190eXBl
Ojplb2YoKSkpCiAgICAgICBfX3JldCA9IC0xOwogICAgIGVsc2UgaWYgKF9fb2ZmKQogICAgICAg
X01fZmlsZS5zZWVrb2ZmKF9fb2ZmLCBpb3NfYmFzZTo6Y3VyLCBfX3N5bmMpOwogICB9CiBlbHNl
CiAgIF9NX2ZpbGUuc3luYygpOwoKIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogcmV0dXJu
IF9fcmV0OwogICAgICB9CgoKICAgICAgdmlydHVhbCB2b2lkCiAgICAgIGltYnVlKGNvbnN0IGxv
Y2FsZSYgX19sb2MpOwoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hh
cl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7CiBzdHJlYW1zaXplIF9fcmV0ID0g
MDsKCiBpZiAodGhpcy0+X01fcGJhY2tfaW5pdCkKICAgewogICAgIHdoaWxlIChfX3JldCA8IF9f
biAmJiB0aGlzLT5fTV9pbl9jdXIgPCB0aGlzLT5fTV9pbl9lbmQpCiAgICAgICB7CiAgKl9fcyA9
ICp0aGlzLT5fTV9pbl9jdXI7CiAgKytfX3JldDsKICArK19fczsKICArK3RoaXMtPl9NX2luX2N1
cjsKICAgICAgIH0KICAgICBfTV9kZXN0cm95X3BiYWNrKCk7CiAgIH0KIGlmIChfX3JldCA8IF9f
bikKICAgX19yZXQgKz0gX19zdHJlYW1idWZfdHlwZTo6eHNnZXRuKF9fcywgX19uIC0gX19yZXQp
OwogcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAg
IHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsKIF9N
X2Rlc3Ryb3lfcGJhY2soKTsKIHJldHVybiBfX3N0cmVhbWJ1Zl90eXBlOjp4c3B1dG4oX19zLCBf
X24pOwogICAgICB9CgoKCgoKCiAgICAgIHZvaWQKICAgICAgX01fb3V0cHV0X3Vuc2hpZnQoKTsK
IyA0NjcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAzCiAgICAg
IHZvaWQKICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUodm9pZCkKICAgICAgeyBfTV9zZXRfZGV0
ZXJtaW5hdGUob2ZmX3R5cGUoMCkpOyB9CgoKCgoKCiAgICAgIHZvaWQKICAgICAgX01fc2V0X2Rl
dGVybWluYXRlKG9mZl90eXBlIF9fb2ZmKQogICAgICB7CiBjb25zdCBib29sIF9fdGVzdGluID0g
dGhpcy0+X01fbW9kZSAmIGlvc19iYXNlOjppbjsKIGNvbnN0IGJvb2wgX190ZXN0b3V0ID0gdGhp
cy0+X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiBpZiAoX190ZXN0aW4pCiAgIHRoaXMtPnNldGco
dGhpcy0+X01fYnVmLCB0aGlzLT5fTV9idWYsIHRoaXMtPl9NX2J1ZiArIF9fb2ZmKTsKIGlmIChf
X3Rlc3RvdXQpCiAgIHsKICAgICB0aGlzLT5zZXRwKHRoaXMtPl9NX2J1ZiwgdGhpcy0+X01fYnVm
ICsgdGhpcy0+X01fYnVmX3NpemUpOwogICAgIHRoaXMtPl9NX291dF9saW0gPSB0aGlzLT5fTV9i
dWYgKyBfX29mZjsKICAgfQogX01fZmlsZXBvcyA9IHRoaXMtPl9NX2J1ZiArIF9fb2ZmOwogICAg
ICB9CgoKCgoKCiAgICAgIGJvb2wKICAgICAgX01faXNfaW5kZXRlcm1pbmF0ZSh2b2lkKQogICAg
ICB7CiBjb25zdCBib29sIF9fdGVzdGluID0gdGhpcy0+X01fbW9kZSAmIGlvc19iYXNlOjppbjsK
IGNvbnN0IGJvb2wgX190ZXN0b3V0ID0gdGhpcy0+X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiBi
b29sIF9fcmV0ID0gZmFsc2U7CgogaWYgKHRoaXMtPl9NX2J1ZikKICAgewogICAgIGlmIChfX3Rl
c3RpbikKICAgICAgIF9fcmV0ID0gdGhpcy0+X01faW5fYmVnID09IHRoaXMtPl9NX2luX2N1cgog
ICYmIHRoaXMtPl9NX2luX2N1ciA9PSB0aGlzLT5fTV9pbl9lbmQ7CiAgICAgaWYgKF9fdGVzdG91
dCkKICAgICAgIF9fcmV0ID0gdGhpcy0+X01fb3V0X2JlZyA9PSB0aGlzLT5fTV9vdXRfY3VyCiAg
JiYgdGhpcy0+X01fb3V0X2N1ciA9PSB0aGlzLT5fTV9vdXRfbGltOwogICB9CiByZXR1cm4gX19y
ZXQ7CiAgICAgIH0KICAgIH07CgoKICB0ZW1wbGF0ZTw+CiAgICBiYXNpY19maWxlYnVmPGNoYXI+
OjppbnRfdHlwZQogICAgYmFzaWNfZmlsZWJ1ZjxjaGFyPjo6X01fdW5kZXJmbG93KGJvb2wgX19i
dW1wKTsKCiAgdGVtcGxhdGU8PgogICAgYmFzaWNfZmlsZWJ1ZjxjaGFyPjo6aW50X3R5cGUKICAg
IGJhc2ljX2ZpbGVidWY8Y2hhcj46OnVuZGVyZmxvdygpOwoKICB0ZW1wbGF0ZTw+CiAgICBiYXNp
Y19maWxlYnVmPGNoYXI+OjppbnRfdHlwZQogICAgYmFzaWNfZmlsZWJ1ZjxjaGFyPjo6dWZsb3co
KTsKIyA1NDQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAzCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1l
IGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVi
dWY8X0NoYXJULCBfVHJhaXRzPjo6dW5kZXJmbG93KCkKICAgIHsgcmV0dXJuIGludF90eXBlKCk7
IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5
cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2lj
X2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6dWZsb3coKQogICAgeyByZXR1cm4gaW50X3R5cGUo
KTsgfQojIDU2MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy
OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBi
YXNpY19pZnN0cmVhbSA6IHB1YmxpYyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAg
IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190
eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw
ZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6
Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5
cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3Ry
ZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9faXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6
CgoKCgoKICAgICAgX19maWxlYnVmX3R5cGUgX01fZmlsZWJ1ZjsKCiAgICBwdWJsaWM6CiMgNTk1
ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMt
aWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvZnN0cmVhbSIgMwogICAgICBiYXNp
Y19pZnN0cmVhbSgpIDogX19pc3RyZWFtX3R5cGUoKSwgX01fZmlsZWJ1ZigpCiAgICAgIHsgdGhp
cy0+aW5pdCgmX01fZmlsZWJ1Zik7IH0KIyA2MDggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMv
aW5jbHVkZS9mc3RyZWFtIiAzCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lmc3RyZWFtKGNv
bnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbikK
ICAgICAgOiBfX2lzdHJlYW1fdHlwZSgpLCBfTV9maWxlYnVmKCkKICAgICAgewogdGhpcy0+aW5p
dCgmX01fZmlsZWJ1Zik7CiB0aGlzLT5vcGVuKF9fcywgX19tb2RlKTsKICAgICAgfQoKCgoKCgoK
ICAgICAgfmJhc2ljX2lmc3RyZWFtKCkKICAgICAgeyB9CiMgNjMyICIvZ2NjL2RqZS9idWlsZC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli
c3RkYysrLXYzL2luY2x1ZGUvZnN0cmVhbSIgMwogICAgICBfX2ZpbGVidWZfdHlwZSoKICAgICAg
cmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90eXBlKj4o
Jl9NX2ZpbGVidWYpOyB9CgoKCgoKICAgICAgYm9vbAogICAgICBpc19vcGVuKCkgeyByZXR1cm4g
X01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0KIyA2NTQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMv
aW5jbHVkZS9mc3RyZWFtIiAzCiAgICAgIHZvaWQKICAgICAgb3Blbihjb25zdCBjaGFyKiBfX3Ms
IGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pCiAgICAgIHsKIGlmICgh
X01fZmlsZWJ1Zi5vcGVuKF9fcywgX19tb2RlIHwgaW9zX2Jhc2U6OmluKSkKICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CgoKCgoKCgogICAgICB2b2lkCiAgICAg
IGNsb3NlKCkKICAgICAgewogaWYgKCFfTV9maWxlYnVmLmNsb3NlKCkpCiAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQogICAgfTsKIyA2ODUgIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC9saWJzdGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW0gOiBwdWJsaWMg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAg
ICAgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVi
dWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5
cGU+IF9fb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CgoKCgoKICAgICAgX19maWxlYnVmX3R5
cGUgX01fZmlsZWJ1ZjsKCiAgICBwdWJsaWM6CiMgNzE3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr
LXYzL2luY2x1ZGUvZnN0cmVhbSIgMwogICAgICBiYXNpY19vZnN0cmVhbSgpOiBfX29zdHJlYW1f
dHlwZSgpLCBfTV9maWxlYnVmKCkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsgfQoj
IDczMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dl
cnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDMKICAgICAg
ZXhwbGljaXQKICAgICAgYmFzaWNfb2ZzdHJlYW0oY29uc3QgY2hhciogX19zLAogICAgICAgaW9z
X2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpvdXR8aW9zX2Jhc2U6OnRydW5jKQog
ICAgICA6IF9fb3N0cmVhbV90eXBlKCksIF9NX2ZpbGVidWYoKQogICAgICB7CiB0aGlzLT5pbml0
KCZfTV9maWxlYnVmKTsKIHRoaXMtPm9wZW4oX19zLCBfX21vZGUpOwogICAgICB9CgoKCgoKCgog
ICAgICB+YmFzaWNfb2ZzdHJlYW0oKQogICAgICB7IH0KIyA3NTYgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAzCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICBy
ZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5cGUqPigm
X01fZmlsZWJ1Zik7IH0KCgoKCgogICAgICBib29sCiAgICAgIGlzX29wZW4oKSB7IHJldHVybiBf
TV9maWxlYnVmLmlzX29wZW4oKTsgfQojIDc3OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p
bmNsdWRlL2ZzdHJlYW0iIDMKICAgICAgdm9pZAogICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywK
ICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6
OnRydW5jKQogICAgICB7CiBpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSB8IGlvc19i
YXNlOjpvdXQpKQogICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIH0K
CgoKCgoKCiAgICAgIHZvaWQKICAgICAgY2xvc2UoKQogICAgICB7CiBpZiAoIV9NX2ZpbGVidWYu
Y2xvc2UoKSkKICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CiAg
ICB9OwojIDgxMCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy
OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBi
YXNpY19mc3RyZWFtIDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAg
IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190
eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw
ZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6
Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5
cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8
Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19p
b3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2lvc3RyZWFtX3R5cGU7CgogICAgcHJp
dmF0ZToKCgoKCgogICAgICBfX2ZpbGVidWZfdHlwZSBfTV9maWxlYnVmOwoKICAgIHB1YmxpYzoK
IyA4NDMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAzCiAgICAg
IGJhc2ljX2ZzdHJlYW0oKQogICAgICA6IF9faW9zdHJlYW1fdHlwZSgpLCBfTV9maWxlYnVmKCkK
ICAgICAgeyB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsgfQojIDg1NSAiL2djYy9kamUvYnVpbGQv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp
YnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDMKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNf
ZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsCiAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUg
PSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICA6IF9faW9zdHJlYW1fdHlwZShf
X251bGwpLCBfTV9maWxlYnVmKCkKICAgICAgewogdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7CiB0
aGlzLT5vcGVuKF9fcywgX19tb2RlKTsKICAgICAgfQoKCgoKCgoKICAgICAgfmJhc2ljX2ZzdHJl
YW0oKQogICAgICB7IH0KIyA4ODAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9m
c3RyZWFtIiAzCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5cGUqPigmX01fZmlsZWJ1Zik7IH0KCgoK
CgogICAgICBib29sCiAgICAgIGlzX29wZW4oKSB7IHJldHVybiBfTV9maWxlYnVmLmlzX29wZW4o
KTsgfQojIDkwMiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy
OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDMK
ICAgICAgdm9pZAogICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywKICAgIGlvc19iYXNlOjpvcGVu
bW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7CiBpZiAo
IV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSkpCiAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpmYWlsYml0KTsKICAgICAgfQoKCgoKCgoKICAgICAgdm9pZAogICAgICBjbG9zZSgpCiAgICAg
IHsKIGlmICghX01fZmlsZWJ1Zi5jbG9zZSgpKQogICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
ZmFpbGJpdCk7CiAgICAgIH0KICAgIH07Cn0KCgoKCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9iaXRzL2ZzdHJlYW0udGNjIiAxIDMKIyAzOSAiL2djYy9kamUvYnVpbGQv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp
YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvZnN0cmVhbS50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNvbnN0IHNp
emVfdAogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYmFja19zaXplOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAg
ICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgX01fYWxsb2NhdGVfaW50ZXJu
YWxfYnVmZmVyKCkKICAgIHsKICAgICAgaWYgKCF0aGlzLT5fTV9idWYgJiYgdGhpcy0+X01fYnVm
X3NpemUpCiB7CgogICB0aGlzLT5fTV9idWYgPSBuZXcgY2hhcl90eXBlW3RoaXMtPl9NX2J1Zl9z
aXplXTsKICAgX01fYnVmX2FsbG9jYXRlZCA9IHRydWU7CiB9CiAgICB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19maWxl
YnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgX01fZGVzdHJveV9pbnRlcm5hbF9idWZmZXIoKSB0
aHJvdygpCiAgICB7CiAgICAgIGlmIChfTV9idWZfYWxsb2NhdGVkKQogewogICBkZWxldGUgW10g
dGhpcy0+X01fYnVmOwogICB0aGlzLT5fTV9idWYgPSBfX251bGw7CiAgIF9NX2J1Zl9hbGxvY2F0
ZWQgPSBmYWxzZTsKICAgdGhpcy0+c2V0ZyhfX251bGwsIF9fbnVsbCwgX19udWxsKTsKICAgdGhp
cy0+c2V0cChfX251bGwsIF9fbnVsbCk7CiB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBiYXNpY19maWxlYnVmKCkgOiBfX3N0cmVhbWJ1Zl90eXBlKCksIF9NX2ZpbGUoJl9N
X2xvY2spLAogICAgX01fc3RhdGVfY3VyKF9fc3RhdGVfdHlwZSgpKSwgX01fc3RhdGVfYmVnKF9f
c3RhdGVfdHlwZSgpKSwKICAgIF9NX2J1ZihfX251bGwpLCBfTV9idWZfc2l6ZSg0MDk2KSwgX01f
YnVmX2FsbG9jYXRlZChmYWxzZSksCiAgICBfTV9sYXN0X292ZXJmbG93ZWQoZmFsc2UpLCBfTV9w
YmFja19jdXJfc2F2ZSgwKSwKICAgIF9NX3BiYWNrX2VuZF9zYXZlKDApLCBfTV9wYmFja19pbml0
KGZhbHNlKQogICAgeyB0aGlzLT5fTV9idWZfdW5pZmllZCA9IHRydWU7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfZmls
ZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX2ZpbGVidWZfdHlwZSoKICAgIGJhc2ljX2ZpbGVidWY8
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9w
ZW5tb2RlIF9fbW9kZSkKICAgIHsKICAgICAgX19maWxlYnVmX3R5cGUgKl9fcmV0ID0gX19udWxs
OwogICAgICBpZiAoIXRoaXMtPmlzX29wZW4oKSkKIHsKICAgX01fZmlsZS5vcGVuKF9fcywgX19t
b2RlKTsKICAgaWYgKHRoaXMtPmlzX29wZW4oKSkKICAgICB7CiAgICAgICBfTV9hbGxvY2F0ZV9p
bnRlcm5hbF9idWZmZXIoKTsKICAgICAgIHRoaXMtPl9NX21vZGUgPSBfX21vZGU7CgoKICAgICAg
IF9NX3NldF9pbmRldGVybWluYXRlKCk7CgogICAgICAgaWYgKChfX21vZGUgJiBpb3NfYmFzZTo6
YXRlKQogICAgJiYgdGhpcy0+c2Vla29mZigwLCBpb3NfYmFzZTo6ZW5kLCBfX21vZGUpIDwgMCkK
ICB7CgogICAgdGhpcy0+Y2xvc2UoKTsKICAgIHJldHVybiBfX3JldDsKICB9CgogICAgICAgX19y
ZXQgPSB0aGlzOwogICAgIH0KIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19m
aWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Ol9fZmlsZWJ1Zl90eXBlKgogICAgYmFzaWNfZmlsZWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGNsb3NlKCkgdGhyb3coKQogICAgewogICAgICBfX2Zp
bGVidWZfdHlwZSogX19yZXQgPSBfX251bGw7CiAgICAgIGlmICh0aGlzLT5pc19vcGVuKCkpCiB7
CiAgIGJvb2wgX190ZXN0ZmFpbCA9IGZhbHNlOwogICB0cnkKICAgICB7CiAgICAgICBjb25zdCBp
bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgIGNvbnN0IGJvb2wgX190
ZXN0cHV0ID0gdGhpcy0+X01fb3V0X2JlZyA8IHRoaXMtPl9NX291dF9saW07CgogICAgICAgaWYg
KF9fdGVzdHB1dAogICAgJiYgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX292ZXJmbG93KF9f
ZW9mKSwgX19lb2YpKQogIF9fdGVzdGZhaWwgPSB0cnVlOwojIDE0MSAiL2djYy9kamUvYnVpbGQv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp
YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvZnN0cmVhbS50Y2MiIDMKICAgICB9CiAgIGNhdGNoKC4u
LikKICAgICB7CiAgICAgICBfX3Rlc3RmYWlsID0gdHJ1ZTsKICAgICB9CgoKICAgdGhpcy0+X01f
bW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsKICAgX01fZGVzdHJveV9pbnRlcm5hbF9idWZm
ZXIoKTsKICAgX01fZGVzdHJveV9wYmFjaygpOwoKICAgaWYgKCFfTV9maWxlLmNsb3NlKCkpCiAg
ICAgX190ZXN0ZmFpbCA9IHRydWU7CgogICBpZiAoIV9fdGVzdGZhaWwpCiAgICAgX19yZXQgPSB0
aGlzOwogfQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgcmV0dXJuIF9f
cmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAg
c2hvd21hbnljKCkKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IC0xOwogICAgICBjb25z
dCBib29sIF9fdGVzdGluID0gdGhpcy0+X01fbW9kZSAmIGlvc19iYXNlOjppbjsKICAgICAgY29u
c3QgbG9jYWxlIF9fbG9jID0gdGhpcy0+Z2V0bG9jKCk7CiAgICAgIGNvbnN0IF9fY29kZWN2dF90
eXBlJiBfX2N2dCA9IHVzZV9mYWNldDxfX2NvZGVjdnRfdHlwZT4oX19sb2MpOwogICAgICBjb25z
dCBib29sIF9fdGVzdHN5bmMgPSB0aGlzLT5fTV9idWZfc2l6ZSA8PSAxOwoKICAgICAgaWYgKF9f
dGVzdGluICYmIHRoaXMtPmlzX29wZW4oKSkKIHsKICAgX19yZXQgPSB0aGlzLT5fTV9pbl9lbmQg
LSB0aGlzLT5fTV9pbl9jdXI7CgoKCiAgIGlmIChfX2N2dC5lbmNvZGluZygpID49IDApCiAgICAg
X19yZXQgKz0gX01fZmlsZS5zaG93bWFueWNfaGVscGVyKF9fdGVzdHN5bmMpIC8gX19jdnQubWF4
X2xlbmd0aCgpOwogfQoKICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgIHJl
dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRf
dHlwZQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBiYWNrZmFpbChp
bnRfdHlwZSBfX2kpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVv
ZigpOwogICAgICBjb25zdCBib29sIF9fdGVzdGluID0gdGhpcy0+X01fbW9kZSAmIGlvc19iYXNl
OjppbjsKCiAgICAgIGlmIChfX3Rlc3RpbikKIHsKICAgY29uc3QgYm9vbCBfX3Rlc3RwYiA9IHRo
aXMtPl9NX2luX2JlZyA8IHRoaXMtPl9NX2luX2N1cjsKICAgY2hhcl90eXBlIF9fYyA9IHRyYWl0
c190eXBlOjp0b19jaGFyX3R5cGUoX19pKTsKICAgY29uc3QgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFp
dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19pLCBfX3JldCk7CgogICBpZiAoX190ZXN0cGIpCiAgICAg
ewogICAgICAgY29uc3QgYm9vbCBfX3Rlc3RvdXQgPSB0aGlzLT5fTV9tb2RlICYgaW9zX2Jhc2U6
Om91dDsKICAgICAgIGNvbnN0IGJvb2wgX190ZXN0ZXEgPSB0cmFpdHNfdHlwZTo6ZXEoX19jLCB0
aGlzLT5fTV9pbl9jdXJbLTFdKTsKCiAgICAgICAtLXRoaXMtPl9NX2luX2N1cjsKICAgICAgIGlm
IChfX3Rlc3RvdXQpCiAgLS10aGlzLT5fTV9vdXRfY3VyOwoKCiAgICAgICBpZiAoIV9fdGVzdGVv
ZiAmJiBfX3Rlc3RlcSkKICBfX3JldCA9IF9faTsKICAgICAgIGVsc2UgaWYgKF9fdGVzdGVvZikK
ICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9faSk7CiAgICAgICBlbHNlCiAgewogICAg
X01fY3JlYXRlX3BiYWNrKCk7CiAgICAqdGhpcy0+X01faW5fY3VyID0gX19jOwogICAgX19yZXQg
PSBfX2k7CiAgfQogICAgIH0KICAgZWxzZQogICAgIHsKCgoKCgogICAgICAgaWYgKHRoaXMtPnNl
ZWtvZmYoLTEsIGlvc19iYXNlOjpjdXIpID49IDApCiAgewogICAgdGhpcy0+dW5kZXJmbG93KCk7
CiAgICBpZiAoIV9fdGVzdGVvZikKICAgICAgewogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVx
KF9fYywgKnRoaXMtPl9NX2luX2N1cikpCiAgIHsKICAgICBfTV9jcmVhdGVfcGJhY2soKTsKICAg
ICAqdGhpcy0+X01faW5fY3VyID0gX19jOwogICB9CiAgICAgICAgX19yZXQgPSBfX2k7CiAgICAg
IH0KICAgIGVsc2UKICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2kpOwogIH0K
ICAgICAgfQogfQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgcmV0dXJu
IF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBl
CiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3ZlcmZsb3coaW50X3R5
cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsK
ICAgICAgY29uc3QgYm9vbCBfX3Rlc3RwdXQgPSB0aGlzLT5fTV9vdXRfY3VyIDwgdGhpcy0+X01f
b3V0X2VuZDsKICAgICAgY29uc3QgYm9vbCBfX3Rlc3RvdXQgPSB0aGlzLT5fTV9tb2RlICYgaW9z
X2Jhc2U6Om91dDsKCiAgICAgIGlmIChfX3Rlc3RvdXQpCiB7CiAgIGlmICh0cmFpdHNfdHlwZTo6
ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgIF9fcmV0ID0gdHJhaXRz
X3R5cGU6Om5vdF9lb2YoX19jKTsKICAgZWxzZSBpZiAoX190ZXN0cHV0KQogICAgIHsKICAgICAg
ICp0aGlzLT5fTV9vdXRfY3VyID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAg
ICAgX01fbW92ZV9vdXRfY3VyKDEpOwogICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2Vv
ZihfX2MpOwogICAgIH0KICAgZWxzZQogICAgIF9fcmV0ID0gdGhpcy0+X01fb3ZlcmZsb3coX19j
KTsKIH0KCiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19y
ZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBfTV9jb252
ZXJ0X3RvX2V4dGVybmFsKF9DaGFyVCogX19pYnVmLCBzdHJlYW1zaXplIF9faWxlbiwKICAgICAg
c3RyZWFtc2l6ZSYgX19lbGVuLCBzdHJlYW1zaXplJiBfX3BsZW4pCiAgICB7CiAgICAgIGNvbnN0
IGJvb2wgX190ZXN0c3luYyA9IHRoaXMtPl9NX2J1Zl9zaXplIDw9IDE7CiAgICAgIGNvbnN0IGxv
Y2FsZSBfX2xvYyA9IHRoaXMtPmdldGxvYygpOwogICAgICBjb25zdCBfX2NvZGVjdnRfdHlwZSYg
X19jdnQgPSB1c2VfZmFjZXQ8X19jb2RlY3Z0X3R5cGU+KF9fbG9jKTsKCiAgICAgIGlmIChfX2N2
dC5hbHdheXNfbm9jb252KCkgJiYgX19pbGVuKQogewogICBfX2VsZW4gKz0gX01fZmlsZS54c3B1
dG4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19pYnVmKSwKICAgICAgIF9faWxlbiwgX190ZXN0
c3luYyk7CiAgIF9fcGxlbiArPSBfX2lsZW47CiB9CiAgICAgIGVsc2UKIHsKCiAgIGludCBfX2V4
dF9tdWx0aXBsaWVyID0gX19jdnQuZW5jb2RpbmcoKTsKICAgaWYgKF9fZXh0X211bHRpcGxpZXIg
PT0gLTEgfHwgX19leHRfbXVsdGlwbGllciA9PSAwKQogICAgIF9fZXh0X211bHRpcGxpZXIgPSBz
aXplb2YoY2hhcl90eXBlKTsKICAgc3RyZWFtc2l6ZSBfX2JsZW4gPSBfX2lsZW4gKiBfX2V4dF9t
dWx0aXBsaWVyOwogICBjaGFyKiBfX2J1ZiA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5f
YWxsb2NhKF9fYmxlbikpOwogICBjaGFyKiBfX2JlbmQ7CiAgIGNvbnN0IGNoYXJfdHlwZSogX19p
ZW5kOwogICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCBfX3I7CiAgIF9fciA9IF9fY3Z0Lm91dChfTV9z
dGF0ZV9jdXIsIF9faWJ1ZiwgX19pYnVmICsgX19pbGVuLAogICAgIF9faWVuZCwgX19idWYsIF9f
YnVmICsgX19ibGVuLCBfX2JlbmQpOwoKICAgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6Om9rIHx8
IF9fciA9PSBjb2RlY3Z0X2Jhc2U6OnBhcnRpYWwpCiAgICAgX19ibGVuID0gX19iZW5kIC0gX19i
dWY7CiAgIGVsc2UgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6Om5vY29udikKICAgICB7CgogICAg
ICAgX19idWYgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2lidWYpOwogICAgICAgX19ibGVu
ID0gX19pbGVuOwogICAgIH0KICAgZWxzZQogICAgIHsKCiAgICAgICBfX2JsZW4gPSAwOwogICAg
IH0KCiAgIGlmIChfX2JsZW4pCiAgICAgewogICAgICAgX19lbGVuICs9IF9NX2ZpbGUueHNwdXRu
KF9fYnVmLCBfX2JsZW4sIF9fdGVzdHN5bmMpOwogICAgICAgX19wbGVuICs9IF9fYmxlbjsKICAg
ICB9CgoKICAgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6OnBhcnRpYWwpCiAgICAgewogICAgICAg
Y29uc3QgY2hhcl90eXBlKiBfX2lyZXN1bWUgPSBfX2llbmQ7CiAgICAgICBzdHJlYW1zaXplIF9f
cmxlbiA9IHRoaXMtPl9NX291dF9saW0gLSBfX2llbmQ7CiAgICAgICBfX3IgPSBfX2N2dC5vdXQo
X01fc3RhdGVfY3VyLCBfX2lyZXN1bWUsIF9faXJlc3VtZSArIF9fcmxlbiwKICAgICAgICAgX19p
ZW5kLCBfX2J1ZiwgX19idWYgKyBfX2JsZW4sIF9fYmVuZCk7CiAgICAgICBpZiAoX19yICE9IGNv
ZGVjdnRfYmFzZTo6ZXJyb3IpCiAgewogICAgX19ybGVuID0gX19iZW5kIC0gX19idWY7CiAgICBf
X2VsZW4gKz0gX01fZmlsZS54c3B1dG4oX19idWYsIF9fcmxlbiwgX190ZXN0c3luYyk7CiAgICBf
X3BsZW4gKz0gX19ybGVuOwogIH0KICAgICB9CiB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0No
YXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBfTV9vdmVyZmxvdyhpbnRfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9f
cmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBjb25zdCBib29sIF9fdGVzdHB1dCA9IHRo
aXMtPl9NX291dF9iZWcgPCB0aGlzLT5fTV9vdXRfbGltOwogICAgICBjb25zdCBib29sIF9fdGVz
dHVuYnVmZmVyZWQgPSBfTV9maWxlLmlzX29wZW4oKSAmJiAhdGhpcy0+X01fYnVmX3NpemU7CiAg
ICAgIGNvbnN0IGJvb2wgX190ZXN0c3luYyA9IHRoaXMtPl9NX2J1Zl9zaXplIDw9IDE7CgogICAg
ICBpZiAoX190ZXN0cHV0IHx8IF9fdGVzdHVuYnVmZmVyZWQpCiB7CgogICBzdHJlYW1zaXplIF9f
ZWxlbiA9IDA7CiAgIHN0cmVhbXNpemUgX19wbGVuID0gMDsKCgoKCiAgIGlmIChfTV9maWxlcG9z
ICYmIF9NX2ZpbGVwb3MgIT0gdGhpcy0+X01fb3V0X2JlZykKICAgICB7CiAgICAgICBvZmZfdHlw
ZSBfX29mZiA9IHRoaXMtPl9NX291dF9iZWcgLSBfTV9maWxlcG9zOwogICAgICAgX01fZmlsZS5z
ZWVrb2ZmKF9fb2ZmLCBpb3NfYmFzZTo6Y3VyLCBfX3Rlc3RzeW5jKTsKICAgICB9CgoKCiAgIGlm
ICghX190ZXN0dW5idWZmZXJlZCkKICAgICBfTV9jb252ZXJ0X3RvX2V4dGVybmFsKHRoaXMtPl9N
X291dF9iZWcsCiAgICAgICB0aGlzLT5fTV9vdXRfbGltIC0gdGhpcy0+X01fb3V0X2JlZywKICAg
ICAgIF9fZWxlbiwgX19wbGVuKTsKCgoKICAgaWYgKF9fdGVzdHVuYnVmZmVyZWQgfHwgKF9fZWxl
biAmJiBfX2VsZW4gPT0gX19wbGVuKSkKICAgICB7CgoKICAgICAgIGlmICghdHJhaXRzX3R5cGU6
OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKSkKICB7CiAgICBjaGFyX3R5cGUg
X19wZW5kaW5nID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgX01fY29udmVy
dF90b19leHRlcm5hbCgmX19wZW5kaW5nLCAxLCBfX2VsZW4sIF9fcGxlbik7CgoKCiAgICBpZiAo
X19lbGVuID09IF9fcGxlbiAmJiBfX2VsZW4pCiAgICAgIHsKICAgICAgICBfTV9zZXRfaW5kZXRl
cm1pbmF0ZSgpOwogICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19jKTsKICAg
ICAgfQogIH0KICAgICAgIGVsc2UgaWYgKCFfTV9maWxlLnN5bmMoKSkKICB7CiAgICBfTV9zZXRf
aW5kZXRlcm1pbmF0ZSgpOwogICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2MpOwog
IH0KICAgICB9CiB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IHRydWU7CiAgICAgIHJldHVy
biBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX3N0cmVh
bWJ1Zl90eXBlKgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNldGJ1
ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIGlmICghdGhpcy0+
aXNfb3BlbigpICYmIF9fcyA9PSAwICYmIF9fbiA9PSAwKQogdGhpcy0+X01fYnVmX3NpemUgPSAw
OwogICAgICBlbHNlIGlmIChfX3MgJiYgX19uKQogewoKCgoKCgogICBfTV9kZXN0cm95X2ludGVy
bmFsX2J1ZmZlcigpOwoKCiAgIHRoaXMtPl9NX2J1ZiA9IF9fczsKICAgdGhpcy0+X01fYnVmX3Np
emUgPSBfX247CiAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiB9CiAgICAgIF9NX2xhc3Rfb3Zl
cmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9f
d2F5LCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQogICAgewogICAgICBwb3NfdHlwZSBfX3Jl
dCA9IHBvc190eXBlKG9mZl90eXBlKC0xKSk7CiAgICAgIGNvbnN0IGJvb2wgX190ZXN0aW4gPSAo
aW9zX2Jhc2U6OmluICYgdGhpcy0+X01fbW9kZSAmIF9fbW9kZSkgIT0gMDsKICAgICAgY29uc3Qg
Ym9vbCBfX3Rlc3RvdXQgPSAoaW9zX2Jhc2U6Om91dCAmIHRoaXMtPl9NX21vZGUgJiBfX21vZGUp
ICE9IDA7CiAgICAgIGNvbnN0IGJvb2wgX190ZXN0c3luYyA9IHRoaXMtPl9NX2J1Zl9zaXplIDw9
IDE7CgogICAgICBpbnQgX193aWR0aCA9IDA7CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jb2RlY3Z0
X3R5cGU+KHRoaXMtPl9NX2J1Zl9sb2NhbGUpKQogICBfX3dpZHRoID0gdXNlX2ZhY2V0PF9fY29k
ZWN2dF90eXBlPih0aGlzLT5fTV9idWZfbG9jYWxlKS5lbmNvZGluZygpOwogICAgICBpZiAoX193
aWR0aCA8IDApCiBfX3dpZHRoID0gMDsKCiAgICAgIGNvbnN0IGJvb2wgX190ZXN0ZmFpbCA9IF9f
b2ZmICE9IDAgJiYgX193aWR0aCA8PSAwOwogICAgICBpZiAodGhpcy0+aXNfb3BlbigpICYmICFf
X3Rlc3RmYWlsICYmIChfX3Rlc3RpbiB8fCBfX3Rlc3RvdXQpKQogewoKICAgX01fZGVzdHJveV9w
YmFjaygpOwoKICAgaWYgKF9fd2F5ICE9IGlvc19iYXNlOjpjdXIgfHwgX19vZmYgIT0gMCkKICAg
ICB7CiAgICAgICBvZmZfdHlwZSBfX2NvbXB1dGVkX29mZiA9IF9fd2lkdGggKiBfX29mZjsKCiAg
ICAgICBjb25zdCBib29sIF9fdGVzdGdldCA9IHRoaXMtPl9NX2luX2JlZyA8IHRoaXMtPl9NX2lu
X2VuZDsKICAgICAgIGNvbnN0IGJvb2wgX190ZXN0cHV0ID0gdGhpcy0+X01fb3V0X2JlZyA8IHRo
aXMtPl9NX291dF9saW07CgoKICAgICAgIGlmIChfX3Rlc3RwdXQgfHwgX01fbGFzdF9vdmVyZmxv
d2VkKQogIHsKCiAgICB0aGlzLT5zeW5jKCk7CgogICAgX01fb3V0cHV0X3Vuc2hpZnQoKTsKICB9
CgogICAgICAgZWxzZSBpZiAoX190ZXN0Z2V0ICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIpCiAg
X19jb21wdXRlZF9vZmYgKz0gdGhpcy0+X01faW5fY3VyIC0gX01fZmlsZXBvczsKCgogICAgICAg
X19yZXQgPSBfTV9maWxlLnNlZWtvZmYoX19jb21wdXRlZF9vZmYsIF9fd2F5LCBfX3Rlc3RzeW5j
LAogICAgICAgICAgX19tb2RlKTsKICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiAgICAg
fQoKCiAgIGVsc2UKICAgICB7CiAgICAgICBwb3NfdHlwZSBfX3RtcCA9IF9NX2ZpbGUuc2Vla29m
ZihfX29mZiwgaW9zX2Jhc2U6OmN1ciwKICAgICAgICAgICAgX190ZXN0c3luYywgX19tb2RlKTsK
ICAgICAgIGlmIChfX3RtcCA+PSAwKQogIHsKCiAgICBfX3JldCA9IF9fdG1wOwogICAgX19yZXQg
Kz0gc3RkOjptYXgodGhpcy0+X01fb3V0X2N1ciwgdGhpcy0+X01faW5fY3VyKQogICAgICAgICAg
ICAgLSBfTV9maWxlcG9zOwogIH0KICAgICB9CiB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9
IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJU
LCBfVHJhaXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6
CiAgICBzZWVrcG9zKHBvc190eXBlIF9fcG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQog
ICAgewoKCiAgICAgIHJldHVybiB0aGlzLT5zZWVrb2ZmKG9mZl90eXBlKF9fcG9zKSwgaW9zX2Jh
c2U6OmJlZywgX19tb2RlKTsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBfTV9vdXRwdXRfdW5zaGlmdCgpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAg
IGNvbnN0IGJvb2wgX190ZXN0YmVnID0gdGhpcy0+X01faW5fY3VyID09IHRoaXMtPl9NX2luX2Jl
ZwogICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy0+X01fb3V0X2N1ciA9PSB0aGlzLT5fTV9v
dXRfYmVnOwoKICAgICAgaWYgKF9fdGVzdGJlZyAmJiB0aGlzLT5fTV9idWZfbG9jYWxlICE9IF9f
bG9jKQogdGhpcy0+X01fYnVmX2xvY2FsZSA9IF9fbG9jOwoKCgoKCiAgICAgIF9NX2xhc3Rfb3Zl
cmZsb3dlZCA9IGZhbHNlOwogICAgfQoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2lj
X2ZpbGVidWY8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lmc3RyZWFtPGNo
YXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vZnN0cmVhbTxjaGFyPjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfZnN0cmVhbTxjaGFyPjsKIyA1NDggIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2ZzdHJlYW0udGNjIiAzCn0KIyA5MzAgIi9nY2Mv
ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAyIDMKIyAzMyAiL2djYy9kamUv
c3JjL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjdfaW8vYmFzaWNfaXN0cmVhbS9zZW50cnkvY2hh
ci8zOTgzLWZzdHJlYW0uY2MiIDIKIyAxICIvZ2NjL2RqZS9zcmMvbGlic3RkYysrLXYzL3Rlc3Rz
dWl0ZS90ZXN0c3VpdGVfaG9va3MuaCIgMQojIDYyICIvZ2NjL2RqZS9zcmMvbGlic3RkYysrLXYz
L3Rlc3RzdWl0ZS90ZXN0c3VpdGVfaG9va3MuaCIKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr
LXYzL2luY2x1ZGUvYml0cy9mdW5jdGV4Y2VwdC5oIiAxCiMgMzYgIi9nY2MvZGplL2J1aWxkL3Bv
d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz
dGRjKystdjMvaW5jbHVkZS9iaXRzL2Z1bmN0ZXhjZXB0LmgiCm5hbWVzcGFjZSBzdGQKewoKICB2
b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQK
ICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZs
b3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25z
dCBjaGFyKiBfX3MpOwp9CiMgNjMgIi9nY2MvZGplL3NyYy9saWJzdGRjKystdjMvdGVzdHN1aXRl
L3Rlc3RzdWl0ZV9ob29rcy5oIiAyCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu
Y2x1ZGUvY2Fzc2VydCIgMQojIDQ3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu
My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv
Y2Fzc2VydCIgMwoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw
MDMwNDI4L2djYy9pbmNsdWRlL2Fzc2VydC5oIiAxIDMgNAojIDU2ICIvZ2NjL2RqZS9idWlsZC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL2Fzc2VydC5oIiAzIDQK
ZXh0ZXJuIHZvaWQgX19hc3NlcnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CiMg
NDkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw
Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jYXNzZXJ0IiAyIDMKIyA2NiAi
L2djYy9kamUvc3JjL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvdGVzdHN1aXRlX2hvb2tzLmgiIDIK
CgoKCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2xpc3QiIDEKIyA2NSAi
L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2xpc3QiIDMKCiMgMSAiL2djYy9kamUv
YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu
My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzYgIi9n
Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKbmFt
ZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2
b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2Fz
dCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBf
X3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2Rv
bWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2Fy
Z3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93
X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA2NyAiL2djYy9kamUvYnVpbGQvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0
ZGMrKy12My9pbmNsdWRlL2xpc3QiIDIgMwoKCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr
LXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAxIDMKIyA2NiAiL2djYy9kamUvYnVpbGQvcG93
ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0
ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2xpc3QuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoK
ICBzdHJ1Y3QgX0xpc3Rfbm9kZV9iYXNlCiAgewogICAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9uZXh0
OwogICAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9wcmV2OwogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBzdHJ1Y3QgX0xpc3Rfbm9kZSA6IHB1YmxpYyBfTGlzdF9ub2RlX2Jhc2UKICB7
CiAgICBfVHAgX01fZGF0YTsKICB9OwojIDk3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h
aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu
Y2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAzCiAgc3RydWN0IF9MaXN0X2l0ZXJhdG9yX2Jhc2UKICB7
CiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm
ZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJh
dG9yX2NhdGVnb3J5OwoKCiAgICBfTGlzdF9ub2RlX2Jhc2UqIF9NX25vZGU7CgogICAgX0xpc3Rf
aXRlcmF0b3JfYmFzZShfTGlzdF9ub2RlX2Jhc2UqIF9feCkKICAgIDogX01fbm9kZShfX3gpCiAg
ICB7IH0KCiAgICBfTGlzdF9pdGVyYXRvcl9iYXNlKCkKICAgIHsgfQoKCiAgICB2b2lkCiAgICBf
TV9pbmNyKCkKICAgIHsgX01fbm9kZSA9IF9NX25vZGUtPl9NX25leHQ7IH0KCgogICAgdm9pZAog
ICAgX01fZGVjcigpCiAgICB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9wcmV2OyB9CgogICAgYm9v
bAogICAgb3BlcmF0b3I9PShjb25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gpIGNvbnN0CiAg
ICB7IHJldHVybiBfTV9ub2RlID09IF9feC5fTV9ub2RlOyB9CgogICAgYm9vbAogICAgb3BlcmF0
b3IhPShjb25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBf
TV9ub2RlICE9IF9feC5fTV9ub2RlOyB9CiAgfTsKIyAxNDIgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9iaXRzL3N0bF9saXN0LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs
IHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBzdHJ1Y3QgX0xpc3RfaXRlcmF0b3Ig
OiBwdWJsaWMgX0xpc3RfaXRlcmF0b3JfYmFzZQogIHsKICAgIHR5cGVkZWYgX0xpc3RfaXRlcmF0
b3I8X1RwLF9UcCYsX1RwKj4gaXRlcmF0b3I7CiAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9U
cCxjb25zdCBfVHAmLGNvbnN0IF9UcCo+IGNvbnN0X2l0ZXJhdG9yOwogICAgdHlwZWRlZiBfTGlz
dF9pdGVyYXRvcjxfVHAsX1JlZixfUHRyPiBfU2VsZjsKCiAgICB0eXBlZGVmIF9UcCB2YWx1ZV90
eXBlOwogICAgdHlwZWRlZiBfUHRyIHBvaW50ZXI7CiAgICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNl
OwogICAgdHlwZWRlZiBfTGlzdF9ub2RlPF9UcD4gX05vZGU7CgogICAgX0xpc3RfaXRlcmF0b3Io
X05vZGUqIF9feCkKICAgIDogX0xpc3RfaXRlcmF0b3JfYmFzZShfX3gpCiAgICB7IH0KCiAgICBf
TGlzdF9pdGVyYXRvcigpCiAgICB7IH0KCiAgICBfTGlzdF9pdGVyYXRvcihjb25zdCBpdGVyYXRv
ciYgX194KQogICAgOiBfTGlzdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9ub2RlKQogICAgeyB9Cgog
ICAgcmVmZXJlbmNlCiAgICBvcGVyYXRvciooKSBjb25zdAogICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8X05vZGUqPihfTV9ub2RlKS0+X01fZGF0YTsgfQoKCiAgICBwb2ludGVyCiAgICBvcGVyYXRv
ci0+KCkgY29uc3QKICAgIHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogICAgX1NlbGYmCiAg
ICBvcGVyYXRvcisrKCkKICAgIHsKICAgICAgdGhpcy0+X01faW5jcigpOwogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogICAgX1NlbGYKICAgIG9wZXJhdG9yKysoaW50KQogICAgewogICAgICBf
U2VsZiBfX3RtcCA9ICp0aGlzOwogICAgICB0aGlzLT5fTV9pbmNyKCk7CiAgICAgIHJldHVybiBf
X3RtcDsKICAgIH0KCiAgICBfU2VsZiYKICAgIG9wZXJhdG9yLS0oKQogICAgewogICAgICB0aGlz
LT5fTV9kZWNyKCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBfU2VsZgogICAgb3Bl
cmF0b3ItLShpbnQpCiAgICB7CiAgICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAgIHRoaXMt
Pl9NX2RlY3IoKTsKICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQogIH07CiMgMjEyICIvZ2NjL2Rq
ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KICAgIGNs
YXNzIF9MaXN0X2FsbG9jX2Jhc2UKICB7CiAgcHVibGljOgogICAgdHlwZWRlZiB0eXBlbmFtZSBf
QWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICAg
IGFsbG9jYXRvcl90eXBlOwoKICAgIGFsbG9jYXRvcl90eXBlCiAgICBnZXRfYWxsb2NhdG9yKCkg
Y29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAgICBfTGlzdF9hbGxvY19iYXNl
KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX25vZGVfYWxsb2NhdG9yKF9fYSkK
ICAgIHsgfQoKICBwcm90ZWN0ZWQ6CiAgICBfTGlzdF9ub2RlPF9UcD4qCiAgICBfTV9nZXRfbm9k
ZSgpCiAgICB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQoKICAgIHZv
aWQKICAgIF9NX3B1dF9ub2RlKF9MaXN0X25vZGU8X1RwPiogX19wKQogICAgeyBfTV9ub2RlX2Fs
bG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KIyAyNDcgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9iaXRzL3N0bF9saXN0LmgiIDMKICAgIHR5cGVuYW1lIF9BbGxvY190cmFp
dHM8X0xpc3Rfbm9kZTxfVHA+LCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAg
ICAgIF9NX25vZGVfYWxsb2NhdG9yOwoKICAgIF9MaXN0X25vZGU8X1RwPiogX01fbm9kZTsKICB9
OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgogICAgY2xh
c3MgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+CiAgewogIHB1YmxpYzoK
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxv
Y2F0b3JfdHlwZQogICAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKCiAgICBhbGxvY2F0b3JfdHlw
ZQogICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0K
CiAgICBfTGlzdF9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIHsgfQoKICBw
cm90ZWN0ZWQ6CgoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfTGlzdF9ub2Rl
PF9UcD4sIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgICBfQWxsb2NfdHlwZTsK
CiAgICBfTGlzdF9ub2RlPF9UcD4qCiAgICBfTV9nZXRfbm9kZSgpCiAgICB7IHJldHVybiBfQWxs
b2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KCiAgICB2b2lkCiAgICBfTV9wdXRfbm9kZShfTGlzdF9u
b2RlPF9UcD4qIF9fcCkKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCAxKTsgfQoK
ICAgIF9MaXN0X25vZGU8X1RwPiogX01fbm9kZTsKICB9OwoKCgoKCgoKICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBfTGlzdF9iYXNlCiAgICA6IHB1
YmxpYyBfTGlzdF9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogIHsK
ICBwdWJsaWM6CiAgICB0eXBlZGVmIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2lu
c3RhbmNlbGVzcz4KICAgICAgICAgICAgX0Jhc2U7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNl
OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgICBfTGlzdF9iYXNlKGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9fYSkKICAgIHsKICAgICAgdGhpcy0+X01f
bm9kZSA9IF9NX2dldF9ub2RlKCk7CiAgICAgIHRoaXMtPl9NX25vZGUtPl9NX25leHQgPSB0aGlz
LT5fTV9ub2RlOwogICAgICB0aGlzLT5fTV9ub2RlLT5fTV9wcmV2ID0gdGhpcy0+X01fbm9kZTsK
ICAgIH0KCgogICAgfl9MaXN0X2Jhc2UoKQogICAgewogICAgICBfX2NsZWFyKCk7CiAgICAgIF9N
X3B1dF9ub2RlKHRoaXMtPl9NX25vZGUpOwogICAgfQoKICAgIHZvaWQKICAgIF9fY2xlYXIoKTsK
ICB9OwojIDM2NSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy
OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2xp
c3QuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2Nh
dG9yPF9UcD4gPgogICAgY2xhc3MgbGlzdCA6IHByb3RlY3RlZCBfTGlzdF9iYXNlPF9UcCwgX0Fs
bG9jPgogIHsKCiAgIAoKICAgIHR5cGVkZWYgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7
CgogIHB1YmxpYzoKICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHZhbHVl
X3R5cGUqIHBvaW50ZXI7CiAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50
ZXI7CiAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0ZXJhdG9yOwog
ICAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsY29uc3QgX1RwJixjb25zdCBfVHAqPiBjb25z
dF9pdGVyYXRvcjsKICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJh
dG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRl
cmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHZhbHVlX3R5cGUm
IHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNl
OwogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlm
ZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUg
YWxsb2NhdG9yX3R5cGU7CgogIHByb3RlY3RlZDoKCiAgICB0eXBlZGVmIF9MaXN0X25vZGU8X1Rw
PiBfTm9kZTsKCgoKCgoKCiAgICB1c2luZyBfQmFzZTo6X01fbm9kZTsKICAgIHVzaW5nIF9CYXNl
OjpfTV9wdXRfbm9kZTsKICAgIHVzaW5nIF9CYXNlOjpfTV9nZXRfbm9kZTsKIyA0MDggIi9nY2Mv
ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4
NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9saXN0LmgiIDMKICAgIF9Ob2Rl
KgogICAgX01fY3JlYXRlX25vZGUoY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgewogICAgICBf
Tm9kZSogX19wID0gX01fZ2V0X25vZGUoKTsKICAgICAgdHJ5IHsKICAgICAgICBfQ29uc3RydWN0
KCZfX3AtPl9NX2RhdGEsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICB7CiAg
ICAgICAgX01fcHV0X25vZGUoX19wKTsKICAgICAgICB0aHJvdzsKICAgICAgfQogICAgICByZXR1
cm4gX19wOwogICAgfQoKCgoKCgoKICAgIF9Ob2RlKgogICAgX01fY3JlYXRlX25vZGUoKQogICAg
ewogICAgICBfTm9kZSogX19wID0gX01fZ2V0X25vZGUoKTsKICAgICAgdHJ5IHsKICAgICAgICBf
Q29uc3RydWN0KCZfX3AtPl9NX2RhdGEpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAg
ewogICAgICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgICAg
cmV0dXJuIF9fcDsKICAgIH0KCiAgcHVibGljOgoKCgoKCiAgICBleHBsaWNpdAogICAgbGlzdChj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2Uo
X19hKSB7IH0KIyA0NjEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw
MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0
bF9saXN0LmgiIDMKICAgIGxpc3Qoc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192
YWx1ZSwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBl
KCkpCiAgICAgIDogX0Jhc2UoX19hKQogICAgICB7IHRoaXMtPmluc2VydChiZWdpbigpLCBfX24s
IF9fdmFsdWUpOyB9CiMgNDczICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0
cy9zdGxfbGlzdC5oIiAzCiAgICBleHBsaWNpdAogICAgbGlzdChzaXplX3R5cGUgX19uKQogICAg
ICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIHsgdGhpcy0+aW5zZXJ0KGJlZ2luKCks
IF9fbiwgdmFsdWVfdHlwZSgpKTsgfQojIDQ4NSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t
YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p
bmNsdWRlL2JpdHMvc3RsX2xpc3QuaCIgMwogICAgbGlzdChjb25zdCBsaXN0JiBfX3gpCiAgICAg
IDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSkKICAgICAgeyB0aGlzLT5pbnNlcnQoYmVnaW4o
KSwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7IH0KIyA1MDIgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj
KystdjMvaW5jbHVkZS9iaXRzL3N0bF9saXN0LmgiIDMKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXJhdG9yPgogICAgICBsaXN0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxs
b2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQmFzZShfX2EpCiAgICAgIHsgdGhpcy0+aW5zZXJ0KGJl
Z2luKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCgoKCgoKICAgIH5saXN0KCkgeyB9CiMgNTIyICIv
Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt
LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAzCiAgICBs
aXN0JgogICAgb3BlcmF0b3I9KGNvbnN0IGxpc3QmIF9feCk7CiMgNTM1ICIvZ2NjL2RqZS9idWls
ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAv
bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lkCiAgICBhc3Np
Z24oc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWwpIHsgX01fZmlsbF9hc3Np
Z24oX19uLCBfX3ZhbCk7IH0KIyA1NTAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu
My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk
ZS9iaXRzL3N0bF9saXN0LmgiIDMKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9y
PgogICAgICB2b2lkCiAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QpCiAgICAgIHsKCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50
ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgICAgX01fYXNz
aWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgICB9CgoKICAg
IGFsbG9jYXRvcl90eXBlCiAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6
OmdldF9hbGxvY2F0b3IoKTsgfQoKCgoKCgogICAgaXRlcmF0b3IKICAgIGJlZ2luKCkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8X05vZGUqPih0aGlzLT5fTV9ub2RlLT5fTV9uZXh0KTsgfQoKCgoKCiAg
ICBjb25zdF9pdGVyYXRvcgogICAgYmVnaW4oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxf
Tm9kZSo+KHRoaXMtPl9NX25vZGUtPl9NX25leHQpOyB9CgoKCgoKICAgIGl0ZXJhdG9yCiAgICBl
bmQoKSB7IHJldHVybiB0aGlzLT5fTV9ub2RlOyB9CgoKCgoKICAgIGNvbnN0X2l0ZXJhdG9yCiAg
ICBlbmQoKSBjb25zdCB7IHJldHVybiB0aGlzLT5fTV9ub2RlOyB9CgoKCgoKICAgIHJldmVyc2Vf
aXRlcmF0b3IKICAgIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9
CgoKCgoKICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgIHJiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKCiAgICByZXZlcnNlX2l0
ZXJhdG9yCiAgICByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoK
CgoKCgogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgcmVuZCgpIGNvbnN0CiAgICB7IHJl
dHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgoKCgoKICAgIGJvb2wKICAg
IGVtcHR5KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+X01fbm9kZS0+X01fbmV4dCA9PSB0aGlzLT5f
TV9ub2RlOyB9CgoKICAgIHNpemVfdHlwZQogICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6
ZGlzdGFuY2UoYmVnaW4oKSwgZW5kKCkpOyB9CgoKICAgIHNpemVfdHlwZQogICAgbWF4X3NpemUo
KSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiMgNjQ4ICIvZ2NjL2RqZS9idWlsZC9w
b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli
c3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lkCiAgICByZXNpemUo
c2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiMgNjYwICIvZ2Nj
L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lk
CiAgICByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpIHsgdGhpcy0+cmVzaXplKF9fbmV3X3Np
emUsIHZhbHVlX3R5cGUoKSk7IH0KCgoKCgoKICAgIHJlZmVyZW5jZQogICAgZnJvbnQoKSB7IHJl
dHVybiAqYmVnaW4oKTsgfQoKCgoKCiAgICBjb25zdF9yZWZlcmVuY2UKICAgIGZyb250KCkgY29u
c3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KCgoKCgogICAgcmVmZXJlbmNlCiAgICBiYWNrKCkgeyBy
ZXR1cm4gKigtLWVuZCgpKTsgfQoKCgoKCiAgICBjb25zdF9yZWZlcmVuY2UKICAgIGJhY2soKSBj
b25zdCB7IHJldHVybiAqKC0tZW5kKCkpOyB9CiMgNzAyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr
LXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lkCiAgICBwdXNoX2Zyb250KGNv
bnN0IHZhbHVlX3R5cGUmIF9feCkgeyB0aGlzLT5pbnNlcnQoYmVnaW4oKSwgX194KTsgfQojIDcx
NiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBj
LWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2xpc3QuaCIgMwog
ICAgdm9pZAogICAgcG9wX2Zyb250KCkgeyB0aGlzLT5lcmFzZShiZWdpbigpKTsgfQojIDcyOCAi
L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli
bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2xpc3QuaCIgMwogICAg
dm9pZAogICAgcHVzaF9iYWNrKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgeyB0aGlzLT5pbnNlcnQo
ZW5kKCksIF9feCk7IH0KIyA3NDIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z
LjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9i
aXRzL3N0bF9saXN0LmgiIDMKICAgIHZvaWQKICAgIHBvcF9iYWNrKCkKICAgIHsKICAgICAgaXRl
cmF0b3IgX190bXAgPSBlbmQoKTsKICAgICAgdGhpcy0+ZXJhc2UoLS1fX3RtcCk7CiAgICB9CiMg
NzYwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2Vy
cGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAz
CiAgICBpdGVyYXRvcgogICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVl
X3R5cGUmIF9feCk7CiMgNzc1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w
LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0
cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lkCiAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVf
dHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19w
b3MsIF9fbiwgX194KTsgfQojIDc5MSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl
L2JpdHMvc3RsX2xpc3QuaCIgMwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+
CiAgICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBf
X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgIHsKCiAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7
CiAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRl
Z3JhbCgpKTsKICAgICAgfQojIDgxNiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z
LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl
L2JpdHMvc3RsX2xpc3QuaCIgMwogICAgaXRlcmF0b3IKICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9z
aXRpb24pOwojIDgzOCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz
MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3Rs
X2xpc3QuaCIgMwogICAgaXRlcmF0b3IKICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJh
dG9yIF9fbGFzdCkKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgICAg
IGVyYXNlKF9fZmlyc3QrKyk7CiAgICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgODU1ICIvZ2Nj
L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp
eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lk
CiAgICBzd2FwKGxpc3QmIF9feCkgeyBzdGQ6OnN3YXAodGhpcy0+X01fbm9kZSwgX194Ll9NX25v
ZGUpOyB9CgoKCgoKCgogICAgdm9pZAogICAgY2xlYXIoKSB7IF9CYXNlOjpfX2NsZWFyKCk7IH0K
CgoKCgogICAgdm9pZAogICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCkK
ICAgIHsKICAgICAgaWYgKCFfX3guZW1wdHkoKSkKICAgICAgICB0aGlzLT5fTV90cmFuc2Zlcihf
X3Bvc2l0aW9uLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICAgIH0KCgoKCiAgICB2b2lkCiAg
ICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYsIGl0ZXJhdG9yIF9faSkKICAgIHsK
ICAgICAgaXRlcmF0b3IgX19qID0gX19pOwogICAgICArK19fajsKICAgICAgaWYgKF9fcG9zaXRp
b24gPT0gX19pIHx8IF9fcG9zaXRpb24gPT0gX19qKSByZXR1cm47CiAgICAgIHRoaXMtPl9NX3Ry
YW5zZmVyKF9fcG9zaXRpb24sIF9faSwgX19qKTsKICAgIH0KCgoKCiAgICB2b2lkCiAgICBzcGxp
Y2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYsIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9y
IF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIHRoaXMt
Pl9NX3RyYW5zZmVyKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgoKCgogICAg
dm9pZAogICAgcmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSk7CgoKCgogICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1ByZWRpY2F0ZT4KICAgICAgdm9pZAogICAgICByZW1vdmVfaWYoX1ByZWRpY2F0ZSk7
CgoKCgogICAgdm9pZAogICAgdW5pcXVlKCk7CgoKCgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp
bmFyeVByZWRpY2F0ZT4KICAgICAgdm9pZAogICAgICB1bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSk7
CgoKCgogICAgdm9pZAogICAgbWVyZ2UobGlzdCYgX194KTsKCgoKCiAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgogICAgICB2b2lkCiAgICAgIG1lcmdlKGxpc3QmLCBf
U3RyaWN0V2Vha09yZGVyaW5nKTsKCgoKCiAgICB2b2lkCiAgICByZXZlcnNlKCkgeyBfX0xpc3Rf
YmFzZV9yZXZlcnNlKHRoaXMtPl9NX25vZGUpOyB9CgoKCgogICAgdm9pZAogICAgc29ydCgpOwoK
CgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAgICAgIHZvaWQK
ICAgICAgc29ydChfU3RyaWN0V2Vha09yZGVyaW5nKTsKCiAgcHJvdGVjdGVkOgoKCgogICAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ludGVnZXI+CiAgICAgIHZvaWQKICAgICAgX01fYXNzaWduX2Rpc3Bh
dGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgICB7CiAg
ICAgICAgX01fZmlsbF9hc3NpZ24oc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX24pLAogICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZhbHVlX3R5cGU+KF9fdmFsKSk7CiAgICAgIH0K
CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgdm9pZAogICAgICBfTV9h
c3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19m
YWxzZV90eXBlKTsKCgoKICAgIHZvaWQKICAgIF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24s
IGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKTsKCgoKCgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
dGVnZXI+CiAgICAgIHZvaWQKICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z
LCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f
dHJ1ZV90eXBlKQogICAgICB7CiAgICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIHN0YXRpY19j
YXN0PHNpemVfdHlwZT4oX19uKSwKICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2
YWx1ZV90eXBlPihfX3gpKTsKICAgICAgfQoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyYXRvcj4KICAgICAgdm9pZAogICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19w
b3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUp
CiAgICAgIHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg
ICAgICAgICBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICAgfQoKCgogICAgdm9pZAogICAg
X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVl
X3R5cGUmIF9feCkKICAgIHsKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbikKICAgICAgICBp
bnNlcnQoX19wb3MsIF9feCk7CiAgICB9CgoKCiAgICB2b2lkCiAgICBfTV90cmFuc2ZlcihpdGVy
YXRvciBfX3Bvc2l0aW9uLCBpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7
CiAgICAgIGlmIChfX3Bvc2l0aW9uICE9IF9fbGFzdCkgewoKICAgICAgICBfX2xhc3QuX01fbm9k
ZS0+X01fcHJldi0+X01fbmV4dCA9IF9fcG9zaXRpb24uX01fbm9kZTsKICAgICAgICBfX2ZpcnN0
Ll9NX25vZGUtPl9NX3ByZXYtPl9NX25leHQgPSBfX2xhc3QuX01fbm9kZTsKICAgICAgICBfX3Bv
c2l0aW9uLl9NX25vZGUtPl9NX3ByZXYtPl9NX25leHQgPSBfX2ZpcnN0Ll9NX25vZGU7CgoKICAg
ICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fdG1wID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2
OwogICAgICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldiA9IF9fbGFzdC5fTV9ub2RlLT5f
TV9wcmV2OwogICAgICAgIF9fbGFzdC5fTV9ub2RlLT5fTV9wcmV2ID0gX19maXJzdC5fTV9ub2Rl
LT5fTV9wcmV2OwogICAgICAgIF9fZmlyc3QuX01fbm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAg
ICB9CiAgICB9CiAgfTsKIyAxMDQ0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu
My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv
Yml0cy9zdGxfbGlzdC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxs
b2M+CiAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYg
X194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgbGlzdDxfVHAsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAg
ICAgIGNvbnN0X2l0ZXJhdG9yIF9fZW5kMSA9IF9feC5lbmQoKTsKICAgICAgY29uc3RfaXRlcmF0
b3IgX19lbmQyID0gX195LmVuZCgpOwoKICAgICAgY29uc3RfaXRlcmF0b3IgX19pMSA9IF9feC5i
ZWdpbigpOwogICAgICBjb25zdF9pdGVyYXRvciBfX2kyID0gX195LmJlZ2luKCk7CiAgICAgIHdo
aWxlIChfX2kxICE9IF9fZW5kMSAmJiBfX2kyICE9IF9fZW5kMiAmJiAqX19pMSA9PSAqX19pMikg
ewogICAgICAgICsrX19pMTsKICAgICAgICArK19faTI7CiAgICAgIH0KICAgICAgcmV0dXJuIF9f
aTEgPT0gX19lbmQxICYmIF9faTIgPT0gX19lbmQyOwogICAgfQojIDEwNzIgIi9nY2MvZGplL2J1
aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu
MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9saXN0LmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwo
Y29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kp
CiAgICB7CiAgICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwg
X194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2lu
KCksIF9feS5lbmQoKSk7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGxpc3Q8X1RwLF9B
bGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShf
X3ggPT0gX195KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9f
eCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlz
dDxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcj49KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0Fs
bG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKGxpc3Q8
X1RwLCBfQWxsb2M+JiBfX3gsIGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3kpCiAgICB7IF9feC5zd2Fw
KF9feSk7IH0KfQojIDcyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw
MDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvbGlzdCIg
MiAzCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4
L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9saXN0LnRj
YyIgMSAzCiMgNjQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0
MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xpc3Qu
dGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg
X0FsbG9jPgogICAgdm9pZAogICAgX0xpc3RfYmFzZTxfVHAsX0FsbG9jPjo6CiAgICBfX2NsZWFy
KCkKICAgIHsKICAgICAgdHlwZWRlZiBfTGlzdF9ub2RlPF9UcD4gX05vZGU7CiAgICAgIF9Ob2Rl
KiBfX2N1ciA9IHN0YXRpY19jYXN0PF9Ob2RlKj4odGhpcy0+X01fbm9kZS0+X01fbmV4dCk7CiAg
ICAgIHdoaWxlIChfX2N1ciAhPSB0aGlzLT5fTV9ub2RlKQogICAgICB7CiAgICAgICAgX05vZGUq
IF9fdG1wID0gX19jdXI7CiAgICAgICAgX19jdXIgPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fY3Vy
LT5fTV9uZXh0KTsKICAgICAgICBfRGVzdHJveSgmX190bXAtPl9NX2RhdGEpOwogICAgICAgIF9N
X3B1dF9ub2RlKF9fdG1wKTsKICAgICAgfQogICAgICB0aGlzLT5fTV9ub2RlLT5fTV9uZXh0ID0g
dGhpcy0+X01fbm9kZTsKICAgICAgdGhpcy0+X01fbm9kZS0+X01fcHJldiA9IHRoaXMtPl9NX25v
ZGU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAg
dHlwZW5hbWUgbGlzdDxfVHAsX0FsbG9jPjo6aXRlcmF0b3IKICAgIGxpc3Q8X1RwLF9BbGxvYz46
OgogICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkK
ICAgIHsKICAgICAgX05vZGUqIF9fdG1wID0gX01fY3JlYXRlX25vZGUoX194KTsKICAgICAgX190
bXAtPl9NX25leHQgPSBfX3Bvc2l0aW9uLl9NX25vZGU7CiAgICAgIF9fdG1wLT5fTV9wcmV2ID0g
X19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9N
X3ByZXYtPl9NX25leHQgPSBfX3RtcDsKICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2
ID0gX190bXA7CiAgICAgIHJldHVybiBfX3RtcDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBsaXN0PF9UcCxfQWxsb2M+OjppdGVy
YXRvcgogICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9u
KQogICAgewogICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fbmV4dF9ub2RlID0gX19wb3NpdGlvbi5f
TV9ub2RlLT5fTV9uZXh0OwogICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fcHJldl9ub2RlID0gX19w
b3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICBfTm9kZSogX19uID0gc3RhdGljX2Nhc3Q8
X05vZGUqPihfX3Bvc2l0aW9uLl9NX25vZGUpOwogICAgICBfX3ByZXZfbm9kZS0+X01fbmV4dCA9
IF9fbmV4dF9ub2RlOwogICAgICBfX25leHRfbm9kZS0+X01fcHJldiA9IF9fcHJldl9ub2RlOwog
ICAgICBfRGVzdHJveSgmX19uLT5fTV9kYXRhKTsKICAgICAgX01fcHV0X25vZGUoX19uKTsKICAg
ICAgcmV0dXJuIGl0ZXJhdG9yKHN0YXRpY19jYXN0PF9Ob2RlKj4oX19uZXh0X25vZGUpKTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAg
ICBsaXN0PF9UcCxfQWxsb2M+OjoKICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29u
c3QgdmFsdWVfdHlwZSYgX194KQogICAgewogICAgICBpdGVyYXRvciBfX2kgPSBiZWdpbigpOwog
ICAgICBzaXplX3R5cGUgX19sZW4gPSAwOwogICAgICBmb3IgKCA7IF9faSAhPSBlbmQoKSAmJiBf
X2xlbiA8IF9fbmV3X3NpemU7ICsrX19pLCArK19fbGVuKQogICAgICAgIDsKICAgICAgaWYgKF9f
bGVuID09IF9fbmV3X3NpemUpCiAgICAgICAgZXJhc2UoX19pLCBlbmQoKSk7CiAgICAgIGVsc2UK
ICAgICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBfX2xlbiwgX194KTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBsaXN0PF9UcCxfQWxs
b2M+JgogICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICBvcGVyYXRvcj0oY29uc3QgbGlzdCYgX194
KQogICAgewogICAgICBpZiAodGhpcyAhPSAmX194KQogICAgICB7CiAgICAgICAgaXRlcmF0b3Ig
X19maXJzdDEgPSBiZWdpbigpOwogICAgICAgIGl0ZXJhdG9yIF9fbGFzdDEgPSBlbmQoKTsKICAg
ICAgICBjb25zdF9pdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogICAgICAgIGNvbnN0
X2l0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICAgICpfX2ZpcnN0MSsrID0g
Kl9fZmlyc3QyKys7CiAgICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICBl
cmFzZShfX2ZpcnN0MSwgX19sYXN0MSk7CiAgICAgICAgZWxzZQogICAgICAgICAgaW5zZXJ0KF9f
bGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAog
ICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICBfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBj
b25zdCB2YWx1ZV90eXBlJiBfX3ZhbCkKICAgIHsKICAgICAgaXRlcmF0b3IgX19pID0gYmVnaW4o
KTsKICAgICAgZm9yICggOyBfX2kgIT0gZW5kKCkgJiYgX19uID4gMDsgKytfX2ksIC0tX19uKQog
ICAgICAgICpfX2kgPSBfX3ZhbDsKICAgICAgaWYgKF9fbiA+IDApCiAgICAgICAgaW5zZXJ0KGVu
ZCgpLCBfX24sIF9fdmFsKTsKICAgICAgZWxzZQogICAgICAgIGVyYXNlKF9faSwgZW5kKCkpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgICB2b2lkCiAgICAgIGxpc3Q8X1RwLF9BbGxv
Yz46OgogICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0MiwgX0lucHV0
SXRlciBfX2xhc3QyLCBfX2ZhbHNlX3R5cGUpCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX2Zp
cnN0MSA9IGJlZ2luKCk7CiAgICAgICAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogICAgICAg
IGZvciAoOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7ICsrX19m
aXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgICAqX19maXJzdDEgPSAqX19maXJzdDI7CiAgICAg
ICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICBlcmFzZShfX2ZpcnN0MSwgX19s
YXN0MSk7CiAgICAgICAgZWxzZQogICAgICAgICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmlyc3QyLCBf
X2xhc3QyKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHZvaWQKICAgIGxpc3Q8X1RwLF9BbGxvYz46OgogICAgcmVtb3ZlKGNvbnN0IHZhbHVl
X3R5cGUmIF9fdmFsdWUpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwog
ICAgICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAgICAr
K19fbmV4dDsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgICAgIGVyYXNl
KF9fZmlyc3QpOwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBsaXN0PF9U
cCxfQWxsb2M+OjoKICAgIHVuaXF1ZSgpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSBi
ZWdpbigpOwogICAgICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KSByZXR1cm47CiAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAg
IHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCiAgICAgIHsKICAgICAgICBpZiAoKl9fZmlyc3Qg
PT0gKl9fbmV4dCkKICAgICAgICAgIGVyYXNlKF9fbmV4dCk7CiAgICAgICAgZWxzZQogICAgICAg
ICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgICBfX25leHQgPSBfX2ZpcnN0OwogICAgICB9CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAog
ICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICBtZXJnZShsaXN0JiBfX3gpCiAgICB7CiAgICAgIGl0
ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICAgICAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgp
OwogICAgICBpdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogICAgICBpdGVyYXRvciBf
X2xhc3QyID0gX194LmVuZCgpOwogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
X2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAg
ICAgICAgewogICAgICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7CiAgICAgICAgICBf
TV90cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19uZXh0KTsKICAgICAgICAgIF9fZmly
c3QyID0gX19uZXh0OwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmlyc3Qx
OwogICAgICBpZiAoX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBfTV90cmFuc2ZlcihfX2xh
c3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICB9CgoKICBpbmxpbmUgdm9pZAogIF9fTGlzdF9i
YXNlX3JldmVyc2UoX0xpc3Rfbm9kZV9iYXNlKiBfX3ApCiAgewogICAgX0xpc3Rfbm9kZV9iYXNl
KiBfX3RtcCA9IF9fcDsKICAgIGRvIHsKICAgICAgc3RkOjpzd2FwKF9fdG1wLT5fTV9uZXh0LCBf
X3RtcC0+X01fcHJldik7CiAgICAgIF9fdG1wID0gX190bXAtPl9NX3ByZXY7CiAgICB9IHdoaWxl
IChfX3RtcCAhPSBfX3ApOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB2b2lkCiAgICBsaXN0PF9UcCxfQWxsb2M+OjoKICAgIHNvcnQoKQogICAgewoK
ICAgICAgaWYgKHRoaXMtPl9NX25vZGUtPl9NX25leHQgIT0gdGhpcy0+X01fbm9kZQogICAmJiB0
aGlzLT5fTV9ub2RlLT5fTV9uZXh0LT5fTV9uZXh0ICE9IHRoaXMtPl9NX25vZGUpCiAgICAgIHsK
ICAgICAgICBsaXN0IF9fY2Fycnk7CiAgICAgICAgbGlzdCBfX2NvdW50ZXJbNjRdOwogICAgICAg
IGludCBfX2ZpbGwgPSAwOwogICAgICAgIHdoaWxlICghZW1wdHkoKSkKICAgICAgICB7CiAgICAg
ICAgICBfX2NhcnJ5LnNwbGljZShfX2NhcnJ5LmJlZ2luKCksICp0aGlzLCBiZWdpbigpKTsKICAg
ICAgICAgIGludCBfX2kgPSAwOwogICAgICAgICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2Nv
dW50ZXJbX19pXS5lbXB0eSgpKQogICAgICAgICAgewogICAgICAgICAgICBfX2NvdW50ZXJbX19p
XS5tZXJnZShfX2NhcnJ5KTsKICAgICAgICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2kr
K10pOwogICAgICAgICAgfQogICAgICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsK
ICAgICAgICAgIGlmIChfX2kgPT0gX19maWxsKSArK19fZmlsbDsKICAgICAgICB9CgogICAgICAg
IGZvciAoaW50IF9faSA9IDE7IF9faSA8IF9fZmlsbDsgKytfX2kpCiAgICAgICAgICBfX2NvdW50
ZXJbX19pXS5tZXJnZShfX2NvdW50ZXJbX19pLTFdKTsKICAgICAgICBzd2FwKF9fY291bnRlcltf
X2ZpbGwtMV0pOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICAgIHZvaWQK
ICAgICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICAgIHJlbW92ZV9pZihfUHJlZGljYXRlIF9fcHJl
ZCkKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogICAgICAgIGl0
ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkK
ICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgICAg
KytfX25leHQ7CiAgICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgZXJhc2UoX19maXJzdCk7
CiAgICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICAgIH0KICAgICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBf
QmluYXJ5UHJlZGljYXRlPgogICAgICB2b2lkCiAgICAgIGxpc3Q8X1RwLF9BbGxvYz46OgogICAg
ICB1bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgICB7CiAgICAgICAg
aXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAgICAgaXRlcmF0b3IgX19sYXN0ID0gZW5k
KCk7CiAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgICAgaXRlcmF0
b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQog
ICAgICAgIHsKICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkK
ICAgICAgICAgICAgZXJhc2UoX19uZXh0KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19m
aXJzdCA9IF9fbmV4dDsKICAgICAgICAgIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgICAgfQogICAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxh
dGUgPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAgICAgIHZvaWQKICAgICAgbGlzdDxf
VHAsX0FsbG9jPjo6CiAgICAgIG1lcmdlKGxpc3QmIF9feCwgX1N0cmljdFdlYWtPcmRlcmluZyBf
X2NvbXApCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgICAg
ICAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QyID0g
X194LmJlZ2luKCk7CiAgICAgICAgaXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQoKTsKICAgICAg
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAg
ICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICB7CiAgICAg
ICAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3QyOwogICAgICAgICAgICBfTV90cmFuc2Zl
cihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19uZXh0KTsKICAgICAgICAgICAgX19maXJzdDIgPSBf
X25leHQ7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgICsrX19maXJzdDE7
CiAgICAgICAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIpIF9NX3RyYW5zZmVyKF9fbGFzdDEsIF9f
Zmlyc3QyLCBfX2xhc3QyKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgog
ICAgdm9pZAogICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICBzb3J0KF9TdHJpY3RXZWFrT3JkZXJp
bmcgX19jb21wKQogICAgewoKICAgICAgaWYgKHRoaXMtPl9NX25vZGUtPl9NX25leHQgIT0gdGhp
cy0+X01fbm9kZSAmJgogICB0aGlzLT5fTV9ub2RlLT5fTV9uZXh0LT5fTV9uZXh0ICE9IHRoaXMt
Pl9NX25vZGUpCiAgICAgIHsKICAgICAgICBsaXN0IF9fY2Fycnk7CiAgICAgICAgbGlzdCBfX2Nv
dW50ZXJbNjRdOwogICAgICAgIGludCBfX2ZpbGwgPSAwOwogICAgICAgIHdoaWxlICghZW1wdHko
KSkKICAgICAgICB7CiAgICAgICAgICBfX2NhcnJ5LnNwbGljZShfX2NhcnJ5LmJlZ2luKCksICp0
aGlzLCBiZWdpbigpKTsKICAgICAgICAgIGludCBfX2kgPSAwOwogICAgICAgICAgd2hpbGUoX19p
IDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKQogICAgICAgICAgewogICAgICAg
ICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NhcnJ5LCBfX2NvbXApOwogICAgICAgICAgICBf
X2NhcnJ5LnN3YXAoX19jb3VudGVyW19faSsrXSk7CiAgICAgICAgICB9CiAgICAgICAgICBfX2Nh
cnJ5LnN3YXAoX19jb3VudGVyW19faV0pOwogICAgICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpICsr
X19maWxsOwogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19maWxs
OyArK19faSkKICAgICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltfX2ktMV0s
IF9fY29tcCk7CiAgICAgICAgc3dhcChfX2NvdW50ZXJbX19maWxsLTFdKTsKICAgICAgfQogICAg
fQp9CiMgNzUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv
cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9saXN0IiAyIDMKIyA3
MSAiL2djYy9kamUvc3JjL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvdGVzdHN1aXRlX2hvb2tzLmgi
IDIKCgpuYW1lc3BhY2UgX19nbnVfY3h4X3Rlc3QKewojIDg2ICIvZ2NjL2RqZS9zcmMvbGlic3Rk
YysrLXYzL3Rlc3RzdWl0ZS90ZXN0c3VpdGVfaG9va3MuaCIKICBleHRlcm4gdm9pZAogIHNldF9t
ZW1vcnlfbGltaXRzKGZsb2F0IF9fc2l6ZSA9IDE2LjApOwoKCgogIHZvaWQKICB2ZXJpZnlfZGVt
YW5nbGUoY29uc3QgY2hhciogbWFuZ2xlZCwgY29uc3QgY2hhciogd2FudGVkKTsKCgoKCgogIHR5
cGVkZWYgdm9pZCAoKnRlc3RfZnVuYykgKHZvaWQpOwogIHR5cGVkZWYgc3RkOjpsaXN0PHRlc3Rf
ZnVuYz4gZnVuY19jYWxsYmFjazsKCgogIHZvaWQKICBydW5fdGVzdHNfd3JhcHBlZF9sb2NhbGUo
Y29uc3QgY2hhciosIGNvbnN0IGZ1bmNfY2FsbGJhY2smKTsKCgogIHZvaWQKICBydW5fdGVzdHNf
d3JhcHBlZF9lbnYoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBmdW5jX2NhbGxiYWNr
Jik7CgoKICBzdGQ6OmxvY2FsZQogIHRyeV9uYW1lZF9sb2NhbGUoY29uc3QgY2hhciogbmFtZSk7
CgoKICBzdHJ1Y3QgcG9kX2NoYXIKICB7CiAgICB1bnNpZ25lZCBjaGFyIGM7CiAgfTsKCiAgc3Ry
dWN0IHBvZF9pbnQKICB7CiAgICBpbnQgaTsKICB9OwoKICBzdHJ1Y3QgcG9kX3Vuc2lnbmVkX2lu
dAogIHsKICAgIHVuc2lnbmVkIGludCBpOwogIH07CgogIHN0cnVjdCBwb2RfbG9uZwogIHsKICAg
IHVuc2lnbmVkIGxvbmcgaTsKICB9OwoKICBzdHJ1Y3Qgc3RhdGUKICB7CiAgICB1bnNpZ25lZCBs
b25nIGw7CiAgICB1bnNpZ25lZCBsb25nIGwyOwogIH07CgoKICBzdHJ1Y3QgY291bnRlcgogIHsK
CgoKICAgIHR5cGVkZWYgc2lnbmVkIGludCBzaXplX3R5cGU7CiAgICBzdGF0aWMgc2l6ZV90eXBl
IGNvdW50OwogICAgY291bnRlcigpIHsgKytjb3VudDsgfQogICAgY291bnRlciAoY29uc3QgY291
bnRlciYpIHsgKytjb3VudDsgfQogICAgfmNvdW50ZXIoKSB7IC0tY291bnQ7IH0KICB9OwoKCgoK
CiAgY2xhc3MgY29weV9jb25zdHJ1Y3RvcgogIHsKICBwdWJsaWM6CiAgICBzdGF0aWMgdW5zaWdu
ZWQgaW50CiAgICBjb3VudCgpIHsgcmV0dXJuIGNvdW50XzsgfQoKICAgIHN0YXRpYyB2b2lkCiAg
ICBtYXJrX2NhbGwoKQogICAgewogICAgICBjb3VudF8rKzsKICAgICAgaWYgKGNvdW50XyA9PSB0
aHJvd19vbl8pCiB0aHJvdyAiY29weSBjb25zdHJ1Y3RvciBleGNlcHRpb24iOwogICAgfQoKICAg
IHN0YXRpYyB2b2lkCiAgICByZXNldCgpCiAgICB7CiAgICAgIGNvdW50XyA9IDA7CiAgICAgIHRo
cm93X29uXyA9IDA7CiAgICB9CgogICAgc3RhdGljIHZvaWQKICAgIHRocm93X29uKHVuc2lnbmVk
IGludCBjb3VudCkgeyB0aHJvd19vbl8gPSBjb3VudDsgfQoKICBwcml2YXRlOgogICAgc3RhdGlj
IHVuc2lnbmVkIGludCBjb3VudF87CiAgICBzdGF0aWMgdW5zaWduZWQgaW50IHRocm93X29uXzsK
ICB9OwoKCgogIGNsYXNzIGFzc2lnbm1lbnRfb3BlcmF0b3IKICB7CiAgcHVibGljOgogICAgc3Rh
dGljIHVuc2lnbmVkIGludAogICAgY291bnQoKSB7IHJldHVybiBjb3VudF87IH0KCiAgICBzdGF0
aWMgdm9pZAogICAgbWFya19jYWxsKCkKICAgIHsKICAgICAgY291bnRfKys7CiAgICAgIGlmIChj
b3VudF8gPT0gdGhyb3dfb25fKQogdGhyb3cgImFzc2lnbm1lbnQgb3BlcmF0b3IgZXhjZXB0aW9u
IjsKICAgIH0KCiAgICBzdGF0aWMgdm9pZAogICAgcmVzZXQoKQogICAgewogICAgICBjb3VudF8g
PSAwOwogICAgICB0aHJvd19vbl8gPSAwOwogICAgfQoKICAgIHN0YXRpYyB2b2lkCiAgICB0aHJv
d19vbih1bnNpZ25lZCBpbnQgY291bnQpIHsgdGhyb3dfb25fID0gY291bnQ7IH0KCiAgcHJpdmF0
ZToKICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgY291bnRfOwogICAgc3RhdGljIHVuc2lnbmVkIGlu
dCB0aHJvd19vbl87CiAgfTsKCgogIGNsYXNzIGRlc3RydWN0b3IKICB7CiAgcHVibGljOgogICAg
c3RhdGljIHVuc2lnbmVkIGludAogICAgY291bnQoKSB7IHJldHVybiBfTV9jb3VudDsgfQoKICAg
IHN0YXRpYyB2b2lkCiAgICBtYXJrX2NhbGwoKSB7IF9NX2NvdW50Kys7IH0KCiAgICBzdGF0aWMg
dm9pZAogICAgcmVzZXQoKSB7IF9NX2NvdW50ID0gMDsgfQoKICBwcml2YXRlOgogICAgc3RhdGlj
IHVuc2lnbmVkIGludCBfTV9jb3VudDsKICB9OwoKCgoKICBjbGFzcyBjb3B5X3RyYWNrZXIKICB7
CiAgcHVibGljOgoKCgogICAgY29weV90cmFja2VyKGludCBpZCA9IG5leHRfaWRfLS0sIGJvb2wg
dGhyb3dfb25fY29weSA9IGZhbHNlKQogICAgOiBpZF8oaWQpICwgdGhyb3dfb25fY29weV8odGhy
b3dfb25fY29weSkgeyB9CgoKCiAgICBjb3B5X3RyYWNrZXIoY29uc3QgY29weV90cmFja2VyJiBy
aHMpCiAgICA6IGlkXyhyaHMuaWQoKSksIHRocm93X29uX2NvcHlfKHJocy50aHJvd19vbl9jb3B5
XykKICAgIHsKICAgICAgaWYgKHRocm93X29uX2NvcHlfKQogY29weV9jb25zdHJ1Y3Rvcjo6dGhy
b3dfb24oY29weV9jb25zdHJ1Y3Rvcjo6Y291bnQoKSArIDEpOwogICAgICBjb3B5X2NvbnN0cnVj
dG9yOjptYXJrX2NhbGwoKTsKICAgIH0KCgoKCgogICAgY29weV90cmFja2VyJgogICAgb3BlcmF0
b3I9KGNvbnN0IGNvcHlfdHJhY2tlciYgcmhzKQogICAgewogICAgICBpZF8gPSByaHMuaWQoKTsK
ICAgICAgaWYgKHJocy50aHJvd19vbl9jb3B5XykKICAgICAgICBhc3NpZ25tZW50X29wZXJhdG9y
Ojp0aHJvd19vbihhc3NpZ25tZW50X29wZXJhdG9yOjpjb3VudCgpICsgMSk7CiAgICAgIGFzc2ln
bm1lbnRfb3BlcmF0b3I6Om1hcmtfY2FsbCgpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
ICAgfmNvcHlfdHJhY2tlcigpCiAgICB7IGRlc3RydWN0b3I6Om1hcmtfY2FsbCgpOyB9CgogICAg
aW50CiAgICBpZCgpIGNvbnN0IHsgcmV0dXJuIGlkXzsgfQoKICBwcml2YXRlOgogICAgaW50IGlk
XzsKICAgIGNvbnN0IGJvb2wgdGhyb3dfb25fY29weV87CgogIHB1YmxpYzoKICAgIHN0YXRpYyB2
b2lkCiAgICByZXNldCgpCiAgICB7CiAgICAgIGNvcHlfY29uc3RydWN0b3I6OnJlc2V0KCk7CiAg
ICAgIGFzc2lnbm1lbnRfb3BlcmF0b3I6OnJlc2V0KCk7CiAgICAgIGRlc3RydWN0b3I6OnJlc2V0
KCk7CiAgICB9CgoKICAgIHN0YXRpYyBpbnQKICAgIGNvcHlDb3VudCgpCiAgICB7IHJldHVybiBj
b3B5X2NvbnN0cnVjdG9yOjpjb3VudCgpOyB9CgoKICAgIHN0YXRpYyBpbnQKICAgIGR0b3JDb3Vu
dCgpCiAgICB7IHJldHVybiBkZXN0cnVjdG9yOjpjb3VudCgpOyB9CgogIHByaXZhdGU6CiAgICBz
dGF0aWMgaW50IG5leHRfaWRfOwogIH07CgogIGlubGluZSBib29sCiAgb3BlcmF0b3I9PShjb25z
dCBjb3B5X3RyYWNrZXImIGxocywgY29uc3QgY29weV90cmFja2VyJiByaHMpCiAgeyByZXR1cm4g
bGhzLmlkKCkgPT0gcmhzLmlkKCk7IH0KfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8Y2xh
c3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJfdHJhaXRzOwoKCiAgdGVtcGxhdGU8PgogICAgc3Ry
dWN0IGNoYXJfdHJhaXRzPF9fZ251X2N4eF90ZXN0Ojpwb2RfY2hhcj4KICAgIHsKICAgICAgdHlw
ZWRlZiBfX2dudV9jeHhfdGVzdDo6cG9kX2NoYXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9f
Z251X2N4eF90ZXN0Ojpwb2RfaW50IGludF90eXBlOwogICAgICB0eXBlZGVmIGxvbmcgcG9zX3R5
cGU7CiAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBf
X2dudV9jeHhfdGVzdDo6c3RhdGUgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAg
IGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBz
dGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlw
ZSYgX19jMik7CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9f
YzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBh
cmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBf
X24pOwoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBf
X3MpOwoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFy
X3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpOwoKICAgICAgc3Rh
dGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlw
ZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5
KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAg
ICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90
IF9fbiwgY2hhcl90eXBlIF9fYSk7CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2No
YXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAg
ICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMgYm9vbAog
ICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9f
YzIpOwoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpOwoKICAgICAgc3RhdGljIGlu
dF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYyk7CiAgICB9Owp9CiMgMzQg
Ii9nY2MvZGplL3NyYy9saWJzdGRjKystdjMvdGVzdHN1aXRlLzI3X2lvL2Jhc2ljX2lzdHJlYW0v
c2VudHJ5L2NoYXIvMzk4My1mc3RyZWFtLmNjIiAyCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxh
dGU8PgogICAgc3RydWN0IGNoYXJfdHJhaXRzPHVuc2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHR5
cGVkZWYgdW5zaWduZWQgY2hhciBjaGFyX3R5cGU7CgogICAgICB0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBl
ZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlw
ZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0
IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJv
b2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIp
CiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAg
bHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg
cmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29u
c3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAg
ICAgIHsKIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCiAgIGlmICghZXEo
X19zMVtfX2ldLCBfX3MyW19faV0pKQogICAgIHJldHVybiBsdChfX3MxW19faV0sIF9fczJbX19p
XSkgPyAtMSA6IDE7CiByZXR1cm4gMDsKICAgICAgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAg
ICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsKIGNvbnN0IGNoYXJfdHlwZSog
X19wID0gX19zOwogd2hpbGUgKF9fcCAmJiAqX19wKQogICArK19fcDsKIHJldHVybiAoX19wIC0g
X19zKTsKICAgICAgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChj
b25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAg
ICAgIHsKIGZvciAoY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7IHNpemVfdChfX3AgLSBfX3Mp
IDwgX19uOyArK19fcCkKICAgaWYgKCpfX3AgPT0gX19hKSByZXR1cm4gX19wOwogcmV0dXJuIDA7
CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBf
X3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIChj
aGFyX3R5cGUqKSBtZW1tb3ZlKF9fczEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKTsg
fQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNv
bnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gKGNoYXJfdHlw
ZSopIG1lbWNweShfX3MxLCBfX3MyLCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0KCiAgICAg
IHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9f
biwgY2hhcl90eXBlIF9fYSkKICAgICAgewogZm9yIChjaGFyX3R5cGUqIF9fcCA9IF9fczsgX19w
IDwgX19zICsgX19uOyArK19fcCkKICAgYXNzaWduKCpfX3AsIF9fYSk7CiAgICAgICAgcmV0dXJu
IF9fczsKICAgICAgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUo
Y29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gY2hhcl90eXBlKCk7IH0KCiAgICAg
IHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykg
eyByZXR1cm4gaW50X3R5cGUoKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5
cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJl
dHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oLTEpOyB9CgogICAgICBzdGF0aWMgaW50X3R5
cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBlcV9p
bnRfdHlwZShfX2MsIGVvZigpKSA/IGludF90eXBlKDApIDogX19jOyB9CiAgICB9Owp9CgoKCnZv
aWQgdGVzdDAzKCkKewogIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAgYm9vbCB0ZXN0ID0gdHJ1ZTsK
CgogIGJhc2ljX2lmc3RyZWFtPHVuc2lnbmVkIGNoYXI+IGlmc191YzsKICB1bnNpZ25lZCBjaGFy
IGFycls2XSA9IHsgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScgfTsKCiAgdHJ5CiAgICB7CiAgICAg
IGludCBpOwogICAgICBpZnNfdWMgPj4gaTsKICAgIH0KICBjYXRjaCAoYmFkX2Nhc3QmIG9iaikK
ICAgIHsgfQogIGNhdGNoIChleGNlcHRpb24mIG9iaikKICAgIHsgdGVzdCA9IGZhbHNlOyB9Cgog
IHRyeQogICAgewogICAgICBpZnNfdWMgPj4gYXJyOwogICAgfQogIGNhdGNoIChiYWRfY2FzdCYg
b2JqKQogICAgeyB9CiAgY2F0Y2ggKGV4Y2VwdGlvbiYgb2JqKQogICAgeyB0ZXN0ID0gZmFsc2U7
IH0KCiAgdHJ5CiAgICB7CiAgICAgIGlmc191YyA+PiB3czsKICAgIH0KICBjYXRjaCAoYmFkX2Nh
c3QmIG9iaikKICAgIHsgfQogIGNhdGNoIChleGNlcHRpb24mIG9iaikKICAgIHsgdGVzdCA9IGZh
bHNlOyB9CgogIHRyeQogICAgewogICAgICBiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4gc191
YyhhcnIpOwogICAgICBpZnNfdWMgPj4gc191YzsKICAgIH0KICBjYXRjaCAoYmFkX2Nhc3QmIG9i
aikKICAgIHsgfQogIGNhdGNoIChleGNlcHRpb24mIG9iaikKICAgIHsgdGVzdCA9IGZhbHNlOyB9
CgogICgodGVzdCkgPyAoKHZvaWQpMCkgOiBfX2Fzc2VydCgiX19FWCIsICIvZ2NjL2RqZS9zcmMv
bGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yN19pby9iYXNpY19pc3RyZWFtL3NlbnRyeS9jaGFyLzM5
ODMtZnN0cmVhbS5jYyIsIDE3MSkpOwp9CgoKCnRlbXBsYXRlCiAgc3RkOjpiYXNpY19zdHJpbmc8
dW5zaWduZWQgY2hhcj46OnNpemVfdHlwZQogIHN0ZDo6YmFzaWNfc3RyaW5nPHVuc2lnbmVkIGNo
YXI+OjpfUmVwOjpfU19tYXhfc2l6ZTsKCnRlbXBsYXRlCiAgdW5zaWduZWQgY2hhcgogIHN0ZDo6
YmFzaWNfc3RyaW5nPHVuc2lnbmVkIGNoYXI+OjpfUmVwOjpfU190ZXJtaW5hbDsKCnRlbXBsYXRl
CiAgc3RkOjpiYXNpY19maWxlYnVmPHVuc2lnbmVkIGNoYXI+OjppbnRfdHlwZQogIHN0ZDo6YmFz
aWNfZmlsZWJ1Zjx1bnNpZ25lZCBjaGFyPjo6X1NfcGJhY2tfc2l6ZTsKCgppbnQgbWFpbigpCnsK
ICB0ZXN0MDMoKTsKICByZXR1cm4gMDsKfQo=


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-04-30 16:46 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-04-30 16:46 c++/10568: Template instantiation failure on AIX dje

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).