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


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

c++/10367: Internal Compiler Error


>Number:         10367
>Category:       c++
>Synopsis:       Internal Compiler Error
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Apr 10 01:56:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Artur Kedzierski <artur at kedzierski dot org>
>Release:        3.2.2 / 3.2 20020903 (Red Hat Linux 8.0 3.2-7) / 3.2.3 20030331 (Debian prerelease)
>Organization:
>Environment:
Debian Sid and Slackware 9.0 and RedHat 8.0
>Description:
The attached following code causes an internal compiler error:
#include <iostream>
#include <vector>
int main()
{
	switch (0) {
	case 0:
		std::vector<std::string> url_list;
		break;
	default:
	}
}

I know that there are brackets missing in the code. However, that shouldn't cause the internal compiler error. This is the error message:
test.cc: In function `int main()':
test.cc:10: jump to case label
test.cc:8:   crosses initialization of `std::vector<std::string, 
   std::allocator<std::string> > url_list'
test.cc:11: parse error before `}' token

Internal compiler error: Error reporting routines re-entered.


The minimum command line used:
g++ SegFault.cc
>How-To-Repeat:
Compile the code given in description. It caused the same error on Slackware, Debian, and RedHat.
>Fix:
Unknown
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="SegFault.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="SegFault.ii"

IyAxICJTZWdGYXVsdC5jYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+Igoj
IDEgIlNlZ0ZhdWx0LmNjIgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc3RyZWFtIiAxIDMK
IyA0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zdHJlYW0iIDMKCiMgMSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2MrK2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL29zX2RlZmluZXMuaCIgMSAzCiMgMzkgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjkxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjkyICIvdXNyL2luY2x1ZGUv
ZmVhdHVyZXMuaCIgMiAzCiMgMzE0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMzE1ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMiAzCiMgNDAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9vc19kZWZp
bmVzLmgiIDIgMwojIDM1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysr
Y29uZmlnLmgiIDIgMwojIDQ1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3N0cmVhbSIgMiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9j
KysvMy4yL29zdHJlYW0iIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAxIDMKIyA0
MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2lvc2Z3ZCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIgMwoKCiMgMSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDMgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RyaW5nZndkLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTxj
bGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAg
ICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf
c3RyaW5nOwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPjsKCiAgdHlwZWRl
ZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90
cmFpdHM8d2NoYXJfdD47CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+IHdzdHJpbmc7
Cgp9CiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIgMiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9mcG9zLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMv
YysraW8uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9j
Kytpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAxIDMKIyA0OCAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9j
c3RkZGVmIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGRlZiIgMwoKIyAxICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MTUxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIg
Mwp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMgMjEzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7
CiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRkZWYiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7
CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpzaXplX3Q7Cn0KIyA1MSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvY3N0ZGlvIiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMzkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ0ICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9iaXRz
L3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyOSAi
L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9i
aXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Vf
aW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdV9sb25nOwoKCnR5cGVkZWYgc2lnbmVk
IGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYg
c2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9f
dWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQg
aW50IF9fdWludDMyX3Q7CgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25n
IGludCBfX3VpbnQ2NF90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50
IF9fcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBf
X3VfcXVhZF90OwojIDEyOCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3R5cGVzaXplcy5oIiAxIDMKIyAxMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5
cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2Rldl90Owp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfX3VpZF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX2dpZF90Owp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9faW5vX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBs
b25nIGludCBfX2lubzY0X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fbW9kZV90Owp0eXBlZGVm
IHVuc2lnbmVkIGludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRl
ZiBsb25nIGxvbmcgaW50IF9fb2ZmNjRfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBz
dHJ1Y3QgeyBpbnQgX192YWxbMl07IH0gX19mc2lkX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19jbG9j
a190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fcmxpbV90Owp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgX19ybGltNjRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19pZF90Owp0
eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRz
X3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKCnR5cGVkZWYgaW50IF9fZGFkZHJf
dDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7CnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoKdHlw
ZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCnR5cGVkZWYg
bG9uZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5
cGVkZWYgbG9uZyBsb25nIGludCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25n
IGludCBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2ZzYmxr
Y250NjRfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fZnNmaWxjbnRfdDsKdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fZnNmaWxjbnQ2NF90OwoKCgoKdHlwZWRlZiBpbnQg
X19zc2l6ZV90Owp0eXBlZGVmIF9fb2ZmNjRfdCBfX2xvZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCAq
X19xYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0
cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwojIDQ2ICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCgoKCgoKdHlw
ZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKCgoKCgojIDcxICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxF
IF9fRklMRTsKIyA4MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUv
c3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDE0ICIv
dXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzU0ICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCB3
aW50X3Q7CiMgMTUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCiMgMjQgIi91c3IvaW5j
bHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv
My4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAy
IDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVk
ZS93Y2hhci5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCgoKCgoKCgp0eXBl
ZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7
CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUgIi91
c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBf
X3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QK
ewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90
OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ2Nv
bnYuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDYzICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKIyAy
OSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZ2Nv
bnYuaCIgMiAzCgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYs
CiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQs
CiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09O
Vl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dD
T05WX0lOVEVSTkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAw
MSwKICBfX0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZf
c3RlcDsKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2Jq
ZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf
ZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19j
b25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgd2ludF90ICgqX19nY29u
dl9idG93Y19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosIHVuc2lnbmVkIGNoYXIpOwoKCnR5
cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5
cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoK
CnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2Rh
dGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1
bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNf
Y29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAq
LCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9m
Y3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf
dHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpf
X2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0
YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29u
dGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190
cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRh
ICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xv
YWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoK
ICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBjaGFyICpfX3RvX25hbWU7
CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfYnRvd2NfZmN0IF9fYnRvd2NfZmN0Owog
IF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2djb252X2VuZF9mY3QgX19lbmRfZmN0
OwoKCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zyb207CiAg
aW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKCiAgaW50IF9fc3Rh
dGVmdWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhCnsK
ICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVuZDsK
CgoKICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgoKCiAgaW50
IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRlX3Qg
X19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX3RyYW5zOwp9OwoKCgp0
eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVfdCBfX25zdGVwczsKICBzdHJ1Y3Qg
X19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2NvbnZfc3Rl
cF9kYXRhIF9fZGF0YSBbXTsKfSAqX19nY29udl90OwojIDQ1ICIvdXNyL2luY2x1ZGUvX0dfY29u
ZmlnLmgiIDIgMwp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAg
c3RydWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9fZ2Nv
bnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVk
ZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5
cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7
CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKIyAzMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIg
MwojIDUzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5f
dmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwoj
IDE2MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBf
SU9fRklMRTsKIyAxNzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9f
bG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25l
eHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTUgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVj
dnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2
dF9ub2NvbnYKfTsKCgoKCnN0cnVjdCBfSU9fY29kZWN2dAp7CiAgdm9pZCAoKl9fY29kZWN2dF9k
ZXN0cikgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpf
X2NvZGVjdnRfZG9fb3V0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICoq
LCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX3Vu
c2hpZnQpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICosIGNoYXIgKiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAg
ZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX2luKSAoc3RydWN0IF9JT19jb2Rl
Y3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYnN0
YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICoqLCB3Y2hhcl90ICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsKICBpbnQgKCpf
X2NvZGVjdnRfZG9fZW5jb2RpbmcpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19j
b2RlY3Z0X2RvX2Fsd2F5c19ub2NvbnYpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgq
X19jb2RlY3Z0X2RvX2xlbmd0aCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLCBfX21ic3RhdGVfdCAq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg
Kiwgc2l6ZV90KTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fbWF4X2xlbmd0aCkgKHN0cnVjdCBfSU9f
Y29kZWN2dCAqKTsKCiAgX0dfaWNvbnZfdCBfX2NkX2luOwogIF9HX2ljb252X3QgX19jZF9vdXQ7
Cn07CgoKc3RydWN0IF9JT193aWRlX2RhdGEKewogIHdjaGFyX3QgKl9JT19yZWFkX3B0cjsKICB3
Y2hhcl90ICpfSU9fcmVhZF9lbmQ7CiAgd2NoYXJfdCAqX0lPX3JlYWRfYmFzZTsKICB3Y2hhcl90
ICpfSU9fd3JpdGVfYmFzZTsKICB3Y2hhcl90ICpfSU9fd3JpdGVfcHRyOwogIHdjaGFyX3QgKl9J
T193cml0ZV9lbmQ7CiAgd2NoYXJfdCAqX0lPX2J1Zl9iYXNlOwogIHdjaGFyX3QgKl9JT19idWZf
ZW5kOwoKICB3Y2hhcl90ICpfSU9fc2F2ZV9iYXNlOwogIHdjaGFyX3QgKl9JT19iYWNrdXBfYmFz
ZTsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfZW5kOwoKICBfX21ic3RhdGVfdCBfSU9fc3RhdGU7CiAg
X19tYnN0YXRlX3QgX0lPX2xhc3Rfc3RhdGU7CiAgc3RydWN0IF9JT19jb2RlY3Z0IF9jb2RlY3Z0
OwoKICB3Y2hhcl90IF9zaG9ydGJ1ZlsxXTsKCiAgc3RydWN0IF9JT19qdW1wX3QgKl93aWRlX3Z0
YWJsZTsKfTsKCgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9J
T19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsK
ICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9J
T193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoK
ICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpf
SU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9J
T19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwoKCgogIGludCBfZmxhZ3MyOwoKICBfX29m
Zl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25l
ZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2Nr
X3QgKl9sb2NrOwojIDMxMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29m
ZnNldDsKCgogIHN0cnVjdCBfSU9fY29kZWN2dCAqX2NvZGVjdnQ7CiAgc3RydWN0IF9JT193aWRl
X2RhdGEgKl93aWRlX2RhdGE7CgoKCgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAq
IHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lP
X0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsK
ZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVj
dCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKIyAzNTAgIi91c3IvaW5jbHVkZS9saWJp
by5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNo
YXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19p
b193cml0ZV9mbiAodm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQg
X19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7
CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19jb29raWUpOwoKCgoKdHlwZWRl
ZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRl
X2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVf
c2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0
aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dy
aXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xv
c2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1
bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsKCnN0cnVjdCBfSU9fY29va2llX2ZpbGU7
CgoKZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9pbml0IChzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlICpf
X2NmaWxlLCBpbnQgX19yZWFkX3dyaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKl9fY29va2llLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9fZm5zKTsKCgoKCmV4dGVy
biAiQyIgewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpl
eHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fb3Zl
cmZsb3cgKF9JT19GSUxFICosIGludCkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dW5kZXJm
bG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJ
TEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdp
bnRfdCkgdGhyb3cgKCk7CiMgNDMyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50
IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3B1dGMg
KGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVvZiAo
X0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxF
ICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUg
Kl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxF
ICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIHRo
cm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgp
OwojIDQ2MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAo
X0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hh
ciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0
aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3Nz
aXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9p
ZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lP
X0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3Qg
X0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVy
biB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgpleHRl
cm4gd2ludF90IF9JT19nZXR3YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gd2lu
dF90IF9JT19wdXR3YyAod2NoYXJfdCBfX3djLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgX0lPX2Z3aWRlIChfSU9fRklMRSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7
CiMgNTExICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZndzY2FuZiAo
X0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93
ICgpOwpleHRlcm4gaW50IF9JT192ZndwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192
YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fd3BhZG4gKF9JT19GSUxFICos
IHdpbnRfdCwgX19zc2l6ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfd2JhY2t1
cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgoKfQojIDgyICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCnR5cGVkZWYgX19nbnVj
X3ZhX2xpc3QgX19ub3RfdmFfbGlzdF9fOwojIDk1ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAzCgoKdHlwZWRlZiBfR19mcG9zX3QgZnBvc190OwoK
CgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CiMgMTQ3ICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvc3RkaW9fbGltLmgiIDEgMwojIDE0OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMu
Mi4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEUgKnN0ZGlu
OwpleHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRvdXQ7CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEUg
KnN0ZGVycjsKCgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5h
bWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9f
Y29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAo
dm9pZCkgdGhyb3cgKCk7CiMgMTgwICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMv
aW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cg
KCk7CgoKCmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyAyMDIgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRl
bXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gaW50IGZjbG9z
ZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
ZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bW9kZXMpIHRocm93ICgpOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAyNDggIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8z
LjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKCgpleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVu
NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAg
ICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
RklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19j
b29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlv
bnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQg
Kl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9j
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBz
ZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
LAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVzLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNo
YXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6
ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAq
X19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAg
ICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9s
aXN0IF9fYXJnKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19y
ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg
ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0
KSkpOwoKZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg
X19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwoKCgoKCgpleHRlcm4gaW50IHZh
c3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2YsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsK
ZXh0ZXJuIGludCBfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsK
ZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4
dGVybiBpbnQgdmRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
bXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRl
cm4gaW50IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQs
IC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZf
XywgMiwgMykpKTsKCgoKCgpleHRlcm4gaW50IGZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3N0
cmVhbSwKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h
dCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgdmZzY2Fu
ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h
dCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVy
biBpbnQgdnNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192
YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf
X3NjYW5mX18sIDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCgoKZXh0ZXJuIGludCBm
Z2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoK
CgoKCgoKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVy
biBpbnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9j
a2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1
dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdl
dHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3cs
IEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAg
IHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBjaGFyICpmZ2V0c191bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBf
X24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSkgdGhyb3cgKCk7CiMgNDcwICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5j
bHVkZS9zdGRpby5oIiAzCmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVz
dHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpf
X3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXpl
X3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBfX2xp
bmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBmcHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmdl
dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBm
cmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7
CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBz
aXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19y
ZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IGZyZWFk
X3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9p
ZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
OwoKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwg
aW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgojIDUzNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUv
c3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19v
ZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA1NTMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8z
LjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jl
c3RyaWN0IF9fc3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7
CgpleHRlcm4gaW50IGZzZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19w
b3MpIHRocm93ICgpOwojIDU3MiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2lu
Y2x1ZGUvc3RkaW8uaCIgMwoKCgpleHRlcm4gaW50IGZzZWVrbzY0IChGSUxFICpfX3N0cmVhbSwg
X19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90
IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmdldHBvczY0
IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3BvcykK
ICAgICB0aHJvdyAoKTsKZXh0ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBfX2Nv
bnN0IGZwb3M2NF90ICpfX3BvcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgoK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3lzX2Vycmxpc3QuaCIgMSAzCiMgMjcgIi91c3IvaW5j
bHVkZS9iaXRzL3N5c19lcnJsaXN0LmgiIDMKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJuIF9f
Y29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQgX3N5c19uZXJy
OwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtdOwojIDYwOSAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgpl
eHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21v
ZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9i
c3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVz
dHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBvYnN0YWNrX3Zwcmlu
dGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJncykKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKCgoKCgoKCmV4
dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB2b2lk
IGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNjg2ICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAzCn0KIyA1MyAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAyIDMKIyA5NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0
ZGlvIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsK
CiAgdXNpbmcgOjpjbGVhcmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAg
dXNpbmcgOjpmZXJyb3I7CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2lu
ZyA6OmZnZXRwb3M7CiAgdXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6
ZnByaW50ZjsKICB1c2luZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVh
ZDsKICB1c2luZyA6OmZyZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsK
ICB1c2luZyA6OmZzZXRwb3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1
c2luZyA6OmdldGM7CiAgdXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6
OnBlcnJvcjsKICB1c2luZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRj
aGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsK
ICB1c2luZyA6OnJld2luZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVz
aW5nIDo6c2V0dmJ1ZjsKICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNp
bmcgOjp0bXBmaWxlOwogIHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5n
IDo6dmZwcmludGY7CiAgdXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNwcmludGY7Cn0KIyAx
NTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRpbyIgMwpuYW1lc3BhY2UgX19nbnVfY3h4CnsK
ICB1c2luZyA6OnNucHJpbnRmOwogIHVzaW5nIDo6dmZzY2FuZjsKICB1c2luZyA6OnZzY2FuZjsK
ICB1c2luZyA6OnZzbnByaW50ZjsKICB1c2luZyA6OnZzc2NhbmY7Cn0KCm5hbWVzcGFjZSBzdGQK
ewogIHVzaW5nIF9fZ251X2N4eDo6c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2ZnNjYW5m
OwogIHVzaW5nIF9fZ251X2N4eDo6dnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNucHJpbnRm
OwogIHVzaW5nIF9fZ251X2N4eDo6dnNzY2FuZjsKfQojIDM2ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9pMzg2LWxpbnV4L2JpdHMvYysraW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2kzODYtbGludXgvYml0cy9ndGhyLmgiIDEgMwojIDk4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9p
Mzg2LWxpbnV4L2JpdHMvZ3Roci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1s
aW51eC9iaXRzL2d0aHItZGVmYXVsdC5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
aTM4Ni1saW51eC9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3B0aHJl
YWQuaCIgMSAzCiMgMjAgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvc2NoZWQuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL3RpbWUuaCIgMSAzCiMgMTE2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0
aW1lc3BlYwogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAg
fTsKIyAzMCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvc2NoZWQuaCIgMSAzCiMgNjIgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0
IHNjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKCmV4dGVybiAi
QyIgewoKCgpleHRlcm4gaW50IGNsb25lIChpbnQgKCpfX2ZuKSAodm9pZCAqX19hcmcpLCB2b2lk
ICpfX2NoaWxkX3N0YWNrLAogICAgICAgICAgICAgICAgICBpbnQgX19mbGFncywgdm9pZCAqX19h
cmcpIHRocm93ICgpOwoKCn0KCgoKCgoKCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50
IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKIyAzMyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoK
CgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRwYXJhbSAoX19waWRfdCBfX3Bp
ZCwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVkX3Bh
cmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxlciAo
X19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHNjaGVkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dl
dF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz
Y2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgc2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3QgdGltZXNw
ZWMgKl9fdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNjaGVkX3NldGFmZmluaXR5IChfX3Bp
ZF90IF9fcGlkLCB1bnNpZ25lZCBsb25nIGludCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgKl9fbWFzaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBzY2hlZF9nZXRhZmZpbml0eSAoX19waWRfdCBfX3BpZCwgdW5zaWduZWQgbG9uZyBpbnQgX19s
ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ICpfX21h
c2spIHRocm93ICgpOwoKCn0KIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0
ZXJuICJDIiB7CgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMiAzCiMgNTggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgp0eXBlZGVmIF9fY2xvY2tfdCBj
bG9ja190OwoKCgojIDc0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKdHlwZWRlZiBfX3RpbWVf
dCB0aW1lX3Q7CgoKCiMgOTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX2Nsb2Nr
aWRfdCBjbG9ja2lkX3Q7CiMgMTA0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX190
aW1lcl90IHRpbWVyX3Q7CiMgMTI3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKc3RydWN0IHRt
CnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21k
YXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1f
eWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAgX19jb25zdCBj
aGFyICp0bV96b25lOwoKCgoKfTsKCgoKCgoKCgpzdHJ1Y3QgaXRpbWVyc3BlYwogIHsKICAgIHN0
cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsK
ICB9OwoKCnN0cnVjdCBzaWdldmVudDsKCgoKCgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgoK
CgoKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3Qg
dGltZSAodGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGRpZmZ0aW1l
ICh0aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGltZTApCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiB0aW1lX3QgbWt0aW1lIChzdHJ1Y3QgdG0gKl9f
dHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJp
Y3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFy
ICpzdHJwdGltZSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCkK
ICAgICB0aHJvdyAoKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4
ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVj
dAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2ln
bmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwog
IGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwoKCiAgY29uc3QgY2hhciAqX19uYW1lc1sxM107
Cn0gKl9fbG9jYWxlX3Q7CiMgMjEyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCmV4dGVybiBz
aXplX3Qgc3RyZnRpbWVfbCAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3Ry
aWN0IF9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhy
b3cgKCk7CgpleHRlcm4gY2hhciAqc3RycHRpbWVfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2ZtdCwgc3RydWN0IHRtICpfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVf
dCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAoX19jb25z
dCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRp
bWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc3RydWN0
IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jl
c3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0g
Kl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgKF9f
Y29uc3Qgc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWUgKF9f
Y29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICphc2N0
aW1lX3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBjaGFy
ICpjdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4g
Y2hhciAqX190em5hbWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50
IF9fdGltZXpvbmU7CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0
enNldCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25n
IGludCB0aW1lem9uZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193
aGVuKSB0aHJvdyAoKTsKIyAzMDcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVf
dCB0aW1lZ20gKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1l
bG9jYWwgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGlu
dCBfX3llYXIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRl
cm4gaW50IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3Rp
bWUsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lk
LCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dl
dHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9f
Y29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IGNsb2NrX25hbm9zbGVlcCAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tp
ZF90ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChj
bG9ja2lkX3QgX19jbG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdl
dmVudCAqX19yZXN0cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3Qg
Kl9fcmVzdHJpY3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0
ZSAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGlt
ZSAodGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1
ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJp
ZCwgc3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCB0aW1lcl9nZXRvdmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CiMgMzc4ICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCgoKZXh0ZXJu
IHN0cnVjdCB0bSAqZ2V0ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CiMg
MzkzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
dG0gKl9fcmVzdHJpY3QgX19yZXNidWZwKSB0aHJvdyAoKTsKCgp9CiMgMjIgIi91c3IvaW5jbHVk
ZS9wdGhyZWFkLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIyAzMSAi
L3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9zaWdzZXQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCnR5
cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNp
Z25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGlu
dCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoj
IDUwICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90
OwojIDM3OCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCn0KIyAyNSAiL3Vzci9pbmNsdWRlL3B0
aHJlYWQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwoj
IDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3NjaGVkLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMu
aCIgMiAzCgp0eXBlZGVmIGludCBfX2F0b21pY19sb2NrX3Q7CgoKc3RydWN0IF9wdGhyZWFkX2Zh
c3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBfX2F0b21pY19sb2NrX3QgX19zcGlubG9j
azsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRf
ZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50IF9fZGV0
YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0gX19z
Y2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXplX3Qg
X19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRkcjsK
ICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3RydWN0
CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3Ig
X19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQg
X19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRo
cmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsKICBp
bnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tpbmQ7
CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhfdDsK
CgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0
cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKCnR5cGVkZWYgc3RydWN0IF9w
dGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19yd19sb2NrOwog
IGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZXI7CiAgX3B0aHJl
YWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZV93
YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNoYXJlZDsKfSBwdGhyZWFkX3J3
bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7CiAgaW50IF9fcHNo
YXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVkZWYgdm9sYXRpbGUgaW50IHB0
aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgc3RydWN0IF9wdGhyZWFkX2Zh
c3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsKICBpbnQgX19iYV9wcmVzZW50
OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhyZWFkX2JhcnJpZXJfdDsKCgp0
eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX2JhcnJpZXJhdHRyX3Q7
CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMjYgIi91c3IvaW5j
bHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2luaXRzcGluLmgiIDEg
MwojIDI3ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA1OSAi
L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwplbnVtCnsKICBQVEhSRUFEX0NSRUFURV9KT0lOQUJM
RSwKCiAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX0lOSEVS
SVRfU0NIRUQsCgogIFBUSFJFQURfRVhQTElDSVRfU0NIRUQKCn07CgplbnVtCnsKICBQVEhSRUFE
X1NDT1BFX1NZU1RFTSwKCiAgUFRIUkVBRF9TQ09QRV9QUk9DRVNTCgp9OwoKZW51bQp7CiAgUFRI
UkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhS
RUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoKICAs
CiAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJF
QURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVB
RF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJF
QURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVURVhfTk9STUFMCgoKCiAgLCBQVEhSRUFEX01V
VEVYX0ZBU1RfTlAgPSBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCgp9OwoKZW51bQp7CiAgUFRI
UkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQKCn07CgoKZW51
bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19Q
UkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTk9OUkVDVVJT
SVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RFRkFVTFRfTlAgPSBQVEhSRUFEX1JXTE9DS19QUkVG
RVJfV1JJVEVSX05QCn07CiMgMTMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCnN0cnVjdCBf
cHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKik7CiAg
dm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51
cF9idWZmZXIgKl9fcHJldjsKfTsKCgoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAoK
ICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZF
UlJFRCwKCiAgUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCgp9OwojIDE2MyAiL3Vzci9pbmNs
dWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlIChwdGhyZWFkX3QgKl9f
cmVzdHJpY3QgX190aHJlYWRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0
aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKSB0aHJvdyAoKTsKCgpleHRlcm4gcHRocmVh
ZF90IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2Vx
dWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQyKSB0aHJvdyAoKTsK
CgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0dmFsKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9q
b2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3JldHVybikgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2RldGFjaCAocHRocmVhZF90IF9fdGgpIHRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3QgKl9fYXR0
cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveSAocHRocmVhZF9h
dHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0ZGV0
YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9f
YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19kZXRh
Y2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJh
bSAocHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmlj
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3BhcmFtKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtIChfX2NvbnN0IHB0aHJl
YWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs
IGludCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9n
ZXRzY2hlZHBvbGljeSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3Qg
X19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0aW5o
ZXJpdHNjaGVkIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBfX2luaGVyaXQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19y
ZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwg
aW50ICpfX3Jlc3RyaWN0IF9faW5oZXJpdCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfYXR0cl9zZXRzY29wZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fc2NvcGUp
CiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgKF9fY29u
c3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2NvcGUpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fZ3VhcmRzaXpl
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUgKF9fY29u
c3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX2d1YXJkc2l6ZSkKICAgICB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyIChwdGhy
ZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKl9fc3RhY2thZGRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9n
ZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHZvaWQgKipfX3Jlc3RyaWN0IF9f
c3RhY2thZGRyKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3Nl
dHN0YWNrIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2sgKF9fY29uc3QgcHRocmVhZF9hdHRy
X3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFja3Np
emUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSAoX19j
b25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKQogICAg
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0YXR0cl9ucCAocHRocmVhZF90IF9f
dGgsIHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0
aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9fcG9s
aWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2No
ZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2dl
dHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3ksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19wYXJh
bSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGNvbmN1cnJlbmN5ICh2
b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y29uY3VycmVuY3kgKGludCBf
X2xldmVsKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF95aWVsZCAodm9pZCkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9pbml0IChwdGhyZWFkX211
dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19tdXRleF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl
YWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9tdXRl
eF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RpbWVk
bG9jayAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19t
dXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5pdCAo
cHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl
YWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0
aHJlYWRfbXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAocHRo
cmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKQogICAgIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZSAoX19jb25zdCBwdGhyZWFkX211dGV4
YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19raW5kKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBp
bnQgcHRocmVhZF9jb25kX2luaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3Qg
Kl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25kX2F0dHIpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kgKHB0aHJlYWRfY29uZF90
ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3NpZ25hbCAocHRo
cmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRf
YnJvYWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2NvbmRfd2FpdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3Qg
X19tdXRleCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0
IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9f
cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJlYWRfY29u
ZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJf
ZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJf
dCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9f
YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0
cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9z
ZXRwc2hhcmVkIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3RyaWN0
IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVh
ZF9yd2xvY2thdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfZGVzdHJveSAo
cHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9yd2xvY2tfcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnlyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9f
cndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHJkbG9j
ayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJp
Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193cmxvY2sgKHB0aHJlYWRfcndsb2Nr
X3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXdy
bG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3RyaWN0
IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcnds
b2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpf
X2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ryb3kg
KHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3Qg
KgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9f
YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jl
c3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0
dHJfc2V0cHNoYXJlZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0a2luZF9ucCAoX19jb25zdCBwdGhyZWFk
X3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgKl9fcHJlZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j
a2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHJlZikgdGhyb3cgKCk7CiMg
NTA5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2lu
aXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrLCBpbnQgX19wc2hhcmVkKQogICAgIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2Rlc3Ryb3kgKHB0aHJlYWRfc3BpbmxvY2tf
dCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9sb2NrIChwdGhy
ZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3Nw
aW5fdHJ5bG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9zcGluX3VubG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfaW5pdCAocHRocmVhZF9iYXJy
aWVyX3QgKl9fcmVzdHJpY3QgX19iYXJyaWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHVuc2lnbmVkIGludCBfX2NvdW50KSB0aHJv
dyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3kgKHB0aHJlYWRfYmFycmll
cl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRy
X2luaXQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9f
YXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfZ2V0cHNoYXJl
ZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJv
dyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFk
X2JhcnJpZXJhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2Jh
cnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhyb3cgKCk7CiMgNTU2
ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfY3JlYXRl
IChwdGhyZWFkX2tleV90ICpfX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcG9pbnRlcikgdGhyb3cgKCk7
CgoKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkp
IHRocm93ICgpOwojIDU3NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0
aHJlYWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9sLAogICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGludCBfX3N0YXRlLCBpbnQgKl9f
b2xkc3RhdGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlwZSAo
aW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9jYW5jZWwgKHB0aHJlYWRfdCBfX2NhbmNlbHRocmVhZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
dm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwgKHZvaWQpIHRocm93ICgpOwojIDYxMCAiL3Vzci9pbmNs
dWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2ggKHN0cnVj
dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZl
ciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19leGVj
dXRlKSB0aHJvdyAoKTsKIyA2MzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZv
aWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoX2RlZmVyIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9i
dWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKIyA2NDIgIi91c3IvaW5jbHVkZS9w
dGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3BfcmVzdG9yZSAoc3Ry
dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX2dldGNwdWNsb2NraWQgKHB0aHJlYWRfdCBfX3RocmVhZF9pZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NraWRfdCAqX19jbG9ja19pZCkgdGhy
b3cgKCk7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMKIyAzMSAi
L3Vzci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21h
c2sgKGludCBfX2hvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgX19zaWdz
ZXRfdCAqX19yZXN0cmljdCBfX25ld21hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fb2xkbWFzayl0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkaWQsIGludCBfX3NpZ25vKSB0aHJvdyAoKTsK
IyA2NTYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDY3MSAiL3Vzci9pbmNsdWRlL3B0
aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAo
dm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wICh2b2lk
KSB0aHJvdyAoKTsKCn0KIyAzOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRz
L2d0aHItZGVmYXVsdC5oIiAyIDMKCnR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5
X3Q7CnR5cGVkZWYgcHRocmVhZF9vbmNlX3QgX19ndGhyZWFkX29uY2VfdDsKdHlwZWRlZiBwdGhy
ZWFkX211dGV4X3QgX19ndGhyZWFkX211dGV4X3Q7CgoKCgoKCiNwcmFnbWEgd2VhayBwdGhyZWFk
X29uY2UKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2NyZWF0ZQojcHJhZ21hIHdlYWsgcHRocmVh
ZF9rZXlfZGVsZXRlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2dldHNwZWNpZmljCiNwcmFnbWEgd2Vh
ayBwdGhyZWFkX3NldHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX2NyZWF0ZQoKI3ByYWdt
YSB3ZWFrIHB0aHJlYWRfbXV0ZXhfbG9jayAKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfdHJ5
bG9jayAKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIAojIDgwICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGlu
ZSBpbnQKX19ndGhyZWFkX2FjdGl2ZV9wICh2b2lkKQp7CiAgc3RhdGljIHZvaWQgKmNvbnN0IF9f
Z3RocmVhZF9hY3RpdmVfcHRyID0gKHZvaWQgKikgJnB0aHJlYWRfY3JlYXRlOwogIHJldHVybiBf
X2d0aHJlYWRfYWN0aXZlX3B0ciAhPSAwOwp9CiMgNDM3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9p
Mzg2LWxpbnV4L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhy
ZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZvaWQgKCpmdW5jKSAodm9pZCkpCnsK
ICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfb25jZSAob25j
ZSwgZnVuYyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0
aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpkdG9yKSAodm9p
ZCAqKSkKewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVhdGUgKGtleSwgZHRvcik7Cn0KCnN0YXRp
YyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZHRvciAoX19ndGhyZWFkX2tleV90IGtleSwgdm9p
ZCAqcHRyKQp7CgogIGlmIChwdHIpCiAgICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5
LCAwKTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFk
X2tleV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9rZXlf
ZGVsZXRlIChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgKgpfX2d0aHJlYWRfZ2V0c3BlY2lm
aWMgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyAo
a2V5KTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX3NldHNwZWNpZmljIChfX2d0aHJl
YWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkICpwdHIpCnsKICByZXR1cm4gcHRocmVhZF9zZXRzcGVj
aWZpYyAoa2V5LCBwdHIpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfbG9j
ayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAo
KSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1
cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3Ro
cmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICBy
ZXR1cm4gcHRocmVhZF9tdXRleF90cnlsb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7
Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9t
dXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4g
cHRocmVhZF9tdXRleF91bmxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQojIDk5
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvZ3Roci5oIiAyIDMKIyAzOCAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNw
YWNlIHN0ZAp7CgogIHR5cGVkZWYgbG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qg
c3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBwdHJkaWZmX3Qgd3N0cmVhbXNpemU7CgogIHR5cGVkZWYg
ZnBvc190IF9fY19zdHJlYW1wb3M7CgogIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xv
Y2s7CgoKICB0eXBlZGVmIEZJTEUgX19jX2ZpbGU7CgoKICBzdHJ1Y3QgX19pb3NfZmxhZ3MKICB7
CiAgICB0eXBlZGVmIHNob3J0IF9faW50X3R5cGU7CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfYm9vbGFscGhhID0gMHgwMDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
ZGVjID0gMHgwMDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAw
MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19oZXggPSAweDAwMDg7CiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbnRlcm5hbCA9IDB4MDAxMDsKICAgIHN0YXRpYyBjb25z
dCBfX2ludF90eXBlIF9TX2xlZnQgPSAweDAwMjA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19vY3QgPSAweDAwNDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19yaWdodCA9
IDB4MDA4MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NjaWVudGlmaWMgPSAweDAx
MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsKICAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb2ludCA9IDB4MDQwMDsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb3MgPSAweDA4MDA7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19za2lwd3MgPSAweDEwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU191bml0YnVmID0gMHgyMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBw
ZXJjYXNlID0gMHg0MDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYWRqdXN0Zmll
bGQgPSAweDAwMjAgfCAweDAwODAgfCAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19iYXNlZmllbGQgPSAweDAwMDIgfCAweDAwNDAgfCAweDAwMDg7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19mbG9hdGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0OwoKCiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYWRiaXQgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9f
aW50X3R5cGUgX1NfZW9mYml0ID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2ZhaWxiaXQgPSAweDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hcHAgPSAw
eDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXRlID0gMHgwMjsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX2JpbiA9IDB4MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf
dHlwZSBfU19pbiA9IDB4MDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAw
eDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOwogIH07Cn0K
IyA0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mcG9zLmgiIDIgMwojIDEgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2N3Y2hhciIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2N3Y2hh
ciIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N0aW1lIiAxIDMKIyA0OCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvY3RpbWUiIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3RpbWUi
IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpjbG9ja190OwogIHVzaW5nIDo6dGltZV90Owog
IHVzaW5nIDo6dG07CgogIHVzaW5nIDo6Y2xvY2s7CiAgdXNpbmcgOjpkaWZmdGltZTsKICB1c2lu
ZyA6Om1rdGltZTsKICB1c2luZyA6OnRpbWU7CiAgdXNpbmcgOjphc2N0aW1lOwogIHVzaW5nIDo6
Y3RpbWU7CiAgdXNpbmcgOjpnbXRpbWU7CiAgdXNpbmcgOjpsb2NhbHRpbWU7CiAgdXNpbmcgOjpz
dHJmdGltZTsKfQojIDUyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDIgMwoKCiMgMSAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQwICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoj
IDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGFyZy5oIiAx
IDMKIyA0MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3Iv
aW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCiMgODgg
Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoKdHlwZWRlZiBfX21ic3RhdGVfdCBtYnN0YXRlX3Q7
CgoKCiMgMTEzICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpleHRlcm4gIkMiIHsKCgoKCnN0cnVj
dCB0bTsKCgoKCgoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2NzbmNweSAod2NoYXJfdCAq
X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu
IHdjaGFyX3QgKndjc2NhdCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7
CgpleHRlcm4gd2NoYXJfdCAqd2NzbmNhdCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMs
IHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3NjbXAgKF9fY29uc3Qg
d2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCB3Y3NuY21wIChfX2NvbnN0IHdjaGFy
X3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBpbnQgd2NzY2FzZWNtcCAo
X19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3
Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXBfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBf
X2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90
IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgd2NzbmNhc2VjbXBfbCAoX19jb25zdCB3Y2hh
cl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu
dCB3Y3Njb2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikg
dGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzeGZybSAod2NoYXJfdCAqX19yZXN0cmljdCBf
X3MxLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IHdjc2NvbGxfbCAo
X19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAg
ICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3Qg
d2NzeGZybV9sICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK
CgpleHRlcm4gd2NoYXJfdCAqd2NzZHVwIChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHIg
KF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NyY2hyIChfX2NvbnN0
IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2Nocm51bCAoX19jb25zdCB3
Y2hhcl90ICpfX3MsIHdjaGFyX3QgX193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKCgpleHRlcm4gc2l6ZV90IHdjc2NzcG4gKF9fY29uc3Qgd2NoYXJfdCAq
X193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NzcG4gKF9fY29uc3Qgd2NoYXJf
dCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2NzcGJyayAoX19jb25zdCB3
Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NzdHIgKF9fY29u
c3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gd2NoYXJfdCAqd2Nz
dG9rICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAg
IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fcHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdj
c2xlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc3djcyAoX19jb25zdCB3Y2hhcl90ICpfX2hh
eXN0YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NubGVuIChfX2NvbnN0IHdj
aGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY2hyIChfX2NvbnN0IHdjaGFy
X3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCB3bWVtY21wIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNweSAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd21lbW1v
dmUgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikKICAg
ICB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd21lbXNldCAod2NoYXJfdCAqX19zLCB3Y2hh
cl90IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1w
Y3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBtYnNpbml0
IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3
YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBz
aXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19wKSB0aHJvdyAo
KTsKCgpleHRlcm4gc2l6ZV90IHdjcnRvbWIgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCB3Y2hhcl90
IF9fd2MsCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMp
IHRocm93ICgpOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAq
X19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBtYnJsZW4gKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICBt
YnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgojIDMyNCAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDMKCgoKZXh0ZXJuIHNpemVfdCBtYnNydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKipfX3Jlc3Ry
aWN0IF9fc3JjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRl
X3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzcnRvbWJz
IChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAg
ICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gc2l6ZV90IG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbm1jLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0
ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25ydG9t
YnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgX19ud2MsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBt
YnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgd2N3
aWR0aCAod2NoYXJfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjc3dpZHRoIChfX2Nv
bnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3Vi
bGUgd2NzdG9kIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpl
eHRlcm4gZmxvYXQgd2NzdG9mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cg
KCk7CmV4dGVybiBsb25nIGRvdWJsZSB3Y3N0b2xkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGludCB3Y3N0b2wgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2NzdG9sbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCgpfX2V4dGVu
c2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvcSAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNp
b25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3VxIChfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCk7CiMgNDQzICIvdXNyL2luY2x1
ZGUvd2NoYXIuaCIgMwpleHRlcm4gbG9uZyBpbnQgd2NzdG9sX2wgKF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2Nz
dG91bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBf
X2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3Rv
bGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJv
dyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91
bGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9f
bG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHdjc3RvZF9sIChf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0
aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB3Y3N0b2ZfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRv
dWJsZSB3Y3N0b2xkX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVy
biBmbG9hdCBfX3djc3RvZl9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJs
ZSBfX3djc3RvbGRfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
X19ncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2ludGVybmFsIChf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9pbnRlcm5hbCAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXAp
IHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9s
bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl
LCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdjaGFyX3QgKioKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwojIDU2
MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIHdjaGFyX3QgKndjcGNweSAod2NoYXJf
dCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdj
aGFyX3QgKndjcG5jcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYywg
c2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IGZ3aWRlIChfX0ZJ
TEUgKl9fZnAsIGludCBfX21vZGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ3cHJpbnRmIChf
X0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVy
biBpbnQgd3ByaW50ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p
CiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZm
d3ByaW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg
IF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdndwcmlu
dGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg
ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCmV4dGVybiBpbnQg
dnN3cHJpbnRmICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAg
ICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoK
ZXh0ZXJuIGludCBmd3NjYW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAg
ICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dzY2FuZiAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoK
CgoKCgoKZXh0ZXJuIGludCB2ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAg
ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7Cgpl
eHRlcm4gaW50IHZ3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwK
ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7
CgpleHRlcm4gaW50IHZzd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAog
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQs
CiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgp
IDsKCgoKCgoKCmV4dGVybiB3aW50X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKZXh0ZXJuIHdpbnRfdCBnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIHdpbnRfdCBnZXR3Y2hhciAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgZnB1
dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2lu
dF90IHB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4
dGVybiB3aW50X3QgcHV0d2NoYXIgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4g
d2NoYXJfdCAqZmdldHdzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAog
ICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHdpbnRfdCB1bmdldHdjICh3aW50X3QgX193YywgX19GSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiB3aW50X3QgZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IGdldHdjaGFyX3VubG9ja2VkICh2b2lkKSB0
aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGZnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2NfdW5sb2NrZWQgKHdjaGFyX3QgX193
YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgcHV0d2NfdW5s
b2NrZWQgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3
aW50X3QgcHV0d2NoYXJfdW5sb2NrZWQgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVy
biB3Y2hhcl90ICpmZ2V0d3NfdW5sb2NrZWQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGZwdXR3c191bmxvY2tlZCAoX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHNpemVf
dCB3Y3NmdGltZSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1h
dCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3Qg
X190cCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gc2l6ZV90IHdjc2Z0aW1lX2wgKHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwojIDczNyAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDMKfQojIDU1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDIg
MwojIDY5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAg
dXNpbmcgOjptYnN0YXRlX3Q7Cn0KIyAxMzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N3Y2hhciIg
MwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgdXNpbmcgOjpidG93YzsKICB1
c2luZyA6OmZnZXR3YzsKICB1c2luZyA6OmZnZXR3czsKICB1c2luZyA6OmZwdXR3YzsKICB1c2lu
ZyA6OmZwdXR3czsKICB1c2luZyA6OmZ3aWRlOwogIHVzaW5nIDo6ZndwcmludGY7CiAgdXNpbmcg
Ojpmd3NjYW5mOwogIHVzaW5nIDo6Z2V0d2M7CiAgdXNpbmcgOjpnZXR3Y2hhcjsKICB1c2luZyA6
Om1icmxlbjsKICB1c2luZyA6Om1icnRvd2M7CiAgdXNpbmcgOjptYnNpbml0OwogIHVzaW5nIDo6
bWJzcnRvd2NzOwogIHVzaW5nIDo6cHV0d2M7CiAgdXNpbmcgOjpwdXR3Y2hhcjsKICB1c2luZyA6
OnN3cHJpbnRmOwogIHVzaW5nIDo6c3dzY2FuZjsKICB1c2luZyA6OnVuZ2V0d2M7CiAgdXNpbmcg
Ojp2ZndwcmludGY7CiAgdXNpbmcgOjp2ZndzY2FuZjsKICB1c2luZyA6OnZzd3ByaW50ZjsKICB1
c2luZyA6OnZzd3NjYW5mOwogIHVzaW5nIDo6dndwcmludGY7CiAgdXNpbmcgOjp2d3NjYW5mOwog
IHVzaW5nIDo6d2NydG9tYjsKICB1c2luZyA6Ondjc2NhdDsKICB1c2luZyA6Ondjc2NtcDsKICB1
c2luZyA6Ondjc2NvbGw7CiAgdXNpbmcgOjp3Y3NjcHk7CiAgdXNpbmcgOjp3Y3Njc3BuOwogIHVz
aW5nIDo6d2NzZnRpbWU7CiAgdXNpbmcgOjp3Y3NsZW47CiAgdXNpbmcgOjp3Y3NuY2F0OwogIHVz
aW5nIDo6d2NzbmNtcDsKICB1c2luZyA6Ondjc25jcHk7CiAgdXNpbmcgOjp3Y3NydG9tYnM7CiAg
dXNpbmcgOjp3Y3NzcG47CiAgdXNpbmcgOjp3Y3N0b2Q7CiAgdXNpbmcgOjp3Y3N0b2Y7CiAgdXNp
bmcgOjp3Y3N0b2s7CiAgdXNpbmcgOjp3Y3N0b2w7CiAgdXNpbmcgOjp3Y3N0b3VsOwogIHVzaW5n
IDo6d2NzeGZybTsKICB1c2luZyA6OndjdG9iOwogIHVzaW5nIDo6d21lbWNtcDsKICB1c2luZyA6
OndtZW1jcHk7CiAgdXNpbmcgOjp3bWVtbW92ZTsKICB1c2luZyA6OndtZW1zZXQ7CiAgdXNpbmcg
Ojp3cHJpbnRmOwogIHVzaW5nIDo6d3NjYW5mOwoKICB1c2luZyA6Ondjc2NocjsKCiAgaW5saW5l
IHdjaGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4g
d2NzY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcg
Ojp3Y3NwYnJrOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NwYnJrKHdjaGFyX3QqIF9fczEsIHdj
aGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2NzcGJyayhjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3Qq
PihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3Y3NyY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoK
ICB3Y3NyY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzcmNocihj
b25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6d2Nzc3Ry
OwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NzdHIod2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19z
MikKICB7IHJldHVybiB3Y3NzdHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9f
czIpOyB9CgogIHVzaW5nIDo6d21lbWNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd21lbWNocih3
Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogIHsgcmV0dXJuIHdtZW1jaHIo
Y29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jLCBfX24pOyB9Cn0KCgoKCgoKCm5h
bWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6d2NzdG9sZDsKICB1c2luZyA6Ondjc3RvbGw7
CiAgdXNpbmcgOjp3Y3N0b3VsbDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4
Ojp3Y3N0b2xkOwogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sbDsKICB1c2luZyBfX2dudV9jeHg6
Ondjc3RvdWxsOwp9CiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAyIDMK
Cm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFz
cyBmcG9zCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90
eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbW9mZiBfTV9vZmY7CiAgICAgIF9fc3RhdGVf
dHlwZSBfTV9zdDsKCiAgICBwdWJsaWM6CiAgICAgIF9fc3RhdGVfdHlwZQogICAgICBzdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIF9NX3N0OyB9CgogICAgICB2b2lkCiAgICAgIHN0YXRlKF9fc3RhdGVf
dHlwZSBfX3N0KSB7IF9NX3N0ID0gX19zdDsgfQoKCgogICAgICBmcG9zKCk6IF9NX29mZihzdHJl
YW1vZmYoKSksIF9NX3N0KF9fc3RhdGVfdHlwZSgpKSB7IH0KCiAgICAgIGZwb3Moc3RyZWFtb2Zm
IF9fb2ZmLCBfX3N0YXRlX3R5cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQogICAgICA6IF9NX29m
ZihfX29mZiksIF9NX3N0KF9fc3QpIHsgfQoKICAgICAgb3BlcmF0b3Igc3RyZWFtb2ZmKCkgY29u
c3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvcis9KHN0cmVh
bW9mZiBfX29mZikgeyBfTV9vZmYgKz0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBv
cyYKICAgICAgb3BlcmF0b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09IF9fb2ZmOyBy
ZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3IrKHN0cmVhbW9mZiBfX29m
ZikKICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgKz0gX19vZmY7
CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvci0o
c3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAg
IF9fdCAtPSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBib29sCiAg
ICAgIG9wZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N
X29mZiA9PSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhPShjb25z
dCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29m
ZjsgfQoKICAgICAgc3RyZWFtb2ZmCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
X01fb2ZmOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3Bvc2l0aW9uKHN0cmVhbW9mZiBfX29mZikg
eyBfTV9vZmYgPSBfX29mZjsgfQogICAgfTsKCgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0
cmVhbXBvczsKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gd3N0cmVhbXBvczsKCn0KIyA0NyAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zZndkIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb25fZGVm
aW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZv
aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhy
b3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoK
ICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
aW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5n
dGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3Jhbmdl
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lk
CiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNDggIi91c3IvaW5j
bHVkZS9jKysvMy4yL2lvc2Z3ZCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAg
IGNsYXNzIGJhc2ljX2lvczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh
aXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBj
bGFzcyBiYXNpY19vc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFt
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry
YWl0czxfQ2hhclQ+LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0No
YXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAg
dHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0
cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
ID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxv
Y2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+
LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNs
YXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19maWxl
YnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4K
ICAgIGNsYXNzIGJhc2ljX29mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2Zz
dHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo
YXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No
YXJUPiA+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19iYXNl
OwoKCiAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFt
YnVmPGNoYXI+IHN0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVh
bTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2lj
X2lvc3RyZWFtPGNoYXI+IGlvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+
IHN0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0
cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsK
ICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRl
ZiBiYXNpY19maWxlYnVmPGNoYXI+IGZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxj
aGFyPiBpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwog
IHR5cGVkZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBmc3RyZWFtOwoKCiAgdHlwZWRlZiBiYXNpY19p
b3M8d2NoYXJfdD4gd2lvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiB3c3Ry
ZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiB3aXN0cmVhbTsKICB0eXBl
ZGVmIGJhc2ljX29zdHJlYW08d2NoYXJfdD4gd29zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0
cmVhbTx3Y2hhcl90PiB3aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8d2NoYXJf
dD4gd3N0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdD4gd2lz
dHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdvc3Ry
aW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdzdHJpbmdz
dHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IHdmaWxlYnVmOwogIHR5cGVk
ZWYgYmFzaWNfaWZzdHJlYW08d2NoYXJfdD4gd2lmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2Zz
dHJlYW08d2NoYXJfdD4gd29mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTx3Y2hhcl90
PiB3ZnN0cmVhbTsKCn0KIyA0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAyIDMKIyAxICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb24iIDEgMwojIDQwICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9leGNlcHRpb24iIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgog
IGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNlcHRpb24oKSB0aHJvdygpIHsg
fQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgogICAgdmlydHVhbCBjb25zdCBj
aGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNzIGJhZF9leGNlcHRpb24g
OiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9leGNlcHRpb24oKSB0aHJv
dygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoKCiAg
dHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0eXBlZGVmIHZvaWQgKCp1
bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0
ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVybWluYXRlKCkgX19hdHRy
aWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4
cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdW5leHBlY3RlZCgp
IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA5OCAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvZXhjZXB0aW9uIiAzCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9Cgpu
YW1lc3BhY2UgX19nbnVfY3h4CnsKIyAxMTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlv
biIgMwogIHZvaWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgpOwp9Cgp9CiMgNDYgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFy
X3RyYWl0cy5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdHJpbmciIDEgMwojIDQ4
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0
cmluZy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiAiQyIgewoK
CgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAq
bWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl
cm4gdm9pZCAqbWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAq
X19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZv
aWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2Ms
IHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CgoKCmV4dGVybiB2b2lkICpyYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtcmNo
ciAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNo
YXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAg
ICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rl
c3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMs
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVz
dHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cg
KCk7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f
Y29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg
Kl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh
ciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy
biBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCiMgMTE3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGludCBzdHJjb2xs
X2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9f
bCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXpl
X3Qgc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBf
X24sCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29u
c3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fbWFsbG9jX18pKTsKIyAxNjAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCmV4dGVy
biBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNo
YXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
CgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3Ry
Y3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4g
KF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29u
c3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFy
ICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cg
KCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRo
cm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3Ry
Y2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxl
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCgpleHRlcm4g
dm9pZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNr
bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3Qg
X19uZWVkbGVsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
CmV4dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf
X24pIHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rl
c3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMs
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0
IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0
ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhs
ZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJu
IGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg
KnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24p
IHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9p
ZCAqX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9p
ZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qg
dm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25z
dCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBf
X2kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQg
ZmZzbCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0
cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2Vj
bXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQg
c3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNo
YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0
IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZGVsaW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNo
YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRocm93
ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIg
KnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3NyYykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAq
X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBu
Y3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICpt
ZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hh
ciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CiMgMzc5ICIv
dXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQojIDUyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3Ry
aW5nIiAyIDMKIyA3NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0cmluZyIgMwpuYW1lc3BhY2Ug
c3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1lbW1vdmU7CiAgdXNpbmcgOjpzdHJj
cHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0OwogIHVzaW5nIDo6c3RybmNh
dDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNtcDsKICB1c2luZyA6OnN0cmNvbGw7
CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZybTsKICB1c2luZyA6OnN0cmNzcG47
CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7CiAgdXNpbmcgOjptZW1zZXQ7CiAg
dXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsKCiAgdXNpbmcgOjptZW1jaHI7Cgog
IGlubGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGludCBfX2MsIHNpemVfdCBfX24pCiAg
eyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9fYywgX19uKTsg
fQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RyY2hyKGNoYXIqIF9fczEs
IGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNvbnN0IGNo
YXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBicms7CgogIGlubGluZSBjaGFyKgog
IHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0
aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KCiAgdXNp
bmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJyY2hyKGNoYXIqIF9fczEsIGludCBf
X24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4o
X19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7CgogIGlubGluZSBjaGFyKgogIHN0cnN0
cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJz
dHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9Cn0KIyA0NiAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsK
CgoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHMKICAgIHsK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlw
ZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5
cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25z
dCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hh
cl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wK
ICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoK
ICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29u
c3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAgIHN0YXRpYyBzaXplX3QKICAg
ICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKTsKCiAgICAgIHN0YXRpYyBjb25zdCBjaGFy
X3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0
IGNoYXJfdHlwZSYgX19hKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hh
cl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOwoKICAgICAg
c3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJf
dHlwZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBh
c3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpOwoKICAgICAg
c3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYyk7
CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBl
JiBfX2MpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5
cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQog
ICAgICBlb2YoKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGlu
dF90eXBlJiBfX2MpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFp
dHM8Y2hhcj4KICAgIHsKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAgICAgdHlwZWRl
ZiBpbnQgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0
eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVf
dHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNv
bnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGlj
IGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9f
YzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAg
ICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAg
IHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUo
Y29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24p
CiAgICAgIHsgcmV0dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMg
c2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgeyByZXR1cm4g
c3RybGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQo
Y29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQog
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5cGUqPihtZW1jaHIoX19zLCBf
X2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlw
ZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEsIF9fczIsIF9fbikpOyB9Cgog
ICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3Qg
Y2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxj
aGFyX3R5cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFy
X3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBl
IF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtc2V0KF9fcywg
X19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUo
Y29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBl
PihfX2MpOyB9CgoKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25z
dCBjaGFyX3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAg
ICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIp
CiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAg
ICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoLTEpKTsgfQoKICAgICAg
c3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAg
eyByZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDogX19jOyB9CiAgfTsKCgoKICB0ZW1wbGF0ZTw+
CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD4KICAgIHsKICAgICAgdHlwZWRlZiB3Y2hh
cl90IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3aW50X3QgaW50X3R5cGU7CiAgICAgIHR5cGVk
ZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIHdzdHJlYW1wb3MgcG9zX3R5cGU7
CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAog
ICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAg
IHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJf
dHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09
IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19j
MSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoK
ICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29u
c3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiB3bWVtY21wKF9f
czEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0
IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiB3Y3NsZW4oX19zKTsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6
ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1jaHIoX19z
LCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90
eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIGludF90eXBlIF9fbikKICAgICAgeyBy
ZXR1cm4gd21lbW1vdmUoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlw
ZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6
ZV90IF9fbikKICAgICAgeyByZXR1cm4gd21lbWNweShfX3MxLCBfX3MyLCBfX24pOyB9CgogICAg
ICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBf
X24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1zZXQoX19zLCBfX2EsIF9fbik7
IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90
eXBlJiBfX2MpIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgaW50X3R5
cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsgcmV0dXJuIGludF90
eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGlu
dF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9
PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50X3R5cGU+KCgweGZmZmZmZmZmdSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5
cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBlcV9p
bnRfdHlwZShfX2MsIGVvZigpKSA/IDAgOiBfX2M7IH0KICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9DaGFyX3RyYWl0c19tYXRj
aAogICAgewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJfdHJhaXRzX21hdGNoKF9DaGFy
VCBjb25zdCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3Io
KShfQ2hhclQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6ZXEoX01fYywgX19hKTsgfQog
ICAgfTsKfQojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3MiIDIgMwoKIyAxICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9sb2NhbGVmd2QuaCIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4
Ni1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
aTM4Ni1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Y2xvY2FsZSIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2Nsb2NhbGUiIDMKCiMgMSAi
L3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAz
CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMwojIDMwICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL2xvY2FsZS5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDMKZW51
bQp7CiAgX19MQ19DVFlQRSA9IDAsCiAgX19MQ19OVU1FUklDID0gMSwKICBfX0xDX1RJTUUgPSAy
LAogIF9fTENfQ09MTEFURSA9IDMsCiAgX19MQ19NT05FVEFSWSA9IDQsCiAgX19MQ19NRVNTQUdF
UyA9IDUsCiAgX19MQ19BTEwgPSA2LAogIF9fTENfUEFQRVIgPSA3LAogIF9fTENfTkFNRSA9IDgs
CiAgX19MQ19BRERSRVNTID0gOSwKICBfX0xDX1RFTEVQSE9ORSA9IDEwLAogIF9fTENfTUVBU1VS
RU1FTlQgPSAxMSwKICBfX0xDX0lERU5USUZJQ0FUSU9OID0gMTIKfTsKIyAzMSAiL3Vzci9pbmNs
dWRlL2xvY2FsZS5oIiAyIDMKCmV4dGVybiAiQyIgewojIDUyICIvdXNyL2luY2x1ZGUvbG9jYWxl
LmgiIDMKc3RydWN0IGxjb252CnsKCgogIGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgY2hhciAqdGhv
dXNhbmRzX3NlcDsKCgoKCgogIGNoYXIgKmdyb3VwaW5nOwoKCgoKCiAgY2hhciAqaW50X2N1cnJf
c3ltYm9sOwogIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsKICBjaGFyICptb25fZGVjaW1hbF9wb2lu
dDsKICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsKICBjaGFyICptb25fZ3JvdXBpbmc7CiAgY2hh
ciAqcG9zaXRpdmVfc2lnbjsKICBjaGFyICpuZWdhdGl2ZV9zaWduOwogIGNoYXIgaW50X2ZyYWNf
ZGlnaXRzOwogIGNoYXIgZnJhY19kaWdpdHM7CgogIGNoYXIgcF9jc19wcmVjZWRlczsKCiAgY2hh
ciBwX3NlcF9ieV9zcGFjZTsKCiAgY2hhciBuX2NzX3ByZWNlZGVzOwoKICBjaGFyIG5fc2VwX2J5
X3NwYWNlOwoKCgoKCgogIGNoYXIgcF9zaWduX3Bvc247CiAgY2hhciBuX3NpZ25fcG9zbjsKCgog
IGNoYXIgaW50X3BfY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50X3Bfc2VwX2J5X3NwYWNlOwoKICBj
aGFyIGludF9uX2NzX3ByZWNlZGVzOwoKICBjaGFyIGludF9uX3NlcF9ieV9zcGFjZTsKCgoKCgoK
ICBjaGFyIGludF9wX3NpZ25fcG9zbjsKICBjaGFyIGludF9uX3NpZ25fcG9zbjsKIyAxMTkgIi91
c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwp9OwoKCgoKCmV4dGVybiBjaGFyICpzZXRsb2NhbGUgKGlu
dCBfX2NhdGVnb3J5LCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4g
c3RydWN0IGxjb252ICpsb2NhbGVjb252ICh2b2lkKSB0aHJvdyAoKTsKCgojIDE0OCAiL3Vzci9p
bmNsdWRlL2xvY2FsZS5oIiAzCnR5cGVkZWYgX19sb2NhbGVfdCBsb2NhbGVfdDsKCgoKCgpleHRl
cm4gX19sb2NhbGVfdCBuZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5X21hc2ssIF9fY29uc3QgY2hh
ciAqX19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2Jh
c2UpIHRocm93ICgpOwojIDE4OSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCmV4dGVybiBfX2xv
Y2FsZV90IGR1cGxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCgpleHRl
cm4gdm9pZCBmcmVlbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiBfX2xvY2FsZV90IHVzZWxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93
ICgpOwoKCgoKCgoKfQojIDUwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbG9jYWxlIiAyIDMKCgoK
CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Omxjb252OwogIHVzaW5nIDo6c2V0bG9jYWxlOwog
IHVzaW5nIDo6bG9jYWxlY29udjsKfQojIDM3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxp
bnV4L2JpdHMvYysrbG9jYWxlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAx
IDMKIyAyNCAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbmxf
dHlwZXMuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9ubF90eXBlcy5oIiAzCmV4dGVybiAiQyIg
ewoKCnR5cGVkZWYgdm9pZCAqbmxfY2F0ZDsKCgp0eXBlZGVmIGludCBubF9pdGVtOwoKCmV4dGVy
biBubF9jYXRkIGNhdG9wZW4gKF9fY29uc3QgY2hhciAqX19jYXRfbmFtZSwgaW50IF9fZmxhZykg
dGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpjYXRnZXRzIChubF9jYXRkIF9fY2F0YWxvZywgaW50
IF9fc2V0LCBpbnQgX19udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fc3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNhdGNsb3NlIChubF9jYXRkIF9fY2F0
YWxvZykgdGhyb3cgKCk7Cgp9CiMgMjUgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAyIDMKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbGFu
Z2luZm8uaCIgMiAzCgoKZXh0ZXJuICJDIiB7CiMgNDMgIi91c3IvaW5jbHVkZS9sYW5naW5mby5o
IiAzCmVudW0KewoKCgogIEFCREFZXzEgPSAoKChfX0xDX1RJTUUpIDw8IDE2KSB8ICgwKSksCgog
IEFCREFZXzIsCgogIEFCREFZXzMsCgogIEFCREFZXzQsCgogIEFCREFZXzUsCgogIEFCREFZXzYs
CgogIEFCREFZXzcsCgoKCiAgREFZXzEsCgogIERBWV8yLAoKICBEQVlfMywKCiAgREFZXzQsCgog
IERBWV81LAoKICBEQVlfNiwKCiAgREFZXzcsCgoKCiAgQUJNT05fMSwKCiAgQUJNT05fMiwKCiAg
QUJNT05fMywKCiAgQUJNT05fNCwKCiAgQUJNT05fNSwKCiAgQUJNT05fNiwKCiAgQUJNT05fNywK
CiAgQUJNT05fOCwKCiAgQUJNT05fOSwKCiAgQUJNT05fMTAsCgogIEFCTU9OXzExLAoKICBBQk1P
Tl8xMiwKCgoKICBNT05fMSwKCiAgTU9OXzIsCgogIE1PTl8zLAoKICBNT05fNCwKCiAgTU9OXzUs
CgogIE1PTl82LAoKICBNT05fNywKCiAgTU9OXzgsCgogIE1PTl85LAoKICBNT05fMTAsCgogIE1P
Tl8xMSwKCiAgTU9OXzEyLAoKCiAgQU1fU1RSLAoKICBQTV9TVFIsCgoKICBEX1RfRk1ULAoKICBE
X0ZNVCwKCiAgVF9GTVQsCgogIFRfRk1UX0FNUE0sCgoKICBFUkEsCgogIF9fRVJBX1lFQVIsCgoK
CiAgRVJBX0RfRk1ULAoKICBBTFRfRElHSVRTLAoKICBFUkFfRF9UX0ZNVCwKCiAgRVJBX1RfRk1U
LAoKCiAgX05MX1RJTUVfRVJBX05VTV9FTlRSSUVTLAogIF9OTF9USU1FX0VSQV9FTlRSSUVTLAoK
ICBfTkxfV0FCREFZXzEsCiAgX05MX1dBQkRBWV8yLAogIF9OTF9XQUJEQVlfMywKICBfTkxfV0FC
REFZXzQsCiAgX05MX1dBQkRBWV81LAogIF9OTF9XQUJEQVlfNiwKICBfTkxfV0FCREFZXzcsCgoK
ICBfTkxfV0RBWV8xLAogIF9OTF9XREFZXzIsCiAgX05MX1dEQVlfMywKICBfTkxfV0RBWV80LAog
IF9OTF9XREFZXzUsCiAgX05MX1dEQVlfNiwKICBfTkxfV0RBWV83LAoKCiAgX05MX1dBQk1PTl8x
LAogIF9OTF9XQUJNT05fMiwKICBfTkxfV0FCTU9OXzMsCiAgX05MX1dBQk1PTl80LAogIF9OTF9X
QUJNT05fNSwKICBfTkxfV0FCTU9OXzYsCiAgX05MX1dBQk1PTl83LAogIF9OTF9XQUJNT05fOCwK
ICBfTkxfV0FCTU9OXzksCiAgX05MX1dBQk1PTl8xMCwKICBfTkxfV0FCTU9OXzExLAogIF9OTF9X
QUJNT05fMTIsCgoKICBfTkxfV01PTl8xLAogIF9OTF9XTU9OXzIsCiAgX05MX1dNT05fMywKICBf
TkxfV01PTl80LAogIF9OTF9XTU9OXzUsCiAgX05MX1dNT05fNiwKICBfTkxfV01PTl83LAogIF9O
TF9XTU9OXzgsCiAgX05MX1dNT05fOSwKICBfTkxfV01PTl8xMCwKICBfTkxfV01PTl8xMSwKICBf
TkxfV01PTl8xMiwKCiAgX05MX1dBTV9TVFIsCiAgX05MX1dQTV9TVFIsCgogIF9OTF9XRF9UX0ZN
VCwKICBfTkxfV0RfRk1ULAogIF9OTF9XVF9GTVQsCiAgX05MX1dUX0ZNVF9BTVBNLAoKICBfTkxf
V0VSQV9ZRUFSLAogIF9OTF9XRVJBX0RfRk1ULAogIF9OTF9XQUxUX0RJR0lUUywKICBfTkxfV0VS
QV9EX1RfRk1ULAogIF9OTF9XRVJBX1RfRk1ULAoKICBfTkxfVElNRV9XRUVLX05EQVlTLAogIF9O
TF9USU1FX1dFRUtfMVNUREFZLAogIF9OTF9USU1FX1dFRUtfMVNUV0VFSywKICBfTkxfVElNRV9G
SVJTVF9XRUVLREFZLAogIF9OTF9USU1FX0ZJUlNUX1dPUktEQVksCiAgX05MX1RJTUVfQ0FMX0RJ
UkVDVElPTiwKICBfTkxfVElNRV9USU1FWk9ORSwKCiAgX0RBVEVfRk1ULAoKICBfTkxfV19EQVRF
X0ZNVCwKCiAgX05MX1RJTUVfQ09ERVNFVCwKCiAgX05MX05VTV9MQ19USU1FLAoKCgoKICBfTkxf
Q09MTEFURV9OUlVMRVMgPSAoKChfX0xDX0NPTExBVEUpIDw8IDE2KSB8ICgwKSksCiAgX05MX0NP
TExBVEVfUlVMRVNFVFMsCiAgX05MX0NPTExBVEVfVEFCTEVNQiwKICBfTkxfQ09MTEFURV9XRUlH
SFRNQiwKICBfTkxfQ09MTEFURV9FWFRSQU1CLAogIF9OTF9DT0xMQVRFX0lORElSRUNUTUIsCiAg
X05MX0NPTExBVEVfR0FQMSwKICBfTkxfQ09MTEFURV9HQVAyLAogIF9OTF9DT0xMQVRFX0dBUDMs
CiAgX05MX0NPTExBVEVfVEFCTEVXQywKICBfTkxfQ09MTEFURV9XRUlHSFRXQywKICBfTkxfQ09M
TEFURV9FWFRSQVdDLAogIF9OTF9DT0xMQVRFX0lORElSRUNUV0MsCiAgX05MX0NPTExBVEVfU1lN
Ql9IQVNIX1NJWkVNQiwKICBfTkxfQ09MTEFURV9TWU1CX1RBQkxFTUIsCiAgX05MX0NPTExBVEVf
U1lNQl9FWFRSQU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFNQiwKICBfTkxfQ09MTEFURV9DT0xM
U0VRV0MsCiAgX05MX0NPTExBVEVfQ09ERVNFVCwKICBfTkxfTlVNX0xDX0NPTExBVEUsCgoKCgog
IF9OTF9DVFlQRV9DTEFTUyA9ICgoKF9fTENfQ1RZUEUpIDw8IDE2KSB8ICgwKSksCiAgX05MX0NU
WVBFX1RPVVBQRVIsCiAgX05MX0NUWVBFX0dBUDEsCiAgX05MX0NUWVBFX1RPTE9XRVIsCiAgX05M
X0NUWVBFX0dBUDIsCiAgX05MX0NUWVBFX0NMQVNTMzIsCiAgX05MX0NUWVBFX0dBUDMsCiAgX05M
X0NUWVBFX0dBUDQsCiAgX05MX0NUWVBFX0dBUDUsCiAgX05MX0NUWVBFX0dBUDYsCiAgX05MX0NU
WVBFX0NMQVNTX05BTUVTLAogIF9OTF9DVFlQRV9NQVBfTkFNRVMsCiAgX05MX0NUWVBFX1dJRFRI
LAogIF9OTF9DVFlQRV9NQl9DVVJfTUFYLAogIF9OTF9DVFlQRV9DT0RFU0VUX05BTUUsCiAgQ09E
RVNFVCA9IF9OTF9DVFlQRV9DT0RFU0VUX05BTUUsCgogIF9OTF9DVFlQRV9UT1VQUEVSMzIsCiAg
X05MX0NUWVBFX1RPTE9XRVIzMiwKICBfTkxfQ1RZUEVfQ0xBU1NfT0ZGU0VULAogIF9OTF9DVFlQ
RV9NQVBfT0ZGU0VULAogIF9OTF9DVFlQRV9JTkRJR0lUU19NQl9MRU4sCiAgX05MX0NUWVBFX0lO
RElHSVRTMF9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX01CLAogIF9OTF9DVFlQRV9JTkRJR0lU
UzJfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTM19NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM0X01C
LAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNl9NQiwKICBf
TkxfQ1RZUEVfSU5ESUdJVFM3X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzhfTUIsCiAgX05MX0NU
WVBFX0lORElHSVRTOV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFNfV0NfTEVOLAogIF9OTF9DVFlQ
RV9JTkRJR0lUUzBfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTMV9XQywKICBfTkxfQ1RZUEVfSU5E
SUdJVFMyX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzNfV0MsCiAgX05MX0NUWVBFX0lORElHSVRT
NF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM1X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzZfV0Ms
CiAgX05MX0NUWVBFX0lORElHSVRTN19XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM4X1dDLAogIF9O
TF9DVFlQRV9JTkRJR0lUUzlfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMF9NQiwKICBfTkxfQ1RZ
UEVfT1VURElHSVQxX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDJfTUIsCiAgX05MX0NUWVBFX09V
VERJR0lUM19NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ0X01CLAogIF9OTF9DVFlQRV9PVVRESUdJ
VDVfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNl9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ3X01C
LAogIF9OTF9DVFlQRV9PVVRESUdJVDhfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUOV9NQiwKICBf
TkxfQ1RZUEVfT1VURElHSVQwX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDFfV0MsCiAgX05MX0NU
WVBFX09VVERJR0lUMl9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQzX1dDLAogIF9OTF9DVFlQRV9P
VVRESUdJVDRfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUNV9XQywKICBfTkxfQ1RZUEVfT1VURElH
SVQ2X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDdfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUOF9X
QywKICBfTkxfQ1RZUEVfT1VURElHSVQ5X1dDLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UQUJfU0la
RSwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9JRFgsCiAgX05MX0NUWVBFX1RSQU5TTElUX0ZS
T01fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19JRFgsCiAgX05MX0NUWVBFX1RSQU5TTElU
X1RPX1RCTCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNTSU5HX0xFTiwKICBfTkxf
Q1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNTSU5HLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9JR05P
UkVfTEVOLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9JR05PUkUsCiAgX05MX0NUWVBFX0VYVFJBX01B
UF8xLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzMsCiAg
X05MX0NUWVBFX0VYVFJBX01BUF80LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNSwKICBfTkxfQ1RZ
UEVfRVhUUkFfTUFQXzYsCiAgX05MX0NUWVBFX0VYVFJBX01BUF83LAogIF9OTF9DVFlQRV9FWFRS
QV9NQVBfOCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzksCiAgX05MX0NUWVBFX0VYVFJBX01BUF8x
MCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzExLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTIsCiAg
X05MX0NUWVBFX0VYVFJBX01BUF8xMywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzE0LAogIF9OTF9O
VU1fTENfQ1RZUEUsCgoKCgogIF9fSU5UX0NVUlJfU1lNQk9MID0gKCgoX19MQ19NT05FVEFSWSkg
PDwgMTYpIHwgKDApKSwKCgoKICBfX0NVUlJFTkNZX1NZTUJPTCwKCgoKICBfX01PTl9ERUNJTUFM
X1BPSU5ULAoKCgogIF9fTU9OX1RIT1VTQU5EU19TRVAsCgoKCiAgX19NT05fR1JPVVBJTkcsCgoK
CiAgX19QT1NJVElWRV9TSUdOLAoKCgogIF9fTkVHQVRJVkVfU0lHTiwKCgoKICBfX0lOVF9GUkFD
X0RJR0lUUywKCgoKICBfX0ZSQUNfRElHSVRTLAoKCgogIF9fUF9DU19QUkVDRURFUywKCgoKICBf
X1BfU0VQX0JZX1NQQUNFLAoKCgogIF9fTl9DU19QUkVDRURFUywKCgoKICBfX05fU0VQX0JZX1NQ
QUNFLAoKCgogIF9fUF9TSUdOX1BPU04sCgoKCiAgX19OX1NJR05fUE9TTiwKCgoKICBfTkxfTU9O
RVRBUllfQ1JOQ1lTVFIsCgogIF9fSU5UX1BfQ1NfUFJFQ0VERVMsCgoKCiAgX19JTlRfUF9TRVBf
QllfU1BBQ0UsCgoKCiAgX19JTlRfTl9DU19QUkVDRURFUywKCgoKICBfX0lOVF9OX1NFUF9CWV9T
UEFDRSwKCgoKICBfX0lOVF9QX1NJR05fUE9TTiwKCgoKICBfX0lOVF9OX1NJR05fUE9TTiwKCgoK
ICBfTkxfTU9ORVRBUllfRFVPX0lOVF9DVVJSX1NZTUJPTCwKICBfTkxfTU9ORVRBUllfRFVPX0NV
UlJFTkNZX1NZTUJPTCwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9GUkFDX0RJR0lUUywKICBfTkxf
TU9ORVRBUllfRFVPX0ZSQUNfRElHSVRTLAogIF9OTF9NT05FVEFSWV9EVU9fUF9DU19QUkVDRURF
UywKICBfTkxfTU9ORVRBUllfRFVPX1BfU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9f
Tl9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX05fU0VQX0JZX1NQQUNFLAogIF9OTF9N
T05FVEFSWV9EVU9fSU5UX1BfQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9T
RVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfTl9DU19QUkVDRURFUywKICBfTkxf
TU9ORVRBUllfRFVPX0lOVF9OX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX1BfU0lH
Tl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RV
T19JTlRfUF9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19JTlRfTl9TSUdOX1BPU04sCiAg
X05MX01PTkVUQVJZX1VOT19WQUxJRF9GUk9NLAogIF9OTF9NT05FVEFSWV9VTk9fVkFMSURfVE8s
CiAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9GUk9NLAogIF9OTF9NT05FVEFSWV9EVU9fVkFMSURf
VE8sCiAgX05MX01PTkVUQVJZX0NPTlZFUlNJT05fUkFURSwKICBfTkxfTU9ORVRBUllfREVDSU1B
TF9QT0lOVF9XQywKICBfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywKICBfTkxfTU9ORVRB
UllfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01PTkVUQVJZLAoKCgogIF9fREVDSU1BTF9QT0lOVCA9
ICgoKF9fTENfTlVNRVJJQykgPDwgMTYpIHwgKDApKSwKCgoKICBSQURJWENIQVIgPSBfX0RFQ0lN
QUxfUE9JTlQsCgogIF9fVEhPVVNBTkRTX1NFUCwKCgoKICBUSE9VU0VQID0gX19USE9VU0FORFNf
U0VQLAoKICBfX0dST1VQSU5HLAoKCgogIF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsCiAg
X05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywKICBfTkxfTlVNRVJJQ19DT0RFU0VULAogIF9O
TF9OVU1fTENfTlVNRVJJQywKCiAgX19ZRVNFWFBSID0gKCgoX19MQ19NRVNTQUdFUykgPDwgMTYp
IHwgKDApKSwKCiAgX19OT0VYUFIsCgogIF9fWUVTU1RSLAoKCgogIF9fTk9TVFIsCgoKCiAgX05M
X01FU1NBR0VTX0NPREVTRVQsCiAgX05MX05VTV9MQ19NRVNTQUdFUywKCiAgX05MX1BBUEVSX0hF
SUdIVCA9ICgoKF9fTENfUEFQRVIpIDw8IDE2KSB8ICgwKSksCiAgX05MX1BBUEVSX1dJRFRILAog
IF9OTF9QQVBFUl9DT0RFU0VULAogIF9OTF9OVU1fTENfUEFQRVIsCgogIF9OTF9OQU1FX05BTUVf
Rk1UID0gKCgoX19MQ19OQU1FKSA8PCAxNikgfCAoMCkpLAogIF9OTF9OQU1FX05BTUVfR0VOLAog
IF9OTF9OQU1FX05BTUVfTVIsCiAgX05MX05BTUVfTkFNRV9NUlMsCiAgX05MX05BTUVfTkFNRV9N
SVNTLAogIF9OTF9OQU1FX05BTUVfTVMsCiAgX05MX05BTUVfQ09ERVNFVCwKICBfTkxfTlVNX0xD
X05BTUUsCgogIF9OTF9BRERSRVNTX1BPU1RBTF9GTVQgPSAoKChfX0xDX0FERFJFU1MpIDw8IDE2
KSB8ICgwKSksCiAgX05MX0FERFJFU1NfQ09VTlRSWV9OQU1FLAogIF9OTF9BRERSRVNTX0NPVU5U
UllfUE9TVCwKICBfTkxfQUREUkVTU19DT1VOVFJZX0FCMiwKICBfTkxfQUREUkVTU19DT1VOVFJZ
X0FCMywKICBfTkxfQUREUkVTU19DT1VOVFJZX0NBUiwKICBfTkxfQUREUkVTU19DT1VOVFJZX05V
TSwKICBfTkxfQUREUkVTU19DT1VOVFJZX0lTQk4sCiAgX05MX0FERFJFU1NfTEFOR19OQU1FLAog
IF9OTF9BRERSRVNTX0xBTkdfQUIsCiAgX05MX0FERFJFU1NfTEFOR19URVJNLAogIF9OTF9BRERS
RVNTX0xBTkdfTElCLAogIF9OTF9BRERSRVNTX0NPREVTRVQsCiAgX05MX05VTV9MQ19BRERSRVNT
LAoKICBfTkxfVEVMRVBIT05FX1RFTF9JTlRfRk1UID0gKCgoX19MQ19URUxFUEhPTkUpIDw8IDE2
KSB8ICgwKSksCiAgX05MX1RFTEVQSE9ORV9URUxfRE9NX0ZNVCwKICBfTkxfVEVMRVBIT05FX0lO
VF9TRUxFQ1QsCiAgX05MX1RFTEVQSE9ORV9JTlRfUFJFRklYLAogIF9OTF9URUxFUEhPTkVfQ09E
RVNFVCwKICBfTkxfTlVNX0xDX1RFTEVQSE9ORSwKCiAgX05MX01FQVNVUkVNRU5UX01FQVNVUkVN
RU5UID0gKCgoX19MQ19NRUFTVVJFTUVOVCkgPDwgMTYpIHwgKDApKSwKICBfTkxfTUVBU1VSRU1F
TlRfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01FQVNVUkVNRU5ULAoKICBfTkxfSURFTlRJRklDQVRJ
T05fVElUTEUgPSAoKChfX0xDX0lERU5USUZJQ0FUSU9OKSA8PCAxNikgfCAoMCkpLAogIF9OTF9J
REVOVElGSUNBVElPTl9TT1VSQ0UsCiAgX05MX0lERU5USUZJQ0FUSU9OX0FERFJFU1MsCiAgX05M
X0lERU5USUZJQ0FUSU9OX0NPTlRBQ1QsCiAgX05MX0lERU5USUZJQ0FUSU9OX0VNQUlMLAogIF9O
TF9JREVOVElGSUNBVElPTl9URUwsCiAgX05MX0lERU5USUZJQ0FUSU9OX0ZBWCwKICBfTkxfSURF
TlRJRklDQVRJT05fTEFOR1VBR0UsCiAgX05MX0lERU5USUZJQ0FUSU9OX1RFUlJJVE9SWSwKICBf
TkxfSURFTlRJRklDQVRJT05fQVVESUVOQ0UsCiAgX05MX0lERU5USUZJQ0FUSU9OX0FQUExJQ0FU
SU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9BQkJSRVZJQVRJT04sCiAgX05MX0lERU5USUZJQ0FU
SU9OX1JFVklTSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9EQVRFLAogIF9OTF9JREVOVElGSUNB
VElPTl9DQVRFR09SWSwKICBfTkxfSURFTlRJRklDQVRJT05fQ09ERVNFVCwKICBfTkxfTlVNX0xD
X0lERU5USUZJQ0FUSU9OLAoKCiAgX05MX05VTQp9OwojIDU3NSAiL3Vzci9pbmNsdWRlL2xhbmdp
bmZvLmgiIDMKZXh0ZXJuIGNoYXIgKm5sX2xhbmdpbmZvIChubF9pdGVtIF9faXRlbSkgdGhyb3cg
KCk7CiMgNTg2ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwpleHRlcm4gY2hhciAqbmxfbGFu
Z2luZm9fbCAobmxfaXRlbSBfX2l0ZW0sIF9fbG9jYWxlX3QgbCk7CgoKfQojIDM4ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDIgMwojIDEgIi91c3Iv
aW5jbHVkZS9pY29udi5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDMKIyAxICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MjUgIi91c3IvaW5jbHVkZS9pY29udi5oIiAyIDMKCgpleHRlcm4gIkMiIHsKCgp0eXBlZGVmIHZv
aWQgKmljb252X3Q7CgoKCgpleHRlcm4gaWNvbnZfdCBpY29udl9vcGVuIChfX2NvbnN0IGNoYXIg
Kl9fdG9jb2RlLCBfX2NvbnN0IGNoYXIgKl9fZnJvbWNvZGUpCiAgICAgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gc2l6ZV90IGljb252IChpY29udl90IF9fY2QsIGNoYXIgKipfX3Jlc3RyaWN0IF9faW5i
dWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX2luYnl0ZXNsZWZ0
LAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX291dGJ1ZiwKICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fb3V0Ynl0ZXNsZWZ0KTsKCgpleHRl
cm4gaW50IGljb252X2Nsb3NlIChpY29udl90IF9fY2QpIHRocm93ICgpOwoKfQojIDM5ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDIgMwojIDEgIi91
c3IvaW5jbHVkZS9saWJpbnRsLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAz
CmV4dGVybiAiQyIgewoKCgoKZXh0ZXJuIGNoYXIgKmdldHRleHQgKF9fY29uc3QgY2hhciAqX19t
c2dpZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpkZ2V0dGV4dCAoX19jb25zdCBjaGFyICpf
X2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZCkKICAgICB0aHJvdyAoKTsKZXh0ZXJu
IGNoYXIgKl9fZGdldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBfX2NvbnN0IGNo
YXIgKl9fbXNnaWQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19f
ICgyKSkpOwoKCgpleHRlcm4gY2hhciAqZGNnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlu
bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX21zZ2lkLCBpbnQg
X19jYXRlZ29yeSkgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpfX2RjZ2V0dGV4dCAoX19jb25zdCBj
aGFyICpfX2RvbWFpbm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX21zZ2lkLCBpbnQgX19jYXRlZ29yeSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfYXJnX18gKDIpKSk7CgoKCgpleHRlcm4gY2hhciAqbmdldHRleHQgKF9fY29uc3Qg
Y2hhciAqX19tc2dpZDEsIF9fY29uc3QgY2hhciAqX19tc2dpZDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbG9uZyBpbnQgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2Zvcm1hdF9hcmdfXyAoMSkpKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIp
KSk7CgoKCmV4dGVybiBjaGFyICpkbmdldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1l
LCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQxLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24pCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgyKSkpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h
dF9hcmdfXyAoMykpKTsKCgoKZXh0ZXJuIGNoYXIgKmRjbmdldHRleHQgKF9fY29uc3QgY2hhciAq
X19kb21haW5uYW1lLCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IF9fY2F0ZWdvcnkpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgyKSkpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9h
cmdfXyAoMykpKTsKCgoKCgpleHRlcm4gY2hhciAqdGV4dGRvbWFpbiAoX19jb25zdCBjaGFyICpf
X2RvbWFpbm5hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqYmluZHRleHRkb21haW4gKF9f
Y29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19kaXJuYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmJpbmRfdGV4
dGRvbWFpbl9jb2Rlc2V0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fY29kZXNldCkgdGhyb3cg
KCk7CiMgMTIwICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAzCn0KIyA0MCAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKCgoKCgoKbmFtZXNwYWNl
IF9fZ251X2N4eAp7CiAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxl
Owp9CgoKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiBfX2xvY2FsZV90IF9fY19sb2NhbGU7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KICAgIGludAogICAgX19jb252ZXJ0X2Zyb21fdihjaGFy
KiBfX291dCwgY29uc3QgaW50IF9fc2l6ZSwgY29uc3QgY2hhciogX19mbXQsCgogICAgICAgICAg
ICAgICAgICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMg
PSAtMSkKICAgIHsKICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2Nh
bGUoX19jbG9jKTsKIyA3MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2Mr
K2xvY2FsZS5oIiAzCiAgICAgIGludCBfX3JldDsKCiAgICAgIGlmIChfX3ByZWMgPj0gMCkKICAg
ICAgICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7
CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10
LCBfX3YpOwojIDg3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9j
YWxlLmgiIDMKICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CgoKCgogICAgICBy
ZXR1cm4gX19yZXQ7CiAgICB9Cn0KIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2Nh
bGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2xpbWl0cyIgMSAzCiMgNDgg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2NsaW1pdHMiIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xpYi9nY2Mt
bGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAxIDMKCgoKCgoKIyAx
ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9saW1pdHMuaCIgMSAz
CiMgMTMyICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9saW1pdHMu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTQ0ICIvdXNyL2luY2x1ZGUv
bGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwojIDEy
NiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvbG9jYWxfbGltLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVk
ZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9s
aW0uaCIgMiAzCiMgMTQ1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMgMTQ5ICIvdXNyL2luY2x1ZGUvbGltaXRz
LmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMKIyAzNCAi
L3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z
dGRpb19saW0uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMK
IyAxMzYgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMTM3ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0u
aCIgMiAzCiMgMTUzICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDEzMyAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDggIi91c3Iv
bGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAx
MiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvbGltaXRzLmgiIDIg
MwojIDUwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbGltaXRzIiAyIDMKIyA0OCAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvY2N0eXBlIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2N0eXBlIiAzCgoKIyAx
ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAz
CmV4dGVybiAiQyIgewojIDQxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9lbmRpYW4uaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5o
IiAyIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwoKCgoKCgplbnVtCnsKICBfSVN1
cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSks
CiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkg
Pj4gOCkpLAogIF9JU2FscGhhID0gKCgyKSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8
PCAoMikpID4+IDgpKSwKICBfSVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkg
OiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQp
KSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgx
IDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwg
OCA/ICgoMSA8PCAoNikpIDw8IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0g
KCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNi
bGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSks
CiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkg
Pj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgx
IDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8
PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4KSkKfTsKIyA4MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi
IDMKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICoqX19jdHlwZV9iX2xvYyAodm9p
ZCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdCkpOwpleHRlcm4gX19jb25zdCBfX2ludDMy
X3QgKipfX2N0eXBlX3RvbG93ZXJfbG9jICh2b2lkKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0KSk7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqKl9fY3R5cGVfdG91cHBlcl9sb2MgKHZv
aWQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3QpKTsKIyA5NiAiL3Vzci9pbmNsdWRlL2N0
eXBlLmgiIDMKCgoKCgoKZXh0ZXJuIGludCBpc2FsbnVtIChpbnQpIHRocm93ICgpOwpleHRlcm4g
aW50IGlzYWxwaGEgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNjbnRybCAoaW50KSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBpc2RpZ2l0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzbG93
ZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNncmFwaCAoaW50KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBpc3ByaW50IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHVuY3QgKGludCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgaXNzcGFjZSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBp
c3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzeGRpZ2l0IChpbnQpIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
dG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBpc2JsYW5rIChp
bnQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGlzY3R5cGUgKGludCBfX2MsIGludCBfX21h
c2spIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGlzYXNjaWkgKGludCBfX2MpIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IHRvYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IF90b3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IF90b2xvd2VyIChpbnQpIHRocm93
ICgpOwojIDI0NyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVtX2wg
KGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNhbHBoYV9sIChpbnQsIF9f
bG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmxfbCAoaW50LCBfX2xvY2FsZV90
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2RpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgaXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRl
cm4gaW50IGlzZ3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBp
c3ByaW50X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwdW5jdF9s
IChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2VfbCAoaW50LCBf
X2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3VwcGVyX2wgKGludCwgX19sb2NhbGVf
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN4ZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJv
dyAoKTsKCmV4dGVybiBpbnQgaXNibGFua19sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IF9fdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBfX3RvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRo
cm93ICgpOwpleHRlcm4gaW50IHRvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRo
cm93ICgpOwojIDMyMyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKfQojIDUwICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9jY3R5cGUiIDIgMwojIDY2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jY3R5cGUi
IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjppc2FsbnVtOwogIHVzaW5nIDo6aXNhbHBoYTsK
ICB1c2luZyA6OmlzY250cmw7CiAgdXNpbmcgOjppc2RpZ2l0OwogIHVzaW5nIDo6aXNncmFwaDsK
ICB1c2luZyA6OmlzbG93ZXI7CiAgdXNpbmcgOjppc3ByaW50OwogIHVzaW5nIDo6aXNwdW5jdDsK
ICB1c2luZyA6Omlzc3BhY2U7CiAgdXNpbmcgOjppc3VwcGVyOwogIHVzaW5nIDo6aXN4ZGlnaXQ7
CiAgdXNpbmcgOjp0b2xvd2VyOwogIHVzaW5nIDo6dG91cHBlcjsKfQojIDQ5ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9zdHJpbmciIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDMKCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvbWVtb3J5IiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMSAzCiMgNDggIi91c3IvaW5j
bHVkZS9jKysvMy4yL2NzdGRsaWIiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAx
IDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUv
c3RkbGliLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
d2FpdGZsYWdzLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9iaXRz
L3dhaXRzdGF0dXMuaCIgMwp1bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3Ry
dWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAg
dW5zaWduZWQgaW50IF9fd19jb3JlZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0
Y29kZTo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rl
cm1pbmF0ZWQ7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0
b3B2YWw6ODsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNp
Z25lZCBpbnQ6MTY7CgoKCgoKCiAgICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKIyA0NCAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyA5MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoK
dHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsK
CgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVt
OwogIH0gbGRpdl90OwoKCgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAg
IGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsK
CgojIDEzNyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9n
ZXRfbWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9f
Y29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAq
X19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpfX2V4dGVu
c2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gZG91
YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgpleHRl
cm4gbG9uZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQg
c3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl
KQogICAgIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBz
dHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93
ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3Vx
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkK
ICAgICB0aHJvdyAoKTsKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0
cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJv
dyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91
bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFz
ZSkKICAgICB0aHJvdyAoKTsKCiMgMjI5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu
IGxvbmcgaW50IHN0cnRvbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i
YXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgp
OwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpl
eHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IHN0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJs
ZSBzdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2Mp
CiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc3RydG9mX2wgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl
IHN0cnRvbGRfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3N0cnRv
Zl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3Jv
dXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4g
bG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg
aW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0
b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
YmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9u
ZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4
dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3Qg
Y2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3Jv
dXApCiAgICAgdGhyb3cgKCk7CiMgNDA4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu
IGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2
NGwgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVk
ZS9zeXMvdHlwZXMuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hh
cjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBl
ZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191
X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBlZGVmIF9f
bG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0eXBlZGVmIF9f
aW5vNjRfdCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBf
X2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9f
bmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYg
X19vZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKIyAxMDUgIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRl
ZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBl
ZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAxMzcg
Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vjb25k
c190OwoKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKIyAxICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ4
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
aW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5z
aWduZWQgaW50IHVpbnQ7CiMgMTkxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRl
ZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVm
IGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVm
IGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVm
IGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVk
ZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9f
KSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0
ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIxNiAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAz
CiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMKIyA0NiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUu
aCIgMwpzdHJ1Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNv
bmRzX3QgdHZfdXNlYzsKICB9OwojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMK
IyA1NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwp0eXBlZGVmIGxvbmcgaW50IF9fZmRf
bWFzazsKIyA2NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwp0eXBlZGVmIHN0cnVjdAog
IHsKCgoKICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFz
aykpXTsKCgoKCgogIH0gZmRfc2V0OwoKCgoKCgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoj
IDk5ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgpleHRl
cm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywK
ICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAg
ICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAg
ICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gaW50IHBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3Jl
YWRmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMs
CiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVv
dXQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX3Np
Z21hc2spIHRocm93ICgpOwoKCn0KIyAyMTcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAz
CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMjAgIi91c3IvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCgp0eXBlZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsK
CgoKCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRf
dCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDI1OCAi
L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0
X3Q7CnR5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxj
bnQ2NF90IGZzZmlsY250NjRfdDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0
eXBlcy5oIiAxIDMKIyAyNjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKfQojIDQx
NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRv
bSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9f
c2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50
IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9f
c3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50
MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGlu
dCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQz
Ml90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2Rh
dGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVz
dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVk
IGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJu
IGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBf
X3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0
YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0
cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cg
KCk7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBl
cmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0
OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25n
IGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVu
c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFu
ZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQg
aW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIHRocm93ICgpOwpl
eHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgdGhyb3cg
KCk7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBf
X3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsKICAgIHVuc2lnbmVkIHNo
b3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19pbml0OwogICAgdW5zaWduZWQg
bG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRy
YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZXJhbmQ0OF9y
ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
bHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAg
ICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp
OwpleHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm
ZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVz
dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQg
c2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0
OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBp
bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9y
IChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAg
IHRocm93ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2Vl
ZDE2dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZm
ZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf
X3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19i
dWZmZXIpIHRocm93ICgpOwoKCgoKCgoKCgpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QgX19z
aXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQg
KmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2
b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs
bG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNs
dWRlL2FsbG9jYS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2
ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZv
aWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU3NyAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3Np
emUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50
IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6
ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK
CgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25v
cmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9f
c3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKCgoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgpleHRlcm4gY2hhciAq
Z2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq
X19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50
IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50
IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0
IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQp
IHRocm93ICgpOwojIDY2MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpt
a3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0
ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2NzggIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7
CiMgNjg4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNo
YXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0
IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2Fs
aXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDcxMiAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry
aWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2Zu
X3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJf
Zm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0
IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsK
CgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVf
dCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoK
ZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcg
aW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50
IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRl
cm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKX19leHRlbnNpb25fXyBl
eHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIyA3NzYgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwg
aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp
Y3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAg
ICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdj
dnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVz
dHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0
IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAq
cWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln
aXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jl
c3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAg
ICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9y
IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAg
aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAg
ICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
CiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0
cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwg
c2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3Qg
Y2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2No
YXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21i
IChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qg
bWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBj
aGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA4NTggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MwpleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAogICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywKICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJvdyAoKTsKCgoK
CgoKCmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHVubG9ja3B0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAo
aW50IF9fZmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQs
IGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0
cHQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBf
X2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyA1MyAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvY3N0ZGxpYiIgMiAzCiMgODQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRs
aWIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsK
CiAgdXNpbmcgOjphYm9ydDsKICB1c2luZyA6OmFiczsKICB1c2luZyA6OmF0ZXhpdDsKICB1c2lu
ZyA6OmF0b2Y7CiAgdXNpbmcgOjphdG9pOwogIHVzaW5nIDo6YXRvbDsKICB1c2luZyA6OmJzZWFy
Y2g7CiAgdXNpbmcgOjpjYWxsb2M7CiAgdXNpbmcgOjpkaXY7CiAgdXNpbmcgOjpleGl0OwogIHVz
aW5nIDo6ZnJlZTsKICB1c2luZyA6OmdldGVudjsKICB1c2luZyA6OmxhYnM7CiAgdXNpbmcgOjps
ZGl2OwogIHVzaW5nIDo6bWFsbG9jOwogIHVzaW5nIDo6bWJsZW47CiAgdXNpbmcgOjptYnN0b3dj
czsKICB1c2luZyA6Om1idG93YzsKICB1c2luZyA6OnFzb3J0OwogIHVzaW5nIDo6cmFuZDsKICB1
c2luZyA6OnJlYWxsb2M7CiAgdXNpbmcgOjpzcmFuZDsKICB1c2luZyA6OnN0cnRvZDsKICB1c2lu
ZyA6OnN0cnRvbDsKICB1c2luZyA6OnN0cnRvdWw7CiAgdXNpbmcgOjpzeXN0ZW07CiAgdXNpbmcg
Ojp3Y3N0b21iczsKICB1c2luZyA6OndjdG9tYjsKCiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBf
X2kpIHsgcmV0dXJuIGxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRpdl90CiAgZGl2KGxvbmcgX19p
LCBsb25nIF9faikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0KfQojIDEzNiAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvY3N0ZGxpYiIgMwpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6Omxs
ZGl2X3Q7CiAgdXNpbmcgOjpfRXhpdDsKCiAgaW5saW5lIGxvbmcgbG9uZwogIGFicyhsb25nIGxv
bmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0KCiAgaW5saW5lIGxvbmcg
bG9uZwogIGxsYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9f
eDsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19k
KQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUg
X19kOyByZXR1cm4gX19xOyB9CgogIGlubGluZSBsbGRpdl90CiAgbGxkaXYobG9uZyBsb25nIF9f
biwgbG9uZyBsb25nIF9fZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsg
X19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0dXJuIF9fcTsgfQoKICB1c2luZyA6OmF0b2xsOwogIHVz
aW5nIDo6c3RydG9mOwogIHVzaW5nIDo6c3RydG9sbDsKICB1c2luZyA6OnN0cnRvdWxsOwogIHVz
aW5nIDo6c3RydG9sZDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRp
dl90OwogIHVzaW5nIF9fZ251X2N4eDo6X0V4aXQ7CiAgdXNpbmcgX19nbnVfY3h4OjphYnM7CiAg
dXNpbmcgX19nbnVfY3h4OjpsbGFiczsKICB1c2luZyBfX2dudV9jeHg6OmRpdjsKICB1c2luZyBf
X2dudV9jeHg6OmxsZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6YXRvbGw7CiAgdXNpbmcgX19nbnVf
Y3h4OjpzdHJ0b2Y7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2xsOwogIHVzaW5nIF9fZ251X2N4
eDo6c3RydG91bGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2xkOwp9CiMgNjggIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9uZXciIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9uZXciIDMKZXh0ZXJu
ICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4
Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQoKCiAgICB2
aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93X3QgeyB9
OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5cGVkZWYgdm9pZCAoKm5l
d19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hhbmRsZXIp
IHRocm93KCk7Cn0KIyA3OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbmV3IiAzCnZvaWQqIG9wZXJh
dG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCogb3BlcmF0
b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0
b3IgZGVsZXRlKHZvaWQqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSB0
aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJv
d190JikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0
ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCosIGNvbnN0
IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwg
Y29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlubGluZSB2b2lkKiBvcGVyYXRvciBu
ZXcoc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KaW5saW5l
IHZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyBy
ZXR1cm4gX19wOyB9CgoKaW5saW5lIHZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkKiwgdm9pZCop
IHRocm93KCkgeyB9OwppbmxpbmUgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgdm9pZCop
IHRocm93KCkgeyB9OwoKfQojIDcwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcGFpci5oIiAx
IDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcGFpci5oIiAzCm5hbWVzcGFj
ZSBzdGQKewoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0IHBhaXIgewog
IHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5cGU7CgogIF9U
MSBmaXJzdDsKICBfVDIgc2Vjb25kOwoKCgoKICBwYWlyKCkgOiBmaXJzdCgpLCBzZWNvbmQoKSB7
fQoKCgoKICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJzdChfX2Ep
LCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgogIHBh
aXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQo
X19wLnNlY29uZCkge30KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxf
VDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5z
ZWNvbmQgPT0gX195LnNlY29uZDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K
aW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBh
aXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0IDwgX195LmZpcnN0IHx8CiAg
ICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNv
bmQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBf
X3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNs
YXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gs
IGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9CgoKdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0
IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1
cm4gIShfX3kgPCBfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8
X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CiMgMTQwICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xh
c3MgX1QyPgoKCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9f
eSkKCgoKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA3MiAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy90eXBlX3RyYWl0cy5oIiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy90eXBlX3RyYWl0cy5oIiAzCiMgOTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1Y3QgX190cnVlX3R5cGUge307CnN0cnVjdCBfX2ZhbHNl
X3R5cGUge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyAx
MTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvdHlwZV90cmFpdHMuaCIgMwogICB0eXBlZGVm
IF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
ZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
ZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlw
ZSBpc19QT0RfdHlwZTsKfTsKCgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9v
bD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190
eXBlX3RyYWl0czxzaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90
eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0
czx1bnNpZ25lZCBzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfX3R5cGVfdHJhaXRzPGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBs
b25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90
cmFpdHM8bG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVm
YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw
ZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxs
b25nIGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAqPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19m
YWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJv
b2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl
cjx1bnNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx3Y2hhcl90PiB7CiAgdHlwZWRlZiBfX3RydWVf
dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRl
Z3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8
dW5zaWduZWQgaW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1w
bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBf
SW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25n
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfSXNfaW50ZWdlcjxsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPiBzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvciB7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBl
IF9Ob3JtYWw7Cn07CgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPiBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcjsK
fQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgpzdHJ1
Y3QgX0lzX25vcm1hbF9pdGVyYXRvcjwgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+ID4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9Ob3JtYWw7Cn07
CiMgNzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAz
CiMgNjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMu
aCIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgODAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307
CgogIHN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgZm9yd2FyZF9pdGVy
YXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307Cgog
IHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZyB7fTsKIyAxMDAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0
ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DYXRlZ29yeSwgdHlw
ZW5hbWUgX1RwLCB0eXBlbmFtZSBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICAgdHlw
ZW5hbWUgX1BvaW50ZXIgPSBfVHAqLCB0eXBlbmFtZSBfUmVmZXJlbmNlID0gX1RwJj4KICAgIHN0
cnVjdCBpdGVyYXRvciB7CgogICAgICB0eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29y
eTsKCiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0eXBlZGVmIF9EaXN0YW5j
ZSBkaWZmZXJlbmNlX3R5cGU7CgogICAgICB0eXBlZGVmIF9Qb2ludGVyIHBvaW50ZXI7CgogICAg
ICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRl
Z29yeTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBk
aWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVy
IHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVm
ZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJh
dG9yX3RyYWl0czxfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90
YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAg
IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBfVHAqIHBv
aW50ZXI7CiAgICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsKICAg
ICAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
ICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlm
ZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsKICAgICAgdHlw
ZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyPgogICAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0
ZXJhdG9yX2NhdGVnb3J5CiAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikKICAg
IHsgcmV0dXJuIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVn
b3J5KCk7IH0KCn0KIyA3NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9m
dW5jcy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3Jf
YmFzZV9mdW5jcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jb25jZXB0X2No
ZWNrLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NvbmNlcHRfY2hlY2su
aCIgMwojIDY5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1
bmNzLmgiIDIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0
ZXJhdG9yPgogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+
OjpkaWZmZXJlbmNlX3R5cGUKICBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAoKICAgIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBf
X24gPSAwOwogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICsrX19maXJzdDsg
KytfX247CiAgICB9CiAgICByZXR1cm4gX19uOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyYXRvcj4KICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIF9fZGlzdGFuY2UoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAg
ICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICB7CgogICAKICAgIHJldHVybiBf
X2xhc3QgLSBfX2ZpcnN0OwogIH0KIyAxMTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRv
cj4KICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlm
ZmVyZW5jZV90eXBlCiAgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0KQogIHsKCiAgICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qs
IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShf
SW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7Cgog
ICAKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgX19h
ZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAg
ICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgewoKICAgCgogICAgaWYgKF9fbiA+
IDApCiAgICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgICBlbHNlCiAgICAgIHdoaWxlIChfX24r
KykgLS1fX2k7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0
eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnKQogIHsKCiAgIAogICAgX19pICs9IF9fbjsKICB9CiMgMTY0ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9p
ZAogIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikKICB7CgogICAg
X19hZHZhbmNlKF9faSwgX19uLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwogIH0KCn0KIyA3
NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAzCiMgNjggIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgODkg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBjbGFzcyByZXZlcnNlX2l0ZXJhdG9yCiAgICA6IHB1Ymxp
YyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3Jf
Y2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAg
ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpy
ZWZlcmVuY2U+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBjdXJyZW50OwoK
ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90
eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAg
IHB1YmxpYzoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcigpIHsgfQoKCgoKICAgICAgZXhwbGlj
aXQKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9f
eCkgeyB9CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3Im
IF9feCkKICAgICAgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7IH0KCgoKCgogICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICAgICAgOiBjdXJyZW50KF9feC5iYXNlKCkpIHsgfQoK
CgoKICAgICAgaXRlcmF0b3JfdHlwZQogICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVu
dDsgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAg
ewogICAgICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICotLV9f
dG1wOwogICAgICB9CgoKCgoKCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Im
CiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgLS1jdXJyZW50OwogICAgICAgIHJl
dHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9w
ZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0
aGlzOwogICAgICAgIC0tY3VycmVudDsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCgoK
CgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgpCiAgICAgIHsKICAg
ICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAg
IHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCiAgICAgIHsKICAgICAgICByZXZlcnNl
X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVy
biBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJh
dG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0
ZXJhdG9yKGN1cnJlbnQgLSBfX24pOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAg
ICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJl
bnQgLT0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZl
cnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAog
ICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgKyBfX24pOyB9CgoKCgoKCiAg
ICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9f
bikKICAgICAgewogICAgICAgIGN1cnJlbnQgKz0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsK
ICAgICAgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShkaWZmZXJlbmNl
X3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsgfQogICAgfTsKIyAyNjkg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3guYmFzZSgpID09
IF9feS5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f
eCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkK
ICAgIHsgcmV0dXJuIF9feS5iYXNlKCkgPCBfX3guYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICBjb25zdCByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAg
ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9f
eSA8IF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwK
ICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQog
ICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv
cj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgdHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgIG9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJh
dG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4KICAgIG9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9y
PF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICAgICAgY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJh
dG9yPF9JdGVyYXRvcj4oX194LmJhc2UoKSAtIF9fbik7IH0KIyAzMjcgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFp
bmVyPgogICAgY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9y
PG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBw
cm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAg
ICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAg
ICAgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194
KSB7IH0KIyAzNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMK
ICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29u
dGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGNvbnRhaW5l
ci0+cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAg
ICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhp
czsgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyBy
ZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvcgogICAgICBvcGVyYXRv
cisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgMzg0ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5l
cj4KICAgIGlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgYmFja19p
bnNlcnRlcihfQ29udGFpbmVyJiBfX3gpCiAgICB7IHJldHVybiBiYWNrX2luc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPihfX3gpOyB9CiMgMzk3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNz
IGZyb250X2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJh
dG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAg
ICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0Nv
bnRhaW5lciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRl
cmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyA0MjIgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgZnJvbnRfaW5zZXJ0
X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVm
ZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192
YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgZnJvbnRfaW5zZXJ0
X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZy
b250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9
CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJl
dHVybiAqdGhpczsgfQogICAgfTsKIyA0NTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgaW5saW5l
IGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgZnJvbnRfaW5zZXJ0ZXIoX0Nv
bnRhaW5lciYgX194KQogICAgeyByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWlu
ZXI+KF9feCk7IH0KIyA0NzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9y
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgaW5zZXJ0X2l0
ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2
b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBj
b250YWluZXI7CiAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CgogICAg
cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCgoKCiAg
ICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6
Oml0ZXJhdG9yIF9faSkKICAgICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQojIDUx
MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBpbnNl
cnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjpj
b25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGl0ZXIgPSBjb250YWluZXIt
Pmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICAgICArK2l0ZXI7CiAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7
IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Ir
KygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVy
YXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNTQ0ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRh
aW5lciwgdHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGluc2VydF9pdGVyYXRvcjxfQ29u
dGFpbmVyPgogICAgaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQogICAg
ewogICAgICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVy
YXRvcihfX2kpKTsKICAgIH0KfQoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CgoKCgoKCgogIHVzaW5n
IHN0ZDo6aXRlcmF0b3JfdHJhaXRzOwogIHVzaW5nIHN0ZDo6aXRlcmF0b3I7CiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgX19ub3Jt
YWxfaXRlcmF0b3IKICAgICAgOiBwdWJsaWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90
ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAgICAg
X19ub3JtYWxfaXRlcmF0b3IoKSA6IF9NX2N1cnJlbnQoX0l0ZXJhdG9yKCkpIHsgfQoKICAgICAg
ZXhwbGljaXQKICAgICAgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpIDog
X01fY3VycmVudChfX2kpIHsgfQoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAg
ICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXIs
IF9Db250YWluZXI+JiBfX2kpCiAgICAgICAgOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQoK
CiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqX01fY3Vy
cmVudDsgfQoKICAgICAgcG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
X01fY3VycmVudDsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKyso
KSB7ICsrX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRv
cgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3Vy
cmVudCsrKTsgfQoKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci0tKCkg
eyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IK
ICAgICAgb3BlcmF0b3ItLShpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJl
bnQtLSk7IH0KCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShjb25zdCBkaWZmZXJl
bmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3VycmVudFtfX25dOyB9Cgog
ICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShjb25zdCBkaWZmZXJlbmNl
X3R5cGUmIF9fbikKICAgICAgeyBfTV9jdXJyZW50ICs9IF9fbjsgcmV0dXJuICp0aGlzOyB9Cgog
ICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisoY29uc3QgZGlmZmVyZW5jZV90
eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJl
bnQgKyBfX24pOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItPShj
b25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKICAgICAgeyBfTV9jdXJyZW50IC09IF9fbjsgcmV0
dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oY29u
c3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0
ZXJhdG9yKF9NX2N1cnJlbnQgLSBfX24pOyB9CgogICAgICBjb25zdCBfSXRlcmF0b3ImCiAgICAg
IGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CiAgICB9OwojIDY0NSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAg
aW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNl
KCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw
ZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPT0oY29uc3QgX19ub3Jt
YWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7
IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+
CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5i
YXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwg
dHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19u
b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAg
ICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykK
ICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFp
bmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhz
LmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3Is
IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19u
b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAg
ICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykK
ICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5l
cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5i
YXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0
eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7
IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K
ICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJh
c2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0
eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8PShjb25zdCBfX25v
cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAg
IGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQog
IHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5l
cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhz
LmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
LCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBf
X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAg
ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhz
KQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9D
b250YWluZXI+CiAgaW5saW5lIHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckws
IF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsg
cmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4KICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAg
ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYg
X19pKQogIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4o
X19pLmJhc2UoKSArIF9fbik7IH0KfQojIDc2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKIyA5MSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBpbmxpbmUgdm9pZAogICAgaXRlcl9z
d2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUg
X1ZhbHVlVHlwZTE7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcjI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOwoKCiAgICAgCiAgICAgCiAgICAgCiAg
ICAgCgogICAgICBfVmFsdWVUeXBlMSBfX3RtcCA9ICpfX2E7CiAgICAgICpfX2EgPSAqX19iOwog
ICAgICAqX19iID0gX190bXA7CiAgICB9CiMgMTE4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZv
aWQKICAgIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIF9UcCBf
X3RtcCA9IF9fYTsKICAgICAgX19hID0gX19iOwogICAgICBfX2IgPSBfX3RtcDsKICAgIH0KIyAx
NDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWluKGNvbnN0IF9UcCYg
X19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19iIDwgX19hKSBy
ZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGlu
ZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAg
ewoKICAgICAKCiAgICAgIGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAg
ICB9CiMgMTg2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25z
dCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0
dXJuIF9fYTsKICAgIH0KIyAyMDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg
aW5saW5lIGNvbnN0IF9UcCYKICAgIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2Is
IF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1
cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDIyMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu
YW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCwKICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBp
bmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs
CiAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5j
ZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2U7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9f
bGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAgICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAg
ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bmxpbmUgX1RwKgogICAgX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBf
VHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgIHsKICAgICAgbWVtbW92ZShfX3Jlc3VsdCwg
X19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAgICByZXR1cm4g
X19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVy
CiAgICBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsg
cmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X2F1eDIoX1Rw
KiBfX2ZpcnN0LCBfVHAqIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9UcCogX19yZXN1bHQsIF9f
dHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAg
IF9fY29weV9hdXgyKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsCiAgICAg
ICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29w
eV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJ
dGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVl
X3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBl
X3RyYWl0czxfVmFsdWVUeXBlPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAg
ICAgICAgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfT3V0cHV0SXRlcihfX2NvcHlfYXV4MihfX2Zp
cnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3Vs
dC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHJpdmlhbCgp
KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRw
dXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4g
X19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19y
ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfVHJpdmlhbCgpKTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxp
bmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90
eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091
dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X25pMihfX2Zp
cnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAg
IGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19m
YWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0
b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X25p
MihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KIyAzMzkgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0
SXRlcgogICAgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfT3V0
cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsK
ICAgICAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9y
bWFsKCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIx
LCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFs
SXRlcjIKICAgIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIF9C
aWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICAq
LS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcgogICAgX19jb3B5X2JhY2t3YXJk
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX247
CiAgICAgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAg
ICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0K
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQm9vbFR5cGU+CiAgICBz
dHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCiAgICB7CiAgICAgIHN0YXRpYyBfQmlkaXJl
Y3Rpb25hbEl0ZXIyCiAgICAgIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlk
aXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f
cmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAg
ICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19jb3B5X2Jh
Y2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgewogICAgICBzdGF0
aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3Qs
IF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9f
bGFzdCAtIF9fZmlyc3Q7CiAgICAgICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3Qs
IHNpemVvZihfVHApICogX051bSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICAg
ICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9i
YWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAg
ICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCog
X19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNr
d2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgICAgICAgIDo6Y29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFj
a3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czx0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Omhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfX2Nv
cHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAg
ICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5
X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1
bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX0JJMihfX2NvcHlfYmFja3dhcmRfYXV4KF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFzZSgpKSk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l
IF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJk
X291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFs
c2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+
CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRv
cihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFs
OwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19m
aXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgogIHRl
bXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAg
IF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkx
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBf
X3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19u
b3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2Nv
cHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h
bGdvYmFzZS5oIiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAg
ICBpbmxpbmUgX0JJMgogICAgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0
LCBfQkkyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTE+OjpfTm9ybWFsIF9fTm9ybWFsOwog
ICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKICAgIH0KIyA1MDkgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgog
ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgKl9fZmly
c3QgPSBfX3ZhbHVlOwogICAgfQojIDUzMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBf
U2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZpbGxfbihfT3V0cHV0SXRl
ciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgog
ICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3Qg
PSBfX3ZhbHVlOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKICBpbmxpbmUgdm9pZAog
IGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LCBjb25z
dCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsK
ICAgIG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxp
bmUgdm9pZAogIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFyKiBfX2xhc3Qs
IGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7
CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBf
X2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChjaGFyKiBfX2ZpcnN0
LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7CiAgICBjaGFyIF9fdG1wID0gX19j
OwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwg
X19sYXN0IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlu
bGluZSB1bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9T
aXplIF9fbiwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmly
c3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBzaWduZWQgY2hhcioKICAg
IGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2Mp
CiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0
dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAg
aW5saW5lIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBj
aGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsK
ICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMgNjA2ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
cjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRl
cjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAgICAK
ICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmly
c3QxID09ICpfX2ZpcnN0MikgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0
MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9f
Zmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjQwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVu
YW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgcGFpcjxfSW5w
dXRJdGVyMSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAog
ICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAK
ICAgICAKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQo
Kl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICArK19f
Zmlyc3QyOwogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVy
Mj4oX19maXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KIyA2NjggIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg
dHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBf
X2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJz
dDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoISgqX19m
aXJzdDEgPT0gKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJu
IHRydWU7CiAgICB9CiMgNjk5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0
ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFs
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3By
ZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx
OyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19m
aXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0
cnVlOwogICAgfQojIDczMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVy
Mj4KICAgIGJvb2wKICAgIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmly
c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAg
IAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m
aXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsK
ICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh
PSBfX2xhc3QyOwogICAgfQojIDc2NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w
dXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxf
Y29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf
X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAg
ewoKICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyCiAgICAgICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0Mikgewog
ICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEg
JiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFw
aGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgdW5zaWdu
ZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKICB7CiAgICBj
b25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogICAgY29uc3Qgc2l6ZV90
IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICAgIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1l
bWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOwogICAgcmV0dXJu
IF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7CiAgfQoKICBp
bmxpbmUgYm9vbAogIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3Qx
LCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQogIHsKCiAgICByZXR1cm4gbGV4aWNv
Z3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBf
X2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVk
IGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoKICB9Cgp9CiMgNTUgIi91c3IvaW5jbHVkZS9jKysvMy4y
L21lbW9yeSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIg
MSAzCiMgODggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvY2Fzc2VydCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDY3ICIvdXNy
L2luY2x1ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRf
ZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hh
ciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19j
b25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgX19saW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0
dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICpfX2Fzc2VydGlv
biwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX25vcmV0dXJuX18pKTsKCgp9CiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Nh
c3NlcnQiIDIgMwojIDg5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAy
IDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lk
CiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Fs
bG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBf
X3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
cmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3df
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBj
aGFyKiBfX3MpOwp9CiMgOTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgi
IDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAzCiMg
NTQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpuYW1lc3BhY2Ug
c3RkCnsKCgoKCiAgc3RydWN0IF9SZWZjb3VudF9CYXNlCiAgewoKICAgIHR5cGVkZWYgc2l6ZV90
IF9SQ190OwoKCiAgICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZfY291bnQ7CgoKICAgIF9fZ3RocmVh
ZF9tdXRleF90IF9NX3JlZl9jb3VudF9sb2NrOwoKICAgIF9SZWZjb3VudF9CYXNlKF9SQ190IF9f
bikgOiBfTV9yZWZfY291bnQoX19uKQogICAgewoKICAgICAgX19ndGhyZWFkX211dGV4X3QgX190
bXAgPSB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19OwogICAgICBf
TV9yZWZfY291bnRfbG9jayA9IF9fdG1wOwoKCgoKCiAgICB9CgogICAgdm9pZAogICAgX01faW5j
cigpCiAgICB7CiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7
CiAgICAgICsrX01fcmVmX2NvdW50OwogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9y
ZWZfY291bnRfbG9jayk7CiAgICB9CgogICAgX1JDX3QKICAgIF9NX2RlY3IoKQogICAgewogICAg
ICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICB2b2xhdGls
ZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50OwogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5s
b2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgIHJldHVybiBfX3RtcDsKICAgIH0KICB9Owoj
IDEwOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgdGVtcGxh
dGU8aW50IF9fZHVtbXk+CiAgICBzdHJ1Y3QgX1N3YXBfbG9ja19zdHJ1Y3QKICAgIHsgc3RhdGlj
IF9fZ3RocmVhZF9tdXRleF90IF9TX3N3YXBfbG9jazsgfTsKCiAgdGVtcGxhdGU8aW50IF9fZHVt
bXk+CiAgICBfX2d0aHJlYWRfbXV0ZXhfdAogICAgX1N3YXBfbG9ja19zdHJ1Y3Q8X19kdW1teT46
Ol9TX3N3YXBfbG9jayA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAg
fX07CgoKCiAgaW5saW5lIHVuc2lnbmVkIGxvbmcKICBfQXRvbWljX3N3YXAodW5zaWduZWQgbG9u
ZyAqIF9fcCwgdW5zaWduZWQgbG9uZyBfX3EpCiAgewogICAgX19ndGhyZWFkX211dGV4X2xvY2so
Jl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAgdW5zaWduZWQgbG9uZyBf
X3Jlc3VsdCA9ICpfX3A7CiAgICAqX19wID0gX19xOwogICAgX19ndGhyZWFkX211dGV4X3VubG9j
aygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICByZXR1cm4gX19yZXN1
bHQ7CiAgfQojIDE1MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAz
CiAgc3RydWN0IF9TVExfbXV0ZXhfbG9jawogIHsKCgoKCgogICAgX19ndGhyZWFkX211dGV4X3Qg
X01fbG9jazsKCiAgICB2b2lkCiAgICBfTV9pbml0aWFsaXplKCkKICAgIHsKIyAxODQgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogICAgfQoKICAgIHZvaWQKICAg
IF9NX2FjcXVpcmVfbG9jaygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZf
TV9sb2NrKTsKICAgIH0KCiAgICB2b2lkCiAgICBfTV9yZWxlYXNlX2xvY2soKQogICAgewoKCgog
ICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9sb2NrKTsKICAgIH0KICB9OwojIDIyMCAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgc3RydWN0IF9TVExf
YXV0b19sb2NrCiAgewogICAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICAgIF9TVExfYXV0
b19sb2NrKF9TVExfbXV0ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQogICAgeyBf
TV9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9CgogICAgfl9TVExfYXV0b19sb2NrKCkgeyBfTV9s
b2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9CgogIHByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yPShj
b25zdCBfU1RMX2F1dG9fbG9jayYpOwogICAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9hdXRv
X2xvY2smKTsKICB9OwoKfQojIDkxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxv
Yy5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2F0b21p
Y2l0eS5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2F0
b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsKCnN0YXRpYyBpbmxpbmUgX0F0
b21pY193b3JkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19leGNoYW5nZV9hbmRfYWRk
ICh2b2xhdGlsZSBfQXRvbWljX3dvcmQgKl9fbWVtLCBpbnQgX192YWwpCnsKICByZWdpc3RlciBf
QXRvbWljX3dvcmQgX19yZXN1bHQ7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyB4YWRk
bCAlMCwlMiIKICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChfX3Jlc3VsdCkKICAgICAg
ICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fdmFsKSwgIm0iICgqX19tZW0pCiAgICAgICAgICAg
ICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogIHJldHVybiBfX3Jlc3VsdDsKfQoKc3RhdGljIGlu
bGluZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19hdG9taWNfYWRkICh2b2xh
dGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsKICBfX2FzbV9fIF9fdm9sYXRp
bGVfXyAoImxvY2s7IGFkZGwgJTAsJTEiCiAgICAgICAgICAgICAgICAgICAgICAgIDogOiAiaXIi
IChfX3ZhbCksICJtIiAoKl9fbWVtKSA6ICJtZW1vcnkiKTsKfQojIDkzICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDEwNCAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwogIGNsYXNzIF9fbmV3X2FsbG9j
CiAgewogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikK
ICAgIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KF9fbik7IH0KCiAgICBzdGF0aWMgdm9pZAogICAg
ZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCkKICAgIHsgOjpvcGVyYXRvciBkZWxldGUoX19w
KTsgfQogIH07CiMgMTI3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAz
CiAgdGVtcGxhdGU8aW50IF9faW5zdD4KICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl
CiAgICB7CiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXpl
X3QpOwoKCiAgICAgIHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsK
CiAgICAgIHN0YXRpYyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKICAg
IHB1YmxpYzoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAg
ICAgIHsKICAgICAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmIChf
X2J1aWx0aW5fZXhwZWN0KF9fcmVzdWx0ID09IDAsIDApKQogICAgICAgICAgX19yZXN1bHQgPSBf
U19vb21fbWFsbG9jKF9fbik7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAg
ICBzdGF0aWMgdm9pZAogICAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICkKICAgICAg
eyBmcmVlKF9fcCk7IH0KCgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgcmVhbGxvY2F0ZSh2b2lk
KiBfX3AsIHNpemVfdCAsIHNpemVfdCBfX25ld19zeikKICAgICAgewogICAgICAgIHZvaWQqIF9f
cmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgICAgICBpZiAoX19idWlsdGluX2V4
cGVjdChfX3Jlc3VsdCA9PSAwLCAwKSkKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxs
b2MoX19wLCBfX25ld19zeik7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAg
ICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQog
ICAgICB7CiAgICAgICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5k
bGVyOwogICAgICAgIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgICAgIHJl
dHVybiBfX29sZDsKICAgICAgfQogICAgfTsKCgogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICB2
b2lkICgqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29v
bV9oYW5kbGVyKSgpID0gMDsKCiAgdGVtcGxhdGU8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBf
X21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjoKICAgIF9TX29vbV9tYWxsb2Moc2l6ZV90
IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2
b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAoOzspCiAgICAgICAgewogICAgICAgICAgX19teV9t
YWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgICAgaWYg
KF9fYnVpbHRpbl9leHBlY3QoX19teV9tYWxsb2NfaGFuZGxlciA9PSAwLCAwKSkKICAgICAgICAg
ICAgX190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlciko
KTsKICAgICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1
bHQpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICB9CiAgICB9CgoKICB0ZW1w
bGF0ZTxpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f
aW5zdD46OgogICAgX1Nfb29tX3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewog
ICAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgIHZvaWQqIF9fcmVzdWx0
OwoKICAgICAgZm9yICg7OykKICAgICAgICB7CiAgICAgICAgICBfX215X21hbGxvY19oYW5kbGVy
ID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgICBpZiAoX19idWlsdGluX2V4
cGVjdChfX215X21hbGxvY19oYW5kbGVyID09IDAsIDApKQogICAgICAgICAgICBfX3Rocm93X2Jh
ZF9hbGxvYygpOwogICAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgICAg
X19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICAgIGlmIChfX3Jlc3VsdCkKICAg
ICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgIH0KICAgIH0KCgogIHR5cGVkZWYgX19u
ZXdfYWxsb2MgX19tZW1faW50ZXJmYWNlOwojIDIyOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9j
PgogICAgY2xhc3MgX19zaW1wbGVfYWxsb2MKICAgIHsKICAgIHB1YmxpYzoKICAgICAgc3RhdGlj
IF9UcCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIF9UcCogX19y
ZXQgPSAwOwogICAgICAgIGlmIChfX24pCiAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PF9U
cCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKTsKICAgICAgICByZXR1cm4g
X19yZXQ7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGFsbG9jYXRlKCkKICAgICAg
eyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQoKICAgICAg
c3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAg
eyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1Rw
KSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAg
IHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQogICAgfTsKIyAyNzAg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQWxsb2M+CiAgICBjbGFzcyBfX2RlYnVnX2FsbG9jCiAgICB7CiAgICBwcml2YXRlOgoK
CiAgICAgIGVudW0ge19TX2V4dHJhID0gOH07CgogICAgcHVibGljOgogICAgICBzdGF0aWMgdm9p
ZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIGNoYXIqIF9fcmVz
dWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAg
ICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgICAgICByZXR1cm4gX19yZXN1bHQgKyAo
aW50KSBfU19leHRyYTsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0
ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBjaGFyKiBfX3JlYWxfcCA9
IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4g
KCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6
ZV90KilfX3JlYWxfcCA9PSBfX24iLCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxs
b2MuaCIsIDI5MSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgX0FsbG9jOjpk
ZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24gKyAoaW50KSBfU19leHRyYSk7CiAgICAgIH0KCgogICAg
ICBzdGF0aWMgdm9pZCoKICAgICAgcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9z
eiwgc2l6ZV90IF9fbmV3X3N6KQogICAgICB7CiAgICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hh
ciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihz
aXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6
ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIsICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGxvYy5oIiwgMzAwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgICBjaGFy
KiBfX3Jlc3VsdCA9IChjaGFyKikgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vbGRfc3ogKyAo
aW50KSBfU19leHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbmV3X3N6ICsgKGludCkgX1NfZXh0cmEpOwogICAgICAgICooc2l6ZV90Kilf
X3Jlc3VsdCA9IF9fbmV3X3N6OwogICAgICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4
dHJhOwogICAgICB9CiAgICB9OwojIDM0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxsb2MuaCIgMwogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2xh
c3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlCiAgICB7CiAgICBwcml2YXRlOgogICAgICBlbnVt
IHtfQUxJR04gPSA4fTsKICAgICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICAgIGVudW0g
e19ORlJFRUxJU1RTID0gX01BWF9CWVRFUyAvIF9BTElHTn07CgogICAgICB1bmlvbiBfT2JqCiAg
ICAgIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICBjaGFy
IF9NX2NsaWVudF9kYXRhWzFdOwogICAgICB9OwoKICAgICAgc3RhdGljIF9PYmoqIHZvbGF0aWxl
IF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgoKICAgICAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0
X2ZyZWU7CiAgICAgIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICAgICAgc3RhdGljIHNpemVf
dCBfU19oZWFwX3NpemU7CgogICAgICBzdGF0aWMgX1NUTF9tdXRleF9sb2NrIF9TX25vZGVfYWxs
b2NhdG9yX2xvY2s7CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIF9TX3JvdW5kX3VwKHNpemVf
dCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0x
KSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAg
IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5
dGVzKSArIChzaXplX3QpX0FMSUdOIC0gMSkvKHNpemVfdClfQUxJR04gLSAxKTsgfQoKCgogICAg
ICBzdGF0aWMgdm9pZCoKICAgICAgX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCgogICAgICBzdGF0
aWMgY2hhcioKICAgICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpz
KTsKCgoKICAgICAgc3RydWN0IF9Mb2NrCiAgICAgIHsKICAgICAgICBfTG9jaygpIHsgaWYgKF9f
dGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogICAg
ICAgIH5fTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9y
ZWxlYXNlX2xvY2soKTsgfQogICAgICB9IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CiAg
ICAgIGZyaWVuZCBzdHJ1Y3QgX0xvY2s7CgogICAgICBzdGF0aWMgX0F0b21pY193b3JkIF9TX2Zv
cmNlX25ldzsKCiAgICBwdWJsaWM6CgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUo
c2l6ZV90IF9fbikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmV0ID0gMDsKCgoKCiAgICAgICAg
aWYgKF9TX2ZvcmNlX25ldyA9PSAwKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoZ2V0ZW52
KCJHTElCQ1BQX0ZPUkNFX05FVyIpKQogICAgICAgICAgICAgIF9fYXRvbWljX2FkZCgmX1NfZm9y
Y2VfbmV3LCAxKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fYXRvbWljX2FkZCgm
X1NfZm9yY2VfbmV3LCAtMSk7CgogICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChfU19m
b3JjZV9uZXcgIT0gMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJfU19mb3JjZV9uZXcgIT0gMCIs
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiwgNDA5LCBfX1BSRVRUWV9G
VU5DVElPTl9fKSwgMCkpKTsKICAgICAgICAgIH0KCiAgICAgICAgaWYgKChfX24gPiAoc2l6ZV90
KSBfTUFYX0JZVEVTKSB8fCAoX1NfZm9yY2VfbmV3ID4gMCkpCiAgICAgICAgICBfX3JldCA9IF9f
bmV3X2FsbG9jOjphbGxvY2F0ZShfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAg
ICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0CiAgICAg
ICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCgogICAgICAgICAgICBfTG9jayBf
X2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICAgIF9PYmoqIF9fcmVzdHJpY3RfXyBfX3Jlc3VsdCA9
ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXN1
bHQgPT0gMCwgMCkpCiAgICAgICAgICAgICAgX19yZXQgPSBfU19yZWZpbGwoX1Nfcm91bmRfdXAo
X19uKSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAq
X19teV9mcmVlX2xpc3QgPSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAg
ICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAo
X19idWlsdGluX2V4cGVjdChfX3JldCA9PSAwLCAwKSkKICAgICAgICAgICAgICBfX3Rocm93X2Jh
ZF9hbGxvYygpOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAg
ICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQog
ICAgICB7CiAgICAgICAgaWYgKChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB8fCAoX1NfZm9y
Y2VfbmV3ID4gMCkpCiAgICAgICAgICBfX25ld19hbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7
CiAgICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19t
eV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QKICAgICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2lu
ZGV4KF9fbik7CiAgICAgICAgICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCgogICAgICAg
ICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICAgIF9fcSAtPiBfTV9mcmVlX2xp
c3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0g
X19xOwogICAgICAgICAgfQogICAgICB9CgoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIHJlYWxs
b2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7CiAgICB9
OwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4gX0F0b21pY193b3JkCiAg
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZm9yY2VfbmV3
ID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl
YWRzLF9faW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLF9faW5zdD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxi
b29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9
KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0PiYsCiAgICAg
ICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0
PiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMs
IGludCBfX2luc3Q+CiAgICBjaGFyKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0Pjo6CiAgICBfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLCBpbnQmIF9f
bm9ianMpCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0OwogICAgICBzaXplX3QgX190b3RhbF9i
eXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19l
bmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90
YWxfYnl0ZXMpCiAgICAgICAgewogICAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwog
ICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgICAgcmV0dXJu
IF9fcmVzdWx0IDsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3Np
emUpCiAgICAgICAgewogICAgICAgICAgX19ub2JqcyA9IChpbnQpKF9fYnl0ZXNfbGVmdC9fX3Np
emUpOwogICAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgICAg
ICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICBfU19zdGFydF9mcmVlICs9IF9f
dG90YWxfYnl0ZXM7CiAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgfQogICAgICBl
bHNlCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAgICAg
ICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7Cgog
ICAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAgX1NfZnJl
ZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICAg
KChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVf
bGlzdDsKICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJl
ZTsKICAgICAgICAgICAgfQogICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKikgX19uZXdf
YWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICAgIGlmIChfU19zdGFydF9m
cmVlID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19pOwogICAgICAg
ICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICBfT2Jq
KiBfX3A7CgoKCiAgICAgICAgICAgICAgX19pID0gX19zaXplOwogICAgICAgICAgICAgIGZvciAo
OyBfX2kgPD0gKHNpemVfdCkgX01BWF9CWVRFUzsgX19pICs9IChzaXplX3QpIF9BTElHTikKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVl
X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAgICAgICAgICBfX3AgPSAq
X19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgICAgIGlmIChfX3AgIT0gMCkKICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Ag
LT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVl
ID0gKGNoYXIqKV9fcDsKICAgICAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3Rh
cnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfU19jaHVua19hbGxv
YyhfX3NpemUsIF9fbm9ianMpOwoKCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gMDsKICAgICAgICAgICAgICBfU19zdGFy
dF9mcmVlID0gKGNoYXIqKV9fbmV3X2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoK
ICAgICAgICAgICAgfQogICAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0Owog
ICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAg
ICAgICAgICByZXR1cm4gX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKTsKICAgICAgICB9
CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHZv
aWQqCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19y
ZWZpbGwoc2l6ZV90IF9fbikKICAgIHsKICAgICAgaW50IF9fbm9ianMgPSAyMDsKICAgICAgY2hh
ciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CiAgICAgIF9PYmoqIHZv
bGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgX09iaiogX19yZXN1bHQ7CiAgICAgIF9PYmoq
IF9fY3VycmVudF9vYmo7CiAgICAgIF9PYmoqIF9fbmV4dF9vYmo7CiAgICAgIGludCBfX2k7Cgog
ICAgICBpZiAoMSA9PSBfX25vYmpzKQogICAgICAgIHJldHVybiBfX2NodW5rOwogICAgICBfX215
X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKICAg
ICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19u
ZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBf
X2krKykKICAgICAgICB7CiAgICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAg
ICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAg
ICAgICAgIGlmIChfX25vYmpzIC0gMSA9PSBfX2kpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2N1cnJlbnRf
b2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIHJl
dHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKICB0ZW1wbGF0ZTxib29sIHRocmVhZHMsIGludCBpbnN0
PgogICAgdm9pZCoKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6
CiAgICByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdf
c3opCiAgICB7CiAgICAgIHZvaWQqIF9fcmVzdWx0OwogICAgICBzaXplX3QgX19jb3B5X3N6OwoK
ICAgICAgaWYgKF9fb2xkX3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25ld19zeiA+IChz
aXplX3QpIF9NQVhfQllURVMpCiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikp
OwogICAgICBpZiAoX1Nfcm91bmRfdXAoX19vbGRfc3opID09IF9TX3JvdW5kX3VwKF9fbmV3X3N6
KSkKICAgICAgICByZXR1cm4oX19wKTsKICAgICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19z
eik7CiAgICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19u
ZXdfc3o7CiAgICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgICBkZWFs
bG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRl
bXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgX1NUTF9tdXRleF9sb2NrCiAg
ICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46Ol9TX25vZGVfYWxs
b2NhdG9yX2xvY2sKICAgID0geyB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAw
LCAwIH19IH07CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hh
ciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19zdGFydF9m
cmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBjaGFy
KiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46Ol9TX2VuZF9mcmVl
ID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBzaXplX3Qg
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19oZWFwX3NpemUg
PSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHR5cGVuYW1l
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X09iaiogdm9sYXRp
bGUKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X1NfZnJl
ZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
dHJ1ZSwwPiBfX2FsbG9jOwogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNl
LDA+IF9fc2luZ2xlX2NsaWVudF9hbGxvYzsKIyA2NDcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjbGFzcyBhbGxv
Y2F0b3IKICAgIHsKICAgICAgdHlwZWRlZiBfX2FsbG9jIF9BbGxvYzsKICAgIHB1YmxpYzoKICAg
ICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm
ZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNv
bnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICAg
ICAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfVHAg
dmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3RydWN0
IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7IH07CgogICAg
ICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgICAgIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3Im
KSB0aHJvdygpIHt9CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgYWxsb2Nh
dG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30KICAgICAgfmFsbG9jYXRvcigp
IHRocm93KCkge30KCiAgICAgIHBvaW50ZXIKICAgICAgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBj
b25zdCB7IHJldHVybiAmX194OyB9CgogICAgICBjb25zdF9wb2ludGVyCiAgICAgIGFkZHJlc3Mo
Y29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKCgogICAgICBfVHAq
CiAgICAgIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkKICAgICAgewog
ICAgICAgIF9UcCogX19yZXQgPSAwOwogICAgICAgIGlmIChfX24pCiAgICAgICAgICB7CiAgICAg
ICAgICAgIGlmIChfX24gPD0gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgICAgICBfX3JldCA9
IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKTsK
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAg
ICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBk
ZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgICB7IF9BbGxvYzo6ZGVh
bGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg
IG1heF9zaXplKCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9U
cCk7IH0KCiAgICAgIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFs
KSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICAgICAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19w
KSB7IF9fcC0+fl9UcCgpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBhbGxvY2F0
b3I8dm9pZD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBl
OwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYg
dm9pZCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwog
ICAgICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cDE+CiAgICAgICAgc3RydWN0IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBhbGxvY2F0b3I8X1Rw
MT4gb3RoZXI7IH07CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBf
VDI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYs
IGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3Ih
PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKICAgIHsgcmV0
dXJuIGZhbHNlOyB9CiMgNzQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3Qg
X19hbGxvY2F0b3IKICAgIHsKICAgICAgX0FsbG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAgICAg
IHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy
ZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25z
dCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICAg
IHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1RwIHZh
bHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCBy
ZWJpbmQKICAgICAgICB7IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsg
fTsKCiAgICAgIF9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQogICAgICBfX2FsbG9jYXRvcihjb25z
dCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygpCiAgICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9f
YS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgog
ICAgICAgIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkg
dGhyb3coKQogICAgICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxs
b2MpIHt9CgogICAgICB+X19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogICAgICBwb2ludGVyCiAg
ICAgIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKICAgICAg
Y29uc3RfcG9pbnRlcgogICAgICBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsg
cmV0dXJuICZfX3g7IH0KCgoKICAgICAgX1RwKgogICAgICBhbGxvY2F0ZShzaXplX3R5cGUgX19u
LCBjb25zdCB2b2lkKiA9IDApCiAgICAgIHsKICAgICAgICBfVHAqIF9fcmV0ID0gMDsKICAgICAg
ICBpZiAoX19uKQogICAgICAgICAgX19yZXQgPSBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFs
bG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9
CgoKICAgICAgdm9pZAogICAgICBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19u
KQogICAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9m
KF9UcCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB0aHJvdygp
IHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICAgICAgdm9pZAogICAgICBj
b25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9f
dmFsKTsgfQoKICAgICAgdm9pZAogICAgICBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9U
cCgpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX19h
bGxvY2F0b3I8dm9pZCwgX0FsbG9jPgogICAgewogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5
cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRl
ZiB2b2lkKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7
CiAgICAgIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5kCiAgICAgICAgeyB0eXBlZGVmIF9fYWxsb2NhdG9y
PF9UcDEsIF9BbGxvYz4gb3RoZXI7IH07CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9f
YWxsb2NhdG9yPF9UcCxfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICBjb25zdCBfX2FsbG9j
YXRvcjxfVHAsX0FsbG9jPiYgX19hMikKICAgIHsgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2Fs
bG9jID09IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3Qg
X19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICBjb25zdCBfX2Fs
bG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCiAgICB7IHJldHVybiBfX2ExLl9fdW5kZXJseWlu
Z19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsgfQoKCgoKCgoKICB0ZW1wbGF0ZTxp
bnQgaW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2Fs
bG9jX3RlbXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8aW5zdD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxpbnQgX19p
bnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8X19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPF9faW5zdD4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWJ1Z19h
bGxvYzxfQWxsb2M+JiwgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikKICAgIHsgcmV0dXJu
IHRydWU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yIT0oY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwgY29uc3QgX19kZWJ1Z19h
bGxvYzxfQWxsb2M+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9CiMgODk2ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBl
bmFtZSBfQWxsb2NhdG9yPgogICAgc3RydWN0IF9BbGxvY190cmFpdHMKICAgIHsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyIGFsbG9jYXRvcl90
eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9y
PgogICAgY29uc3QgYm9vbCBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3Rh
bmNlbGVzczsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMT4KICAgIHN0
cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KICAgIHsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3Np
bXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIGFsbG9j
YXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwLCBpbnQgX19pbnN0PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1Nf
aW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRl
ZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxv
Y2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbCBfX3RocmVh
ZHMsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgewogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2Fs
bG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAg
ICAgIF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgIGFsbG9jYXRvcl90eXBl
OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBz
dHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+CiAgICB7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVk
ZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlw
ZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+
IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlw
ZW5hbWUgX1RwMSwgaW50IF9faW5zdD4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPF9faW5zdD4gPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3Rh
bmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxv
Y19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19h
bGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9y
X3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIGJv
b2wgX190aHIsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxs
b2NhdG9yPF9UcDEsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4K
ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAg
ICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf
X3RocixfX2luc3Q+ID4KICAgICAgX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0
b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgIGFs
bG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf
VHAxLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxs
b2NhdG9yPF9UcDEsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4KICAgIHsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBs
ZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogICAgICB0
eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9y
X3R5cGU7CiAgICB9OwoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjxjaGFy
PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPHdjaGFyX3Q+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwwPjsKfQojIDU2ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfY29uc3RydWN0LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGUgPGNs
YXNzIF9UMSwgY2xhc3MgX1QyPgogICAgaW5saW5lIHZvaWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBf
X3AsIGNvbnN0IF9UMiYgX192YWx1ZSkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19w
KSkgX1QxKF9fdmFsdWUpOyB9CgoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVDE+CiAgICBpbmxp
bmUgdm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2
b2lkKj4oX19wKSkgX1QxKCk7IH0KIyA5OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
Y29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlu
bGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv
cndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSBfRGVzdHJveSgmKl9fZmlyc3QpOyB9CiMgMTEyICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0Zv
cndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpCiAgICB7IH0KCgoK
CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9U
cCogX19wb2ludGVyKQogICAgeyBfX3BvaW50ZXItPn5fVHAoKTsgfQojIDEzNCAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJh
dG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQog
ICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9fdHlwZV90cmFpdHM8X1ZhbHVlX3R5cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAg
ICAgICAgICAgICAgICAgICAgX0hhc190cml2aWFsX2Rlc3RydWN0b3I7CgogICAgICBfX2Rlc3Ry
b3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7CiAgICB9
Cn0KIyA1NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMKCiMgMSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCm5hbWVzcGFjZSBzdGQKewoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4K
ICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJ
dGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19mYWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsK
ICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qs
ICsrX19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgICAg
ICByZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAg
ICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9
CiAgICB9CiMgMTA2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVk
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0
ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+
Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3Ry
YWl0czxfVmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5p
bml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkp
OwogICAgfQoKICBpbmxpbmUgY2hhcioKICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciog
X19maXJzdCwgY29uc3QgY2hhciogX19sYXN0LCBjaGFyKiBfX3Jlc3VsdCkKICB7CiAgICBtZW1t
b3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBfX3Jl
c3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB3Y2hhcl90KgogIHVuaW5p
dGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90KiBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQogIHsKICAgIG1lbW1v
dmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2ZpcnN0
KSk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgfQoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZv
aWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9feCwgX190cnVlX3R5cGUpCiAgICB7IGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAog
ICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194
LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7
CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCiAg
ICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4u
KQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgICAgICAg
IHRocm93OwogICAgICAgIH0KICAgIH0KIyAxNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg
dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gpCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46
OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh
aXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICBfX3VuaW5pdGlhbGl6
ZWRfZmlsbF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUg
X1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9h
dXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgcmV0dXJu
IGZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9G
b3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRl
cgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9T
aXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBf
X2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAg
ICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAg
ICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAg
IH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3Qs
IF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAyMTAgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIGlubGlu
ZSBfRm9yd2FyZEl0ZXIKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9E
X3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9f
Zmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwogICAgfQojIDIyNyAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAg
ICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1
dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAgewog
ICAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9f
bGFzdDEsIF9fcmVzdWx0KTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gdW5pbml0aWFsaXpl
ZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4u
KQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAg
ICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgaW5saW5lIF9Gb3J3
YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19yZXN1
bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChf
X3Jlc3VsdCwgX19taWQsIF9feCk7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlh
bGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICAgICAgfQogICAgICBjYXRjaCgu
Li4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsKICAgICAg
ICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9p
ZAogICAgX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5w
dXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQyID0g
dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgICAgIHRy
eSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsKICAg
ICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJz
dDIsIF9fbWlkMik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9Cgp9CiMgNTkgIi91
c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIHJhd19z
dG9yYWdlX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFn
LCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfRm9y
d2FyZEl0ZXJhdG9yIF9NX2l0ZXI7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBy
YXdfc3RvcmFnZV9pdGVyYXRvcihfRm9yd2FyZEl0ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkg
e30KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVy
biAqdGhpczsgfQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShj
b25zdCBfVHAmIF9fZWxlbWVudCkKICAgICAgewogICAgICAgIF9Db25zdHJ1Y3QoJipfTV9pdGVy
LCBfX2VsZW1lbnQpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3X3N0
b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiYKICAgICAgb3BlcmF0b3IrKygp
CiAgICAgIHsKICAgICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9
CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CiAgICAg
IG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0Zv
cndhcmRJdGVyYXRvciwgX1RwPiBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrX01faXRlcjsKICAg
ICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KICAgIH07Cn0KIyA2MCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvbWVtb3J5IiAyIDMKCgoKCm5hbWVzcGFjZSBzdGQKewojIDc0ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9tZW1vcnkiIDMKdGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4KcGFpcjxfVHAqLCBwdHJk
aWZmX3Q+Cl9fZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQp7CiAg
aWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICBfX2xl
biA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAg
X1RwKiBfX3RtcCA9IChfVHAqKSBzdGQ6Om1hbGxvYygoc3RkOjpzaXplX3QpX19sZW4gKiBzaXpl
b2YoX1RwKSk7CiAgICBpZiAoX190bXAgIT0gMCkKICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRy
ZGlmZl90PihfX3RtcCwgX19sZW4pOwogICAgX19sZW4gLz0gMjsKICB9CgogIHJldHVybiBwYWly
PF9UcCosIHB0cmRpZmZfdD4oKF9UcCopMCwgMCk7Cn0KIyAxMDYgIi91c3IvaW5jbHVkZS9jKysv
My4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHBhaXI8X1RwKixw
dHJkaWZmX3Q+CiAgZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuKQogIHsKICAg
IHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7CiAgfQojIDEy
MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICB2b2lkCiAgcmV0dXJuX3RlbXBvcmFyeV9idWZmZXIoX1RwKiBfX3ApCiAgewogICAgc3RkOjpm
cmVlKF9fcCk7CiAgfQojIDEzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCnRlbXBs
YXRlPHR5cGVuYW1lIF9UcDE+CiAgc3RydWN0IGF1dG9fcHRyX3JlZgp7CiAgIF9UcDEqIF9NX3B0
cjsKCiAgIGV4cGxpY2l0CiAgIGF1dG9fcHRyX3JlZihfVHAxKiBfX3ApCiAgIDogX01fcHRyKF9f
cCkge30KfTsKIyAxNzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgY2xhc3MgYXV0b19wdHIKewpwcml2YXRlOgogIF9UcCogX01fcHRyOwoK
cHVibGljOgoKICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CgoKCgoKCgogIGV4cGxpY2l0CiAg
YXV0b19wdHIoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0aHJvdygpCiAgOiBfTV9wdHIoX19wKSB7
IH0KIyAyMDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGF1dG9fcHRyKGF1dG9f
cHRyJiBfX2EpIHRocm93KCkKICA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMTQgIi91
c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAg
ICBhdXRvX3B0cihhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX2Eu
cmVsZWFzZSgpKSB7IH0KIyAyMjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGF1
dG9fcHRyJgogIG9wZXJhdG9yPShhdXRvX3B0ciYgX19hKSB0aHJvdygpCiAgICB7CiAgICAgIHJl
c2V0KF9fYS5yZWxlYXNlKCkpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMgMjQzICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwMT4KICAg
IGF1dG9fcHRyJgogICAgb3BlcmF0b3I9KGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAg
IHsKICAgICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
IyAyNjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIH5hdXRvX3B0cigpIHsgZGVs
ZXRlIF9NX3B0cjsgfQojIDI3MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgZWxl
bWVudF90eXBlJgogIG9wZXJhdG9yKigpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gKl9NX3B0cjsg
fQoKCgoKCgoKICBlbGVtZW50X3R5cGUqCiAgb3BlcmF0b3ItPigpIGNvbnN0IHRocm93KCkgeyBy
ZXR1cm4gX01fcHRyOyB9CiMgMjk1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICBl
bGVtZW50X3R5cGUqCiAgZ2V0KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBfTV9wdHI7IH0KIyAz
MDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGVsZW1lbnRfdHlwZSoKICByZWxl
YXNlKCkgdGhyb3coKQogICAgewogICAgICBlbGVtZW50X3R5cGUqIF9fdG1wID0gX01fcHRyOwog
ICAgICBfTV9wdHIgPSAwOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiMgMzI0ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICB2b2lkCiAgcmVzZXQoZWxlbWVudF90eXBlKiBfX3Ag
PSAwKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX3AgIT0gX01fcHRyKQogICAgICAgIHsKICAg
ICAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgICAgICBfTV9wdHIgPSBfX3A7CiAgICAgICAgfQog
ICAgfQojIDM0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgYXV0b19wdHIoYXV0
b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYpIHRocm93KCkKICAgIDogX01fcHRyKF9fcmVm
Ll9NX3B0cikge30KCiAgYXV0b19wdHImCiAgb3BlcmF0b3I9KGF1dG9fcHRyX3JlZjxlbGVtZW50
X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX3JlZi5fTV9wdHIgIT0gdGhp
cy0+Z2V0KCkpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgICAgIF9N
X3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgIG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAx
PigpIHRocm93KCkKICAgICAgeyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcDE+KHRoaXMtPnJlbGVh
c2UoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgIG9wZXJhdG9yIGF1dG9fcHRy
PF9UcDE+KCkgdGhyb3coKQogICAgICB7IHJldHVybiBhdXRvX3B0cjxfVHAxPih0aGlzLT5yZWxl
YXNlKCkpOyB9Cgp9OwoKfQojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwoK
CgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEgMwojIDY0
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCm5hbWVzcGFjZSBz
dGQKewojIDEwMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9u
IHsKICB0eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0
X3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBf
UmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2Fy
Z3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBl
ZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CiMgMTI3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IC0gX195OyB9Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IG11bHRpcGxpZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U
cCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg
X195KSBjb25zdCB7IHJldHVybiBfX3ggKiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsK
ICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg
cmV0dXJuIF9feCAvIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1
bHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICUg
X195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxfVHAsX1RwPgp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gp
IGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0KfTsKIyAxNzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3Rv
IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9y
KCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0g
X195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsg
fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf
X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
LF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm
IF9feSkgY29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs
Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IGNvbnN0IHsgcmV0dXJuIF9feCA+PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz
dHJ1Y3QgbGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7
CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg
eyByZXR1cm4gX194IDw9IF9feTsgfQp9OwojIDIyMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9h
bmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0
b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAm
JiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9vciA6IHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8IF9feTsg
fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
eCkgY29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwojIDI3MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3Mg
dW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0
ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVk
OwpwdWJsaWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkg
OiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRp
Y2F0ZTo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194
KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSB1bmFyeV9uZWdh
dGU8X1ByZWRpY2F0ZT4Kbm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4g
dW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1By
ZWRpY2F0ZT4KY2xhc3MgYmluYXJ5X25lZ2F0ZQogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx0
eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBf
TV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRl
JiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1l
IF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCwKICAgICAgICAgICAgICAgICAg
Y29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkgY29u
c3QKICB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194LCBfX3kpOwogIH0KfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90Mihj
b25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5X25lZ2F0ZTxfUHJlZGlj
YXRlPihfX3ByZWQpOwp9CiMgMzQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5j
dGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6
IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l
bnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpy
ZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3Bl
cmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNv
bnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlv
bjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkg
e30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3Qg
dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgewog
ICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJl
c3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l
bnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMXN0
PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBf
X3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUg
X0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9PcGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5
cGUoX194KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5k
CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJn
dW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9u
OjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBf
T3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjJu
ZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVy
YXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUo
X195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShj
b25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0
IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9u
OjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJn
dW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoK
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVy
Mm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1Rw
JiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90
eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJn
Ml90eXBlKF9feCkpOwp9CiMgNDM4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5j
dGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2lu
dGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1
bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9p
bnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9m
dW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQg
b3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5h
cnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkK
ewogIHJldHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0Pgpj
bGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6CiAgcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIp
KF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkg
e30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gp
KF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0
b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9f
eCwgX195KTsKICAgIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBj
bGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0Fy
ZzIsX1Jlc3VsdD4KcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0
dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBfVHAmIG9wZXJhdG9yKCkoX1RwJiBfX3gpIGNvbnN0IHsg
cmV0dXJuIF9feDsgfQogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29u
c3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2Vs
ZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmly
c3RfdHlwZT4gewogIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKF9QYWly
JiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQogIGNvbnN0IHR5cGVuYW1l
IF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsK
ICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1
Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1Bh
aXI6OnNlY29uZF90eXBlPgp7CiAgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRv
cigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KICBjb25z
dCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9f
eCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwojIDUyOCAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKixf
UmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkg
OiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IHJldHVy
biAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoK
dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90IDog
cHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGlj
aXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3Bm
KSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9f
cC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9m
dW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVy
YXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6
CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg
X1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9U
cCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9U
cDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25z
dCBfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9S
ZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz
IF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248X1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3QoX1JldCAo
X1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAq
IF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZh
dGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs
IGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihf
X3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0
CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6
Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0
IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9U
cCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2
YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90IDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBj
b25zdF9tZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9m
KF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29u
c3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9N
X2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5f
dDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4gewpwdWJsaWM6
CiAgZXhwbGljaXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7
fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpw
cml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
Y2xhc3MgY29uc3RfbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
Y29uc3QgX1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9p
ZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigp
KGNvbnN0IF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9p
ZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBt
ZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSkg
OiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IChfX3Iu
Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVt
X2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2
b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpw
cml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQg
bWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9p
ZCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194
KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBf
QXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcsdm9pZD4gewpw
dWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJn
KSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19w
LCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQg
KF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1
bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQg
b3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsg
fQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwg
X0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6
CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykg
Y29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwg
X0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9U
cDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz
cyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19m
KSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNs
YXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4gbWVt
X2Z1bihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl90
PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxp
bmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgp
KQogIHsgcmV0dXJuIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1Rw
PiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3Rf
bWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs
YXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVt
X2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxf
VHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg
X0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0
IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1Jl
dCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xh
c3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVm
KF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxf
VHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg
X0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW5f
cmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1
bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKCgp9CiMgNTMgIi91c3IvaW5jbHVkZS9j
KysvMy4yL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19z
dHJpbmcuaCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5n
LmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgODggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
YmFzaWNfc3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0cmluZwogICAgewoKICAg
IHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9B
bGxvYyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVf
dHlwZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNl
X3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVm
ZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3Jl
ZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpw
b2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2lu
dGVyIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVy
YXRvcjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9fZ251
X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgYmFzaWNfc3RyaW5nPgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJh
dG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0
b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKIyAxMjMgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9SZXAK
ICAgICAgewoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5k
PGNoYXI+OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9jOwojIDE0MSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUg
X1NfbWF4X3NpemU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5hbDsKCiAg
ICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUgX01fY2FwYWNpdHk7
CiAgICAgICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wKICAgICAg
ICBfTV9pc19sZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPCAw
OyB9CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAgICAgIHsg
cmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRf
bGVha2VkKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2b2lkCiAg
ICAgICAgX01fc2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAwOyB9Cgog
ICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4odGhpcyArIDEpOyB9CgogICAgICAgIF9DaGFy
VCYKICAgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3MpIHRocm93KCkKICAgICAgICB7IHJldHVy
biBfTV9yZWZkYXRhKCkgW19fc107IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2dyYWIo
Y29uc3QgX0FsbG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikKICAgICAgICB7
CiAgICAgICAgICByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2FsbG9j
MikKICAgICAgICAgICAgICAgICAgPyBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7
CiAgICAgICAgfQoKCiAgICAgICAgc3RhdGljIF9SZXAqCiAgICAgICAgX1NfY3JlYXRlKHNpemVf
dCwgY29uc3QgX0FsbG9jJik7CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kaXNwb3NlKGNvbnN0
IF9BbGxvYyYgX19hKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQo
Jl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAwKQogICAgICAgICAgICBfTV9kZXN0cm95KF9fYSk7CiAg
ICAgICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmKSB0
aHJvdygpOwoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmY29weSgpIHRocm93KCkKICAg
ICAgICB7CiAgICAgICAgICBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOwogICAgICAg
ICAgcmV0dXJuIF9NX3JlZmRhdGEoKTsKICAgICAgICB9CgogICAgICAgIF9DaGFyVCoKICAgICAg
ICBfTV9jbG9uZShjb25zdCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsKICAgICAgfTsK
CgogICAgICBzdHJ1Y3QgX0FsbG9jX2hpZGVyIDogX0FsbG9jCiAgICAgIHsKICAgICAgICBfQWxs
b2NfaGlkZXIoX0NoYXJUKiBfX2RhdCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgOiBfQWxs
b2MoX19hKSwgX01fcChfX2RhdCkgeyB9CgogICAgICAgIF9DaGFyVCogX01fcDsKICAgICAgfTsK
CiAgICBwdWJsaWM6CgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9IHN0YXRp
Y19jYXN0PHNpemVfdHlwZT4oLTEpOwoKICAgIHByaXZhdGU6CgogICAgICBtdXRhYmxlIF9BbGxv
Y19oaWRlciBfTV9kYXRhcGx1czsKCgoKICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19lbXB0eV9y
ZXBfc3RvcmFnZVsoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90
eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0
YSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0KCiAgICAgIF9DaGFy
VCoKICAgICAgX01fZGF0YShfQ2hhclQqIF9fcCkKICAgICAgeyByZXR1cm4gKF9NX2RhdGFwbHVz
Ll9NX3AgPSBfX3ApOyB9CgogICAgICBfUmVwKgogICAgICBfTV9yZXAoKSBjb25zdAogICAgICB7
IHJldHVybiAmKChyZWludGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFdKTsgfQoK
CgogICAgICBpdGVyYXRvcgogICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9pZW5kKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgdm9pZAog
ICAgICBfTV9sZWFrKCkKICAgICAgewogICAgICAgIGlmICghX01fcmVwKCktPl9NX2lzX2xlYWtl
ZCgpKQogICAgICAgICAgX01fbGVha19oYXJkKCk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAg
ICAgIF9NX2NoZWNrKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChf
X3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp
Y19zdHJpbmc6Ol9NX2NoZWNrIik7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19wb3M7
CiAgICAgIH0KCgogICAgICBpdGVyYXRvcgogICAgICBfTV9mb2xkKHNpemVfdHlwZSBfX3Bvcywg
c2l6ZV90eXBlIF9fb2ZmKSBjb25zdAogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvZmYgPSBf
X29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHNpemVfdHlwZSBfX25ld29mZiA9
IF9fdGVzdG9mZiA/IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgcmV0dXJu
IChfTV9pYmVnaW4oKSArIF9fcG9zICsgX19uZXdvZmYpOwogICAgICB9CgoKCiAgICAgIHRlbXBs
YXRlPGNsYXNzIF9JdGVyYXRvcj4KICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIF9TX2NvcHlf
Y2hhcnMoX0NoYXJUKiBfX3AsIF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikKICAgICAg
ICB7CiAgICAgICAgICBmb3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQogICAgICAg
ICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sxKTsKICAgICAgICB9CgogICAgICBz
dGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBfX2sx
LCBpdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwg
X19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9D
aGFyVCogX19wLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQogICAg
ICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAg
ICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hhclQqIF9f
azEsIF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9f
azIgLSBfX2sxKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hh
clQqIF9fcCwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAgICAgIHsg
dHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIHZvaWQK
ICAgICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90
eXBlIF9fbGVuMik7CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWtfaGFyZCgpOwoKICAgICAgc3Rh
dGljIF9SZXAmCiAgICAgIF9TX2VtcHR5X3JlcCgpCiAgICAgIHsgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PF9SZXAqPigmX1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9CgogICAgcHVibGljOgoKCgoK
ICAgICAgaW5saW5lCiAgICAgIGJhc2ljX3N0cmluZygpOwoKICAgICAgZXhwbGljaXQKICAgICAg
YmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKTsKCgogICAgICBiYXNpY19zdHJpbmcoY29u
c3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5
cGUgX19uID0gbnBvcyk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBj
b25zdCBfQWxsb2MmIF9fYSk7CgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX24sCiAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9B
bGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxs
b2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBfX24sIF9D
aGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgdGVtcGxhdGU8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXJhdG9y
IF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB+YmFzaWNfc3RyaW5nKCkKICAgICAgeyBf
TV9yZXAoKS0+X01fZGlzcG9zZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJl
dHVybiB0aGlzLT5hc3NpZ24oX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9w
ZXJhdG9yPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcyk7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsgcmV0dXJu
IHRoaXMtPmFzc2lnbigxLCBfX2MpOyB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKQog
ICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRh
KCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9y
CiAgICAgIGVuZCgpCiAgICAgIHsKICAgICAgICAgX01fbGVhaygpOwogICAgICAgICByZXR1cm4g
aXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsKICAgICAgfQoKICAgICAgY29uc3Rf
aXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3Io
X01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAg
ICByYmVnaW4oKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsg
fQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdAogICAg
ICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAg
cmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVy
YXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAg
ICByZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlz
LT5iZWdpbigpKTsgfQoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkg
Y29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAg
ICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAg
IHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9TX21heF9z
aXplOyB9CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19j
KTsKCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pIHsgdGhpcy0+cmVzaXpl
KF9fbiwgX0NoYXJUKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgY2FwYWNpdHkoKSBjb25z
dCB7IHJldHVybiBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0KCiAgICAgIHZvaWQKICAgICAgcmVz
ZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJnID0gMCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFyKCkg
eyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6ZSgpLCAwKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CgoKICAgICAgY29uc3RfcmVm
ZXJlbmNlCiAgICAgIG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fZGF0YSgpW19fcG9zXTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9y
W10oc2l6ZV90eXBlIF9fcG9zKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJl
dHVybiBfTV9kYXRhKClbX19wb3NdOwogICAgICB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAg
ICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX24gPj0gdGhp
cy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6
YXQiKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCiAgICAgIHJlZmVy
ZW5jZQogICAgICBhdChzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSBz
aXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIp
OwogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAg
IH0KCgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3Ry
aW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlz
LT5hcHBlbmQoX19zKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KF9D
aGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7IH0KCiAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp
OwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKCiAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJl
dHVybiB0aGlzLT5hcHBlbmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsK
CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgICBhcHBlbmQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5k
KCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKF9DaGFy
VCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgMSwgX19j
KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAg
ICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlm
IChfX3BvcyA+IF9fc3Ryc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp
Y19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0biA9IF9fbiA8IF9f
c3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rl
c3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIHRoaXMtPmFzc2ln
bihfX3N0ci5fTV9kYXRhKCkgKyBfX3BvcywgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24p
CiAgICAgIHsKICAgICAgICBpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgIF9f
dGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGlmIChf
TV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01f
ZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsg
dGhpcy0+c2l6ZSgpLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9p
YmVnaW4oKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICAgICAgZWxzZQogICAgICAg
ICAgewoKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01fZGF0YSgp
OwogICAgICAgICAgICBpZiAoX19wb3MgPj0gX19uKQogICAgICAgICAgICAgIHRyYWl0c190eXBl
Ojpjb3B5KF9NX2RhdGEoKSwgX19zLCBfX24pOwogICAgICAgICAgICBlbHNlIGlmIChfX3BvcykK
ICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCksIF9fcywgX19uKTsKICAg
ICAgICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgICAgICAgX01fZGF0YSgp
W19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
ICAgICAgfQogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBf
Q2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgdHJhaXRzX3R5cGU6
Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oc2l6ZV90
eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVn
aW4oKSwgX01faWVuZCgpLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhc3NpZ24oX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRo
aXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQoK
ICAgICAgdm9pZAogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19uLCBfQ2hh
clQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsgfQoKICAg
ICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZCBpbnNlcnQoaXRl
cmF0b3IgX19wLCBfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQpCiAg
ICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9CgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ciwg
MCwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6
ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgIHNp
emVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXpl
X3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvczIgPiBfX3N0
cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjppbnNl
cnQiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3Bv
czI7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBfX24gOiBf
X3N0cnNpemUgLSBfX3BvczI7CiAgICAgICAgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvczEsIF9f
c3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywg
c2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0
aGlzLT5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgICAgX190aHJv
d19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9fc2l6
ZSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24pCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJv
cigiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3No
YXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAg
ICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAg
ICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJl
Z2luKCkgKyBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3Mg
KyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgY29uc3Qgc2l6
ZV90eXBlIF9fb2ZmID0gX19zIC0gX01fZGF0YSgpOwogICAgICAgICAgICBfTV9tdXRhdGUoX19w
b3MsIDAsIF9fbik7CiAgICAgICAgICAgIF9fcyA9IF9NX2RhdGEoKSArIF9fb2ZmOwogICAgICAg
ICAgICBfQ2hhclQqIF9fcCA9IF9NX2RhdGEoKSArIF9fcG9zOwogICAgICAgICAgICBpZiAoX19z
ICsgX19uIDw9IF9fcCkKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywg
X19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19zID49IF9fcCkKICAgICAgICAgICAgICB0cmFp
dHNfdHlwZTo6Y29weShfX3AsIF9fcyArIF9fbiwgX19uKTsKICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBf
X3AgLSBfX3MpOwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wICsgKF9fcCAt
IF9fcyksIF9fcCArIF9fbiwgX19uIC0gKF9fcCAtIF9fcykpOwogICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgfQogICAgICAgfQoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykK
ICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjpsZW5n
dGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRoaXMtPmlu
c2VydChfTV9jaGVjayhfX3BvcyksIF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBf
X2MgPSBfQ2hhclQoKSkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9fcCAtIF9N
X2liZWdpbigpOwogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlw
ZSgxKSwgX19jKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJl
dHVybiB0aGlzLT5fTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19zdHJp
bmcmCiAgICAgIGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9z
KQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBf
TV9mb2xkKF9fcG9zLCBfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGEo
KSwgX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0
b3IgX19wb3NpdGlvbikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9u
IC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBfX3Bvc2l0
aW9uICsgMSwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRf
bGVha2VkKCk7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAg
ICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3Qp
CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigpOwog
ICAgICAgIHRoaXMtPnJlcGxhY2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEo
KSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBfTV9p
YmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNl
KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0
cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uLCBfX3N0ci5fTV9kYXRh
KCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShz
aXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0
ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMik7CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg
X19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpCiAg
ICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg
ICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi
YXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4xID0gX19u
MSA8IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMSA9IF9f
dGVzdG4xID8gX19uMSA6IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGlmIChfX3NpemUgLSBfX2Zv
bGRuMSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24yKQogICAgICAgICAgX190aHJvd19sZW5ndGhf
ZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01f
aXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAg
ICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBfX3Mp
KQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9zLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9pYmVnaW4oKSArIF9fcG9zICsgX19m
b2xkbjEsIF9fcywgX19zICsgX19uMik7CgogICAgICAgIGVsc2UgcmV0dXJuCiAgICAgICAgICAg
ICAgIF9NX3JlcGxhY2UoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBfX3BvcyAr
IF9fZm9sZG4xLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uMiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX0No
YXJUKj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcm
CiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0No
YXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbjEsIF9fcywg
dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy
ZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBf
Q2hhclQgX19jKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwg
X01fZm9sZChfX3BvcywgX19uMSksIF9fbjIsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9f
c3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVy
biB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsIF9fcywgX19u
KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0
ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBs
YWNlKF9faTEsIF9faTIsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs
IHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIHJlcGxhY2UoaXRlcmF0b3Ig
X19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazEs
IF9JbnB1dEl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZShfX2kxLCBf
X2kyLCBfX2sxLCBfX2syLAogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
bnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7IH0KCgoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9DaGFyVCog
X19rMSwgX0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAt
IF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNl
KGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3Qg
X0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2li
ZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEs
IF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJh
dG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIpCiAg
ICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBf
X2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9fazIgLSBf
X2sxKTsKICAgICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0
b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0
b3IgX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4o
KSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLmJhc2Uo
KSwgX19rMiAtIF9fazEpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgogICAgICB0ZW1wbGF0ZTxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgX01fcmVw
bGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyYXRvciBfX2sxLAog
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFn
KTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBf
X2kyLCBfRm9yd2FyZEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXJhdG9yIF9fazIpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0
YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5J
dGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f
ZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAgIHJldHVy
biBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAgfQoKICAg
ICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAg
IF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0Fs
bG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgICAgICB7
CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19i
ZWcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBl
PihfX2VuZCksIF9fYSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4K
ICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVn
LCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVncmFs
OwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2EsIF9J
bnRlZ3JhbCgpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAg
ICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywg
X0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICBp
bnB1dF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4KICAg
ICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBfX2JlZywg
X0Z3ZEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICBm
b3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBfU19jb25z
dHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7Cgog
ICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAogICAgICBz
d2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoKICAgICAg
Y29uc3QgX0NoYXJUKgogICAgICBjX3N0cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90
eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2Rh
dGEoKVtfX25dLCBfUmVwOjpfU190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsK
ICAgICAgfQoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29uc3QgeyByZXR1cm4g
X01fZGF0YSgpOyB9CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkg
Y29uc3QgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5k
KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0
OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg
c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3N0
ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg
ZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykp
OyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w
b3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAg
ICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29u
c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPnJmaW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0K
CiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3Mg
PSBucG9zKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6
ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXpl
X3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
cG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3MsIF9f
cG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg
ZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5maW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bv
cyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0ci5k
YXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmlu
ZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hh
clQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0K
CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBl
IF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19jLCBfX3Bv
cyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXpl
KCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0No
YXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2Yo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5n
dGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hh
clQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAg
ICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf
X3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2Yo
X19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAg
ICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywK
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKICAgICAgc2l6ZV90
eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2Yo
X19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBl
CiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBv
cykgY29uc3Q7CgogICAgICBiYXNpY19zdHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlwZSBfX3Bv
cyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9f
cG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2lj
X3N0cmluZzo6c3Vic3RyIik7CiAgICAgICAgcmV0dXJuIGJhc2ljX3N0cmluZygqdGhpcywgX19w
b3MsIF9fbik7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIpIGNvbnN0CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp
cy0+c2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAg
ICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3NpemUsIF9fb3NpemUpOwoKICAgICAgICBpbnQg
X19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVu
KTsKICAgICAgICBpZiAoIV9fcikKICAgICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7CiAg
ICAgICAgcmV0dXJuIF9fcjsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25z
dDsKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBf
X24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBf
X3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKGNv
bnN0IF9DaGFyVCogX19zKSBjb25zdDsKCgoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoKICAg
ICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29u
c3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwogIH07
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGJhc2ljX3N0cmluZygpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2VtcHR5X3JlcCgpLl9N
X3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5h
cHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQq
IF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf
QWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9B
bGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9D
aGFyVCogX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1
cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX2xocywgX0NoYXJUIF9fcmhzKQogICAgewogICAgICB0eXBlZGVm
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7
CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19z
aXplX3R5cGUoMSksIF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21w
YXJlKF9fcmhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0o
Y29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJl
KF9fbGhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAg
ICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9f
cmhzKSA9PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAg
ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykK
ICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAg
ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAg
IHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsg
cmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwg
MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3Qg
X0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywK
ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID4gMDsgfQoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29t
cGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAg
ICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShf
X3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBf
Q2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykg
PCAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsg
cmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0
dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICB7IHJldHVybiBf
X3Jocy5jb21wYXJlKF9fbGhzKSA+PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
bGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0No
YXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9fbGhzLAog
ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8PSAwOyB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGlubGluZSB2b2lkCiAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fbGhzLAogICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX3JocykKICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX29zLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0
cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAg
ICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9D
aGFyVCBfX2RlbGltKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1Ry
YWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywK
ICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIp
Owp9CiMgNTQgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9hbGdvcml0aG0iIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9h
bGdvcml0aG0iIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaGVhcC5oIiAxIDMKIyA2MyAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfaGVhcC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0
eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3Rh
bmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX19wYXJl
bnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9f
dG9wSW5kZXggJiYgKihfX2ZpcnN0ICsgX19wYXJlbnQpIDwgX192YWx1ZSkgewogICAgICAgICoo
X19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgICAgICBf
X2hvbGVJbmRleCA9IF9fcGFyZW50OwogICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0g
MSkgLyAyOwogICAgICB9CiAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIGlu
bGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAg
ICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNl
VHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5j
ZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAg
ICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5h
bWUgX1RwLAogICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fcHVz
aF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5k
ZXgsCiAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9D
b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUlu
ZGV4IC0gMSkgLyAyOwogICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmIF9f
Y29tcCgqKF9fZmlyc3QgKyBfX3BhcmVudCksIF9fdmFsdWUpKSB7CiAgICAgICAgKihfX2ZpcnN0
ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUlu
ZGV4ID0gX19wYXJlbnQ7CiAgICAgICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7
CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29t
cGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAK
CgogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBfX2Zp
cnN0KSAtIDEpLCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICBfVmFsdWVUeXBl
KCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAg
dm9pZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rp
c3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9U
cCBfX3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4
OwogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAg
ICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgICAgICBpZiAoKihfX2ZpcnN0
ICsgX19zZWNvbmRDaGlsZCkgPCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAg
ICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkg
PSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vj
b25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEp
OwogICAgICB9CiAgICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihf
X2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7
CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBf
X3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUg
X1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAg
ICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAt
IF9fZmlyc3QpLCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+
Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfX3BvcF9oZWFw
KF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAx
KSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5
cGVuYW1lIF9EaXN0YW5jZSwKICAgICAgICAgICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgdm9pZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m
aXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2Ug
X19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5j
ZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxk
ID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xl
bikgewogICAgICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19m
aXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsK
ICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENo
aWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNv
bmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3Nl
Y29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0g
KihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBf
X3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hv
bGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9f
Y29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDAp
LCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX192YWx1
ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCgoKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVf
dHlwZSBfVmFsdWVUeXBlOwogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9f
bGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIG1ha2Vf
aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
Pjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAg
IAoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5j
ZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFy
ZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1
c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsg
X19wYXJlbnQpKSk7CiAgICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBf
X3BhcmVudC0tOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgbWFrZV9o
ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19sYXN0LAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVf
dHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAg
ICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAy
KSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0Owog
ICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxl
ICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4s
CiAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50KSks
IF9fY29tcCk7CiAgICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3Bh
cmVudC0tOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvcj4KICAgIHZvaWQKICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgIAoK
CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2Zp
cnN0LCBfX2xhc3QtLSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBzb3J0X2hlYXAoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAg
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKCgogICAgICB3aGlsZSAo
X19sYXN0IC0gX19maXJzdCA+IDEpCiAgICAgICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0s
IF9fY29tcCk7CiAgICB9Cgp9CiMgNjUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs
Z28uaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAx
IDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCm5hbWVz
cGFjZSBzdGQKewojIDc0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90ZW1wYnVmLmgi
IDMKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KICBjbGFzcyBf
VGVtcG9yYXJ5X2J1ZmZlcgp7CgogCgogIHB0cmRpZmZfdCBfTV9vcmlnaW5hbF9sZW47CiAgcHRy
ZGlmZl90IF9NX2xlbjsKICBfVHAqIF9NX2J1ZmZlcjsKCgogIHZvaWQgX01fYWxsb2NhdGVfYnVm
ZmVyKCkgewogICAgX01fb3JpZ2luYWxfbGVuID0gX01fbGVuOwogICAgX01fYnVmZmVyID0gMDsK
CiAgICBpZiAoX01fbGVuID4gKHB0cmRpZmZfdCkoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkK
ICAgICAgX01fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICAgIHdoaWxlIChfTV9s
ZW4gPiAwKSB7CiAgICAgIF9NX2J1ZmZlciA9IChfVHAqKSBtYWxsb2MoX01fbGVuICogc2l6ZW9m
KF9UcCkpOwogICAgICBpZiAoX01fYnVmZmVyKQogICAgICAgIGJyZWFrOwogICAgICBfTV9sZW4g
Lz0gMjsKICAgIH0KICB9CgogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiwg
X190cnVlX3R5cGUpIHt9CiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmIHZh
bCwgX19mYWxzZV90eXBlKSB7CiAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9idWZmZXIsIF9N
X2xlbiwgdmFsKTsKICB9CgpwdWJsaWM6CgogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gX01fbGVuOyB9CgogIHB0cmRpZmZfdCByZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IF9NX29yaWdpbmFsX2xlbjsgfQoKICBfVHAqIGJlZ2luKCkgeyByZXR1cm4gX01fYnVmZmVyOyB9
CgogIF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVyICsgX01fbGVuOyB9CgogIF9UZW1wb3Jh
cnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xh
c3QpIHsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcgogICAgICAgICAgICBfVHJpdmlhbDsKCiAgICB0cnkgewog
ICAgICBfTV9sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfTV9hbGxvY2F0
ZV9idWZmZXIoKTsKICAgICAgaWYgKF9NX2xlbiA+IDApCiAgICAgICAgX01faW5pdGlhbGl6ZV9i
dWZmZXIoKl9fZmlyc3QsIF9Ucml2aWFsKCkpOwogICAgfQogICAgY2F0Y2goLi4uKQogICAgICB7
CiAgICAgICAgZnJlZShfTV9idWZmZXIpOwogICAgICAgIF9NX2J1ZmZlciA9IDA7CiAgICAgICAg
X01fbGVuID0gMDsKICAgICAgICB0aHJvdzsKICAgICAgfQogIH0KCiAgfl9UZW1wb3JhcnlfYnVm
ZmVyKCkgewogICAgX0Rlc3Ryb3koX01fYnVmZmVyLCBfTV9idWZmZXIgKyBfTV9sZW4pOwogICAg
ZnJlZShfTV9idWZmZXIpOwogIH0KCnByaXZhdGU6CgogIF9UZW1wb3JhcnlfYnVmZmVyKGNvbnN0
IF9UZW1wb3JhcnlfYnVmZmVyJikge30KICB2b2lkIG9wZXJhdG9yPShjb25zdCBfVGVtcG9yYXJ5
X2J1ZmZlciYpIHt9Cn07Cgp9CiMgNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs
Z28uaCIgMiAzCgoKCm5hbWVzcGFjZSBzdGQKewojIDg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIGNvbnN0
IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3Qg
X1RwJiBfX2MpCiAgICB7CgogICAgIAogICAgICBpZiAoX19hIDwgX19iKQogICAgICAgIGlmIChf
X2IgPCBfX2MpCiAgICAgICAgICByZXR1cm4gX19iOwogICAgICAgIGVsc2UgaWYgKF9fYSA8IF9f
YykKICAgICAgICAgIHJldHVybiBfX2M7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9f
YTsKICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVs
c2UgaWYgKF9fYiA8IF9fYykKICAgICAgICByZXR1cm4gX19jOwogICAgICBlbHNlCiAgICAgICAg
cmV0dXJuIF9fYjsKICAgIH0KIyAxMTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBp
bmxpbmUgY29uc3QgX1RwJgogICAgX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYg
X19iLCBjb25zdCBfVHAmIF9fYywgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAg
aWYgKF9fY29tcChfX2EsIF9fYikpCiAgICAgICAgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAg
ICAgICByZXR1cm4gX19iOwogICAgICAgIGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICAg
ICAgICByZXR1cm4gX19jOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2E7CiAgICAg
IGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxz
ZSBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgICByZXR1cm4gX19jOwogICAgICBlbHNlCiAg
ICAgICAgcmV0dXJuIF9fYjsKICAgIH0KIyAxNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9G
dW5jdGlvbj4KICAgIF9GdW5jdGlvbgogICAgZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikKICAgIHsKCiAgICAgCiAgICAgIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBfX2YoKl9fZmlyc3QpOwog
ICAgICByZXR1cm4gX19mOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0
ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWws
CiAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3Qg
IT0gX19sYXN0ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQogICAgICAgICsrX19maXJzdDsKICAg
ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5k
X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9Q
cmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAg
ICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkKICAgICAg
ICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNj
ZXNzSXRlcgogICAgZmluZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICAgICAg
PSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190cmlwX2NvdW50ID4g
MCA7IC0tX190cmlwX2NvdW50KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1
cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBf
X3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9f
Zmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAg
ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmly
c3Q7CiAgICAgIH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2Ug
MzoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAg
ICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkg
cmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDE6CiAgICAgICAg
aWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7
CiAgICAgIGNhc2UgMDoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAg
ICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5
cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgZmluZF9pZihfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9f
Zmlyc3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9j
b3VudCkgewogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAg
ICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19m
aXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSBy
ZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9f
Zmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KCiAgICAg
IHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoX19w
cmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBj
YXNlIDI6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAg
ICAgICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3Qp
KSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAgICAg
ZGVmYXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgMjg5ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAm
IF9fdmFsKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QsIF9f
bGFzdCwgX192YWwsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMwOSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVy
CiAgICBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHJldHVy
biBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f
Zmlyc3QpKTsKICAgIH0KIyAzMjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgog
ICAgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAg
ICAgcmV0dXJuIF9fbGFzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAg
ICAgIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSAq
X19uZXh0KQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4
dDsKICAgICAgfQogICAgICByZXR1cm4gX19sYXN0OwogICAgfQojIDM1OCAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGph
Y2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAg
IAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19s
YXN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUoKytf
X25leHQgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpf
X25leHQpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4
dDsKICAgICAgfQogICAgICByZXR1cm4gX19sYXN0OwogICAgfQojIDM4NyAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX1RwPgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAog
ICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlw
ZSBfX24gPSAwOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg
ICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpCiAgICAgICAgICArK19fbjsKICAgICAgcmV0
dXJuIF9fbjsKICAgIH0KIyA0MTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+
CiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlw
ZQogICAgY291bnRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1By
ZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmIChfX3ByZWQoKl9f
Zmlyc3QpKQogICAgICAgICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDUwICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVy
MQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0
MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFz
dDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9f
bGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoK
ICAgICAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAg
IGlmIChfX3RtcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QxLCBfX2xh
c3QxLCAqX19maXJzdDIpOwoKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAg
IF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQg
PSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAg
X19maXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwogICAgICAgIGlm
IChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAg
IF9fcCA9IF9fcDE7CiAgICAgICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYgKCsr
X19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAg
d2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9fcCkgewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFz
dDIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVu
dCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAg
ICAgICsrX19maXJzdDE7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDUy
MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwgdHlwZW5hbWUgX0Jp
bmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2Zp
cnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m
aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICBfQmluYXJ5UHJlZCBfX3By
ZWRpY2F0ZSkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJzdDEg
PT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0
MTsKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsK
ICAgICAgaWYgKF9fdG1wID09IF9fbGFzdDIpIHsKICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0g
X19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAg
KytfX2ZpcnN0MTsKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIH0KCgoKICAgICAgX0Zv
cndhcmRJdGVyMiBfX3AxLCBfX3A7CgogICAgICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAg
ICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogICAgICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7
CiAgICAgICAgICBpZiAoX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgIHdoaWxl
IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0
MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3Qx
KQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIF9fcCA9IF9fcDE7CiAgICAgICAg
X19jdXJyZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEp
IHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAoX19wcmVkaWNhdGUoKl9fY3VycmVudCwg
Kl9fcCkpIHsKICAgICAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1
cm4gX19maXJzdDE7CiAgICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAg
ICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgICAgfQoKICAgICAgICArK19fZmlyc3QxOwogICAg
ICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgIH0KIyA1OTYgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg
dHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgc2Vh
cmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAKICAg
ICAKCiAgICAgCgogICAgICBpZiAoX19jb3VudCA8PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0
OwogICAgICBlbHNlIHsKICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9f
dmFsKTsKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9JbnRl
Z2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmly
c3Q7CiAgICAgICAgICArK19faTsKICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9f
biAhPSAwICYmICpfX2kgPT0gX192YWwpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAg
IC0tX19uOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICBy
ZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19maXJzdCA9IGZpbmQo
X19pLCBfX2xhc3QsIF9fdmFsKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAg
ICAgfQogICAgfQojIDY0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlw
ZW5hbWUgX1RwLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJ
dGVyCiAgICBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwsCiAgICAg
ICAgICAgICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgog
ICAgICBpZiAoX19jb3VudCA8PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNl
IHsKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIGlmIChfX2Jp
bmFyeV9wcmVkKCpfX2ZpcnN0LCBfX3ZhbCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
KytfX2ZpcnN0OwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsK
ICAgICAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICAgICArK19faTsKICAgICAgICAgIHdoaWxlIChfX2kg
IT0gX19sYXN0ICYmIF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAg
ICAgICAgICAgICsrX19pOwogICAgICAgICAgICAtLV9fbjsKICAgICAgICAgIH0KICAgICAgICAg
IGlmIChfX24gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QpIHsKICAgICAgICAgICAgICBpZiAo
X19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICArK19faTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfX2ZpcnN0ID0gX19pOwog
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9
CiMgNjk3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0Zv
cndhcmRJdGVyMgogICAgc3dhcF9yYW5nZXMoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zvcndh
cmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MikK
ICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0
MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGl0ZXJfc3dhcChf
X2ZpcnN0MSwgX19maXJzdDIpOwogICAgICByZXR1cm4gX19maXJzdDI7CiAgICB9CiMgNzMyICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1VuYXJ5T3BlcmF0
aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRyYW5zZm9ybShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5h
cnlPcGVyYXRpb24gX191bmFyeV9vcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19y
ZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg
fQojIDc2NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBf
T3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgogICAgX091
dHB1dEl0ZXIKICAgIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIg
X19yZXN1bHQsCiAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKICAg
IHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0
MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQg
PSBfX2JpbmFyeV9vcCgqX19maXJzdDEsICpfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX3Jlc3Vs
dDsKICAgIH0KIyA3OTYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAog
ICAgcmVwbGFjZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkK
ICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUpCiAgICAg
ICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwogICAgfQojIDgyNSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
LCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNl
X2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAg
ICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICpfX2ZpcnN0ID0g
X19uZXdfdmFsdWU7CiAgICB9CiMgODU2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h
bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0
SXRlciwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weShfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUs
IGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAg
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpf
X2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgODg4ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
LCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKICAgICAgICAgICB0
eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVwbGFjZV9jb3B5X2lmKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNv
bnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAg
Kl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAg
ICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA5MTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h
bWUgX0dlbmVyYXRvcj4KICAgIHZvaWQKICAgIGdlbmVyYXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfR2VuZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKICAg
ICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAg
Kl9fZmlyc3QgPSBfX2dlbigpOwogICAgfQojIDk0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1l
IF9TaXplLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgogICAgX091dHB1dEl0ZXIKICAgIGdlbmVyYXRl
X24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKQogICAg
ewoKICAgICAKCgoKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAg
ICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgOTY5
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAg
X091dHB1dEl0ZXIKICAgIHJlbW92ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX1Rw
JiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICghKCpfX2ZpcnN0ID09IF9fdmFs
dWUpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgICAgICsrX19yZXN1
bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTAwMyAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBf
T3V0cHV0SXRlcgogICAgcmVtb3ZlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJl
ZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoIV9fcHJlZCgqX19maXJz
dCkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICAgKytfX3Jlc3Vs
dDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAxMDM5ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y
d2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgcmVtb3ZlKF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgIGNvbnN0IF9U
cCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIF9fZmlyc3QgPSBm
aW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBf
X2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsrX19pLCBfX2xhc3QsIF9fZmly
c3QsIF9fdmFsdWUpOwogICAgfQojIDEwNzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1By
ZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgcmVtb3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk
KQogICAgewoKICAgICAKICAgICAKCgogICAgICBfX2ZpcnN0ID0gZmluZF9pZihfX2ZpcnN0LCBf
X2xhc3QsIF9fcHJlZCk7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICBy
ZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IHJlbW92ZV9jb3B5X2lmKCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7
CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9P
dXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIG91dHB1dF9pdGVyYXRvcl90YWcpCiAgICB7Cgog
ICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX192
YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICB3aGlsZSAo
KytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoIShfX3ZhbHVlID09ICpfX2ZpcnN0KSkg
ewogICAgICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAgICAgKisrX19yZXN1bHQgPSBf
X3ZhbHVlOwogICAgICAgIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CgoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAg
IF9Gb3J3YXJkSXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAg
ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAg
IGlmICghKCpfX3Jlc3VsdCA9PSAqX19maXJzdCkpCiAgICAgICAgICAqKytfX3Jlc3VsdCA9ICpf
X2ZpcnN0OwogICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KIyAxMTQ1ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5p
cXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVy
YXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJl
dHVybiBfX3Jlc3VsdDsKICAgICAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDExNzAgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5
cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX091dHB1
dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAg
b3V0cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKCiAgICAgIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAg
ICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0
KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAg
ICAgIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsK
ICAgICAgICB9CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQojIDExOTkgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4K
ICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAg
ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCgogICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAg
ICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytfX3Jlc3Vs
dCA9ICpfX2ZpcnN0OwogICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KIyAxMjMyICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0
ZT4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAg
ewoKICAgICAKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
T3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsKCiAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICByZXR1cm4gX191bmlxdWVfY29w
eShfX2ZpcnN0LCBfX2xhc3QsCl9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLCBfSXRlclR5cGUoKSk7
CiAgICB9CiMgMTI2MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlx
dWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAg
ICAgICAKICAgICAgICAgCgoKICAgICAgICAgIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmly
c3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0
LCBfX2ZpcnN0KTsKICAgIH0KIyAxMjkwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h
bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5h
cnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f
YmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBfX2ZpcnN0ID0gYWRqYWNl
bnRfZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fYmluYXJ5X3ByZWQpOwogICAgICByZXR1cm4gdW5p
cXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKICAgIH0K
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgdm9pZAog
ICAgX19yZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0
b3JfdGFnKQogICAgewogICAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0KQogICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmly
c3QrKywgX19sYXN0KTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICAgICAgd2hpbGUgKF9fZmlyc3Qg
PCBfX2xhc3QpCiAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIC0tX19sYXN0KTsKICAg
IH0KIyAxMzQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcmV2
ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz
dCkKICAgIHsKCiAgICAgICAgIAoKICAgICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3Qs
IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDEzNzQgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVj
dGlvbmFsSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcmV2
ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
KQogICAgewoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsK
ICAgICAgICAtLV9fbGFzdDsKICAgICAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgICAgICsr
X19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEzOTkgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9FdWNsaWRlYW5SaW5nRWxlbWVudD4KICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudAogICAgX19n
Y2QoX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbSwgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikK
ICAgIHsKICAgICAgd2hpbGUgKF9fbiAhPSAwKSB7CiAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVt
ZW50IF9fdCA9IF9fbSAlIF9fbjsKICAgICAgICBfX20gPSBfX247CiAgICAgICAgX19uID0gX190
OwogICAgICB9CiAgICAgIHJldHVybiBfX207CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAg
ewogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUp
KQogICAgICAgIHJldHVybjsKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiA9IF9fbWlkZGxl
OwogICAgICBkbyB7CiAgICAgICAgc3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICAg
ICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Qy
OwogICAgICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpOwoKICAgICAgX19maXJzdDIgPSBf
X21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpIHsKICAgICAgICBzd2Fw
KCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRs
ZSkKICAgICAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgICAgICAgZWxzZSBpZiAoX19maXJz
dDIgPT0gX19sYXN0KQogICAgICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsKICAgICAgfQogICAg
fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQK
ICAgIF9fcm90YXRlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsK
CiAgICAgCgoKICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9f
bWlkZGxlKSkKICAgICAgICByZXR1cm47CgogICAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRk
bGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICBfX3JldmVyc2UoX19taWRk
bGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CgogICAgICB3aGlsZSAo
X19maXJzdCAhPSBfX21pZGRsZSAmJiBfX21pZGRsZSAhPSBfX2xhc3QpCiAgICAgICAgc3dhcCAo
Kl9fZmlyc3QrKywgKi0tX19sYXN0KTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7
CiAgICAgICAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0
b3JfdGFnKCkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0
LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgIH0K
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAg
IF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAK
CgogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUp
KQogICAgICAgIHJldHVybjsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90
eXBlIF9WYWx1ZVR5cGU7CgogICAgICBfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsK
ICAgICAgX0Rpc3RhbmNlIF9fayA9IF9fbWlkZGxlIC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNl
IF9fbCA9IF9fbiAtIF9fazsKCiAgICAgIGlmIChfX2sgPT0gX19sKSB7CiAgICAgICAgc3dhcF9y
YW5nZXMoX19maXJzdCwgX19taWRkbGUsIF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAg
IH0KCiAgICAgIF9EaXN0YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7CgogICAgICBmb3IgKF9E
aXN0YW5jZSBfX2kgPSAwOyBfX2kgPCBfX2Q7IF9faSsrKSB7CiAgICAgICAgX1ZhbHVlVHlwZSBf
X3RtcCA9ICpfX2ZpcnN0OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7
CgogICAgICAgIGlmIChfX2sgPCBfX2wpIHsKICAgICAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9
IDA7IF9faiA8IF9fbC9fX2Q7IF9faisrKSB7CiAgICAgICAgICAgIGlmIChfX3AgPiBfX2ZpcnN0
ICsgX19sKSB7CiAgICAgICAgICAgICAgKl9fcCA9ICooX19wIC0gX19sKTsKICAgICAgICAgICAg
ICBfX3AgLT0gX19sOwogICAgICAgICAgICB9CgogICAgICAgICAgICAqX19wID0gKihfX3AgKyBf
X2spOwogICAgICAgICAgICBfX3AgKz0gX19rOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAg
ICAgZWxzZSB7CiAgICAgICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2svX19k
IC0gMTsgX19qICsrKSB7CiAgICAgICAgICAgIGlmIChfX3AgPCBfX2xhc3QgLSBfX2spIHsKICAg
ICAgICAgICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgICAgICAgICAgIF9fcCArPSBfX2s7
CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICpfX3AgPSAqIChfX3AgLSBfX2wpOwogICAgICAg
ICAgICBfX3AgLT0gX19sOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgKl9fcCA9IF9f
dG1wOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgfQojIDE1NjEgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlcj4KICAgIGlubGluZSB2b2lkCiAgICByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX21pZGRsZSwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjppdGVy
YXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CiAgICAgIF9fcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2xhc3QsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxNTg5ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5
cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHJvdGF0ZV9jb3B5KF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAg
ICAgCgoKICAgICAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUs
IF9fbGFzdCwgX19yZXN1bHQpKTsKICAgIH0KIyAxNjEyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBpbmxp
bmUgX0Rpc3RhbmNlCiAgICBfX3JhbmRvbV9udW1iZXIoX0Rpc3RhbmNlIF9fbikKICAgIHsKCiAg
ICAgIHJldHVybiBscmFuZDQ4KCkgJSBfX247CgoKCiAgICB9CiMgMTYzNCAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewoKICAgICAKCgog
ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICAgICAgZm9yIChfUmFuZG9tQWNj
ZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAg
aXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZG9tX251bWJlcigoX19pIC0gX19maXJzdCkg
KyAxKSk7CiAgICB9CiMgMTY2MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9SYW5k
b21OdW1iZXJHZW5lcmF0b3I+CiAgICB2b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCiAgICB7CgogICAgIAoKCiAgICAg
IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJ
dGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVy
X3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0K
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGlj
YXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk
LAogICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICB3aGlsZSAoX19wcmVkKCpf
X2ZpcnN0KSkKICAgICAgICBpZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7
CgogICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKCiAgICAgIHdoaWxlICgrK19f
bmV4dCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19uZXh0KSkgewogICAgICAgICAg
c3dhcCgqX19maXJzdCwgKl9fbmV4dCk7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQoK
ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp
ZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0JpZGlyZWN0aW9uYWxJ
dGVyCiAgICBfX3BhcnRpdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAg
ICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxl
ICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBpZiAoX19w
cmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgZWxzZQogICAg
ICAgICAgICBicmVhazsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAg
ICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7
CiAgICAgICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xhc3QpKQogICAgICAgICAgICAtLV9fbGFz
dDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgaXRlcl9zd2FwKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTc0OCAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9Gb3J3YXJk
SXRlcgogICAgcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAK
CgogICAgICByZXR1cm4gX19wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRl
cmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9EaXN0YW5jZT4K
ICAgIF9Gb3J3YXJkSXRlcgogICAgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuKQogICAgewogICAgICBp
ZiAoX19sZW4gPT0gMSkKICAgICAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbGFzdCA6
IF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgIGFk
dmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2JlZ2luID0g
X19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19taWRkbGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu
IC8gMik7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2VuZCA9IF9faW5wbGFjZV9zdGFibGVfcGFydGl0
aW9uKF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIpOwogICAgICByb3RhdGUo
X19iZWdpbiwgX19taWRkbGUsIF9fZW5kKTsKICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0YW5j
ZShfX21pZGRsZSwgX19lbmQpKTsKICAgICAgcmV0dXJuIF9fYmVnaW47CiAgICB9CgoKCgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5h
bWUgX1ByZWRpY2F0ZSwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2Fy
ZEl0ZXIKICAgIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
UHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBpZiAoX19sZW4gPD0gX19i
dWZmZXJfc2l6ZSkgewogICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0Owog
ICAgICAgIF9Qb2ludGVyIF9fcmVzdWx0MiA9IF9fYnVmZmVyOwogICAgICAgIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3QgOyArK19fZmlyc3QpCiAgICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0
KSkgewogICAgICAgICAgICAqX19yZXN1bHQxID0gKl9fZmlyc3Q7CiAgICAgICAgICAgICsrX19y
ZXN1bHQxOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICpfX3Jlc3Vs
dDIgPSAqX19maXJzdDsKICAgICAgICAgICAgKytfX3Jlc3VsdDI7CiAgICAgICAgICB9CiAgICAg
ICAgY29weShfX2J1ZmZlciwgX19yZXN1bHQyLCBfX3Jlc3VsdDEpOwogICAgICAgIHJldHVybiBf
X3Jlc3VsdDE7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlk
ZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAg
ICAgIF9Gb3J3YXJkSXRlciBfX2JlZ2luID0gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9f
Zmlyc3QsIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZmZXIsIF9fYnVm
ZmVyX3NpemUpOwogICAgICAgIF9Gb3J3YXJkSXRlciBfX2VuZCA9IF9fc3RhYmxlX3BhcnRpdGlv
bl9hZGFwdGl2ZSggX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21p
ZGRsZSwgX19lbmQpOwogICAgICAgIGFkdmFuY2UoX19iZWdpbiwgZGlzdGFuY2UoX19taWRkbGUs
IF9fZW5kKSk7CiAgICAgICAgcmV0dXJuIF9fYmVnaW47CiAgICAgIH0KICAgIH0KIyAxODQ4ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAg
IHN0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAK
ICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fZmly
c3Q7CiAgICAgIGVsc2UKICAgICAgewogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5
cGUgX0Rpc3RhbmNlVHlwZTsKCiAgICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVy
LCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgIGlmIChfX2J1Zi5z
aXplKCkgPiAwKQogICAgICAgICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShf
X2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX19i
dWYuc2l6ZSgpKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19pbnBsYWNlX3N0YWJs
ZV9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6
ZSgpKSk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj
ZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIF9fdW5ndWFy
ZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QpCiAgICB7CiAg
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkKICAg
ICAgICAgICsrX19maXJzdDsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAoX19waXZv
dCA8ICpfX2xhc3QpCiAgICAgICAgICAtLV9fbGFzdDsKICAgICAgICBpZiAoIShfX2ZpcnN0IDwg
X19sYXN0KSkKICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgIGl0ZXJfc3dhcChfX2Zp
cnN0LCBfX2xhc3QpOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlv
bihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkKICAg
IHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBf
X3Bpdm90KSkKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3
aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAg
ICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAg
ICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAg
IH0KICAgIH0KIyAxOTI5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK
ICBlbnVtIHsgX01fdGhyZXNob2xkID0gMTYgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmd1YXJkZWRf
bGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKICAgIHsK
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsK
ICAgICAgd2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkgewogICAgICAgICpfX2xhc3QgPSAqX19uZXh0
OwogICAgICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgICAgICAtLV9fbmV4dDsKICAgICAgfQogICAg
ICAqX19sYXN0ID0gX192YWw7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg
ICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1Rw
IF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bmV4dCA9IF9fbGFzdDsKICAgICAgLS1fX25leHQ7CiAgICAgIHdoaWxlIChfX2NvbXAoX192YWws
ICpfX25leHQpKSB7CiAgICAgICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0g
X19uZXh0OwogICAgICAgIC0tX19uZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsK
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZv
aWQKICAgIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJl
dHVybjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9f
aSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAg
aWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwg
X19pLCBfX2kgKyAxKTsKICAgICAgICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAg
ICAgIGVsc2UKICAgICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCk7
CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpIHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJz
dCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7
CiAgICAgICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBjb3B5X2Jh
Y2t3YXJkKF9fZmlyc3QsIF9faSwgX19pICsgMSk7CiAgICAgICAgICAqX19maXJzdCA9IF9fdmFs
OwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5z
ZXJ0KF9faSwgX192YWwsIF9fY29tcCk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuZ3VhcmRl
ZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChf
UmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAg
ICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAg
ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1
ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f
Zmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9p
bnNlcnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19maW5hbF9pbnNl
cnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7
CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xk
KTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNo
b2xkLCBfX2xhc3QpOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19maW5hbF9pbnNl
cnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
ICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2lu
c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fY29tcCk7CiAg
ICAgICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwg
X19sYXN0LCBfX2NvbXApOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9z
b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfU2l6ZT4KICAgIGlubGluZSBfU2l6ZQogICAgX19sZyhfU2l6ZSBfX24pCiAgICB7CiAg
ICAgIF9TaXplIF9fazsKICAgICAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSAr
K19fazsKICAgICAgcmV0dXJuIF9fazsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemU+CiAgICB2b2lkCiAgICBfX2ludHJvc29y
dF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1
ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3Ro
cmVzaG9sZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBh
cnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm47CiAg
ICAgICAgfQogICAgICAgIC0tX19kZXB0aF9saW1pdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAg
IF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgX19kZXB0aF9saW1pdCk7CiAgICAgICAg
X19sYXN0ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg
dm9pZAogICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhf
bGltaXQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7Cgog
ICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlm
IChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBf
X2xhc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAg
ICAgLS1fX2RlcHRoX2xpbWl0OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAg
ICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCAr
IChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgICAgIF9f
Y29tcCk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xp
bWl0LCBfX2NvbXApOwogICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICB9CiMgMjE2
NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs
dWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgIT0g
X19sYXN0KSB7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGco
X19sYXN0IC0gX19maXJzdCkgKiAyKTsKICAgICAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICAgIH0KICAgIH0KIyAyMTk3ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29t
cCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBp
ZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3Qs
IF9fbGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsIF9fY29tcCk7CiAgICAgICAgX19m
aW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0KICAg
IH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lk
CiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8
IDE1KSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAg
IHJldHVybjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmly
c3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQo
X19maXJzdCwgX19taWRkbGUpOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUs
IF9fbGFzdCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUs
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUpOwogICAgfQoK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29t
cGFyZT4KICAgIHZvaWQKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8
IDE1KSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7
CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxl
ID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgICAgIF9faW5wbGFjZV9zdGFi
bGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgICAgX19pbnBsYWNlX3N0YWJs
ZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9i
dWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
YXN0IC0gX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIxLCB0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAog
ICAgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
cjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNl
IF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19m
aXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICAgICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBf
X2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsg
X19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAgICAg
ICAgX19yZXN1bHQpOwogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICAgICAgfQoKICAg
ICAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBf
c2l6ZSk7CiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJz
dCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAgIF9fcmVzdWx0KTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIxLCB0eXBlbmFtZSBfUmFuZG9tQWNj
ZXNzSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFy
ZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUsCiAgICAgICAg
ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3R3
b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3Qg
Pj0gX190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJz
dCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3Rl
cF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ZpcnN0
ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KICAgICAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNl
KF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CgogICAgICBtZXJnZShfX2ZpcnN0LCBf
X2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwg
X19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgX19jb21wKTsKICAgIH0K
CiAgZW51bSB7IF9NX2NodW5rX3NpemUgPSA3IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX2NodW5rX2lu
c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6
ZSkKICAgIHsKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7
CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXpl
KTsKICAgICAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2Vy
dGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S
YW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgog
ICAgdm9pZAogICAgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgd2hp
bGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICAgICAgX19pbnNlcnRp
b25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplLCBfX2NvbXApOwogICAgICAg
IF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQo
X19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXI+CiAgICB2b2lkCiAgICBfX21lcmdlX3Nv
cnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVy
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CgogICAgICBfRGlzdGFuY2UgX19s
ZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19i
dWZmZXIgKyBfX2xlbjsKCiAgICAgIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9NX2NodW5rX3Np
emU7CiAgICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBf
c2l6ZSk7CgogICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgICAgIF9fbWVy
Z2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplKTsKICAg
ICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVy
LCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7CiAgICAgICAgX19zdGVwX3Np
emUgKj0gMjsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAg
X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRl
ciBfX2J1ZmZlciwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlz
dGFuY2U7CgogICAgICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBf
UG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgICAgIF9EaXN0YW5j
ZSBfX3N0ZXBfc2l6ZSA9IF9NX2NodW5rX3NpemU7CiAgICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3Nv
cnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKCiAgICAgIHdoaWxlIChf
X3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwg
X19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19zdGVwX3Np
emUgKj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFz
dCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19zdGVwX3NpemUgKj0g
MjsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg
dHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fc3Rh
YmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZl
ciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9
IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21p
ZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkg
ewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlk
ZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgfQogICAgICBlbHNl
IHsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9f
YnVmZmVyKTsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFz
dCwgX19idWZmZXIpOwogICAgICB9CiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19t
aWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVm
ZmVyX3NpemUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg
dHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwKICAgICAgICAgICB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg
X0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogICAgICBpZiAoX19sZW4g
PiBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0
LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbXApOwogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRk
bGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbXApOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbWVyZ2Vf
c29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fY29tcCk7CiAg
ICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVy
LCBfX2NvbXApOwogICAgICB9CiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRk
bGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVy
X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KIyAyNDMwICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs
dWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAg
ICAgCgogICAgIAoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9W
YWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0g
MCkKICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAg
ZWxzZQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYu
YmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSk7CiAgICB9CiMgMjQ2NiAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHN0
YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojpk
aWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBfVGVt
cG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4gYnVmKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9faW5wbGFjZV9z
dGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIGVsc2UKICAgICAgICBf
X3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksIF9EaXN0
YW5jZVR5cGUoYnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bXApOwogICAgfQojIDI1MDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgcGFy
dGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
UmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAK
CiAgICAgIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIGZvciAoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYg
KCpfX2kgPCAqX19maXJzdCkKICAgICAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUs
IF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICAgIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRs
ZSk7CiAgICB9CiMgMjU0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJl
PgogICAgdm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAg
ICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBmb3IgKF9SYW5k
b21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgICAg
IGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQogICAgICAgICAgX19wb3BfaGVhcChfX2ZpcnN0
LCBfX21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgICBzb3J0X2hl
YXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICB9CiMgMjU3OSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAg
cGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkKICAg
IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZh
bHVlX3R5cGUgX0lucHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAogICAg
IAoKICAgICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jl
c3VsdF9sYXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBf
X3Jlc3VsdF9maXJzdDsKICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRf
cmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICAgICAqX19yZXN1bHRfcmVhbF9sYXN0
ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgICAgKytfX2Zp
cnN0OwogICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVh
bF9sYXN0KTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKCpf
X2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0KQogICAgICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3Vs
dF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCkpOwogICAgICAgICsrX19maXJz
dDsKICAgICAgfQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxf
bGFzdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMgMjYzMyAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlciwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJl
PgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIHBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXI+Ojp2YWx1ZV90eXBlIF9JbnB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRW
YWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAK
ICAgICAKICAgICAKCgogICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkg
cmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3Jl
YWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAm
JiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3Vs
dF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAg
ICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBf
X3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz
dCkgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAg
ICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAg
ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9f
cmVzdWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpf
X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICArK19fZmly
c3Q7CiAgICAgIH0KICAgICAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFs
X2xhc3QsIF9fY29tcCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMg
MjY4NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19udGgsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6
dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19sYXN0
IC0gX19maXJzdCA+IDMpIHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAg
ICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAo
X19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIGlmIChfX2N1dCA8PSBf
X250aCkKICAgICAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAgICBf
X2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
bGFzdCk7CiAgICB9CiMgMjcyOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgdm9pZAogICAgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAogICAg
IAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0
LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21l
ZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAp
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgIGlmIChf
X2N1dCA8PSBfX250aCkKICAgICAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAg
ICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KIyAyNzY4ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5
cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVl
X3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCgoKCiAgICAg
CiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJz
dCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRl
ciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBf
X2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9f
bWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICAg
ICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19s
ZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAg
IF9fbGVuID0gX19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI4
MTYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg
IF9Gb3J3YXJkSXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFy
ZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G
b3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5j
ZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5j
ZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0Zv
cndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9f
aGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFk
dmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9f
dmFsKSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0
OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAg
IGVsc2UKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2Zp
cnN0OwogICAgfQojIDI4NTYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0Zv
cndhcmRJdGVyCiAgICB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZm
ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9E
aXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlz
dGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hp
bGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19t
aWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAg
ICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAg
ICAgZWxzZSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmly
c3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAg
IH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjkwMSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0
eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICB1cHBl
cl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlw
ZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y
d2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAoK
ICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAg
ICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7Cgog
ICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAg
ICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxm
KTsKICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICAgICAgX19sZW4g
PSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAg
ICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsK
ICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjk0OCAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0Zvcndh
cmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlz
dGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3Rh
bmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3Jp
Z2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+
IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUs
IF9faGFsZik7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2Zp
cnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9f
bGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX192YWwgPCAqX19t
aWRkbGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAg
IF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAgICAgICAg
ICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3Vu
ZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9y
d2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAg
IH0KICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3Qs
IF9fZmlyc3QpOwogICAgfQojIDMwMDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0
eXBlbmFtZSBfQ29tcGFyZT4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAg
ICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg
Y29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFs
dWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAog
ICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIg
X19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAg
ICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAg
ICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoKl9fbWlk
ZGxlLCBfX3ZhbCkpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsr
X19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0K
ICAgICAgICBlbHNlIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgICAgICBfX2xl
biA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5k
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19jb21wKTsKICAgICAgICAgIGFkdmFuY2UoX19m
aXJzdCwgX19sZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUs
IF9fZmlyc3QsIF9fdmFsLCBfX2NvbXApOwogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJ
dGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICAgICAgfQogICAgICB9CiAg
ICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2Zp
cnN0KTsKICAgIH0KIyAzMDUyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGJv
b2wKICAgIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgoKICAgICAK
ICAgICAKCiAgICAgCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJz
dCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192YWwg
PCAqX19pKTsKICAgIH0KIyAzMDgzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlw
ZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAg
ICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwg
X19jb21wKTsKICAgICAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9f
aSk7CiAgICB9CiMgMzExNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0
eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBtZXJnZShfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxl
IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBp
ZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAg
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg
fQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIs
IF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CiMgMzE2
NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0
SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBt
ZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg
IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAg
ICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9f
Zmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytf
X2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq
X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICArK19fcmVz
dWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9f
Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAg
X19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQogICAg
ewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICAgICAgcmV0dXJuOwog
ICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwg
Kl9fZmlyc3QpCiAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAg
ICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0
ID0gX19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlk
ZGxlOwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjIy
ID0gMDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgIF9fbGVuMTEgPSBfX2xl
bjEgLyAyOwogICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgIF9f
c2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7
CiAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAg
ICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFk
dmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVy
X2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgICBfX2xlbjEx
ID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICB9CiAgICAgIHJvdGF0ZShf
X2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAgYWR2YW5jZShfX25ld19taWRk
bGUsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpKTsKICAgICAgX19tZXJnZV93aXRo
b3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIpOwogICAgICBfX21lcmdlX3dpdGhv
dXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMik7CiAg
ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFt
ZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV93aXRo
b3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8
fCBfX2xlbjIgPT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIg
PT0gMikgewogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCAqX19maXJzdCkpCiAgICAgICAg
ICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAg
IH0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICBfRGlzdGFu
Y2UgX19sZW4xMSA9IDA7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgaWYgKF9f
bGVuMSA+IF9fbGVuMikgewogICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgIGFk
dmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2Vy
X2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgICBf
X2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIH0KICAgICAg
ZWxzZSB7CiAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgYWR2YW5jZShfX3Nl
Y29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19m
aXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4xMSA9
IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19m
aXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19uZXdfbWlkZGxlID0gX19maXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxl
LCBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91
dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyLCBfX2NvbXApOwogICAgICBfX21lcmdl
X3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4y
MiwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1l
IF9EaXN0YW5jZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fcm90YXRlX2FkYXB0aXZl
KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjEgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEs
IF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np
emUpCiAgICB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXJfZW5kOwogICAgICBp
ZiAoX19sZW4xID4gX19sZW4yICYmIF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAg
X19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAg
Y29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKICAgICAgICByZXR1cm4g
Y29weShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2ZpcnN0KTsKICAgICAgfQogICAgICBlbHNl
IGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNv
cHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICBjb3B5KF9fbWlkZGxlLCBf
X2xhc3QsIF9fZmlyc3QpOwogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fYnVmZmVyLCBf
X2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgcm90YXRl
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICAgIGFkdmFuY2UoX19maXJzdCwgZGlz
dGFuY2UoX19taWRkbGUsIF9fbGFzdCkpOwogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICB9
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlw
ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmlkaXJlY3Rp
b25hbEl0ZXIzPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMwogICAgX19tZXJnZV9iYWNrd2FyZChf
QmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyMyBfX3Jlc3VsdCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAg
ICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsK
ICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh
cmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgICAt
LV9fbGFzdDI7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgaWYgKCpfX2xhc3QyIDwgKl9f
bGFzdDEpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgICAgICBpZiAo
X19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19m
aXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QxOwogICAgICAg
IH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAg
ICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFj
a3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3Qy
OwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp
cmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAg
dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMywgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIzCiAgICBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEg
X19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xh
c3QyLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2Zp
cnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBf
X2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAg
IHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAg
IC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
IGlmIChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkgewogICAgICAgICAgKi0tX19yZXN1bHQg
PSAqX19sYXN0MTsKICAgICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAg
ICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAg
ICAgICAgICAtLV9fbGFzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKi0t
X19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQog
ICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jl
c3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFu
Y2UsIHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJnZV9hZGFwdGl2ZShfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2Ug
X19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNl
IF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgICAgICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBf
X2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9l
bmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgICAgIG1lcmdl
KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAg
ICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAg
ICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBf
X2J1ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUs
IF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgICAgICAgICB9CiAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJz
dDsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxl
OwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgICAgICAgIF9EaXN0YW5j
ZSBfX2xlbjIyID0gMDsKICAgICAgICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAg
ICAgICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5j
ZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgICAgICAgICAgIF9fc2Vjb25kX2N1dCA9
IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAg
ICAgICAgIF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAg
ICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9f
bGVuMiAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIy
KTsKICAgICAgICAgICAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBf
X21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBkaXN0
YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgICAgICAgICAgICAgIF9fcm90YXRl
X2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIyLCBfX2J1
ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZmZXJfc2l6ZSk7
CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3
X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBf
X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19u
ZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZm
ZXJfc2l6ZSk7CiAgICAgICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp
ZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Qb2ludGVyLAog
ICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9hZGFwdGl2
ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlz
dGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rp
c3RhbmNlIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t
cCkKICAgIHsKICAgICAgICAgIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1
ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19m
aXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICAgICAgbWVyZ2UoX19idWZmZXIsIF9f
YnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCwgX19jb21wKTsKICAgICAgICAg
IH0KICAgICAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAg
ICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZm
ZXIpOwogICAgICAgICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1
ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICAg
ICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjIy
ID0gMDsKICAgICAgICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgICAgICAgICAg
ICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX2ZpcnN0
X2N1dCwgX19sZW4xMSk7CiAgICAgICAgICAgICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2Jv
dW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgICAgICAg
ICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gX19s
ZW4yIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIp
OwogICAgICAgICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9f
bWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAgICAgICAgICAgICBfX2xlbjEx
ID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICAgICAgICAgICAgICBf
X3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4y
MiwgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVy
X3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0
LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
ZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgICAgICAgICAgIF9fbWVy
Z2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0g
X19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBf
X2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICAgICAgICAgIH0KICAgIH0KIyAzNTA4
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRp
cmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qp
CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlv
bmFsSXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgICAgICByZXR1cm47
CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxl
KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0
KTsKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlw
ZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkK
ICAgICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3Qs
IF9fbGVuMSwgX19sZW4yKTsKICAgICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19m
aXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSkpOwogICAg
fQojIDM1NTkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2
b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGly
ZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAg
IGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgICAgICBy
ZXR1cm47CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9f
bWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwg
X19sYXN0KTsKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1Zh
bHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkg
PT0gMCkKICAgICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXApOwogICAgICBlbHNlCiAgICAgICAgX19tZXJn
ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYu
c2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgoKCgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAg
Ym9vbAogICAgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0
MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJz
dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJz
dDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZigq
X19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UK
ICAgICAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogICAgICByZXR1cm4gX19maXJzdDIg
PT0gX19sYXN0MjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVu
YW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGluY2x1ZGVz
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsIF9Db21wYXJlIF9fY29t
cCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21w
KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBl
bHNlIGlmKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3Qx
OwogICAgICAgIGVsc2UKICAgICAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogICAgICBy
ZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAg
IF9PdXRwdXRJdGVyCiAgICBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0
ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7Cgog
ICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAh
PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3Qx
IDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAg
ICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19m
aXJzdDEpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19m
aXJzdDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAg
ICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJz
dDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlw
ZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0
cHV0SXRlcgogICAgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf
X2xhc3QyLAogICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2Nv
bXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAg
aWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2Ug
aWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgIGVsc2Ug
ewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsK
ICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAg
IH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9f
bGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIx
LCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0
SXRlcgogICAgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlm
ICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVs
c2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19f
Zmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAg
ICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAg
ICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2ludGVy
c2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs
CiAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2Nv
bXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlm
IChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAg
ICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytf
X2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsK
ICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytf
X3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBf
T3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgog
ICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9f
cmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19y
ZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkK
ICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3Qx
OwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmly
c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAg
ICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVu
Y2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJz
dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAo
Kl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7
CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAg
ICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgICsr
X19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAg
KytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3Qx
LCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBl
bmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgog
ICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoK
ICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf
X2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19f
cmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEp
IHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7
CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAg
ICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJu
IGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0
KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w
dXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAg
CgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0
MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJz
dDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2Nv
bXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9
CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0
MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9f
Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgog
ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2Fy
ZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFz
dCkKICAgICAgICBpZiAoKl9fcmVzdWx0IDwgKl9fZmlyc3QpCiAgICAgICAgICBfX3Jlc3VsdCA9
IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAg
bWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAg
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0
ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkK
ICAgICAgICBpZiAoX19jb21wKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSBfX3Jlc3VsdCA9IF9fZmly
c3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVy
IF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAg
ICAgICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0KQogICAgICAgICAgX19yZXN1bHQgPSBfX2Zp
cnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9G
b3J3YXJkSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9l
bGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAg
ICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0KSkKICAgICAgICAgIF9fcmVzdWx0ID0g
X19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBib29sCiAgICBuZXh0X3Blcm11dGF0aW9uKF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAg
ewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAg
KytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmICgq
X19pIDwgKl9faWkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7
CiAgICAgICAgICB3aGlsZSAoISgqX19pIDwgKi0tX19qKSkKICAgICAgICAgICAge30KICAgICAg
ICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7
CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2Zp
cnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9C
aWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBuZXh0X3Bl
cm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAg
IAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7
CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19p
ID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmIChfX2NvbXAo
Kl9faSwgKl9faWkpKSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0
OwogICAgICAgICAgd2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19qKSkKICAgICAgICAgICAge30K
ICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9f
bGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9
PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGJvb2wKICAgIHByZXZfcGVybXV0YXRpb24oX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7
CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICAr
K19faTsKICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpf
X2lpIDwgKl9faSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsK
ICAgICAgICAgIHdoaWxlICghKCotLV9faiA8ICpfX2kpKQogICAgICAgICAgICB7fQogICAgICAg
ICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsK
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmly
c3QpIHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp
ZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIHByZXZfcGVy
bXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAg
CiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsK
ICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kg
PSBfX2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgq
X19paSwgKl9faSkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7
CiAgICAgICAgICB3aGlsZSAoIV9fY29tcCgqLS1fX2osICpfX2kpKQogICAgICAgICAgICB7fQog
ICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19s
YXN0KTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09
IF9fZmlyc3QpIHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfSW5wdXRJdGVyCiAg
ICBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19s
YXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEg
IT0gX19sYXN0MTsgKytfX2ZpcnN0MSkKICAgICAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIg
PSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICAgICAgaWYgKCpf
X2ZpcnN0MSA9PSAqX19pdGVyKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIHJl
dHVybiBfX2xhc3QxOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfSW5wdXRJ
dGVyCiAgICBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0
ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAg
ICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEg
IT0gX19sYXN0MTsgKytfX2ZpcnN0MSkKICAgICAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIg
PSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICAgICAgaWYgKF9f
Y29tcCgqX19maXJzdDEsICpfX2l0ZXIpKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAg
ICAgIHJldHVybiBfX2xhc3QxOwogICAgfQojIDQyMDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVu
YW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9Gb3J3
YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg
ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAg
ICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAg
ICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAg
ICB3aGlsZSAoMSkgewogICAgICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAg
ICAgICAgPSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAg
ICAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9f
cmVzdWx0OwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVz
dWx0OwogICAgICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgKytf
X2ZpcnN0MTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwKICAgICAgICAg
ICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5k
X2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwK
ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFn
LAogICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKICAgICAgaWYg
KF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2Ug
ewogICAgICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgICAgIHdoaWxl
ICgxKSB7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgICAgICA9
IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsIF9fY29tcCk7CiAg
ICAgICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBf
X3Jlc3VsdDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jl
c3VsdDsKICAgICAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsr
X19maXJzdDE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0
ZXIyPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25h
bEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19s
YXN0MiwKICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2
ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVk
ZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAg
ICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIo
X19maXJzdDIpOwogICAgICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShf
X2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jl
dkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0Mik7CgogICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxh
c3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgICAgICBhZHZhbmNl
KF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgICAgICByZXR1cm4g
X19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFt
ZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19maW5kX2Vu
ZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVj
dGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICBfQmluYXJ5
UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVy
c2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVm
IHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAg
X1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9f
Zmlyc3QyKTsKICAgICAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19s
YXN0MSksIF9fcmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJ
dGVyMihfX2xhc3QyKSwgX19ybGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb21wKTsKCiAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICAgICAgcmV0
dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19y
ZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0
YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAg
fQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9G
b3J3YXJkSXRlcjI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0Zvcndh
cmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0Zv
cndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAK
ICAgICAKICAgICAKCgoKICAgICAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEs
IF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2Nh
dGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0MikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIx
LCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVk
aWNhdGU+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVy
MSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgX0JpbmFy
eVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICByZXR1
cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAg
ICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCn0KIyA3MCAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYWxnb3JpdGhtIiAyIDMKIyA1NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMK
IyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDEgMwojIDQ1
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKCm5hbWVzcGFj
ZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX21heF9zaXplID0gKCgobnBvcyAtIHNpemVvZihfUmVw
KSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkgLyA0OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IF9DaGFyVAogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU190ZXJt
aW5hbCA9IF9DaGFyVCgpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvczsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6
ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVv
ZihzaXplX3R5cGUpXTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcj4K
ICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0
IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAg
ICB7CiAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAg
ICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgogICAgICAgIF9DaGFyVCBf
X2J1ZlsxMDBdOwogICAgICAgIHNpemVfdHlwZSBfX2kgPSAwOwogICAgICAgIHdoaWxlIChfX2Jl
ZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAg
ICAgICB7CiAgICAgICAgICAgIF9fYnVmW19faSsrXSA9ICpfX2JlZzsKICAgICAgICAgICAgKytf
X2JlZzsKICAgICAgICAgIH0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19p
LCBfX2EpOwogICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1
ZiwgX19pKTsKICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9faTsKICAgICAgICB0cnkKICAgICAg
ICAgIHsKCgoKICAgICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICBfQ2hhclQqIF9fcCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9sZW5ndGg7CiAg
ICAgICAgICAgICAgICBfQ2hhclQqIF9fbGFzdCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5f
TV9jYXBhY2l0eTsKICAgICAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19wIC0gX19y
LT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190
ZXJtaW5hbDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgp
OwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChfX3AgPT0g
X19sYXN0KQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
Kl9fcCsrID0gKl9fYmVnOwogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9N
X3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2Ny
ZWF0ZShfX2xlbiArIDEsIF9fYSk7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShf
X2Fub3RoZXItPl9NX3JlZmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fci0+X01fcmVmZGF0YSgpLCBfX2xlbik7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ry
b3koX19hKTsKICAgICAgICAgICAgICAgIF9fciA9IF9fYW5vdGhlcjsKICAgICAgICAgICAgICAg
IF9fci0+X01fbGVuZ3RoID0gX19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAg
ICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9f
YSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAg
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0
cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAg
ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6
ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9f
ZW5kKSk7CgogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAg
ICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgaWYg
KF9fYnVpbHRpbl9leHBlY3QoX19iZWcgPT0gX0luSXRlcigpLCAwKSkKICAgICAgICAgIF9fdGhy
b3dfbG9naWNfZXJyb3IoImF0dGVtcHQgdG8gY3JlYXRlIHN0cmluZyB3aXRoIG51bGwgcG9pbnRl
ciIpOwoKCiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywgX19hKTsK
ICAgICAgICB0cnkKICAgICAgICAgIHsgX1NfY29weV9jaGFycyhfX3ItPl9NX3JlZmRhdGEoKSwg
X19iZWcsIF9fZW5kKTsgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAg
ICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQog
ICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19kbmV3OwoKICAgICAgICBfX3ItPl9NX3JlZmRhdGEo
KVtfX2RuZXddID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVm
ZGF0YSgpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0No
YXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICB7CiAgICAgIGlmIChfX24gPT0gMCAmJiBf
X2EgPT0gX0FsbG9jKCkpCiAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHko
KTsKCgogICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uLCBfX2EpOwogICAgICB0
cnkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19uKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6
YXNzaWduKF9fci0+X01fcmVmZGF0YSgpLCBfX24sIF9fYyk7CiAgICAgICAgfQogICAgICBjYXRj
aCguLi4pCiAgICAgICAgewogICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAg
ICB0aHJvdzsKICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX19uOwogICAgICBfX3It
Pl9NX3JlZmRhdGEoKVtfX25dID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgIHJldHVybiBfX3It
Pl9NX3JlZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry
KQogICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfQWxsb2MoKSwgX19z
dHIuZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgICAgICAgICAgICBfX3N0ci5nZXRfYWxsb2NhdG9y
KCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBs
dXMoX1NfY29uc3RydWN0KHNpemVfdHlwZSgpLCBfQ2hhclQoKSwgX19hKSwgX19hKQogICAgeyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBi
YXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBz
aXplX3R5cGUgX19uKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hl
Y2soX19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChf
X3BvcywgX19uKSwgX0FsbG9jKCkpLCBfQWxsb2MoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICBz
aXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29u
c3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3Ry
aW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkK
ICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2Ep
CiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2Ep
CiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyA/IF9fcyArIHRyYWl0c190
eXBlOjpsZW5ndGgoX19zKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MgKyBu
cG9zLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQg
X19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9f
biwgX19jLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBiYXNpY19zdHJpbmcoX0lucHV0SXRlciBfX2JlZywgX0lucHV0SXRlciBfX2VuZCwgY29uc3Qg
X0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQs
IF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojph
c3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKICAgICAgaWYgKF9NX3JlcCgp
ICE9IF9fc3RyLl9NX3JlcCgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBf
X2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX19z
dHIuX01fcmVwKCktPl9NX2dyYWIoX19hLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAg
ICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwog
ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fZGVzdHJv
eShjb25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6
ZSA9IHNpemVvZihfUmVwKSArIChfTV9jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCk7CiAg
ICAgIF9SYXdfYnl0ZXNfYWxsb2MoX19hKS5kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHRoaXMpLCBfX3NpemUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9NX2xlYWtfaGFyZCgpCiAgICB7CiAgICAgIGlm
IChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgX01fbXV0YXRlKDAsIDAsIDApOwog
ICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZv
aWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX01fbXV0
YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMikK
ICAgIHsKICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGNv
bnN0IHNpemVfdHlwZSBfX25ld19zaXplID0gX19vbGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsK
ICAgICAgY29uc3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4xOwog
ICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvcyAtIF9f
bGVuMTsKCiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+
IGNhcGFjaXR5KCkpCiAgICAgICAgewoKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdl
dF9hbGxvY2F0b3IoKTsKCgogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0
MDk2OwogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAq
IHNpemVvZiAodm9pZCopOwoKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNp
dHkgPSAoX19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXplCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFy
VCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gc2l6ZW9m
KF9DaGFyVCk7CiAgICAgICAgICBfUmVwKiBfX3I7CiAgICAgICAgICBpZiAoX19uZXdfc2l6ZSA+
IGNhcGFjaXR5KCkgJiYgX19uZXdfc2l6ZSA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgICAg
IF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplID4gMipjYXBhY2l0eSgpID8KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3NpemUgOiAyKmNhcGFjaXR5KCksIF9f
YSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25l
d19zaXplLCBfX2EpOwogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
ZiAoX19wb3MpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRh
dGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CiAgICAgICAgICAgICAgaWYgKF9faG93X211Y2gpCiAg
ICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9z
ICsgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9faG93
X211Y2gpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBfX3ItPl9NX2Rpc3Bvc2UoZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2Uo
X19hKTsKICAgICAgICAgIF9NX2RhdGEoX19yLT5fTV9yZWZkYXRhKCkpOwogICAgICB9CiAgICAg
IGVsc2UgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVuMikKICAgICAgICB7CgogICAg
ICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3Jj
LCBfX2hvd19tdWNoKTsKICAgICAgICB9CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUo
KTsKICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3NpemU7CiAgICAgIF9NX2RhdGEo
KVtfX25ld19zaXplXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lk
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNpemVf
dHlwZSBfX3JlcykKICAgIHsKICAgICAgaWYgKF9fcmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBf
TV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fcmVzID4g
dGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2lj
X3N0cmluZzo6cmVzZXJ2ZSIpOwoKICAgICAgICAgIGlmIChfX3JlcyA8IHRoaXMtPnNpemUoKSkK
ICAgICAgICAgICAgX19yZXMgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgICBhbGxvY2F0b3JfdHlw
ZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fcmVw
KCktPl9NX2Nsb25lKF9fYSwgX19yZXMgLSB0aGlzLT5zaXplKCkpOwogICAgICAgICAgX01fcmVw
KCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0K
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB2b2lkIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OnN3YXAoYmFzaWNfc3RyaW5nJiBfX3MpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01f
aXNfbGVha2VkKCkpCiAgICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBp
ZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfX3MuX01fcmVwKCktPl9N
X3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAodGhpcy0+Z2V0X2FsbG9jYXRvcigpID09IF9fcy5n
ZXRfYWxsb2NhdG9yKCkpCiAgICAgICAgewogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX2Rh
dGEoKTsKICAgICAgICAgIF9NX2RhdGEoX19zLl9NX2RhdGEoKSk7CiAgICAgICAgICBfX3MuX01f
ZGF0YShfX3RtcCk7CiAgICAgICAgfQoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGJh
c2ljX3N0cmluZyBfX3RtcDEoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxvY2F0
b3IoKSk7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19z
Ll9NX2llbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9j
YXRvcigpKTsKICAgICAgICAgICp0aGlzID0gX190bXAyOwogICAgICAgICAgX19zID0gX190bXAx
OwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19jcmVhdGUoc2l6ZV90IF9fY2FwYWNpdHksIGNvbnN0
IF9BbGxvYyYgX19hbGxvYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CgoKICAgICAgaWYgKF9fY2FwYWNpdHkg
PiBfU19tYXhfc2l6ZSkKCgoKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3Ry
aW5nOjpfU19jcmVhdGUiKTsKCgoKCiAgICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0eSAr
IDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiMgNDIxICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKICAgICAgY29uc3Qgc2l6ZV90IF9fcGFn
ZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBzaXplX3QgX19zdWJwYWdlc2l6ZSA9IDEyODsKICAg
ICAgY29uc3Qgc2l6ZV90IF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCop
OwogICAgICBpZiAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSA+IF9fcGFnZXNpemUp
CiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fZXh0cmEgPQogICAgICAgICAgICAoX19wYWdl
c2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpICUgX19wYWdlc2l6ZSkpCiAg
ICAgICAgICAgICUgX19wYWdlc2l6ZTsKICAgICAgICAgIF9fY2FwYWNpdHkgKz0gX19leHRyYSAv
IHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNp
emVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19z
aXplID4gX19zdWJwYWdlc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19leHRyYSA9
CiAgICAgICAgICAgIChfX3N1YnBhZ2VzaXplIC0gKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJf
c2l6ZSkgJSBfX3N1YnBhZ2VzaXplKSkKICAgICAgICAgICAgJSBfX3N1YnBhZ2VzaXplOwogICAg
ICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBf
X3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7
CiAgICAgICAgfQoKCgogICAgICB2b2lkKiBfX3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2Fs
bG9jKS5hbGxvY2F0ZShfX3NpemUpOwogICAgICBfUmVwICpfX3AgPSBuZXcgKF9fcGxhY2UpIF9S
ZXA7CiAgICAgIF9fcC0+X01fY2FwYWNpdHkgPSBfX2NhcGFjaXR5OwogICAgICBfX3AtPl9NX3Nl
dF9zaGFyYWJsZSgpOwogICAgICBfX3AtPl9NX2xlbmd0aCA9IDA7CiAgICAgIHJldHVybiBfX3A7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9jbG9uZShjb25zdCBfQWxsb2MmIF9fYWxsb2MsIHNp
emVfdHlwZSBfX3JlcykKICAgIHsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3JlcXVlc3RlZF9j
YXAgPSBfTV9sZW5ndGggKyBfX3JlczsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXpl
ID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAq
IHNpemVvZiAodm9pZCopOwoKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZV9jYXBhY2l0eSA9
CiAgICAgICAgKF9fcGFnZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6ZSAtIHNpemVvZihfUmVw
KSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SZXAq
IF9fcjsKICAgICAgaWYgKF9fcmVxdWVzdGVkX2NhcCA+IF9NX2NhcGFjaXR5ICYmIF9fcmVxdWVz
dGVkX2NhcCA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRl
KF9fcmVxdWVzdGVkX2NhcCA+IDIqX01fY2FwYWNpdHkgPwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3JlcXVlc3RlZF9jYXAgOiAyKl9NX2NhcGFjaXR5LCBfX2FsbG9jKTsKICAgICAg
ZWxzZQogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAsIF9fYWxs
b2MpOwoKICAgICAgaWYgKF9NX2xlbmd0aCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgp
LCBfTV9sZW5ndGgpOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hbGxvYyk7CiAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOwog
ICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBf
X24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmIChfX24gPiBtYXhfc2l6ZSgpKQogICAgICAg
IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2l6ZSIpOwogICAgICBzaXpl
X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplIDwgX19uKQogICAg
ICAgIHRoaXMtPmFwcGVuZChfX24gLSBfX3NpemUsIF9fYyk7CiAgICAgIGVsc2UgaWYgKF9fbiA8
IF9fc2l6ZSkKICAgICAgICB0aGlzLT5lcmFzZShfX24pOwoKICAgIH0KCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5w
dXRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2syLCBpbnB1dF9pdGVy
YXRvcl90YWcpCiAgICAgIHsKCiAgICAgICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsK
ICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9faTEsIF9faTIsIF9fcy5fTV9pYmVnaW4o
KSwgX19zLl9NX2llbmQoKSk7CiAgICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBf
TV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVy
IF9fazEsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19rMikKICAgICAgewog
ICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNl
KF9fazEsIF9fazIpKTsKICAgICAgICBzaXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7CiAg
ICAgICAgc2l6ZV90eXBlIF9fZG1heCA9IHRoaXMtPm1heF9zaXplKCk7CgogICAgICAgIGlmIChf
X2RtYXggPD0gX19kbmV3KQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0
cmluZzo6X01fcmVwbGFjZSIpOwogICAgICAgIHNpemVfdHlwZSBfX29mZiA9IF9faTEgLSBfTV9p
YmVnaW4oKTsKICAgICAgICBfTV9tdXRhdGUoX19vZmYsIF9fZG9sZCwgX19kbmV3KTsKCgogICAg
ICAgIGlmIChfX2RuZXcpCiAgICAgICAgICBfU19jb3B5X2NoYXJzKF9NX2RhdGEoKSArIF9fb2Zm
LCBfX2sxLCBfX2syKTsKCiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBz
aXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6
ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpCiAgICB7CiAgICAgIGNvbnN0IHNpemVfdHlw
ZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChfX3BvczIgPiBfX3N0cnNpemUp
CiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwog
ICAgICBjb25zdCBib29sIF9fdGVzdG4yID0gX19uMiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAg
ICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4yID0gX190ZXN0bjIgPyBfX24yIDogX19zdHJzaXpl
IC0gX19wb3MyOwogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvczEsIF9fbjEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19mb2xkbjIp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19zaXpl
ID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlzLT5z
aXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+
cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBf
TV9pZW5kKCksIF9fc3RyLl9NX2liZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fc3RyLl9NX2llbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9f
c3RyLnNpemUoKSAtIF9fcG9zLCBfX24pICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4g
PiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICBy
ZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9jaGVj
ayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3Bv
cywgX19uKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg
YXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgewogICAgICBzaXpl
X3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMt
PmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBf
TV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoc2l6ZV90
eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsg
dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAg
IHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVu
ZCgpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xo
cywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJp
bmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9
IF9UcmFpdHM6Omxlbmd0aChfX2xocyk7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAg
IF9fc3RyLnJlc2VydmUoX19sZW4gKyBfX3Jocy5zaXplKCkpOwogICAgICBfX3N0ci5hcHBlbmQo
X19saHMsIF9fbGhzICsgX19sZW4pOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICBy
ZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAg
ICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfX3Jocy5z
aXplKCk7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyAxKTsKICAgICAgX19zdHIuYXBwZW5k
KF9fc2l6ZV90eXBlKDEpLCBfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAg
IHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24y
LCBfQ2hhclQgX19jKQogICAgewogICAgICBzaXplX3R5cGUgX19uMSA9IF9faTIgLSBfX2kxOwog
ICAgICBzaXplX3R5cGUgX19vZmYxID0gX19pMSAtIF9NX2liZWdpbigpOwogICAgICBpZiAobWF4
X3NpemUoKSAtICh0aGlzLT5zaXplKCkgLSBfX24xKSA8PSBfX24yKQogICAgICAgIF9fdGhyb3df
bGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgX01fbXV0YXRlIChf
X29mZjEsIF9fbjEsIF9fbjIpOwoKICAgICAgaWYgKF9fbjIpCiAgICAgICAgdHJhaXRzX3R5cGU6
OmFzc2lnbihfTV9kYXRhKCkgKyBfX29mZjEsIF9fbjIsIF9fYyk7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9f
cG9zKSBjb25zdAogICAgewogICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAg
X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29weSIpOwoKICAgICAgaWYgKF9f
biA+IHRoaXMtPnNpemUoKSAtIF9fcG9zKQogICAgICAgIF9fbiA9IHRoaXMtPnNpemUoKSAtIF9f
cG9zOwoKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9kYXRhKCkgKyBfX3BvcywgX19u
KTsKCiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBl
IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAg
ICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgZm9yICg7IF9feHBvcyAr
IF9fbiA8PSBfX3NpemU7ICsrX194cG9zKQogICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFy
ZShfX2RhdGEgKyBfX3hwb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAgICAgcmV0dXJuIF9feHBv
czsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBl
IF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp
OwogICAgICBzaXplX3R5cGUgX19yZXQgPSBucG9zOwogICAgICBpZiAoX19wb3MgPCBfX3NpemUp
CiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAg
ICAgICAgICBzaXplX3R5cGUgX19uID0gX19zaXplIC0gX19wb3M7CiAgICAgICAgICBjb25zdCBf
Q2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fZGF0YSArIF9fcG9zLCBfX24sIF9fYyk7
CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICBfX3JldCA9IF9fcCAtIF9fZGF0YTsKICAg
ICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKGNvbnN0IF9DaGFyVCog
X19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNp
emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX24gPD0gX19zaXplKQog
ICAgICAgIHsKICAgICAgICAgIF9fcG9zID0gc3RkOjptaW4oX19zaXplIC0gX19uLCBfX3Bvcyk7
CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIGRv
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19k
YXRhICsgX19wb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fcG9z
OwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19wb3MtLSA+IDApOwogICAgICAgIH0K
ICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBf
X3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsK
ICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX194cG9zID0gX19z
aXplIC0gMTsKICAgICAgICAgIGlmIChfX3hwb3MgPiBfX3BvcykKICAgICAgICAgICAgX194cG9z
ID0gX19wb3M7CgogICAgICAgICAgZm9yICgrK19feHBvczsgX194cG9zLS0gPiAwOyApCiAgICAg
ICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAg
ICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIGZvciAoOyBfX24gJiYgX19wb3MgPCB0aGlz
LT5zaXplKCk7ICsrX19wb3MpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3Ag
PSB0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fcG9zXSk7CiAgICAgICAg
ICBpZiAoX19wKQogICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAgICAgfQogICAgICByZXR1
cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5
cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3Np
emUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgJiYgX19uKQogICAgICAgIHsKICAg
ICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsK
ICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6
OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3NpemVdKSkKICAgICAgICAgICAgICAgIHJldHVy
biBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSAhPSAwKTsK
ICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihj
b25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAog
ICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0
aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19z
LCBfX24sIF9NX2RhdGEoKVtfX3hwb3NdKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAg
IHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXpl
X3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAg
ICAgZm9yICg7IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0
cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICByZXR1cm4g
X194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X25vdF9vZihjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAg
ewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXpl
KQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBf
X3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
ZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAg
ICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAo
X19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
dHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBl
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFz
dF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBz
aXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAg
IHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBf
X3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0
c190eXBlOjplcShfTV9kYXRhKClbX19zaXplXSwgX19jKSkKICAgICAgICAgICAgICAgIHJldHVy
biBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSk7CiAgICAg
ICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19w
b3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICB7
CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBf
X29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAg
X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6
ZV90eXBlIF9fcnNpemU9IG1pbihfX3NpemUgLSBfX3BvcywgX19uKTsKICAgICAgc2l6ZV90eXBl
IF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5
cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAg
ICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJu
IF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19u
MSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9z
Miwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0
aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAg
ICBpZiAoX19wb3MxID4gX19zaXplIHx8IF9fcG9zMiA+IF9fb3NpemUpCiAgICAgICAgX190aHJv
d19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBl
IF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MxLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9f
cm9zaXplID0gbWluKF9fb3NpemUgLSBfX3BvczIsIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19s
ZW4gPSBtaW4oX19yc2l6ZSwgX19yb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6
OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19zdHIuZGF0YSgpICsgX19wb3MyLCBfX2xlbik7CiAgICAgIGlmICghX19yKQog
ICAgICAgIF9fciA9IF9fcnNpemUgLSBfX3Jvc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf
dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJh
aXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zaXpl
LCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEo
KSwgX19zLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fc2l6ZSAtIF9f
b3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNf
c3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUg
X19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAgIHsKICAg
ICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19z
aXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUi
KTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwog
ICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAg
IHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9
IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKICAg
ICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVy
biBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f
bjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3QK
ICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9f
cG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6
OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gbWluKHRyYWl0c190eXBlOjps
ZW5ndGgoX19zKSwgX19uMik7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAt
IF9fcG9zLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3Np
emUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19w
b3MsIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0g
X19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFy
VCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgdm9pZAogICAgX1Nfc3RyaW5nX2Nv
cHkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsCiAg
ICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fYnVmLCB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlw
ZSBfX2J1ZnNpeikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlw
ZSBzaXplX3R5cGU7CiAgICAgIHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAg
ICAgIHNpemVfdHlwZSBfX2J5dGVzID0gbWluKF9fc3Ryc2l6ZSwgX19idWZzaXogLSAxKTsKICAg
ICAgX1RyYWl0czo6Y29weShfX2J1ZiwgX19zdHIuZGF0YSgpLCBfX2J5dGVzKTsKICAgICAgX19i
dWZbX19ieXRlc10gPSBfQ2hhclQoKTsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz
IGJhc2ljX3N0cmluZzxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08
Y2hhcj4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmKTsKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX29zdHJlYW08Y2hhcj4mCiAgICBvcGVyYXRvcjw8KGJh
c2ljX29zdHJlYW08Y2hhcj4mLCBjb25zdCBzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAg
IGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBz
dHJpbmcmLCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4m
CiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmKTsKCgogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmc8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPHdj
aGFyX3Q+Jiwgd3N0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfb3N0cmVhbTx3
Y2hhcl90PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYsIGNvbnN0IHdz
dHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAg
ICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJiwgd2NoYXJfdCk7CiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShi
YXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYpOwoKfQojIDU4ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9zdHJpbmciIDIgMwojIDUwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2Fs
ZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0Lmgi
IDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQK
ewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhy
b3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7Cgog
IHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dp
Y19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3Io
Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
b3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJm
bG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVy
ZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9j
YWxlZndkLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKICBjbGFzcyBsb2NhbGU7CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQs
IGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg
Ym9vbAogICAgaXNwcmludChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQsIGNvbnN0IGxv
Y2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAg
aXN1cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShf
Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQsIGNv
bnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v
bAogICAgaXN4ZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJULCBjb25zdCBsb2Nh
bGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlz
Z3JhcGgoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2Vy
KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgoKCiAgY2xhc3MgY3R5cGVfYmFzZTsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZTsKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0
eXBlPGNoYXI+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPHdjaGFyX3Q+OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWU7CgoKICBjbGFzcyBjb2Rl
Y3Z0X2Jhc2U7CiAgY2xhc3MgX19lbmNfdHJhaXRzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRl
cm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVj
dnQ7CiAgdGVtcGxhdGU8PiBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47Cgog
IHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9T
dGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAg
ICBjbGFzcyBudW1fZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091
dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX3B1dDsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0OwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3RfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
IGNsYXNzCiAgICBjb2xsYXRlX2J5bmFtZTsKCgogIGNsYXNzIHRpbWVfYmFzZTsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9y
PF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNs
YXNzIHRpbWVfZ2V0X2J5bmFtZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVf
cHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3Ry
ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lOwoKCiAg
Y2xhc3MgbW9uZXlfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbW9uZXlfZ2V0
OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbW9uZXlfcHV0OwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgogICAgY2xhc3MgbW9uZXlwdW5jdDsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNz
IG1vbmV5cHVuY3RfYnluYW1lOwoKCiAgY2xhc3MgbWVzc2FnZXNfYmFzZTsKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlczsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWU7CgoKICBjbGFzcyBsb2NhbGUKICB7CiAg
cHVibGljOgoKICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IGNhdGVnb3J5OwoKCiAgICBjbGFzcyBm
YWNldDsKICAgIGNsYXNzIGlkOwogICAgY2xhc3MgX0ltcGw7CgogICAgZnJpZW5kIGNsYXNzIGZh
Y2V0OwogICAgZnJpZW5kIGNsYXNzIF9JbXBsOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNl
dD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2Fs
ZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAg
ICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgoKCiAgICBzdGF0aWMgY29uc3Qg
Y2F0ZWdvcnkgbm9uZSA9IDA7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgY3R5cGUgPSAxTCA8
PCAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG51bWVyaWMgPSAxTCA8PCAxOwogICAgc3Rh
dGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUgPSAxTCA8PCAyOwogICAgc3RhdGljIGNvbnN0IGNh
dGVnb3J5IHRpbWUgPSAxTCA8PCAzOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5
ID0gMUwgPDwgNDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtZXNzYWdlcyA9IDFMIDw8IDU7
CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgYWxsID0gKGN0eXBlIHwgbnVtZXJpYyB8IGNvbGxh
dGUgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSB8IG1v
bmV0YXJ5IHwgbWVzc2FnZXMpOwoKCiAgICBsb2NhbGUoKSB0aHJvdygpOwoKICAgIGxvY2FsZShj
b25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShj
b25zdCBjaGFyKiBfX3MpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3Qg
Y2hhciogX19zLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19i
YXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFj
ZXQqIF9fZik7CgogICAgfmxvY2FsZSgpIHRocm93KCk7CgogICAgY29uc3QgbG9jYWxlJgogICAg
b3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZQogICAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYg
X19vdGhlcikgY29uc3Q7CgoKICAgIHN0cmluZwogICAgbmFtZSgpIGNvbnN0OwoKICAgIGJvb2wK
ICAgIG9wZXJhdG9yPT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKTsKCiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0
IHRocm93ICgpCiAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9Cgog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
ciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0OwoKCiAgICBzdGF0aWMg
bG9jYWxlCiAgICBnbG9iYWwoY29uc3QgbG9jYWxlJik7CgogICAgc3RhdGljIGNvbnN0IGxvY2Fs
ZSYKICAgIGNsYXNzaWMoKTsKCiAgcHJpdmF0ZToKCiAgICBfSW1wbCogX01faW1wbDsKCgogICAg
c3RhdGljIF9JbXBsKiBfU19jbGFzc2ljOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9TX2dsb2JhbDsK
CgoKCgoKICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfY2F0ZWdvcmllc19zaXplID0gNjsKCgoK
CgoKICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfZXh0cmFfY2F0ZWdvcmllc19zaXplID0gNjsK
CgoKCgogICAgc3RhdGljIGNvbnN0IGNoYXIqIF9TX2NhdGVnb3JpZXNbX1NfY2F0ZWdvcmllc19z
aXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfU19leHRyYV9jYXRl
Z29yaWVzX3NpemVdOwoKICAgIGV4cGxpY2l0CiAgICBsb2NhbGUoX0ltcGwqKSB0aHJvdygpOwoK
ICAgIHN0YXRpYyBpbmxpbmUgdm9pZAogICAgX1NfaW5pdGlhbGl6ZSgpCiAgICB7CiAgICAgIGlm
ICghX1NfY2xhc3NpYykKICAgICAgICBjbGFzc2ljKCk7CiAgICB9CgogICAgc3RhdGljIGNhdGVn
b3J5CiAgICBfU19ub3JtYWxpemVfY2F0ZWdvcnkoY2F0ZWdvcnkpOwoKICAgIHZvaWQKICAgIF9N
X2NvYWxlc2NlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRl
Z29yeSBfX2NhdCk7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6Ol9JbXBsCiAgewogIHB1YmxpYzoK
CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6ZmFjZXQ7
CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0
JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikg
dGhyb3coKTsKCiAgcHJpdmF0ZToKCiAgICBfQXRvbWljX3dvcmQgX01fcmVmZXJlbmNlczsKICAg
IGZhY2V0KiogX01fZmFjZXRzOwogICAgc2l6ZV90IF9NX2ZhY2V0c19zaXplOwoKICAgIGNoYXIq
IF9NX25hbWVzW19TX2NhdGVnb3JpZXNfc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKyBfU19leHRyYV9jYXRlZ29yaWVzX3NpemVdOwogICAgc3Rh
dGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX2N0eXBlW107CiAgICBzdGF0aWMgY29u
c3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbnVtZXJpY1tdOwogICAgc3RhdGljIGNvbnN0IGxv
Y2FsZTo6aWQqIGNvbnN0IF9TX2lkX2NvbGxhdGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6
OmlkKiBjb25zdCBfU19pZF90aW1lW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29u
c3QgX1NfaWRfbW9uZXRhcnlbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBf
U19pZF9tZXNzYWdlc1tdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0KiBjb25z
dCBfU19mYWNldF9jYXRlZ29yaWVzW107CgogICAgaW5saW5lIHZvaWQKICAgIF9NX2FkZF9yZWZl
cmVuY2UoKSB0aHJvdygpCiAgICB7IF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7IH0K
CiAgICBpbmxpbmUgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCkKICAgIHsK
ICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmZXJlbmNlcywgLTEpID09IDEpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgZGVsZXRlIHRoaXM7IH0KICAgICAg
ICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgeyB9CiAgICAgICAgfQogICAgfQoKICAgIF9JbXBs
KGNvbnN0IF9JbXBsJiwgc2l6ZV90KTsKICAgIF9JbXBsKGNvbnN0IGNoYXIqLCBzaXplX3QpOwog
ICAgX0ltcGwoZmFjZXQqKiwgc2l6ZV90LCBib29sKTsKCiAgIH5fSW1wbCgpIHRocm93KCk7Cgog
ICAgX0ltcGwoY29uc3QgX0ltcGwmKTsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgX0lt
cGwmKTsKCiAgICBpbmxpbmUgYm9vbAogICAgX01fY2hlY2tfc2FtZV9uYW1lKCkKICAgIHsKICAg
ICAgYm9vbCBfX3JldCA9IHRydWU7CiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7CiAgICAgICAg
ICAgX19yZXQgJiYgX19pIDwgX1NfY2F0ZWdvcmllc19zaXplICsgX1NfZXh0cmFfY2F0ZWdvcmll
c19zaXplIC0gMTsKICAgICAgICAgICArK19faSkKICAgICAgICBfX3JldCAmPSAoc3RyY21wKF9N
X25hbWVzW19faV0sIF9NX25hbWVzW19faSArIDFdKSA9PSAwKTsKICAgICAgcmV0dXJuIF9fcmV0
OwogICAgfQoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdvcmllcyhjb25zdCBfSW1wbCos
IGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3J5KGNvbnN0IF9JbXBs
KiwgY29uc3QgbG9jYWxlOjppZCogY29uc3QqKTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2Zh
Y2V0KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCopOwoKICAgIHZvaWQKICAgIF9NX2lu
c3RhbGxfZmFjZXQoY29uc3QgbG9jYWxlOjppZCosIGZhY2V0Kik7CgogICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZhY2V0PgogICAgICBpbmxpbmUgdm9pZAogICAgICBfTV9pbml0X2ZhY2V0KF9GYWNl
dCogX19mYWNldCkKICAgICAgeyBfTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2ZhY2V0
KTsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGxvY2FsZTo6bG9jYWxl
KGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpCiAgICB7CiAgICAgIF9NX2ltcGwg
PSBuZXcgX0ltcGwoKl9fb3RoZXIuX01faW1wbCwgMSk7CiAgICAgIF9NX2ltcGwtPl9NX2luc3Rh
bGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZik7CiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7CiAg
ICAgICAgICAgX19pIDwgX1NfY2F0ZWdvcmllc19zaXplICsgX1NfZXh0cmFfY2F0ZWdvcmllc19z
aXplOyArK19faSkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgW10gX01faW1wbC0+X01fbmFt
ZXNbX19pXTsKICAgICAgICAgIGNoYXIqIF9fbmV3ID0gbmV3IGNoYXJbMl07CiAgICAgICAgICBz
dHJjcHkoX19uZXcsICIqIik7CiAgICAgICAgICBfTV9pbXBsLT5fTV9uYW1lc1tfX2ldID0gX19u
ZXc7CiAgICAgICAgfQogICAgfQoKCiAgY2xhc3MgbG9jYWxlOjpmYWNldAogIHsKICBwcml2YXRl
OgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBs
OwoKICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwoKICBwcm90ZWN0ZWQ6CgoKICAgIHN0
YXRpYyBfX2NfbG9jYWxlIF9TX2NfbG9jYWxlOwoKCiAgICBzdGF0aWMgY2hhciBfU19jX25hbWVb
Ml07CgogICAgZXhwbGljaXQKICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0aHJvdygpOwoK
ICAgIHZpcnR1YWwKICAgIH5mYWNldCgpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19jcmVhdGVf
Y19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IDApOwoKICAgIHN0YXRpYyBfX2NfbG9jYWxl
CiAgICBfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICAgIHN0YXRpYyB2
b2lkCiAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7CgogIHByaXZh
dGU6CiAgICB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICB2b2lkCiAg
ICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICBmYWNldChjb25zdCBmYWNldCYp
OwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBmYWNldCYpOwogIH07CgoKCiAgY2xhc3Mg
bG9jYWxlOjppZAogIHsKICBwcml2YXRlOgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZy
aWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog
ICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7
CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhh
c19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdyAoKTsKCgoKCiAgICBtdXRhYmxlIHNpemVfdCBf
TV9pbmRleDsKCgogICAgc3RhdGljIF9BdG9taWNfd29yZCBfU19oaWdod2F0ZXI7CgogICAgdm9p
ZAogICAgb3BlcmF0b3I9KGNvbnN0IGlkJik7CgogICAgaWQoY29uc3QgaWQmKTsKCiAgcHVibGlj
OgoKCiAgICBpZCgpOwoKICAgIGlubGluZSBzaXplX3QKICAgIF9NX2lkKCkgY29uc3QKICAgIHsK
ICAgICAgaWYgKCFfTV9pbmRleCkKICAgICAgICBfTV9pbmRleCA9IDEgKyBfX2V4Y2hhbmdlX2Fu
ZF9hZGQoJl9TX2hpZ2h3YXRlciwgMSk7CiAgICAgIHJldHVybiBfTV9pbmRleCAtIDE7CiAgICB9
CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAg
dXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj
ZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsK
fQojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3MiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvaW9zX2Jhc2UuaCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvaW9zX2Jhc2UuaCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgZW51bSBfSW9zX0ZtdGZs
YWdzIHsgX01faW9zX2ZtdGZsYWdzX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0Zt
dGZsYWdzCiAgb3BlcmF0b3ImKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikK
ICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19j
YXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnwoX0lv
c19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10Zmxh
Z3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBp
bmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19G
bXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9f
YSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAg
b3BlcmF0b3J8PShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0
dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9y
Jj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2Eg
PSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl49KF9Jb3Nf
Rm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4g
X19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J+KF9Jb3NfRm10ZmxhZ3Mg
X19hKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3MofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0K
CgogIGVudW0gX0lvc19PcGVubW9kZSB7IF9NX2lvc19vcGVubW9kZV9lbmQgPSAxTCA8PCAxNiB9
OwoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yJihfSW9zX09wZW5tb2RlIF9fYSwg
X0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxp
bnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5t
b2RlCiAgb3BlcmF0b3J8KF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7
IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0
PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl4oX0lvc19P
cGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUo
c3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxp
bmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfD0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09w
ZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3Nf
T3Blbm1vZGUKICBvcGVyYXRvciY9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBf
X2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2Rl
CiAgb3BlcmF0b3JePShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsg
cmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJh
dG9yfihfSW9zX09wZW5tb2RlIF9fYSkKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNf
Y2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRl
X2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciYoX0lv
c19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUo
c3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxp
bmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0
ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0
YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9y
XihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9z
dGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9Cgog
IGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9z
X0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lv
c19Jb3N0YXRlCiAgb3BlcmF0b3ImPShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9f
YikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQog
IG9wZXJhdG9yXj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1
cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcn4o
X0lvc19Jb3N0YXRlIF9fYSkKICB7IHJldHVybiBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGlu
dD4oX19hKSk7IH0KCiAgZW51bSBfSW9zX1NlZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAx
TCA8PCAxNiB9OwoKCiAgY2xhc3MgaW9zX2Jhc2UKICB7CiAgcHVibGljOgoKCiAgICBjbGFzcyBm
YWlsdXJlIDogcHVibGljIGV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKCiAgICAgIGV4cGxp
Y2l0CiAgICAgIGZhaWx1cmUoY29uc3Qgc3RyaW5nJiBfX3N0cikgdGhyb3coKTsKCgoKICAgICAg
dmlydHVhbAogICAgICB+ZmFpbHVyZSgpIHRocm93KCk7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqCiAgICAgIHdoYXQoKSBjb25zdCB0aHJvdygpOwoKICAgIHByaXZhdGU6CiAgICAgIGVudW0g
eyBfTV9idWZzaXplID0gMjU2IH07CiAgICAgIGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsKCiAg
ICB9OwoKCiAgICB0eXBlZGVmIF9Jb3NfRm10ZmxhZ3MgZm10ZmxhZ3M7CgogICAgc3RhdGljIGNv
bnN0IGZtdGZsYWdzIGJvb2xhbHBoYSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19ib29sYWxw
aGEpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGRlYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz
OjpfU19kZWMpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZpeGVkID0gZm10ZmxhZ3MoX19p
b3NfZmxhZ3M6Ol9TX2ZpeGVkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBoZXggPSBmbXRm
bGFncyhfX2lvc19mbGFnczo6X1NfaGV4KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBpbnRl
cm5hbCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19pbnRlcm5hbCk7CiAgICBzdGF0aWMgY29u
c3QgZm10ZmxhZ3MgbGVmdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19sZWZ0KTsKICAgIHN0
YXRpYyBjb25zdCBmbXRmbGFncyBvY3QgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfb2N0KTsK
ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyByaWdodCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpf
U19yaWdodCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2NpZW50aWZpYyA9IGZtdGZsYWdz
KF9faW9zX2ZsYWdzOjpfU19zY2llbnRpZmljKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBz
aG93YmFzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93YmFzZSk7CiAgICBzdGF0aWMg
Y29uc3QgZm10ZmxhZ3Mgc2hvd3BvaW50ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dw
b2ludCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvcyA9IGZtdGZsYWdzKF9faW9z
X2ZsYWdzOjpfU19zaG93cG9zKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBza2lwd3MgPSBm
bXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2tpcHdzKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn
cyB1bml0YnVmID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VuaXRidWYpOwogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIHVwcGVyY2FzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191cHBl
cmNhc2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGFkanVzdGZpZWxkID0gZm10ZmxhZ3Mo
X19pb3NfZmxhZ3M6Ol9TX2FkanVzdGZpZWxkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBi
YXNlZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYmFzZWZpZWxkKTsKICAgIHN0YXRp
YyBjb25zdCBmbXRmbGFncyBmbG9hdGZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Zs
b2F0ZmllbGQpOwoKCiAgICB0eXBlZGVmIF9Jb3NfSW9zdGF0ZSBpb3N0YXRlOwogICAgc3RhdGlj
IGNvbnN0IGlvc3RhdGUgYmFkYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfYmFkYml0KTsK
ICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGVvZmJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9T
X2VvZmJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBmYWlsYml0ID0gaW9zdGF0ZShfX2lv
c19mbGFnczo6X1NfZmFpbGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBnb29kYml0ID0g
aW9zdGF0ZSgwKTsKCgogICAgdHlwZWRlZiBfSW9zX09wZW5tb2RlIG9wZW5tb2RlOwogICAgc3Rh
dGljIGNvbnN0IG9wZW5tb2RlIGFwcCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hcHApOwog
ICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGF0ZSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19h
dGUpOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGJpbmFyeSA9IG9wZW5tb2RlKF9faW9zX2Zs
YWdzOjpfU19iaW4pOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGluID0gb3Blbm1vZGUoX19p
b3NfZmxhZ3M6Ol9TX2luKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBvdXQgPSBvcGVubW9k
ZShfX2lvc19mbGFnczo6X1Nfb3V0KTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSB0cnVuYyA9
IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU190cnVuYyk7CgoKICAgIHR5cGVkZWYgX0lvc19TZWVr
ZGlyIHNlZWtkaXI7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBiZWcgPSBzZWVrZGlyKDApOwog
ICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgY3VyID0gc2Vla2RpcigxKTsKICAgIHN0YXRpYyBjb25z
dCBzZWVrZGlyIGVuZCA9IHNlZWtkaXIoMik7CiMgMjI5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL2lvc19iYXNlLmgiIDMKICAgIGVudW0gZXZlbnQKICAgIHsKICAgICAgZXJhc2VfZXZlbnQs
CiAgICAgIGltYnVlX2V2ZW50LAogICAgICBjb3B5Zm10X2V2ZW50CiAgICB9OwoKICAgIHR5cGVk
ZWYgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSAoZXZlbnQsIGlvc19iYXNlJiwgaW50KTsKCiAgICB2
b2lkCiAgICByZWdpc3Rlcl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRl
eCk7CgogIHByb3RlY3RlZDoKCiAgICBzdHJlYW1zaXplIF9NX3ByZWNpc2lvbjsKICAgIHN0cmVh
bXNpemUgX01fd2lkdGg7CiAgICBmbXRmbGFncyBfTV9mbGFnczsKICAgIGlvc3RhdGUgX01fZXhj
ZXB0aW9uOwogICAgaW9zdGF0ZSBfTV9zdHJlYW1idWZfc3RhdGU7CgoKCiAgICBzdHJ1Y3QgX0Nh
bGxiYWNrX2xpc3QKICAgIHsKCiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0OwogICAgICBp
b3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX01fZm47CiAgICAgIGludCBfTV9pbmRleDsKICAgICAg
X0F0b21pY193b3JkIF9NX3JlZmNvdW50OwoKICAgICAgX0NhbGxiYWNrX2xpc3QoaW9zX2Jhc2U6
OmV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4LAogICAgICAgICAgICAgICAgICAgICBf
Q2FsbGJhY2tfbGlzdCogX19jYikKICAgICAgOiBfTV9uZXh0KF9fY2IpLCBfTV9mbihfX2ZuKSwg
X01faW5kZXgoX19pbmRleCksIF9NX3JlZmNvdW50KDApIHsgfQoKICAgICAgdm9pZAogICAgICBf
TV9hZGRfcmVmZXJlbmNlKCkgeyBfX2F0b21pY19hZGQoJl9NX3JlZmNvdW50LCAxKTsgfQoKCiAg
ICAgIGludAogICAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgeyByZXR1cm4gX19leGNoYW5nZV9h
bmRfYWRkKCZfTV9yZWZjb3VudCwgLTEpOyB9CiAgICB9OwoKICAgICBfQ2FsbGJhY2tfbGlzdCog
X01fY2FsbGJhY2tzOwoKICAgIHZvaWQKICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9fZXYp
IHRocm93KCk7CgogICAgdm9pZAogICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7CgoKICAg
IHN0cnVjdCBfV29yZHMKICAgIHsKICAgICAgdm9pZCogX01fcHdvcmQ7CiAgICAgIGxvbmcgX01f
aXdvcmQ7CiAgICAgIF9Xb3JkcygpIDogX01fcHdvcmQoMCksIF9NX2l3b3JkKDApIHsgfQogICAg
fTsKCgogICAgX1dvcmRzIF9NX3dvcmRfemVybzsKCgogICAgc3RhdGljIGNvbnN0IGludCBfU19s
b2NhbF93b3JkX3NpemUgPSA4OwogICAgX1dvcmRzIF9NX2xvY2FsX3dvcmRbX1NfbG9jYWxfd29y
ZF9zaXplXTsKCgogICAgaW50IF9NX3dvcmRfc2l6ZTsKICAgIF9Xb3JkcyogX01fd29yZDsKCiAg
ICBfV29yZHMmCiAgICBfTV9ncm93X3dvcmRzKGludCBfX2luZGV4KTsKCgogICAgbG9jYWxlIF9N
X2lvc19sb2NhbGU7CgogICAgdm9pZAogICAgX01faW5pdCgpOwoKICBwdWJsaWM6CgoKCgoKICAg
IGNsYXNzIEluaXQKICAgIHsKICAgICAgZnJpZW5kIGNsYXNzIGlvc19iYXNlOwogICAgcHVibGlj
OgogICAgICBJbml0KCk7CiAgICAgIH5Jbml0KCk7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBf
U19pb3NfY3JlYXRlKGJvb2wgX19zeW5jKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lv
c19kZXN0cm95KCk7CgogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIGludCBfU19pb3NfYmFzZV9p
bml0OwogICAgICBzdGF0aWMgYm9vbCBfU19zeW5jZWRfd2l0aF9zdGRpbzsKICAgIH07CgoKICAg
IGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfTV9mbGFnczsgfQoK
ICAgIGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAg
ICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgPSBfX2ZtdGZsOwog
ICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZt
dGZsYWdzIF9fZm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAg
ICAgIF9NX2ZsYWdzIHw9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBp
bmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCwgZm10ZmxhZ3MgX19tYXNr
KQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyAm
PSB+X19tYXNrOwogICAgICBfTV9mbGFncyB8PSAoX19mbXRmbCAmIF9fbWFzayk7CiAgICAgIHJl
dHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZAogICAgdW5zZXRmKGZtdGZsYWdzIF9f
bWFzaykgeyBfTV9mbGFncyAmPSB+X19tYXNrOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAg
IHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9NX3ByZWNpc2lvbjsgfQoKICAgIGlubGluZSBz
dHJlYW1zaXplCiAgICBwcmVjaXNpb24oc3RyZWFtc2l6ZSBfX3ByZWMpCiAgICB7CiAgICAgIHN0
cmVhbXNpemUgX19vbGQgPSBfTV9wcmVjaXNpb247CiAgICAgIF9NX3ByZWNpc2lvbiA9IF9fcHJl
YzsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3dpZHRoOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUK
ICAgIHdpZHRoKHN0cmVhbXNpemUgX193aWRlKQogICAgewogICAgICBzdHJlYW1zaXplIF9fb2xk
ID0gX01fd2lkdGg7CiAgICAgIF9NX3dpZHRoID0gX193aWRlOwogICAgICByZXR1cm4gX19vbGQ7
CiAgICB9CgogICAgc3RhdGljIGJvb2wKICAgIHN5bmNfd2l0aF9zdGRpbyhib29sIF9fc3luYyA9
IHRydWUpOwoKCiAgICBsb2NhbGUKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAg
IGlubGluZSBsb2NhbGUKICAgIGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19sb2NhbGU7
IH0KCgogICAgc3RhdGljIGludAogICAgeGFsbG9jKCkgdGhyb3coKTsKCiAgICBpbmxpbmUgbG9u
ZyYKICAgIGl3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4
IDwgX01fd29yZF9zaXplKQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRbX19peF0g
OiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX2l3b3JkOwogICAg
fQoKICAgIGlubGluZSB2b2lkKiYKICAgIHB3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29y
ZHMmIF9fd29yZCA9IChfX2l4IDwgX01fd29yZF9zaXplKQogICAgICAgICAgICAgICAgICAgICAg
ICA/IF9NX3dvcmRbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193
b3JkLl9NX3B3b3JkOwogICAgfQoKCiAgICB+aW9zX2Jhc2UoKTsKCiAgcHJvdGVjdGVkOgogICAg
aW9zX2Jhc2UoKTsKCgoKICBwcml2YXRlOgogICAgaW9zX2Jhc2UoY29uc3QgaW9zX2Jhc2UmKTsK
CiAgICBpb3NfYmFzZSYKICAgIG9wZXJhdG9yPShjb25zdCBpb3NfYmFzZSYpOwoKICB9OwoKCiAg
aW5saW5lIGlvc19iYXNlJgogIGJvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9f
YmFzZS5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgog
IGlubGluZSBpb3NfYmFzZSYKICBub2Jvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAg
IF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwog
IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewog
ICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg
fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQogIHsK
ICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7
CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpCiAg
ewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19iYXNl
OwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2Up
CiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBf
X2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNl
KQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9zKGlvc19iYXNlJiBfX2Jhc2Up
CiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19i
YXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNraXB3cyhpb3NfYmFzZSYgX19iYXNlKQog
IHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFzZTsK
ICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3NraXB3cyhpb3NfYmFzZSYgX19iYXNlKQogIHsK
ICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwog
IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHVwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQogIHsK
ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsK
ICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3VwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQog
IHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19i
YXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHVuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkK
ICB7CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91bml0YnVmKGlvc19iYXNlJiBfX2Jhc2Up
CiAgewogICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVybiBf
X2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGludGVybmFsKGlvc19iYXNlJiBfX2Jh
c2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jhc2U6OmFk
anVzdGZpZWxkKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgog
IGxlZnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6bGVm
dCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxp
bmUgaW9zX2Jhc2UmCiAgcmlnaHQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0
Zihpb3NfYmFzZTo6cmlnaHQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19i
YXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBkZWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7
CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAg
IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaGV4KGlvc19iYXNlJiBf
X2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmhleCwgaW9zX2Jhc2U6OmJhc2Vm
aWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG9jdChp
b3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpvY3QsIGlvc19i
YXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jh
c2UmCiAgZml4ZWQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFz
ZTo6Zml4ZWQsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoK
ICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2NpZW50aWZpYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAg
IF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzY2llbnRpZmljLCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCk7
CiAgICByZXR1cm4gX19iYXNlOwogIH0KCn0KIyA1MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9z
IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDEgMwojIDQ0ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDMKCgoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUK
ICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfaW9zLAog
ICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9f
c2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+KiBfX3Nib3V0KTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZgogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoK
ICAgICAgdHlwZWRlZiBjdHlwZTxjaGFyX3R5cGU+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRl
ZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19zdHJlYW1idWZfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZSBfX3N0YXRl
X3R5cGU7CgogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5
cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190
eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNf
dHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwg
dHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFy
X3R5cGUsIHRyYWl0c190eXBlPjsKCiAgICAgIGZyaWVuZCBzdHJlYW1zaXplCiAgICAgIF9fY29w
eV9zdHJlYW1idWZzPD4oYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+JiBfX2lvcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4sX19zdHJl
YW1idWZfdHlwZSogX19zYm91dCk7CgogICAgcHJvdGVjdGVkOgoKCgoKCiAgICAgIGNoYXJfdHlw
ZSogX01fYnVmOwoKCiAgICAgIHNpemVfdCBfTV9idWZfc2l6ZTsKCgogICAgICBzaXplX3QgX01f
YnVmX3NpemVfb3B0OwoKCgogICAgICBib29sIF9NX2J1Zl91bmlmaWVkOwoKCgoKCgogICAgICBj
aGFyX3R5cGUqIF9NX2luX2JlZzsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9jdXI7CiAgICAgIGNo
YXJfdHlwZSogX01faW5fZW5kOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9iZWc7CiAgICAgIGNo
YXJfdHlwZSogX01fb3V0X2N1cjsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfZW5kOwoKCiAgICAg
IGlvc19iYXNlOjpvcGVubW9kZSBfTV9tb2RlOwoKCiAgICAgIGxvY2FsZSBfTV9idWZfbG9jYWxl
OwoKCiAgICAgIGJvb2wgX01fYnVmX2xvY2FsZV9pbml0OwoKCgoKCgogICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IF9TX3BiYWNrX3NpemUgPSAxOwogICAgICBjaGFyX3R5cGUgX01fcGJhY2tbX1Nf
cGJhY2tfc2l6ZV07CiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2tfY3VyX3NhdmU7CiAgICAgIGNo
YXJfdHlwZSogX01fcGJhY2tfZW5kX3NhdmU7CiAgICAgIGJvb2wgX01fcGJhY2tfaW5pdDsKCgog
ICAgICBmcG9zPF9fc3RhdGVfdHlwZT4gX01fcG9zOwoKCgoKICAgICAgdm9pZAogICAgICBfTV9w
YmFja19jcmVhdGUoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9wYmFja19pbml0KQogICAgICAg
ICAgewogICAgICAgICAgICBzaXplX3QgX19kaXN0ID0gX01faW5fZW5kIC0gX01faW5fY3VyOwog
ICAgICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX1NfcGJhY2tfc2l6ZSwgX19kaXN0KTsKICAg
ICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJhY2ssIF9NX2luX2N1ciwgX19sZW4pOwog
ICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9NX2luX2N1cjsKICAgICAgICAgICAgX01f
cGJhY2tfZW5kX3NhdmUgPSBfTV9pbl9lbmQ7CiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fcGJh
Y2ssIF9NX3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfaW5p
dCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJh
Y2tfZGVzdHJveSgpCiAgICAgIHsKICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAg
IHsKCiAgICAgICAgICAgIHNpemVfdCBfX29mZl9jdXIgPSBfTV9pbl9jdXIgLSBfTV9wYmFjazsK
CgogICAgICAgICAgICBzaXplX3QgX19vZmZfZW5kID0gMDsKICAgICAgICAgICAgc2l6ZV90IF9f
cGJhY2tfbGVuID0gX01faW5fZW5kIC0gX01fcGJhY2s7CiAgICAgICAgICAgIHNpemVfdCBfX3Nh
dmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSBfTV9idWY7CiAgICAgICAgICAgIGlmIChfX3Bi
YWNrX2xlbiA+IF9fc2F2ZV9sZW4pCiAgICAgICAgICAgICAgX19vZmZfZW5kID0gX19wYmFja19s
ZW4gLSBfX3NhdmVfbGVuOwoKICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX3BiYWNr
X2N1cl9zYXZlICsgX19vZmZfY3VyLAogICAgICAgICAgICAgICAgICAgICAgIF9NX3BiYWNrX2Vu
ZF9zYXZlICsgX19vZmZfZW5kKTsKICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfX251
bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX19udWxsOwogICAgICAgICAgICBf
TV9wYmFja19pbml0ID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgIH0KCgoKICAgICAgdm9pZAog
ICAgICBfTV9pbl9jdXJfbW92ZShvZmZfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBib29sIF9f
dGVzdG91dCA9IF9NX291dF9jdXI7CiAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAgICBp
ZiAoX190ZXN0b3V0ICYmIF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01fb3V0X2N1ciArPSBf
X247CiAgICAgIH0KIyAyMDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMwogICAg
ICB2b2lkCiAgICAgIF9NX291dF9jdXJfbW92ZShvZmZfdHlwZSBfX24pCiAgICAgIHsKICAgICAg
ICBib29sIF9fdGVzdGluID0gX01faW5fY3VyOwoKICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsK
ICAgICAgICBpZiAoX190ZXN0aW4gJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9pbl9j
dXIgKz0gX19uOwogICAgICAgIGlmIChfTV9vdXRfY3VyID4gX01fb3V0X2VuZCkKICAgICAgICAg
IHsKICAgICAgICAgICAgX01fb3V0X2VuZCA9IF9NX291dF9jdXI7CgogICAgICAgICAgICBpZiAo
X190ZXN0aW4pCiAgICAgICAgICAgICAgX01faW5fZW5kICs9IF9fbjsKICAgICAgICAgIH0KICAg
ICAgfQoKCgoKICAgICAgb2ZmX3R5cGUKICAgICAgX01fb3V0X2J1Zl9zaXplKCkKICAgICAgewog
ICAgICAgIG9mZl90eXBlIF9fcmV0ID0gMDsKICAgICAgICBpZiAoX01fb3V0X2N1cikKICAgICAg
ICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9vdXRfYmVnID09IF9NX2J1ZikKICAgICAgICAgICAg
ICBfX3JldCA9IF9NX291dF9iZWcgKyBfTV9idWZfc2l6ZSAtIF9NX291dF9jdXI7CgogICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfZW5kIC0gX01fb3V0X2N1cjsK
ICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgcHVibGljOgogICAg
ICB2aXJ0dWFsCiAgICAgIH5iYXNpY19zdHJlYW1idWYoKQogICAgICB7CiAgICAgICAgX01fYnVm
X3VuaWZpZWQgPSBmYWxzZTsKICAgICAgICBfTV9idWZfc2l6ZSA9IDA7CiAgICAgICAgX01fYnVm
X3NpemVfb3B0ID0gMDsKICAgICAgICBfTV9tb2RlID0gaW9zX2Jhc2U6Om9wZW5tb2RlKDApOwog
ICAgICB9CgoKICAgICAgbG9jYWxlCiAgICAgIHB1YmltYnVlKGNvbnN0IGxvY2FsZSAmX19sb2Mp
CiAgICAgIHsKICAgICAgICBsb2NhbGUgX190bXAodGhpcy0+Z2V0bG9jKCkpOwogICAgICAgIHRo
aXMtPmltYnVlKF9fbG9jKTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIGxv
Y2FsZQogICAgICBnZXRsb2MoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9idWZfbG9jYWxlOyB9
CgoKICAgICAgX19zdHJlYW1idWZfdHlwZSoKICAgICAgcHVic2V0YnVmKGNoYXJfdHlwZSogX19z
LCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+c2V0YnVmKF9fcywgX19uKTsg
fQoKICAgICAgcG9zX3R5cGUKICAgICAgcHVic2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jh
c2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9f
bW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMt
PnNlZWtvZmYoX19vZmYsIF9fd2F5LCBfX21vZGUpOyB9CgogICAgICBwb3NfdHlwZQogICAgICBw
dWJzZWVrcG9zKHBvc190eXBlIF9fc3AsCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5t
b2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJu
IHRoaXMtPnNlZWtwb3MoX19zcCwgX19tb2RlKTsgfQoKICAgICAgaW50CiAgICAgIHB1YnN5bmMo
KSB7IHJldHVybiB0aGlzLT5zeW5jKCk7IH0KCgoKICAgICAgc3RyZWFtc2l6ZQogICAgICBpbl9h
dmFpbCgpCiAgICAgIHsKICAgICAgICBzdHJlYW1zaXplIF9fcmV0OwogICAgICAgIGlmIChfTV9p
bl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgewogICAgICAgICAgICBp
ZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzaXplX3Qg
X19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fcGJhY2tfY3VyX3NhdmU7CiAgICAg
ICAgICAgICAgICBzaXplX3QgX19wYmFja19sZW4gPSBfTV9pbl9jdXIgLSBfTV9wYmFjazsKICAg
ICAgICAgICAgICAgIF9fcmV0ID0gX19zYXZlX2xlbiAtIF9fcGJhY2tfbGVuOwogICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0gdGhpcy0+ZWdwdHIo
KSAtIHRoaXMtPmdwdHIoKTsKICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3Jl
dCA9IHRoaXMtPnNob3dtYW55YygpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAg
ICAgaW50X3R5cGUKICAgICAgc25leHRjKCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9m
ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIHJldHVybiAodHJhaXRzX3R5cGU6OmVxX2lu
dF90eXBlKHRoaXMtPnNidW1wYygpLCBfX2VvZikKICAgICAgICAgICAgICAgID8gX19lb2YgOiB0
aGlzLT5zZ2V0YygpKTsKICAgICAgfQoKICAgICAgaW50X3R5cGUKICAgICAgc2J1bXBjKCk7Cgog
ICAgICBpbnRfdHlwZQogICAgICBzZ2V0YygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3Jl
dDsKICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAg
ICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCoodGhpcy0+Z3B0cigpKSk7CiAg
ICAgICAgZWxzZQogICAgICAgICAgX19yZXQgPSB0aGlzLT51bmRlcmZsb3coKTsKICAgICAgICBy
ZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHN0cmVhbXNpemUKICAgICAgc2dldG4oY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54c2dldG4oX19z
LCBfX24pOyB9CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2Mp
OwoKICAgICAgaW50X3R5cGUKICAgICAgc3VuZ2V0YygpOwoKCiAgICAgIGludF90eXBlCiAgICAg
IHNwdXRjKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICBzcHV0bihjb25z
dCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhz
cHV0bihfX3MsIF9fbik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zigp
CiAgICAgIDogX01fYnVmKF9fbnVsbCksIF9NX2J1Zl9zaXplKDApLCBfTV9idWZfc2l6ZV9vcHQo
ODE5MiksCiAgICAgIF9NX2J1Zl91bmlmaWVkKGZhbHNlKSwgX01faW5fYmVnKDApLCBfTV9pbl9j
dXIoMCksIF9NX2luX2VuZCgwKSwKICAgICAgX01fb3V0X2JlZygwKSwgX01fb3V0X2N1cigwKSwg
X01fb3V0X2VuZCgwKSwKICAgICAgX01fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUoMCkpLCBfTV9i
dWZfbG9jYWxlKGxvY2FsZSgpKSwKICAgICAgX01fcGJhY2tfY3VyX3NhdmUoMCksIF9NX3BiYWNr
X2VuZF9zYXZlKDApLAogICAgICBfTV9wYmFja19pbml0KGZhbHNlKQogICAgICB7IH0KCgogICAg
ICBjaGFyX3R5cGUqCiAgICAgIGViYWNrKCkgY29uc3QgeyByZXR1cm4gX01faW5fYmVnOyB9Cgog
ICAgICBjaGFyX3R5cGUqCiAgICAgIGdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9jdXI7IH0K
CiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9lbmQ7
IH0KCiAgICAgIHZvaWQKICAgICAgZ2J1bXAoaW50IF9fbikgeyBfTV9pbl9jdXIgKz0gX19uOyB9
CgogICAgICB2b2lkCiAgICAgIHNldGcoY2hhcl90eXBlKiBfX2diZWcsIGNoYXJfdHlwZSogX19n
bmV4dCwgY2hhcl90eXBlKiBfX2dlbmQpCiAgICAgIHsKICAgICAgICBfTV9pbl9iZWcgPSBfX2di
ZWc7CiAgICAgICAgX01faW5fY3VyID0gX19nbmV4dDsKICAgICAgICBfTV9pbl9lbmQgPSBfX2dl
bmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlvc19iYXNlOjppbikgJiYgX19nYmVnICYmIF9f
Z25leHQgJiYgX19nZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6
aW47CiAgICAgIH0KCgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBiYXNlKCkgY29uc3QgeyByZXR1
cm4gX01fb3V0X2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBwcHRyKCkgY29uc3QgeyBy
ZXR1cm4gX01fb3V0X2N1cjsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBlcHB0cigpIGNvbnN0
IHsgcmV0dXJuIF9NX291dF9lbmQ7IH0KCiAgICAgIHZvaWQKICAgICAgcGJ1bXAoaW50IF9fbikg
eyBfTV9vdXRfY3VyICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAgICBzZXRwKGNoYXJfdHlwZSog
X19wYmVnLCBjaGFyX3R5cGUqIF9fcGVuZCkKICAgICAgewogICAgICAgIF9NX291dF9iZWcgPSBf
TV9vdXRfY3VyID0gX19wYmVnOwogICAgICAgIF9NX291dF9lbmQgPSBfX3BlbmQ7CiAgICAgICAg
aWYgKCEoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpICYmIF9fcGJlZyAmJiBfX3BlbmQpCiAgICAg
ICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjpvdXQ7CiAgICAgIH0KCgoKICAgICAg
dmlydHVhbCB2b2lkCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICAgIHsKICAg
ICAgICBpZiAoX01fYnVmX2xvY2FsZSAhPSBfX2xvYykKICAgICAgICAgIF9NX2J1Zl9sb2NhbGUg
PSBfX2xvYzsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlw
ZSxfVHJhaXRzPioKICAgICAgc2V0YnVmKGNoYXJfdHlwZSosIHN0cmVhbXNpemUpCiAgICAgIHsg
cmV0dXJuIHRoaXM7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla29mZihvZmZf
dHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2Rl
ID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUo
b2ZmX3R5cGUoLTEpKTsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrcG9zKHBv
c190eXBlLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8
IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0K
CiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHN5bmMoKSB7IHJldHVybiAwOyB9CgoKICAgICAgdmly
dHVhbCBzdHJlYW1zaXplCiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0KCiAgICAgIHZp
cnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg
X19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCkKICAgICAgeyBy
ZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAg
IHVmbG93KCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVv
ZigpOwogICAgICAgIGJvb2wgX190ZXN0ZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKHRo
aXMtPnVuZGVyZmxvdygpLCBfX3JldCk7CiAgICAgICAgYm9vbCBfX3Rlc3RwZW5kaW5nID0gX01f
aW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZDsKICAgICAgICBpZiAoIV9fdGVzdGVvZiAm
JiBfX3Rlc3RwZW5kaW5nKQogICAgICAgICAgewogICAgICAgICAgICBfX3JldCA9IHRyYWl0c190
eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICAgICAgKytfTV9pbl9jdXI7CiAg
ICAgICAgICAgIGlmIChfTV9idWZfdW5pZmllZCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkK
ICAgICAgICAgICAgICArK19NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9f
cmV0OwogICAgICB9CgoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBwYmFja2ZhaWwoaW50
X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjpl
b2YoKTsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c3B1dG4oY29uc3QgY2hh
cl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAg
ICAgb3ZlcmZsb3coaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJu
IHRyYWl0c190eXBlOjplb2YoKTsgfQojIDQ3OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyZWFt
YnVmIiAzCiAgICBwcml2YXRlOgogICAgICBiYXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1i
dWZfdHlwZSYpIHsgfTsKCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUmCiAgICAgIG9wZXJhdG9yPShj
b25zdCBfX3N0cmVhbWJ1Zl90eXBlJikgeyByZXR1cm4gKnRoaXM7IH07CgogICAgfTsKfQoKCgoK
CiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJlYW1idWYudGNjIiAxIDMKIyAzOSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJlYW1idWYudGNjIiAzCgpuYW1lc3BhY2Ugc3Rk
CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjb25z
dCBzaXplX3QKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYmFja19z
aXplOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0
eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNidW1wYygpCiAgICB7CiAgICAg
IGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2lu
X2VuZCkKICAgICAgICB7CiAgICAgICAgICBjaGFyX3R5cGUgX19jID0gKih0aGlzLT5ncHRyKCkp
OwogICAgICAgICAgX01faW5fY3VyX21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190
eXBlOjp0b19pbnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0
ID0gdGhpcy0+dWZsb3coKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKQogICAgewogICAgICBp
bnRfdHlwZSBfX3JldDsKICAgICAgYm9vbCBfX3Rlc3Rwb3MgPSBfTV9pbl9jdXIgJiYgX01faW5f
YmVnIDwgX01faW5fY3VyOwogICAgICBpZiAoIV9fdGVzdHBvcyB8fCAhdHJhaXRzX3R5cGU6OmVx
KF9fYywgdGhpcy0+Z3B0cigpWy0xXSkpCiAgICAgICAgX19yZXQgPSB0aGlzLT5wYmFja2ZhaWwo
dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICBlbHNlCiAgICAgICAgewogICAg
ICAgICAgX01faW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6
dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3VuZ2V0YygpCiAgICB7CiAg
ICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9N
X2luX2N1cikKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAg
ICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICB9
CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnBiYWNrZmFpbCgpOwogICAgICByZXR1
cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46
OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0
YyhjaGFyX3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9N
X291dF9idWZfc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgICpfTV9vdXRfY3VyID0gX19jOwog
ICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlw
ZTo6dG9faW50X3R5cGUoX19jKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9
IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgcmV0
dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAg
ICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAg
IHsKICAgICAgICAgIHNpemVfdCBfX2J1Zl9sZW4gPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAg
ICAgICAgICBpZiAoX19idWZfbGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNp
emVfdCBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIHNpemVfdCBfX2xl
biA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlw
ZTo6Y29weShfX3MsIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9f
bGVuOwogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAgICAgICBfTV9pbl9jdXJf
bW92ZShfX2xlbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOwog
ICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5
cGU6OmVvZigpKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5
cGU6OmFzc2lnbigqX19zKyssIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAg
ICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiBfX3JldDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPjo6CiAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u
KQogICAgewogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwg
X19uKQogICAgICAgIHsKICAgICAgICAgIG9mZl90eXBlIF9fYnVmX2xlbiA9IF9NX291dF9idWZf
c2l6ZSgpOwogICAgICAgICAgaWYgKF9fYnVmX2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBvZmZfdHlwZSBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAg
IG9mZl90eXBlIF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19yZW1haW5pbmcpOwogICAgICAgICAg
ICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX291dF9jdXIsIF9fcywgX19sZW4pOwogICAgICAgICAg
ICAgIF9fcmV0ICs9IF9fbGVuOwogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAg
ICAgICBfTV9vdXRfY3VyX21vdmUoX19sZW4pOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYg
KF9fcmV0IDwgX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0g
dGhpcy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfX3MpKTsKICAgICAgICAg
ICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2Yo
KSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAg
ICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g
X19yZXQ7CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0No
YXJULCBfVHJhaXRzPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpCiAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwoKICAgICAgc3RyZWFtc2l6ZSBfX3Jl
dCA9IDA7CiAgICAgIHN0cmVhbXNpemUgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwog
ICAgICBzdHJlYW1zaXplIF9feHRyY3Q7CiAgICAgIGJvb2wgX190ZXN0cHV0ID0gX19zYm91dC0+
X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIHdo
aWxlIChfX3Rlc3RwdXQgJiYgX19idWZzaXplICE9IC0xKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgaWYgKF9fYnVmc2l6ZSAhPSAwICYmIF9fc2Jpbi0+Z3B0cigpICE9IF9fbnVsbAogICAg
ICAgICAgICAgICAgICAmJiBfX3NiaW4tPmdwdHIoKSArIF9fYnVmc2l6ZSA8PSBfX3NiaW4tPmVn
cHRyKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9feHRyY3QgPSBfX3Ni
b3V0LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXplKTsKICAgICAgICAgICAgICAgICAg
X19yZXQgKz0gX194dHJjdDsKICAgICAgICAgICAgICAgICAgX19zYmluLT5fTV9pbl9jdXJfbW92
ZShfX3h0cmN0KTsKICAgICAgICAgICAgICAgICAgaWYgKF9feHRyY3QgIT0gX19idWZzaXplKQog
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSA9
CiAgICAgICAgICAgICAgICAgICAgX19zYmluLT5fTV9idWZfc2l6ZV9vcHQgPiAwID8gX19zYmlu
LT5fTV9idWZfc2l6ZV9vcHQgOiAxOwogICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fYnVmID0K
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2Nh
KHNpemVvZihfQ2hhclQpICogX19zaXplKSk7CiAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUg
X19jaGFyc3JlYWQgPSBfX3NiaW4tPnNnZXRuKF9fYnVmLCBfX3NpemUpOwogICAgICAgICAgICAg
ICAgICBfX3h0cmN0ID0gX19zYm91dC0+c3B1dG4oX19idWYsIF9fY2hhcnNyZWFkKTsKICAgICAg
ICAgICAgICAgICAgX19yZXQgKz0gX194dHJjdDsKICAgICAgICAgICAgICAgICAgaWYgKF9feHRy
Y3QgIT0gX19jaGFyc3JlYWQpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fc2Jpbi0+c2dl
dGMoKSwgX1RyYWl0czo6ZW9mKCkpKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICB7CiAgICAgICAgICBfX2lv
cy5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICBpZiAoKF9faW9zLmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpmYWlsYml0KSAhPSAwKQogICAgICAgICAgICB0aHJvdzsKICAg
ICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUKICAgIHN0cmVhbXNp
emUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxjaGFyPiYsIGJhc2ljX3N0cmVhbWJ1
ZjxjaGFyPiosCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8Y2hhcj4qKTsK
CgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD47CiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19p
b3M8d2NoYXJfdD4mLCBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4qLAogICAgICAgICAgICAgICAg
ICAgICAgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+Kik7Cgp9CiMgNDkyICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9zdHJlYW1idWYiIDIgMwojIDUxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3MiIDIg
MwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLmgiIDEgMwojIDM5ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAzCgojIDEgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDEgMwojIDQyICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3Mg
aXN0cmVhbWJ1Zl9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3Jf
dGFnLCBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlLAogICAgICAgICAgICAgICAg
ICAgICAgX0NoYXJUKiwgX0NoYXJUJj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBl
ZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogICAg
ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7Cgog
ICAgcHJpdmF0ZToKCgoKCgoKCiAgICAgIG11dGFibGUgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7
CiAgICAgIGludF90eXBlIF9NX2M7CgogICAgcHVibGljOgogICAgICBpc3RyZWFtYnVmX2l0ZXJh
dG9yKCkgdGhyb3coKQogICAgICA6IF9NX3NidWYoMCksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigp
KSB7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93
KCkKICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkp
IHsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJv
dygpCiAgICAgIDogX01fc2J1ZihfX3MpLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgoK
ICAgICAgY2hhcl90eXBlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRy
YWl0c190eXBlOjp0b19jaGFyX3R5cGUoX01fZ2V0KCkpOyB9CgogICAgICBpc3RyZWFtYnVmX2l0
ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBl
IF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGlmIChfTV9zYnVmICYmIHRyYWl0
c190eXBlOjplcV9pbnRfdHlwZShfTV9zYnVmLT5zYnVtcGMoKSwgX19lb2YpKQogICAgICAgICAg
X01fc2J1ZiA9IDA7CiAgICAgICAgZWxzZQogICAgICAgICAgX01fYyA9IF9fZW9mOwogICAgICAg
IHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcgogICAgICBv
cGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJh
aXRzX3R5cGU6OmVvZigpOwogICAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IgX19vbGQgPSAqdGhp
czsKICAgICAgICBpZiAoX01fc2J1ZgogICAgICAgICAgICAmJiB0cmFpdHNfdHlwZTo6ZXFfaW50
X3R5cGUoKF9fb2xkLl9NX2MgPSBfTV9zYnVmLT5zYnVtcGMoKSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2VvZikpCiAgICAgICAgICBfTV9zYnVmID0gMDsKICAg
ICAgICBlbHNlCiAgICAgICAgICBfTV9jID0gX19lb2Y7CiAgICAgICAgcmV0dXJuIF9fb2xkOwog
ICAgICB9CgoKCgogICAgICBib29sCiAgICAgIGVxdWFsKGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0
b3ImIF9fYikgY29uc3QKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJh
aXRzX3R5cGU6OmVvZigpOwogICAgICAgIGJvb2wgX190aGlzZW9mID0gdHJhaXRzX3R5cGU6OmVx
X2ludF90eXBlKF9NX2dldCgpLCBfX2VvZik7CiAgICAgICAgYm9vbCBfX2Jlb2YgPSB0cmFpdHNf
dHlwZTo6ZXFfaW50X3R5cGUoX19iLl9NX2dldCgpLCBfX2VvZik7CiAgICAgICAgcmV0dXJuIChf
X3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAgfQoK
CiAgICBwcml2YXRlOgogICAgICBpbnRfdHlwZQogICAgICBfTV9nZXQoKSBjb25zdAogICAgICB7
CiAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg
ICAgaW50X3R5cGUgX19yZXQgPSBfX2VvZjsKICAgICAgICBpZiAoX01fc2J1ZikKICAgICAgICAg
IHsKICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fYywgX19lb2Yp
KQogICAgICAgICAgICAgIF9fcmV0ID0gX01fYzsKICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoKF9fcmV0ID0gX01fc2J1Zi0+c2dldGMo
KSksIF9fZW9mKSkKICAgICAgICAgICAgICAgIF9NX3NidWYgPSAwOwogICAgICAgICAgfQogICAg
ICAgIHJldHVybiBfX3JldDsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29u
c3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgICAg
ICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQogICAg
eyByZXR1cm4gX19hLmVxdWFsKF9fYik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0
cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgICAgICAgIGNv
bnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQogICAgeyByZXR1
cm4gIV9fYS5lcXVhbChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0
ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk
ZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVh
bWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBib29sIF9NX2ZhaWxlZDsKCiAgICBwdWJsaWM6CiAg
ICAgIGlubGluZQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zKSB0
aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9NX3NidWYp
IHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJv
dyAoKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAg
IG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsKCiAgICAg
IG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y
KysoaW50KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVm
X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhp
czsgfQoKICAgICAgYm9vbAogICAgICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIF9NX2ZhaWxlZDsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgaW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJh
aXRzPiYKICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I9
KF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAgICBfVHJh
aXRzOjplcV9pbnRfdHlwZShfTV9zYnVmLT5zcHV0YyhfX2MpLCBfVHJhaXRzOjplb2YoKSkpCiAg
ICAgICAgX01fZmFpbGVkID0gdHJ1ZTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQp9CiMgNDEg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwojIDEgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9jKysv
My4yL2N3Y3R5cGUiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAzCgoK
CgojIDEgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS93Y3R5
cGUuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMKIyA0NSAiL3Vzci9p
bmNsdWRlL3djdHlwZS5oIiAzCgoKCiMgNjQgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwoKCgp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHdjdHlwZV90OwoKIyA4NiAiL3Vzci9pbmNsdWRlL3dj
dHlwZS5oIiAzCmVudW0KewogIF9fSVN3dXBwZXIgPSAwLAogIF9fSVN3bG93ZXIgPSAxLAogIF9f
SVN3YWxwaGEgPSAyLAogIF9fSVN3ZGlnaXQgPSAzLAogIF9fSVN3eGRpZ2l0ID0gNCwKICBfX0lT
d3NwYWNlID0gNSwKICBfX0lTd3ByaW50ID0gNiwKICBfX0lTd2dyYXBoID0gNywKICBfX0lTd2Js
YW5rID0gOCwKICBfX0lTd2NudHJsID0gOSwKICBfX0lTd3B1bmN0ID0gMTAsCiAgX19JU3dhbG51
bSA9IDExLAoKICBfSVN3dXBwZXIgPSAoKF9fSVN3dXBwZXIpIDwgOCA/IChpbnQpICgoMVVMIDw8
IChfX0lTd3VwcGVyKSkgPDwgMjQpIDogKChfX0lTd3VwcGVyKSA8IDE2ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3dXBwZXIpKSA8PCA4KSA6ICgoX19JU3d1cHBlcikgPCAyNCA/IChpbnQpICgoMVVM
IDw8IChfX0lTd3VwcGVyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikpID4+
IDI0KSkpKSwKICBfSVN3bG93ZXIgPSAoKF9fSVN3bG93ZXIpIDwgOCA/IChpbnQpICgoMVVMIDw8
IChfX0lTd2xvd2VyKSkgPDwgMjQpIDogKChfX0lTd2xvd2VyKSA8IDE2ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3bG93ZXIpKSA8PCA4KSA6ICgoX19JU3dsb3dlcikgPCAyNCA/IChpbnQpICgoMVVM
IDw8IChfX0lTd2xvd2VyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikpID4+
IDI0KSkpKSwKICBfSVN3YWxwaGEgPSAoKF9fSVN3YWxwaGEpIDwgOCA/IChpbnQpICgoMVVMIDw8
IChfX0lTd2FscGhhKSkgPDwgMjQpIDogKChfX0lTd2FscGhhKSA8IDE2ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3YWxwaGEpKSA8PCA4KSA6ICgoX19JU3dhbHBoYSkgPCAyNCA/IChpbnQpICgoMVVM
IDw8IChfX0lTd2FscGhhKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkpID4+
IDI0KSkpKSwKICBfSVN3ZGlnaXQgPSAoKF9fSVN3ZGlnaXQpIDwgOCA/IChpbnQpICgoMVVMIDw8
IChfX0lTd2RpZ2l0KSkgPDwgMjQpIDogKChfX0lTd2RpZ2l0KSA8IDE2ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3dkaWdpdCkgPCAyNCA/IChpbnQpICgoMVVM
IDw8IChfX0lTd2RpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkpID4+
IDI0KSkpKSwKICBfSVN3eGRpZ2l0ID0gKChfX0lTd3hkaWdpdCkgPCA4ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3eGRpZ2l0KSkgPDwgMjQpIDogKChfX0lTd3hkaWdpdCkgPCAxNiA/IChpbnQpICgo
MVVMIDw8IChfX0lTd3hkaWdpdCkpIDw8IDgpIDogKChfX0lTd3hkaWdpdCkgPCAyNCA/IChpbnQp
ICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3eGRp
Z2l0KSkgPj4gMjQpKSkpLAogIF9JU3dzcGFjZSA9ICgoX19JU3dzcGFjZSkgPCA4ID8gKGludCkg
KCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA8PCAyNCkgOiAoKF9fSVN3c3BhY2UpIDwgMTYgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpIDw8IDgpIDogKChfX0lTd3NwYWNlKSA8IDI0ID8gKGlu
dCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3Nw
YWNlKSkgPj4gMjQpKSkpLAogIF9JU3dwcmludCA9ICgoX19JU3dwcmludCkgPCA4ID8gKGludCkg
KCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA8PCAyNCkgOiAoKF9fSVN3cHJpbnQpIDwgMTYgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3dwcmludCkpIDw8IDgpIDogKChfX0lTd3ByaW50KSA8IDI0ID8gKGlu
dCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3By
aW50KSkgPj4gMjQpKSkpLAogIF9JU3dncmFwaCA9ICgoX19JU3dncmFwaCkgPCA4ID8gKGludCkg
KCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA8PCAyNCkgOiAoKF9fSVN3Z3JhcGgpIDwgMTYgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpIDw8IDgpIDogKChfX0lTd2dyYXBoKSA8IDI0ID8gKGlu
dCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2dy
YXBoKSkgPj4gMjQpKSkpLAogIF9JU3dibGFuayA9ICgoX19JU3dibGFuaykgPCA4ID8gKGludCkg
KCgxVUwgPDwgKF9fSVN3YmxhbmspKSA8PCAyNCkgOiAoKF9fSVN3YmxhbmspIDwgMTYgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3dibGFuaykpIDw8IDgpIDogKChfX0lTd2JsYW5rKSA8IDI0ID8gKGlu
dCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2Js
YW5rKSkgPj4gMjQpKSkpLAogIF9JU3djbnRybCA9ICgoX19JU3djbnRybCkgPCA4ID8gKGludCkg
KCgxVUwgPDwgKF9fSVN3Y250cmwpKSA8PCAyNCkgOiAoKF9fSVN3Y250cmwpIDwgMTYgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3djbnRybCkpIDw8IDgpIDogKChfX0lTd2NudHJsKSA8IDI0ID8gKGlu
dCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2Nu
dHJsKSkgPj4gMjQpKSkpLAogIF9JU3dwdW5jdCA9ICgoX19JU3dwdW5jdCkgPCA4ID8gKGludCkg
KCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA8PCAyNCkgOiAoKF9fSVN3cHVuY3QpIDwgMTYgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpIDw8IDgpIDogKChfX0lTd3B1bmN0KSA8IDI0ID8gKGlu
dCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3B1
bmN0KSkgPj4gMjQpKSkpLAogIF9JU3dhbG51bSA9ICgoX19JU3dhbG51bSkgPCA4ID8gKGludCkg
KCgxVUwgPDwgKF9fSVN3YWxudW0pKSA8PCAyNCkgOiAoKF9fSVN3YWxudW0pIDwgMTYgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpIDw8IDgpIDogKChfX0lTd2FsbnVtKSA8IDI0ID8gKGlu
dCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2Fs
bnVtKSkgPj4gMjQpKSkpCn07CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCmV4dGVybiBpbnQgaXN3
YWxudW0gKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlzd2FscGhhICh3
aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc3djbnRybCAod2ludF90IF9fd2Mp
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2RpZ2l0ICh3aW50X3QgX193YykgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgaXN3Z3JhcGggKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgaXN3bG93ZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd3By
aW50ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3B1bmN0ICh3aW50
X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3NwYWNlICh3aW50X3QgX193Yykg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3VwcGVyICh3aW50X3QgX193YykgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IGlzd3hkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBpbnQgaXN3YmxhbmsgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKIyAxODYgIi91c3IvaW5j
bHVkZS93Y3R5cGUuaCIgMwpleHRlcm4gd2N0eXBlX3Qgd2N0eXBlIChfX2NvbnN0IGNoYXIgKl9f
cHJvcGVydHkpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2N0eXBlICh3aW50X3QgX193Yywg
d2N0eXBlX3QgX19kZXNjKSB0aHJvdyAoKTsKCgoKCgoKCgoKCnR5cGVkZWYgX19jb25zdCBfX2lu
dDMyX3QgKndjdHJhbnNfdDsKCgoKCgoKCmV4dGVybiB3aW50X3QgdG93bG93ZXIgKHdpbnRfdCBf
X3djKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHRvd3VwcGVyICh3aW50X3QgX193YykgdGhy
b3cgKCk7CgoKfQojIDIyOCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmV4dGVybiAiQyIgewoK
CgoKZXh0ZXJuIHdjdHJhbnNfdCB3Y3RyYW5zIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHkpIHRo
cm93ICgpOwoKCmV4dGVybiB3aW50X3QgdG93Y3RyYW5zICh3aW50X3QgX193Yywgd2N0cmFuc190
IF9fZGVzYykgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBpc3dhbG51bV9sICh3aW50X3Qg
X193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBpc3dh
bHBoYV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBpc3djbnRybF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3Qg
X19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2dyYXBoX2wgKHdpbnRfdCBfX3dj
LCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3bG93ZXJf
bCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgaXN3cHJpbnRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBpc3dwdW5jdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xv
Y2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3NwYWNlX2wgKHdpbnRfdCBfX3djLCBf
X2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3dXBwZXJfbCAo
d2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBpc3d4ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBpc3dibGFua19sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xv
Y2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGVfbCAoX19jb25zdCBjaGFy
ICpfX3Byb3BlcnR5LCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IGlzd2N0eXBlX2wgKHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rlc2MsIF9fbG9jYWxl
X3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gd2ludF90IHRvd2xvd2Vy
X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4g
d2ludF90IHRvd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHdjdHJhbnNfdCB3Y3RyYW5zX2wgKF9fY29uc3QgY2hhciAqX19wcm9w
ZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2FsZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90
IHRvd2N0cmFuc19sICh3aW50X3QgX193Yywgd2N0cmFuc190IF9fZGVzYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCn0KIyA1MyAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djdHlwZSIgMiAzCiMgNzcgIi91c3IvaW5jbHVkZS9jKysv
My4yL2N3Y3R5cGUiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVzaW5n
IDo6d2N0eXBlX3Q7CiAgdXNpbmcgOjp3Y3RyYW5zX3Q7CgogIHVzaW5nIDo6aXN3YWxudW07CiAg
dXNpbmcgOjppc3dhbHBoYTsKICB1c2luZyA6Omlzd2JsYW5rOwogIHVzaW5nIDo6aXN3Y250cmw7
CiAgdXNpbmcgOjppc3dkaWdpdDsKICB1c2luZyA6Omlzd2dyYXBoOwogIHVzaW5nIDo6aXN3bG93
ZXI7CiAgdXNpbmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3ByaW50OwogIHVzaW5nIDo6aXN3
cHVuY3Q7CiAgdXNpbmcgOjppc3dzcGFjZTsKICB1c2luZyA6Omlzd3VwcGVyOwogIHVzaW5nIDo6
aXN3eGRpZ2l0OwogIHVzaW5nIDo6aXN3Y3R5cGU7CiAgdXNpbmcgOjp0b3dsb3dlcjsKICB1c2lu
ZyA6OnRvd3VwcGVyOwogIHVzaW5nIDo6dG93Y3RyYW5zOwogIHVzaW5nIDo6d2N0cmFuczsKICB1
c2luZyA6OndjdHlwZTsKfQojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9m
YWNldHMuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAxIDMKIyA0OCAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKbmFtZXNwYWNlIHN0
ZAp7CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIHN0cnVjdCBfX3BhZDsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4
L2JpdHMvY3R5cGVfYmFzZS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1s
aW51eC9iaXRzL2N0eXBlX2Jhc2UuaCIgMwogIHN0cnVjdCBjdHlwZV9iYXNlCiAgewoKICAgIHR5
cGVkZWYgY29uc3QgaW50KiBfX3RvX3R5cGU7CgoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IG1hc2s7CiAgICBzdGF0aWMgY29uc3QgbWFzayB1cHBlciA9IF9JU3VwcGVyOwogICAgc3RhdGlj
IGNvbnN0IG1hc2sgbG93ZXIgPSBfSVNsb3dlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFscGhh
ID0gX0lTYWxwaGE7CiAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdpdCA9IF9JU2RpZ2l0OwogICAg
c3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gX0lTeGRpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1h
c2sgc3BhY2UgPSBfSVNzcGFjZTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHByaW50ID0gX0lTcHJp
bnQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCA9IF9JU2dyYXBoOwogICAgc3RhdGljIGNv
bnN0IG1hc2sgY250cmwgPSBfSVNjbnRybDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHB1bmN0ID0g
X0lTcHVuY3Q7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbG51bSA9IF9JU2FsbnVtOwogIH07CiMg
NjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fY3R5cGVfYWJzdHJhY3RfYmFzZSA6
IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY3R5cGVfYmFzZQogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgYm9vbAogICAgICBpcyht
YXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faXMo
X19tLCBfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGlzKGNvbnN0IGNoYXJf
dHlwZSAqX19sbywgY29uc3QgY2hhcl90eXBlICpfX2hpLCBtYXNrICpfX3ZlYykgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9faXMoX19sbywgX19oaSwgX192ZWMpOyB9CgogICAgICBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19z
Y2FuX2lzKF9fbSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAg
c2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBl
KiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX25vdChfX20sIF9fbG8s
IF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdG91cHBlcihjaGFyX3R5cGUgX19jKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fYyk7IH0KCiAgICAgIGNvbnN0
IGNoYXJfdHlwZSoKICAgICAgdG91cHBlcihjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2xvLCBfX2hp
KTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFy
X3R5cGUqCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f
aGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19sbywgX19oaSk7IH0K
CiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fd2lkZW4oX19jKTsgfQoKICAgICAgY29uc3QgY2hhcioKICAgICAgd2lkZW4o
Y29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX3RvKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2xvLCBfX2hpLCBfX3RvKTsgfQoKICAg
ICAgY2hhcgogICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fYywgX19kZmF1bHQpOyB9CgogICAgICBj
b25zdCBjaGFyX3R5cGUqCiAgICAgIG5hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0
IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyICpfX3Rv
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19sbywgX19oaSwgX19kZmF1
bHQsIF9fdG8pOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2N0eXBl
X2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykg
eyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2N0eXBlX2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAg
ICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29u
c3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0
IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICBtYXNr
KiBfX3ZlYykgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAg
IGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29u
c3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBl
KiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0g
MDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBj
b25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBl
cihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAg
ICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0ID0g
MDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJf
dHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0
dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyKSBjb25zdCA9IDA7CgogICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNo
YXIqIF9faGksCiAgICAgICAgICAgICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdCA9IDA7Cgog
ICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVs
dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25h
cnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAg
ICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0ID0gMDsKICAgIH07
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZSA6IHB1YmxpYyBf
X2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlw
ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGN0eXBlOjptYXNr
IG1hc2s7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg
IGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKSA6IF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+
KF9fcmVmcykgeyB9CgogICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7
CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2Mp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0
IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNr
IF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sg
X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJf
dHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3Vw
cGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq
CiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5
cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190
b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywg
Y29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFy
X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAgIGNoYXIg
X19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGN0eXBlPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8
PgogICAgY2xhc3MgY3R5cGU8Y2hhcj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPGNo
YXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwoKICAg
IHByb3RlY3RlZDoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CiAgICAgIGJv
b2wgX01fZGVsOwogICAgICBfX3RvX3R5cGUgX01fdG91cHBlcjsKICAgICAgX190b190eXBlIF9N
X3RvbG93ZXI7CiAgICAgIGNvbnN0IG1hc2sqIF9NX3RhYmxlOwoKICAgIHB1YmxpYzoKICAgICAg
c3RhdGljIGxvY2FsZTo6aWQgaWQ7CiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgdGFibGVfc2l6
ZSA9IDEgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigtMSk7CgogICAgICBleHBsaWNpdAog
ICAgICBjdHlwZShjb25zdCBtYXNrKiBfX3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNlLCBz
aXplX3QgX19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxl
IF9fY2xvYywgY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwKICAg
ICAgICAgICAgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgaW5saW5lIGJvb2wKICAgICAgaXMo
bWFzayBfX20sIGNoYXIgX19jKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAg
ICBpcyhjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29u
c3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwgY29u
c3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgICBpbmxpbmUgY29u
c3QgY2hhcioKICAgICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0
IGNoYXIqIF9faGkpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKICAgICAgY29uc3QgbWFzayoKICAg
ICAgdGFibGUoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX3RhYmxlOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgbWFzayoKICAgICAgY2xhc3NpY190YWJsZSgpIHRocm93KCk7CgogICAg
ICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lz
KG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29u
c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBj
b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg
ICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy
X3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq
IF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hh
cikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0
IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZh
dWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJy
b3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAg
ICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsKCiAgdGVt
cGxhdGU8PgogICAgY29uc3QgY3R5cGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y3R5cGU8Y2hhcj4g
Pihjb25zdCBsb2NhbGUmIF9fbG9jKTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlwZTx3
Y2hhcl90PiA6IHB1YmxpYyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8d2NoYXJfdD4KICAgIHsKICAg
IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgd2NoYXJfdCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg
d2N0eXBlX3QgX193bWFza190eXBlOwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBf
TV9jX2xvY2FsZV9jdHlwZTsKCiAgICBwdWJsaWM6CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBp
ZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAg
IGV4cGxpY2l0CiAgICAgIGN0eXBlKF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0g
MCk7CgogICAgcHJvdGVjdGVkOgogICAgICBfX3dtYXNrX3R5cGUKICAgICAgX01fY29udmVydF90
b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlw
ZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUg
X19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhj
b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMo
bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdCht
YXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f
dG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq
CiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5
cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93
ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNo
YXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgog
ICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBf
X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0
LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwoKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0
eXBlPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxl
JiBfX2xvYyk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2N0
eXBlX2lubGluZS5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9i
aXRzL2N0eXBlX2lubGluZS5oIiAzCiAgYm9vbAogIGN0eXBlPGNoYXI+OjoKICBpcyhtYXNrIF9f
bSwgY2hhciBfX2MpIGNvbnN0CiAgeyByZXR1cm4gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4oX19jKV0gJiBfX207IH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAg
aXMoY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCwgbWFzayogX192ZWMpIGNv
bnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQogICAgICAqX192ZWMrKyA9IF9NX3Rh
YmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdysrKV07CiAgICByZXR1cm4gX19o
aWdoOwogIH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9pcyhtYXNrIF9f
bSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3
aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAgICAgICAgICAmJiAhKF9NX3RhYmxlW3N0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KCpfX2xvdyldICYgX19tKSkKICAgICAgKytfX2xvdzsKICAgIHJldHVy
biBfX2xvdzsKICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5fbm90KG1h
c2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAogIHsK
ICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaAogICAgICAgICAgICYmIChfTV90YWJsZVtzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXSAmIF9fbSkgIT0gMCkKICAgICAgKytfX2xvdzsK
ICAgIHJldHVybiBfX2xvdzsKICB9CiMgNDAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv
Y2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz
cyBjdHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJUPgogICAgewogICAgcHVibGljOgog
ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBjdHlw
ZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVj
dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZV9ieW5hbWUoKSB7IH07CiAgICB9OwoKCiAg
dGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hh
ciosIHNpemVfdCByZWZzKTsKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1lPHdjaGFyX3Q+
OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsKCgojIDEgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvY29kZWN2dC5oIiAxIDMKIyA0NSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9jb2RlY3Z0LmgiIDMKCgogIGNsYXNzIGNvZGVjdnRfYmFzZQogIHsKICBwdWJsaWM6
CiAgICBlbnVtIHJlc3VsdAogICAgewogICAgICBvaywKICAgICAgcGFydGlhbCwKICAgICAgZXJy
b3IsCiAgICAgIG5vY29udgogICAgfTsKICB9OwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgX19j
b2RlY3Z0X2Fic3RyYWN0X2Jhc2UKICAgIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBj
b2RlY3Z0X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNl
OjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAg
ICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3Rh
dGVfdHlwZTsKCgogICAgICByZXN1bHQKICAgICAgb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNv
bnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19m
cm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgIGV4dGVy
bl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICBleHRlcm5fdHlw
ZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5kb19vdXQo
X19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICBy
ZXN1bHQKICAgICAgdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190
bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190
b19uZXh0KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb191bnNoaWZ0KF9fc3RhdGUsIF9f
dG8sX190b19lbmQsX190b19uZXh0KTsgfQoKICAgICAgcmVzdWx0CiAgICAgIGluKHN0YXRlX3R5
cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgIGNvbnN0IGV4
dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAog
ICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAg
ICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVybiB0
aGlzLT5kb19pbihfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAgICAg
fQoKICAgICAgaW50CiAgICAgIGVuY29kaW5nKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVy
biB0aGlzLT5kb19lbmNvZGluZygpOyB9CgogICAgICBib29sCiAgICAgIGFsd2F5c19ub2NvbnYo
KSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Fsd2F5c19ub2NvbnYoKTsg
fQoKICAgICAgaW50CiAgICAgIGxlbmd0aChjb25zdCBzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z
dCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9f
ZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2xlbmd0aChf
X3N0YXRlLCBfX2Zyb20sIF9fZW5kLCBfX21heCk7IH0KCiAgICAgIGludAogICAgICBtYXhfbGVu
Z3RoKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19tYXhfbGVuZ3RoKCk7
IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9fY29kZWN2dF9hYnN0cmFj
dF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAg
ICAgIHZpcnR1YWwKICAgICAgfl9fY29kZWN2dF9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2
aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50
ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21f
ZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJu
X3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90
eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBk
b191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAg
ICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQp
IGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUm
IF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4
dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAog
ICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAg
ICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVh
bCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1
YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKSA9IDA7CgogICAg
ICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4
dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19l
bmQsIHNpemVfdCBfX21heCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9f
bWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkgPSAwOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBj
bGFzcyBjb2RlY3Z0CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJu
VCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNv
ZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5f
dHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBf
U3RhdGVUIHN0YXRlX3R5cGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBp
ZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAg
IDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPiAo
X19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQo
KSB7IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0
YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJu
X3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAg
ICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAg
ICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1
bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190
bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYg
X190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRl
X3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNv
bnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9u
ZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5k
LAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFs
IGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0
dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90
eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNp
emVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3Ro
KCkgY29uc3QgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0
eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGxvY2FsZTo6aWQgY29kZWN2
dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNs
YXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PgogICAgOiBwdWJsaWMgX19jb2RlY3Z0
X2Fic3RyYWN0X2Jhc2U8Y2hhciwgY2hhciwgbWJzdGF0ZV90PgogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBjaGFyIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJu
X3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgcHVibGljOgog
ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQo
c2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+
Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUm
IF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBp
bnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwK
ICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAg
ICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFs
IHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBl
KiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5
cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4o
c3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAg
ICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19m
cm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190
b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZp
cnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAg
IHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0
ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Vu
ZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9s
ZW5ndGgoKSBjb25zdCB0aHJvdygpOwogIH07CgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY29k
ZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJz
dHJhY3RfYmFzZTx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAgICB7CiAgICBwdWJsaWM6Cgog
ICAgICB0eXBlZGVmIHdjaGFyX3QgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgY2hhciBleHRl
cm5fdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICBwdWJsaWM6
CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2
dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg
IH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlw
ZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0
IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0
LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwK
ICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwKICAgICAgICAg
ICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAg
ICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
cmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAgICAgICAgICBjb25z
dCBleHRlcm5fdHlwZSogX19mcm9tLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwKICAg
ICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBp
bnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgaW50
ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICBpbnQgZG9f
ZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICBib29sIGRvX2Fs
d2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICBpbnQgZG9f
bGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJv
dygpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4
dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZSA6IHB1Ymxp
YyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoK
ICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBf
X3JlZnMgPSAwKQogICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPihf
X3JlZnMpIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dF9i
eW5hbWUoKSB7IH0KICAgIH07CgoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGlu
dXgvYml0cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oIiAxIDMKIyA0NiAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2NvZGVjdnRfc3BlY2lhbGl6YXRpb25zLmgiIDMKICBj
bGFzcyBfX2VuY190cmFpdHMKICB7CiAgcHVibGljOgoKCgogICAgdHlwZWRlZiBpY29udl90IF9f
ZGVzY190eXBlOwoKICBwcm90ZWN0ZWQ6CgoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbWF4X3Np
emUgPSAzMjsKCiAgICBjaGFyIF9NX2ludF9lbmNbX1NfbWF4X3NpemVdOwoKICAgIGNoYXIgX01f
ZXh0X2VuY1tfU19tYXhfc2l6ZV07CgoKICAgIF9fZGVzY190eXBlIF9NX2luX2Rlc2M7CgogICAg
X19kZXNjX3R5cGUgX01fb3V0X2Rlc2M7CgoKICAgIGludCBfTV9leHRfYm9tOwoKCiAgICBpbnQg
X01faW50X2JvbTsKCiAgcHVibGljOgogICAgZXhwbGljaXQgX19lbmNfdHJhaXRzKCkKICAgIDog
X01faW5fZGVzYygwKSwgX01fb3V0X2Rlc2MoMCksIF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20o
MCkKICAgIHsKICAgICAgbWVtc2V0KF9NX2ludF9lbmMsIDAsIF9TX21heF9zaXplKTsKICAgICAg
bWVtc2V0KF9NX2V4dF9lbmMsIDAsIF9TX21heF9zaXplKTsKICAgIH0KCiAgICBleHBsaWNpdCBf
X2VuY190cmFpdHMoY29uc3QgY2hhciogX19pbnQsIGNvbnN0IGNoYXIqIF9fZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBfX2lib20gPSAwLCBpbnQgX19lYm9tID0gMCkKICAgIDog
X01faW5fZGVzYygwKSwgX01fb3V0X2Rlc2MoMCksIF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20o
MCkKICAgIHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX2ludCwgX1NfbWF4X3NpemUpOwog
ICAgICBzdHJuY3B5KF9NX2V4dF9lbmMsIF9fZXh0LCBfU19tYXhfc2l6ZSk7CiAgICB9CgoKCgoK
CiAgICBfX2VuY190cmFpdHMoY29uc3QgX19lbmNfdHJhaXRzJiBfX29iaik6IF9NX2luX2Rlc2Mo
MCksIF9NX291dF9kZXNjKDApCiAgICB7CiAgICAgIHN0cm5jcHkoX01faW50X2VuYywgX19vYmou
X01faW50X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5KF9NX2V4dF9lbmMsIF9fb2Jq
Ll9NX2V4dF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgX01fZXh0X2JvbSA9IF9fb2JqLl9NX2V4
dF9ib207CiAgICAgIF9NX2ludF9ib20gPSBfX29iai5fTV9pbnRfYm9tOwogICAgfQoKCiAgICBf
X2VuY190cmFpdHMmCiAgICBvcGVyYXRvcj0oY29uc3QgX19lbmNfdHJhaXRzJiBfX29iaikKICAg
IHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX29iai5fTV9pbnRfZW5jLCBfU19tYXhfc2l6
ZSk7CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywgX19vYmouX01fZXh0X2VuYywgX1NfbWF4X3Np
emUpOwogICAgICBfTV9pbl9kZXNjID0gMDsKICAgICAgX01fb3V0X2Rlc2MgPSAwOwogICAgICBf
TV9leHRfYm9tID0gX19vYmouX01fZXh0X2JvbTsKICAgICAgX01faW50X2JvbSA9IF9fb2JqLl9N
X2ludF9ib207CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICB+X19lbmNfdHJhaXRzKCkK
ICAgIHsKICAgICAgX19kZXNjX3R5cGUgX19lcnIgPSByZWludGVycHJldF9jYXN0PGljb252X3Q+
KC0xKTsKICAgICAgaWYgKF9NX2luX2Rlc2MgJiYgX01faW5fZGVzYyAhPSBfX2VycikKICAgICAg
ICBpY29udl9jbG9zZShfTV9pbl9kZXNjKTsKICAgICAgaWYgKF9NX291dF9kZXNjICYmIF9NX291
dF9kZXNjICE9IF9fZXJyKQogICAgICAgIGljb252X2Nsb3NlKF9NX291dF9kZXNjKTsKICAgIH0K
CiAgICB2b2lkCiAgICBfTV9pbml0KCkKICAgIHsKICAgICAgY29uc3QgX19kZXNjX3R5cGUgX19l
cnIgPSByZWludGVycHJldF9jYXN0PGljb252X3Q+KC0xKTsKICAgICAgaWYgKCFfTV9pbl9kZXNj
KQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2Rlc2MgPSBpY29udl9vcGVuKF9NX2ludF9lbmMs
IF9NX2V4dF9lbmMpOwogICAgICAgICAgaWYgKF9NX2luX2Rlc2MgPT0gX19lcnIpCiAgICAgICAg
ICAgIF9fdGhyb3dfcnVudGltZV9lcnJvcigiY3JlYXRpbmcgaWNvbnYgaW5wdXQgZGVzY3JpcHRv
ciBmYWlsZWQuIik7CiAgICAgICAgfQogICAgICBpZiAoIV9NX291dF9kZXNjKQogICAgICAgIHsK
ICAgICAgICAgIF9NX291dF9kZXNjID0gaWNvbnZfb3BlbihfTV9leHRfZW5jLCBfTV9pbnRfZW5j
KTsKICAgICAgICAgIGlmIChfTV9vdXRfZGVzYyA9PSBfX2VycikKICAgICAgICAgICAgX190aHJv
d19ydW50aW1lX2Vycm9yKCJjcmVhdGluZyBpY29udiBvdXRwdXQgZGVzY3JpcHRvciBmYWlsZWQu
Iik7CiAgICAgICAgfQogICAgfQoKICAgIGJvb2wKICAgIF9NX2dvb2QoKQogICAgewogICAgICBj
b25zdCBfX2Rlc2NfdHlwZSBfX2VyciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWNvbnZfdD4oLTEpOwog
ICAgICBib29sIF9fdGVzdCA9IF9NX2luX2Rlc2MgJiYgX01faW5fZGVzYyAhPSBfX2VycjsKICAg
ICAgX190ZXN0ICY9IF9NX291dF9kZXNjICYmIF9NX291dF9kZXNjICE9IF9fZXJyOwogICAgICBy
ZXR1cm4gX190ZXN0OwogICAgfQoKICAgIGNvbnN0IF9fZGVzY190eXBlKgogICAgX01fZ2V0X2lu
X2Rlc2NyaXB0b3IoKQogICAgeyByZXR1cm4gJl9NX2luX2Rlc2M7IH0KCiAgICBjb25zdCBfX2Rl
c2NfdHlwZSoKICAgIF9NX2dldF9vdXRfZGVzY3JpcHRvcigpCiAgICB7IHJldHVybiAmX01fb3V0
X2Rlc2M7IH0KCiAgICBpbnQKICAgIF9NX2dldF9leHRlcm5hbF9ib20oKQogICAgeyByZXR1cm4g
X01fZXh0X2JvbTsgfQoKICAgIGludAogICAgX01fZ2V0X2ludGVybmFsX2JvbSgpCiAgICB7IHJl
dHVybiBfTV9pbnRfYm9tOyB9CgogICAgY29uc3QgY2hhcioKICAgIF9NX2dldF9pbnRlcm5hbF9l
bmMoKQogICAgeyByZXR1cm4gX01faW50X2VuYzsgfQoKICAgIGNvbnN0IGNoYXIqCiAgICBfTV9n
ZXRfZXh0ZXJuYWxfZW5jKCkKICAgIHsgcmV0dXJuIF9NX2V4dF9lbmM7IH0KICB9OwoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjbGFzcyBj
b2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPgogICAgOiBwdWJsaWMgX19j
b2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+CiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3Vs
dDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0
ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190cmFpdHMgc3RhdGVfdHlwZTsK
ICAgICAgdHlwZWRlZiBfX2VuY190cmFpdHM6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAg
ICB0eXBlZGVmIF9fZW5jX3RyYWl0cyBfX2VuY190eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6
OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkK
ICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUs
IHN0YXRlX3R5cGU+KF9fcmVmcykKICAgICAgeyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2Rl
Y3Z0KF9fZW5jX3R5cGUqIF9fZW5jLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVj
dnRfYWJzdHJhY3RfYmFzZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRlX3R5cGU+KF9f
cmVmcykKICAgICAgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2Rl
Y3Z0KCkgeyB9CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYg
X19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGlu
dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAog
ICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAg
ICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
cmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUq
IF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlw
ZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihz
dGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg
ICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zy
b21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3Rv
X2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmly
dHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAg
dmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRl
cm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5k
LCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xl
bmd0aCgpIGNvbnN0IHRocm93KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJu
VCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBsb2NhbGU6OmlkCiAgICBjb2RlY3Z0PF9JbnRlcm5U
LCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6aWQ7CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VD4KICAgIGlubGluZSBzaXplX3QKICAgIF9faWNvbnZfYWRhcHRvcihzaXplX3QoKl9fZnVuYyko
aWNvbnZfdCwgX1QsIHNpemVfdCosIGNoYXIqKiwgc2l6ZV90KiksCiAgICAgICAgICAgICAgICAg
ICAgaWNvbnZfdCBfX2NkLCBjaGFyKiogX19pbmJ1Ziwgc2l6ZV90KiBfX2luYnl0ZXMsCiAgICAg
ICAgICAgICAgICAgICAgY2hhcioqIF9fb3V0YnVmLCBzaXplX3QqIF9fb3V0Ynl0ZXMpCiAgICB7
IHJldHVybiBfX2Z1bmMoX19jZCwgKF9UKV9faW5idWYsIF9faW5ieXRlcywgX19vdXRidWYsIF9f
b3V0Ynl0ZXMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0
ZXJuVD4KICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0
ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29u
c3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19m
cm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICBleHRl
cm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgIGV4dGVybl90
eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgewogICAgICByZXN1bHQgX19yZXQgPSBjb2RlY3Z0
X2Jhc2U6OmVycm9yOwogICAgICBpZiAoX19zdGF0ZS5fTV9nb29kKCkpCiAgICAgICAgewogICAg
ICAgICAgdHlwZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAg
ICAgIGNvbnN0IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0YXRlLl9NX2dldF9vdXRfZGVzY3Jp
cHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9mKGludGVy
bl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX2ZieXRlcyA9IF9fZm11bHRpcGxlICogKF9fZnJv
bV9lbmQgLSBfX2Zyb20pOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6
ZW9mKGV4dGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX3RieXRlcyA9IF9fdG11bHRpcGxl
ICogKF9fdG9fZW5kIC0gX190byk7CgoKCiAgICAgICAgICBjaGFyKiBfX2N0byA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOwogICAgICAgICAgY2hhciogX19jZnJvbTsKICAgICAgICAg
IHNpemVfdCBfX2NvbnY7CgoKCgoKCiAgICAgICAgICBpbnQgX19pbnRfYm9tID0gX19zdGF0ZS5f
TV9nZXRfaW50ZXJuYWxfYm9tKCk7CiAgICAgICAgICBpZiAoX19pbnRfYm9tKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSA9IF9fZnJvbV9lbmQgLSBfX2Zyb207CiAg
ICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fY2ZpeGVkID0gc3RhdGljX2Nhc3Q8aW50ZXJuX3R5
cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihpbnRlcm5fdHlwZSkgKiAoX19zaXplICsgMSkp
KTsKICAgICAgICAgICAgICBfX2NmaXhlZFswXSA9IHN0YXRpY19jYXN0PGludGVybl90eXBlPihf
X2ludF9ib20pOwogICAgICAgICAgICAgIGNoYXJfdHJhaXRzPGludGVybl90eXBlPjo6Y29weShf
X2NmaXhlZCArIDEsIF9fZnJvbSwgX19zaXplKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9IF9f
aWNvbnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmX19mYnl0ZXMsICZfX2N0bywgJl9fdGJ5dGVzKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50
ZXJuX3R5cGUqIF9fY2ZpeGVkID0gY29uc3RfY2FzdDxpbnRlcm5fdHlwZSo+KF9fZnJvbSk7CiAg
ICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsK
ICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZf
X2Nmcm9tLCAmX19mYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZfX2N0bywgJl9fdGJ5dGVzKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX2NvbnYg
IT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAg
ICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAg
ICAgICAgICAgICAgX19yZXQgPSBjb2RlY3Z0X2Jhc2U6Om9rOwogICAgICAgICAgICB9CiAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19mYnl0ZXMgPCBfX2Zt
dWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKSkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludGVybl90
eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gY29k
ZWN2dF9iYXNlOjpwYXJ0aWFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgIF9fcmV0ID0gY29kZWN2dF9iYXNlOjplcnJvcjsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAog
ICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9fdW5z
aGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAg
ICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QK
ICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gY29kZWN2dF9iYXNlOjplcnJvcjsKICAgICAgaWYg
KF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlw
ZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSog
X19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5fZGVzY3JpcHRvcigpOwogICAgICAgICAgY29uc3Qg
c2l6ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKTsKICAgICAgICAgIHNpemVf
dCBfX3RsZW4gPSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAg
Y2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKICAgICAgICAgIHNp
emVfdCBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsKl9fZGVzYywgX19udWxsLCBfX251
bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2N0bywgJl9f
dGxlbik7CgogICAgICAgICAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxleHRlcm5fdHlwZSo+
KF9fY3RvKTsKICAgICAgICAgICAgICBpZiAoX190bGVuID09IF9fdG11bHRpcGxlICogKF9fdG9f
ZW5kIC0gX190bykpCiAgICAgICAgICAgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6bm9jb252
OwogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGxlbiA9PSAwKQogICAgICAgICAgICAgICAgX19y
ZXQgPSBjb2RlY3Z0X2Jhc2U6Om9rOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
IF9fcmV0ID0gY29kZWN2dF9iYXNlOjpwYXJ0aWFsOwogICAgICAgICAgICB9CiAgICAgICAgICBl
bHNlCiAgICAgICAgICAgIF9fcmV0ID0gY29kZWN2dF9iYXNlOjplcnJvcjsKICAgICAgICB9CiAg
ICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5
cGVuYW1lIF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0lu
dGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2luKHN0YXRlX3R5cGUmIF9f
c3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICBjb25zdCBleHRlcm5f
dHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAg
ICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICBp
bnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0g
Y29kZWN2dF9iYXNlOjplcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAg
IHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7
CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5f
ZGVzY3JpcHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9m
KGV4dGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX2ZsZW4gPSBfX2ZtdWx0aXBsZSAqIChf
X2Zyb21fZW5kIC0gX19mcm9tKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9
IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlw
bGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAgICBjaGFyKiBfX2Nmcm9tOwogICAgICAg
ICAgc2l6ZV90IF9fY29udjsKCgoKCgoKICAgICAgICAgIGludCBfX2V4dF9ib20gPSBfX3N0YXRl
Ll9NX2dldF9leHRlcm5hbF9ib20oKTsKICAgICAgICAgIGlmIChfX2V4dF9ib20pCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19zaXplID0gX19mcm9tX2VuZCAtIF9fZnJvbTsK
ICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX19jZml4ZWQgPSBzdGF0aWNfY2FzdDxleHRlcm5f
dHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGV4dGVybl90eXBlKSAqIChfX3NpemUgKyAx
KSkpOwogICAgICAgICAgICAgIF9fY2ZpeGVkWzBdID0gc3RhdGljX2Nhc3Q8ZXh0ZXJuX3R5cGU+
KF9fZXh0X2JvbSk7CiAgICAgICAgICAgICAgY2hhcl90cmFpdHM8ZXh0ZXJuX3R5cGU+Ojpjb3B5
KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3NpemUpOwogICAgICAgICAgICAgIF9fY2Zyb20gPSBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0g
X19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZXh0ZXJu
X3R5cGUqIF9fY2ZpeGVkID0gY29uc3RfY2FzdDxleHRlcm5fdHlwZSo+KF9fZnJvbSk7CiAgICAg
ICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAg
ICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nm
cm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19mbGVuLCAmX19j
dG8sICZfX3RsZW4pOwogICAgICAgICAgICB9CgoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6
ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgIF9f
dG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAg
ICAgICAgX19yZXQgPSBjb2RlY3Z0X2Jhc2U6Om9rOwogICAgICAgICAgICB9CiAgICAgICAgICBl
bHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19mbGVuIDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihfX2Zyb21fZW5kIC0gX19mcm9tKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGV4dGVybl90eXBl
Kj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gY29kZWN2
dF9iYXNlOjpwYXJ0aWFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgIF9fcmV0ID0gY29kZWN2dF9iYXNlOjplcnJvcjsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVyblQs
IF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3co
KQogICAgewogICAgICBpbnQgX19yZXQgPSAwOwogICAgICBpZiAoc2l6ZW9mKF9FeHRlcm5UKSA8
PSBzaXplb2YoX0ludGVyblQpKQogICAgICAgIF9fcmV0ID0gc2l6ZW9mKF9JbnRlcm5UKS9zaXpl
b2YoX0V4dGVyblQpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGJvb2wKICAgIGNvZGVjdnQ8X0lu
dGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBj
b25zdCB0aHJvdygpCiAgICB7IHJldHVybiBmYWxzZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVyblQs
IF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBl
JiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICBjb25zdCBleHRlcm5f
dHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKICAgIHsgcmV0dXJuIG1pbihfX21heCwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihfX2VuZCAtIF9fZnJvbSkpOyB9CgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9J
bnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19tYXhfbGVuZ3RoKCkgY29u
c3QgdGhyb3coKQogICAgeyByZXR1cm4gMTsgfQojIDMzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9jb2RlY3Z0LmgiIDIgMwojIDQyNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2Nh
bGVfZmFjZXRzLmgiIDIgMwoKCgogIGNsYXNzIF9fbnVtX2Jhc2UKICB7CiAgcHJvdGVjdGVkOgoK
CiAgICBzdGF0aWMgY29uc3QgY2hhciBfU19hdG9tc1tdOwoKICAgIGVudW0KICAgIHsKICAgICAg
X01femVybywKICAgICAgX01fZSA9IF9NX3plcm8gKyAxMCwKICAgICAgX01fRSA9IF9NX3plcm8g
KyAxMSwKICAgICAgX01fc2l6ZSA9IDIxICsgMQogICAgfTsKCgoKICAgIHN0YXRpYyBib29sCiAg
ICBfU19mb3JtYXRfZmxvYXQoY29uc3QgaW9zX2Jhc2UmIF9faW8sIGNoYXIqIF9fZnB0ciwgY2hh
ciBfX21vZCwKICAgICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7CgoKICAgIHN0
YXRpYyB2b2lkCiAgICBfU19mb3JtYXRfaW50KGNvbnN0IGlvc19iYXNlJiBfX2lvLCBjaGFyKiBf
X2ZwdHIsIGNoYXIgX19tb2QsIGNoYXIgX19tb2RsKTsKICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAg
ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2Fs
ZTo6aWQgaWQ7CgogICAgcHJpdmF0ZToKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7
CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwogICAgICBjb25zdCBjaGFyKiBfTV9n
cm91cGluZzsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV90cnVlbmFtZTsKICAgICAgY29uc3Qg
Y2hhcl90eXBlKiBfTV9mYWxzZW5hbWU7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAg
ICBudW1wdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAg
ICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG51
bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZh
Y2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY2xvYyk7IH0KCiAg
ICAgIGNoYXJfdHlwZQogICAgICBkZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdGhvdXNh
bmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsg
fQoKICAgICAgc3RyaW5nCiAgICAgIGdyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fZ3JvdXBpbmcoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJ1ZW5hbWUoKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190cnVlbmFtZSgpOyB9CgogICAgICBzdHJpbmdf
dHlwZQogICAgICBmYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19mYWxz
ZW5hbWUoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3Qo
KTsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25z
dAogICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJf
dHlwZQogICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhv
dXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBj
b25zdAogICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdf
dHlwZQogICAgICBkb190cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RydWVuYW1l
OyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2ZhbHNlbmFtZSgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9NX2ZhbHNlbmFtZTsgfQoKCiAgICAgIHZvaWQKICAgICAgX01faW5p
dGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG51bXB1bmN0PF9DaGFyVD46
OmlkOwoKICB0ZW1wbGF0ZTw+CiAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCk7CgogIHRl
bXBsYXRlPD4KICAgIHZvaWQKICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1
bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPD4KICAgIG51bXB1bmN0PHdjaGFy
X3Q+Ojp+bnVtcHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8d2No
YXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGlj
IG51bXB1bmN0PF9DaGFyVD4KICAgIHsKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbnVt
cHVuY3Q7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNp
dAogICAgICBudW1wdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0g
MCkKICAgICAgOiBudW1wdW5jdDxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIF9TX2Ny
ZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0
aWFsaXplX251bXB1bmN0KF9NX2NfbG9jYWxlX251bXB1bmN0KTsKICAgICAgfQoKICAgIHByb3Rl
Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19k
ZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgbnVtX2dldCA6
IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgX19udW1fYmFzZQogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIg
aXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAog
ICAgICBudW1fZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7
IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IGJvb2wmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5k
LCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5
cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5
cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf
X2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYg
X192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2lu
LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90
eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYg
X192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19p
biwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9u
ZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9f
aW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg
X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBl
CiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p
bywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
dik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChf
X2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn
ZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgfm51bV9nZXQoKSB7IH0KCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBfTV9leHRyYWN0X2Zsb2F0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYs
IGlvc19iYXNlOjppb3N0YXRlJiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcmIF9feHRy
YykgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFjdF9pbnQoaXRlcl90eXBl
LCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAogICAgICAgICAgICAg
ICAgICAgICBzdHJpbmcmIF9feHRyYywgaW50JiBfX2Jhc2UpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYs
IGlvc19iYXNlOjppb3N0YXRlJiwgYm9vbCYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90
eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFz
ZTo6aW9zdGF0ZSYsIGxvbmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsCiAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQmKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jh
c2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICB1bnNpZ25lZCBpbnQm
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUs
IGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAg
ICAgICB1bnNpZ25lZCBsb25nJikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAg
ICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwKICAgICAgICAgICAgIGxvbmcgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYs
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5
cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAg
ICAgICAgICBmbG9hdCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
Z2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwKICAgICAgICAgICAgIGRvdWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGxvbmcgZG91YmxlJikgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlv
c19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdm9pZComKSBj
b25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
cj4KICAgIGxvY2FsZTo6aWQgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKIyA3MjEgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIG51bV9wdXQgOiBwdWJs
aWMgbG9jYWxlOjpmYWNldCwgcHVibGljIF9fbnVtX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVy
X3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg
IG51bV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoK
ICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBj
aGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
cHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQo
aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3Yp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3Yp
OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf
X2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCgog
ICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNo
YXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg
cHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAg
ICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBw
dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgZG91Ymxl
IF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGws
IF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jh
c2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0K
CiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwg
Y2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBl
CiAgICAgICAgX01fY29udmVydF9mbG9hdChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFy
X3R5cGUgX19maWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX21vZCwgX1ZhbHVl
VCBfX3YpIGNvbnN0OwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgICBp
dGVyX3R5cGUKICAgICAgICBfTV9jb252ZXJ0X2ludChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lv
LCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2QsIGNo
YXIgX19tb2RsLCBfVmFsdWVUIF9fdikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01f
d2lkZW5fZmxvYXQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwg
Y2hhciogX19jcywKICAgICAgICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdDsKCiAgICAg
IGl0ZXJfdHlwZQogICAgICBfTV93aWRlbl9pbnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywg
Y2hhcl90eXBlIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAgIGludCBfX2xl
bikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01faW5zZXJ0KGl0ZXJfdHlwZSwgaW9z
X2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICBjb25zdCBjaGFy
X3R5cGUqIF9fd3MsIGludCBfX2xlbikgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1f
cHV0KCkgeyB9OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJf
dHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAg
ICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWdu
ZWQgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0
ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19i
YXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZyBsb25nKSBjb25zdDsKCgogICAg
ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNo
YXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBs
b25nIGRvdWJsZSBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBf
X3YpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBs
b2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy
X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7Cgog
ICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY29sbGF0ZTsKCiAg
ICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAg
ICAgY29sbGF0ZShzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVm
cykKICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY19sb2NhbGU7IH0KCiAgICAgIGV4
cGxpY2l0CiAgICAgIGNvbGxhdGUoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAw
KQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2NfbG9jYWxlX2NvbGxh
dGUgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOyB9CgogICAgICBpbnQKICAgICAgY29tcGFy
ZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAg
IGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX2NvbXBhcmUoX19sbzEsIF9faGkxLCBfX2xvMiwgX19oaTIpOyB9Cgog
ICAgICBzdHJpbmdfdHlwZQogICAgICB0cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25z
dCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RyYW5zZm9ybShf
X2xvLCBfX2hpKTsgfQoKICAgICAgbG9uZwogICAgICBoYXNoKGNvbnN0IF9DaGFyVCogX19sbywg
Y29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19oYXNoKF9f
bG8sIF9faGkpOyB9CgoKICAgICAgaW50CiAgICAgIF9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwg
Y29uc3QgX0NoYXJUKikgY29uc3Q7CgogICAgICBzaXplX3QKICAgICAgX01fdHJhbnNmb3JtKF9D
aGFyVCosIGNvbnN0IF9DaGFyVCosIHNpemVfdCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAgICAg
dmlydHVhbAogICAgICB+Y29sbGF0ZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9j
X2xvY2FsZV9jb2xsYXRlKTsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fY29tcGFyZShj
b25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAgICAg
IGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xv
LCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBsb25nCiAgICAgIGRv
X2hhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0OwogICAg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjb2xsYXRlPF9D
aGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPGNoYXI+OjpfTV9j
b21wYXJlKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikgY29uc3Q7CgogIHRlbXBsYXRlPD4KICAg
IHNpemVfdAogICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqLCBjb25zdCBjaGFy
Kiwgc2l6ZV90KSBjb25zdDsKCgogIHRlbXBsYXRlPD4KICAgIGludAogICAgY29sbGF0ZTx3Y2hh
cl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopIGNvbnN0OwoK
ICB0ZW1wbGF0ZTw+CiAgICBzaXplX3QKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9y
bSh3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCkgY29uc3Q7CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlX2J5bmFtZSA6IHB1YmxpYyBjb2xsYXRl
PF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl
OwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAg
ZXhwbGljaXQKICAgICAgY29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19y
ZWZzID0gMCkKICAgICAgOiBjb2xsYXRlPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAg
X1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xsYXRlKTsKICAgICAgICBfU19jcmVh
dGVfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSwgX19zKTsKICAgICAgfQoKICAgIHByb3Rl
Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29sbGF0ZV9ieW5hbWUoKSB7IH0KICAgIH07CgoK
ICBjbGFzcyB0aW1lX2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBkYXRlb3JkZXIgeyBub19v
cmRlciwgZG15LCBtZHksIHltZCwgeWRtIH07CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgY2xhc3MgX190aW1lcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewog
ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgX19jaGFyX3R5cGU7CiAgICAgIHR5cGVk
ZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2Nh
bGU6OmlkIGlkOwoKCiAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQqIF9TX3RpbWV6b25lc1sxNF07
CgogICAgcHJvdGVjdGVkOgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX3RpbWVwdW5jdDsK
ICAgICAgY2hhciogX01fbmFtZV90aW1lcHVuY3Q7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0
ZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICBj
b25zdCBfQ2hhclQqIF9NX3RpbWVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVf
ZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAg
ICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfdGltZV9lcmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hh
clQqIF9NX2FtOwogICAgICBjb25zdCBfQ2hhclQqIF9NX3BtOwogICAgICBjb25zdCBfQ2hhclQq
IF9NX2FtX3BtX2Zvcm1hdDsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTE7CiAgICAgIGNv
bnN0IF9DaGFyVCogX01fZGF5MjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkzOwogICAgICBj
b25zdCBfQ2hhclQqIF9NX2RheTQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NTsKICAgICAg
Y29uc3QgX0NoYXJUKiBfTV9kYXk2OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTc7CgoKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2Ey
OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9k
YXlfYTQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E1OwogICAgICBjb25zdCBfQ2hhclQq
IF9NX2RheV9hNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTc7CgoKICAgICAgY29uc3Qg
X0NoYXJUKiBfTV9tb250aDAxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDI7CiAgICAg
IGNvbnN0IF9DaGFyVCogX01fbW9udGgwMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA0
OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f
bW9udGgwNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA3OwogICAgICBjb25zdCBfQ2hh
clQqIF9NX21vbnRoMDg7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwOTsKICAgICAgY29u
c3QgX0NoYXJUKiBfTV9tb250aDEwOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMTE7CiAg
ICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMjsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX21v
bnRoX2EwMTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDI7CiAgICAgIGNvbnN0IF9D
aGFyVCogX01fbW9udGhfYTAzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNDsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u
dGhfYTA2OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNzsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9tb250aF9hMDg7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA5OwogICAg
ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250
aF9hMTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTEyOwoKICAgIHB1YmxpYzoKICAg
ICAgZXhwbGljaXQKICAgICAgX190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAg
ZXhwbGljaXQKICAgICAgX190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIq
IF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgdm9pZAogICAgICBfTV9wdXQoX0NoYXJU
KiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCwKICAgICAgICAg
ICAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV9mb3Jt
YXRzKGNvbnN0IF9DaGFyVCoqIF9fZGF0ZSkgY29uc3QKICAgICAgewoKICAgICAgICBfX2RhdGVb
MF0gPSBfTV9kYXRlX2Zvcm1hdDsKICAgICAgICBfX2RhdGVbMV0gPSBfTV9kYXRlX2VyYV9mb3Jt
YXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFy
VCoqIF9fdGltZSkgY29uc3QKICAgICAgewoKICAgICAgICBfX3RpbWVbMF0gPSBfTV90aW1lX2Zv
cm1hdDsKICAgICAgICBfX3RpbWVbMV0gPSBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAg
ICAgIHZvaWQKICAgICAgX01fYW1wbShjb25zdCBfQ2hhclQqKiBfX2FtcG0pIGNvbnN0CiAgICAg
IHsKICAgICAgICBfX2FtcG1bMF0gPSBfTV9hbTsKICAgICAgICBfX2FtcG1bMV0gPSBfTV9wbTsK
ICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9kYXRlX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hh
clQqKiBfX2R0KSBjb25zdAogICAgICB7CgogICAgICAgIF9fZHRbMF0gPSBfTV9kYXRlX3RpbWVf
Zm9ybWF0OwogICAgICAgIF9fZHRbMV0gPSBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAg
fQoKICAgICAgdm9pZAogICAgICBfTV9kYXlzKGNvbnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QK
ICAgICAgewogICAgICAgIF9fZGF5c1swXSA9IF9NX2RheTE7CiAgICAgICAgX19kYXlzWzFdID0g
X01fZGF5MjsKICAgICAgICBfX2RheXNbMl0gPSBfTV9kYXkzOwogICAgICAgIF9fZGF5c1szXSA9
IF9NX2RheTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01fZGF5NTsKICAgICAgICBfX2RheXNbNV0g
PSBfTV9kYXk2OwogICAgICAgIF9fZGF5c1s2XSA9IF9NX2RheTc7CiAgICAgIH0KCiAgICAgIHZv
aWQKICAgICAgX01fZGF5c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0
CiAgICAgIHsKICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXlfYTE7CiAgICAgICAgX19kYXlzWzFd
ID0gX01fZGF5X2EyOwogICAgICAgIF9fZGF5c1syXSA9IF9NX2RheV9hMzsKICAgICAgICBfX2Rh
eXNbM10gPSBfTV9kYXlfYTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01fZGF5X2E1OwogICAgICAg
IF9fZGF5c1s1XSA9IF9NX2RheV9hNjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9kYXlfYTc7CiAg
ICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fbW9udGhzKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhz
KSBjb25zdAogICAgICB7CiAgICAgICAgX19tb250aHNbMF0gPSBfTV9tb250aDAxOwogICAgICAg
IF9fbW9udGhzWzFdID0gX01fbW9udGgwMjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRo
MDM7CiAgICAgICAgX19tb250aHNbM10gPSBfTV9tb250aDA0OwogICAgICAgIF9fbW9udGhzWzRd
ID0gX01fbW9udGgwNTsKICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoMDY7CiAgICAgICAg
X19tb250aHNbNl0gPSBfTV9tb250aDA3OwogICAgICAgIF9fbW9udGhzWzddID0gX01fbW9udGgw
ODsKICAgICAgICBfX21vbnRoc1s4XSA9IF9NX21vbnRoMDk7CiAgICAgICAgX19tb250aHNbOV0g
PSBfTV9tb250aDEwOwogICAgICAgIF9fbW9udGhzWzEwXSA9IF9NX21vbnRoMTE7CiAgICAgICAg
X19tb250aHNbMTFdID0gX01fbW9udGgxMjsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9t
b250aHNfYWJicmV2aWF0ZWQoY29uc3QgX0NoYXJUKiogX19tb250aHMpIGNvbnN0CiAgICAgIHsK
ICAgICAgICBfX21vbnRoc1swXSA9IF9NX21vbnRoX2EwMTsKICAgICAgICBfX21vbnRoc1sxXSA9
IF9NX21vbnRoX2EwMjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoX2EwMzsKICAgICAg
ICBfX21vbnRoc1szXSA9IF9NX21vbnRoX2EwNDsKICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21v
bnRoX2EwNTsKICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoX2EwNjsKICAgICAgICBfX21v
bnRoc1s2XSA9IF9NX21vbnRoX2EwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoX2Ew
ODsKICAgICAgICBfX21vbnRoc1s4XSA9IF9NX21vbnRoX2EwOTsKICAgICAgICBfX21vbnRoc1s5
XSA9IF9NX21vbnRoX2ExMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aF9hMTE7CiAg
ICAgICAgX19tb250aHNbMTFdID0gX01fbW9udGhfYTEyOwogICAgICB9CgogICAgcHJvdGVjdGVk
OgogICAgICB2aXJ0dWFsCiAgICAgIH5fX3RpbWVwdW5jdCgpOwoKCiAgICAgIHZvaWQKICAgICAg
X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBfX3RpbWVwdW5j
dDxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGNoYXIqCiAgICBfX3RpbWVw
dW5jdDxjaGFyPjo6X1NfdGltZXpvbmVzWzE0XTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAg
X190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19j
bG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX3B1
dChjaGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgY29uc3QgdG0qKSBjb25zdDsKCgogIHRlbXBs
YXRlPD4KICAgIGNvbnN0IHdjaGFyX3QqCiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X1NfdGlt
ZXpvbmVzWzE0XTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8d2NoYXJf
dD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCiAgdGVtcGxh
dGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX3B1dCh3Y2hhcl90Kiwg
c2l6ZV90LCBjb25zdCB3Y2hhcl90KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdG0qKSBjb25zdDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjb25z
dCBfQ2hhclQqIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25lc1sxNF07CgoKIyAxICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvdGltZV9tZW1iZXJzLmgiIDEgMwoj
IDM3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvdGltZV9tZW1iZXJzLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojpf
X3RpbWVwdW5jdChzaXplX3QgX19yZWZzKQogICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAg
IHsKCgoKICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19j
X2xvY2FsZSBfX2Nsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCiAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQog
ICAgewoKCgoKICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6fl9fdGlt
ZXB1bmN0KCkKICAgIHsKCgoKCiAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVf
dGltZXB1bmN0KTsKICAgIH0KIyAxMTU4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2Fs
ZV9mYWNldHMuaCIgMiAzCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0
aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19z
dHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7
CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldChzaXplX3QgX19yZWZzID0gMCkKICAgICAg
OiBsb2NhbGU6OmZhY2V0IChfX3JlZnMpIHsgfQoKICAgICAgZGF0ZW9yZGVyCiAgICAgIGRhdGVf
b3JkZXIoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kYXRlX29yZGVyKCk7IH0KCiAg
ICAgIGl0ZXJfdHlwZQogICAgICBnZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF90aW1lKF9f
YmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg
Z2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv
LAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfZGF0ZShfX2JlZywgX19lbmQsIF9faW8sIF9f
ZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF93ZWVrZGF5KGl0ZXJfdHlw
ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fZ2V0X3dlZWtkYXkoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7
IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywg
aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5kb19nZXRfbW9udGhuYW1lKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfeWVhcihf
X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAg
dmlydHVhbAogICAgICB+dGltZV9nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgZGF0ZW9yZGVyCiAg
ICAgIGRvX2RhdGVfb3JkZXIoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190
bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfZGF0ZShpdGVy
X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAg
dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBp
dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19n
ZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNv
bnN0OwoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFjdF9udW0oaXRlcl90eXBlJiBfX2JlZywg
aXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAgICAgICAgICAgaW50
IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKCgoKICAgICAgdm9pZAogICAgICBfTV9leHRyYWN0X25h
bWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4
bGVuLAogICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25z
dDsKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9f
YmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZm9ybWF0KSBjb25zdDsKICAgIH07Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6
aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSA6IHB1Ymxp
YyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7Cgog
ICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBf
X3JlZnMgPSAwKQogICAgICA6IHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4oX19yZWZzKSB7IH0K
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0X2J5bmFtZSgpIHsg
fQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4K
ICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jh
c2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg
ICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBp
ZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfcHV0KHNpemVfdCBfX3JlZnMgPSAwKQogICAg
ICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQo
aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRt
KiBfX3RtLAogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2JlZywgY29uc3QgX0NoYXJUKiBfX2Vu
ZCkgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i
YXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29uc3QgdG0qIF9fdG0sIGNo
YXIgX19mb3JtYXQsIGNoYXIgX19tb2QgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b19wdXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdG0sIF9fZm9ybWF0LCBfX21vZCk7IH0KCiAgICBw
cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0KCkKICAgICAgeyB9CgogICAg
ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2Um
IF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgICAgICAgY2hh
ciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCB0aW1lX3B1dDxfQ2hh
clQsIF9PdXRJdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgOiBwdWJsaWMgdGltZV9wdXQ8X0No
YXJULCBfT3V0SXRlcj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBleHBsaWNp
dAogICAgICB0aW1lX3B1dF9ieW5hbWUoY29uc3QgY2hhciogLCBzaXplX3QgX19yZWZzID0gMCkK
ICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPihfX3JlZnMpCiAgICAgIHsgfTsKCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsgfQog
ICAgfTsKCgogIGNsYXNzIG1vbmV5X2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBwYXJ0IHsg
bm9uZSwgc3BhY2UsIHN5bWJvbCwgc2lnbiwgdmFsdWUgfTsKICAgIHN0cnVjdCBwYXR0ZXJuIHsg
Y2hhciBmaWVsZFs0XTsgfTsKCiAgICBzdGF0aWMgY29uc3QgcGF0dGVybiBfU19kZWZhdWx0X3Bh
dHRlcm47CgoKCiAgICBzdGF0aWMgcGF0dGVybgogICAgX1NfY29uc3RydWN0X3BhdHRlcm4oY2hh
ciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKTsKICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjbGFzcyBtb25leXB1bmN0IDogcHVi
bGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtb25leV9iYXNlCiAgICB7CiAgICBwdWJsaWM6Cgog
ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5n
PF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0lu
dGw7CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0
IGNoYXIqIF9NX2dyb3VwaW5nOwogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKICAg
ICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01f
Y3Vycl9zeW1ib2w7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fcG9zaXRpdmVfc2lnbjsKICAg
ICAgY29uc3QgY2hhcl90eXBlKiBfTV9uZWdhdGl2ZV9zaWduOwogICAgICBpbnQgX01fZnJhY19k
aWdpdHM7CiAgICAgIHBhdHRlcm4gX01fcG9zX2Zvcm1hdDsKICAgICAgcGF0dGVybiBfTV9uZWdf
Zm9ybWF0OwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChzaXpl
X3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFs
aXplX21vbmV5cHVuY3QoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChfX2Nf
bG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAg
OiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3Qo
X19jbG9jLCBfX3MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hh
cl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0cmluZ190eXBl
CiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY3Vycl9z
eW1ib2woKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgcG9zaXRpdmVfc2lnbigpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc2l0aXZlX3NpZ24oKTsgfQoKICAgICAgc3RyaW5n
X3R5cGUKICAgICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X25lZ2F0aXZlX3NpZ24oKTsgfQoKICAgICAgaW50CiAgICAgIGZyYWNfZGlnaXRzKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZnJhY19kaWdpdHMoKTsgfQoKICAgICAgcGF0dGVybgog
ICAgICBwb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zX2Zvcm1h
dCgpOyB9CgogICAgICBwYXR0ZXJuCiAgICAgIG5lZ19mb3JtYXQoKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwKICAgICAgfm1vbmV5cHVuY3QoKTsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRv
X2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9
CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcK
ICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoK
ICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19jdXJyX3N5bWJvbCgpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9sOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBl
CiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBfTV9wb3NpdGl2
ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX25lZ2F0aXZlX3Np
Z24oKSBjb25zdAogICAgICB7IHJldHVybiBfTV9uZWdhdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0
dWFsIGludAogICAgICBkb19mcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2Zy
YWNfZGlnaXRzOyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fcG9zX2Zvcm1hdCgp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7IH0KCiAgICAgIHZpcnR1YWwgcGF0
dGVybgogICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnX2Zv
cm1hdDsgfQoKCiAgICAgICB2b2lkCiAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19j
X2xvY2FsZSBfX2Nsb2MgPSBfX251bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogX19uYW1lID0gX19udWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGxvY2FsZTo6aWQgbW9uZXlwdW5jdDxfQ2hhclQsIF9J
bnRsPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNv
bnN0IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCiAgdGVtcGxhdGU8Pgog
ICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8Pgog
ICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4K
ICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlw
dW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFyKik7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAg
IG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xv
Y2FsZSwgY29uc3QgY2hhciopOwoKCiAgdGVtcGxhdGU8PgogICAgbW9uZXlwdW5jdDx3Y2hhcl90
LCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgbW9uZXlwdW5jdDx3Y2hh
cl90LCBmYWxzZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1v
bmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9j
YWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDx3
Y2hhcl90LCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKik7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBj
bGFzcyBtb25leXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+
CiAgICB7CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbW9uZXlwdW5jdDsKCiAgICBwdWJs
aWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19z
dHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwg
PSBfSW50bDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNo
YXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbW9uZXlwdW5jdDxfQ2hhclQsIF9J
bnRsPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2Nh
bGVfbW9uZXlwdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01f
Y19sb2NhbGVfbW9uZXlwdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwKICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxl
KF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3RfYnluYW1lPF9DaGFy
VCwgX0ludGw+OjppbnRsOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXI+CiAgICBjbGFzcyBtb25leV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewog
ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm
IF9Jbkl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0
cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAog
ICAgICBtb25leV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMp
IHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUg
X19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX2dldChfX3MsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX3VuaXRzKTsg
fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19l
bmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX19kaWdpdHMpOyB9
CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9nZXQoKSB7IH0KCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5
cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBf
X2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0OwogICAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjpp
ZCBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBtb25leV9wdXQgOiBwdWJsaWMgbG9j
YWxlOjpmYWNldAogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2lj
X3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7
CgogICAgICBleHBsaWNpdAogICAgICBtb25leV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9j
YWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5
cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBjaGFyX3R5cGUg
X19maWxsLCBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJf
dHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lv
LAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRz
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9f
ZmlsbCwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5t
b25leV9wdXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVy
X3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws
CiAgICAgICAgICAgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
aXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jh
c2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlw
ZSYgX19kaWdpdHMpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0
ZXI+OjppZDsKCgogIHN0cnVjdCBtZXNzYWdlc19iYXNlCiAgewogICAgdHlwZWRlZiBpbnQgY2F0
YWxvZzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdl
cyA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbWVzc2FnZXNfYmFzZQogICAgewogICAg
cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJh
c2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3RlZDoKCgogICAgICBf
X2NfbG9jYWxlIF9NX2NfbG9jYWxlX21lc3NhZ2VzOwogICAgICBjaGFyKiBfTV9uYW1lX21lc3Nh
Z2VzOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBs
aWNpdAogICAgICBtZXNzYWdlcyhzaXplX3QgX19yZWZzID0gMCk7CgoKICAgICAgZXhwbGljaXQK
ICAgICAgbWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90
IF9fcmVmcyA9IDApOwoKICAgICAgY2F0YWxvZwogICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmlu
ZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOyB9CgoKICAgICAgY2F0YWxvZwogICAgICBvcGVuKGNv
bnN0IGJhc2ljX3N0cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYsIGNvbnN0IGNoYXIqKSBjb25z
dDsKCiAgICAgIHN0cmluZ190eXBlCiAgICAgIGdldChjYXRhbG9nIF9fYywgaW50IF9fc2V0LCBp
bnQgX19tc2dpZCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fcykgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fZ2V0KF9fYywgX19zZXQsIF9fbXNnaWQsIF9fcyk7IH0KCiAgICAgIHZvaWQKICAg
ICAgY2xvc2UoY2F0YWxvZyBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Nsb3Nl
KF9fYyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1lc3NhZ2VzKCk7
CgogICAgICB2aXJ0dWFsIGNhdGFsb2cKICAgICAgZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8
Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUK
ICAgICAgZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmdfdHlwZSYgX19kZmF1
bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCB2b2lkCiAgICAgIGRvX2Nsb3NlKGNhdGFsb2cpIGNv
bnN0OwoKCiAgICAgIGNoYXIqCiAgICAgIF9NX2NvbnZlcnRfdG9fY2hhcihjb25zdCBzdHJpbmdf
dHlwZSYgX19tc2cpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19tc2cuY19zdHIoKSkpOwogICAgICB9CgoK
ICAgICAgc3RyaW5nX3R5cGUKICAgICAgX01fY29udmVydF9mcm9tX2NoYXIoY2hhciogX19tc2cp
IGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8Y2hhcj46
Omxlbmd0aChfX21zZykgLSAxOwojIDE3MDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9j
YWxlX2ZhY2V0cy5oIiAzCiAgICAgICAgcmV0dXJuIHN0cmluZ190eXBlKCk7CiAgICAgIH0KICAg
ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG1lc3NhZ2Vz
PF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgc3RyaW5nCiAgICBtZXNzYWdlczxjaGFy
Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmKSBjb25zdDsKCgogIHRl
bXBsYXRlPD4KICAgIHdzdHJpbmcKICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19nZXQoY2F0YWxv
ZywgaW50LCBpbnQsIGNvbnN0IHdzdHJpbmcmKSBjb25zdDsKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxfQ2hh
clQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg
ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxp
Y2l0CiAgICAgIG1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMg
PSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1lc3NhZ2VzX2J5bmFt
ZSgpCiAgICAgIHsgfQogICAgfTsKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGlu
dXgvYml0cy9tZXNzYWdlc19tZW1iZXJzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9pMzg2LWxpbnV4L2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKHNpemVfdCBfX3JlZnMp
CiAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICB7CgoKCiAgICAgICBfTV9jX2xvY2Fs
ZV9tZXNzYWdlcyA9IF9TX2NfbG9jYWxlOwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9f
cmVmcykKICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgIHsKCgoKCiAgICAgICBfTV9j
X2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CiAgICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+Ojpj
YXRhbG9nCiAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFy
PiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBfX2RpcikgY29uc3QKICAgIHsKICAgICAgYmluZHRleHRkb21haW4oX19zLmNf
c3RyKCksIF9fZGlyKTsKICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CiAg
ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+
bWVzc2FnZXMoKQogICAgewoKCgoKICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2Fs
ZV9tZXNzYWdlcyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVu
YW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29w
ZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0CiAgICB7CgoKICAgICAgdGV4dGRvbWFpbihfX3Mu
Y19zdHIoKSk7CiAgICAgIHJldHVybiAwOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICB2b2lkCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25z
dAogICAgeyB9CgoKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgIG1lc3NhZ2VzX2J5
bmFtZTxfQ2hhclQ+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19y
ZWZzKQogICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpCiAgICAgewoKCgoKCgogICAgICAg
X1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CiAgICAgICBfU19jcmVh
dGVfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CiAgICAgfQojIDE3MzkgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQg
X19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9D
aGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJUIF9fYywg
Y29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+
ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnByaW50LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCBfX2MsIGNvbnN0
IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f
bG9jKS5pcyhjdHlwZV9iYXNlOjpjbnRybCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2Nh
bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku
aXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIGJvb2wgaXNsb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j
KQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVf
YmFzZTo6bG93ZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s
aW5lIGJvb2wKICAgIGlzYWxwaGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAg
IHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6
OmFscGhhLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBi
b29sCiAgICBpc2RpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJl
dHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpkaWdp
dCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAog
ICAgaXNwdW5jdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4g
dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHVuY3QsIF9f
Yyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlz
eGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf
ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxu
dW0oX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNl
dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBfX2MpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2dyYXBoKF9D
aGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5
cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpncmFwaCwgX19jKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFy
VCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8
X0NoYXJUPiA+KF9fbG9jKS50b3VwcGVyKF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2Nh
bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku
dG9sb3dlcihfX2MpOyB9Cn0KIyA0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19p
b3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaW9zIDogcHVibGljIGlvc19iYXNlCiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFp
dHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAg
ICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1i
dWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+
IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQs
IF9UcmFpdHM+IF9faXN0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJU
LCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsKCgogICAgcHJvdGVjdGVkOgogICAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3RpZTsKICAgICAgbXV0YWJsZSBj
aGFyX3R5cGUgX01fZmlsbDsKICAgICAgbXV0YWJsZSBib29sIF9NX2ZpbGxfaW5pdDsKICAgICAg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3N0cmVhbWJ1ZjsKCgogICAgICBj
b25zdCBfX2N0eXBlX3R5cGUqIF9NX2ZjdHlwZTsKCiAgICAgIGNvbnN0IF9fbnVtcHV0X3R5cGUq
IF9NX2ZudW1wdXQ7CgogICAgICBjb25zdCBfX251bWdldF90eXBlKiBfTV9mbnVtZ2V0OwoKICAg
IHB1YmxpYzoKICAgICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5mYWlsKCkgPyAwIDogY29uc3RfY2FzdDxiYXNpY19pb3MqPih0aGlzKTsgfQoKICAgICAgYm9v
bAogICAgICBvcGVyYXRvciEoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCk7IH0K
CiAgICAgIGlvc3RhdGUKICAgICAgcmRzdGF0ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0
cmVhbWJ1Zl9zdGF0ZTsgfQoKICAgICAgdm9pZAogICAgICBjbGVhcihpb3N0YXRlIF9fc3RhdGUg
PSBnb29kYml0KTsKCiAgICAgIHZvaWQKICAgICAgc2V0c3RhdGUoaW9zdGF0ZSBfX3N0YXRlKQog
ICAgICB7IHRoaXMtPmNsZWFyKHRoaXMtPnJkc3RhdGUoKSB8IF9fc3RhdGUpOyB9CgogICAgICBi
b29sCiAgICAgIGdvb2QoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0g
MDsgfQoKICAgICAgYm9vbAogICAgICBlb2YoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+
cmRzdGF0ZSgpICYgZW9mYml0KSAhPSAwOyB9CgogICAgICBib29sCiAgICAgIGZhaWwoKSBjb25z
dAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgKGJhZGJpdCB8IGZhaWxiaXQpKSAh
PSAwOyB9CgogICAgICBib29sCiAgICAgIGJhZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlz
LT5yZHN0YXRlKCkgJiBiYWRiaXQpICE9IDA7IH0KCiAgICAgIGlvc3RhdGUKICAgICAgZXhjZXB0
aW9ucygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2V4Y2VwdGlvbjsgfQoKICAgICAgdm9pZAog
ICAgICBleGNlcHRpb25zKGlvc3RhdGUgX19leGNlcHQpCiAgICAgIHsKICAgICAgICBfTV9leGNl
cHRpb24gPSBfX2V4Y2VwdDsKICAgICAgICB0aGlzLT5jbGVhcihfTV9zdHJlYW1idWZfc3RhdGUp
OwogICAgICB9CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaW9zKGJhc2ljX3N0cmVhbWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKSA6IGlvc19iYXNlKCkKICAgICAgeyB0aGlzLT5pbml0
KF9fc2IpOyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pb3MoKSB7IH0KCgogICAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHRpZSgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX3RpZTsgfQoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Kgog
ICAgICB0aWUoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX3RpZXN0cikKICAgICAg
ewogICAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV90aWU7
CiAgICAgICAgX01fdGllID0gX190aWVzdHI7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9
CgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoKSBj
b25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWY7IH0KCiAgICAgIGJhc2ljX3N0cmVhbWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICByZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPiogX19zYik7CgogICAgICBiYXNpY19pb3MmCiAgICAgIGNvcHlmbXQoY29uc3QgYmFz
aWNfaW9zJiBfX3Jocyk7CgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbCgpIGNvbnN0CiAgICAg
IHsKICAgICAgICBpZiAoIV9NX2ZpbGxfaW5pdCkKICAgICAgICAgIHsKICAgICAgICAgICAgX01f
ZmlsbCA9IHRoaXMtPndpZGVuKCcgJyk7CiAgICAgICAgICAgIF9NX2ZpbGxfaW5pdCA9IHRydWU7
CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9NX2ZpbGw7CiAgICAgIH0KCiAgICAgIGNoYXJf
dHlwZQogICAgICBmaWxsKGNoYXJfdHlwZSBfX2NoKQogICAgICB7CiAgICAgICAgY2hhcl90eXBl
IF9fb2xkID0gdGhpcy0+ZmlsbCgpOwogICAgICAgIF9NX2ZpbGwgPSBfX2NoOwogICAgICAgIHJl
dHVybiBfX29sZDsKICAgICAgfQoKCiAgICAgIGxvY2FsZQogICAgICBpbWJ1ZShjb25zdCBsb2Nh
bGUmIF9fbG9jKTsKCiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIg
X19kZmF1bHQpIGNvbnN0OwoKICAgICAgY2hhcl90eXBlCiAgICAgIHdpZGVuKGNoYXIgX19jKSBj
b25zdDsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBiYXNpY19pb3MoKSA6IGlvc19iYXNlKCkKICAg
ICAgeyB9CgogICAgICB2b2lkCiAgICAgIGluaXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4qIF9fc2IpOwoKICAgICAgYm9vbAogICAgICBfTV9jaGVja19mYWNldChjb25zdCBsb2Nh
bGU6OmZhY2V0KiBfX2YpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoIV9fZikKICAgICAgICAg
IF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgICAg
dm9pZAogICAgICBfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYyk7CiAgICB9Owp9
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MudGNjIiAxIDMKIyAz
NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MudGNjIiAzCgpuYW1lc3BhY2Ug
c3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2
b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y2xlYXIoaW9zdGF0ZSBfX3N0YXRl
KQogICAgewogICAgICBpZiAodGhpcy0+cmRidWYoKSkKICAgICAgICBfTV9zdHJlYW1idWZfc3Rh
dGUgPSBfX3N0YXRlOwogICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBf
X3N0YXRlIHwgYmFkYml0OwogICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRoaXMtPmV4Y2Vw
dGlvbnMoKSkpCiAgICAgICAgX190aHJvd19pb3NfZmFpbHVyZSgiYmFzaWNfaW9zOjpjbGVhcihp
b3N0YXRlKSBjYXVzZWQgZXhjZXB0aW9uIik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+KgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OnJkYnVmKGJhc2ljX3N0cmVhbWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQogICAgewogICAgICBiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV9zdHJlYW1idWY7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9
IF9fc2I7CiAgICAgIHRoaXMtPmNsZWFyKCk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaW9z
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y29weWZt
dChjb25zdCBiYXNpY19pb3MmIF9fcmhzKQogICAgewoKCgoKICAgICAgX1dvcmRzKiBfX3dvcmRz
ID0gKF9fcmhzLl9NX3dvcmRfc2l6ZSA8PSBfU19sb2NhbF93b3JkX3NpemUpID8KICAgICAgICBf
TV9sb2NhbF93b3JkIDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX3NpemVdOwoKCiAgICAgIF9D
YWxsYmFja19saXN0KiBfX2NiID0gX19yaHMuX01fY2FsbGJhY2tzOwogICAgICBpZiAoX19jYikK
ICAgICAgICBfX2NiLT5fTV9hZGRfcmVmZXJlbmNlKCk7CiAgICAgIF9NX2NhbGxfY2FsbGJhY2tz
KGVyYXNlX2V2ZW50KTsKICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29yZCkKICAgICAg
ICB7CiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9NX3dvcmQgPSAwOwog
ICAgICAgIH0KICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsKCiAgICAgIF9NX2NhbGxiYWNr
cyA9IF9fY2I7CiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcmhzLl9NX3dvcmRfc2l6
ZTsgKytfX2kpCiAgICAgICAgX193b3Jkc1tfX2ldID0gX19yaHMuX01fd29yZFtfX2ldOwogICAg
ICBpZiAoX01fd29yZCAhPSBfTV9sb2NhbF93b3JkKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0
ZSBbXSBfTV93b3JkOwogICAgICAgICAgX01fd29yZCA9IDA7CiAgICAgICAgfQogICAgICBfTV93
b3JkID0gX193b3JkczsKICAgICAgX01fd29yZF9zaXplID0gX19yaHMuX01fd29yZF9zaXplOwoK
ICAgICAgdGhpcy0+ZmxhZ3MoX19yaHMuZmxhZ3MoKSk7CiAgICAgIHRoaXMtPndpZHRoKF9fcmhz
LndpZHRoKCkpOwogICAgICB0aGlzLT5wcmVjaXNpb24oX19yaHMucHJlY2lzaW9uKCkpOwogICAg
ICB0aGlzLT50aWUoX19yaHMudGllKCkpOwogICAgICB0aGlzLT5maWxsKF9fcmhzLmZpbGwoKSk7
CgogICAgICB0aGlzLT5leGNlcHRpb25zKF9fcmhzLmV4Y2VwdGlvbnMoKSk7CgogICAgICBfTV9j
YWxsX2NhbGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjaGFyCiAg
ICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIg
X19kZmF1bHQpIGNvbnN0CiAgICB7CiAgICAgIGNoYXIgX19yZXQgPSBfX2RmYXVsdDsKICAgICAg
aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZjdHlwZSkpCiAgICAgICAgX19yZXQgPSBfTV9mY3R5cGUt
Pm5hcnJvdyhfX2MsIF9fZGZhdWx0KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBfQ2hhclQKICAgIGJh
c2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9fYykgY29uc3QKICAgIHsKICAg
ICAgY2hhcl90eXBlIF9fcmV0ID0gY2hhcl90eXBlKCk7CiAgICAgIGlmIChfTV9jaGVja19mYWNl
dChfTV9mY3R5cGUpKQogICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT53aWRlbihfX2MpOwogICAg
ICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBsb2NhbGUKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpp
bWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBsb2NhbGUgX19vbGQodGhpcy0+
Z2V0bG9jKCkpOwogICAgICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOwogICAgICBfTV9jYWNoZV9m
YWNldHMoX19sb2MpOwogICAgICBpZiAodGhpcy0+cmRidWYoKSAhPSAwKQogICAgICAgIHRoaXMt
PnJkYnVmKCktPnB1YmltYnVlKF9fbG9jKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBi
YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPiogX19zYikKICAgIHsKCiAgICAgIGlvc19iYXNlOjpfTV9pbml0KCk7CiAgICAgIF9N
X2NhY2hlX2ZhY2V0cyhfTV9pb3NfbG9jYWxlKTsKICAgICAgX01fdGllID0gMDsKIyAxNTkgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwogICAgICBfTV9maWxsID0g
X0NoYXJUKCk7CiAgICAgIF9NX2ZpbGxfaW5pdCA9IGZhbHNlOwoKICAgICAgX01fZXhjZXB0aW9u
ID0gZ29vZGJpdDsKICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsKICAgICAgX01fc3RyZWFtYnVm
X3N0YXRlID0gX19zYiA/IGdvb2RiaXQgOiBiYWRiaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hh
clQsIF9UcmFpdHM+OjpfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsK
ICAgICAgaWYgKGhhc19mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mY3R5
cGUgPSAmdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAgICAgICAg
X01fZmN0eXBlID0gMDsKCiAgICAgIGlmIChoYXNfZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2Mp
KQogICAgICAgIF9NX2ZudW1wdXQgPSAmdXNlX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKTsK
ICAgICAgZWxzZQogICAgICAgIF9NX2ZudW1wdXQgPSAwOwogICAgICBpZiAoaGFzX2ZhY2V0PF9f
bnVtZ2V0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVtZ2V0ID0gJnVzZV9mYWNldDxfX251
bWdldF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtZ2V0ID0gMDsKICAg
IH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczxjaGFyPjsKCgogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3M8d2NoYXJfdD47Cgp9CiMgMjA4ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyA1MiAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvaW9zIiAyIDMKIyA0NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMiAzCgpuYW1l
c3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hh
clQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVk
ZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9z
PF9DaGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1
Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBl
ZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlwZTsKICAg
ICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKCgogICAgICBleHBsaWNpdAog
ICAgICBiYXNpY19vc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsgdGhpcy0+
aW5pdChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfb3N0cmVhbSgpIHsgfQoK
CiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoKICAgICAg
X19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZiko
X19vc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8
PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlw
ZSYKICAgICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7CgoKICAg
ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBfX24pOwoKICAgICAgX19v
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pOwoKICAgICAg
X19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoYm9vbCBfX24pOwoKICAgICAgX19vc3Ry
ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoc2hvcnQgX19uKQogICAgICB7CiAgICAgICAgaW9z
X2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmll
bGQ7CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNl
OjpoZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0
PHVuc2lnbmVkIHNob3J0PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRo
aXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9f
b3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9fbikKICAgICAg
eyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24p
KTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW50IF9fbikKICAg
ICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBp
b3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwg
X19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsKICAgICAgICBlbHNlCiAgICAg
ICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsKICAg
ICAgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgaW50
IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nPihfX24pKTsgfQoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8
KGxvbmcgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwo
dW5zaWduZWQgbG9uZyBsb25nIF9fbik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9w
ZXJhdG9yPDwoZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0
b3I8PChmbG9hdCBfX2YpCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh
c3Q8ZG91YmxlPihfX2YpKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y
PDwobG9uZyBkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cjw8KGNvbnN0IHZvaWQqIF9fcCk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0
b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAg
ICAgcHV0KGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHdyaXRl
KGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX29zdHJlYW1f
dHlwZSYKICAgICAgZmx1c2goKTsKCgogICAgICBwb3NfdHlwZQogICAgICB0ZWxscCgpOwoKICAg
ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtwKHBvc190eXBlKTsKCiAgICAgIF9fb3N0cmVh
bV90eXBlJgogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwogICAgfTsK
CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz
cyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewoKICAgICAgYm9v
bCBfTV9vazsKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9NX29zOwoKICAg
IHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJU
LF9UcmFpdHM+JiBfX29zKTsKCiAgICAgIH5zZW50cnkoKQogICAgICB7CgogICAgICAgIGlmIChf
TV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRidWYgJiYgIXVuY2F1Z2h0X2V4Y2VwdGlvbigp
KQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01fb3MucmRi
dWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICAgIF9NX29zLnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgfQogICAgICB9CgogICAgICBvcGVyYXRvciBib29sKCkK
ICAgICAgeyByZXR1cm4gX01fb2s7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0No
YXJUIF9fYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7IHJldHVybiAo
X19vdXQgPDwgX19vdXQud2lkZW4oX19jKSk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf
b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsKCgogIHRlbXBsYXRlPGNs
YXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0
b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgc2lnbmVkIGNoYXIgX19j
KQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRl
bXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgdW5zaWdu
ZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19j
KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiAmCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0
ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYK
ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0
IHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt
PGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19zKQogICAgeyBy
ZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRsKGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIGZsdXNoKF9fb3MucHV0KF9fb3Mud2lkZW4oJ1xu
JykpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRzKGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MucHV0KF9DaGFyVCgpKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBmbHVzaChiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0KCn0KCgoKCgoj
IDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvb3N0cmVhbS50Y2MiIDEgMwojIDM2ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL29zdHJlYW0udGNjIiAzCgojIDEgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2xvY2FsZSIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2xvY2FsZSIgMwoK
CgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDEgMwoj
IDM3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCgojIDEg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2NlcnJubyIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9jKysv
My4yL2NlcnJubyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMzIgIi91c3Iv
aW5jbHVkZS9lcnJuby5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L2Vycm5vLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJy
bm8uaCIgMSAzCiMgNSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNy
L2luY2x1ZGUvYml0cy9lcnJuby5oIiAyIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8u
aCIgMwpleHRlcm4gaW50ICpfX2Vycm5vX2xvY2F0aW9uICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMzcgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAyIDMKIyA1
NSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMKZXh0ZXJuIGNoYXIgKnByb2dyYW1faW52b2NhdGlv
bl9uYW1lLCAqcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWU7CgoKCn0KIyA2OSAiL3Vzci9p
bmNsdWRlL2Vycm5vLmgiIDMKdHlwZWRlZiBpbnQgZXJyb3JfdDsKIyA0OSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvY2Vycm5vIiAyIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2Nh
bGVfZmFjZXRzLnRjYyIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMSAz
CiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L21hdGguaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuICJDIiB7CgoK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVk
ZS9tYXRoLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL25hbi5oIiAxIDMKIyAzOCAi
L3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVm
LmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDMKdHlwZWRlZiBsb25n
IGRvdWJsZSBmbG9hdF90OwoKdHlwZWRlZiBsb25nIGRvdWJsZSBkb3VibGVfdDsKIyA0MSAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNjUgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9iaXRz
L21hdGhjYWxscy5oIiAzCgoKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRv
dWJsZSBhc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW4gKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19hdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGRvdWJsZSBjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY29zIChk
b3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgc2luIChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4g
ZG91YmxlIHRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190YW4gKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0
ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3Np
bmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIHZvaWQgc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91Ymxl
ICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvcyAoZG91YmxlIF9feCwgZG91
YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJs
ZSBhY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zaCAoZG91
YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGFzaW5oIChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy
biBkb3VibGUgYXRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRh
bmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCgpleHRlcm4gZG91YmxlIGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVu
dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhw
b25lbnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGRleHAgKGRvdWJsZSBfX3gsIGludCBf
X2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVy
biBkb3VibGUgbG9nMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9n
MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbW9kZiAoZG91YmxlIF9f
eCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbW9kZiAoZG91Ymxl
IF9feCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX3BvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91
YmxlIGV4cG0xIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cG0xIChk
b3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpl
eHRlcm4gZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
bG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgZXhwMiAoZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAyIChkb3VibGUgX194KSB0aHJv
dyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzIgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGRvdWJs
ZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
cG93IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIHNx
cnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgY2JydCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19jYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoK
CgpleHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2NlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZhYnMgKGRvdWJs
ZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJs
ZSBfX2ZhYnMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgpleHRlcm4gZG91YmxlIGZsb29yIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mbG9vciAoZG91YmxlIF9feCkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZm1vZCAo
ZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbW9kIChk
b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZiAo
ZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl
eHRlcm4gaW50IF9fZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgaXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGUg
KGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
ZXh0ZXJuIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2RyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpl
eHRlcm4gZG91YmxlIHNpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX3NpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91
YmxlIGNvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwg
ZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpl
eHRlcm4gZG91YmxlIG5hbiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25hbiAoX19jb25zdCBjaGFyICpf
X3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4g
aW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91
YmxlIGoxIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgdGhy
b3cgKCk7CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2puIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJs
ZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJu
IGRvdWJsZSB5MSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUp
IHRocm93ICgpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX195biAoaW50LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91Ymxl
IGVyZiAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAoZG91YmxlKSB0aHJv
dyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmZjIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fZXJmYyAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWEgKGRvdWJsZSkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiBkb3VibGUgdGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
dGdhbW1hIChkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJs
ZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19nYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGRvdWJsZSBsZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0
aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19yaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91
YmxlIG5leHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194
LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRl
cm4gZG91YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2Fy
ZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3Vi
bGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwg
ZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2NhbGJuIChkb3VibGUgX194
LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibiAoZG91YmxlIF9feCwg
aW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gaW50IF9faWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGRvdWJsZSBzY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9fc2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGRvdWJsZSBuZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fbmVhcmJ5aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJs
ZSByb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yb3VuZCAoZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgdHJ1bmMgKGRvdWJsZSBfX3gpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX3RydW5j
IChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpl
eHRlcm4gZG91YmxlIHJlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ks
IGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnQgKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGxvbmcgaW50IGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGludCBfX2xyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50
IGxscm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xs
cm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGZkaW0gKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZmRpbSAoZG91Ymxl
IF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWF4IChkb3VibGUg
X194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYXggKGRvdWJsZSBf
X3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1pbiAoZG91YmxlIF9f
eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWluIChkb3VibGUgX194
LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnkgKGRvdWJs
ZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl
eHRlcm4gaW50IF9fc2lnbmJpdCAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZG91YmxlIGZtYSAoZG91YmxlIF9feCwg
ZG91YmxlIF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWEgKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRv
dWJsZSBzY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19zY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikgdGhyb3cgKCk7CiMgNjYgIi91c3Iv
aW5jbHVkZS9tYXRoLmgiIDIgMwojIDg4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDUzICIvdXNyL2luY2x1ZGUvYml0cy9t
YXRoY2FsbHMuaCIgMwoKCmV4dGVybiBmbG9hdCBhY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQg
YXNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5mIChmbG9hdCBf
X3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19hdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBh
dGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRh
bjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2Yg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2YgKGZsb2F0IF9feCkgdGhy
b3cgKCk7CgpleHRlcm4gZmxvYXQgc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5mIChmbG9h
dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGZsb2F0IGNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19jb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzaW5oZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2luaGYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7CgpleHRlcm4gZmxvYXQgdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX3RhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2luY29zZiAo
ZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJu
IHZvaWQgX19zaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgYWNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19hY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxv
YXQgYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luaGYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCgpl
eHRlcm4gZmxvYXQgZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhw
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZnJleHBmIChmbG9hdCBfX3gs
IGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZyZXhwZiAoZmxvYXQg
X194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZs
b2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZGV4cGYg
KGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2dm
IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2dmIChmbG9hdCBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2xvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbW9k
ZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX21v
ZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0
IGV4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwMTBmIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHBvdzEwZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBmbG9hdCBleHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cG0x
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19s
b2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGV4cDJmIChmbG9h
dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHAyZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKCgpleHRlcm4gZmxvYXQgbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2xvZzJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBmbG9hdCBwb3dm
IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Bvd2YgKGZs
b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NxcnRmIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBmbG9hdCBoeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9faHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBmbG9hdCBjYnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fY2JydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGZsb2F0IGNl
aWxmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0
ZXJuIGZsb2F0IF9fY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChmbG9hdCBfX3gp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZmxv
b3JmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0
ZXJuIGZsb2F0IF9fZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlZiAoZmxvYXQg
X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVy
biBpbnQgaXNpbmZmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGRyZW1mIChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2RyZW1mIChmbG9hdCBfX3gs
IGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzaWduaWZpY2FuZGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19j
b3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBmbG9hdCBuYW5mIChfX2NvbnN0IGNoYXIgKl9fdGFn
YikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19u
YW5mIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCgoKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0
IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g
ZmxvYXQgajBmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2owZiAoZmxvYXQpIHRo
cm93ICgpOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X2oxZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgam5mIChpbnQsIGZsb2F0KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZs
b2F0IHkwZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195MGYgKGZsb2F0KSB0aHJv
dyAoKTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195
MWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50LCBmbG9hdCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBmbG9hdCBlcmZmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2VyZmYgKGZsb2F0
KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGVyZmNmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX2VyZmNmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBsZ2FtbWFmIChmbG9h
dCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGZsb2F0IHRnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
dGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBnYW1tYWYgKGZsb2F0
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiBmbG9hdCBsZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKl9fc2lnbmdhbXApIHRocm93
ICgpOwoKCgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19yaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbmV4
dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBf
X3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBmbG9hdCBu
ZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dHRvd2FyZGYgKGZsb2F0IF9f
eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX3JlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbikgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbikgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgaWxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gaW50IF9f
aWxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibG5mIChm
bG9hdCBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxibG5m
IChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBuZWFy
YnlpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19uZWFyYnlpbnRmIChm
bG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgcm91bmRmIChmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19yb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4
dGVybiBmbG9hdCB0cnVuY2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOyBleHRlcm4gZmxvYXQgX190cnVuY2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZsb2F0IHJlbXF1b2YgKGZsb2F0
IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmVt
cXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gbG9uZyBpbnQgbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBp
bnQgX19scmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxs
cmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoK
CgpleHRlcm4gZmxvYXQgZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRl
cm4gZmxvYXQgZm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fZm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxv
YXQgZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
Zm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2Zw
Y2xhc3NpZnlmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGYgKGZsb2F0IF9fdmFsdWUpIHRocm93
ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgZm1h
ZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2ZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGZsb2F0IHNjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKSB0aHJvdyAoKTsKIyA4OSAi
L3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgMTA5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDUzICIvdXNyL2luY2x1ZGUv
Yml0cy9tYXRoY2FsbHMuaCIgMwoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5sIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRv
dWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nv
c2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lubCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NobCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2luaGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19z
aW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91Ymxl
ICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2hsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29zaGwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2luaGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbmhsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuaGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJsZSBf
X3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhw
bCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBs
b25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9f
ZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX21vZGZs
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGV4cDEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g
bG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19sb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19sb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGV4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19leHAybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBk
b3VibGUgbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2xvZzJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBsb25n
IGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlwb3Rs
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBsb25nIGRvdWJsZSBjYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fY2JydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBs
b25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBk
b3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3Vi
bGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmlu
aXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCgoKCmV4dGVybiBpbnQgaXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVsIChs
b25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWdu
aWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X3NpZ25pZmljYW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9u
ZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19j
b3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChf
X2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgX19pc25hbmwg
KGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKZXh0ZXJuIGludCBpc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgajBsIChsb25n
IGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2owbCAobG9uZyBkb3VibGUp
IHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2oxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4g
bG9uZyBkb3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91
YmxlIHkwbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwg
KGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAobG9uZyBkb3Vi
bGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MWwgKGxvbmcgZG91YmxlKSB0aHJv
dyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBsb25nIGRvdWJsZSBlcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2VyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg
ZG91YmxlIGVyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2VyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFs
IChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWwgKGxv
bmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRnYW1tYWwgKGxv
bmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGdhbW1hbCAobG9uZyBk
b3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91
YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91Ymxl
LCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFs
X3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u
ZyBkb3VibGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
bmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0dG93YXJk
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbWFp
bmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9f
bikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9f
bikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibG5sIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBuZWFyYnlp
bnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZWFy
YnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg
cm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19y
b3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0
cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJl
bXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQg
bHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmlu
dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmlu
dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxy
aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3Vu
ZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91
bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZmRp
bWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv
dyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk
b3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1heGwgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUg
Zm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChsb25nIGRvdWJsZSBfX3ZhbHVl
KSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50
IF9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1hbCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBs
b25nIGRvdWJsZSBfX3opIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAo
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19zY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0aHJvdyAo
KTsKIyAxMTAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDEyNSAiL3Vzci9pbmNsdWRlL21h
dGguaCIgMwpleHRlcm4gaW50IHNpZ25nYW07CiMgMTY2ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAz
CmVudW0KICB7CiAgICBGUF9OQU4sCgogICAgRlBfSU5GSU5JVEUsCgogICAgRlBfWkVSTywKCiAg
ICBGUF9TVUJOT1JNQUwsCgogICAgRlBfTk9STUFMCgogIH07CiMgMjUyICIvdXNyL2luY2x1ZGUv
bWF0aC5oIiAzCnR5cGVkZWYgZW51bQp7CiAgX0lFRUVfID0gLTEsCiAgX1NWSURfLAogIF9YT1BF
Tl8sCiAgX1BPU0lYXywKICBfSVNPQ18KfSBfTElCX1ZFUlNJT05fVFlQRTsKCgoKCmV4dGVybiBf
TElCX1ZFUlNJT05fVFlQRSBfTElCX1ZFUlNJT047CiMgMjc1ICIvdXNyL2luY2x1ZGUvbWF0aC5o
IiAzCnN0cnVjdCBfX2V4Y2VwdGlvbgoKCgogIHsKICAgIGludCB0eXBlOwogICAgY2hhciAqbmFt
ZTsKICAgIGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFyZzI7CiAgICBkb3VibGUgcmV0dmFsOwog
IH07CgoKZXh0ZXJuIGludCBtYXRoZXJyIChzdHJ1Y3QgX19leGNlcHRpb24gKl9fZXhjKSB0aHJv
dyAoKTsKIyA0MjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKfQojIDUyICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9jbWF0aCIgMiAzCiMgNzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCm5h
bWVzcGFjZSBzdGQKewoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19jbWF0aF9wb3dl
cihfVHAsIHVuc2lnbmVkIGludCk7CgogIGlubGluZSBkb3VibGUKICBhYnMoZG91YmxlIF9feCkK
ICB7IHJldHVybiBfX2J1aWx0aW5fZmFicyhfX3gpOyB9CgogIGlubGluZSBmbG9hdAogIGFicyhm
bG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNmKF9feCk7IH0KCiAgaW5saW5lIGxv
bmcgZG91YmxlCiAgYWJzKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFi
c2woX194KTsgfQoKCiAgaW5saW5lIGZsb2F0CiAgYWNvcyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6
YWNvc2YoX194KTsgfQoKCgoKCiAgdXNpbmcgOjphY29zOwoKCiAgaW5saW5lIGxvbmcgZG91Ymxl
CiAgYWNvcyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YWNvc2woX194KTsgfQoKCgoKCiAg
dXNpbmcgOjphc2luOwoKCiAgaW5saW5lIGZsb2F0CiAgYXNpbihmbG9hdCBfX3gpIHsgcmV0dXJu
IDo6YXNpbmYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGFzaW4obG9uZyBk
b3VibGUgX194KSB7IHJldHVybiA6OmFzaW5sKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YXRhbjsK
CgogIGlubGluZSBmbG9hdAogIGF0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW5mKF9feCk7
IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhdGFuKGxvbmcgZG91YmxlIF9feCkgeyBy
ZXR1cm4gOjphdGFubChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmF0YW4yOwoKCiAgaW5saW5lIGZs
b2F0CiAgYXRhbjIoZmxvYXQgX195LCBmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXRhbjJmKF9feSwg
X194KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhdGFuMihsb25nIGRvdWJsZSBf
X3ksIGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphdGFuMmwoX195LCBfX3gpOyB9CgoKCgoK
CiAgdXNpbmcgOjpjZWlsOwoKCiAgaW5saW5lIGZsb2F0CiAgY2VpbChmbG9hdCBfX3gpIHsgcmV0
dXJuIDo6Y2VpbGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGNlaWwobG9u
ZyBkb3VibGUgX194KSB7IHJldHVybiA6OmNlaWxsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6Y29z
OwoKICBpbmxpbmUgZmxvYXQKICBjb3MoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9j
b3NmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29zKGxvbmcgZG91YmxlIF9feCkK
ICB7IHJldHVybiBfX2J1aWx0aW5fY29zbChfX3gpOyB9CgogIHVzaW5nIDo6Y29zaDsKCgogIGlu
bGluZSBmbG9hdAogIGNvc2goZmxvYXQgX194KSB7IHJldHVybiA6OmNvc2hmKF9feCk7IH0KCgoK
CgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb3NoKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4g
Ojpjb3NobChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmV4cDsKCgogIGlubGluZSBmbG9hdAogIGV4
cChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZXhwZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcg
ZG91YmxlCiAgZXhwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpleHBsKF9feCk7IH0KCgoK
CgogIHVzaW5nIDo6ZmFiczsKCiAgaW5saW5lIGZsb2F0CiAgZmFicyhmbG9hdCBfX3gpCiAgeyBy
ZXR1cm4gX19idWlsdGluX2ZhYnNmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZmFi
cyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7IH0KCiAg
dXNpbmcgOjpmbG9vcjsKCgogIGlubGluZSBmbG9hdAogIGZsb29yKGZsb2F0IF9feCkgeyByZXR1
cm4gOjpmbG9vcmYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZsb29yKGxv
bmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpmbG9vcmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpm
bW9kOwoKCiAgaW5saW5lIGZsb2F0CiAgZm1vZChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1
cm4gOjpmbW9kZihfX3gsIF9feSk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZm1v
ZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgeyByZXR1cm4gOjpmbW9kbChfX3gs
IF9feSk7IH0KCgoKCgoKICB1c2luZyA6OmZyZXhwOwoKCiAgaW5saW5lIGZsb2F0CiAgZnJleHAo
ZmxvYXQgX194LCBpbnQqIF9fZXhwKSB7IHJldHVybiA6OmZyZXhwZihfX3gsIF9fZXhwKTsgfQoK
CgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZyZXhwKGxvbmcgZG91YmxlIF9feCwgaW50KiBf
X2V4cCkgeyByZXR1cm4gOjpmcmV4cGwoX194LCBfX2V4cCk7IH0KCgoKCgoKICB1c2luZyA6Omxk
ZXhwOwoKCiAgaW5saW5lIGZsb2F0CiAgbGRleHAoZmxvYXQgX194LCBpbnQgX19leHApIHsgcmV0
dXJuIDo6bGRleHBmKF9feCwgX19leHApOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQog
IGxkZXhwKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwKSB7IHJldHVybiA6OmxkZXhwbChfX3gs
IF9fZXhwKTsgfQoKCgoKCgogIHVzaW5nIDo6bG9nOwoKCiAgaW5saW5lIGZsb2F0CiAgbG9nKGZs
b2F0IF9feCkgeyByZXR1cm4gOjpsb2dmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3Vi
bGUKICBsb2cobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmxvZ2woX194KTsgfQoKCgoKCiAg
dXNpbmcgOjpsb2cxMDsKCgogIGlubGluZSBmbG9hdAogIGxvZzEwKGZsb2F0IF9feCkgeyByZXR1
cm4gOjpsb2cxMGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGxvZzEwKGxv
bmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2cxMGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpt
b2RmOwoKCiAgaW5saW5lIGZsb2F0CiAgbW9kZihmbG9hdCBfX3gsIGZsb2F0KiBfX2lwdHIpIHsg
cmV0dXJuIDo6bW9kZmYoX194LCBfX2lwdHIpOyB9CiMgMzc1ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9jbWF0aCIgMwogIGlubGluZSBsb25nIGRvdWJsZQogIG1vZGYobG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSogX19pcHRyKSB7IHJldHVybiA6Om1vZGZsKF9feCwgX19pcHRyKTsgfQojIDM4
OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgX1RwCiAgICBfX3Bvd19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikKICAgIHsK
ICAgICAgcmV0dXJuIF9fbiA8IDAKICAgICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9feCwg
LV9fbikKICAgICAgICA6IF9fY21hdGhfcG93ZXIoX194LCBfX24pOwogICAgfQoKICB1c2luZyA6
OnBvdzsKCgogIGlubGluZSBmbG9hdAogIHBvdyhmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1
cm4gOjpwb3dmKF9feCwgX195KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3co
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6cG93bChfX3gsIF9f
eSk7IH0KCgoKCgoKICBpbmxpbmUgZG91YmxlCiAgcG93KGRvdWJsZSBfX3gsIGludCBfX2kpCiAg
eyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19pKTsgfQoKICBpbmxpbmUgZmxvYXQKICBwb3co
ZmxvYXQgX194LCBpbnQgX19uKQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7IH0K
CiAgaW5saW5lIGxvbmcgZG91YmxlCiAgcG93KGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikKICB7
IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX24pOyB9CgogIHVzaW5nIDo6c2luOwoKICBpbmxp
bmUgZmxvYXQKICBzaW4oZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5mKF9feCk7
IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc2luKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVy
biBfX2J1aWx0aW5fc2lubChfX3gpOyB9CgogIHVzaW5nIDo6c2luaDsKCgogIGlubGluZSBmbG9h
dAogIHNpbmgoZmxvYXQgX194KSB7IHJldHVybiA6OnNpbmhmKF9feCk7IH0KCgoKCgoKICBpbmxp
bmUgbG9uZyBkb3VibGUKICBzaW5oKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpzaW5obChf
X3gpOyB9CgoKCgoKICB1c2luZyA6OnNxcnQ7CgogIGlubGluZSBmbG9hdAogIHNxcnQoZmxvYXQg
X194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0ZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRv
dWJsZQogIHNxcnQobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0bChf
X3gpOyB9CgogIHVzaW5nIDo6dGFuOwoKCiAgaW5saW5lIGZsb2F0CiAgdGFuKGZsb2F0IF9feCkg
eyByZXR1cm4gOjp0YW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0YW4o
bG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjp0
YW5oOwoKCiAgaW5saW5lIGZsb2F0CiAgdGFuaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFuaGYo
X194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHRhbmgobG9uZyBkb3VibGUgX194
KSB7IHJldHVybiA6OnRhbmhsKF9feCk7IH0KCgoKCn0KCgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4
eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfZnBjbGFz
c2lmeShfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8g
X19mcGNsYXNzaWZ5ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBf
X2ZwY2xhc3NpZnkgKF9fZikgOiBfX2ZwY2xhc3NpZnlsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2Zpbml0ZShfVHAgX19mKSB7IHJl
dHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19maW5pdGVmIChfX2YpIDog
c2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZmluaXRlIChfX2YpIDogX19maW5p
dGVsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2Fw
dHVyZV9pc2luZihfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxv
YXQpID8gX19pc2luZmYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8g
X19pc2luZiAoX19mKSA6IF9faXNpbmZsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25hbihfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9m
IChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19pc25hbmYgKF9fZikgOiBzaXplb2YgKF9fZikg
PT0gc2l6ZW9mIChkb3VibGUpID8gX19pc25hbiAoX19mKSA6IF9faXNuYW5sIChfX2YpKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25vcm1hbChf
VHAgX19mKSB7IHJldHVybiAoKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBj
bGFzc2lmeWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNs
YXNzaWZ5IChfX2YpIDogX19mcGNsYXNzaWZ5bCAoX19mKSkgPT0gRlBfTk9STUFMKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9zaWduYml0KF9UcCBf
X2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX3NpZ25iaXRm
IChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fc2lnbmJpdCAoX19m
KSA6IF9fc2lnbmJpdGwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu
dAogICAgX19jYXB0dXJlX2lzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVy
biAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBl
b2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9f
eCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191
KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkg
PT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAo
X191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2Zw
Y2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBj
bGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIF9f
eCA+IF9feTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBf
X2NhcHR1cmVfaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJu
IChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVv
Zl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194
KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3Up
ID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9
PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChf
X3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBj
bGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNs
YXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkgJiYgX194
ID49IF9feTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBf
X2NhcHR1cmVfaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gKF9fZXh0ZW5zaW9u
X18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3ggPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX195
ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gp
OyBfX3R5cGVvZl9fKF9feSkgX192ID0gKF9feSk7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChm
bG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91
YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05B
TiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192
KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikg
OiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKSAmJiBfX3ggPCBfX3k7IH0pKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVz
c2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAo
eyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAo
X19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9f
dHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0
KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUp
ID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8
IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDog
c2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9f
ZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIF9feCA8PSBfX3k7IH0pKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2dy
ZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7
IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChf
X2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194KSBfX3UgPSAoX194KTsgX190
eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQp
ID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkg
PyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwg
KHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBz
aXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19m
cGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkgJiYgKF9feCA8IF9feSB8fCBfX3kgPCBf
X3gpOyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2Fw
dHVyZV9pc3Vub3JkZXJlZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gKF9fZXh0
ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3UgPSAoX19mMSk7IF9fdHlwZW9mX18oX19m
MikgX192ID0gKF9fZjIpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNs
YXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xh
c3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAo
X192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9f
dikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5
bCAoX192KSkgPT0gRlBfTkFOOyB9KSk7IH0KfQojIDU4MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Y21hdGgiIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgaW50CiAgICBmcGNsYXNzaWZ5KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9mcGNsYXNz
aWZ5KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2Zpbml0
ZShfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNmaW5pdGUoX19mKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzaW5mKF9UcCBfX2YpIHsgcmV0dXJuIF9fY2Fw
dHVyZV9pc2luZihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAg
aXNuYW4oX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbmFuKF9fZik7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc25vcm1hbChfVHAgX19mKSB7IHJldHVybiBf
X2NhcHR1cmVfaXNub3JtYWwoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bnQKICAgIHNpZ25iaXQoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX3NpZ25iaXQoX19mKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzZ3JlYXRlcihfVHAgX19m
MSwgX1RwIF9fZjIpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2dyZWF0ZXIoX19mMSwgX19mMik7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXJlcXVhbChfVHAg
X19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXNncmVhdGVyZXF1YWwoX19m
MSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2xlc3Mo
X1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVybiBfX2NhcHR1cmVfaXNsZXNzKF9fZjEsIF9fZjIp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzZXF1YWwoX1Rw
IF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9fZjEs
IF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzZ3Jl
YXRlcihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXNsZXNzZ3Jl
YXRlcihfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAg
IGlzdW5vcmRlcmVkKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVyZV9p
c3Vub3JkZXJlZChfX2YxLCBfX2YyKTsgfQp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2du
dV9jeHg6OmZwY2xhc3NpZnk7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2Zpbml0ZTsKICB1c2luZyBf
X2dudV9jeHg6OmlzaW5mOwogIHVzaW5nIF9fZ251X2N4eDo6aXNuYW47CiAgdXNpbmcgX19nbnVf
Y3h4Ojppc25vcm1hbDsKICB1c2luZyBfX2dudV9jeHg6OnNpZ25iaXQ7CiAgdXNpbmcgX19nbnVf
Y3h4Ojppc2dyZWF0ZXI7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2dyZWF0ZXJlcXVhbDsKICB1c2lu
ZyBfX2dudV9jeHg6OmlzbGVzczsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzc2VxdWFsOwogIHVz
aW5nIF9fZ251X2N4eDo6aXNsZXNzZ3JlYXRlcjsKICB1c2luZyBfX2dudV9jeHg6OmlzdW5vcmRl
cmVkOwp9CgoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY21hdGgudGNjIiAxIDMK
IyAzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jbWF0aC50Y2MiIDMKbmFtZXNwYWNlIHN0
ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgX1RwCiAgICBfX2NtYXRoX3Bvd2VyKF9U
cCBfX3gsIHVuc2lnbmVkIGludCBfX24pCiAgICB7CiAgICAgIF9UcCBfX3kgPSBfX24gJSAyID8g
X194IDogMTsKCiAgICAgIHdoaWxlIChfX24gPj49IDEpCiAgICAgICAgewogICAgICAgICAgX194
ID0gX194ICogX194OwogICAgICAgICAgaWYgKF9fbiAlIDIpCiAgICAgICAgICAgIF9feSA9IF9f
eSAqIF9feDsKICAgICAgICB9CgogICAgICByZXR1cm4gX195OwogICAgfQp9CiMgNjU1ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMiAzCiMgNDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1p
dHMiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKCiMgMSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2NwdV9saW1pdHMuaCIgMSAzCiMgNDkgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMiAzCiMgODg3ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9saW1pdHMiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgZW51bSBmbG9hdF9yb3VuZF9zdHlsZQogIHsK
ICAgIHJvdW5kX2luZGV0ZXJtaW5hdGUgPSAtMSwKICAgIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwK
ICAgIHJvdW5kX3RvX25lYXJlc3QgPSAxLAogICAgcm91bmRfdG93YXJkX2luZmluaXR5ID0gMiwK
ICAgIHJvdW5kX3Rvd2FyZF9uZWdfaW5maW5pdHkgPSAzCiAgfTsKCiAgZW51bSBmbG9hdF9kZW5v
cm1fc3R5bGUKICB7CiAgICBkZW5vcm1faW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgZGVub3JtX2Fi
c2VudCA9IDAsCiAgICBkZW5vcm1fcHJlc2VudCA9IDEKICB9OwoKCgoKICBzdHJ1Y3QgX19udW1l
cmljX2xpbWl0c19iYXNlCiAgewogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQg
PSBmYWxzZTsKCiAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDA7CiAgICBzdGF0aWMgY29u
c3QgaW50IGRpZ2l0czEwID0gMDsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZh
bHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg
PSAwOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw
b25lbnQgPSAwOwogICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2ln
bmFsaW5nX05hTiA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBo
YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5v
cm1fbG9zcyA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNl
OwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IGZhbHNlOwogICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMg
PSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwog
ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93
YXJkX3plcm87CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IG51bWVy
aWNfbGltaXRzIDogcHVibGljIF9fbnVtZXJpY19saW1pdHNfYmFzZQogICAgewogICAgICBzdGF0
aWMgX1RwIG1pbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAg
ICBzdGF0aWMgX1RwIG1heCgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsg
fQogICAgICBzdGF0aWMgX1RwIGVwc2lsb24oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0
PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCByb3VuZF9lcnJvcigpIHRocm93KCkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIGluZmluaXR5KCkgdGhy
b3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgcXVp
ZXRfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0
YXRpYyBfVHAgc2lnbmFsaW5nX05hTigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1Rw
PigwKTsgfQogICAgICBzdGF0aWMgX1RwIGRlbm9ybV9taW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51
bWVyaWNfbGltaXRzPGJvb2w+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBib29sIG1pbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBib29sIG1heCgpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gdHJ1ZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAxOwogICAgICBz
dGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgYm9vbCBlcHNpbG9uKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCByb3VuZF9lcnJvcigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
aW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5v
cm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxz
ZTsKCiAgICAgIHN0YXRpYyBib29sIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBm
YWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIGRlbm9ybV9taW4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p
ZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKCgoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlCiAgICAgICAgICAgICAgIHx8IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsK
ICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+CiAg
ICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAg
IHN0YXRpYyBjaGFyIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGNoYXIpKC0xMjcgLSAx
KTsgfQogICAgICBzdGF0aWMgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChjaGFy
KTEyNzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gY2hhcigpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmlu
aXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fi
c2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7Cgog
ICAgICBzdGF0aWMgY2hhciBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigp
OyB9CiAgICAgIHN0YXRpYyBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
Y2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMgY2hhciBkZW5vcm1fbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jv
dW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3Jv
dW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEwNzEg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBu
dW1lcmljX2xpbWl0czxzaWduZWQgY2hhcj4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1pbigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gKC0xMjcgLSAxKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNo
YXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjc7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFj
dCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMg
c2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz
dGF0aWMgc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBzaWduZWQgY2hh
ciBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNo
YXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMg
c2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBkZW5vcm1f
bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96
ZXJvOwogICAgfTsKIyAxMTI4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1w
bGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4KICAgIHsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGlj
IHVuc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDEyNyAqIDIg
KyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA4OwogICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHJvdW5kX2Vy
cm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50
IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAg
PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O
YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g
ZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g
ZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGlj
IHVuc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBzaWdu
YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBkZW5vcm1fbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g
PSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9
OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx3Y2hhcl90Pgog
ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg
ICBzdGF0aWMgd2NoYXJfdCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICh3Y2hhcl90KSgt
MjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBtYXgoKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuICh3Y2hhcl90KTIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB3
Y2hhcl90IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGlj
IHdjaGFyX3Qgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50
ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
c2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0
eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IGluZmluaXR5KCkg
dGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAgc3RhdGljIHdjaGFyX3Qg
cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAgc3Rh
dGljIHdjaGFyX3Qgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJf
dCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHdjaGFyX3QoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl
ID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEyNDEgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxzaG9ydD4K
ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAg
ICAgc3RhdGljIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKC0zMjc2NyAtIDEp
OyB9CiAgICAgIHN0YXRpYyBzaG9ydCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMyNzY3
OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE1OwogICAgICBzdGF0aWMgY29u
c3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCBy
YWRpeCA9IDI7CiAgICAgIHN0YXRpYyBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiAwOyB9CiAgICAgIHN0YXRpYyBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGlj
IHNob3J0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAg
IHN0YXRpYyBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7
IH0KICAgICAgc3RhdGljIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIHNob3J0KCk7IH0KICAgICAgc3RhdGljIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1
OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZv
cmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0
eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEyOTggIi91c3IvaW5jbHVkZS9jKysv
My4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNp
Z25lZCBzaG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQg
PSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWF4KCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAoMzI3NjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzID0gMTY7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNp
Z25lZCBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g
MDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVk
IHNob3J0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHF1aWV0X05hTigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9
CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGlj
IHVuc2lnbmVkIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNz
X2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91
bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8Pgog
ICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGludD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGludCBtaW4oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIChpbnQpKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAgICAgIHN0YXRpYyBp
bnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoaW50KTIxNDc0ODM2NDdMOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7
CiAgICAgIHN0YXRpYyBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQog
ICAgICBzdGF0aWMgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9
CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rl
bm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgaW50IGluZmluaXR5
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0
YXRpYyBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KDApOyB9CiAgICAgIHN0YXRpYyBpbnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IGRlbm9ybV9t
aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g
PSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9
OwojIDE0MTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAg
IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+CiAgICB7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBp
bnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgICBzdGF0aWMgdW5z
aWduZWQgaW50IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKHVuc2lnbmVkKSgyMTQ3NDgz
NjQ3TCAqIDJVICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZXBzaWxv
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50
IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4
cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGlu
Z19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNf
ZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y
bV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGluZmluaXR5KCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAg
IHN0YXRpYyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg
c2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGRlbm9ybV9taW4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g
PSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9
OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nPgogICAg
ewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBz
dGF0aWMgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtMjE0NzQ4MzY0N0wgLSAx
KTsgfQogICAgICBzdGF0aWMgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIxNDc0
ODM2NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0
aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln
bmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0g
MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Owog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0
YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxs
b25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIHNpZ25hbGlu
Z19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAg
ICAgIHN0YXRpYyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9
IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNTIyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9s
aW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQg
bG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl
OwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gKDIxNDc0ODM2NDdMICogMlUgKyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMgPSAzMjsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2ln
bmVkIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0
aWMgdW5zaWduZWQgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k
ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHF1aWV0X05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAg
c3RhdGljIHVuc2lnbmVkIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g
cm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBu
dW1lcmljX2xpbWl0czxsb25nIGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAtIDEpOyB9CiAgICAgIHN0
YXRpYyBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiA5MjIzMzcyMDM2ODU0
Nzc1ODA3TEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjM7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIHJvdW5kX2Vycm9y
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu
b3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFs
c2U7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcg
cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+
KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9u
ZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxv
bmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJh
cHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91
bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE2MzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2xpbWl0
cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25n
IGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1
ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbWF4KCkgdGhyb3co
KQogICAgICB7IHJldHVybiAoOTIyMzM3MjAzNjg1NDc3NTgwN0xMICogMlVMTCArIDEpOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0czEwID0gMTk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4
ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcm91bmRf
ZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx
MCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g
PSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg
PSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgaW5maW5pdHkoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0K
ICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3Rh
dGljIHVuc2lnbmVkIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1
bnNpZ25lZCBsb25nIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp
bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5
bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxh
dGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGZsb2F0PgogICAgewogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgZmxvYXQgbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAgc3RhdGlj
IGZsb2F0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMy40MDI4MjM0N2UrMzhGOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDI0OwogICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0czEwID0gNjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4
ID0gMjsKICAgICAgc3RhdGljIGZsb2F0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IDEuMTkyMDkyOTBlLTA3RjsgfQogICAgICBzdGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDEuMEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4
cG9uZW50ID0gLTEyNTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0z
NzsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMjg7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf
TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9
IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9
IGZhbHNlOwoKICAgICAgc3RhdGljIGZsb2F0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJl
dHVybiAwLjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDAuMEY7IH0KICAgICAgc3RhdGljIGZsb2F0IHNpZ25hbGluZ19OYU4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KICAgICAgc3RhdGljIGZsb2F0IGRlbm9ybV9taW4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0
eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE3NjUgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmlj
X2xpbWl0czxkb3VibGU+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxp
emVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwODsgfQogICAgICBzdGF0aWMgZG91YmxlIG1heCgp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNTM7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzMTAgPSAxNTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g
MjsKICAgICAgc3RhdGljIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAy
LjIyMDQ0NjA0OTI1MDMxMzFlLTE2OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcm91bmRfZXJyb3Io
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5fZXhwb25lbnQgPSAtMTAyMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx
MCA9IC0zMDc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTAyNDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDMwODsKCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxp
bmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz
X2Rlbm9ybSA9CiAgICAgICAgICAgICAgZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgZG91YmxlIGluZmlu
aXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBx
dWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91
YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBz
dGF0aWMgZG91YmxlIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19t
b2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPQogICAgICAgICAgICAgIHJv
dW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxODQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1p
dHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+
CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAg
ICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMuMzYy
MTAzMTQzMTEyMDkzNTA2MjZlLTQ5MzJMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtYXgo
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJMOyB9
CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0czEwID0gMTg7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCBy
YWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAxLjA4NDIwMjE3MjQ4NTUwNDQzNDAxZS0xOUw7IH0KICAgICAgc3RhdGljIGxv
bmcgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjBMOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xNjM4MTsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC00OTMxOwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudCA9IDE2Mzg0OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu
dDEwID0gNDkzMjsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0KICAgICAgICAgICAgICAgIGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQogICAg
ICAgICAgICAgICAgZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl
bm9ybV9sb3NzID0KICAgICAgICAgICAgICAgIGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcgZG91
YmxlIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CiAgICAgIHN0YXRp
YyBsb25nIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0K
ICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDAuMEw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGRlbm9ybV9taW4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll
YzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz
c19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv
dW5kX3N0eWxlID0KICAgICAgICByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTkyNCAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCn0KIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL3R5
cGVpbmZvIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvdHlwZWluZm8iIDMKZXh0ZXJu
ICJDKysiIHsKCm5hbWVzcGFjZSBfX2N4eGFiaXYxCnsKICBjbGFzcyBfX2NsYXNzX3R5cGVfaW5m
bzsKfQojIDU1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMwpuYW1lc3BhY2Ugc3Rk
CnsKCgoKICBjbGFzcyB0eXBlX2luZm8KICB7CiAgcHVibGljOgoKCgoKICAgIHZpcnR1YWwgfnR5
cGVfaW5mbygpOwoKICBwcml2YXRlOgoKICAgIHR5cGVfaW5mbyYgb3BlcmF0b3I9KGNvbnN0IHR5
cGVfaW5mbyYpOwogICAgdHlwZV9pbmZvKGNvbnN0IHR5cGVfaW5mbyYpOwoKICBwcm90ZWN0ZWQ6
CiAgICBjb25zdCBjaGFyICpfX25hbWU7CgogIHByb3RlY3RlZDoKICAgIGV4cGxpY2l0IHR5cGVf
aW5mbyhjb25zdCBjaGFyICpfX24pOiBfX25hbWUoX19uKSB7IH0KCiAgcHVibGljOgoKCgogICAg
Y29uc3QgY2hhciogbmFtZSgpIGNvbnN0CiAgICB7IHJldHVybiBfX25hbWU7IH0KIyA5OCAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvdHlwZWluZm8iIDMKICAgIGJvb2wgYmVmb3JlKGNvbnN0IHR5cGVf
aW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0K
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyBy
ZXR1cm4gX19uYW1lID09IF9fYXJnLl9fbmFtZTsgfQoKICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gIW9wZXJhdG9yPT0oX19hcmcp
OyB9CgoKICBwdWJsaWM6CgogICAgdmlydHVhbCBib29sIF9faXNfcG9pbnRlcl9wKCkgY29uc3Q7
CgogICAgdmlydHVhbCBib29sIF9faXNfZnVuY3Rpb25fcCgpIGNvbnN0OwoKCgoKCgoKICAgIHZp
cnR1YWwgYm9vbCBfX2RvX2NhdGNoKGNvbnN0IHR5cGVfaW5mbyAqX190aHJfdHlwZSwgdm9pZCAq
Kl9fdGhyX29iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9fb3V0ZXIp
IGNvbnN0OwoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb191cGNhc3QoY29uc3QgX19jeHhhYml2MTo6
X19jbGFzc190eXBlX2luZm8gKl9fdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKipfX29ial9wdHIpIGNvbnN0OwogIH07CgoKCiAgY2xhc3MgYmFkX2Nhc3QgOiBwdWJs
aWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9jYXN0KCkgdGhyb3coKSB7IH0KCgog
ICAgdmlydHVhbCB+YmFkX2Nhc3QoKSB0aHJvdygpOwogIH07CgoKICBjbGFzcyBiYWRfdHlwZWlk
IDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfdHlwZWlkICgpIHRocm93
KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF90eXBlaWQoKSB0aHJvdygpOwogIH07Cn0KCn0KIyA0
NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCgpuYW1l
c3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGUKICAgIGxv
Y2FsZTo6Y29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0CiAgICB7CiAgICAgIF9J
bXBsKiBfX3RtcCA9IG5ldyBfSW1wbCgqX01faW1wbCwgMSk7CiAgICAgIF9fdG1wLT5fTV9yZXBs
YWNlX2ZhY2V0KF9fb3RoZXIuX01faW1wbCwgJl9GYWNldDo6aWQpOwogICAgICByZXR1cm4gbG9j
YWxlKF9fdG1wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBib29sCiAgICBsb2NhbGU6Om9wZXJhdG9yKCko
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX3MyKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hhclQ+
IF9fY29sbGF0ZV90eXBlOwogICAgICBjb25zdCBfX2NvbGxhdGVfdHlwZSYgX19jb2xsYXRlID0g
dXNlX2ZhY2V0PF9fY29sbGF0ZV90eXBlPigqdGhpcyk7CiAgICAgIHJldHVybiAoX19jb2xsYXRl
LmNvbXBhcmUoX19zMS5kYXRhKCksIF9fczEuZGF0YSgpICsgX19zMS5sZW5ndGgoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MyLmRhdGEoKSwgX19zMi5kYXRhKCkgKyBfX3My
Lmxlbmd0aCgpKSA8IDApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBj
b25zdCBfRmFjZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAg
ICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01faWQoKTsKICAgICAgbG9jYWxlOjpmYWNldCoq
IF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOwogICAgICBpZiAoIShfX2kgPCBf
X2xvYy5fTV9pbXBsLT5fTV9mYWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKSkKICAgICAgICBf
X3Rocm93X2JhZF9jYXN0KCk7CiAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQm
PigqX19mYWNldHNbX19pXSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg
IGJvb2wKICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpCiAgICB7CiAg
ICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2lkKCk7CiAgICAgIGxvY2FsZTo6ZmFjZXQq
KiBfX2ZhY2V0cyA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsKICAgICAgcmV0dXJuIChfX2kg
PCBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKTsKICAgIH0K
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J
dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9mbG9hdChf
SW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYykgY29uc3QK
ICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAg
ICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBl
PF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAg
ICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hh
clQ+ID4oX19sb2MpOwoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBlLndp
ZGVuKCcrJyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRlbign
LScpOwogICAgICBpbnQgX19wb3MgPSAwOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwog
ICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKSB8fCBfX3RyYWl0c190eXBl
OjplcShfX2MsIF9fbWludXMpKQogICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAg
ewogICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAg
ICAgICsrX19wb3M7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgIH0KCgogICAg
ICBjb25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9tc1tfTV96ZXJv
XSk7CiAgICAgIGJvb2wgX19mb3VuZF96ZXJvID0gZmFsc2U7CiAgICAgIHdoaWxlIChfX3RyYWl0
c190eXBlOjplcShfX2MsIF9femVybykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAg
ICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgIF9fZm91bmRfemVybyA9IHRydWU7CiAg
ICAgICAgfQogICAgICBpZiAoX19mb3VuZF96ZXJvKQogICAgICAgIHsKICAgICAgICAgIF9feHRy
YyArPSBfU19hdG9tc1tfTV96ZXJvXTsKICAgICAgICAgICsrX19wb3M7CiAgICAgICAgfQoKCiAg
ICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9NX0UgLSBfTV96ZXJvICsgMTsKICAgICAgY2hhcl90
eXBlIF9fd2F0b21zW19fbGVuXTsKICAgICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1NfYXRv
bXMgKyBfX2xlbiwgX193YXRvbXMpOwogICAgICBib29sIF9fZm91bmRfZGVjID0gZmFsc2U7CiAg
ICAgIGJvb2wgX19mb3VuZF9zY2kgPSBmYWxzZTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fZGVj
ID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CgogICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGluZzsK
ICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGJv
b2wgX19jaGVja19ncm91cGluZyA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBpbnQgX19zZXBf
cG9zID0gMDsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19ucC50aG91c2FuZHNfc2Vw
KCk7CgogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewoKICAgICAgICAgIGNv
bnN0IGNoYXJfdHlwZSogX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9tcywgMTAsIF9f
Yyk7CgoKICAgICAgICAgIGlmIChfX3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVxKF9fYywgY2hhcl90
eXBlKCkpKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAg
ICAgX194dHJjICs9IF9TX2F0b21zW19fcCAtIF9fd2F0b21zXTsKICAgICAgICAgICAgICArK19f
c2VwX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICB9CiAg
ICAgICAgICBlbHNlIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fc2VwKQogICAgICAgICAg
ICAgICAgICAgJiYgX19jaGVja19ncm91cGluZyAmJiAhX19mb3VuZF9kZWMpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIGlmIChfX3NlcF9wb3MpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBf
cG9zKTsKICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAg
X19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls
Yml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgfQogICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX2RlYykgJiYg
IV9fZm91bmRfZGVjKQogICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgaWYgKF9fZm91bmRf
Z3JvdXBpbmcuc2l6ZSgpKQogICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0
aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAg
ICAgICAgX194dHJjICs9ICcuJzsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg
ICAgICAgICAgIF9fZm91bmRfZGVjID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxz
ZSBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX193YXRvbXNbX01fZV0pCiAgICAgICAgICAg
ICAgICAgICAgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3dhdG9tc1tfTV9FXSkpCiAgICAg
ICAgICAgICAgICAgICAmJiAhX19mb3VuZF9zY2kgJiYgX19wb3MpCiAgICAgICAgICAgIHsKCiAg
ICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJy
b3coX19jLCBjaGFyKCkpOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CgoKICAgICAg
ICAgICAgICBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMpCiAgICAgICAgICAgICAg
ICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51cykpCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBf
X2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytf
X2JlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19mb3VuZF9zY2kgPSB0cnVl
OwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCgogICAgICAgICAgICBicmVhazsKICAgICAg
ICB9CgoKCiAgICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6
ZSgpKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoIV9fZm91bmRfZGVjKQogICAgICAgICAgICBf
X2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAg
ICBpZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRfZ3JvdXBpbmcpKQog
ICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAg
X194dHJjICs9IGNoYXIoKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51
bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X2ludChfSW5JdGVyIF9fYmVn
LCBfSW5JdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3h0cmMsIGludCYgX19iYXNlKSBjb25zdAog
ICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAg
ICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8
X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAg
ICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFy
VD4gPihfX2xvYyk7CgoKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19p
by5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fYmFzZWZpZWxkID09
IGlvc19iYXNlOjpvY3QpCiAgICAgICAgX19iYXNlID0gODsKICAgICAgZWxzZSBpZiAoX19iYXNl
ZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAgICBfX2Jhc2UgPSAxNjsKICAgICAgZWxzZQog
ICAgICAgIF9fYmFzZSA9IDEwOwoKCiAgICAgIGludCBfX3BvcyA9IDA7CiAgICAgIGNoYXJfdHlw
ZSBfX2MgPSAqX19iZWc7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBlLndp
ZGVuKCcrJyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRlbign
LScpOwoKICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fcGx1cykgfHwgX190cmFp
dHNfdHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQog
ICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7
CiAgICAgICAgICArK19fcG9zOwogICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICB9
CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRvbXNb
X01femVyb10pOwogICAgICBjb25zdCBjaGFyX3R5cGUgX194ID0gX19jdHlwZS53aWRlbigneCcp
OwogICAgICBjb25zdCBjaGFyX3R5cGUgX19YID0gX19jdHlwZS53aWRlbignWCcpOwogICAgICBp
ZiAoX19iYXNlID09IDEwKQogICAgICAgIHsKICAgICAgICAgIGJvb2wgX19mb3VuZF96ZXJvID0g
ZmFsc2U7CiAgICAgICAgICB3aGlsZSAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYm
IF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gKigrK19f
YmVnKTsKICAgICAgICAgICAgICBfX2ZvdW5kX3plcm8gPSB0cnVlOwogICAgICAgICAgICB9CiAg
ICAgICAgICBpZiAoX19mb3VuZF96ZXJvKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX194
dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAg
ICAgICAgaWYgKF9fYmFzZWZpZWxkID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3gpCiAgICAgICAgICAgICAgICAg
ICAgICAgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX1gpKQogICAgICAgICAgICAgICAgICAg
ICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAg
ICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19i
ZWcpOwogICAgICAgICAgICAgICAgICAgICAgX19iYXNlID0gMTY7CiAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iYXNlID0g
ODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBp
ZiAoX19iYXNlID09IDE2KQogICAgICAgIHsKICAgICAgICAgIGlmIChfX3RyYWl0c190eXBlOjpl
cShfX2MsIF9femVybykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICAgICAgKytfX3BvczsK
ICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGlmICgoX190cmFp
dHNfdHlwZTo6ZXEoX19jLCBfX3gpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19YKSkKICAg
ICAgICAgICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAg
ICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgoKCiAgICAgIHNpemVf
dCBfX2xlbjsKICAgICAgaWYgKF9fYmFzZSA9PSAxNikKICAgICAgICBfX2xlbiA9IF9NX3NpemU7
CiAgICAgIGVsc2UKICAgICAgICBfX2xlbiA9IF9fYmFzZTsKCgogICAgICBjaGFyX3R5cGUgX193
YXRvbXNbX01fc2l6ZV07CiAgICAgIF9fY3R5cGUud2lkZW4oX1NfYXRvbXMsIF9TX2F0b21zICsg
X19sZW4sIF9fd2F0b21zKTsKICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAgIGNv
bnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBib29sIF9fY2hl
Y2tfZ3JvdXBpbmcgPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7
CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwogICAg
ICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX3AgPSBfX3RyYWl0c190eXBlOjpmaW5kKF9fd2F0b21zLCBfX2xlbiwgX19jKTsKCgog
ICAgICAgICAgaWYgKF9fcCAmJiAhX190cmFpdHNfdHlwZTo6ZXEoX19jLCBjaGFyX3R5cGUoKSkp
CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19fcCAtIF9f
d2F0b21zXTsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICsrX19zZXBfcG9z
OwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgIH0KICAgICAgICAg
IGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19zZXApICYmIF9fY2hlY2tfZ3JvdXBp
bmcpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIGlmIChfX3NlcF9wb3MpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nh
c3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAg
ICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9
IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQoKICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgfQoKCgogICAgICBpZiAoX19jaGVja19ncm91cGluZyAmJiBfX2ZvdW5kX2dyb3VwaW5n
LnNpemUoKSkKICAgICAgICB7CgogICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNf
Y2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhf
X2dyb3VwaW5nLCBfX2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jh
c2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBjaGFyKCk7CiAgICAgIGlm
IChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAg
ICByZXR1cm4gX19iZWc7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoK
ICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0
CiAgICB7CgogICAgICBpZiAoIShfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSkK
ICAgICAgICB7CgoKICAgICAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgICAgICBpbnQgX19iYXNl
OwogICAgICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9f
ZXJyLCBfX3h0cmMsIF9fYmFzZSk7CgogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAg
ICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xv
Y2FsZSwgX19iYXNlKTsKICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQp
ICYmIF9fdWwgPD0gMSkKICAgICAgICAgICAgX192ID0gX191bDsKICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIGVs
c2UKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFp
dHNfdHlwZTsKICAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdf
dHlwZTsKCiAgICAgICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICAgICAg
Y29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+
ID4oX19sb2MpOwogICAgICAgICAgY29uc3QgX19zdHJpbmdfdHlwZSBfX3RydWUgPSBfX25wLnRy
dWVuYW1lKCk7CiAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlIF9fZmFsc2UgPSBfX25wLmZh
bHNlbmFtZSgpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RydWVzID0gX190cnVlLmNf
c3RyKCk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmFsc2VzID0gX19mYWxzZS5jX3N0
cigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdHJ1ZW4gPSBfX3RydWUuc2l6ZSgpIC0gMTsK
ICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZhbHNlbiA9IF9fZmFsc2Uuc2l6ZSgpIC0gMTsKCiAg
ICAgICAgICBmb3IgKHNpemVfdCBfX24gPSAwOyBfX2JlZyAhPSBfX2VuZDsgKytfX24pCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnKys7CiAgICAgICAg
ICAgICAgYm9vbCBfX3Rlc3RmID0gX19uIDw9IF9fZmFsc2VuCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPyBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fZmFsc2VzW19fbl0pIDogZmFsc2U7
CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3R0ID0gX19uIDw9IF9fdHJ1ZW4KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA/IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX190cnVlc1tfX25dKSA6
IGZhbHNlOwogICAgICAgICAgICAgIGlmICghKF9fdGVzdGYgfHwgX190ZXN0dCkpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Owog
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBl
bHNlIGlmIChfX3Rlc3RmICYmIF9fbiA9PSBfX2ZhbHNlbikKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgX192ID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0dCAmJiBfX24gPT0gX190cnVl
bikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192ID0gMTsKICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAg
IGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJp
dDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0No
YXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
bG9uZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19i
YXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19l
cnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCks
IF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9J
bkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBl
IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKICAg
ICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRy
YWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAg
IHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCks
IF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBp
b3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8dW5z
aWduZWQgc2hvcnQ+OjptYXgoKSkKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBz
aG9ydD4oX191bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp
dDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl
cj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz
ZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGlu
dCYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNl
OwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIs
IF9feHRyYywgX19iYXNlKTsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZl
cnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2Up
OwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX191
bCA8PSBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSkKICAgICAgICBfX3YgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCB1bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0
cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcs
IF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9f
dihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAg
IHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg
ICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv
LAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNv
bnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9f
YmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBf
X2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2Vyciwg
X1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5n
IF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChf
X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVy
dF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsK
ICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBj
b25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7
CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy
LCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2Vy
ciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8
X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9f
eHRyYy5yZXNlcnZlKDMyKTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBf
X2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5j
X3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu
SXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUg
X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgewogICAgICBz
dHJpbmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01f
ZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBf
X2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwog
ICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6
CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf
X2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29u
c3QKICAgIHsKCiAgICAgIHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOwogICAg
ICBmbXRmbGFncyBfX2ZtdCA9IF9faW8uZmxhZ3MoKTsKICAgICAgZm10ZmxhZ3MgX19mbXRtYXNr
ID0gfihpb3NfYmFzZTo6c2hvd3BvcyB8IGlvc19iYXNlOjpiYXNlZmllbGQKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJu
YWwpOwogICAgICBfX2lvLmZsYWdzKF9fZm10ICYgX19mbXRtYXNrIHwgKGlvc19iYXNlOjpoZXgg
fCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKCiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBf
X2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBf
X2VyciwgX194dHJjLCBfX2Jhc2UpOwoKCiAgICAgIF9faW8uZmxhZ3MoX19mbXQpOwoKICAgICAg
dW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwg
X191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlv
c19iYXNlOjpmYWlsYml0KSkKICAgICAgICBfX3YgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihf
X3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg
ICByZXR1cm4gX19iZWc7CiAgICB9CiMgNjE4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv
Y2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
T3V0SXRlcj4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgIF9PdXRJdGVyCiAg
ICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgICBfTV9jb252ZXJ0X2Zsb2F0KF9P
dXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19tb2QsCiAg
ICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVCBfX3YpIGNvbnN0CiAgICAgIHsKCgoKCgoKCiAg
ICAgICAgY29uc3QgaW50IF9fbWF4X2RpZ2l0cyA9IG51bWVyaWNfbGltaXRzPF9WYWx1ZVQ+Ojpk
aWdpdHMxMCArIDI7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMgPSBfX2lvLnByZWNpc2lvbigp
OwoKICAgICAgICBpZiAoX19wcmVjID4gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19tYXhfZGln
aXRzKSkKICAgICAgICAgIF9fcHJlYyA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbWF4X2Rp
Z2l0cyk7CgoKICAgICAgICBjaGFyIF9fZmJ1ZlsxNl07CgoKICAgICAgICBpbnQgX19sZW47CgoK
CiAgICAgICAgaW50IF9fY3Nfc2l6ZSA9IF9fbWF4X2RpZ2l0cyAqIDM7CiAgICAgICAgY2hhciog
X19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwoK
ICAgICAgICBjb25zdCBib29sIF9fZnAgPSBfU19mb3JtYXRfZmxvYXQoX19pbywgX19mYnVmLCBf
X21vZCwgX19wcmVjKTsKICAgICAgICBpZiAoX19mcCkKICAgICAgICAgIF9fbGVuID0gX19jb252
ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlLCBfX3ByZWMpOwogICAgICAgIGVsc2UKICAg
ICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1Ziwg
X192LCBfU19jX2xvY2FsZSk7CgoKICAgICAgICBpZiAoX19sZW4gPj0gX19jc19zaXplKQogICAg
ICAgICAgewogICAgICAgICAgICBfX2NzX3NpemUgPSBfX2xlbiArIDE7CiAgICAgICAgICAgIF9f
Y3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAg
ICAgICAgICAgaWYgKF9fZnApCiAgICAgICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92
KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9TX2NfbG9jYWxlLCBfX3ByZWMpOwogICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVm
LCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxl
KTsKICAgICAgICAgIH0KIyA2ODYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2Zh
Y2V0cy50Y2MiIDMKICAgICAgICByZXR1cm4gX01fd2lkZW5fZmxvYXQoX19zLCBfX2lvLCBfX2Zp
bGwsIF9fY3MsIF9fbGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgX091
dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICAgIF9NX2NvbnZlcnRf
aW50KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19t
b2QsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2RsLCBfVmFsdWVUIF9fdikgY29uc3QK
ICAgICAgewoKCgogICAgICAgIGNoYXIgX19mYnVmWzE2XTsKICAgICAgICBfU19mb3JtYXRfaW50
KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fbW9kbCk7CgoKICAgICAgICBpbnQgX19jc19zaXplID0g
NjQ7CiAgICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxs
b2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgIGludCBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19j
cywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKICAg
ICAgICAgIHsKICAgICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAgICBf
X2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAg
ICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1
ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUp
OwogICAgICAgICAgfQoKCgoKCgogICAgICAgIHJldHVybiBfTV93aWRlbl9pbnQoX19zLCBfX2lv
LCBfX2ZpbGwsIF9fY3MsIF9fbGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBf
T3V0SXRlcj46OgogICAgX01fd2lkZW5fZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19p
bywgX0NoYXJUIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAgIGludCBfX2xl
bikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRz
X3R5cGU7CgoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAg
Y29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o
X19sb2MpOwogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0
aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbikpOwoKCiAgICAgIF9DaGFyVCogX193
czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICogX19sZW4gKiAyKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVu
LCBfX3dzKTsKCgogICAgICBjb25zdCBfQ2hhclQqIF9fcDsKICAgICAgY29uc3QgbnVtcHVuY3Q8
X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAg
ICBpZiAoX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dzLCBfX2xlbiwgX19jdHlwZS53aWRl
bignLicpKSkKICAgICAgICBfX3dzW19fcCAtIF9fd3NdID0gX19ucC5kZWNpbWFsX3BvaW50KCk7
CgoKCgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAg
ICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jh
c2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKICAg
ICAgICAgIF9DaGFyVCogX19wMjsKICAgICAgICAgIGludCBfX2RlY2xlbiA9IF9fcCA/IF9fcCAt
IF9fd3MgOiBfX2xlbjsKICAgICAgICAgIF9fcDIgPSBfX2FkZF9ncm91cGluZyhfX3dzMiwgX19u
cC50aG91c2FuZHNfc2VwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91
cGluZy5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcu
Y19zdHIoKSArIF9fZ3JvdXBpbmcuc2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fd3MsIF9fd3MgKyBfX2RlY2xlbik7CiAgICAgICAgICBpbnQgX19uZXdsZW4gPSBfX3Ay
IC0gX193czI7CgoKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfX3RyYWl0c190eXBlOjpjb3B5KF9fcDIsIF9fcCwgX19sZW4gLSBfX2RlY2xlbik7CiAgICAg
ICAgICAgICAgX19uZXdsZW4gKz0gX19sZW4gLSBfX2RlY2xlbjsKICAgICAgICAgICAgfQoKCiAg
ICAgICAgICBfX3dzID0gX193czI7CiAgICAgICAgICBfX2xlbiA9IF9fbmV3bGVuOwogICAgICAg
IH0KCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fd3MsIF9fbGVu
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4K
ICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9NX3dpZGVu
X2ludChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyKiBf
X2NzLAogICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKCgogICAgICBjb25z
dCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+
JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9DaGFy
VCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9D
aGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqIF9fbGVuKSk7CgoKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9D
aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbiAqIDIpKTsK
ICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwoKCiAgICAgIGNv
bnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+
KF9fbG9jKTsKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7
CiAgICAgIGNvbnN0IGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3Mo
KSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAg
ICAgICB7CgoKCgoKICAgICAgICAgIHN0cmVhbXNpemUgX19vZmYgPSAwOwogICAgICAgICAgaWYg
KChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpICYmIF9fbGVuID4gMSkKICAgICAg
ICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpvY3QpCiAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgX19vZmYgPSAxOwogICAgICAgICAgICAgICAgKl9fd3MyID0gKl9fd3M7
CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3Nf
YmFzZTo6aGV4KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9fb2ZmID0gMjsKICAg
ICAgICAgICAgICAgICpfX3dzMiA9ICpfX3dzOwogICAgICAgICAgICAgICAgKihfX3dzMiArIDEp
ID0gKihfX3dzICsgMSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgX0NoYXJUKiBfX3A7CiAg
ICAgICAgICBfX3AgPSBfX2FkZF9ncm91cGluZyhfX3dzMiArIF9fb2ZmLCBfX25wLnRob3VzYW5k
c19zZXAoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSArIF9f
Z3JvdXBpbmcuc2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193cyArIF9f
b2ZmLCBfX3dzICsgX19sZW4pOwogICAgICAgICAgX19sZW4gPSBfX3AgLSBfX3dzMjsKCiAgICAg
ICAgICBfX3dzID0gX193czI7CiAgICAgICAgfQogICAgICByZXR1cm4gX01faW5zZXJ0KF9fcywg
X19pbywgX19maWxsLCBfX3dzLCBfX2xlbik7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFy
VCwgX091dEl0ZXI+OjoKICAgIF9NX2luc2VydChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lv
LCBfQ2hhclQgX19maWxsLCBjb25zdCBfQ2hhclQqIF9fd3MsCiAgICAgICAgICAgICAgaW50IF9f
bGVuKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFp
dHNfdHlwZTsKCiAgICAgIHN0cmVhbXNpemUgX193ID0gX19pby53aWR0aCgpOwogICAgICBfQ2hh
clQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yo
X0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqIF9fdykpOwogICAgICBpZiAoX193ID4gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6
ZT4oX19sZW4pKQogICAgICAgIHsKICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX190cmFpdHNfdHlw
ZT46Ol9TX3BhZChfX2lvLCBfX2ZpbGwsIF9fd3MyLCBfX3dzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdywgX19sZW4sIHRydWUpOwogICAgICAgICAg
X19sZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KF9fdyk7CgogICAgICAgICAgX193cyA9IF9fd3MyOwog
ICAgICAgIH0KICAgICAgX19pby53aWR0aCgwKTsKCgoKICAgICAgZm9yIChpbnQgX19qID0gMDsg
X19qIDwgX19sZW47ICsrX19qLCArK19fcykKICAgICAgICAqX19zID0gX193c1tfX2pdOwogICAg
ICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog
ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs
LCBib29sIF9fdikgY29uc3QKICAgIHsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3Mg
PSBfX2lvLmZsYWdzKCk7CiAgICAgIGlmICgoX19mbGFncyAmIGlvc19iYXNlOjpib29sYWxwaGEp
ID09IDApCiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3V2ID0gX192OwogICAg
ICAgICAgX19zID0gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigp
LCBfX3V2KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVm
IGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CiAgICAgICAgICBsb2NhbGUgX19s
b2MgPSBfX2lvLmdldGxvYygpOwogICAgICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19u
cCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICAgICAgX19zdHJp
bmdfdHlwZSBfX25hbWU7CiAgICAgICAgICBpZiAoX192KQogICAgICAgICAgICBfX25hbWUgPSBf
X25wLnRydWVuYW1lKCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fbmFtZSA9IF9fbnAu
ZmFsc2VuYW1lKCk7CiAgICAgICAgICBfX3MgPSBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGws
IF9fbmFtZS5jX3N0cigpLCBfX25hbWUuc2l6ZSgpKTsKICAgICAgICB9CiAgICAgIHJldHVybiBf
X3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+
CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQo
aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192
KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICdk
JywgY2hhcigpLCBfX3YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAg
ICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws
CiAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252
ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCBjaGFyKCksIF9fdik7IH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg
bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9z
X2Jhc2UmIF9fYiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3QKICAgIHsg
cmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19iLCBfX2ZpbGwsICdkJywgJ2wnLCBfX3YpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0
SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBl
IF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgdW5zaWdu
ZWQgbG9uZyBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywg
X19pbywgX19maWxsLCAndScsICdsJywgX192KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwg
X091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hh
cl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRf
ZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIGNoYXIoKSwgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8
X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf
X2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QK
ICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsICdMJywgX192
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg
X091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJf
dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGNv
bnN0IHZvaWQqIF9fdikgY29uc3QKICAgIHsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxh
Z3MgPSBfX2lvLmZsYWdzKCk7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IH4oaW9z
X2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBwZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFs
KTsKICAgICAgX19pby5mbGFncyhfX2ZsYWdzICYgX19mbXQgfCAoaW9zX2Jhc2U6OmhleCB8IGlv
c19iYXNlOjpzaG93YmFzZSkpOwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBf
TV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCBjaGFyKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGxvbmc+KF9fdikp
OwogICAgICAgICAgX19pby5mbGFncyhfX2ZsYWdzKTsKICAgICAgICB9CiAgICAgIGNhdGNoICgu
Li4pCiAgICAgICAgewogICAgICAgICAgX19pby5mbGFncyhfX2ZsYWdzKTsKICAgICAgICAgIHRo
cm93OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5X2dldDxf
Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf
X2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7CiAgICAgIHN0
cmluZ190eXBlIF9fc3RyOwogICAgICBfX2JlZyA9IHRoaXMtPmRvX2dldChfX2JlZywgX19lbmQs
IF9faW50bCwgX19pbywgX19lcnIsIF9fc3RyKTsKCiAgICAgIGNvbnN0IGludCBfX24gPSBudW1l
cmljX2xpbWl0czxsb25nIGRvdWJsZT46OmRpZ2l0czEwOwogICAgICBjaGFyKiBfX2NzID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19uKSk7CiAgICAgIGNvbnN0IGxvY2Fs
ZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5
cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgX0NoYXJU
KiBfX3djcyA9IF9fc3RyLmNfc3RyKCk7CiAgICAgIF9fY3R5cGUubmFycm93KF9fd2NzLCBfX3dj
cyArIF9fc3RyLnNpemUoKSArIDEsIGNoYXIoKSwgX19jcyk7CiAgICAgIF9fY29udmVydF90b192
KF9fY3MsIF9fdW5pdHMsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
X0luSXRlcgogICAgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJf
dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX191bml0
cykgY29uc3QKICAgIHsKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIHRydWU+IF9f
bW9uZXlfdHJ1ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9u
ZXlfZmFsc2U7CiAgICAgIHR5cGVkZWYgbW9uZXlfYmFzZTo6cGFydCBwYXJ0OwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwoKICAgICAgY29u
c3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgX19tb25leV90cnVl
JiBfX21wdCA9IHVzZV9mYWNldDxfX21vbmV5X3RydWU+KF9fbG9jKTsKICAgICAgY29uc3QgX19t
b25leV9mYWxzZSYgX19tcGYgPSB1c2VfZmFjZXQ8X19tb25leV9mYWxzZT4oX19sb2MpOwogICAg
ICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g
PihfX2xvYyk7CgogICAgICBjb25zdCBtb25leV9iYXNlOjpwYXR0ZXJuIF9fcCA9IF9faW50bCA/
IF9fbXB0Lm5lZ19mb3JtYXQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IF9fbXBmLm5lZ19mb3JtYXQoKTsKCiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9f
cG9zX3NpZ24gPV9faW50bCA/IF9fbXB0LnBvc2l0aXZlX3NpZ24oKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5wb3NpdGl2ZV9zaWduKCk7CiAgICAg
IGNvbnN0IHN0cmluZ190eXBlIF9fbmVnX3NpZ24gPV9faW50bCA/IF9fbXB0Lm5lZ2F0aXZlX3Np
Z24oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5u
ZWdhdGl2ZV9zaWduKCk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX2QgPSBfX2ludGwgPyBfX21w
dC5kZWNpbWFsX3BvaW50KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9f
bXBmLmRlY2ltYWxfcG9pbnQoKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19pbnRs
ID8gX19tcHQudGhvdXNhbmRzX3NlcCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IF9fbXBmLnRob3VzYW5kc19zZXAoKTsKCiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3Vw
aW5nID0gX19pbnRsID8gX19tcHQuZ3JvdXBpbmcoKSA6IF9fbXBmLmdyb3VwaW5nKCk7CgoKICAg
ICAgc3RyaW5nX3R5cGUgX19zaWduOwoKICAgICAgc3RyaW5nIF9fZ3JvdXBpbmdfdG1wOwoKICAg
ICAgaW50IF9fc2VwX3BvcyA9IDA7CgogICAgICBib29sIF9fdGVzdHZhbGlkID0gdHJ1ZTsKCiAg
ICAgIGJvb2wgX190ZXN0ZGVjZm91bmQgPSBmYWxzZTsKCgogICAgICBzdHJpbmdfdHlwZSBfX3Rl
bXBfdW5pdHM7CgogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBjaGFyX3R5cGUg
X19lb2YgPSBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KGNoYXJfdHJhaXRzPGNoYXJfdHlwZT46OmVv
ZigpKTsKICAgICAgZm9yIChpbnQgX19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgNCAm
JiBfX3Rlc3R2YWxpZDsgKytfX2kpCiAgICAgICAgewogICAgICAgICAgcGFydCBfX3doaWNoID0g
c3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOwogICAgICAgICAgc3dpdGNoIChfX3do
aWNoKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpz
eW1ib2w6CiAgICAgICAgICAgICAgICAgIGlmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hv
d2Jhc2UKICAgICAgICAgICAgICAgICAgICAgIHx8IF9faSA8IDIgfHwgX19zaWduLnNpemUoKSA+
IDEKICAgICAgICAgICAgICAgICAgICAgIHx8ICgoc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxk
WzNdKSAhPSBtb25leV9iYXNlOjpub25lKQogICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9f
aSA9PSAyKSkKICAgICAgICAgICAgICAgICAgICB7CgoKCgoKICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0cmluZ190eXBlIF9fc3ltYm9sID0gX19pbnRsID8gX19tcHQuY3Vycl9zeW1ib2wo
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6IF9fbXBmLmN1cnJfc3ltYm9sKCk7CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUg
X19sZW4gPSBfX3N5bWJvbC5zaXplKCk7CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUg
X19qID0gMDsKICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9faiA8IF9fbGVuICYmIF9fc3ltYm9sW19fal0g
PT0gX19jKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICArK19fajsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAgICAgICBpZiAoX19qICE9
IF9fbGVuICYmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpKQogICAgICAgICAg
ICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6
OnNpZ246CgogICAgICAgICAgICAgICAgICBpZiAoX19wb3Nfc2lnbi5zaXplKCkgJiYgX19uZWdf
c2lnbi5zaXplKCkpCiAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgaWYg
KF9fYyA9PSBfX3Bvc19zaWduWzBdKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICBfX3NpZ24gPSBfX3Bvc19zaWduOwogICAgICAgICAgICAgICAgICAgICAg
ICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKF9fYyA9PSBfX25lZ19zaWduWzBdKQogICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICBfX3NpZ24gPSBfX25lZ19zaWduOwogICAgICAg
ICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZh
bGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoX19wb3Nfc2lnbi5zaXplKCkgJiYgX19jID09IF9fcG9zX3NpZ25bMF0pCiAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19wb3Nfc2lnbjsKICAg
ICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX25lZ19zaWduLnNpemUoKSAmJiBfX2MgPT0g
X19uZWdfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICBfX3NpZ24gPSBfX25lZ19zaWduOwogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19f
YmVnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjp2YWx1ZToKCgogICAgICAgICAgICAgICAgICB3
aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfX2N0eXBl
LmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgKF9fYyA9PSBfX2QgJiYgIV9fdGVzdGRlY2ZvdW5kKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IF9fYyA9PSBfX3NlcCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2QpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nX3RtcCArPSBzdGF0aWNfY2FzdDxjaGFy
PihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgX190ZXN0ZGVjZm91bmQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19z
ZXApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nX3RtcCArPSBzdGF0aWNfY2FzdDxj
aGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NlcF9wb3Mg
PSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVtcF91bml0cyArPSBfX2M7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug
bW9uZXlfYmFzZTo6c3BhY2U6CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6Om5vbmU6
CgogICAgICAgICAgICAgICAgICBpZiAoX19pICE9IDMpCiAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9fY3R5cGUu
aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAq
KCsrX19iZWcpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICB9CgoKICAgICAgaWYgKF9fc2lnbi5zaXplKCkgPiAxKQogICAgICAgIHsKICAgICAgICAg
IHNpemVfdHlwZSBfX2xlbiA9IF9fc2lnbi5zaXplKCk7CiAgICAgICAgICBzaXplX3R5cGUgX19p
ID0gMTsKICAgICAgICAgIGZvciAoOyBfX2MgIT0gX19lb2YgJiYgX19pIDwgX19sZW47ICsrX19p
KQogICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19jICE9IF9fc2lnbltfX2ld
KQogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CgogICAgICAgICAgaWYgKF9faSAhPSBf
X2xlbikKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICB9CgoKICAgICAg
d2hpbGUgKF9fdGVtcF91bml0c1swXSA9PSBfX2N0eXBlLndpZGVuKCcwJykpCiAgICAgICAgX190
ZW1wX3VuaXRzLmVyYXNlKF9fdGVtcF91bml0cy5iZWdpbigpKTsKCiAgICAgIGlmIChfX3NpZ24u
c2l6ZSgpICYmIF9fc2lnbiA9PSBfX25lZ19zaWduKQogICAgICAgIF9fdGVtcF91bml0cy5pbnNl
cnQoX190ZW1wX3VuaXRzLmJlZ2luKCksIF9fY3R5cGUud2lkZW4oJy0nKSk7CgoKICAgICAgaWYg
KF9fZ3JvdXBpbmcuc2l6ZSgpICYmIF9fZ3JvdXBpbmdfdG1wLnNpemUoKSkKICAgICAgICB7CiAg
ICAgICAgICBpZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZ3JvdXBpbmdfdG1w
KSkKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICB9CgoKICAgICAgaWYg
KF9fYyA9PSBfX2VvZikKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwoKCiAgICAg
IGlmICghX190ZXN0dmFsaWQgfHwgIV9fdGVtcF91bml0cy5zaXplKCkpCiAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIGVsc2UKCiAgICAgICAgX190ZW1wX3VuaXRzLnN3
YXAoX191bml0cyk7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbW9uZXlfcHV0
PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50
bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgbG9uZyBkb3Vi
bGUgX191bml0cykgY29uc3QKICAgIHsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5n
ZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxj
dHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGludCBfX2NzX3NpemUgPSA2NDsKICAgICAg
Y2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6
ZSkpOwogICAgICBpbnQgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwg
IiUuMDFMZiIsIF9fdW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Nf
Y19sb2NhbGUpOwoKICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKICAgICAgICB7CiAgICAg
ICAgICBfX2NzX3NpemUgPSBfX2xlbiArIDE7CiAgICAgICAgICBfX2NzID0gc3RhdGljX2Nhc3Q8
Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgICAgICBfX2xlbiA9IF9f
Y29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCAiJS4wMUxmIiwgX191bml0cywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CiAgICAgICAgfQoKCgoK
CgoKICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2Fs
bG9jYShzaXplb2YoX0NoYXJUKSAqIF9fY3Nfc2l6ZSkpOwogICAgICBfX2N0eXBlLndpZGVuKF9f
Y3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CiAgICAgIHN0cmluZ190eXBlIF9fZGlnaXRzKF9fd3Mp
OwogICAgICByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9f
ZGlnaXRzKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
SXRlcj4KICAgIF9PdXRJdGVyCiAgICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAg
ZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90
eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0
CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBzaXpl
X3R5cGU7CiAgICAgIHR5cGVkZWYgbW9uZXlfYmFzZTo6cGFydCBwYXJ0OwoKICAgICAgY29uc3Qg
bG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fd2lk
dGggPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9faW8ud2lkdGgoKSk7CgoKICAgICAgdHlwZWRl
ZiBtb25leXB1bmN0PF9DaGFyVCwgdHJ1ZT4gX19tb25leV90cnVlOwogICAgICB0eXBlZGVmIG1v
bmV5cHVuY3Q8X0NoYXJULCBmYWxzZT4gX19tb25leV9mYWxzZTsKICAgICAgY29uc3QgX19tb25l
eV90cnVlJiBfX21wdCA9IHVzZV9mYWNldDxfX21vbmV5X3RydWU+KF9fbG9jKTsKICAgICAgY29u
c3QgX19tb25leV9mYWxzZSYgX19tcGYgPSB1c2VfZmFjZXQ8X19tb25leV9mYWxzZT4oX19sb2Mp
OwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9D
aGFyVD4gPihfX2xvYyk7CgoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19iZWcgPSBfX2RpZ2l0
cy5kYXRhKCk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19lbmQgPSBfX2JlZyArIF9fZGlnaXRz
LnNpemUoKTsKICAgICAgbW9uZXlfYmFzZTo6cGF0dGVybiBfX3A7CiAgICAgIHN0cmluZ190eXBl
IF9fc2lnbjsKICAgICAgaWYgKCpfX2JlZyAhPSBfX2N0eXBlLndpZGVuKCctJykpCiAgICAgICAg
ewogICAgICAgICAgX19wID0gX19pbnRsID8gX19tcHQucG9zX2Zvcm1hdCgpIDogX19tcGYucG9z
X2Zvcm1hdCgpOwogICAgICAgICAgX19zaWduID1fX2ludGwgPyBfX21wdC5wb3NpdGl2ZV9zaWdu
KCkgOiBfX21wZi5wb3NpdGl2ZV9zaWduKCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg
ewogICAgICAgICAgX19wID0gX19pbnRsID8gX19tcHQubmVnX2Zvcm1hdCgpIDogX19tcGYubmVn
X2Zvcm1hdCgpOwogICAgICAgICAgX19zaWduID1fX2ludGwgPyBfX21wdC5uZWdhdGl2ZV9zaWdu
KCkgOiBfX21wZi5uZWdhdGl2ZV9zaWduKCk7CiAgICAgICAgICArK19fYmVnOwogICAgICAgIH0K
CgogICAgICBfX2VuZCA9IF9fY3R5cGUuc2Nhbl9ub3QoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYmVn
LCBfX2VuZCk7CiAgICAgIGlmIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CgoKCiAgICAgICAg
ICBzdHJpbmdfdHlwZSBfX3JlczsKICAgICAgICAgIHN0cmluZ190eXBlIF9fdmFsdWU7CiAgICAg
ICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3N5bWJvbCA9IF9faW50bCA/IF9fbXB0LmN1cnJfc3lt
Ym9sKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19t
cGYuY3Vycl9zeW1ib2woKTsKCgogICAgICAgICAgY29uc3QgaW50IF9fZnJhYyA9IF9faW50bCA/
IF9fbXB0LmZyYWNfZGlnaXRzKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiBfX21wZi5mcmFjX2RpZ2l0cygpOwogICAgICAgICAgaWYgKF9fZnJhYyA+IDApCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQu
ZGVjaW1hbF9wb2ludCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6IF9fbXBmLmRlY2ltYWxfcG9pbnQoKTsKICAgICAgICAgICAgICBpZiAoX19lbmQgLSBfX2Jl
ZyA+PSBfX2ZyYWMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUg
PSBzdHJpbmdfdHlwZShfX2VuZCAtIF9fZnJhYywgX19lbmQpOwogICAgICAgICAgICAgICAgICBf
X3ZhbHVlLmluc2VydChfX3ZhbHVlLmJlZ2luKCksIF9fZCk7CiAgICAgICAgICAgICAgICAgIF9f
ZW5kIC09IF9fZnJhYzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19i
ZWcsIF9fZW5kKTsKICAgICAgICAgICAgICAgICAgaW50IF9fcGFkZGVjID0gX19mcmFjIC0gKF9f
ZW5kIC0gX19iZWcpOwogICAgICAgICAgICAgICAgICBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlw
ZS53aWRlbignMCcpOwogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydChfX3ZhbHVlLmJl
Z2luKCksIF9fcGFkZGVjLCBfX3plcm8pOwogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2Vy
dChfX3ZhbHVlLmJlZ2luKCksIF9fZCk7CiAgICAgICAgICAgICAgICAgIF9fYmVnID0gX19lbmQ7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCgoKICAgICAgICAgIGlmIChfX2JlZyAh
PSBfX2VuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3Vw
aW5nID0gX19pbnRsID8gX19tcHQuZ3JvdXBpbmcoKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZ3JvdXBpbmcoKTsKICAgICAgICAgICAgICBp
ZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi50
aG91c2FuZHNfc2VwKCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2JlZyA9IF9f
Z3JvdXBpbmcuY19zdHIoKTsKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19nZW5kID0g
X19nYmVnICsgX19ncm91cGluZy5zaXplKCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBf
X24gPSAoX19lbmQgLSBfX2JlZykgKiAyOwogICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fd3My
ID0KICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxs
b2NhKHNpemVvZihfQ2hhclQpICogX19uKSk7CiAgICAgICAgICAgICAgICAgIF9DaGFyVCogX193
c19lbmQgPSBfX2FkZF9ncm91cGluZyhfX3dzMiwgX19zZXAsIF9fZ2JlZywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2VuZCwgX19iZWcsIF9f
ZW5kKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoMCwgX193czIsIF9fd3NfZW5k
IC0gX193czIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgIF9fdmFsdWUuaW5zZXJ0KDAsIHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCkpOwogICAg
ICAgICAgICB9CgoKICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2YgPSBfX2lvLmZsYWdz
KCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBf
X3ZhbHVlLnNpemUoKSArIF9fc2lnbi5zaXplKCk7CiAgICAgICAgICBfX2xlbiArPSAoX19pby5m
bGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSA/IF9fc3ltYm9sLnNpemUoKSA6IDA7CiAgICAg
ICAgICBib29sIF9fdGVzdGlwYWQgPSBfX2YgPT0gaW9zX2Jhc2U6OmludGVybmFsICYmIF9fbGVu
IDwgX193aWR0aDsKCgogICAgICAgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgNDsgKytfX2kp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxw
YXJ0PihfX3AuZmllbGRbX19pXSk7CiAgICAgICAgICAgICAgc3dpdGNoIChfX3doaWNoKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzeW1ib2w6CiAg
ICAgICAgICAgICAgICAgIGlmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpCiAg
ICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19zeW1ib2w7CiAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgoKCgogICAgICAgICAg
ICAgICAgICBpZiAoX19zaWduLnNpemUoKSkKICAgICAgICAgICAgICAgICAgICBfX3JlcyArPSBf
X3NpZ25bMF07CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBt
b25leV9iYXNlOjp2YWx1ZToKICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX192YWx1ZTsKICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNw
YWNlOgoKCgogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0aXBhZCkKICAgICAgICAgICAgICAg
ICAgICBfX3JlcyArPSBzdHJpbmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7CiAgICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX3JlcyArPSBfX2N0eXBlLndp
ZGVuKF9fZmlsbCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz
ZSBtb25leV9iYXNlOjpub25lOgogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0aXBhZCkKICAg
ICAgICAgICAgICAgICAgICBfX3JlcyArPSBzdHJpbmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9f
ZmlsbCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICB9CgoKICAgICAgICAgIGlmIChfX3NpZ24uc2l6ZSgpID4gMSkKICAgICAgICAgICAgX19y
ZXMgKz0gc3RyaW5nX3R5cGUoX19zaWduLmJlZ2luKCkgKyAxLCBfX3NpZ24uZW5kKCkpOwoKCiAg
ICAgICAgICBfX2xlbiA9IF9fcmVzLnNpemUoKTsKICAgICAgICAgIGlmIChfX3dpZHRoID4gX19s
ZW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19mID09IGlvc19iYXNlOjpsZWZ0
KQoKICAgICAgICAgICAgICAgIF9fcmVzLmFwcGVuZChfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7
CiAgICAgICAgICAgICAgZWxzZQoKICAgICAgICAgICAgICAgIF9fcmVzLmluc2VydCgwLCBzdHJp
bmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCkpOwogICAgICAgICAgICAgIF9fbGVuID0g
X193aWR0aDsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBmb3IgKHNpemVfdHlwZSBfX2ogPSAw
OyBfX2ogPCBfX2xlbjsgKytfX2osICsrX19zKQogICAgICAgICAgICAqX19zID0gX19yZXNbX19q
XTsKICAgICAgICB9CiAgICAgIF9faW8ud2lkdGgoMCk7CiAgICAgIHJldHVybiBfX3M7CiAgICB9
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB0
aW1lX2Jhc2U6OmRhdGVvcmRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6ZG9fZGF0
ZV9vcmRlcigpIGNvbnN0CiAgICB7IHJldHVybiB0aW1lX2Jhc2U6Om5vX29yZGVyOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIHZvaWQKICAgIHRp
bWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KGl0ZXJf
dHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCkgY29uc3QKICAgIHsK
ICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0No
YXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2Mp
OwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9D
aGFyVD4gPihfX2xvYyk7CiAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJfdHJhaXRzPF9DaGFyVD46
Omxlbmd0aChfX2Zvcm1hdCk7CgogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2JlZyAhPSBf
X2VuZCAmJiBfX2kgPCBfX2xlbiAmJiAhX19lcnI7ICsrX19pKQogICAgICAgIHsKICAgICAgICAg
IGNoYXIgX19jID0gX19mb3JtYXRbX19pXTsKICAgICAgICAgIGlmIChfX2MgPT0gJyUnKQogICAg
ICAgICAgICB7CgogICAgICAgICAgICAgIF9fYyA9IF9fZm9ybWF0WysrX19pXTsKICAgICAgICAg
ICAgICBjaGFyIF9fbW9kID0gMDsKICAgICAgICAgICAgICBpbnQgX19tZW0gPSAwOwogICAgICAg
ICAgICAgIGlmIChfX2MgPT0gJ0UnIHx8IF9fYyA9PSAnTycpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIF9fbW9kID0gX19jOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX2Zv
cm1hdFsrK19faV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc3dpdGNoIChfX2Mp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fY3M7CiAg
ICAgICAgICAgICAgICAgIF9DaGFyVCBfX3djc1sxMF07CiAgICAgICAgICAgICAgICBjYXNlICdh
JzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlzMVs3XTsKICAgICAg
ICAgICAgICAgICAgX190cC5fTV9kYXlzX2FiYnJldmlhdGVkKF9fZGF5czEpOwogICAgICAgICAg
ICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2Rh
eXMxLCA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0EnOgoKICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2RheXMyWzddOwogICAgICAgICAgICAgICAgICBfX3Rw
Ll9NX2RheXMoX19kYXlzMik7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2Jl
ZywgX19lbmQsIF9fdG0tPnRtX3dkYXksIF9fZGF5czIsIDcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgY2FzZSAnaCc6CiAgICAgICAgICAgICAgICBjYXNlICdiJzoKCiAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHMxWzEyXTsKICAgICAgICAgICAgICAgICAgX190
cC5fTV9tb250aHNfYWJicmV2aWF0ZWQoX19tb250aHMxKTsKICAgICAgICAgICAgICAgICAgX01f
ZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRoczEsIDEyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0InOgoKICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhcl90eXBlKiBfX21vbnRoczJbMTJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX21v
bnRocyhfX21vbnRoczIpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcs
IF9fZW5kLCBfX3RtLT50bV9tb24sIF9fbW9udGhzMiwgMTIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgY2FzZSAnYyc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZHRb
Ml07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF0ZV90aW1lX2Zvcm1hdHMoX19kdCk7CiAg
ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19k
dFswXSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnZCc6
CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRt
X21kYXksIDEsIDMxLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBl
LCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAn
RCc6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVtLyVkLyV5IjsKICAgICAgICAgICAgICAg
ICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgOSwgX193Y3MpOwogICAgICAgICAgICAgICAg
ICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2NzKTsKICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdIJzoKCiAgICAgICAgICAgICAg
ICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1faG91ciwgMCwgMjMsIDIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdJJzoKCiAgICAgICAgICAg
ICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1faG91ciwgMSwgMTIs
IDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdtJzoKCiAgICAgICAg
ICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX19tZW0sIDEsIDEyLCAyLCBf
X2N0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAg
ICAgICAgICAgIGlmICghX19lcnIpCiAgICAgICAgICAgICAgICAgICAgX190bS0+dG1fbW9uID0g
X19tZW0gLSAxOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug
J00nOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3Rt
LT50bV9taW4sIDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0
eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz
ZSAnbic6CiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09
ICdcbicpCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1InOgoKICAgICAgICAgICAg
ICAgICAgX19jcyA9ICIlSDolTSI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19j
cywgX19jcyArIDYsIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9y
bWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgY2FzZSAnUyc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShf
X2JlZywgX19lbmQsIF9fdG0tPnRtX3NlYywgMCwgNTksIDIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICBjYXNlICd0JzoKICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUubmFy
cm93KCpfX2JlZywgMCkgPT0gJ1x0JykKICAgICAgICAgICAgICAgICAgICArK19fYmVnOwogICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp
bGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdUJzoK
CiAgICAgICAgICAgICAgICAgIF9fY3MgPSAiJUg6JU06JVMiOwogICAgICAgICAgICAgICAgICBf
X2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA5LCBfX3djcyk7CiAgICAgICAgICAgICAgICAgIF9N
X2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3gnOgoKICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhcl90eXBlKiBfX2RhdGVzWzJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2Rh
dGVfZm9ybWF0cyhfX2RhdGVzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9y
bWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2RhdGVzWzBdKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICBjYXNlICdYJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJf
dHlwZSogX190aW1lc1syXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV90aW1lX2Zvcm1hdHMo
X190aW1lcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywg
X19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX190aW1lc1swXSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgY2FzZSAneSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywg
X19lbmQsIF9fdG0tPnRtX3llYXIsIDAsIDk5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgY2FzZSAnWSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2Jl
ZywgX19lbmQsIF9fbWVtLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKSwgNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAg
ICAgICAgICAgICAgIF9fdG0tPnRtX3llYXIgPSBfX21lbSAtIDE5MDA7CiAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnWic6CgogICAgICAgICAgICAgICAgICBp
ZiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjp1cHBlciwgKl9fYmVnKSkKICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpbnQgX190bXA7CiAgICAgICAgICAgICAgICAg
ICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfU190aW1lem9uZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQsIF9fZXJyKTsKCgogICAg
ICAgICAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgICAgICAgICAg
ICAgICAgIGlmICghX19lcnIgJiYgX190bXAgPT0gMAogICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIChfX2MgPT0gX19jdHlwZS53aWRlbignLScpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IF9fYyA9PSBfX2N0eXBlLndpZGVuKCcrJykpKQogICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5k
LCBfX3RtcCwgMCwgMjMsIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9leHRyYWN0
X251bShfX2JlZywgX19lbmQsIF9fdG1wLCAwLCA1OSwgMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsK
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CgogICAgICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19jdHlwZS5uYXJy
b3coKl9fYmVnLCAwKSkKICAgICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9J
bkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYg
X19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICBpbnQgX19taW4sIGludCBf
X21heCwgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgY29uc3QgY3R5cGU8X0NoYXJU
PiYgX19jdHlwZSwKICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vycikg
Y29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9faSA9IDA7CiAgICAgIHN0cmluZyBfX2RpZ2l0czsK
ICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19i
ZWc7CiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBfX2xlbgogICAgICAgICAg
ICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKSkKICAgICAgICB7CiAgICAg
ICAgICBfX2RpZ2l0cyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIDApOwogICAgICAgICAgX19jID0g
KigrK19fYmVnKTsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgaWYgKF9faSA9PSBf
X2xlbikKICAgICAgICB7CiAgICAgICAgICBpbnQgX192YWx1ZSA9IGF0b2koX19kaWdpdHMuY19z
dHIoKSk7CiAgICAgICAgICBpZiAoX19taW4gPD0gX192YWx1ZSAmJiBfX3ZhbHVlIDw9IF9fbWF4
KQogICAgICAgICAgICBfX21lbWJlciA9IF9fdmFsdWU7CiAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX190
ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCkKICAgICAgICBfX2VyciB8
PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
OjoKICAgIF9NX2V4dHJhY3RfbmFtZShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5k
LCBpbnQmIF9fbWVtYmVyLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFt
ZXMsIHNpemVfdCBfX2luZGV4bGVuLAogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VycikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+
IF9fdHJhaXRzX3R5cGU7CiAgICAgIGludCogX19tYXRjaGVzID0gc3RhdGljX2Nhc3Q8aW50Kj4o
X19idWlsdGluX2FsbG9jYShzaXplb2YoaW50KSAqIF9faW5kZXhsZW4pKTsKICAgICAgc2l6ZV90
IF9fbm1hdGNoZXMgPSAwOwogICAgICBzaXplX3QgX19wb3MgPSAwOwogICAgICBib29sIF9fdGVz
dHZhbGlkID0gdHJ1ZTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX25hbWU7CgogICAgICBjaGFy
X3R5cGUgX19jID0gKl9fYmVnOwoKICAgICAgZm9yIChzaXplX3QgX19pMSA9IDA7IF9faTEgPCBf
X2luZGV4bGVuOyArK19faTEpCiAgICAgICAgaWYgKF9fYyA9PSBfX25hbWVzW19faTFdWzBdKQog
ICAgICAgICAgX19tYXRjaGVzW19fbm1hdGNoZXMrK10gPSBfX2kxOwoKICAgICAgd2hpbGUoX19u
bWF0Y2hlcyA+IDEpCiAgICAgICAgewoKICAgICAgICAgIHNpemVfdCBfX21pbmxlbiA9IDEwOwog
ICAgICAgICAgZm9yIChzaXplX3QgX19pMiA9IDA7IF9faTIgPCBfX25tYXRjaGVzOyArK19faTIp
CiAgICAgICAgICAgIF9fbWlubGVuID0gbWluKF9fbWlubGVuLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lc1tfX21hdGNoZXNbX19pMl1dKSk7
CgogICAgICAgICAgaWYgKF9fcG9zIDwgX19taW5sZW4gJiYgX19iZWcgIT0gX19lbmQpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9fYyA9ICooKytf
X2JlZyk7CiAgICAgICAgICAgICAgZm9yIChzaXplX3QgX19pMyA9IDA7IF9faTMgPCBfX25tYXRj
aGVzOyArK19faTMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbmFtZSA9
IF9fbmFtZXNbX19tYXRjaGVzW19faTNdXTsKICAgICAgICAgICAgICAgICAgaWYgKF9fbmFtZVtf
X3Bvc10gIT0gX19jKQogICAgICAgICAgICAgICAgICAgIF9fbWF0Y2hlc1tfX2kzXSA9IF9fbWF0
Y2hlc1stLV9fbm1hdGNoZXNdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgIGlmIChfX25tYXRj
aGVzID09IDEpCiAgICAgICAgewoKICAgICAgICAgIF9fbmFtZSA9IF9fbmFtZXNbX19tYXRjaGVz
WzBdXTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0
aChfX25hbWUpOwogICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19l
bmQgJiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgICsrX19iZWcsICsrX19w
b3M7CgogICAgICAgICAgaWYgKF9fbGVuID09IF9fcG9zKQogICAgICAgICAgICBfX21lbWJlciA9
IF9fbWF0Y2hlc1swXTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBm
YWxzZTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwog
ICAgICBpZiAoIV9fdGVzdHZhbGlkKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg
ICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF90aW1l
KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7
CiAgICAgIF9DaGFyVCBfX3djc1szXTsKICAgICAgY29uc3QgY2hhciogX19jcyA9ICIlWCI7CiAg
ICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29u
c3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX19j
dHlwZS53aWRlbihfX2NzLCBfX2NzICsgMywgX193Y3MpOwogICAgICBfTV9leHRyYWN0X3ZpYV9m
b3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwgX193Y3MpOwogICAgICBpZiAo
X19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAg
cmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg
IGRvX2dldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0p
IGNvbnN0CiAgICB7CiAgICAgIF9DaGFyVCBfX3djc1szXTsKICAgICAgY29uc3QgY2hhciogX19j
cyA9ICIleCI7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBl
PF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9j
KTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgMywgX193Y3MpOwogICAgICBfTV9l
eHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwgX193Y3Mp
OwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVv
ZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9J
bkl0ZXI+OjoKICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8
X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygp
OwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGlt
ZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlzWzdd
OwogICAgICBfX3RwLl9NX2RheXNfYWJicmV2aWF0ZWQoX19kYXlzKTsKICAgICAgaW50IF9fdG1w
d2RheTsKICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXB3ZGF5LCBfX2Rh
eXMsIDcsIF9fZXJyKTsKCgoKCgoKCiAgICAgIGlmICghX19lcnIpCiAgICAgICAgewogICAgICAg
ICAgc2l6ZV90IF9fcG9zID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fZGF5c1tfX3RtcHdkYXld
KTsKICAgICAgICAgIF9fdHAuX01fZGF5cyhfX2RheXMpOwogICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX25hbWUgPSBfX2RheXNbX190bXB3ZGF5XTsKICAgICAgICAgIGlmIChfX25hbWVbX19w
b3NdID09ICpfX2JlZykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBjb25zdCBzaXplX3Qg
X19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgICAgICB3aGls
ZSAoX19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAm
JiBfX25hbWVbX19wb3NdID09ICpfX2JlZykKICAgICAgICAgICAgICAgICsrX19iZWcsICsrX19w
b3M7CiAgICAgICAgICAgICAgaWYgKF9fbGVuICE9IF9fcG9zKQogICAgICAgICAgICAgICAgX19l
cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICghX19l
cnIpCiAgICAgICAgICAgIF9fdG0tPnRtX3dkYXkgPSBfX3RtcHdkYXk7CiAgICAgICAgfQogICAg
ICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsK
ICAgICAgcmV0dXJuIF9fYmVnOwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6CiAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k
LAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxf
Q2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7
CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1l
cHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX21vbnRoc1sx
Ml07CiAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVkKF9fbW9udGhzKTsKICAgICAgaW50
IF9fdG1wbW9uOwogICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcG1vbiwg
X19tb250aHMsIDEyLCBfX2Vycik7CgoKCgoKCgogICAgICBpZiAoIV9fZXJyKQogICAgICAgIHsK
ICAgICAgICAgIHNpemVfdCBfX3BvcyA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX21vbnRoc1tf
X3RtcG1vbl0pOwogICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMpOwogICAgICAgICAg
Y29uc3QgY2hhcl90eXBlKiBfX25hbWUgPSBfX21vbnRoc1tfX3RtcG1vbl07CiAgICAgICAgICBp
ZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAg
Y29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAg
ICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19lbmQKICAgICAgICAg
ICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgICAgICAr
K19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2xlbiAhPSBfX3BvcykKICAgICAg
ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICB9CiAgICAg
ICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBfX3RtLT50bV9tb24gPSBfX3RtcG1vbjsKICAg
ICAgICB9CgogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh
c2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8u
Z2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8
Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAg
ICAgIHNpemVfdCBfX2kgPSAwOwogICAgICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIHdoaWxlIChf
X2kgPCA0ICYmIF9fYmVnICE9IF9fZW5kICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQs
IF9fYykpCiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMgKz0gX19jdHlwZS5uYXJyb3coX19j
LCAwKTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICArK19faTsKICAgICAg
ICB9CiAgICAgIGlmIChfX2kgPT0gMiB8fCBfX2kgPT0gNCkKICAgICAgICB7CiAgICAgICAgICBs
b25nIF9fbDsKICAgICAgICAgIF9fY29udmVydF90b192KF9fZGlnaXRzLmNfc3RyKCksIF9fbCwg
X19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZh
aWxiaXQpICYmIF9fbCA8PSAyMTQ3NDgzNjQ3KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
X19sID0gX19pID09IDIgPyBfX2wgOiBfX2wgLSAxOTAwOwogICAgICAgICAgICAgIF9fdG0tPnRt
X3llYXIgPSBzdGF0aWNfY2FzdDxpbnQ+KF9fbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgaWYgKF9f
YmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJl
dHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
T3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAg
ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29uc3QgdG0q
IF9fdG0sCiAgICAgICAgY29uc3QgX0NoYXJUKiBfX2JlZywgY29uc3QgX0NoYXJUKiBfX2VuZCkg
Y29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5
cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s
b2MpOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgY2hh
ciBfX2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgKytfX2JlZzsKICAg
ICAgICAgIGlmIChfX2MgPT0gJyUnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhciBf
X2Zvcm1hdDsKICAgICAgICAgICAgICBjaGFyIF9fbW9kID0gMDsKICAgICAgICAgICAgICBzaXpl
X3QgX19sZW4gPSAxOwogICAgICAgICAgICAgIF9fYyA9IF9fY3R5cGUubmFycm93KCpfX2JlZywg
MCk7CiAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICBpZiAoX19jID09ICdFJyB8
fCBfX2MgPT0gJ08nKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21vZCA9
IF9fYzsKICAgICAgICAgICAgICAgICAgX19mb3JtYXQgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcs
IDApOwogICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZm9ybWF0ID0gX19jOwogICAgICAgICAgICAg
IF9fcyA9IHRoaXMtPmRvX3B1dChfX3MsIF9faW8sIGNoYXJfdHlwZSgpLCBfX3RtLCBfX2Zvcm1h
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tb2QpOwogICAgICAgICAgICB9
CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAqX19zID0gX19jOwog
ICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g
X19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgX091dEl0ZXIKICAgIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1
dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlLCBjb25zdCB0bSogX190
bSwKICAgICAgICAgICBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kKSBjb25zdAogICAgewogICAg
ICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0
JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fdGlt
ZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJU
PiA+KF9fbG9jKTsKCgoKICAgICAgY29uc3Qgc2l6ZV90IF9fbWF4bGVuID0gNjQ7CiAgICAgIGNo
YXJfdHlwZSogX19yZXMgPQogICAgICAgIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KF9fYnVpbHRp
bl9hbGxvY2Eoc2l6ZW9mKGNoYXJfdHlwZSkgKiBfX21heGxlbikpOwoKCgoKCgogICAgICBjaGFy
X3R5cGUgX19mbXRbNF07CiAgICAgIF9fZm10WzBdID0gX19jdHlwZS53aWRlbignJScpOwogICAg
ICBpZiAoIV9fbW9kKQogICAgICAgIHsKICAgICAgICAgIF9fZm10WzFdID0gX19mb3JtYXQ7CiAg
ICAgICAgICBfX2ZtdFsyXSA9IGNoYXJfdHlwZSgpOwogICAgICAgIH0KICAgICAgZWxzZQogICAg
ICAgIHsKICAgICAgICAgIF9fZm10WzFdID0gX19tb2Q7CiAgICAgICAgICBfX2ZtdFsyXSA9IF9f
Zm9ybWF0OwogICAgICAgICAgX19mbXRbM10gPSBjaGFyX3R5cGUoKTsKICAgICAgICB9CgogICAg
ICBfX3RwLl9NX3B1dChfX3JlcywgX19tYXhsZW4sIF9fZm10LCBfX3RtKTsKCgogICAgICBzaXpl
X3QgX19sZW4gPSBjaGFyX3RyYWl0czxjaGFyX3R5cGU+OjpsZW5ndGgoX19yZXMpOwogICAgICBm
b3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX2xlbjsgKytfX2ksICsrX19zKQogICAgICAgICpf
X3MgPSBfX3Jlc1tfX2ldOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjpfTV9jb21wYXJlKGNv
bnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBzaXplX3QKICAgIGNvbGxhdGU8X0NoYXJUPjo6
X01fdHJhbnNmb3JtKF9DaGFyVCosIGNvbnN0IF9DaGFyVCosIHNpemVfdCkgY29uc3QKICAgIHsg
cmV0dXJuIDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW50CiAgICBjb2xs
YXRlPF9DaGFyVD46OgogICAgZG9fY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBf
Q2hhclQqIF9faGkxLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBf
Q2hhclQqIF9faGkyKSBjb25zdAogICAgewogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX29uZShf
X2xvMSwgX19oaTEpOwogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3R3byhfX2xvMiwgX19oaTIp
OwogICAgICByZXR1cm4gX01fY29tcGFyZShfX29uZS5jX3N0cigpLCBfX3R3by5jX3N0cigpKTsK
ICAgIH0KCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBjb2xsYXRlPF9D
aGFyVD46OnN0cmluZ190eXBlCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAgZG9fdHJhbnNmb3Jt
KGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgewogICAg
ICBzaXplX3QgX19sZW4gPSAoX19oaSAtIF9fbG8pICogMjsKCiAgICAgIF9DaGFyVCogX19jID0K
ICAgICAgICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hh
clQpICogX19sZW4pKTsKICAgICAgc2l6ZV90IF9fcmVzID0gX01fdHJhbnNmb3JtKF9fYywgX19s
bywgX19sZW4pOwoKICAgICAgaWYgKF9fcmVzID49IF9fbGVuKQogICAgICAgIHsKICAgICAgICAg
IF9fYyA9CiAgICAgICAgICAgIHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eo
c2l6ZW9mKF9DaGFyVCkgKiAoX19yZXMgKyAxKSkpOwogICAgICAgICAgX01fdHJhbnNmb3JtKF9f
YywgX19sbywgX19yZXMgKyAxKTsKICAgICAgICB9CiAgICAgIHJldHVybiBzdHJpbmdfdHlwZShf
X2MpOwogICAgfQoKIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvbmcKICAgIGNvbGxh
dGU8X0NoYXJUPjo6CiAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJU
KiBfX2hpKSBjb25zdAogICAgewogICAgICB1bnNpZ25lZCBsb25nIF9fdmFsID0gMDsKICAgICAg
Zm9yICg7IF9fbG8gPCBfX2hpOyArK19fbG8pCiAgICAgICAgX192YWwgPSAqX19sbyArICgoX192
YWwgPDwgNykgfAogICAgICAgICAgICAgICAgICAgICAgIChfX3ZhbCA+PiAobnVtZXJpY19saW1p
dHM8dW5zaWduZWQgbG9uZz46OmRpZ2l0cyAtIDcpKSk7CiAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxsb25nPihfX3ZhbCk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KICAgIHZv
aWQKICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9faW4sIF9UdiYgX19vdXQsIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fY19sb2NhbGUm
IF9fY2xvYywgaW50IF9fYmFzZSA9IDEwKTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2Pgog
ICAgaW50CiAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCBjb25zdCBpbnQgX19zaXpl
LCBjb25zdCBjaGFyKiBfX2ZtdCwKICAgICAgICAgICAgICAgICAgICAgX1R2IF9fdiwgY29uc3Qg
X19jX2xvY2FsZSYsIGludCBfX3ByZWMgPSAtMSk7CiMgMTk5NSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cnVjdCBfX3BhZAogICAgewogICAgICBzdGF0aWMgdm9p
ZAogICAgICBfU19wYWQoaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIF9DaGFyVCogX19u
ZXdzLAogICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX29sZHMsIGNvbnN0IHN0cmVhbXNpemUg
X19uZXdsZW4sCiAgICAgICAgICAgICBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuLCBjb25zdCBi
b29sIF9fbnVtKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIHZvaWQKICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChpb3Nf
YmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQ2hhclQqIF9fbmV3cywgY29uc3QgX0NoYXJUKiBfX29sZHMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuLCBjb25z
dCBib29sIF9fbnVtKQogICAgewogICAgICBzaXplX3QgX19wbGVuID0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihfX25ld2xlbiAtIF9fb2xkbGVuKTsKICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNf
Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX19wbGVuKSk7
CiAgICAgIF9UcmFpdHM6OmFzc2lnbihfX3BhZHMsIF9fcGxlbiwgX19maWxsKTsKCiAgICAgIF9D
aGFyVCogX19iZWc7CiAgICAgIF9DaGFyVCogX19lbmQ7CiAgICAgIHNpemVfdCBfX21vZCA9IDA7
CiAgICAgIHNpemVfdCBfX2JlZ2xlbjsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYWRqdXN0
ID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwoKICAgICAgaWYgKF9fYWRq
dXN0ID09IGlvc19iYXNlOjpsZWZ0KQogICAgICAgIHsKCiAgICAgICAgICBfX2JlZyA9IGNvbnN0
X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgICAgICAgIF9fYmVnbGVuID0gX19vbGRsZW47CiAg
ICAgICAgICBfX2VuZCA9IF9fcGFkczsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYWRqdXN0
ID09IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX251bSkKICAgICAgICB7CgoKCiAgICAgICAgICBs
b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICAgICAgY29uc3QgY3R5cGU8X0NoYXJU
PiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICAgICAg
Y29uc3QgX0NoYXJUIF9fbWludXMgPSBfX2N0eXBlLndpZGVuKCctJyk7CiAgICAgICAgICBjb25z
dCBfQ2hhclQgX19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwogICAgICAgICAgYm9vbCBfX3Rl
c3RzaWduID0gX1RyYWl0czo6ZXEoX19vbGRzWzBdLCBfX21pbnVzKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgX1RyYWl0czo6ZXEoX19vbGRzWzBdLCBfX3BsdXMpOwoKICAgICAgICAg
IGJvb2wgX190ZXN0aGV4ID0gX1RyYWl0czo6ZXEoX19jdHlwZS53aWRlbignMCcpLCBfX29sZHNb
MF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfVHJhaXRzOjplcShfX2N0eXBlLndp
ZGVuKCd4JyksIF9fb2xkc1sxXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9U
cmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJ1gnKSwgX19vbGRzWzFdKSk7CiAgICAgICAgICBpZiAo
X190ZXN0aGV4KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19uZXdzWzBdID0gX19vbGRz
WzBdOwogICAgICAgICAgICAgIF9fbmV3c1sxXSA9IF9fb2xkc1sxXTsKICAgICAgICAgICAgICBf
X21vZCArPSAyOwogICAgICAgICAgICAgIF9fbmV3cyArPSAyOwogICAgICAgICAgICAgIF9fYmVn
ID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAg
IF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMgKyBfX21vZCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdHNpZ24pCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBfVHJhaXRzOjplcSgoX19uZXdzWzBdID0gX19vbGRzWzBdKSwgX19wbHVzKSA/IF9fcGx1
cyA6IF9fbWludXM7CiAgICAgICAgICAgICAgKytfX21vZDsKICAgICAgICAgICAgICArK19fbmV3
czsKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9
IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRz
ICsgX19tb2QpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCiAg
ICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3Bs
ZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgX19i
ZWcgPSBfX3BhZHM7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgIF9fZW5k
ID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMpOwogICAgICAgIH0KICAgICAgX1RyYWl0czo6
Y29weShfX25ld3MsIF9fYmVnLCBfX2JlZ2xlbik7CiAgICAgIF9UcmFpdHM6OmNvcHkoX19uZXdz
ICsgX19iZWdsZW4sIF9fZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3bGVuIC0g
X19iZWdsZW4gLSBfX21vZCk7CiAgICB9CiMgMjA5MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGJv
b2wKICAgIF9fdmVyaWZ5X2dyb3VwaW5nKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBfX2dy
b3VwaW5nLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9fZ3Jv
dXBpbmdfdG1wKQogICAgewogICAgICBpbnQgX19pID0gMDsKICAgICAgaW50IF9faiA9IDA7CiAg
ICAgIGNvbnN0IGludCBfX2xlbiA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBjb25zdCBpbnQg
X19uID0gX19ncm91cGluZ190bXAuc2l6ZSgpOwogICAgICBib29sIF9fdGVzdCA9IHRydWU7CgoK
CgogICAgICB3aGlsZSAoX190ZXN0ICYmIF9faSA8IF9fbiAtIDEpCiAgICAgICAgZm9yIChfX2og
PSAwOyBfX3Rlc3QgJiYgX19qIDwgX19sZW4gJiYgX19pIDwgX19uIC0gMTsgKytfX2osKytfX2kp
CiAgICAgICAgICBfX3Rlc3QgJj0gX19ncm91cGluZ1tfX2pdID09IF9fZ3JvdXBpbmdfdG1wW19f
biAtIF9faSAtIDFdOwoKCiAgICAgIF9faiA9PSBfX2xlbiA/IF9faiA9IDAgOiBfX2o7CiAgICAg
IF9fdGVzdCAmPSBfX2dyb3VwaW5nW19fal0gPj0gX19ncm91cGluZ190bXBbX19uIC0gX19pIC0g
MV07CiAgICAgIHJldHVybiBfX3Rlc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgX0NoYXJUKgogICAgX19hZGRfZ3JvdXBpbmcoX0NoYXJUKiBfX3MsIF9DaGFy
VCBfX3NlcCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2JlZywgY29uc3QgY2hh
ciogX19nZW5kLAogICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0LCBjb25z
dCBfQ2hhclQqIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiAqX19n
YmVnKQogICAgICAgIHsKICAgICAgICAgIF9fcyA9IF9fYWRkX2dyb3VwaW5nKF9fcywgX19zZXAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19nYmVnICsgMSA9PSBfX2dlbmQgPyBf
X2diZWcgOiBfX2diZWcgKyAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2Vu
ZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ2JlZyk7CiAgICAgICAgICBfX2ZpcnN0ID0gX19sYXN0
IC0gKl9fZ2JlZzsKICAgICAgICAgICpfX3MrKyA9IF9fc2VwOwogICAgICAgIH0KICAgICAgZG8K
ICAgICAgICAqX19zKysgPSAqX19maXJzdCsrOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xh
c3QpOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
bW9uZXlwdW5jdDxjaGFyLCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVu
Y3Q8Y2hhciwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1l
PGNoYXIsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8
Y2hhciwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X2dldDxjaGFyPjsKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBudW1wdW5jdDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3RfYnlu
YW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fZ2V0PGNoYXI+OwogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyBudW1fcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBf
X3RpbWVwdW5jdDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8Y2hhcj47
CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4g
dGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRp
bWVfZ2V0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXM8Y2hh
cj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTxjaGFyPjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBjb2RlY3Z0X2J5bmFtZTxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwogIGV4dGVybiB0ZW1w
bGF0ZSBjbGFzcyBjb2xsYXRlPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRl
X2J5bmFtZTxjaGFyPjsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2RlY3Z0PGNoYXIs
IGNoYXIsIG1ic3RhdGVfdD4mCiAgICB1c2VfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0
YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29s
bGF0ZTxjaGFyPiYKICAgIHVzZV9mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFj
ZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBjb25zdCBudW1fcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fZ2V0PGNoYXI+Jgog
ICAgdXNlX2ZhY2V0PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PGNoYXIsIHRydWU+JgogICAgdXNlX2ZhY2V0PG1v
bmV5cHVuY3Q8Y2hhciwgdHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl
CiAgICBjb25zdCBtb25leXB1bmN0PGNoYXIsIGZhbHNlPiYKICAgIHVzZV9mYWNldDxtb25leXB1
bmN0PGNoYXIsIGZhbHNlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGNvbnN0IG1vbmV5X3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDxtb25leV9wdXQ8Y2hhcj4gPihj
b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9nZXQ8Y2hh
cj4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4
dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgX190aW1lcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8
X190aW1lcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBjb25zdCB0aW1lX3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfZ2V0PGNoYXI+
JgogICAgdXNlX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVy
biB0ZW1wbGF0ZQogICAgY29uc3QgbWVzc2FnZXM8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bWVzc2Fn
ZXM8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAg
ICBoYXNfZmFjZXQ8Y3R5cGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs
YXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh
Y2V0PGNvbGxhdGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBib29sCiAgICBoYXNfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX3B1dDxjaGFyPiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxu
dW1fZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9v
bAogICAgaGFzX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29u
c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1v
bmV5X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJv
b2wKICAgIGhhc19mYWNldDxfX3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0
aW1lX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJv
b2wKICAgIGhhc19mYWNldDxtZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKCiAgZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OwogIGV4dGVybiB0ZW1wbGF0
ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPHdjaGFyX3QsIHRydWU+OwogIGV4dGVybiB0ZW1w
bGF0ZSBjbGFzcyBtb25leV9nZXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1v
bmV5X3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Q8d2NoYXJf
dD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTx3Y2hhcl90PjsKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtX2dldDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgbnVtX3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX190aW1lcHVu
Y3Q8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0PHdjaGFyX3Q+Owog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJu
IHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz
cyB0aW1lX2dldF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3Nh
Z2VzPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlc19ieW5hbWU8d2No
YXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGN0eXBlX2J5bmFtZTx3Y2hhcl90PjsKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5hbWU8d2NoYXJfdCwgY2hhciwgbWJzdGF0
ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZTx3Y2hhcl90PjsKICBleHRlcm4g
dGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8d2NoYXJfdD47CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgY29uc3QgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+JgogICAgdXNlX2Zh
Y2V0PGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiA+KGxvY2FsZSBjb25zdCYpOwoK
ICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvbGxhdGU8d2NoYXJfdD4mCiAgICB1c2VfZmFj
ZXQ8Y29sbGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK
ICAgIGNvbnN0IG51bXB1bmN0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG51bXB1bmN0PHdjaGFy
X3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX3B1
dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1fcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxl
Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX2dldDx3Y2hhcl90PiYKICAgIHVz
ZV9mYWNldDxudW1fZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1w
bGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPiYKICAgIHVzZV9mYWNldDxt
b25leXB1bmN0PHdjaGFyX3QsIHRydWU+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1w
bGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT4mCiAgICB1c2VfZmFjZXQ8
bW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBjb25zdCBtb25leV9wdXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bW9uZXlf
cHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29u
c3QgbW9uZXlfZ2V0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+
KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IF9fdGltZXB1bmN0
PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9j
YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9wdXQ8d2NoYXJfdD4mCiAg
ICB1c2VfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJu
IHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX2dldDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDx0aW1l
X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNv
bnN0IG1lc3NhZ2VzPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPHdjaGFyX3Q+ID4o
Y29uc3QgbG9jYWxlJik7CgogZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8
Y3R5cGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi
b29sCiAgICBoYXNfZmFjZXQ8Y29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29u
c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNv
bGxhdGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi
b29sCiAgICBoYXNfZmFjZXQ8bnVtcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX3B1dDx3Y2hhcl90PiA+
KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNl
dDxudW1fZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUm
KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfcHV0PHdj
aGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAg
aGFzX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g
dGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxfX3RpbWVwdW5jdDx3Y2hhcl90PiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0
aW1lX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGJvb2wKICAgIGhhc19mYWNldDx0aW1lX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoK
ICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtZXNzYWdlczx3Y2hhcl90
PiA+KGNvbnN0IGxvY2FsZSYpOwoKfQojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9sb2NhbGUi
IDIgMwojIDM4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL29zdHJlYW0udGNjIiAyIDMKCm5h
bWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRy
eShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcykKICAgIDogX01fb2soX19vcy5n
b29kKCkpLCBfTV9vcyhfX29zKQogICAgewoKICAgICAgaWYgKF9NX29rICYmIF9fb3MudGllKCkp
CiAgICAgICAgX19vcy50aWUoKS0+Zmx1c2goKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwo
X19vc3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg
dHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0
b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8
PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJi
KCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChfX3N0cmVhbWJ1
Zl90eXBlKiBfX3NiaW4pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBp
ZiAoX19jZXJiICYmIF9fc2JpbikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGlmICghX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgdGhp
cy0+cmRidWYoKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFp
bGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgZWxzZSBpZiAoIV9fc2JpbikKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoYm9v
bCBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1w
dXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRoaXMtPmZpbGwoKTsK
ICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYg
aW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f
Zm51bXB1dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGJvb2wgX19iID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgIGlmICgoX19mbXQgJiBpb3NfYmFzZTo6b2N0KSB8fCAo
X19mbXQgJiBpb3NfYmFzZTo6aGV4KSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+
KF9fbik7CiAgICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMs
ICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0
KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICBpZiAo
X19iKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8
KHVuc2lnbmVkIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAg
IGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFp
bGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGxvbmcgX19uKQog
ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBf
X2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10
ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBpZiAoKF9fZm10ICYg
aW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYgaW9zX2Jhc2U6OmhleCkpCiAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fbDsKICAg
ICAgICAgICAgICAgICAgICAgIF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o
X19uKTsKICAgICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywg
KnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQo
KnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgIGlmIChf
X2IpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwo
dW5zaWduZWQgbG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAg
ICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24p
LmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoZG91YmxlIF9fbikK
ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hl
Y2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0
KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQp
KQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMt
PmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwo
Y29uc3Qgdm9pZCogX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlm
IChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVk
KCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpwdXQoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgaW50X3R5cGUgX19wdXQgPSByZGJ1ZigpLT5zcHV0YyhfX2MpOwogICAgICAgICAgaWYgKHRy
YWl0c190eXBlOjplcV9pbnRfdHlwZShfX3B1dCwgdHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6d3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNp
emUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICBzdHJlYW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+
c3B1dG4oX19zLCBfX24pOwogICAgICAgICAgaWYgKCBfX3B1dCAhPSBfX24pCiAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OmZsdXNoKCkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRoaXMtPnJkYnVm
KCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
dHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgpCiAgICB7CiAgICAgIHBvc190eXBl
IF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICBf
X3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jh
c2U6Om91dCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2Vla3AocG9zX3R5cGUg
X19wb3MpCiAgICB7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAgICAg
ICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3Nf
YmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0x
KSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAg
ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrcChvZmZfdHlwZSBf
X29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kKQogICAgewogICAgICBpZiAoIXRoaXMtPmZhaWwo
KSkKICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+
cHVic2Vla29mZihfX29mZiwgX19kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19lcnIg
PT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1l
IF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVh
bXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9
IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAo
X193ICsgMSkpKTsKICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAg
c3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+Ojpf
U19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fYywgX193LCBfX2xlbiwgZmFsc2UpOwogICAg
ICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgw
KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAg
IGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl
YW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBi
YXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFt
ZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJl
YW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0g
c3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193ICsgMSkpOwogICAgICAgICAg
ICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsK
ICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgIF9fcGFkPGNoYXIsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwo
KSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xl
bik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBf
X291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0
LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlw
ZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAg
IHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYg
KF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAg
X0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNp
emVvZihfQ2hhclQpICogX193KSk7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0
YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsKICAgICAgICAgICAg
ICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9f
cGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9f
dywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAg
ICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBf
X291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBl
bHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hh
ciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiBfX29zdHJlYW1fdHlwZTsKCgoKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPiBfX3Ry
YWl0c190eXBlOwoKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIo
X19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9fcykKICAgICAgICB7CiAgICAgICAgICBzaXpl
X3QgX19jbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgICAgICBfQ2hhclQq
IF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hh
clQpICogKF9fY2xlbiArIDEpKSk7CiAgICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kg
PCBfX2NsZW47ICsrX19pKQogICAgICAgICAgICBfX3dzW19faV0gPSBfX291dC53aWRlbihfX3Nb
X19pXSk7CiAgICAgICAgICBfQ2hhclQqIF9fc3RyID0gX193czsKCiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxz
dHJlYW1zaXplPihfX2NsZW4pOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQu
d2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFy
VCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKCiAgICAgICAgICAg
ICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBf
X3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193cywg
X193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX3N0ciA9IF9fcGFkczsKICAg
ICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgw
KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf
b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAg
ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwog
ICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAg
IGlmIChfX2NlcmIgJiYgX19zKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAg
ICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9f
dykpOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1z
aXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7CgogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xl
bikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8Y2hhciwgX1RyYWl0
cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsK
ICAgICAgICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9
IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9f
bGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19v
dXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAg
ICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7
CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwKICAgICAgICAg
ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIp
CiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0
cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihf
X291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJU
KiBfX3MgPSBfX3N0ci5kYXRhKCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0Lndp
ZHRoKCk7CiAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9f
YnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgIHN0cmVhbXNp
emUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX3N0ci5zaXplKCkpOwoKCgogICAg
ICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19wYWQ8
X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywgX19z
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fbGVu
LCBmYWxzZSk7CiAgICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgIF9fbGVu
ID0gX193OwogICAgICAgICAgICB9CiAgICAgICAgICBzdHJlYW1zaXplIF9fcmVzID0gX19vdXQu
cmRidWYoKS0+c3B1dG4oX19zLCBfX2xlbik7CiAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAg
ICAgICAgIGlmIChfX3JlcyAhPSBfX2xlbikKICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9z
X2Jhc2U6OmZhaWxiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCgoK
ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVt
cGxhdGUgb3N0cmVhbSYgZW5kbChvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0m
IGVuZHMob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBmbHVzaChvc3RyZWFt
Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNoYXIp
OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCB1bnNpZ25l
ZCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwg
c2lnbmVkIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJl
YW0mLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwo
b3N0cmVhbSYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVh
bSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3Qgc2lnbmVkIGNoYXIqKTsKCgogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSB3
b3N0cmVhbSYgZW5kbCh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgZW5k
cyh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgZmx1c2god29zdHJlYW0m
KTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCB3Y2hh
cl90KTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBj
aGFyKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBj
b25zdCB3Y2hhcl90Kik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdv
c3RyZWFtJiwgY29uc3QgY2hhciopOwoKfQojIDI3NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvb3N0
cmVhbSIgMiAzCiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc3RyZWFtIiAyIDMKIyAxICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9pc3RyZWFtIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvaXN0cmVhbSIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW0gOiB2aXJ0dWFs
IHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFp
dHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBv
c190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBl
IG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlw
ZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwog
ICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAg
IHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwog
ICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJl
YW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0
ZXI+IF9fbnVtZ2V0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5
cGU7CgogICAgcHJvdGVjdGVkOgoKICAgICAgc3RyZWFtc2l6ZSBfTV9nY291bnQ7CgogICAgcHVi
bGljOgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaXN0cmVhbShfX3N0cmVhbWJ1Zl90eXBl
KiBfX3NiKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5pdChfX3NiKTsKICAgICAgICBfTV9nY291
bnQgPSBzdHJlYW1zaXplKDApOwogICAgICB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19p
c3RyZWFtKCkKICAgICAgeyBfTV9nY291bnQgPSBzdHJlYW1zaXplKDApOyB9CgoKICAgICAgY2xh
c3Mgc2VudHJ5OwogICAgICBmcmllbmQgY2xhc3Mgc2VudHJ5OwoKCgogICAgICBfX2lzdHJlYW1f
dHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1f
dHlwZSYpKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9faW9zX3R5
cGUmICgqX19wZikoX19pb3NfdHlwZSYpKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpOwoKCiAgICAgIF9faXN0cmVh
bV90eXBlJgogICAgICBvcGVyYXRvcj4+KGJvb2wmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlw
ZSYKICAgICAgb3BlcmF0b3I+PihzaG9ydCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPj4oaW50JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPj4odW5zaWduZWQgaW50JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUm
CiAgICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbik7CgoKICAgICAgX19pc3RyZWFtX3R5cGUm
CiAgICAgIG9wZXJhdG9yPj4obG9uZyBsb25nJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUm
CiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0
cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGZsb2F0JiBfX2YpOwoKICAgICAgX19pc3RyZWFt
X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1f
dHlwZSYKICAgICAgb3BlcmF0b3I+Pih2b2lkKiYgX19wKTsKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpOwoKCiAgICAgIGlubGlu
ZSBzdHJlYW1zaXplCiAgICAgIGdjb3VudCh2b2lkKSBjb25zdAogICAgICB7IHJldHVybiBfTV9n
Y291bnQ7IH0KCiAgICAgIGludF90eXBlCiAgICAgIGdldCh2b2lkKTsKCiAgICAgIF9faXN0cmVh
bV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlJiBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5cGUm
CiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2Rl
bGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0KF9fcywgX19uLCB0
aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoX19z
dHJlYW1idWZfdHlwZSYgX19zYiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9f
aXN0cmVhbV90eXBlJgogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYikKICAgICAgeyBy
ZXR1cm4gdGhpcy0+Z2V0KF9fc2IsIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3Ry
ZWFtX3R5cGUmCiAgICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBj
aGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdl
dGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlz
LT5nZXRsaW5lKF9fcywgX19uLCB0aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVh
bV90eXBlJgogICAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24gPSAxLCBpbnRfdHlwZSBfX2RlbGlt
ID0gdHJhaXRzX3R5cGU6OmVvZigpKTsKCiAgICAgIGludF90eXBlCiAgICAgIHBlZWsodm9pZCk7
CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFt
c2l6ZSBfX24pOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICByZWFkc29tZShjaGFyX3R5cGUqIF9f
cywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHB1dGJhY2so
Y2hhcl90eXBlIF9fYyk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgdW5nZXQodm9pZCk7
CgogICAgICBpbnQKICAgICAgc3luYyh2b2lkKTsKCiAgICAgIHBvc190eXBlCiAgICAgIHRlbGxn
KHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKHBvc190eXBlKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBzZWVrZyhvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtk
aXIpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnkKICAgIHsK
ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBl
ZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19j
dHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIF9faW50
X3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBzZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JiBfX2lzLCBib29sIF9fbm9za2lwd3MgPSBmYWxzZSk7CgogICAgICBvcGVyYXRv
ciBib29sKCkgeyByZXR1cm4gX01fb2s7IH0KCiAgICBwcml2YXRlOgogICAgICBib29sIF9NX29r
OwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQmIF9fYyk7CgogIHRlbXBsYXRl
PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3Bl
cmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFy
JiBfX2MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2Mp
KTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLCBf
VHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19p
biwgc2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y
Pj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcyk7Cgog
IHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4m
CiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgdW5zaWdu
ZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
Y2hhcixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+
JiBfX2luLCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtCiAgICA6IHB1YmxpYyBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4sCiAgICAgIHB1YmxpYyBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCgoKICAgICAgdHlwZWRlZiBfQ2hhclQg
Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0
eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIGJhc2ljX2lvc3RyZWFtKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Ni
KQogICAgICA6IF9faXN0cmVhbV90eXBlKF9fc2IpLCBfX29zdHJlYW1fdHlwZShfX3NiKQogICAg
ICB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lvc3RyZWFtKCkgeyB9CiAgICB9OwoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JiBfX2lzKTsKfQoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9pc3Ry
ZWFtLnRjYyIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvaXN0cmVhbS50Y2Mi
IDMKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoK
ICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19u
b3NraXB3cykKICAgIHsKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIHsKICAgICAgICAg
IGlmIChfX2luLnRpZSgpKQogICAgICAgICAgICBfX2luLnRpZSgpLT5mbHVzaCgpOwogICAgICAg
ICAgaWYgKCFfX25vc2tpcHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSB0cmFp
dHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9f
aW4ucmRidWYoKTsKICAgICAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7
CgogICAgICAgICAgICAgIGlmIChfX2luLl9NX2NoZWNrX2ZhY2V0KF9faW4uX01fZmN0eXBlKSkK
ICAgICAgICAgICAgICAgIHdoaWxlICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19l
b2YpCiAgICAgICAgICAgICAgICAgICAgICAgJiYgX19pbi5fTV9mY3R5cGUtPmlzKGN0eXBlX2Jh
c2U6OnNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpKQogICAgICAgICAgICAgICAgICBfX2MgPSBf
X3NiLT5zbmV4dGMoKTsKCgoKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90
eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6
ZW9mYml0KTsKCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBpZiAoX19pbi5nb29kKCkp
CiAgICAgICAgX01fb2sgPSB0cnVlOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX01f
b2sgPSBmYWxzZTsKICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwog
ICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19w
ZikoX19pc3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShf
X2lvc190eXBlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikp
CiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
CiAgICBvcGVyYXRvcj4+KGJvb2wmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz
ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr
X2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz
LCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19l
cnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9f
bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19j
ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29v
ZGJpdCk7CiAgICAgICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr
X2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz
LCAwLCAqdGhpcywgX19lcnIsIF9fbCk7CgoKICAgICAgICAgICAgICBpZiAoIShfX2VyciAmIGlv
c19iYXNlOjpmYWlsYml0KQogICAgICAgICAgICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8c2hv
cnQ+OjptaW4oKSA8PSBfX2wKICAgICAgICAgICAgICAgICAgICAgICYmIF9fbCA8PSBudW1lcmlj
X2xpbWl0czxzaG9ydD46Om1heCgpKSkKICAgICAgICAgICAgICAgIF9fbiA9IF9fbDsKICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg
ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbikKICAgIHsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01f
Zm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9w
ZXJhdG9yPj4oaW50JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNl
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3Rh
dGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGxvbmcgX19sOwogICAgICAgICAg
ICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2Zu
dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX2wpOwoKCiAgICAgICAgICAgICAg
aWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICAgICAgICAgJiYgKG51
bWVyaWNfbGltaXRzPGludD46Om1pbigpIDw9IF9fbAogICAgICAgICAgICAgICAgICAgICAgJiYg
X19sIDw9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKICAgICAgICAgICAgICAgIF9fbiA9
IF9fbDsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFz
ZTo6ZmFpbGJpdDsKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgaW50JiBfX24pCiAg
ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQp
OwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAg
ICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3Nf
YmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2No
ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0
aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
X19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWdu
ZWQgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlv
c19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51
bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBf
X2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyBsb25nJiBfX24pCiAgICB7
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAg
ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwog
ICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAg
ICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj
ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog
ICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l
cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdl
dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRv
cj4+KGZsb2F0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUo
aW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m
bnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMs
IF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19uKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAg
ICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAg
ICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog
ICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJi
KCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlv
c19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01f
Y2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQo
KnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls
KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih2b2lk
KiYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNl
Ojpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkp
CiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg
X19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KQog
ICAgewogICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICAgewogICAgICAgICAgIHRyeQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICBzdHJlYW1zaXplIF9feHRyY3QgPSAwOwogICAgICAgICAgICAgICBpZiAoX19zYm91dCkKICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni
aW4gPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9fY29weV9z
dHJlYW1idWZzKCp0aGlzLCBfX3NiaW4sIF9fc2JvdXQpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgaWYgKCFfX3Nib3V0IHx8ICFfX3h0cmN0KQogICAgICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQodm9pZCkKICAgIHsKICAgICAg
Y29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGludF90eXBl
IF9fYyA9IF9fZW9mOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0
aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoK
ICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkK
ICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWls
Yml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSYgX19jKQog
ICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigp
OwogICAgICAgICAgICAgIGludF90eXBlIF9fYnVmdmFsID0gdGhpcy0+cmRidWYoKS0+c2J1bXBj
KCk7CgogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYnVmdmFs
LCBfX2VvZikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9
IDE7CiAgICAgICAgICAgICAgICAgIF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19i
dWZ2YWwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJl
YW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50
X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAg
ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg
ICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAg
ICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUg
KF9NX2djb3VudCArIDEgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBl
OjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRz
X3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAg
ICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICAr
K19NX2djb3VudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5
cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9N
X2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3Ni
LCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lk
ZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBj
b25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBf
X3N0cmVhbWJ1Zl90eXBlKiBfX3RoaXNfc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAg
IGludF90eXBlIF9fYyA9IF9fdGhpc19zYi0+c2dldGMoKTsKICAgICAgICAgICAgICBjaGFyX3R5
cGUgX19jMiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKCiAgICAgICAgICAgICAg
d2hpbGUgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAg
ICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKQogICAg
ICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fc2Iuc3B1dGMo
X19jMiksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfTV9n
Y291bnQ7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fdGhpc19zYi0+c25leHRjKCk7CiAgICAg
ICAgICAgICAgICAgIF9fYzIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShf
X2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2Zi
aXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpm
YWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0bGluZShjaGFy
X3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAg
ICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBl
KF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5
cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5y
ZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAg
ICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgKyAxIDwgX19uCiAgICAgICAgICAgICAgICAgICAg
ICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAg
ICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2No
YXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAg
ICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9p
bnRfdHlwZShfX2MsIF9faWRlbGltKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgICAgICsrX01fZ2Nv
dW50OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgaWdub3JlKHN0cmVhbXNpemUgX19uLCBpbnRfdHlwZSBfX2RlbGlt
KQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0
cnVlKTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX24gPiAwKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFp
dHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRo
aXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jOwoKICAgICAgICAgICAgICBf
X24gPSBtaW4oX19uLCBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCkpOwogICAgICAg
ICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRy
YWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MgPSBfX3NiLT5zYnVtcGMoKSwgX19lb2YpKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAg
ICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZGVsaW0pKQogICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0
cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj
ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwZWVrKHZvaWQpCiAgICB7CiAgICAgIGludF90eXBlIF9f
YyA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsgX19jID0gdGhpcy0+cmRidWYoKS0+c2dldGMoKTsgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAg
ICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgX01fZ2NvdW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX24pOwogICAg
ICAgICAgICAgIGlmIChfTV9nY291bnQgIT0gX19uKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAg
fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IHN0cmVhbXNpemUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFk
c29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIF9NX2djb3Vu
dCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIHN0
cmVhbXNpemUgX19udW0gPSB0aGlzLT5yZGJ1ZigpLT5pbl9hdmFpbCgpOwogICAgICAgICAgICAg
IGlmIChfX251bSA+PSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX251
bSA9IG1pbihfX251bSwgX19uKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fbnVtKQogICAgICAg
ICAgICAgICAgICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCktPnNnZXRuKF9fcywgX19udW0p
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfTV9nY291bnQ7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNf
dHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMt
PnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiCiAgICAgICAgICAgICAgICAgIHx8IHRy
YWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLT5zcHV0YmFja2MoX19jKSwgX19lb2YpKQogICAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgdW5nZXQodm9pZCkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRf
dHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1
Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2IKICAg
ICAgICAgICAgICAgICAgfHwgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fc2ItPnN1bmdldGMo
KSwgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBpbnQKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
CiAgICBzeW5jKHZvaWQpCiAgICB7CiAgICAgIGludCBfX3JldCA9IC0xOwogICAgICBfTV9nY291
bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9f
c3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmIChf
X3NiKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoX19zYi0+cHVic3lu
YygpID09IC0xKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19yZXQg
PSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIHRlbGxnKHZvaWQpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0g
cG9zX3R5cGUoLTEpOwogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICBfX3JldCA9IHRo
aXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6OmluKTsK
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKHBvc190eXBlIF9fcG9z
KQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAg
ICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vl
a3BvcyhfX3BvcywgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190
eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpm
YWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBz
ZWVrZyhvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kaXIpCiAgICB7CiAgICAg
IF9NX2djb3VudCA9IDA7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAg
ICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBf
X2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5
cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoK
ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lu
LCBfQ2hhclQmIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpz
ZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2luLmdldChfX2MpOyB9CiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19pbi5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbi5zZXRzdGF0ZShp
b3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19pbiwgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
aXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlw
ZTsKICAgICAgc3RyZWFtc2l6ZSBfX2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lz
dHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgc3Ry
ZWFtc2l6ZSBfX251bSA9IF9faW4ud2lkdGgoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gPT0g
MCkKICAgICAgICAgICAgICAgIF9fbnVtID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1h
eCgpOwoKICAgICAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1c2VfZmFj
ZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsKICAgICAgICAgICAgICBjb25zdCBpbnRf
dHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19z
Yi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19udW0gLSAx
CiAgICAgICAgICAgICAgICAgICAgICYmICFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9m
KQogICAgICAgICAgICAgICAgICAgICAmJiAhX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwg
X19jKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gX19jOwog
ICAgICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgICAgICBfX2MgPSBf
X3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX1RyYWl0
czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICBfX2luLnNldHN0YXRl
KGlvc19iYXNlOjplb2ZiaXQpOwoKCgogICAgICAgICAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsK
CiAgICAgICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9faW4u
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBf
X2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULF9U
cmFpdHM+JiBfX2luKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1f
dHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAg
ICAgY29uc3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4o
X19pbi5nZXRsb2MoKSk7CiAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjpl
b2YoKTsKICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAg
X19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgd2hpbGUgKCFfVHJhaXRzOjpl
cV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9i
YXNlOjpzcGFjZSwgX19jKSkKICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKCiAgICAgICBp
ZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgX19pbi5zZXRzdGF0
ZShpb3NfYmFzZTo6ZW9mYml0KTsKCiAgICAgIHJldHVybiBfX2luOwogICAgfQoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVm
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlw
ZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5n
X3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0
ZWQgPSAwOwoKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19p
biwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVy
YXNlKCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9faW4ud2lkdGgoKTsKICAgICAgICAg
IF9fc2l6ZV90eXBlIF9fbjsKICAgICAgICAgIF9fbiA9IF9fdyA+IDAgPyBzdGF0aWNfY2FzdDxf
X3NpemVfdHlwZT4oX193KSA6IF9fc3RyLm1heF9zaXplKCk7CgogICAgICAgICAgY29uc3QgX19j
dHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19pbi5nZXRsb2Mo
KSk7CiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAg
ICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAg
X19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgIHdoaWxlIChfX2V4dHJh
Y3RlZCA8IF9fbgogICAgICAgICAgICAgICAgICYmICFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2Ms
IF9fZW9mKQogICAgICAgICAgICAgICAgICYmICFfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNl
LCBfX2MpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9f
Y2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAgICAg
ICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9UcmFp
dHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICBfX2luLnNldHN0YXRlKGlv
c19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICB9CgoKICAg
ICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNldHN0YXRlIChpb3NfYmFzZTo6ZmFp
bGJpdCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYgX19pbiwKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19j
dHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBl
OjpzaXplX3R5cGUgX19zaXplX3R5cGU7CgogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9
IDA7CiAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBmYWxzZTsKICAgICAgdHlwZW5hbWUgX19pc3Ry
ZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgX19zdHIuZXJhc2UoKTsKICAgICAgICAgIF9fc2l6ZV90eXBlIF9f
biA9IF9fc3RyLm1heF9zaXplKCk7CgogICAgICAgICAgX19pbnRfdHlwZSBfX2lkZWxpbSA9IF9U
cmFpdHM6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSog
X19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2J1
bXBjKCk7CiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7
CiAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVs
aW0pOwoKICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8PSBfX24KICAgICAgICAgICAgICAg
ICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAm
JiAhX190ZXN0ZGVsaW0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJh
aXRzOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAg
ICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIF9fdGVzdGRlbGlt
ID0gX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSk7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAg
X19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICB9CiAgICAgIGlmICghX19l
eHRyYWN0ZWQgJiYgIV9fdGVzdGRlbGltKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6
OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0No
YXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYgX19pbiwKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxv
Yz4mIF9fc3RyKQogICAgeyByZXR1cm4gZ2V0bGluZShfX2luLCBfX3N0ciwgX19pbi53aWRlbign
XG4nKSk7IH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcj47
CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIHdzKGlzdHJlYW0mKTsKICBleHRlcm4gdGVtcGxh
dGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0
ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRl
IGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHVuc2lnbmVkIGNoYXImKTsKICBleHRlcm4g
dGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXImKTsKICBl
eHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hh
ciopOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBzaWdu
ZWQgY2hhciopOwoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08d2NoYXJf
dD47CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiB3cyh3aXN0cmVhbSYpOwogIGV4dGVybiB0
ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIHdjaGFyX3QmKTsKICBleHRl
cm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCB3Y2hhcl90Kik7Cgp9
CiMgMjk4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pc3RyZWFtIiAyIDMKIyA0NyAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvaW9zdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgZXh0ZXJuIGlzdHJl
YW0gY2luOwogIGV4dGVybiBvc3RyZWFtIGNvdXQ7CiAgZXh0ZXJuIG9zdHJlYW0gY2VycjsKICBl
eHRlcm4gb3N0cmVhbSBjbG9nOwoKCiAgZXh0ZXJuIHdpc3RyZWFtIHdjaW47CiAgZXh0ZXJuIHdv
c3RyZWFtIHdjb3V0OwogIGV4dGVybiB3b3N0cmVhbSB3Y2VycjsKICBleHRlcm4gd29zdHJlYW0g
d2Nsb2c7CgoKCiAgc3RhdGljIGlvc19iYXNlOjpJbml0IF9faW9pbml0Owp9CiMgMiAiU2VnRmF1
bHQuY2MiIDIKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi92ZWN0b3IiIDEgMwojIDY1ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi92ZWN0b3IiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5j
dGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uX2RlZmluZXMu
aCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsK
CgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2Jh
ZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9p
ZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFs
aWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9f
dGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDY3ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi92ZWN0b3IiIDIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF92ZWN0b3IuaCIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rv
ci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMK
IyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAg
dm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2Jh
ZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lk
CiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJy
b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJm
bG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19l
cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29u
c3QgY2hhciogX19zKTsKfQojIDY2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF92ZWN0
b3IuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiMgNzggIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3Is
IGJvb2wgX0lzU3RhdGljPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90
eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh
dG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX1ZlY3Rvcl9hbGxv
Y19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9y
KF9fYSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAg
e30KCnByb3RlY3RlZDoKICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9jYXRvcjsKICBfVHAq
IF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7Cgog
IF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2Nh
dG9yLmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVf
dCBfX24pCiAgICB7IGlmIChfX3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBf
X24pOyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNz
IF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5
cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3Jf
dHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9j
YXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1ZlY3Rvcl9hbGxv
Y19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoMCksIF9NX2Zpbmlz
aCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICB7fQoKcHJvdGVjdGVkOgogIF9UcCogX01fc3Rh
cnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlIF9B
bGxvY190eXBlOwogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9B
bGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19w
LCBzaXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX1ZlY3Rvcl9iYXNl
CiAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs
ZXNzPgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3Rh
bmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9j
YXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgX1ZlY3Rvcl9iYXNlKHNpemVfdCBfX24sIGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9zdGFydCA9IF9N
X2FsbG9jYXRlKF9fbik7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydDsKICAgIF9NX2VuZF9vZl9z
dG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgfQoKICB+X1ZlY3Rvcl9iYXNlKCkgeyBfTV9kZWFs
bG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsgfQp9OwojIDE2
NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgiIDMKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgpjbGFzcyB2ZWN0b3IgOiBw
cm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPgp7CgogCgpwcml2YXRlOgogIHR5cGVk
ZWYgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKICB0eXBlZGVmIHZlY3RvcjxfVHAs
IF9BbGxvYz4gdmVjdG9yX3R5cGU7CnB1YmxpYzoKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUq
IGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBv
aW50ZXIsIHZlY3Rvcl90eXBlPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3Jt
YWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgdmVjdG9yX3R5cGU+CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CiAg
dHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBl
JiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYg
cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxs
b2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCiAgdHlwZWRlZiBy
ZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwog
IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCnBy
b3RlY3RlZDoKICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2Rl
YWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX3N0YXJ0OwogIHVzaW5nIF9CYXNlOjpfTV9maW5p
c2g7CiAgdXNpbmcgX0Jhc2U6Ol9NX2VuZF9vZl9zdG9yYWdlOwoKcHJvdGVjdGVkOgogIHZvaWQg
X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCk7CiAgdm9p
ZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pOwoKcHVibGljOgoKCgoKICBpdGVy
YXRvciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9zdGFydCk7IH0KCgoKCgogIGNvbnN0
X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yIChfTV9z
dGFydCk7IH0KCgoKCgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9maW5p
c2gpOyB9CgoKCgoKICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBjb25zdF9p
dGVyYXRvciAoX01fZmluaXNoKTsgfQoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQog
ICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCgoKCgogIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRl
cmF0b3IoZW5kKCkpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsgcmV0
dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihi
ZWdpbigpKTsgfQoKCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90
eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KCgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAg
ICB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCgoKCgogIHNpemVfdHlw
ZSBjYXBhY2l0eSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3Io
X01fZW5kX29mX3N0b3JhZ2UpIC0gYmVnaW4oKSk7IH0KCgoKCiAgYm9vbCBlbXB0eSgpIGNvbnN0
CiAgICB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9CiMgMjg5ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlw
ZSBfX24pIHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KIyAzMDAgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10o
c2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQoKICB2b2lk
IF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAgIGlmIChfX24gPj0gdGhp
cy0+c2l6ZSgpKQogICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgidmVjdG9yIik7CiAgfQojIDMx
NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgiIDMKICByZWZlcmVuY2Ug
YXQoc2l6ZV90eXBlIF9fbikKICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhp
cylbX19uXTsgfQojIDMyOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgi
IDMKICBjb25zdF9yZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsgX01fcmFu
Z2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKCiAgZXhwbGljaXQgdmVjdG9y
KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFz
ZShfX2EpIHt9CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCiAg
ICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAg
OiBfQmFzZShfX24sIF9fYSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24o
X01fc3RhcnQsIF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBf
X24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fZmluaXNoID0g
dW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9CgogIHZlY3Rvcihj
b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgICA6IF9CYXNlKF9feC5zaXplKCksIF9f
eC5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShf
X3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs
bG9jYXRvcl90eXBlKCkpCiAgICAgICAgOiBfQmFzZShfX2EpCiAgICAgICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRl
Z3JhbDsKICAgICAgX01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo
KSk7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01faW5pdGlh
bGl6ZV9hdXgoX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3RydWVfdHlwZSkKICAg
ICAgICB7CiAgICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgICAgX01fZW5kX29m
X3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgICAgX01fZmluaXNoID0gdW5pbml0aWFsaXpl
ZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgICAgIF9NX2luaXRpYWxpemVfYXV4KF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQog
ICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJDYXRlZ29yeTsKICAgICAgICAgIF9N
X3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVnb3J5KCkpOwogICAg
ICAgIH0KCiAgfnZlY3RvcigpCiAgeyBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsgfQoK
ICB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9j
PiYgX194KTsKIyAzOTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAz
CiAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChfX24gPiB0aGlzLT5tYXhf
c2l6ZSgpKQogICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigidmVjdG9yOjpyZXNlcnZlIik7CiAg
ICBpZiAodGhpcy0+Y2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUgX19v
bGRfc2l6ZSA9IHNpemUoKTsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9j
b3B5KF9fbiwgX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBf
TV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFn
ZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZmluaXNoID0g
X190bXAgKyBfX29sZF9zaXplOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsg
X19uOwogICAgfQogIH0KIyA0MjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rv
ci5oIiAzCiAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgeyBf
TV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90
eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogICAgdm9pZAogICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxf
SW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fzc2lnbl9kaXNw
YXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8Y2xh
c3MgX0ludGVnZXI+CiAgICB2b2lkCiAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9f
biwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgIHsgX01fZmlsbF9hc3NpZ24oKHNp
emVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRl
cj4KICAgIHZvaWQKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlckNh
dGVnb3J5OwogICAgICBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0l0ZXJDYXRlZ29y
eSgpKTsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAog
ICAgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZAogICAgX01fYXNzaWduX2F1eChfRm9y
d2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg
ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgoKCgoKICByZWZlcmVuY2UgZnJvbnQoKSB7
IHJldHVybiAqYmVnaW4oKTsgfQoKCgoKCiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3Qg
eyByZXR1cm4gKmJlZ2luKCk7IH0KCgoKCgogIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihl
bmQoKSAtIDEpOyB9CgoKCgoKICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJu
ICooZW5kKCkgLSAxKTsgfQojIDQ5MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVj
dG9yLmgiIDMKICB2b2lkCiAgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KQogIHsKICAgIGlmIChf
TV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgX0NvbnN0cnVjdChfTV9maW5p
c2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNl
cnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KIyA1MjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX3ZlY3Rvci5oIiAzCiAgdm9pZAogIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQog
IHsKICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgIHN0ZDo6c3dhcChf
TV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgc3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdl
LCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogIH0KIyA1NDAgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgaXRlcmF0b3IKICBpbnNlcnQoaXRlcmF0b3IgX19wb3Np
dGlvbiwgY29uc3QgX1RwJiBfX3gpCiAgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24g
LSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bv
c2l0aW9uID09IGVuZCgpKSB7CiAgICAgIF9Db25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAg
ICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRv
cihfX3Bvc2l0aW9uKSwgX194KTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KIyA1NjQg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgaXRlcmF0b3IKICBp
bnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikKICB7CiAgICBzaXplX3R5cGUgX19uID0gX19wb3Np
dGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYm
IF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAgX0NvbnN0cnVjdChfTV9maW5pc2gpOwogICAg
ICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRv
cihfX3Bvc2l0aW9uKSk7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CgoKICB0ZW1wbGF0
ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQKICAgICAgICBpbnNlcnQoaXRlcmF0b3Ig
X19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAg
ICAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+
OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3MsIF9f
Zmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
dGVnZXI+CiAgICB2b2lkCiAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z
LCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgIHsgX01fZmls
bF9pbnNlcnQoX19wb3MsIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19uKSwgc3RhdGljX2Nhc3Q8
X1RwPihfX3ZhbCkpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9p
ZAogICAgICAgIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQogICAgICAgIHsKICAgICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0
b3JfY2F0ZWdvcnkgX0l0ZXJDYXRlZ29yeTsKICAgICAgX01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBf
X2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CiAgICB9CiMgNjE0ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQgaW5zZXJ0IChpdGVyYXRvciBf
X3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0
KF9fcG9zLCBfX24sIF9feCk7IH0KCiAgdm9pZCBfTV9maWxsX2luc2VydCAoaXRlcmF0b3IgX19w
b3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KTsKIyA2MjggIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCBwb3BfYmFjaygpIHsKICAgIC0tX01f
ZmluaXNoOwogICAgX0Rlc3Ryb3koX01fZmluaXNoKTsKICB9CiMgNjQ3ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9f
cG9zaXRpb24pIHsKICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgY29weShf
X3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOwogICAgLS1fTV9maW5pc2g7CiAgICBf
RGVzdHJveShfTV9maW5pc2gpOwogICAgcmV0dXJuIF9fcG9zaXRpb247CiAgfQojIDY3MCAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgiIDMKICBpdGVyYXRvciBlcmFzZShp
dGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9faShjb3B5
KF9fbGFzdCwgZW5kKCksIF9fZmlyc3QpKTsKICAgIF9EZXN0cm95KF9faSwgZW5kKCkpOwogICAg
X01fZmluaXNoID0gX01fZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgfQojIDY4NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgi
IDMKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsK
ICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAgICBlcmFzZShiZWdpbigpICsgX19uZXdf
c2l6ZSwgZW5kKCkpOwogICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBz
aXplKCksIF9feCk7CiAgfQojIDcwMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVj
dG9yLmgiIDMKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkgeyByZXNpemUoX19u
ZXdfc2l6ZSwgX1RwKCkpOyB9CgoKCgoKCgogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCks
IGVuZCgpKTsgfQoKcHJvdGVjdGVkOgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv
cj4KICBwb2ludGVyIF9NX2FsbG9jYXRlX2FuZF9jb3B5KHNpemVfdHlwZSBfX24sIF9Gb3J3YXJk
SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICB7CiAgICBwb2ludGVyIF9fcmVzdWx0
ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIHRyeSB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQog
ICAgY2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgX01fZGVhbGxvY2F0ZShfX3Jlc3VsdCwgX19u
KTsKICAgICAgICB0aHJvdzsKICAgICAgfQogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0
X2l0ZXJhdG9yX3RhZykKICB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly
c3QpCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0
b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBf
X2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogIHsKICAgIHNpemVfdHlwZSBfX24gPSBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwog
ICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVu
aW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICB9CgogIHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRv
ciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0
b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9y
YW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgdmVjdG9yPF9UcCwg
X0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4g
X194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBf
X3guZW5kKCksIF9feS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194
LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhp
Y2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBf
X3gsIHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25z
dCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9f
eSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+
JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBf
X3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3Bl
cmF0b3I8PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAs
IF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCB2ZWN0b3I8
X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJl
dHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
dmVjdG9yPF9UcCxfQWxsb2M+Jgp2ZWN0b3I8X1RwLF9BbGxvYz46Om9wZXJhdG9yPShjb25zdCB2
ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCnsKICBpZiAoJl9feCAhPSB0aGlzKSB7CiAgICBjb25z
dCBzaXplX3R5cGUgX194bGVuID0gX194LnNpemUoKTsKICAgIGlmIChfX3hsZW4gPiBjYXBhY2l0
eSgpKSB7CiAgICAgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX3hsZW4s
IF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogICAgICBfRGVzdHJveShfTV9zdGFydCwgX01fZmlu
aXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBf
TV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdl
ID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9CiAgICBlbHNlIGlmIChzaXplKCkgPj0gX194bGVu
KSB7CiAgICAgIGl0ZXJhdG9yIF9faShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIGJlZ2lu
KCkpKTsKICAgICAgX0Rlc3Ryb3koX19pLCBlbmQoKSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAg
Y29weShfX3guYmVnaW4oKSwgX194LmJlZ2luKCkgKyBzaXplKCksIF9NX3N0YXJ0KTsKICAgICAg
dW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpICsgc2l6ZSgpLCBfX3guZW5kKCksIF9NX2Zp
bmlzaCk7CiAgICB9CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydCArIF9feGxlbjsKICB9CiAgcmV0
dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVj
dG9yPF9UcCwgX0FsbG9jPjo6X01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgY29uc3QgdmFsdWVf
dHlwZSYgX192YWwpCnsKICBpZiAoX19uID4gY2FwYWNpdHkoKSkgewogICAgdmVjdG9yPF9UcCwg
X0FsbG9jPiBfX3RtcChfX24sIF9fdmFsLCBnZXRfYWxsb2NhdG9yKCkpOwogICAgX190bXAuc3dh
cCgqdGhpcyk7CiAgfQogIGVsc2UgaWYgKF9fbiA+IHNpemUoKSkgewogICAgZmlsbChiZWdpbigp
LCBlbmQoKSwgX192YWwpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01f
ZmluaXNoLCBfX24gLSBzaXplKCksIF9fdmFsKTsKICB9CiAgZWxzZQogICAgZXJhc2UoZmlsbF9u
KGJlZ2luKCksIF9fbiwgX192YWwpLCBlbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQgdmVjdG9yPF9UcCwg
X0FsbG9jPjo6X01fYXNzaWduX2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0
b3JfdGFnKSB7CiAgaXRlcmF0b3IgX19jdXIoYmVnaW4oKSk7CiAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQogICAgKl9fY3Vy
ID0gKl9fZmlyc3Q7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgZXJhc2UoX19jdXIsIGVu
ZCgpKTsKICBlbHNlCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgc2l6ZV90eXBlIF9fbGVuID0gZGlzdGFu
Y2UoX19maXJzdCwgX19sYXN0KTsKCiAgaWYgKF9fbGVuID4gY2FwYWNpdHkoKSkgewogICAgcG9p
bnRlciBfX3RtcChfTV9hbGxvY2F0ZV9hbmRfY29weShfX2xlbiwgX19maXJzdCwgX19sYXN0KSk7
CiAgICBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgIF9NX2RlYWxsb2NhdGUoX01f
c3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX3Rt
cDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fZmluaXNoID0gX01fc3RhcnQgKyBfX2xlbjsK
ICB9CiAgZWxzZSBpZiAoc2l6ZSgpID49IF9fbGVuKSB7CiAgICBpdGVyYXRvciBfX25ld19maW5p
c2goY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KSk7CiAgICBfRGVzdHJveShfX25ld19m
aW5pc2gsIGVuZCgpKTsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgfQog
IGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19t
aWQsIHNpemUoKSk7CiAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfTV9zdGFydCk7CiAgICBfTV9m
aW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZAp2ZWN0b3I8X1RwLCBf
QWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194
KQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgX0NvbnN0cnVj
dChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOwogICAgKytfTV9maW5pc2g7CiAgICBfVHAg
X194X2NvcHkgPSBfX3g7CiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9N
X2ZpbmlzaCAtIDIpLCBpdGVyYXRvcihfTV9maW5pc2gtIDEpKTsKICAgICpfX3Bvc2l0aW9uID0g
X194X2NvcHk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBz
aXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICog
X19vbGRfc2l6ZSA6IDE7CiAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9hbGxvY2F0ZShfX2xl
bikpOwogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgIHRyeSB7CiAg
ICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9zdGFydCks
IF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25l
d19zdGFydCk7CiAgICAgIF9Db25zdHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsKICAg
ICAgKytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29w
eShfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19uZXdfZmluaXNoKTsKICAgIH0KICAgIGNhdGNoKC4uLikKICAg
ICAgewogICAgICAgIF9EZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAg
X01fZGVhbGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pOwogICAgICAgIHRocm93Owog
ICAgICB9CiAgICBfRGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9N
X3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19u
ZXdfc3RhcnQuYmFzZSgpOwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAg
IF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9j
Pjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAh
PSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgX0NvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmlu
aXNoIC0gMSkpOwogICAgKytfTV9maW5pc2g7CiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24s
IGl0ZXJhdG9yKF9NX2ZpbmlzaCAtIDIpLAogICAgICAgICAgICAgICAgICBpdGVyYXRvcihfTV9m
aW5pc2ggLSAxKSk7CiAgICAqX19wb3NpdGlvbiA9IF9UcCgpOwogIH0KICBlbHNlIHsKICAgIGNv
bnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgY29uc3Qgc2l6ZV90eXBlIF9f
bGVuID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOwogICAgcG9pbnRlciBf
X25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsKICAgIHBvaW50ZXIgX19uZXdfZmluaXNo
ID0gX19uZXdfc3RhcnQ7CiAgICB0cnkgewogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxp
emVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3RhcnQpOwogICAgICBfQ29uc3RydWN0KF9f
bmV3X2ZpbmlzaCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1
bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAg
ICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBfRGVzdHJveShfX25ld19zdGFydCxfX25ld19m
aW5pc2gpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pOwogICAgICAg
IHRocm93OwogICAgICB9CiAgICBfRGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFs
bG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0
YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICBfTV9l
bmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fZmlsbF9p
bnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIGlmIChfX24gIT0g
MCkgewogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0g
X19uKSB7CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f
ZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2Zp
bmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAgICAg
IHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNo
KTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3Np
dGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGZpbGwoX19w
b3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2Ug
ewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gX19lbGVtc19h
ZnRlciwgX194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVy
OwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9N
X2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgZmls
bChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAg
ZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBj
b25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7
CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0
ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19u
ZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIF9fbmV3
X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfX25l
d19maW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0gdW5p
bml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX25ld19maW5pc2gpOwogICAgICB9
CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX25ld19zdGFy
dCxfX25ld19maW5pc2gpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydC5iYXNl
KCksX19sZW4pOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICBfRGVzdHJveShfTV9z
dGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29m
X3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgp
OwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zf
c3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0KfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9f
cG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0
ZXJhdG9yX3RhZykKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewog
ICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICsrX19wb3M7CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVy
YXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkg
ewogICAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICBpZiAo
c2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAg
Y29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAg
IGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRl
ciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9N
X2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNv
cHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gp
OwogICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAg
ICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAg
ICBhZHZhbmNlKF9fbWlkLCBfX2VsZW1zX2FmdGVyKTsKICAgICAgICB1bmluaXRpYWxpemVkX2Nv
cHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0g
X19lbGVtc19hZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19v
bGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVy
OwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9fcG9zaXRpb24pOwogICAgICB9CiAgICB9
CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAg
ICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwg
X19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAg
ICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5IHsKICAgICAg
ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc2l0aW9uLCBfX25l
d19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAg
ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksIF9f
bmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAg
IF9EZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICBfTV9kZWFsbG9j
YXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSwgX19sZW4pOwogICAgICAgICAgdGhyb3c7CiAgICAgICAg
fQogICAgICBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0
ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0
ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFz
ZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVu
OwogICAgfQogIH0KfQoKfQojIDcyICIvdXNyL2luY2x1ZGUvYysrLzMuMi92ZWN0b3IiIDIgMwoj
IDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMSAzCiMgNjQgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsK
ICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX0JpdF90eXBlOwogIGVudW0geyBfTV93b3JkX2JpdCA9
IGludCg4ICogc2l6ZW9mKF9CaXRfdHlwZSkpIH07CgpzdHJ1Y3QgX0JpdF9yZWZlcmVuY2UgewoK
ICBfQml0X3R5cGUgKiBfTV9wOwogIF9CaXRfdHlwZSBfTV9tYXNrOwogIF9CaXRfcmVmZXJlbmNl
KF9CaXRfdHlwZSAqIF9feCwgX0JpdF90eXBlIF9feSkKICAgIDogX01fcChfX3gpLCBfTV9tYXNr
KF9feSkge30KCnB1YmxpYzoKICBfQml0X3JlZmVyZW5jZSgpIDogX01fcCgwKSwgX01fbWFzaygw
KSB7fQogIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhISgqX01fcCAmIF9NX21hc2sp
OyB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShib29sIF9feCkKICB7CiAgICBpZiAoX194
KSAqX01fcCB8PSBfTV9tYXNrOwogICAgZWxzZSAqX01fcCAmPSB+X01fbWFzazsKICAgIHJldHVy
biAqdGhpczsKICB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfQml0X3JlZmVy
ZW5jZSYgX194KQogICAgeyByZXR1cm4gKnRoaXMgPSBib29sKF9feCk7IH0KICBib29sIG9wZXJh
dG9yPT0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIGJvb2wo
KnRoaXMpID09IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRfcmVmZXJl
bmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAhYm9vbCgqdGhpcykgJiYgYm9vbChfX3gpOyB9
CiAgdm9pZCBmbGlwKCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07CgppbmxpbmUgdm9pZCBzd2Fw
KF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAgYm9vbCBfX3RtcCA9
IF9feDsKICBfX3ggPSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0X2l0ZXJhdG9y
X2Jhc2UgOiBwdWJsaWMgaXRlcmF0b3I8cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIGJvb2w+
CnsKICBfQml0X3R5cGUgKiBfTV9wOwogIHVuc2lnbmVkIGludCBfTV9vZmZzZXQ7CgogIF9CaXRf
aXRlcmF0b3JfYmFzZShfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9N
X3AoX194KSwgX01fb2Zmc2V0KF9feSkge30KCiAgdm9pZCBfTV9idW1wX3VwKCkgewogICAgaWYg
KF9NX29mZnNldCsrID09IF9NX3dvcmRfYml0IC0gMSkgewogICAgICBfTV9vZmZzZXQgPSAwOwog
ICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgX01fYnVtcF9kb3duKCkgewogICAgaWYgKF9N
X29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX01fd29yZF9iaXQgLSAxOwogICAg
ICAtLV9NX3A7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luY3IocHRyZGlmZl90IF9faSkgewogICAg
ZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9faSArIF9NX29mZnNldDsKICAgIF9NX3AgKz0gX19uIC8g
X01fd29yZF9iaXQ7CiAgICBfX24gPSBfX24gJSBfTV93b3JkX2JpdDsKICAgIGlmIChfX24gPCAw
KSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9NX3dvcmRfYml0Owog
ICAgICAtLV9NX3A7CiAgICB9IGVsc2UKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkg
X19uOwogIH0KCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19p
KSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPT0gX19p
Ll9NX29mZnNldDsKICB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNl
JiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wIDwgX19pLl9NX3AgfHwgKF9NX3AgPT0gX19p
Ll9NX3AgJiYgX01fb2Zmc2V0IDwgX19pLl9NX29mZnNldCk7CiAgfQogIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoKnRo
aXMgPT0gX19pKTsKICB9CiAgYm9vbCBvcGVyYXRvcj4oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNl
JiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfX2kgPCAqdGhpczsKICB9CiAgYm9vbCBvcGVyYXRv
cjw9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gIShf
X2kgPCAqdGhpcyk7CiAgfQogIGJvb2wgb3BlcmF0b3I+PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jh
c2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoKnRoaXMgPCBfX2kpOwogIH0KfTsKCmlubGlu
ZSBwdHJkaWZmX3QKb3BlcmF0b3ItKGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX194LCBjb25z
dCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9feSkgewogIHJldHVybiBfTV93b3JkX2JpdCAqIChfX3gu
X01fcCAtIF9feS5fTV9wKSArIF9feC5fTV9vZmZzZXQgLSBfX3kuX01fb2Zmc2V0Owp9CgoKc3Ry
dWN0IF9CaXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVm
IF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2lu
dGVyOwogIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKCiAgX0JpdF9pdGVyYXRvcigp
IDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9pdGVyYXRvcihfQml0X3R5cGUg
KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9f
eSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZShf
TV9wLCAxVUwgPDwgX01fb2Zmc2V0KTsgfQogIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAg
X01fYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvcisr
KGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAg
IHJldHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1w
X2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQp
IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJl
dHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9f
aSkgewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciYg
b3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAg
cmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9f
aSkgY29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAr
PSBfX2k7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25z
dCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsK
ICB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsgcmV0dXJu
ICooKnRoaXMgKyBfX2kpOyB9Cn07CgppbmxpbmUgX0JpdF9pdGVyYXRvcgpvcGVyYXRvcisocHRy
ZGlmZl90IF9fbiwgY29uc3QgX0JpdF9pdGVyYXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247
IH0KCgpzdHJ1Y3QgX0JpdF9jb25zdF9pdGVyYXRvciA6IHB1YmxpYyBfQml0X2l0ZXJhdG9yX2Jh
c2UKewogIHR5cGVkZWYgYm9vbCByZWZlcmVuY2U7CiAgdHlwZWRlZiBib29sIGNvbnN0X3JlZmVy
ZW5jZTsKICB0eXBlZGVmIGNvbnN0IGJvb2wqIHBvaW50ZXI7CiAgdHlwZWRlZiBfQml0X2NvbnN0
X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICBfQml0X2NvbnN0X2l0ZXJhdG9yKCkgOiBfQml0
X2l0ZXJhdG9yX2Jhc2UoMCwgMCkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKF9CaXRfdHlwZSAq
IF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feCwgX195
KSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KQogICAg
OiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX3AsIF9feC5fTV9vZmZzZXQpIHt9CgogIGNvbnN0
X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICByZXR1cm4gX0JpdF9yZWZlcmVuY2Uo
X01fcCwgMVVMIDw8IF9NX29mZnNldCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisr
KCkgewogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVy
YXRvciBvcGVyYXRvcisrKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsK
ICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3Im
IG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9f
dG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAg
Y29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgX01f
aW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0
b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJu
ICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9f
aSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBf
X3RtcCArPSBfX2k7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5
cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0
dXJuIF9fdG1wIC09IF9faTsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVy
ZW5jZV90eXBlIF9faSkgewogICAgcmV0dXJuICooKnRoaXMgKyBfX2kpOwogIH0KfTsKCmlubGlu
ZSBfQml0X2NvbnN0X2l0ZXJhdG9yCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0
X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsgfQoKCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0J2ZWN0b3JfYWxs
b2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwg
X0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBh
bGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxv
Y2F0b3I7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19h
KQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwg
X01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICBfQml0X3R5cGUgKiBfTV9iaXRf
YWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRl
KChfX24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0KTsgfQogIHZvaWQgX01fZGVhbGxv
Y2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfTV9kYXRhX2FsbG9jYXRvci5k
ZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9CgogIHR5cGVuYW1lIF9B
bGxvY190cmFpdHM8X0JpdF90eXBlLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAg
ICAgIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9p
dGVyYXRvciBfTV9maW5pc2g7CiAgX0JpdF90eXBlICogX01fZW5kX29mX3N0b3JhZ2U7Cn07CgoK
dGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0Fs
bG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRz
PGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5
cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9j
YXRvcl90eXBlKCk7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlw
ZSYpCiAgICA6IF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7
fQoKcHJvdGVjdGVkOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfQml0X3R5cGUs
IF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5cGU7CgogIF9CaXRf
dHlwZSAqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6
OmFsbG9jYXRlKChfX24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0KTsgfQogIHZvaWQg
X01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfQWxsb2NfdHlw
ZTo6ZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOwogIH0KCiAgX0JpdF9pdGVyYXRv
ciBfTV9zdGFydDsKICBfQml0X2l0ZXJhdG9yIF9NX2ZpbmlzaDsKICBfQml0X3R5cGUgKiBfTV9l
bmRfb2Zfc3RvcmFnZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9y
X2Jhc2UKICA6IHB1YmxpYyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFu
Y2VsZXNzPgp7CiAgdHlwZWRlZiBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0
YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jh
c2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkg
eyBfQmFzZTo6X01fZGVhbGxvY2F0ZSgpOyB9Cn07Cgp9CgoKCm5hbWVzcGFjZSBzdGQKewoKdGVt
cGxhdGUgPHR5cGVuYW1lIF9BbGxvYz4KICBjbGFzcyB2ZWN0b3I8Ym9vbCwgX0FsbG9jPiA6IHB1
YmxpYyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4KICB7CiAgcHVibGljOgogICAgdHlwZWRlZiBib29s
IHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHB0
cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVy
ZW5jZTsKICAgIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgICB0eXBlZGVmIF9CaXRf
cmVmZXJlbmNlKiBwb2ludGVyOwogICAgdHlwZWRlZiBjb25zdCBib29sKiBjb25zdF9wb2ludGVy
OwoKICAgIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKICAgIHR5cGVkZWYgX0JpdF9j
b25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0
b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHJl
dmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgdHlwZWRlZiB0
eXBlbmFtZSBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90
eXBlOwogICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsKICAgICAgcmV0
dXJuIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6Z2V0X2FsbG9jYXRvcigpOwogICAgfQoKICBwcm90
ZWN0ZWQ6CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2JpdF9hbGxvYzsKICAg
IHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fZGVhbGxvY2F0ZTsKICAgIHVzaW5nIF9C
dmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fc3RhcnQ7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9B
bGxvYz46Ol9NX2ZpbmlzaDsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fZW5k
X29mX3N0b3JhZ2U7CgogIHByb3RlY3RlZDoKICAgIHZvaWQgX01faW5pdGlhbGl6ZShzaXplX3R5
cGUgX19uKSB7CiAgICAgIF9CaXRfdHlwZSAqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAg
ICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dv
cmRfYml0OwogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIF9NX2Zpbmlz
aCA9IF9NX3N0YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICB9CiAgICB2b2lkIF9NX2lu
c2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9NX2Zp
bmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgICAgY29weV9iYWNrd2FyZChf
X3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCArIDEpOwogICAgICAgICpfX3Bvc2l0aW9u
ID0gX194OwogICAgICAgICsrX01fZmluaXNoOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAg
IHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKQogICAgICAgICAgICAgICAgICAgICAgICAgID8gMiAq
IHNpemUoKSA6IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX01fd29yZF9iaXQpOwogICAgICAgIF9C
aXRfdHlwZSAqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19p
ID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICAq
X19pKysgPSBfX3g7CiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwg
X19pKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug
PSBfX3EgKyAoX19sZW4gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0OwogICAgICAgIF9N
X3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0
b3IoKTsKICAgICAgX01fZmluaXNoID0gaXRlcmF0b3IoKTsKICAgICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSAwOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAg
ICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIHNpemVfdHlwZSBfX24gPSBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGNv
cHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90
YWcpIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICAg
ICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICAgICArK19fcG9zOwogICAg
ICB9CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lk
IF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGlm
IChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShf
X2ZpcnN0LCBfX2xhc3QpOwogICAgICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikg
ewogICAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsg
ZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9f
cG9zaXRpb24pOwogICAgICAgICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwog
ICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUo
KSArIG1heChzaXplKCksIF9fbik7CiAgICAgICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRf
YWxsb2MoX19sZW4pOwogICAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bv
c2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICAgIF9faSA9IGNvcHkoX19maXJzdCwg
X19sYXN0LCBfX2kpOwogICAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQo
KSwgX19pKTsKICAgICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICAgIF9NX2VuZF9vZl9z
dG9yYWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAg
ICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAg
IH0KCiAgcHVibGljOgogICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9zdGFydDsgfQog
ICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9zdGFydDsgfQogICAg
aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fZmluaXNoOyB9CiAgICBjb25zdF9pdGVyYXRvciBl
bmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0KCiAgICByZXZlcnNlX2l0ZXJhdG9yIHJi
ZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgICBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IoZW5kKCkpOwogICAgfQogICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1
cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv
ciByZW5kKCkgY29uc3QgewogICAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdp
bigpKTsKICAgIH0KCiAgICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlw
ZShlbmQoKSAtIGJlZ2luKCkpOyB9CiAgICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJl
dHVybiBzaXplX3R5cGUoLTEpOyB9CiAgICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdCB7CiAg
ICAgIHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3IoX01fZW5kX29mX3N0b3JhZ2UsIDAp
IC0gYmVnaW4oKSk7CiAgICB9CiAgICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gYmVnaW4o
KSA9PSBlbmQoKTsgfQoKICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pCiAg
ICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQogICAgY29u
c3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1
cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOyB9CgogICAgdm9pZCBfTV9yYW5n
ZV9jaGVjayhzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6
ZSgpKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJ2ZWN0b3I8Ym9vbD4iKTsKICAgIH0K
CiAgICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikKICAgICAgeyBfTV9yYW5nZV9jaGVjayhf
X24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgYXQoc2l6ZV90
eXBlIF9fbikgY29uc3QKICAgICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlz
KVtfX25dOyB9CgogICAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2Eg
PSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpIHt9
CgogICAgdmVjdG9yKHNpemVfdHlwZSBfX24sIGJvb2wgX192YWx1ZSwKICAgICAgICAgICAgICBj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZl
Y3Rvcl9iYXNlPF9BbGxvYz4oX19hKQogICAgewogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAg
ICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9fdmFsdWUgPyB+MCA6
IDApOwogICAgfQoKICAgIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAgICA6IF9C
dmVjdG9yX2Jhc2U8X0FsbG9jPihhbGxvY2F0b3JfdHlwZSgpKQogICAgewogICAgICBfTV9pbml0
aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us
IDApOwogICAgfQoKICAgIHZlY3Rvcihjb25zdCB2ZWN0b3ImIF9feCkgOiBfQnZlY3Rvcl9iYXNl
PF9BbGxvYz4oX194LmdldF9hbGxvY2F0b3IoKSkgewogICAgICBfTV9pbml0aWFsaXplKF9feC5z
aXplKCkpOwogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsKICAg
IH0KCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01faW5pdGlhbGl6
ZV9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwgX190cnVlX3R5cGUpIHsKICAg
ICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9v
Zl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX19maXJz
dCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCiAgICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2ZWN0b3IoX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxs
b2M+KF9fYSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJ
dGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0
Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogICAgfnZlY3RvcigpIHsg
fQoKICAgIHZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvciYgX194KSB7CiAgICAgIGlmICgm
X194ID09IHRoaXMpIHJldHVybiAqdGhpczsKICAgICAgaWYgKF9feC5zaXplKCkgPiBjYXBhY2l0
eSgpKSB7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2luaXRpYWxpemUoX194
LnNpemUoKSk7CiAgICAgIH0KICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBiZWdp
bigpKTsKICAgICAgX01fZmluaXNoID0gYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX3guc2l6
ZSgpKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgoKCgogICAgdm9pZCBfTV9maWxsX2Fz
c2lnbihzaXplX3QgX19uLCBib29sIF9feCkgewogICAgICBpZiAoX19uID4gc2l6ZSgpKSB7CiAg
ICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAw
KTsKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX194KTsKICAgICAgfQogICAg
ICBlbHNlIHsKICAgICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7CiAgICAgICAgZmls
bChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgICAg
fQogICAgfQoKICAgIHZvaWQgYXNzaWduKHNpemVfdCBfX24sIGJvb2wgX194KSB7IF9NX2ZpbGxf
YXNzaWduKF9fbiwgX194KTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICAgIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9y
Pjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3Qs
IF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdl
cj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192
YWwsIF9fdHJ1ZV90eXBlKQogICAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3QpIF9fbiwgKGJv
b2wpIF9fdmFsKTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgogICAgdm9pZCBf
TV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwg
X19mYWxzZV90eXBlKQogICAgICB7IF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KICAgIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0
b3JfdGFnKSB7CiAgICAgIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsKICAgICAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQog
ICAgICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAg
ICAgICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQo
KSwgX19maXJzdCwgX19sYXN0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvcj4KICAgIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRf
aXRlcmF0b3JfdGFnKSB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgICAgIGlmIChfX2xlbiA8IHNpemUoKSkKICAgICAgICBlcmFzZShjb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgYmVnaW4oKSksIGVuZCgpKTsKICAgICAgZWxzZSB7CiAgICAgICAgX0Zv
cndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgc2l6
ZSgpKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsKICAgICAgICBpbnNl
cnQoZW5kKCksIF9fbWlkLCBfX2xhc3QpOwogICAgICB9CiAgICB9CgogICAgdm9pZCByZXNlcnZl
KHNpemVfdHlwZSBfX24pIHsKICAgICAgaWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAg
ICAgX190aHJvd19sZW5ndGhfZXJyb3IoInZlY3Rvcjo6cmVzZXJ2ZSIpOwogICAgICBpZiAodGhp
cy0+Y2FwYWNpdHkoKSA8IF9fbikgewogICAgICAgIF9CaXRfdHlwZSAqIF9fcSA9IF9NX2JpdF9h
bGxvYyhfX24pOwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoYmVnaW4oKSwgZW5kKCksIGl0ZXJh
dG9yKF9fcSwgMCkpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9zdGFydCA9
IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19u
ICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgfQogICAgfQoKICAgIHJlZmVy
ZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgZnJv
bnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQogICAgcmVmZXJlbmNlIGJhY2soKSB7IHJl
dHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyBy
ZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICB2b2lkIHB1c2hfYmFjayhib29sIF9feCkgewogICAg
ICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UpCiAgICAgICAgKl9NX2Zp
bmlzaCsrID0gX194OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194
KTsKICAgIH0KICAgIHZvaWQgc3dhcCh2ZWN0b3I8Ym9vbCwgX0FsbG9jPiYgX194KSB7CiAgICAg
IHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgICAgc3RkOjpzd2FwKF9NX2Zp
bmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwg
X194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICAgIH0KICAgIGl0ZXJhdG9yIGluc2VydChpdGVyYXRv
ciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBkaWZmZXJlbmNlX3R5cGUg
X19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBf
TV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKQogICAgICAgICpfTV9maW5p
c2grKyA9IF9feDsKICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwg
X194KTsKICAgICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bv
cywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3RydWVfdHlwZSkgewogICAgICBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOwog
ICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5z
ZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2luc2VydF9yYW5nZShf
X3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAg
IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGluc2VydChp
dGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2lu
dGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbnNl
cnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAg
ICB9CgogICAgdm9pZCBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5
cGUgX19uLCBib29sIF9feCkgewogICAgICBpZiAoX19uID09IDApIHJldHVybjsKICAgICAgaWYg
KGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bv
c2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAg
IGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIGRpZmZlcmVuY2VfdHlwZShfX24pLCBfX3gp
OwogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgfQogICAg
ICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBf
X24pOwogICAgICAgIF9CaXRfdHlwZSAqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAg
ICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3Es
IDApKTsKICAgICAgICBmaWxsX24oX19pLCBfX24sIF9feCk7CiAgICAgICAgX01fZmluaXNoID0g
Y29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAg
ICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChf
X2xlbiArIF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQ7CiAgICAgICAgX01fc3RhcnQgPSBp
dGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3Ig
X19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAgX01fZmlsbF9pbnNl
cnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOwogICAgfQoKICAgIHZvaWQgcG9wX2JhY2soKSB7IC0t
X01fZmluaXNoOyB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAg
ICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgICBjb3B5KF9fcG9zaXRpb24g
KyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgICAgLS1fTV9maW5pc2g7CiAgICAgIHJldHVy
biBfX3Bvc2l0aW9uOwogICAgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwg
aXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19sYXN0LCBlbmQoKSwg
X19maXJzdCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQogICAgdm9pZCByZXNpemUoc2l6
ZV90eXBlIF9fbmV3X3NpemUsIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGlmIChfX25ld19z
aXplIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19u
ZXdfc2l6ZSksIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwgX19uZXdf
c2l6ZSAtIHNpemUoKSwgX194KTsKICAgIH0KICAgIHZvaWQgZmxpcCgpIHsKICAgICAgZm9yIChf
Qml0X3R5cGUgKiBfX3AgPSBfTV9zdGFydC5fTV9wOyBfX3AgIT0gX01fZW5kX29mX3N0b3JhZ2U7
ICsrX19wKQogICAgICAgICpfX3AgPSB+Kl9fcDsKICAgIH0KCiAgICB2b2lkIGNsZWFyKCkgeyBl
cmFzZShiZWdpbigpLCBlbmQoKSk7IH0KICB9OwoKCnR5cGVkZWYgdmVjdG9yPGJvb2wsIF9fYWxs
b2M+IGJpdF92ZWN0b3I7Cgp9CiMgNzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL3ZlY3RvciIgMiAz
CiMgMyAiU2VnRmF1bHQuY2MiIDIKCmludCBtYWluKCkKewogICAgICAgIHN3aXRjaCAoMCkgewog
ICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB1
cmxfbGlzdDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
fQp9Cg==


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